summaryrefslogtreecommitdiff
path: root/include/JSystem/J3DGraphAnimator
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-01-24 04:00:46 -0800
committerGitHub <noreply@github.com>2024-01-24 14:00:46 +0200
commitba44ade90c3f04f5c163278fcadc4361c263acbb (patch)
tree3b7948dc4dcf260ff61230da15ddea595635cbc8 /include/JSystem/J3DGraphAnimator
parentb2310b84b65e62d9f1a82a5b9e52766b325b765f (diff)
more various JSystem work (#2046)
* most of J3DAnmLoader done * J3D / JKernel / JUTConsole work * remove asm * fix build * dol 50%
Diffstat (limited to 'include/JSystem/J3DGraphAnimator')
-rw-r--r--include/JSystem/J3DGraphAnimator/J3DAnimation.h268
-rw-r--r--include/JSystem/J3DGraphAnimator/J3DCluster.h52
-rw-r--r--include/JSystem/J3DGraphAnimator/J3DSkinDeform.h1
3 files changed, 222 insertions, 99 deletions
diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h
index a35eed551d..be944dd686 100644
--- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h
+++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h
@@ -5,6 +5,26 @@
#include "JSystem/JUtility/JUTNameTab.h"
#include "global.h"
+struct JUTDataBlockHeader {
+ /* 0x0 */ u32 mType;
+ /* 0x4 */ u32 mSize;
+
+ const JUTDataBlockHeader* getNext() const { // fake inline
+ return reinterpret_cast<const JUTDataBlockHeader*>(reinterpret_cast<const u8*>(this) +
+ mSize);
+ }
+};
+
+struct JUTDataFileHeader { // actual struct name unknown
+ /* 0x00 */ u32 mMagic;
+ /* 0x04 */ u32 mType;
+ /* 0x08 */ u32 mFileSize;
+ /* 0x0C */ u32 mBlockNum;
+ /* 0x10 */ u8 _10[0x1C - 0x10];
+ /* 0x1C */ u32 mSeAnmOffset; // Only exists for some BCKs
+ /* 0x20 */ JUTDataBlockHeader mFirstBlock;
+};
+
typedef struct _GXColor GXColor;
typedef struct _GXColorS10 GXColorS10;
@@ -21,13 +41,9 @@ struct J3DAnmColorKeyTable {
J3DAnmKeyTableBase mAInfo;
}; // Size = 0x18
-struct J3DAnmVtxColorIndexDataItem {
- u16 count;
- u32 offset;
-};
-
struct J3DAnmVtxColorIndexData {
- J3DAnmVtxColorIndexDataItem field_0x0[4];
+ /* 0x00 */ u16 mNum;
+ /* 0x04 */ void* mpData;
};
struct J3DAnmColorFullTable {
@@ -285,8 +301,55 @@ struct J3DAnmColorFullData { /* PlaceHolder Structure */
STATIC_ASSERT(sizeof(J3DAnmColorFullData) == 0x34);
+struct J3DAnmClusterKeyTable {
+ /* 0x00 */ J3DAnmKeyTableBase mWeightTable;
+};
+
+struct J3DAnmTransformKeyData {
+ /* 0x00 */ JUTDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x09 */ u8 field_0x9;
+ /* 0x0A */ s16 mFrameMax;
+ /* 0x0C */ u16 field_0xc;
+ /* 0x10 */ int field_0x10;
+ /* 0x14 */ s32 mTableOffset;
+ /* 0x18 */ s32 field_0x18;
+ /* 0x1c */ s32 field_0x1c;
+ /* 0x20 */ s32 field_0x20;
+};
+
+struct J3DAnmClusterKeyData {
+ /* 0x00 */ JUTDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x0A */ s16 mFrameMax;
+ /* 0x0C */ s32 field_0xc;
+ /* 0x10 */ s32 mTableOffset;
+ /* 0x14 */ s32 mWeightOffset;
+};
+
+struct J3DAnmClusterFullData {
+ /* 0x00 */ JUTDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x0A */ s16 mFrameMax;
+ /* 0x0C */ s32 field_0xc;
+ /* 0x10 */ s32 mTableOffset;
+ /* 0x14 */ s32 mWeightOffset;
+};
+
+struct J3DAnmClusterFullTable {
+ u16 mMaxFrame;
+ u16 mOffset;
+};
+
class J3DAnmBase {
public:
+ J3DAnmBase() {
+ mAttribute = 0;
+ field_0x5 = 0;
+ mFrameMax = 0;
+ mFrame = 0.0f;
+ }
+
J3DAnmBase(s16 i_frameMax) {
mAttribute = 0;
field_0x5 = 0;
@@ -295,13 +358,13 @@ public:
}
virtual ~J3DAnmBase();
+ virtual s32 getKind() const = 0;
u8 getAttribute() const { return mAttribute; }
s16 getFrameMax() const { return mFrameMax; }
f32 getFrame() const { return mFrame; }
void setFrame(f32 frame) { mFrame = frame; }
-private:
/* 0x4 */ u8 mAttribute;
/* 0x5 */ u8 field_0x5;
/* 0x6 */ s16 mFrameMax;
@@ -316,21 +379,20 @@ public:
/* 8003C77C */ virtual s32 getKind() const;
virtual void getTransform(u16, J3DTransformInfo*) const = 0;
-private:
- /* 0x0C */ f32* field_0xc;
- /* 0x10 */ s16* field_0x10;
- /* 0x14 */ f32* field_0x14;
+ /* 0x0C */ f32* mScaleData;
+ /* 0x10 */ s16* mRotData;
+ /* 0x14 */ f32* mTransData;
/* 0x18 */ s16 field_0x18;
/* 0x1A */ s16 field_0x1a;
- /* 0x1C */ s16 field_0x1c;
+ /* 0x1C */ u16 field_0x1c;
/* 0x1E */ s16 field_0x1e;
}; // Size: 0x20
class J3DAnmTransformKey : public J3DAnmTransform {
public:
J3DAnmTransformKey() : J3DAnmTransform(0, NULL, NULL, NULL) {
- field_0x20 = 0;
- field_0x24 = 0;
+ mDecShift = 0;
+ mAnmTable = 0;
}
/* 80329A34 */ void calcTransform(f32, u16, J3DTransformInfo*) const;
@@ -339,19 +401,19 @@ public:
/* 8003C800 */ virtual s32 getKind() const;
/* 8003C808 */ virtual void getTransform(u16, J3DTransformInfo*) const;
-private:
- /* 0x20 */ int field_0x20;
- /* 0x24 */ int field_0x24;
+ /* 0x20 */ int mDecShift;
+ /* 0x24 */ J3DAnmTransformKeyTable* mAnmTable;
}; // Size: 0x28
class J3DAnmTransformFull : public J3DAnmTransform {
public:
+ J3DAnmTransformFull() : J3DAnmTransform(0, NULL, NULL, NULL) { mAnmTable = NULL; }
+
/* 8032C2AC */ virtual ~J3DAnmTransformFull();
/* 8032C318 */ virtual s32 getKind() const;
/* 80328E90 */ virtual void getTransform(u16, J3DTransformInfo*) const;
-private:
- /* 0x20 */ int field_0x20;
+ /* 0x20 */ J3DAnmTransformFullTable* mAnmTable;
}; // Size: 0x24
class J3DAnmTransformFullWithLerp : public J3DAnmTransformFull {
@@ -380,34 +442,33 @@ public:
}
u16 getUpdateMaterialID(u16 idx) const { return mUpdateMaterialID[idx]; }
- u16 getUpdateMaterialNum() const { return field_0x14 / 3; }
-
-private:
- /* 0x0C */ int field_0xc;
- /* 0x10 */ int field_0x10;
- /* 0x14 */ u16 field_0x14;
- /* 0x16 */ u16 field_0x16;
- /* 0x18 */ u16 field_0x18;
- /* 0x1A */ u16 field_0x1a;
- /* 0x1C */ int field_0x1c;
- /* 0x20 */ int field_0x20;
- /* 0x24 */ int field_0x24;
- /* 0x28 */ u8 mUpdateTexMtxID[4];
+ u16 getUpdateMaterialNum() const { return mTrackNum / 3; }
+
+ /* 0x0C */ int mDecShift;
+ /* 0x10 */ J3DAnmTransformKeyTable* mAnmTable;
+ /* 0x14 */ u16 mTrackNum;
+ /* 0x16 */ u16 mScaleNum;
+ /* 0x18 */ u16 mRotNum;
+ /* 0x1A */ u16 mTransNum;
+ /* 0x1C */ f32* mScaleData;
+ /* 0x20 */ s16* mRotData;
+ /* 0x24 */ f32* mTransData;
+ /* 0x28 */ u8* mUpdateTexMtxID;
/* 0x2C */ u16* mUpdateMaterialID;
- /* 0x30 */ JUTNameTab field_0x30;
- /* 0x40 */ int field_0x40;
+ /* 0x30 */ JUTNameTab mUpdateMaterialName;
+ /* 0x40 */ Vec* mSRTCenter;
/* 0x44 */ u16 field_0x44;
/* 0x46 */ u16 field_0x46;
/* 0x48 */ u16 field_0x48;
/* 0x4A */ u16 field_0x4a;
- /* 0x4C */ int field_0x4c;
- /* 0x50 */ int field_0x50;
- /* 0x54 */ int field_0x54;
- /* 0x58 */ int field_0x58;
- /* 0x5C */ u8 field_0x5c[4];
- /* 0x60 */ u16* field_0x60;
- /* 0x64 */ JUTNameTab field_0x64;
- /* 0x74 */ u8 field_0x74[4];
+ /* 0x4C */ void* field_0x4c;
+ /* 0x50 */ void* field_0x50;
+ /* 0x54 */ void* field_0x54;
+ /* 0x58 */ void* field_0x58;
+ /* 0x5C */ u8* mPostUpdateTexMtxID;
+ /* 0x60 */ u16* mPostUpdateMaterialID;
+ /* 0x64 */ JUTNameTab mPostUpdateMaterialName;
+ /* 0x74 */ Vec* mPostSRTCenter;
/* 0x78 */ u32 mTexMtxCalcType;
}; // Size: 0x7C
@@ -426,8 +487,7 @@ public:
bool isValidUpdateMaterialID(u16 id) const { return mUpdateMaterialID[id] != 0xFFFF; }
J3DAnmTexPatternFullTable* getAnmTable() { return mAnmTable; }
-private:
- /* 0x0C */ void* field_0xc;
+ /* 0x0C */ u16* mTextureIndex;
/* 0x10 */ J3DAnmTexPatternFullTable* mAnmTable;
/* 0x14 */ u16 field_0x14;
/* 0x16 */ u16 mUpdateMaterialNum;
@@ -452,31 +512,30 @@ public:
u16 getCRegUpdateMaterialID(u16 idx) const { return mCRegUpdateMaterialID[idx]; }
u16 getKRegUpdateMaterialID(u16 idx) const { return mKRegUpdateMaterialID[idx]; }
-private:
/* 0x0C */ u16 mCRegUpdateMaterialNum;
/* 0x0E */ u16 mKRegUpdateMaterialNum;
- /* 0x10 */ u16 field_0x10;
- /* 0x12 */ u16 field_0x12;
- /* 0x14 */ u16 field_0x14;
- /* 0x16 */ u16 field_0x16;
- /* 0x18 */ u16 field_0x18;
- /* 0x1A */ u16 field_0x1a;
- /* 0x1C */ u16 field_0x1c;
- /* 0x1E */ u16 field_0x1e;
+ /* 0x10 */ u16 mCRegDataCountR;
+ /* 0x12 */ u16 mCRegDataCountG;
+ /* 0x14 */ u16 mCRegDataCountB;
+ /* 0x16 */ u16 mCRegDataCountA;
+ /* 0x18 */ u16 mKRegDataCountR;
+ /* 0x1A */ u16 mKRegDataCountG;
+ /* 0x1C */ u16 mKRegDataCountB;
+ /* 0x1E */ u16 mKRegDataCountA;
/* 0x20 */ u16* mCRegUpdateMaterialID;
- /* 0x24 */ JUTNameTab field_0x24;
+ /* 0x24 */ JUTNameTab mCRegUpdateMaterialName;
/* 0x34 */ u16* mKRegUpdateMaterialID;
- /* 0x38 */ JUTNameTab field_0x38;
- /* 0x48 */ void* field_0x48;
- /* 0x4C */ void* field_0x4c;
- /* 0x50 */ int field_0x50;
- /* 0x54 */ int field_0x54;
- /* 0x58 */ int field_0x58;
- /* 0x5C */ int field_0x5c;
- /* 0x60 */ int field_0x60;
- /* 0x64 */ int field_0x64;
- /* 0x68 */ int field_0x68;
- /* 0x6C */ int field_0x6c;
+ /* 0x38 */ JUTNameTab mKRegUpdateMaterialName;
+ /* 0x48 */ J3DAnmCRegKeyTable* mAnmCRegKeyTable;
+ /* 0x4C */ J3DAnmKRegKeyTable* mAnmKRegKeyTable;
+ /* 0x50 */ s16* mAnmCRegDataR;
+ /* 0x54 */ s16* mAnmCRegDataG;
+ /* 0x58 */ s16* mAnmCRegDataB;
+ /* 0x5C */ s16* mAnmCRegDataA;
+ /* 0x60 */ s16* mAnmKRegDataR;
+ /* 0x64 */ s16* mAnmKRegDataG;
+ /* 0x68 */ s16* mAnmKRegDataB;
+ /* 0x6C */ s16* mAnmKRegDataA;
}; // Size: 0x70
class J3DAnmColor : public J3DAnmBase {
@@ -492,14 +551,13 @@ public:
bool isValidUpdateMaterialID(u16 id) const { return mUpdateMaterialID[id] != 0xFFFF; }
u16 getUpdateMaterialID(u16 idx) const { return mUpdateMaterialID[idx]; }
-private:
/* 0x0C */ u16 field_0xc;
/* 0x0E */ u16 field_0xe;
/* 0x10 */ u16 field_0x10;
/* 0x12 */ u16 field_0x12;
/* 0x14 */ u16 mUpdateMaterialNum;
/* 0x18 */ u16* mUpdateMaterialID;
- /* 0x1C */ JUTNameTab field_0x1c;
+ /* 0x1C */ JUTNameTab mUpdateMaterialName;
}; // Size: 0x2C
class J3DAnmColorKey : public J3DAnmColor {
@@ -510,12 +568,11 @@ public:
/* 8032BEB0 */ virtual s32 getKind() const;
/* 8032AB54 */ virtual void getColor(u16, _GXColor*) const;
-private:
- /* 0x2C */ int field_0x2c;
- /* 0x30 */ int field_0x30;
- /* 0x34 */ int field_0x34;
- /* 0x38 */ int field_0x38;
- /* 0x3C */ int field_0x3c;
+ /* 0x2C */ s16* field_0x2c;
+ /* 0x30 */ s16* field_0x30;
+ /* 0x34 */ s16* field_0x34;
+ /* 0x38 */ s16* field_0x38;
+ /* 0x3C */ J3DAnmColorKeyTable* field_0x3c;
};
class J3DAnmColorFull : public J3DAnmColor {
@@ -526,12 +583,11 @@ public:
/* 8032BEB0 */ virtual s32 getKind() const;
/* 8032AB54 */ virtual void getColor(u16, _GXColor*) const;
-private:
- /* 0x2C */ int field_0x2c;
- /* 0x30 */ int field_0x30;
- /* 0x34 */ int field_0x34;
- /* 0x38 */ int field_0x38;
- /* 0x3C */ int field_0x3c;
+ /* 0x2C */ u8* mColorR;
+ /* 0x30 */ u8* mColorG;
+ /* 0x34 */ u8* mColorB;
+ /* 0x38 */ u8* mColorA;
+ /* 0x3C */ J3DAnmColorFullTable* mAnmTable;
};
class J3DAnmVtxColor : public J3DAnmBase {
@@ -542,9 +598,8 @@ public:
virtual s32 getKind() const;
virtual void getColor(u8, u16, _GXColor*) const;
-private:
- /* 0x0C */ s16 mAnmTableNum[2];
- /* 0x10 */ int mAnmVtxColorIndexData[2];
+ /* 0x0C */ u16 mAnmTableNum[2];
+ /* 0x10 */ J3DAnmVtxColorIndexData* mAnmVtxColorIndexData[2];
}; // Size: 0x18
class J3DAnmVtxColorKey : public J3DAnmVtxColor {
@@ -555,49 +610,77 @@ public:
/* 8032BFBC */ virtual s32 getKind() const;
/* 8032A53C */ virtual void getColor(u8, u16, _GXColor*) const;
-private:
- /* 0x18 */ int field_0x18[2];
+ /* 0x1C */ J3DAnmColorKeyTable* mpTable[2];
+ /* 0x24 */ s16* mColorR;
+ /* 0x28 */ s16* mColorG;
+ /* 0x2C */ s16* mColorB;
+ /* 0x30 */ s16* mColorA;
};
class J3DAnmVtxColorFull : public J3DAnmVtxColor {
+public:
/* 8032A30C */ J3DAnmVtxColorFull();
/* 8032BFC4 */ virtual ~J3DAnmVtxColorFull();
/* 8032C030 */ virtual s32 getKind() const;
/* 8032A368 */ virtual void getColor(u8, u16, _GXColor*) const;
-private:
- /* 0x18 */ int field_0x18[2];
+ /* 0x1C */ J3DAnmColorFullTable* mpTable[2];
+ /* 0x24 */ u8* mColorR;
+ /* 0x28 */ u8* mColorG;
+ /* 0x2C */ u8* mColorB;
+ /* 0x30 */ u8* mColorA;
};
class J3DAnmCluster : public J3DAnmBase {
public:
+ J3DAnmCluster(s16 param_1, f32* param_2) : J3DAnmBase(param_1) { mWeight = param_2; }
+
/* 8032BCAC */ virtual ~J3DAnmCluster();
/* 8032BF44 */ virtual s32 getKind() const;
/* 8032BF4C */ virtual f32 getWeight(u16) const;
-private:
- /* 0x0C */ f32* field_0xc;
+ /* 0x0C */ f32* mWeight;
}; // Size: 0x10
class J3DAnmClusterFull : public J3DAnmCluster {
public:
+ J3DAnmClusterFull() : J3DAnmCluster(0, 0) { mAnmTable = NULL; }
+
/* 8032BCAC */ virtual ~J3DAnmClusterFull();
/* 8032BF44 */ virtual s32 getKind() const;
/* 8032BF4C */ virtual f32 getWeight(u16) const;
-private:
- /* 0x10 */ int field_0x10;
+ /* 0x10 */ J3DAnmClusterFullTable* mAnmTable;
};
class J3DAnmClusterKey : public J3DAnmCluster {
public:
+ J3DAnmClusterKey() : J3DAnmCluster(0, NULL) { mAnmTable = NULL; }
+
/* 8032C044 */ virtual ~J3DAnmClusterKey();
/* 8032C0B0 */ virtual s32 getKind() const;
/* 8032A218 */ virtual f32 getWeight(u16) const;
-private:
- /* 0x10 */ int field_0x10;
+ /* 0x10 */ J3DAnmClusterKeyTable* mAnmTable;
+};
+
+class J3DAnmVisibilityFull : public J3DAnmBase {
+public:
+ J3DAnmVisibilityFull() : J3DAnmBase(0) {
+ mUpdateMaterialNum = 0;
+ field_0xe = 0;
+ mAnmTable = NULL;
+ mVisibility = NULL;
+ }
+
+ /* 8033979C */ virtual ~J3DAnmVisibilityFull();
+ /* 803397F8 */ virtual s32 getKind() const;
+
+ /* 0x0C */ u16 mUpdateMaterialNum;
+ /* 0x0E */ u16 field_0xe;
+ /* 0x10 */ J3DAnmVisibilityFullTable* mAnmTable;
+ /* 0x14 */ u8* mVisibility;
};
class J3DFrameCtrl {
@@ -639,7 +722,6 @@ public:
mState = 0;
}
-private:
/* 0x04 */ u8 mAttribute;
/* 0x05 */ u8 mState;
/* 0x06 */ s16 mStart;
diff --git a/include/JSystem/J3DGraphAnimator/J3DCluster.h b/include/JSystem/J3DGraphAnimator/J3DCluster.h
index 4db7189f2d..221fd98d99 100644
--- a/include/JSystem/J3DGraphAnimator/J3DCluster.h
+++ b/include/JSystem/J3DGraphAnimator/J3DCluster.h
@@ -13,6 +13,20 @@ class JUTNameTab;
class J3DCluster {
public:
+ void operator=(const J3DCluster& other) {
+ mMaxAngle = other.mMaxAngle;
+ mMinAngle = other.mMinAngle;
+ mClusterKey = other.mClusterKey;
+ mFlags = other.mFlags;
+ mKeyNum = other.mKeyNum;
+ mPosNum = other.mPosNum;
+ field_0x14 = other.field_0x14;
+ field_0x16 = other.field_0x16;
+ field_0x18 = other.field_0x18;
+ mClusterVertex = other.mClusterVertex;
+ mDeformer = other.mDeformer;
+ }
+
J3DDeformer* getDeformer() { return mDeformer; }
void setDeformer(J3DDeformer* deformer) { mDeformer = deformer; }
@@ -30,7 +44,20 @@ public:
/* 0x20 */ J3DDeformer* mDeformer;
};
-struct J3DClusterKey {};
+class J3DClusterKey {
+public:
+ void operator=(const J3DClusterKey& other) {
+ mPosNum = other.mPosNum;
+ mNrmNum = other.mNrmNum;
+ field_0x4 = other.field_0x4;
+ field_0x8 = other.field_0x8;
+ }
+
+ /* 0x00 */ u16 mPosNum;
+ /* 0x02 */ u16 mNrmNum;
+ /* 0x04 */ void* field_0x4;
+ /* 0x08 */ void* field_0x8;
+}; // Size: 0x0C
class J3DDeformData {
public:
@@ -40,11 +67,13 @@ public:
/* 8032E274 */ void deform(J3DModel*);
/* 8032E364 */ void setAnm(J3DAnmCluster*);
- J3DCluster* getClusterPointer(u16 index) {
- return &mClusterPointer[index];
- }
+ J3DCluster* getClusterPointer(u16 index) { return &mClusterPointer[index]; }
+ u16 getClusterNum() const { return mClusterNum; }
+ u16 getClusterKeyNum() const { return mClusterKeyNum; }
+ J3DClusterKey* getClusterKeyPointer(u16 i) { return &mClusterKeyPointer[i]; }
+ f32* getVtxPos() { return mVtxPos; }
+ f32* getVtxNrm() { return mVtxNrm; }
-private:
/* 0x00 */ u16 mClusterNum;
/* 0x02 */ u16 mClusterKeyNum;
/* 0x04 */ u16 mClusterVertexNum;
@@ -59,4 +88,17 @@ private:
/* 0x24 */ JUTNameTab* mClusterKeyName;
}; // Size: 0x28
+class J3DClusterVertex {
+public:
+ void operator=(const J3DClusterVertex& other) {
+ mNum = other.mNum;
+ field_0x4 = other.field_0x4;
+ field_0x8 = other.field_0x8;
+ }
+
+ /* 0x00 */ u16 mNum;
+ /* 0x04 */ u16* field_0x4;
+ /* 0x08 */ u16* field_0x8;
+}; // Size: 0x0C
+
#endif /* J3DCLUSTER_H */
diff --git a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h
index ac68a97489..6adf2c350e 100644
--- a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h
+++ b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h
@@ -80,7 +80,6 @@ public:
void offFlag(u32 i_flag) { mFlags &= ~i_flag; }
void setAnmCluster(J3DAnmCluster* anm) { mAnmCluster = anm; }
-private:
/* 0x00 */ J3DDeformData* mDeformData;
/* 0x04 */ J3DAnmCluster* mAnmCluster;
/* 0x08 */ f32* field_0x8;