mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 15:01:33 -04:00
848 lines
24 KiB
C++
848 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 {
|
|
J3DAnmKeyTableBase mRInfo;
|
|
J3DAnmKeyTableBase mGInfo;
|
|
J3DAnmKeyTableBase mBInfo;
|
|
J3DAnmKeyTableBase mAInfo;
|
|
}; // 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; /* 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 */ 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 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;
|
|
};
|
|
|
|
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 { return mUpdateMaterialID[idx]; }
|
|
u16 getUpdateMaterialNum() const { return mTrackNum / 3; }
|
|
JUTNameTab * getUpdateMaterialName() { return &mUpdateMaterialName; }
|
|
u16 getUpdateTexMtxID(u16 idx) const { 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) { 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 { 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 { return mCRegUpdateMaterialID[idx]; }
|
|
u16 getKRegUpdateMaterialID(u16 idx) const { 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 { 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() {
|
|
field_0x30 = 0;
|
|
field_0x34 = 0;
|
|
field_0x38 = 0;
|
|
field_0x3c = 0;
|
|
field_0x40 = 0;
|
|
}
|
|
|
|
virtual ~J3DAnmColorKey();
|
|
virtual void getColor(u16, GXColor*) const;
|
|
|
|
private:
|
|
/* 0x30 */ s16* field_0x30;
|
|
/* 0x34 */ s16* field_0x34;
|
|
/* 0x38 */ s16* field_0x38;
|
|
/* 0x3C */ s16* field_0x3c;
|
|
/* 0x40 */ J3DAnmColorKeyTable* field_0x40;
|
|
};
|
|
|
|
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 {
|
|
LOOP_ONCE_e,
|
|
LOOP_ONCE_RESET_e,
|
|
LOOP_REPEAT_e,
|
|
LOOP_MIRROR_ONCE_e,
|
|
LOOP_MIRROR_REPEAT_e,
|
|
};
|
|
|
|
enum State_e {
|
|
STATE_STOP_E = 0x1,
|
|
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; }
|
|
|
|
public:
|
|
/* 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 */
|