Files
tww/include/JSystem/J3DGraphAnimator/J3DAnimation.h
T
Maide c249dfc155 d_a_sk (#843)
* d_a_sk

* PR

---------

Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com>
2025-08-11 19:00:01 -04:00

873 lines
24 KiB
C++

#ifndef J3DANIMATION_H
#define J3DANIMATION_H
#include "JSystem/J3DGraphAnimator/J3DModelData.h"
#include "JSystem/JUtility/JUTNameTab.h"
#include "JSystem/JUtility/JUTDataHeader.h"
struct J3DAnmKeyTableBase {
/* 0x00 */ u16 mMaxFrame;
/* 0x02 */ u16 mOffset;
/* 0x04 */ u16 mType;
}; // Size = 0x6
struct J3DAnmColorKeyTable {
enum Color {
RED = 0,
GREEN = 1,
BLUE = 2,
ALPHA = 3,
};
/* 0x00 */ J3DAnmKeyTableBase mColorInfo[4];
}; // Size = 0x18
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 mMaxFrame;
u16 mOffset;
}; // Size = 0x4
struct J3DAnmTransformKeyTable {
/* 0x00 */ J3DAnmKeyTableBase mScale;
/* 0x06 */ J3DAnmKeyTableBase mRotation;
/* 0x0C */ J3DAnmKeyTableBase mTranslate;
}; // 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 */ u8 mTexNo;
/* 0x06 */ u16 _6;
}; // Size = 0x8
struct J3DAnmCRegKeyTable {
/* 0x00 */ J3DAnmKeyTableBase mRTable;
/* 0x06 */ J3DAnmKeyTableBase mGTable;
/* 0x0C */ J3DAnmKeyTableBase mBTable;
/* 0x12 */ J3DAnmKeyTableBase mATable;
/* 0x18 */ u8 mColorId;
u8 padding[3];
}; // Size = 0x1C
struct J3DAnmKRegKeyTable {
/* 0x00 */ J3DAnmKeyTableBase mRTable;
/* 0x06 */ J3DAnmKeyTableBase mGTable;
/* 0x0C */ J3DAnmKeyTableBase mBTable;
/* 0x12 */ J3DAnmKeyTableBase mATable;
/* 0x18 */ u8 mColorId;
u8 padding[3];
}; // Size = 0x1C
struct J3DAnmClusterFullTable {
u16 mMaxFrame;
u16 mOffset;
};
struct J3DAnmClusterKeyTable {
/* 0x00 */ J3DAnmKeyTableBase mWeightTable;
};
struct J3DAnmVtxColorFullData {
/* 0x00 */ JUTDataBlockHeader mHeader;
/* 0x08 */ u8 field_0x8;
/* 0x09 */ u8 field_0x9; // padding?
/* 0x0A */ s16 mFrameMax;
/* 0x0C */ u16 mAnmTableNum[2];
/* 0x10 */ u16 mIndexNum[2];
/* 0x14 */ u32 field_0x14;
/* 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 */ JUTDataBlockHeader 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 */ JUTDataBlockHeader 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 */ JUTDataBlockHeader 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;
/* 0x1C */ s32 mUpdateMaterialIDOffset;
/* 0x20 */ s32 mNameTabOffset;
/* 0x24 */ s32 mRValOffset;
/* 0x28 */ s32 mGValOffset;
/* 0x2C */ s32 mBValOffset;
/* 0x30 */ s32 mAValOffset;
}; // Size = 0x34
STATIC_ASSERT(sizeof(J3DAnmColorKeyData) == 0x34);
struct J3DAnmTextureSRTKeyData {
/* 0x00 */ JUTDataBlockHeader 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 */ JUTDataBlockHeader mHeader;
/* 0x08 */ u8 field_0x8;
/* 0x09 */ u8 field_0x9;
/* 0x0A */ s16 mFrameMax;
/* 0x0C */ u16 mAnmTableNum[2];
/* 0x10 */ u32 mIndexNum[2];
/* 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(J3DAnmVtxColorKeyData) == 0x40);
struct J3DAnmTexPatternFullData {
/* 0x00 */ JUTDataBlockHeader 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 mUpdateMaterialIDOffset;
/* 0x1C */ s32 mNameTabOffset;
}; // Size = 0x20
STATIC_ASSERT(sizeof(J3DAnmTexPatternFullData) == 0x20);
struct J3DAnmTevRegKeyData {
/* 0x00 */ JUTDataBlockHeader 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 */ JUTDataBlockHeader 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);
struct J3DAnmClusterFullData {
/* 0x00 */ JUTDataBlockHeader mHeader;
/* 0x08 */ u8 field_0x8;
/* 0x0A */ s16 mFrameMax;
/* 0x0C */ s32 field_0xc;
/* 0x10 */ s32 mTableOffset;
/* 0x14 */ s32 mWeightOffset;
};
struct J3DAnmTransformKeyData {
/* 0x00 */ JUTDataBlockHeader mHeader;
/* 0x08 */ u8 mAttribute;
/* 0x09 */ u8 mDecShift;
/* 0x0A */ s16 mFrameMax;
/* 0x0C */ u16 field_0xc;
/* 0x10 */ int field_0x10;
/* 0x14 */ s32 mTableOffset;
/* 0x18 */ s32 mScaleOffset;
/* 0x1c */ s32 mRotOffset;
/* 0x20 */ s32 mTransOffset;
};
struct J3DAnmClusterKeyData {
/* 0x00 */ JUTDataBlockHeader mHeader;
/* 0x08 */ u8 field_0x8;
/* 0x0A */ s16 mFrameMax;
/* 0x0C */ s32 field_0xc;
/* 0x10 */ s32 mTableOffset;
/* 0x14 */ s32 mWeightOffset;
};
class J3DAnmBase {
public:
J3DAnmBase(s16 i_frameMax) {
mFrame = 0.0f;
mFrameMax = i_frameMax;
}
virtual ~J3DAnmBase() {}
u8 getAttribute() const { return mAttribute; }
s16 getFrameMax() const { return mFrameMax; }
f32 getFrame() const { return mFrame; }
void setFrame(f32 frame) { mFrame = frame; }
s32 getKind() const { return mKind; }
protected:
/* 0x4 */ u8 mAttribute;
/* 0x5 */ u8 field_0x5;
/* 0x6 */ s16 mFrameMax;
/* 0x8 */ f32 mFrame;
/* 0xC */ s32 mKind;
}; // Size: 0x10
class J3DAnmTransform : public J3DAnmBase {
public:
J3DAnmTransform(s16 i_frameMax, f32* scaleData, s16* rotData, f32* transData) : J3DAnmBase(i_frameMax) {
mScaleData = scaleData;
mRotData = rotData;
mTransData = transData;
mKind = 0;
}
virtual ~J3DAnmTransform() {}
virtual void getTransform(u16, J3DTransformInfo*) const {}
protected:
/* 0x10 */ f32* mScaleData;
/* 0x14 */ s16* mRotData;
/* 0x18 */ f32* mTransData;
/* 0x1C */ s16 field_0x1c;
/* 0x1E */ s16 field_0x1e;
/* 0x20 */ u16 field_0x20;
/* 0x22 */ u16 field_0x22;
}; // Size: 0x24
// BCK
class J3DAnmTransformKey : public J3DAnmTransform {
public:
friend class J3DAnmKeyLoader_v15;
J3DAnmTransformKey() : J3DAnmTransform(0, NULL, NULL, NULL) {
mDecShift = 0;
mAnmTable = NULL;
}
virtual void calcTransform(f32, u16, J3DTransformInfo*) const;
virtual ~J3DAnmTransformKey() {}
virtual void getTransform(u16 idx, J3DTransformInfo* dst) const { calcTransform(getFrame(), idx, dst); }
private:
/* 0x24 */ int mDecShift;
/* 0x28 */ J3DAnmTransformKeyTable* mAnmTable;
}; // Size: 0x2C
// BCA
class J3DAnmTransformFull : public J3DAnmTransform {
public:
friend class J3DAnmFullLoader_v15;
J3DAnmTransformFull() : J3DAnmTransform(0, NULL, NULL, NULL) {
mAnmTable = NULL;
}
virtual ~J3DAnmTransformFull() {}
virtual void getTransform(u16, J3DTransformInfo*) const;
private:
/* 0x24 */ J3DAnmTransformFullTable* mAnmTable;
}; // Size: 0x28
struct J3DTextureSRTInfo;
class J3DModelData;
class J3DMaterialTable;
// BTK
class J3DAnmTextureSRTKey : public J3DAnmBase {
public:
friend class J3DAnmKeyLoader_v15;
J3DAnmTextureSRTKey() : J3DAnmBase(0) {
mDecShift = 0;
mTransNum = 0;
mRotNum = 0;
mScaleNum = 0;
mTrackNum = 0;
mAnmTable = NULL;
mTransData = NULL;
mScaleData = NULL;
mRotData = NULL;
field_0x50 = 0;
field_0x4e = 0;
field_0x4c = 0;
mPostTrackNum = 0;
field_0x64 = NULL;
field_0x5c = NULL;
field_0x54 = NULL;
field_0x58 = NULL;
mTexMtxCalcType = 0;
mKind = 4;
}
void calcTransform(f32, u16, J3DTextureSRTInfo*) const;
void searchUpdateMaterialID(J3DMaterialTable*);
void searchUpdateMaterialID(J3DModelData*);
virtual ~J3DAnmTextureSRTKey() {}
void getTransform(u16 idx, J3DTextureSRTInfo* pSRTInfo) const {
calcTransform(getFrame(), idx, pSRTInfo);
}
u16 getUpdateMaterialID(u16 idx) const {
J3D_ASSERT(1029, idx < mTrackNum / 3, "Error : range over.");
return mUpdateMaterialID[idx];
}
u16 getUpdateMaterialNum() const { return mTrackNum / 3; }
JUTNameTab * getUpdateMaterialName() { return &mUpdateMaterialName; }
u16 getUpdateTexMtxID(u16 idx) const {
J3D_ASSERT(1017, idx < (mTrackNum / 3), "Error : range over.");
return mUpdateTexMtxID[idx];
}
u16 getPostUpdateMaterialID(u16 idx) const { return mPostUpdateMaterialID[idx]; }
u16 getPostUpdateMaterialNum() const { return mPostTrackNum / 3; }
JUTNameTab * getPostUpdateMaterialName() { return &mPostUpdateMaterialName; }
u16 getPostUpdateTexMtxID(u16 idx) const { return mPostUpdateTexMtxID[idx]; }
u32 getTexMtxCalcType() { return mTexMtxCalcType; }
Vec& getSRTCenter(u16 idx) {
J3D_ASSERT(1047, idx < mTrackNum / 3, "Error : range over.");
return mSRTCenter[idx];
}
private:
/* 0x10 */ int mDecShift;
/* 0x14 */ u16 mTrackNum;
/* 0x18 */ J3DAnmTransformKeyTable* mAnmTable;
/* 0x1C */ u16 mScaleNum;
/* 0x1E */ u16 mRotNum;
/* 0x20 */ u16 mTransNum;
/* 0x24 */ f32* mScaleData;
/* 0x28 */ s16* mRotData;
/* 0x2C */ f32* mTransData;
/* 0x30 */ u8* mUpdateTexMtxID;
/* 0x34 */ u16* mUpdateMaterialID;
/* 0x38 */ JUTNameTab mUpdateMaterialName;
/* 0x48 */ Vec* mSRTCenter;
/* 0x4C */ short field_0x4c;
/* 0x4E */ short field_0x4e;
/* 0x50 */ short field_0x50;
/* 0x54 */ void * field_0x54;
/* 0x58 */ void * field_0x58;
/* 0x5C */ void * field_0x5c;
/* 0x60 */ u16 mPostTrackNum;
/* 0x64 */ void * field_0x64;
/* 0x68 */ u8* mPostUpdateTexMtxID;
/* 0x6C */ u16* mPostUpdateMaterialID;
/* 0x70 */ JUTNameTab mPostUpdateMaterialName;
/* 0x80 */ Vec* mPostSRTCenter;
/* 0x84 */ u32 mTexMtxCalcType;
}; // Size: 0x88
STATIC_ASSERT(sizeof(J3DAnmTextureSRTKey) == 0x88);
// BVA
class J3DAnmVisibilityFull : public J3DAnmBase {
public:
friend class J3DAnmFullLoader_v15;
J3DAnmVisibilityFull() : J3DAnmBase(0) {
mUpdateMaterialNum = 0;
mAnmTable = NULL;
field_0x12 = 0;
mVisibility = NULL;
mKind = 6;
}
void getVisibility(u16, u8*) const;
virtual ~J3DAnmVisibilityFull() {}
J3DAnmVisibilityFullTable * getAnmTable() const { return mAnmTable; }
private:
/* 0x10 */ u16 mUpdateMaterialNum;
/* 0x12 */ u16 field_0x12;
/* 0x14 */ J3DAnmVisibilityFullTable * mAnmTable;
/* 0x18 */ u8* mVisibility;
}; // Size: 0x1C
// BTP
class J3DAnmTexPattern : public J3DAnmBase {
public:
friend class J3DAnmFullLoader_v15;
J3DAnmTexPattern() : J3DAnmBase(0) {
mTextureIndex = NULL;
mAnmTable = NULL;
mKind = 2;
mUpdateMaterialNum = 0;
mUpdateMaterialID = NULL;
}
void getTexNo(u16, u16*) const;
void searchUpdateMaterialID(J3DMaterialTable*);
void searchUpdateMaterialID(J3DModelData*);
u16 getUpdateMaterialID(u16 idx) const {
J3D_ASSERT(2288, idx < mUpdateMaterialNum, "Error : range over.");
return mUpdateMaterialID[idx];
}
u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; }
JUTNameTab * getUpdateMaterialName() { return &mUpdateMaterialName; }
J3DAnmTexPatternFullTable * getAnmTable() const { return mAnmTable; }
virtual ~J3DAnmTexPattern() {}
private:
/* 0x10 */ u16* mTextureIndex;
/* 0x14 */ J3DAnmTexPatternFullTable* mAnmTable;
/* 0x18 */ u16 field_0x18;
/* 0x1A */ u16 mUpdateMaterialNum;
/* 0x1C */ u16* mUpdateMaterialID;
/* 0x20 */ JUTNameTab mUpdateMaterialName;
}; // Size: 0x2C
// BRK
class J3DAnmTevRegKey : public J3DAnmBase {
public:
friend class J3DAnmKeyLoader_v15;
J3DAnmTevRegKey() : J3DAnmBase(0) {
mKRegUpdateMaterialNum = 0;
mCRegUpdateMaterialNum = 0;
mCRegDataCountA = 0;
mCRegDataCountB = 0;
mCRegDataCountG = 0;
mCRegDataCountR = 0;
mKRegDataCountA = 0;
mKRegDataCountB = 0;
mKRegDataCountG = 0;
mKRegDataCountR = 0;
mKRegUpdateMaterialID = NULL;
mCRegUpdateMaterialID = NULL;
mAnmCRegDataA = NULL;
mAnmCRegDataB = NULL;
mAnmCRegDataG = NULL;
mAnmCRegDataR = NULL;
mAnmKRegDataA = NULL;
mAnmKRegDataB = NULL;
mAnmKRegDataG = NULL;
mAnmKRegDataR = NULL;
mKind = 5;
}
void getTevColorReg(u16, GXColorS10*) const;
void getTevKonstReg(u16, GXColor*) const;
void searchUpdateMaterialID(J3DMaterialTable*);
void searchUpdateMaterialID(J3DModelData*);
virtual ~J3DAnmTevRegKey() {}
u16 getCRegUpdateMaterialNum() const { return mCRegUpdateMaterialNum; }
u16 getKRegUpdateMaterialNum() const { return mKRegUpdateMaterialNum; }
u16 getCRegUpdateMaterialID(u16 idx) const {
J3D_ASSERT(2100, idx < mCRegUpdateMaterialNum, "Error : range over.");
return mCRegUpdateMaterialID[idx];
}
u16 getKRegUpdateMaterialID(u16 idx) const {
J3D_ASSERT(2140, idx < mKRegUpdateMaterialNum, "Error : range over.");
return mKRegUpdateMaterialID[idx];
}
JUTNameTab * getCRegUpdateMaterialName() { return &mCRegUpdateMaterialName; }
JUTNameTab * getKRegUpdateMaterialName() { return &mKRegUpdateMaterialName; }
J3DAnmCRegKeyTable * getAnmCRegKeyTable() const { return mAnmCRegKeyTable; }
J3DAnmKRegKeyTable * getAnmKRegKeyTable() const { return mAnmKRegKeyTable; }
private:
/* 0x10 */ u16 mCRegUpdateMaterialNum;
/* 0x12 */ u16 mKRegUpdateMaterialNum;
/* 0x14 */ u16 mCRegDataCountR;
/* 0x16 */ u16 mCRegDataCountG;
/* 0x18 */ u16 mCRegDataCountB;
/* 0x1A */ u16 mCRegDataCountA;
/* 0x1C */ u16 mKRegDataCountR;
/* 0x1E */ u16 mKRegDataCountG;
/* 0x20 */ u16 mKRegDataCountB;
/* 0x22 */ u16 mKRegDataCountA;
/* 0x24 */ u16* mCRegUpdateMaterialID;
/* 0x28 */ JUTNameTab mCRegUpdateMaterialName;
/* 0x38 */ u16* mKRegUpdateMaterialID;
/* 0x3C */ JUTNameTab mKRegUpdateMaterialName;
/* 0x4C */ J3DAnmCRegKeyTable* mAnmCRegKeyTable;
/* 0x50 */ J3DAnmKRegKeyTable* mAnmKRegKeyTable;
/* 0x54 */ s16 * mAnmCRegDataR;
/* 0x58 */ s16 * mAnmCRegDataG;
/* 0x5C */ s16 * mAnmCRegDataB;
/* 0x60 */ s16 * mAnmCRegDataA;
/* 0x64 */ s16 * mAnmKRegDataR;
/* 0x68 */ s16 * mAnmKRegDataG;
/* 0x6C */ s16 * mAnmKRegDataB;
/* 0x70 */ s16 * mAnmKRegDataA;
}; // Size: 0x74
// BPK
class J3DAnmColor : public J3DAnmBase {
public:
J3DAnmColor() : J3DAnmBase(0) {
field_0x16 = 0;
field_0x14 = 0;
field_0x12 = 0;
field_0x10 = 0;
mUpdateMaterialNum = 0;
mUpdateMaterialID = 0;
mKind = 1;
}
void searchUpdateMaterialID(J3DMaterialTable*);
void searchUpdateMaterialID(J3DModelData*);
virtual ~J3DAnmColor() {}
virtual void getColor(u16, GXColor*) const {}
u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; }
bool isValidUpdateMaterialID(u16 id) const { return mUpdateMaterialID[id] != 0xFFFF; }
u16 getUpdateMaterialID(u16 idx) const {
J3D_ASSERT(1578, idx < mUpdateMaterialNum, "Error : range over.");
return mUpdateMaterialID[idx];
}
JUTNameTab * getUpdateMaterialName() { return &mUpdateMaterialName; }
protected:
/* 0x10 */ u16 field_0x10;
/* 0x12 */ u16 field_0x12;
/* 0x14 */ u16 field_0x14;
/* 0x16 */ u16 field_0x16;
/* 0x18 */ u16 mUpdateMaterialNum;
/* 0x1C */ u16* mUpdateMaterialID;
/* 0x20 */ JUTNameTab mUpdateMaterialName;
}; // Size: 0x30
class J3DAnmColorKey : public J3DAnmColor {
public:
friend class J3DAnmKeyLoader_v15;
J3DAnmColorKey() {
mColorR = NULL;
mColorG = NULL;
mColorB = NULL;
mColorA = NULL;
mTable = NULL;
}
virtual ~J3DAnmColorKey() {}
virtual void getColor(u16, GXColor*) const;
private:
/* 0x30 */ s16* mColorR;
/* 0x34 */ s16* mColorG;
/* 0x38 */ s16* mColorB;
/* 0x3C */ s16* mColorA;
/* 0x40 */ J3DAnmColorKeyTable* mTable;
};
class J3DAnmColorFull : public J3DAnmColor {
public:
friend class J3DAnmFullLoader_v15;
J3DAnmColorFull() {
mColorR = NULL;
mColorG = NULL;
mColorB = NULL;
mColorA = NULL;
mAnmTable = NULL;
}
virtual ~J3DAnmColorFull() {}
virtual void getColor(u16, GXColor*) const;
J3DAnmColorFullTable * getAnmTable() const { return mAnmTable; }
private:
/* 0x30 */ u8 * mColorR;
/* 0x34 */ u8 * mColorG;
/* 0x38 */ u8 * mColorB;
/* 0x3C */ u8 * mColorA;
/* 0x40 */ J3DAnmColorFullTable * mAnmTable;
};
class J3DAnmVtxColorIndexData {
public:
/* 0x00 */ u16 mNum;
/* 0x04 */ void* mpData;
};
class J3DAnmVtxColor : public J3DAnmBase {
public:
J3DAnmVtxColor() : J3DAnmBase(0) {
mKind = 7;
for (int i = 0; i < 2; i++) {
mAnmTableNum[i] = 0;
}
for (int i = 0; i < 2; i++) {
mAnmVtxColorIndexData[i] = NULL;
}
}
virtual ~J3DAnmVtxColor() {}
virtual void getColor(u8, u16, GXColor*) const {}
protected:
/* 0x10 */ u16 mAnmTableNum[2];
/* 0x14 */ J3DAnmVtxColorIndexData* mAnmVtxColorIndexData[2];
}; // Size: 0x1C
class J3DAnmVtxColorKey : public J3DAnmVtxColor {
public:
friend class J3DAnmKeyLoader_v15;
J3DAnmVtxColorKey() {
for (int i = 0; i < 2; i++) {
mpTable[i] = NULL;
}
}
virtual ~J3DAnmVtxColorKey() {}
virtual void getColor(u8, u16, GXColor*) const;
J3DAnmColorKeyTable * getAnmTable(u8 idx) const { return mpTable[idx]; }
protected:
/* 0x1C */ J3DAnmColorKeyTable* mpTable[2];
/* 0x24 */ s16* mColorR;
/* 0x28 */ s16* mColorG;
/* 0x2C */ s16* mColorB;
/* 0x30 */ s16* mColorA;
};
class J3DAnmVtxColorFull : public J3DAnmVtxColor {
public:
friend class J3DAnmFullLoader_v15;
J3DAnmVtxColorFull() {
for (int i = 0; i < 2; i++) {
mpTable[i] = NULL;
}
}
virtual ~J3DAnmVtxColorFull() {}
virtual void getColor(u8, u16, GXColor*) const;
J3DAnmColorFullTable * getAnmTable(u8 idx) const { return mpTable[idx]; }
protected:
/* 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(0) {
mWeight = param_2;
mKind = param_1;
}
virtual ~J3DAnmCluster() {}
virtual f32 getWeight(u16) const { return 1.0f; }
protected:
/* 0x10 */ f32* mWeight;
}; // Size: 0x14
// BLA
class J3DAnmClusterFull : public J3DAnmCluster {
public:
friend class J3DAnmFullLoader_v15;
J3DAnmClusterFull() : J3DAnmCluster(3, 0) {
mAnmTable = NULL;
}
virtual ~J3DAnmClusterFull() {}
virtual f32 getWeight(u16) const;
J3DAnmClusterFullTable * getAnmTable() const { return mAnmTable; }
private:
/* 0x14 */ J3DAnmClusterFullTable * mAnmTable;
};
// BLK
class J3DAnmClusterKey : public J3DAnmCluster {
public:
friend class J3DAnmKeyLoader_v15;
J3DAnmClusterKey() : J3DAnmCluster(3, NULL) {
mAnmTable = NULL;
}
virtual ~J3DAnmClusterKey() {}
virtual f32 getWeight(u16) const;
private:
/* 0x14 */ J3DAnmClusterKeyTable* mAnmTable;
};
class J3DFrameCtrl {
public:
enum Attribute_e {
/* -1 */ EMode_NULL = -1,
/* 0x0 */ EMode_NONE,
/* 0x1 */ EMode_RESET,
/* 0x2 */ EMode_LOOP,
/* 0x3 */ EMode_REVERSE,
/* 0x4 */ EMode_LOOP_REVERSE,
};
enum State_e {
/* 0x1 */ STATE_STOP_E = 0x1,
/* 0x2 */ STATE_LOOP_E = 0x2,
};
J3DFrameCtrl() { this->init(0); }
void init(s16 end);
BOOL checkPass(f32);
void update();
virtual ~J3DFrameCtrl() {}
u8 getAttribute() const { return mAttribute; }
void setAttribute(u8 attr) { mAttribute = attr; }
u8 getState() const { return mState; }
bool checkState(u8 state) const { return mState & state ? true : false; }
s16 getStart() const { return mStart; }
void setStart(s16 start) {
mStart = start;
mFrame = start;
}
s16 getEnd() const { return mEnd; }
void setEnd(s16 end) { mEnd = end; }
s32 getLoop() const { return mLoop; }
void setLoop(s16 loop) { mLoop = loop; }
f32 getRate() const { return mRate; }
void setRate(f32 rate) { mRate = rate; }
f32 getFrame() const { return mFrame; }
void setFrame(f32 frame) { mFrame = frame; }
private:
/* 0x04 */ u8 mAttribute;
/* 0x05 */ u8 mState;
/* 0x06 */ s16 mStart;
/* 0x08 */ s16 mEnd;
/* 0x0A */ s16 mLoop;
/* 0x0C */ f32 mRate;
/* 0x10 */ f32 mFrame;
}; // Size: 0x14
#endif /* J3DANIMATION_H */