summaryrefslogtreecommitdiff
path: root/include/JSystem
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2024-01-26 00:50:55 +0200
committerGitHub <noreply@github.com>2024-01-25 14:50:55 -0800
commit1ea10fcc63d502aecf0aed02f831dbdb141a1034 (patch)
tree9bb101d4d8d9ea2c1b25616c5e2323e7db62dd15 /include/JSystem
parent4640b758c9cdb3772028bba345df635292133bf1 (diff)
More jstudio work (#2048)
Diffstat (limited to 'include/JSystem')
-rw-r--r--include/JSystem/JGadget/linklist.h49
-rw-r--r--include/JSystem/JGeometry.h31
-rw-r--r--include/JSystem/JStudio/JStudio/ctb.h5
-rw-r--r--include/JSystem/JStudio/JStudio/fvb.h1
-rw-r--r--include/JSystem/JStudio/JStudio/jstudio-control.h55
-rw-r--r--include/JSystem/JStudio/JStudio/jstudio-math.h47
-rw-r--r--include/JSystem/JStudio/JStudio/jstudio-object.h96
-rw-r--r--include/JSystem/JStudio/JStudio/stb-data-parse.h2
-rw-r--r--include/JSystem/JStudio/JStudio/stb.h6
-rw-r--r--include/JSystem/JStudio/JStudio_JAudio2/control.h2
-rw-r--r--include/JSystem/JStudio/JStudio_JParticle/control.h2
-rw-r--r--include/JSystem/JStudio/JStudio_JStage/control.h2
-rw-r--r--include/JSystem/TPosition3.hh46
13 files changed, 305 insertions, 39 deletions
diff --git a/include/JSystem/JGadget/linklist.h b/include/JSystem/JGadget/linklist.h
index 8e8e9178bc..988a53cd1a 100644
--- a/include/JSystem/JGadget/linklist.h
+++ b/include/JSystem/JGadget/linklist.h
@@ -256,28 +256,57 @@ struct TLinkList_factory : public TLinkList<T, I> {
}
};
-template <typename T, int I>
+template <typename T>
struct TEnumerator {
- inline TEnumerator(typename TLinkList<T, I>::const_iterator _current,
- typename TLinkList<T, I>::const_iterator _end)
+ inline TEnumerator(T _current, T _end)
+ : current(_current), end(_end) {}
+
+ bool isEnd() const { return current != end; }
+ operator bool() const { return isEnd(); }
+ T operator*() {
+ T rv = current;
+ ++current;
+ return rv;
+ }
+
+ T current;
+ T end;
+};
+
+// TEnumerator2 should be the same but there are two issues:
+// 1. How to derive the iterator return type for operator* (the debug makes it seem like operator* is called
+// so the return value should be what the iterator points to)
+// 2. Calling the * operator seems to make functions using TEnumerator<T*> not work. See
+// JStudio::TAdaptor::adaptor_setVariableValue_n
+// Perhaps template specialization?
+template <typename Iterator, typename T>
+struct TEnumerator2 {
+ inline TEnumerator2(Iterator _current, Iterator _end)
: current(_current), end(_end) {}
- bool isEnd() const { return current.node == end.node; }
+ bool isEnd() const { return current != end; }
operator bool() const { return isEnd(); }
T& operator*() {
- T& rv = (T&)*current;
+ T& rv = *current;
++current;
return rv;
}
- TLinkList<T, I>::const_iterator current;
- TLinkList<T, I>::const_iterator end;
+ Iterator current;
+ Iterator end;
};
template <typename T, int I>
-struct TContainerEnumerator_const : public TEnumerator<T, I> {
- inline TContainerEnumerator_const(const T* param_0)
- : TEnumerator<T, I>(param_0->begin(), param_0->end()) {}
+struct TContainerEnumerator : public TEnumerator2<TLinkList<T, I>::iterator, T> {
+ inline TContainerEnumerator(TLinkList<T, I>* param_0)
+ : TEnumerator2<TLinkList<T, I>::iterator, T>(param_0->begin(), param_0->end()) {}
+};
+
+
+template <typename T, int I>
+struct TContainerEnumerator_const : public TEnumerator2<TLinkList<T, I>::const_iterator, const T> {
+ inline TContainerEnumerator_const(const TLinkList<T, I>* param_0)
+ : TEnumerator2<TLinkList<T, I>::const_iterator, const T>(param_0->begin(), param_0->end()) {}
};
}; // namespace JGadget
diff --git a/include/JSystem/JGeometry.h b/include/JSystem/JGeometry.h
index 325d4f7432..497af79900 100644
--- a/include/JSystem/JGeometry.h
+++ b/include/JSystem/JGeometry.h
@@ -20,6 +20,28 @@ struct TVec3 {
};
template <>
+struct TVec3<double> {
+ double x, y, z;
+
+ void set(double x_, double y_, double z_) {
+ x = x_;
+ y = y_;
+ z = z_;
+ }
+
+ inline TVec3<double>& operator*=(double b) {
+ scale(b);
+ return *this;
+ }
+
+ void scale(double b) {
+ x *= b;
+ y *= b;
+ z *= b;
+ }
+};
+
+template <>
struct TVec3<s16> {
s16 x, y, z;
@@ -422,6 +444,15 @@ struct TUtil {
}
};
+template<>
+struct TUtil<double> {
+ static inline double epsilon() { return 32.0f * FLT_EPSILON; }
+ static inline double one() { return 1.0; }
+ static inline double atan2(double x, double y) { return atan2(x, y); }
+ static inline double asin(double x) { return asin(x); }
+ static inline double halfPI() { return 1.5707963267948966; }
+};
+
// clang-format on
} // namespace JGeometry
diff --git a/include/JSystem/JStudio/JStudio/ctb.h b/include/JSystem/JStudio/JStudio/ctb.h
index a3ea31c3fd..6e303cd47f 100644
--- a/include/JSystem/JStudio/JStudio/ctb.h
+++ b/include/JSystem/JStudio/JStudio/ctb.h
@@ -14,6 +14,8 @@ struct TObject : public object::TObject_ID {
JUT_ASSERT(82, pData_!=0);
}
/* 80280F18 */ virtual ~TObject() = 0;
+ virtual int getScheme() const = 0;
+ const void* getData() const { return pData_; }
/* 0x08 vtable */
/* 0x0C */ JGadget::TLinkListNode ocObject_;
@@ -111,7 +113,7 @@ struct TObject_TxyzRy : public TObject {
/* 80280F60 */ TObject_TxyzRy(JStudio::ctb::data::TParse_TBlock const&);
/* 80281554 */ virtual ~TObject_TxyzRy();
- /* 80280FBC */ virtual bool getScheme() const;
+ /* 80280FBC */ virtual int getScheme() const;
};
struct TFactory {
@@ -133,6 +135,7 @@ struct TControl {
/* 80281230 */ JStudio::ctb::TObject* getObject_index(u32);
TFactory* getFactory() { return pFactory_; }
+ void setFactory(TFactory* factory) { pFactory_ = factory; }
/* 0x4 */ TFactory* pFactory_;
/* 0x8 */ JGadget::TLinkList<TObject, -12> mList;
diff --git a/include/JSystem/JStudio/JStudio/fvb.h b/include/JSystem/JStudio/JStudio/fvb.h
index a906bbc292..8da397eb49 100644
--- a/include/JSystem/JStudio/JStudio/fvb.h
+++ b/include/JSystem/JStudio/JStudio/fvb.h
@@ -68,6 +68,7 @@ public:
/* 802848D4 */ TObject* getObject_index(u32);
TFactory* getFactory() const { return pFactory; }
+ void setFactory(TFactory* factory) { pFactory = factory; }
private:
/* 0x4 */ TFactory* pFactory;
diff --git a/include/JSystem/JStudio/JStudio/jstudio-control.h b/include/JSystem/JStudio/JStudio/jstudio-control.h
index 26fb5f5d4e..16051b0dcc 100644
--- a/include/JSystem/JStudio/JStudio/jstudio-control.h
+++ b/include/JSystem/JStudio/JStudio/jstudio-control.h
@@ -8,9 +8,11 @@
#include "dolphin/mtx/vec.h"
namespace JStudio {
+struct TObject;
struct TCreateObject {
TCreateObject() {}
/* 80285488 */ virtual ~TCreateObject() = 0;
+ virtual bool create(TObject**, JStudio::stb::data::TParse_TBlock_object const&) = 0;
/* 0x4 */ JGadget::TLinkListNode mNode;
}; // Size: 0xC
@@ -19,7 +21,7 @@ struct TFactory : public stb::TFactory {
TFactory() {}
/* 802854D0 */ virtual ~TFactory();
- /* 802855AC */ virtual void create(JStudio::stb::data::TParse_TBlock_object const&);
+ /* 802855AC */ virtual TObject* create(JStudio::stb::data::TParse_TBlock_object const&);
/* 80285560 */ void appendCreateObject(JStudio::TCreateObject*);
@@ -36,10 +38,10 @@ public:
/* 80285114 */ TControl();
/* 802851AC */ virtual ~TControl();
/* 80285228 */ void setFactory(JStudio::TFactory*);
- /* 80285250 */ void transformOnSet_setOrigin_TxyzRy(Vec const&, f32);
- /* 802852D0 */ void transformOnGet_setOrigin_TxyzRy(Vec const&, f32);
- /* 80285368 */ void transform_setOrigin_ctb(JStudio::ctb::TObject const&);
- /* 8028543C */ void transform_setOrigin_ctb_index(u32);
+ /* 80285250 */ int transformOnSet_setOrigin_TxyzRy(Vec const&, f32);
+ /* 802852D0 */ int transformOnGet_setOrigin_TxyzRy(Vec const&, f32);
+ /* 80285368 */ int transform_setOrigin_ctb(JStudio::ctb::TObject const&);
+ /* 8028543C */ bool transform_setOrigin_ctb_index(u32);
void stb_destroyObject_all() { stb::TControl::destroyObject_all(); }
void fvb_destroyObject_all() { fvb_Control.destroyObject_all(); }
@@ -68,7 +70,36 @@ public:
transform_setOrigin_TxyzRy(xyz, rotY);
}
- void setSecondPerFrame(double param_0) { mSecondPerFrame = param_0; }
+ void setSecondPerFrame(f64 param_0) { mSecondPerFrame = param_0; }
+ f64 getSecondPerFrame() const { return mSecondPerFrame; }
+
+ ctb::TObject* ctb_getObject_index(u32 index) {
+ return ctb_Control.getObject_index(index);
+ }
+
+ fvb::TObject* fvb_getObject(const void* param_1, u32 param_2) {
+ return fvb_Control.getObject(param_1, param_2);
+ }
+
+ fvb::TObject* fvb_getObject_index(u32 index) {
+ return fvb_Control.getObject_index(index);
+ }
+
+ TFunctionValue* getFunctionValue(const void* param_1, u32 param_2) {
+ fvb::TObject* obj = fvb_getObject(param_1, param_2);
+ if (obj == NULL) {
+ return NULL;
+ }
+ return obj->referFunctionValue();
+ }
+
+ TFunctionValue* getFunctionValue_index(u32 index) {
+ fvb::TObject* obj = fvb_getObject_index(index);
+ if (obj == NULL) {
+ return NULL;
+ }
+ return obj->referFunctionValue();
+ }
/* 0x58 */ f64 mSecondPerFrame;
/* 0x60 */ fvb::TControl fvb_Control;
@@ -78,19 +109,21 @@ public:
/* 0x8C */ Vec field_0x8c;
/* 0x98 */ Vec field_0x98;
/* 0xA4 */ f32 mTransformOnSet_RotationY;
- /* 0xA8 */ u8 field_0xa8[4];
+ /* 0xA8 */ f32 field_0xa8;
/* 0xAC */ Mtx mTransformOnSet_Matrix;
/* 0xDC */ Mtx mTransformOnGet_Matrix;
};
struct TParse : public stb::TParse {
/* 8028566C */ TParse(JStudio::TControl*);
- /* 80285844 */ void parseBlock_block_fvb_(JStudio::stb::data::TParse_TBlock const&, u32);
- /* 802858F0 */ void parseBlock_block_ctb_(JStudio::stb::data::TParse_TBlock const&, u32);
+ /* 80285844 */ bool parseBlock_block_fvb_(JStudio::stb::data::TParse_TBlock const&, u32);
+ /* 802858F0 */ bool parseBlock_block_ctb_(JStudio::stb::data::TParse_TBlock const&, u32);
/* 802856A8 */ virtual ~TParse();
- /* 80285708 */ virtual void parseHeader(JStudio::stb::data::TParse_THeader const&, u32);
- /* 802857E4 */ virtual void parseBlock_block(JStudio::stb::data::TParse_TBlock const&, u32);
+ /* 80285708 */ virtual bool parseHeader(JStudio::stb::data::TParse_THeader const&, u32);
+ /* 802857E4 */ virtual bool parseBlock_block(JStudio::stb::data::TParse_TBlock const&, u32);
+
+ TControl* getControl() { return (TControl*)stb::TParse::getControl(); }
};
}; // namespace JStudio
diff --git a/include/JSystem/JStudio/JStudio/jstudio-math.h b/include/JSystem/JStudio/JStudio/jstudio-math.h
index d28aadf119..c28ade8073 100644
--- a/include/JSystem/JStudio/JStudio/jstudio-math.h
+++ b/include/JSystem/JStudio/JStudio/jstudio-math.h
@@ -2,12 +2,59 @@
#define JSTUDIO_MATH_H
#include "dolphin/mtx.h"
+#include "math.h"
namespace JStudio {
namespace math {
/* 802859DC */ void getRotation_xyz(MtxP, f32, f32, f32);
/* 80285B44 */ void getTransformation_SRxyzT(MtxP, Vec const&, Vec const&, Vec const&);
/* 80285BCC */ void getFromTransformation_SRxyzT(Vec*, Vec*, Vec*, CMtxP);
+
+ inline void getRotation_y(Mtx param_0, f32 param_1) {
+ MTXRotRad(param_0, 0x79, DEG_TO_RAD(param_1));
+ }
+
+ inline void getTransformation_RyT(Mtx param_0, const Vec& param_1, f32 param_2) {
+ Mtx amStack_40;
+ getRotation_y(amStack_40, param_2);
+ MTXTransApply(amStack_40, param_0, param_1.x, param_1.y, param_1.z);
+ }
+
+ inline void rotate_y(Mtx param_0, Mtx param_1, f32 param_2) {
+ Mtx afStack_38;
+ getRotation_y(afStack_38, param_2);
+ MTXConcat(afStack_38, param_1, param_0);
+ }
+
+ inline void rotate_xyz(Mtx param_0, Mtx param_1, f32 param_2, f32 param_3, f32 param_4) {
+ Mtx amStack_30;
+ getRotation_xyz(amStack_30, param_2, param_3, param_4);
+ MTXConcat(amStack_30, param_0, param_1);
+ }
+
+ inline void rotate_xyz(Mtx param_0, Mtx param_1, const Vec& param_2) {
+ rotate_xyz(param_0, param_1, param_2.x, param_2.y, param_2.z);
+ }
+
+ inline f32 getFromTransformation_Sn(CMtxP param_1, u32 param_2) {
+ Vec local_18;
+ local_18.x = param_1[0][param_2];
+ local_18.y = param_1[1][param_2];
+ local_18.z = param_1[2][param_2];
+ return VECMag(&local_18);
+ }
+
+ inline void getFromTransformation_S(CMtxP param_1, Vec* param_2) {
+ param_2->x = getFromTransformation_Sn(param_1, 0);
+ param_2->y = getFromTransformation_Sn(param_1, 1);
+ param_2->z = getFromTransformation_Sn(param_1, 2);
+ }
+
+ inline void getFromTransformation_T(CMtxP param_1, Vec* param_2) {
+ param_2->x = param_1[0][3];
+ param_2->y = param_1[1][3];
+ param_2->z = param_1[2][3];
+ }
};
}; // namespace JStudio
diff --git a/include/JSystem/JStudio/JStudio/jstudio-object.h b/include/JSystem/JStudio/JStudio/jstudio-object.h
index cb8bb09bd6..1b8c3a88d9 100644
--- a/include/JSystem/JStudio/JStudio/jstudio-object.h
+++ b/include/JSystem/JStudio/JStudio/jstudio-object.h
@@ -3,12 +3,18 @@
#include "JSystem/JStudio/JStudio/ctb.h"
#include "JSystem/JStudio/JStudio/jstudio-control.h"
+#include "limits.h"
typedef struct _GXColor GXColor;
namespace JStudio {
namespace data {
enum TEOperationData {
+ UNK_0x1 = 0x1,
+ UNK_0x2 = 0x2,
+ UNK_0x3 = 0x3,
+ UNK_0x10 = 0x10,
+ UNK_0x12 = 0x12,
UNK_0x19 = 0x19,
};
};
@@ -16,6 +22,7 @@ namespace data {
struct TAdaptor;
struct TVariableValue {
struct TOutput {
+ virtual void operator()(f32, JStudio::TAdaptor*) const = 0;
/* 80285E0C */ ~TOutput();
};
@@ -25,20 +32,69 @@ struct TVariableValue {
};
/* 80285E54 */ void update(f64, JStudio::TAdaptor*);
- /* 80285EB8 */ void update_immediate_(JStudio::TVariableValue*, f64);
- /* 80285ECC */ void update_time_(JStudio::TVariableValue*, f64);
- /* 80285F08 */ void update_functionValue_(JStudio::TVariableValue*, f64);
+ /* 80285EB8 */ static void update_immediate_(JStudio::TVariableValue*, f64);
+ /* 80285ECC */ static void update_time_(JStudio::TVariableValue*, f64);
+ /* 80285F08 */ static void update_functionValue_(JStudio::TVariableValue*, f64);
/* 8028B568 */ TVariableValue();
+ void setValue_immediate(f32 value) {
+ field_0x8 = &update_immediate_;
+ field_0x4 = 0;
+ field_0xc.val = value;
+ }
+
+ void setValue_none() {
+ field_0x8 = NULL;
+ }
+
+ void setValue_time(f32 value) {
+ field_0x8 = &update_time_;
+ field_0x4 = 0;
+ field_0xc.val = value;
+ }
+
+ void setValue_functionValue(TFunctionValue* value) {
+ field_0x8 = &update_functionValue_;
+ field_0x4 = 0;
+ field_0xc.fv = value;
+ }
+
+ f32 getValue() const { return mValue; }
+
+ template<typename T>
+ T getValue_clamp() const {
+ f32 val = mValue;
+ if (val <= std::numeric_limits<T>::min()) {
+ return std::numeric_limits<T>::min();
+ } else if (val >= std::numeric_limits<T>::max()) {
+ return std::numeric_limits<T>::max();
+ }
+ return val;
+ }
+ u8 getValue_uint8() const { return getValue_clamp<u8>(); }
+
+ void forward(u32 param_0) {
+ if (std::numeric_limits<u32>::max() - field_0x4 <= param_0) {
+ field_0x4 = std::numeric_limits<u32>::max();
+ } else {
+ field_0x4 += param_0;
+ }
+ }
+
static u8 soOutput_none_[4 + 4 /* padding */];
/* 0x00 */ f32 mValue;
/* 0x04 */ u32 field_0x4;
/* 0x08 */ void (*field_0x8)(TVariableValue*, double);
- /* 0x0C */ TFunctionValue* field_0xc;
+ /* 0x0C */ union {
+ TFunctionValue* fv;
+ f32 val;
+ } field_0xc;
/* 0x10 */ TOutput* pOutput_;
}; // Size: 0x14
+typedef void (TObject::*paragraphFunc)(u32, void const*, u32);
+
class TObject : public stb::TObject {
public:
/* 80286864 */ TObject(JStudio::stb::data::TParse_TBlock_object const&, JStudio::TAdaptor*);
@@ -51,6 +107,9 @@ public:
/* 8028680C */ virtual void do_wait(u32);
/* 8028682C */ virtual void do_data(void const*, u32, void const*, u32);
+ TAdaptor* getAdaptor() { return mpAdaptor; }
+ TControl* getControl() { return (TControl*)stb::TObject::getControl(); }
+
void prepareAdaptor() {
if (mpAdaptor != NULL) {
// mpAdaptor->adaptor_setObject_(this);
@@ -75,8 +134,11 @@ public:
};
struct TAdaptor {
- struct TSetVariableValue_immediate {};
-
+ struct TSetVariableValue_immediate {
+ u32 field_0x0;
+ f32 field_0x4;
+ };
+ typedef void (*setVarFunc)(JStudio::TAdaptor*, JStudio::TControl*, u32, void const*, u32);
/* 80285FD0 */ virtual ~TAdaptor() = 0;
/* 80286018 */ virtual void adaptor_do_prepare();
/* 8028601C */ virtual void adaptor_do_begin();
@@ -96,21 +158,33 @@ struct TAdaptor {
/* 802862AC */ void adaptor_setVariableValue_GXColor(u32 const*, GXColor const&);
/* 8028638C */ void adaptor_getVariableValue_GXColor(GXColor*, u32 const*) const;
/* 802864D8 */ void adaptor_updateVariableValue(JStudio::TControl*, u32);
- /* 8028656C */ void adaptor_setVariableValue_VOID_(JStudio::TAdaptor*, JStudio::TControl*, u32,
+ /* 8028656C */ static void adaptor_setVariableValue_VOID_(JStudio::TAdaptor*, JStudio::TControl*, u32,
void const*, u32);
- /* 80286584 */ void adaptor_setVariableValue_IMMEDIATE_(JStudio::TAdaptor*, JStudio::TControl*,
+ /* 80286584 */ static void adaptor_setVariableValue_IMMEDIATE_(JStudio::TAdaptor*, JStudio::TControl*,
u32, void const*, u32);
- /* 802865B0 */ void adaptor_setVariableValue_TIME_(JStudio::TAdaptor*, JStudio::TControl*, u32,
+ /* 802865B0 */ static void adaptor_setVariableValue_TIME_(JStudio::TAdaptor*, JStudio::TControl*, u32,
void const*, u32);
- /* 802865DC */ void adaptor_setVariableValue_FVR_NAME_(JStudio::TAdaptor*, JStudio::TControl*,
+ /* 802865DC */ static void adaptor_setVariableValue_FVR_NAME_(JStudio::TAdaptor*, JStudio::TControl*,
u32, void const*, u32);
- /* 80286648 */ void adaptor_setVariableValue_FVR_INDEX_(JStudio::TAdaptor*, JStudio::TControl*,
+ /* 80286648 */ static void adaptor_setVariableValue_FVR_INDEX_(JStudio::TAdaptor*, JStudio::TControl*,
u32, void const*, u32);
void adaptor_setObject_(const TObject* pObject) {
pObject_ = pObject;
}
+ TVariableValue* adaptor_referVariableValue(u32 param_0) {
+ return &pValue_[param_0];
+ }
+
+ void adaptor_setVariableValue_immediate(u32 param_0, f32 param_1) {
+ adaptor_referVariableValue(param_0)->setValue_immediate(param_1);
+ }
+
+ const TVariableValue* adaptor_getVariableValue(u32 param_0) const {
+ return &pValue_[param_0];
+ }
+
/* 0x4 */ const TObject* pObject_;
/* 0x8 */ TVariableValue* pValue_;
/* 0xC */ u32 u;
diff --git a/include/JSystem/JStudio/JStudio/stb-data-parse.h b/include/JSystem/JStudio/JStudio/stb-data-parse.h
index 3c99071395..1c7a42b48a 100644
--- a/include/JSystem/JStudio/JStudio/stb-data-parse.h
+++ b/include/JSystem/JStudio/JStudio/stb-data-parse.h
@@ -21,6 +21,7 @@ public:
u16 get_byteOrder() const { return get()->byte_order; }
u16 get_version() const { return get()->version; }
u32 get_blockNumber() const { return get()->block_number; }
+ const THeader::Target& get_target() const { return get()->target; }
};
class TParse_TBlock : public TParseData_aligned<4> {
@@ -32,6 +33,7 @@ public:
u32 get_size() const { return get()->size; }
u32 get_type() const { return get()->type; }
+ const void* getContent() const { return ((char*)getRaw()) + 8;}
};
class TParse_TSequence : public TParseData_aligned<4> {
diff --git a/include/JSystem/JStudio/JStudio/stb.h b/include/JSystem/JStudio/JStudio/stb.h
index 0e68ccbf76..dd56bce92a 100644
--- a/include/JSystem/JStudio/JStudio/stb.h
+++ b/include/JSystem/JStudio/JStudio/stb.h
@@ -7,6 +7,7 @@
#include "global.h"
namespace JStudio {
+struct TObject;
namespace stb {
class TControl;
@@ -43,7 +44,7 @@ public:
/* 80288B78 */ void setFlag_operation(u8, int);
/* 80288BD0 */ void reset(void const*);
- /* 80288BE8 */ int forward(u32);
+ /* 80288BE8 */ u8 forward(u32);
/* 80288E18 */ virtual void do_begin();
/* 80288E1C */ virtual void do_end();
/* 80288E20 */ virtual void do_paragraph(u32, void const*, u32);
@@ -110,7 +111,7 @@ public:
TFactory() {}
/* 802895B4 */ virtual ~TFactory();
- /* 802895FC */ virtual TObject* create(data::TParse_TBlock_object const&);
+ /* 802895FC */ virtual JStudio::TObject* create(data::TParse_TBlock_object const&);
/* 80289604 */ virtual void destroy(TObject*);
};
@@ -138,6 +139,7 @@ public:
void resetStatus_() { setStatus_(0); }
bool isSuspended() const { return _54 > 0; }
TFactory* getFactory() const { return pFactory; }
+ void setFactory(TFactory* factory) { pFactory = factory; }
TObject_control& referObject_control() { return mObject_control; }
int getSuspend() const { return _54; }
void setSuspend(s32 suspend) { mObject_control.setSuspend(suspend); }
diff --git a/include/JSystem/JStudio/JStudio_JAudio2/control.h b/include/JSystem/JStudio/JStudio_JAudio2/control.h
index 3a0fd8a481..289dba80fd 100644
--- a/include/JSystem/JStudio/JStudio_JAudio2/control.h
+++ b/include/JSystem/JStudio/JStudio_JAudio2/control.h
@@ -15,7 +15,7 @@ struct TCreateObject : public JStudio::TCreateObject {
}
/* 8028D550 */ virtual ~TCreateObject();
- /* 8028D5B0 */ virtual void create(JStudio::TObject**,
+ /* 8028D5B0 */ virtual bool create(JStudio::TObject**,
JStudio::stb::data::TParse_TBlock_object const&);
/* 8028D624 */ void createObject_JAI_SOUND_(JStudio::stb::data::TParse_TBlock_object const&,
JStudio_JAudio2::TCreateObject*);
diff --git a/include/JSystem/JStudio/JStudio_JParticle/control.h b/include/JSystem/JStudio/JStudio_JParticle/control.h
index 22f8ffc1b8..0b9e4d9cf6 100644
--- a/include/JSystem/JStudio/JStudio_JParticle/control.h
+++ b/include/JSystem/JStudio/JStudio_JParticle/control.h
@@ -14,7 +14,7 @@ struct TCreateObject : public JStudio::TCreateObject {
}
/* 8028E3A0 */ virtual ~TCreateObject();
- /* 8028E400 */ virtual void create(JStudio::TObject**,
+ /* 8028E400 */ virtual bool create(JStudio::TObject**,
JStudio::stb::data::TParse_TBlock_object const&);
/* 8028E474 */ virtual void emitter_create(u32);
/* 8028E4E4 */ virtual void emitter_destroy(JPABaseEmitter*);
diff --git a/include/JSystem/JStudio/JStudio_JStage/control.h b/include/JSystem/JStudio/JStudio_JStage/control.h
index 0ffd4c83fa..0adc2f744c 100644
--- a/include/JSystem/JStudio/JStudio_JStage/control.h
+++ b/include/JSystem/JStudio/JStudio_JStage/control.h
@@ -16,7 +16,7 @@ struct TCreateObject : public JStudio::TCreateObject {
}
/* 80289B00 */ virtual ~TCreateObject();
- /* 80289B60 */ virtual void create(JStudio::TObject**,
+ /* 80289B60 */ virtual bool create(JStudio::TObject**,
JStudio::stb::data::TParse_TBlock_object const&);
/* 0x0C */ const JStage::TSystem* pJSGSystem_;
diff --git a/include/JSystem/TPosition3.hh b/include/JSystem/TPosition3.hh
index 6bde151d05..ef8aba2902 100644
--- a/include/JSystem/TPosition3.hh
+++ b/include/JSystem/TPosition3.hh
@@ -3,6 +3,7 @@
#include "dolphin/mtx.h"
#include "JSystem/JMath/JMath.h"
+#include "JSystem/JGeometry.h"
namespace JGeometry {
@@ -18,13 +19,56 @@ struct SMatrix34C<f32> {
void identity() { MTXIdentity(data); }
typedef f32 ArrType[4];
- void set(const ArrType* src) { JMath::gekko_ps_copy12((f32*)data, (f32*)src); }
+ void set(const ArrType* src) {
+
+ }
operator ArrType*() { return data; }
operator const ArrType*() const { return data; }
};
template <typename T>
+struct SMatrix33C {
+ T data[3][3];
+
+ inline T& ref(int i, int j) {
+ return data[i][j];
+ }
+
+ inline T at(int i, int j) {
+ return data[i][j];
+ }
+
+ inline void set(T param_1, T param_2, T param_3, T param_4, T param_5,
+ T param_6, T param_7, T param_8, T param_9) {
+ ref(0,0) = param_1;
+ ref(0,1) = param_2;
+ ref(0,2) = param_3;
+ ref(1,0) = param_4;
+ ref(1,1) = param_5;
+ ref(1,2) = param_6;
+ ref(2,0) = param_7;
+ ref(2,1) = param_8;
+ ref(2,2) = param_9;
+ }
+
+ inline void getEulerXYZ(TVec3<T>* param_1) {
+ if (at(2, 0) - TUtil<T>::one() >= TUtil<T>::epsilon()) {
+ param_1->set(TUtil<T>::atan2(at(0,1), at(1,1)), -TUtil<T>::halfPI(), 0.0);
+ } else {
+ if (at(2, 0) - TUtil<T>::one() >= TUtil<T>::one() + TUtil<T>::epsilon()) {
+ param_1->set(TUtil<T>::atan2(at(0, 1), at(1, 1)), TUtil<T>::halfPI(),
+ 0.0);
+ } else {
+ param_1->x = TUtil<T>::atan2(at(2, 1), at(2, 2));
+ param_1->z = TUtil<T>::atan2(at(0, 1), at(0, 0));
+ param_1->y = TUtil<T>::asin(at(2, 0));
+ }
+ }
+ }
+};
+
+template <typename T>
struct TMatrix34 : public T {};
template <typename T>