summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2022-01-18 22:04:56 -0800
committerGitHub <noreply@github.com>2022-01-18 22:04:56 -0800
commit169f56ca2cef4ab46a7d90b16192293e4bb5f394 (patch)
treedda3af6679950518fa7cbfd68e5b8ff86b120df4 /include
parent2d125d40b818c9338d90d29d513c8f93b063b879 (diff)
parentce5a8c47ad45f002421a9997fafa67737e668788 (diff)
Merge pull request #176 from lepelog/J2DAnmLoader
J2DAnmLoader
Diffstat (limited to 'include')
-rw-r--r--include/JSystem/J2DGraph/J2DAnimation.h270
-rw-r--r--include/JSystem/J2DGraph/J2DAnmLoader.h26
-rw-r--r--include/JSystem/J3DGraphAnimator/J3DAnimation.h273
-rw-r--r--include/JSystem/JSupport/JSupport.h13
4 files changed, 463 insertions, 119 deletions
diff --git a/include/JSystem/J2DGraph/J2DAnimation.h b/include/JSystem/J2DGraph/J2DAnimation.h
index 654c997b51..bc4d9a94bc 100644
--- a/include/JSystem/J2DGraph/J2DAnimation.h
+++ b/include/JSystem/J2DGraph/J2DAnimation.h
@@ -10,197 +10,214 @@
class J2DScreen;
+enum J2DAnmKind {
+ KIND_TRANSFORM = 0,
+ KIND_COLOR = 1,
+ KIND_TEX_PATTERN = 2,
+ KIND_TEXTURE_SRT = 4,
+ KIND_TEV_REG = 5,
+ KIND_VISIBILITY = 6,
+ KIND_VTX_COLOR = 7
+};
+
class J2DAnmBase {
public:
+ J2DAnmBase() {
+ mFrame = 0;
+ mFrameMax = 0;
+ }
/* 80053C94 */ virtual ~J2DAnmBase() {}
/* 800569B0 */ virtual void searchUpdateMaterialID(J2DScreen*);
s16 getFrameMax() const { return mFrameMax; }
void setFrame(f32 frame) { mFrame = frame; }
f32 getFrame() const { return mFrame; }
- s32 getKind() const { return mKind; }
+ J2DAnmKind getKind() const { return mKind; }
-private:
/* 0x0 */ // vtable
- /* 0x4 */ u8 field_0x4[2];
+ /* 0x4 */ u8 field_0x4;
+ /* 0x5 */ u8 field_0x5;
/* 0x6 */ s16 mFrameMax;
/* 0x8 */ f32 mFrame;
- /* 0xC */ s32 mKind;
+ /* 0xC */ J2DAnmKind mKind;
}; // Size: 0x10
class J2DAnmVtxColor : public J2DAnmBase {
public:
+ J2DAnmVtxColor() {
+ mKind = KIND_VTX_COLOR;
+ for (s32 i = 0; i < ARRAY_SIZE(mAnmTableNum); i++) {
+ mAnmTableNum[i] = NULL;
+ }
+ for (s32 i = 0; i < ARRAY_SIZE(mVtxColorIndexData); i++) {
+ mVtxColorIndexData[i] = NULL;
+ }
+ }
/* 8030A358 */ virtual ~J2DAnmVtxColor() {}
/* 8030363C */ virtual void getColor(u8, u16, _GXColor*) const;
-private:
/* 0x10 */ u16 mAnmTableNum[2];
- /* 0x14 */ void* mVtxColorIndexData[2];
- /* 0x1C */ void* mVtxColorIndexPointer[2];
+ /* 0x14 */ J3DAnmVtxColorIndexData* mVtxColorIndexData[2];
+ /* 0x1C */ u16* mVtxColorIndexPointer[2];
}; // Size: 0x24
struct J3DTransformInfo;
struct J3DTextureSRTInfo;
-struct J2DAnmVtxColorKeyInfo {
- J3DAnmKeyTableBase mRInfo;
- J3DAnmKeyTableBase mGInfo;
- J3DAnmKeyTableBase mBInfo;
- J3DAnmKeyTableBase mAInfo;
-}; // Size = 0x18
-
class J2DAnmVtxColorKey : public J2DAnmVtxColor {
+public:
+ J2DAnmVtxColorKey() {
+ for (s32 i = 0; i < ARRAY_SIZE(mInfoTable); i++) {
+ mInfoTable[i] = NULL;
+ }
+ }
/* 8030CC20 */ virtual ~J2DAnmVtxColorKey() {}
/* 8030B704 */ virtual void getColor(u8, u16, _GXColor*) const;
-private:
- /* 0x24 */ J2DAnmVtxColorKeyInfo* mInfoTable[2];
+ /* 0x24 */ J3DAnmColorKeyTable* mInfoTable[2];
/* 0x2C */ s16* mRValues;
/* 0x30 */ s16* mGValues;
/* 0x34 */ s16* mBValues;
/* 0x38 */ s16* mAValues;
}; // Size: 0x3C
-struct J2DAnmVtxColorFullInfo {
- /* 0x00 */ u16 mRMaxFrame;
- /* 0x02 */ u16 mROffset;
- /* 0x04 */ u16 mGMaxFrame;
- /* 0x06 */ u16 mGOffset;
- /* 0x08 */ u16 mBMaxFrame;
- /* 0x0A */ u16 mBOffset;
- /* 0x0C */ u16 mAMaxFrame;
- /* 0x0E */ u16 mAOffset;
-}; // Size = 0x10
-
class J2DAnmVtxColorFull : public J2DAnmVtxColor {
public:
+ J2DAnmVtxColorFull() {
+ for (s32 i = 0; i < ARRAY_SIZE(mInfoTable); i++) {
+ mInfoTable[i] = NULL;
+ }
+ }
/* 8030CC8C */ virtual ~J2DAnmVtxColorFull() {}
/* 8030B4C4 */ virtual void getColor(u8, u16, _GXColor*) const;
-private:
- /* 0x24 */ J2DAnmVtxColorFullInfo* mInfoTable[2];
+ /* 0x24 */ J3DAnmColorFullTable* mInfoTable[2];
/* 0x2C */ u8* mRValues;
/* 0x30 */ u8* mGValues;
/* 0x34 */ u8* mBValues;
/* 0x38 */ u8* mAValues;
}; // Size: 0x3C
-struct J2DAnmVisibilityFullInfo {
- u16 _0;
- u16 _2;
-}; // Size = 0x4
-
class J2DAnmVisibilityFull : public J2DAnmBase {
public:
- /* 8030A3B4 */ virtual ~J2DAnmVisibilityFull();
+ J2DAnmVisibilityFull() {
+ field_0x10 = 0;
+ mTable = NULL;
+ field_0x12 = 0;
+ mValues = NULL;
+ mKind = KIND_VISIBILITY;
+ }
+ /* 8030A3B4 */ virtual ~J2DAnmVisibilityFull() {}
/* 8030C048 */ void getVisibility(u16, u8*) const;
-private:
/* 0x10 */ u16 field_0x10;
/* 0x12 */ u16 field_0x12;
- /* 0x14 */ J2DAnmVisibilityFullInfo* field_0x14;
- /* 0x18 */ u8* field_0x18;
+ /* 0x14 */ J3DAnmVisibilityFullTable* mTable;
+ /* 0x18 */ u8* mValues;
}; // Size: 0x1C
class J2DAnmTransform : public J2DAnmBase {
public:
+ J2DAnmTransform(f32* pScaleValues, s16* pRotationValues, f32* pTranslateValues) {
+ mScaleValues = pScaleValues;
+ mRotationValues = pRotationValues;
+ mTranslateValues = pTranslateValues;
+ mKind = KIND_TRANSFORM;
+ }
/* 80184370 */ virtual ~J2DAnmTransform() {}
/* 80191130 */ virtual void getTransform(u16, J3DTransformInfo*) const;
-protected:
/* 0x10 */ f32* mScaleValues;
/* 0x14 */ s16* mRotationValues;
/* 0x18 */ f32* mTranslateValues;
}; // Size: 0x1C
-struct J2DAnmTransformKeyInfo {
- J3DAnmKeyTableBase mScaleInfo;
- J3DAnmKeyTableBase mRotationInfo;
- J3DAnmKeyTableBase mTranslateInfo;
-}; // Size = 0x12
-
class J2DAnmTransformKey : public J2DAnmTransform {
public:
+ J2DAnmTransformKey() : J2DAnmTransform(NULL, NULL, NULL) {
+ field_0x24 = 0;
+ mInfoTable = NULL;
+ }
/* 801959C0 */ virtual ~J2DAnmTransformKey() {}
/* 8030CD7C */ virtual void getTransform(u16 p1, J3DTransformInfo* pInfo) const {
this->calcTransform(getFrame(), p1, pInfo);
}
/* 8030AAFC */ virtual void calcTransform(f32, u16, J3DTransformInfo*) const;
-private:
- /* 0x1C */ u8 field_0x1c[8];
+ /* 0x1C */ u8 field_0x1c[6];
+ /* 0x22 */ s16 field_0x22;
/* 0x24 */ u32 field_0x24;
- /* 0x28 */ J2DAnmTransformKeyInfo* mInfoTable;
+ /* 0x28 */ J3DAnmTransformKeyTable* mInfoTable;
};
-struct J2DAnmTransformFullInfo {
- /* 0x00 */ u16 mScaleMaxFrame;
- /* 0x02 */ u16 mScaleOffset;
- /* 0x04 */ u16 mRotationMaxFrame;
- /* 0x06 */ u16 mRotationOffset;
- /* 0x08 */ u16 mTranslateMaxFrame;
- /* 0x0A */ u16 mTranslateOffset;
-}; // Size = 0xC
-
class J2DAnmTransformFull : public J2DAnmTransform {
public:
+ J2DAnmTransformFull() : J2DAnmTransform(NULL, NULL, NULL) { mTableInfo = NULL; }
/* 8030CDAC */ virtual ~J2DAnmTransformFull() {}
/* 8030A590 */ virtual void getTransform(u16, J3DTransformInfo*) const;
-private:
/* 0x1C */ u8 field_0x1c[6];
/* 0x22 */ u16 field_0x22;
- /* 0x24 */ J2DAnmTransformFullInfo* mTableInfo;
+ /* 0x24 */ J3DAnmTransformFullTable* mTableInfo;
};
-struct J2DAnmTextureSRTKeyInfo {
- J3DAnmKeyTableBase mScaleInfo;
- J3DAnmKeyTableBase mRotationInfo;
- J3DAnmKeyTableBase mTranslationInfo;
-}; // Size = 0x12
-
class J2DAnmTextureSRTKey : public J2DAnmBase {
public:
+ J2DAnmTextureSRTKey() {
+ field_0x10 = 0;
+ field_0x1e = 0;
+ field_0x1c = 0;
+ field_0x1a = 0;
+ mUpdateMaterialNum = 0;
+ mInfoTable = NULL;
+ mTranslationValues = NULL;
+ mScaleValues = NULL;
+ mRotationValues = NULL;
+ field_0x4c = 0;
+ field_0x4a = 0;
+ field_0x48 = 0;
+ field_0x4e = 0;
+ field_0x5c = NULL;
+ field_0x58 = NULL;
+ field_0x50 = NULL;
+ field_0x54 = NULL;
+ field_0x7c = 0;
+ mKind = KIND_TEXTURE_SRT;
+ }
/* 8030B9F0 */ void calcTransform(f32, u16, J3DTextureSRTInfo*) const;
/* 80184274 */ virtual ~J2DAnmTextureSRTKey() {}
/* 8030BC60 */ virtual void searchUpdateMaterialID(J2DScreen*);
u16 getUpdateMaterialNum() const { return mUpdateMaterialNum / 3; }
-private:
/* 0x10 */ int field_0x10;
- /* 0x14 */ J2DAnmTextureSRTKeyInfo* mInfoTable;
+ /* 0x14 */ J3DAnmTransformKeyTable* mInfoTable;
/* 0x18 */ u16 mUpdateMaterialNum;
/* 0x1A */ u16 field_0x1a;
/* 0x1C */ u16 field_0x1c;
+ /* 0x1E */ u16 field_0x1e;
/* 0x20 */ f32* mScaleValues;
/* 0x24 */ s16* mRotationValues;
/* 0x28 */ f32* mTranslationValues;
/* 0x2C */ u8* mUpdateTexMtxID;
/* 0x30 */ u16* mUpdateMaterialID;
/* 0x34 */ JUTNameTab field_0x34;
- /* 0x44 */ u8 field_0x44[4];
+ /* 0x44 */ Vec* field_0x44;
/* 0x48 */ u16 field_0x48;
/* 0x4A */ u16 field_0x4a;
/* 0x4C */ u16 field_0x4c;
/* 0x4E */ u16 field_0x4e;
- /* 0x50 */ int field_0x50;
- /* 0x54 */ int field_0x54;
- /* 0x58 */ int field_0x58;
- /* 0x5C */ int field_0x5c;
- /* 0x60 */ u8 field_0x60[8];
+ /* 0x50 */ f32* field_0x50;
+ /* 0x54 */ s16* field_0x54;
+ /* 0x58 */ f32* field_0x58;
+ /* 0x5C */ J3DAnmTransformKeyTable* field_0x5c;
+ /* 0x60 */ u8* field_0x60;
+ /* 0x64 */ u16* field_0x64;
/* 0x68 */ JUTNameTab field_0x68;
- /* 0x78 */ u8 field_0x78[4];
+ /* 0x78 */ Vec* field_0x78;
/* 0x7C */ int field_0x7c;
};
-struct J2DAnmTexPatternInfo {
- /* 0x00 */ u16 mMaxFrame;
- /* 0x02 */ u16 mOffset;
- /* 0x04 */ u16 _4;
- /* 0x06 */ u16 _6;
-}; // Size = 0x8
-
class J2DAnmTexPattern : public J2DAnmBase {
public:
struct J2DAnmTexPatternTIMGPointer {
@@ -211,6 +228,15 @@ public:
/* 0x4 */ JUTPalette* mPalette;
}; // Size: 0x8
+ J2DAnmTexPattern() {
+ mValues = NULL;
+ mAnmTable = NULL;
+ mKind = KIND_TEX_PATTERN;
+ mUpdateMaterialNum = 0;
+ mUpdaterMaterialID = NULL;
+ mTIMGPtrArray = NULL;
+ }
+
/* 8030BEE8 */ void getTexNo(u16, u16*) const;
/* 8030BF9C */ ResTIMG* getResTIMG(u16) const;
/* 8030BFF0 */ JUTPalette* getPalette(u16) const;
@@ -219,33 +245,46 @@ public:
/* 8030BD10 */ virtual void searchUpdateMaterialID(J2DScreen*);
u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; }
-private:
/* 0x10 */ u16* mValues;
- /* 0x14 */ J2DAnmTexPatternInfo* mAnmTable;
- /* 0x18 */ u8 field_0x18[2];
+ /* 0x14 */ J3DAnmTexPatternFullTable* mAnmTable;
+ /* 0x18 */ u16 field_0x18;
/* 0x1A */ u16 mUpdateMaterialNum;
/* 0x1C */ u16* mUpdaterMaterialID;
/* 0x20 */ JUTNameTab field_0x20;
/* 0x30 */ J2DAnmTexPatternTIMGPointer* mTIMGPtrArray;
};
-struct J2DAnmTevRegKeyInfo {
- /* 0x00 */ J3DAnmKeyTableBase mRTable;
- /* 0x06 */ J3DAnmKeyTableBase mGTable;
- /* 0x0C */ J3DAnmKeyTableBase mBTable;
- /* 0x12 */ J3DAnmKeyTableBase mATable;
- /* 0x18 */ u8 _18[4];
-}; // Size = 0x1C
-
class J2DAnmTevRegKey : public J2DAnmBase {
public:
+ J2DAnmTevRegKey() {
+ mKRegUpdateMaterialNum = 0;
+ mCRegUpdateMaterialNum = 0;
+ field_0x1a = 0;
+ field_0x18 = 0;
+ field_0x16 = 0;
+ field_0x14 = 0;
+ field_0x22 = 0;
+ field_0x20 = 0;
+ field_0x1e = 0;
+ field_0x1c = 0;
+ mKRegUpdateMaterialID = NULL;
+ mCRegUpdateMaterialID = NULL;
+ mCAValues = NULL;
+ mCBValues = NULL;
+ mCGValues = NULL;
+ mCRValues = NULL;
+ mKAValues = NULL;
+ mKBValues = NULL;
+ mKGValues = NULL;
+ mKRValues = NULL;
+ mKind = KIND_TEV_REG;
+ }
/* 8030C0F0 */ void getTevColorReg(u16, _GXColorS10*) const;
/* 8030C3B4 */ void getTevKonstReg(u16, _GXColor*) const;
/* 801841EC */ virtual ~J2DAnmTevRegKey() {}
/* 8030C678 */ virtual void searchUpdateMaterialID(J2DScreen* pScreen);
-private:
/* 0x10 */ u16 mCRegUpdateMaterialNum;
/* 0x12 */ u16 mKRegUpdateMaterialNum;
/* 0x14 */ u16 field_0x14;
@@ -257,11 +296,11 @@ private:
/* 0x20 */ u16 field_0x20;
/* 0x22 */ u16 field_0x22;
/* 0x24 */ u16* mCRegUpdateMaterialID;
- /* 0x28 */ JUTNameTab field_0x28;
+ /* 0x28 */ JUTNameTab mCRegNameTab;
/* 0x38 */ u16* mKRegUpdateMaterialID;
- /* 0x3C */ JUTNameTab field_0x3c;
- /* 0x4C */ J2DAnmTevRegKeyInfo* mAnmCRegKeyTable;
- /* 0x50 */ J2DAnmTevRegKeyInfo* mAnmKRegKeyTable;
+ /* 0x3C */ JUTNameTab mKRegNameTab;
+ /* 0x4C */ J3DAnmCRegKeyTable* mAnmCRegKeyTable;
+ /* 0x50 */ J3DAnmKRegKeyTable* mAnmKRegKeyTable;
/* 0x54 */ s16* mCRValues;
/* 0x58 */ s16* mCGValues;
/* 0x5C */ s16* mCBValues;
@@ -274,12 +313,20 @@ private:
class J2DAnmColor : public J2DAnmBase {
public:
+ J2DAnmColor() {
+ field_0x16 = 0;
+ field_0x14 = 0;
+ field_0x12 = 0;
+ field_0x10 = 0;
+ mUpdateMaterialNum = 0;
+ mUpdateMaterialID = NULL;
+ mKind = KIND_COLOR;
+ }
/* 801842FC */ virtual ~J2DAnmColor() {}
/* 8030AF24 */ virtual void searchUpdateMaterialID(J2DScreen*);
/* 802EB390 */ virtual void getColor(u16, _GXColor*) const;
u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; }
-private:
/* 0x10 */ u16 field_0x10;
/* 0x12 */ u16 field_0x12;
/* 0x14 */ u16 field_0x14;
@@ -289,24 +336,23 @@ private:
/* 0x20 */ JUTNameTab field_0x20;
}; // Size: 0x30
-struct J2DAnmColorKeyInfo {
- J3DAnmKeyTableBase mRInfo;
- J3DAnmKeyTableBase mGInfo;
- J3DAnmKeyTableBase mBInfo;
- J3DAnmKeyTableBase mAInfo;
-}; // Size = 0x18
-
class J2DAnmColorKey : public J2DAnmColor {
public:
+ J2DAnmColorKey() {
+ mRValues = NULL;
+ mGValues = NULL;
+ mBValues = NULL;
+ mAValues = NULL;
+ mInfoTable = NULL;
+ }
/* 80239BE0 */ virtual ~J2DAnmColorKey() {}
/* 8030B200 */ virtual void getColor(u16, _GXColor*) const;
-private:
/* 0x30 */ s16* mRValues;
/* 0x34 */ s16* mGValues;
/* 0x38 */ s16* mBValues;
/* 0x3C */ s16* mAValues;
- /* 0x40 */ J2DAnmColorKeyInfo* mInfoTable;
+ /* 0x40 */ J3DAnmColorKeyTable* mInfoTable;
};
struct J2DAnmColorFullInfo {
@@ -322,15 +368,21 @@ struct J2DAnmColorFullInfo {
class J2DAnmColorFull : public J2DAnmColor {
public:
+ J2DAnmColorFull() {
+ mRValues = NULL;
+ mGValues = NULL;
+ mBValues = NULL;
+ mAValues = NULL;
+ mInfoTable = NULL;
+ }
/* 8030CCF8 */ virtual ~J2DAnmColorFull() {}
/* 8030AFC8 */ virtual void getColor(u16, _GXColor*) const;
-private:
/* 0x30 */ u8* mRValues;
/* 0x34 */ u8* mGValues;
/* 0x38 */ u8* mBValues;
/* 0x3C */ u8* mAValues;
- /* 0x40 */ J2DAnmColorFullInfo* mInfoTable;
+ /* 0x40 */ J3DAnmColorFullTable* mInfoTable;
};
template <typename T>
diff --git a/include/JSystem/J2DGraph/J2DAnmLoader.h b/include/JSystem/J2DGraph/J2DAnmLoader.h
index b6867363da..398623d9c8 100644
--- a/include/JSystem/J2DGraph/J2DAnmLoader.h
+++ b/include/JSystem/J2DGraph/J2DAnmLoader.h
@@ -11,12 +11,24 @@ struct J2DAnmLoaderDataBase {
class J2DAnmLoader {
public:
- virtual void load(void const*) = 0;
+ virtual void* load(void const*) = 0;
virtual void setResource(J2DAnmBase*, void const*) = 0;
- /* 8030A410 */ virtual ~J2DAnmLoader();
+ /* 8030A410 */ virtual ~J2DAnmLoader() {}
+ void* _4;
};
-struct J3DAnmTransformKeyData;
+struct J3DAnmTransformKeyData {
+ /* 0x00 */ u8 _0[0x8];
+ /* 0x08 */ u8 _8;
+ /* 0x09 */ u8 _9;
+ /* 0x0A */ s16 mFrameMax;
+ /* 0x0C */ u16 _C;
+ /* 0x0E */ u8 _E[0x14 - 0xE];
+ /* 0x14 */ s32 mTableOffset;
+ /* 0x18 */ s32 mScaleOffset;
+ /* 0x1C */ s32 mRotationOffset;
+ /* 0x20 */ s32 mTranslateOffset;
+};
struct J3DAnmTextureSRTKeyData;
struct J3DAnmColorKeyData;
struct J3DAnmVtxColorKeyData;
@@ -41,9 +53,11 @@ public:
/* 80309FDC */ void readAnmTevReg(J3DAnmTevRegKeyData const*);
/* 8030A004 */ void setAnmTevReg(J2DAnmTevRegKey*, J3DAnmTevRegKeyData const*);
- /* 80309308 */ virtual void load(void const*);
+ /* 80309308 */ virtual void* load(void const*);
/* 80309414 */ virtual void setResource(J2DAnmBase*, void const*);
/* 803092AC */ virtual ~J2DAnmKeyLoader_v15();
+
+ // /* 0x04 */ void* _4;
};
class J2DAnmFullLoader_v15 : public J2DAnmLoader {
@@ -60,9 +74,11 @@ public:
/* 8030A234 */ void readAnmVtxColor(J3DAnmVtxColorFullData const*);
/* 8030A25C */ void setAnmVtxColor(J2DAnmVtxColorFull*, J3DAnmVtxColorFullData const*);
- /* 80309A80 */ virtual void load(void const*);
+ /* 80309A80 */ virtual void* load(void const*);
/* 80309B8C */ virtual void setResource(J2DAnmBase*, void const*);
/* 80309D04 */ virtual ~J2DAnmFullLoader_v15();
+
+ // void* _4;
};
#endif /* J2DANMLOADER_H */
diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h
index 15ded86a06..77d82db311 100644
--- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h
+++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h
@@ -6,6 +6,274 @@
#include "dolphin/gx/GX.h"
#include "dolphin/types.h"
+struct J3DAnmKeyTableBase {
+ /* 0x00 */ u16 mMaxFrame;
+ /* 0x02 */ u16 mOffset;
+ /* 0x04 */ u16 mType;
+}; // Size = 0x6
+
+struct J3DAnmColorKeyTable {
+ J3DAnmKeyTableBase mRInfo;
+ J3DAnmKeyTableBase mGInfo;
+ J3DAnmKeyTableBase mBInfo;
+ J3DAnmKeyTableBase mAInfo;
+}; // Size = 0x18
+
+struct J3DAnmVtxColorIndexData;
+
+struct J3DAnmColorFullTable {
+ /* 0x00 */ u16 mRMaxFrame;
+ /* 0x02 */ u16 mROffset;
+ /* 0x04 */ u16 mGMaxFrame;
+ /* 0x06 */ u16 mGOffset;
+ /* 0x08 */ u16 mBMaxFrame;
+ /* 0x0A */ u16 mBOffset;
+ /* 0x0C */ u16 mAMaxFrame;
+ /* 0x0E */ u16 mAOffset;
+}; // Size = 0x10
+
+struct J3DAnmVisibilityFullTable {
+ u16 _0;
+ u16 _2;
+}; // Size = 0x4
+
+struct J3DAnmTransformKeyTable {
+ J3DAnmKeyTableBase mScaleInfo;
+ J3DAnmKeyTableBase mRotationInfo;
+ J3DAnmKeyTableBase mTranslateInfo;
+}; // Size = 0x12
+
+struct J3DAnmTransformFullTable {
+ /* 0x00 */ u16 mScaleMaxFrame;
+ /* 0x02 */ u16 mScaleOffset;
+ /* 0x04 */ u16 mRotationMaxFrame;
+ /* 0x06 */ u16 mRotationOffset;
+ /* 0x08 */ u16 mTranslateMaxFrame;
+ /* 0x0A */ u16 mTranslateOffset;
+}; // Size = 0xC
+
+struct J3DAnmTexPatternFullTable {
+ /* 0x00 */ u16 mMaxFrame;
+ /* 0x02 */ u16 mOffset;
+ /* 0x04 */ u16 _4;
+ /* 0x06 */ u16 _6;
+}; // Size = 0x8
+
+struct J3DAnmCRegKeyTable {
+ /* 0x00 */ J3DAnmKeyTableBase mRTable;
+ /* 0x06 */ J3DAnmKeyTableBase mGTable;
+ /* 0x0C */ J3DAnmKeyTableBase mBTable;
+ /* 0x12 */ J3DAnmKeyTableBase mATable;
+ /* 0x18 */ u8 _18[4];
+}; // Size = 0x1C
+
+struct J3DAnmKRegKeyTable {
+ /* 0x00 */ J3DAnmKeyTableBase mRTable;
+ /* 0x06 */ J3DAnmKeyTableBase mGTable;
+ /* 0x0C */ J3DAnmKeyTableBase mBTable;
+ /* 0x12 */ J3DAnmKeyTableBase mATable;
+ /* 0x18 */ u8 _18[4];
+}; // Size = 0x1C
+
+struct J3DAnmDataBlockHeader { // actual name unknown
+ /* 0x0 */ u32 mType;
+ /* 0x4 */ u32 mNextOffset;
+}; // Size = 0x8
+
+struct J3DAnmDataHeader { // actual name unknown
+ /* 0x00 */ u32 mMagic;
+ /* 0x04 */ u32 mType;
+ /* 0x08 */ u8 _8[4];
+ /* 0x0C */ u32 mCount;
+ /* 0x10 */ u8 _10[0x20 - 0x10];
+ /* 0x20 */ J3DAnmDataBlockHeader mFirst;
+};
+
+struct J3DAnmVtxColorFullData {
+ /* 0x00 */ J3DAnmDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x09 */ u8 field_0x9; // padding?
+ /* 0x0A */ s16 mFrameMax;
+ /* 0x0C */ u16 mAnmTableNum[2];
+ /* 0x10 */ u8 field_0x10[0x18 - 0x10];
+ /* 0x18 */ s32 mTableOffsets[2];
+ /* 0x20 */ s32 mVtxColorIndexDataOffsets[2];
+ /* 0x28 */ s32 mVtxColorIndexPointerOffsets[2];
+ /* 0x30 */ s32 mRValuesOffset;
+ /* 0x34 */ s32 mGValuesOffset;
+ /* 0x38 */ s32 mBValuesOffset;
+ /* 0x3C */ s32 mAValuesOffset;
+}; // Size = 0x40
+
+STATIC_ASSERT(sizeof(J3DAnmVtxColorFullData) == 0x40);
+
+struct J3DAnmVisibilityFullData {
+ /* 0x00 */ J3DAnmDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x09 */ u8 field_0x9; // padding?
+ /* 0x0A */ s16 mFrameMax;
+ /* 0x0C */ u16 field_0xc;
+ /* 0x0E */ u16 field_0xe;
+ /* 0x10 */ s32 mTableOffset;
+ /* 0x14 */ s32 mValuesOffset;
+}; // Size = 0x18
+
+STATIC_ASSERT(sizeof(J3DAnmVisibilityFullData) == 0x18);
+
+struct J3DAnmTransformFullData {
+ /* 0x00 */ J3DAnmDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x09 */ u8 field_0x9;
+ /* 0x0A */ s16 mFrameMax;
+ /* 0x0C */ u16 field_0xc;
+ /* 0x0E */ u8 field_0xe[0x14 - 0xe];
+ /* 0x14 */ s32 mTableOffset;
+ /* 0x18 */ s32 mScaleValOffset;
+ /* 0x1C */ s32 mRotValOffset;
+ /* 0x20 */ s32 mTransValOffset;
+}; // Size = 0x24
+
+STATIC_ASSERT(sizeof(J3DAnmTransformFullData) == 0x24);
+
+struct J3DAnmColorKeyData {
+ /* 0x00 */ J3DAnmDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x09 */ u8 field_0x9[3];
+ /* 0x0C */ s16 mFrameMax;
+ /* 0x0E */ u16 mUpdateMaterialNum;
+ /* 0x10 */ u16 field_0x10;
+ /* 0x12 */ u16 field_0x12;
+ /* 0x14 */ u16 field_0x14;
+ /* 0x16 */ u16 field_0x16;
+ /* 0x18 */ s32 mTableOffset; /* Created by retype action */
+ /* 0x1C */ s32 mUpdateMaterialIDOffset;
+ /* 0x20 */ s32 mNameTabOffset; /* Created by retype action */
+ /* 0x24 */ s32 mRValOffset;
+ /* 0x28 */ s32 mGValOffset;
+ /* 0x2C */ s32 mBValOffset;
+ /* 0x30 */ s32 mAValOffset;
+}; // Size = 0x34
+
+STATIC_ASSERT(sizeof(J3DAnmColorKeyData) == 0x34);
+
+struct J3DAnmTextureSRTKeyData {
+ /* 0x00 */ J3DAnmDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x09 */ u8 field_0x9;
+ /* 0x0A */ s16 field_0xa;
+ /* 0x0C */ u16 field_0xc;
+ /* 0x0E */ u16 field_0xe;
+ /* 0x10 */ u16 field_0x10;
+ /* 0x12 */ u16 field_0x12;
+ /* 0x14 */ s32 mTableOffset;
+ /* 0x18 */ s32 mUpdateMatIDOffset;
+ /* 0x1C */ s32 mNameTab1Offset;
+ /* 0x20 */ s32 mUpdateTexMtxIDOffset;
+ /* 0x24 */ s32 unkOffset;
+ /* 0x28 */ s32 mScaleValOffset;
+ /* 0x2C */ s32 mRotValOffset;
+ /* 0x30 */ s32 mTransValOffset;
+ /* 0x34 */ u16 field_0x34;
+ /* 0x36 */ u16 field_0x36;
+ /* 0x38 */ u16 field_0x38;
+ /* 0x3A */ u16 field_0x3a;
+ /* 0x3C */ s32 mInfoTable2Offset;
+ /* 0x40 */ s32 field_0x40;
+ /* 0x44 */ u32 mNameTab2Offset;
+ /* 0x48 */ s32 field_0x48;
+ /* 0x4C */ s32 field_0x4c;
+ /* 0x50 */ s32 field_0x50;
+ /* 0x54 */ s32 field_0x54;
+ /* 0x58 */ s32 field_0x58;
+ /* 0x5C */ s32 field_0x5c;
+}; // Size = 0x60
+
+STATIC_ASSERT(sizeof(J3DAnmTextureSRTKeyData) == 0x60);
+
+struct J3DAnmVtxColorKeyData {
+ /* 0x00 */ J3DAnmDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x09 */ u8 field_0x9;
+ /* 0x0A */ s16 mFrameMax;
+ /* 0x0C */ u16 mAnmTableNum[2];
+ /* 0x10 */ u8 field_0x10[0x18 - 0x10];
+ /* 0x18 */ s32 mTableOffsets[2];
+ /* 0x20 */ s32 mVtxColoIndexDataOffset[2];
+ /* 0x28 */ s32 mVtxColoIndexPointerOffset[2];
+ /* 0x30 */ s32 mRValOffset;
+ /* 0x34 */ s32 mGValOffset;
+ /* 0x38 */ s32 mBValOffset;
+ /* 0x3C */ s32 mAValOffset;
+}; // Size = 0x40
+
+STATIC_ASSERT(sizeof(J3DAnmVtxColorKeyData) == 0x40);
+
+struct J3DAnmTexPatternFullData {
+ /* 0x00 */ J3DAnmDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x09 */ u8 field_0x9;
+ /* 0x0A */ s16 mFrameMax;
+ /* 0x0C */ u16 field_0xc;
+ /* 0x0E */ u16 field_0xe;
+ /* 0x10 */ s32 mTableOffset;
+ /* 0x14 */ s32 mValuesOffset;
+ /* 0x18 */ s32 mUpdaterMaterialIDOffset;
+ /* 0x1C */ s32 mNameTabOffset;
+}; // Size = 0x20
+
+STATIC_ASSERT(sizeof(J3DAnmTexPatternFullData) == 0x20);
+
+struct J3DAnmTevRegKeyData {
+ /* 0x00 */ J3DAnmDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x09 */ u8 field_0x9; // maybe padding
+ /* 0x0A */ s16 mFrameMax;
+ /* 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;
+ /* 0x20 */ s32 mCRegTableOffset;
+ /* 0x24 */ s32 mKRegTableOffset;
+ /* 0x28 */ s32 mCRegUpdateMaterialIDOffset;
+ /* 0x2C */ s32 mKRegUpdateMaterialIDOffset;
+ /* 0x30 */ s32 mCRegNameTabOffset;
+ /* 0x34 */ s32 mKRegNameTabOffset;
+ /* 0x38 */ s32 mCRValuesOffset;
+ /* 0x3C */ s32 mCGValuesOffset;
+ /* 0x40 */ s32 mCBValuesOffset;
+ /* 0x44 */ s32 mCAValuesOffset;
+ /* 0x48 */ s32 mKRValuesOffset;
+ /* 0x4C */ s32 mKGValuesOffset;
+ /* 0x50 */ s32 mKBValuesOffset;
+ /* 0x54 */ s32 mKAValuesOffset;
+}; // Size = 0x58
+
+STATIC_ASSERT(sizeof(J3DAnmTevRegKeyData) == 0x58);
+
+struct J3DAnmColorFullData { /* PlaceHolder Structure */
+ /* 0x00 */ J3DAnmDataBlockHeader mHeader;
+ /* 0x08 */ u8 field_0x8;
+ /* 0x09 */ u8 field_0x9[3];
+ /* 0x0C */ s16 mFrameMax;
+ /* 0x0E */ u16 mUpdateMaterialNum;
+ /* 0x10 */ u8 field_0x10[0x18 - 0x10];
+ /* 0x18 */ s32 mTableOffset;
+ /* 0x1C */ s32 mUpdateMaterialIDOffset;
+ /* 0x20 */ s32 mNameTabOffset;
+ /* 0x24 */ s32 mRValuesOffset;
+ /* 0x28 */ s32 mGValuesOffset;
+ /* 0x2C */ s32 mBValuesOffset;
+ /* 0x30 */ s32 mAValuesOffset;
+}; // Size = 0x34
+
+STATIC_ASSERT(sizeof(J3DAnmColorFullData) == 0x34);
+
class J3DAnmBase {
public:
virtual ~J3DAnmBase();
@@ -75,11 +343,6 @@ class J3DAnmTransformFullWithLerp : public J3DAnmTransformFull {
struct J3DTextureSRTInfo;
struct J3DModelData;
struct J3DMaterialTable;
-struct J3DAnmKeyTableBase {
- /* 0x00 */ u16 mMaxFrame;
- /* 0x02 */ u16 mOffset;
- /* 0x04 */ u16 mType;
-}; // Size = 0x6
class J3DAnmTextureSRTKey : public J3DAnmBase {
public:
diff --git a/include/JSystem/JSupport/JSupport.h b/include/JSystem/JSupport/JSupport.h
new file mode 100644
index 0000000000..7c1d91058a
--- /dev/null
+++ b/include/JSystem/JSupport/JSupport.h
@@ -0,0 +1,13 @@
+#ifndef JSUPPORT_H
+#define JSUPPORT_H
+
+template <typename T>
+T* JSUConvertOffsetToPtr(const void* ptr, const void* offset) {
+ if (ptr == NULL) {
+ return NULL;
+ } else {
+ return (T*)((s32)ptr + (s32)offset);
+ }
+}
+
+#endif