d_a_Obj_Gryw00 nonmatching start

This commit is contained in:
Jasper St. Pierre
2023-09-10 12:14:15 -07:00
parent a4c20f5136
commit aa738135ed
46 changed files with 5145 additions and 43 deletions
@@ -0,0 +1,634 @@
#ifndef J3DANIMATION_H
#define J3DANIMATION_H
#include "JSystem/J3DGraphAnimator/J3DModelData.h"
#include "JSystem/JUtility/JUTNameTab.h"
#include "global.h"
typedef struct _GXColor GXColor;
typedef struct _GXColorS10 GXColorS10;
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 */ u8 _4;
/* 0x06 */ u16 _6;
}; // Size = 0x8
struct J3DAnmCRegKeyTable {
/* 0x00 */ J3DAnmKeyTableBase mRTable;
/* 0x06 */ J3DAnmKeyTableBase mGTable;
/* 0x0C */ J3DAnmKeyTableBase mBTable;
/* 0x12 */ J3DAnmKeyTableBase mATable;
/* 0x18 */ u8 _18;
u8 padding[3];
}; // Size = 0x1C
struct J3DAnmKRegKeyTable {
/* 0x00 */ J3DAnmKeyTableBase mRTable;
/* 0x06 */ J3DAnmKeyTableBase mGTable;
/* 0x0C */ J3DAnmKeyTableBase mBTable;
/* 0x12 */ J3DAnmKeyTableBase mATable;
/* 0x18 */ u8 _18;
u8 padding[3];
}; // 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 mUpdateMaterialIDOffset;
/* 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:
J3DAnmBase(s16 i_frameMax) {
mAttribute = 0;
field_0x5 = 0;
mFrameMax = i_frameMax;
mFrame = 0.0f;
}
virtual ~J3DAnmBase();
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;
/* 0x8 */ f32 mFrame;
}; // Size: 0xC
class J3DAnmTransform : public J3DAnmBase {
public:
/* 80328E40 */ J3DAnmTransform(s16, f32*, s16*, f32*);
/* 8003B93C */ virtual ~J3DAnmTransform();
/* 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;
/* 0x18 */ s16 field_0x18;
/* 0x1A */ s16 field_0x1a;
/* 0x1C */ s16 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;
}
/* 80329A34 */ void calcTransform(f32, u16, J3DTransformInfo*) const;
/* 8003B8D0 */ virtual ~J3DAnmTransformKey();
/* 8003C800 */ virtual s32 getKind() const;
/* 8003C808 */ virtual void getTransform(u16, J3DTransformInfo*) const;
private:
/* 0x20 */ int field_0x20;
/* 0x24 */ int field_0x24;
}; // Size: 0x28
class J3DAnmTransformFull : public J3DAnmTransform {
public:
/* 8032C2AC */ virtual ~J3DAnmTransformFull();
/* 8032C318 */ virtual s32 getKind() const;
/* 80328E90 */ virtual void getTransform(u16, J3DTransformInfo*) const;
private:
/* 0x20 */ int field_0x20;
}; // Size: 0x24
class J3DAnmTransformFullWithLerp : public J3DAnmTransformFull {
public:
/* 8032C228 */ virtual ~J3DAnmTransformFullWithLerp();
/* 8032C2A4 */ virtual s32 getKind() const;
/* 803291F0 */ virtual void getTransform(u16, J3DTransformInfo*) const;
}; // Size: 0x24
struct J3DTextureSRTInfo;
class J3DModelData;
class J3DMaterialTable;
class J3DAnmTextureSRTKey : public J3DAnmBase {
public:
/* 80329E5C */ J3DAnmTextureSRTKey();
/* 80329F14 */ void calcTransform(f32, u16, J3DTextureSRTInfo*) const;
/* 8032B0C0 */ void searchUpdateMaterialID(J3DMaterialTable*);
/* 8032B1D4 */ void searchUpdateMaterialID(J3DModelData*);
/* 8032C198 */ virtual ~J3DAnmTextureSRTKey();
/* 8032C220 */ virtual s32 getKind() const;
void getTransform(u16 param_0, J3DTextureSRTInfo* pSRTInfo) const {
calcTransform(getFrame(), param_0, pSRTInfo);
}
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];
/* 0x2C */ u16* mUpdateMaterialID;
/* 0x30 */ JUTNameTab field_0x30;
/* 0x40 */ int field_0x40;
/* 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];
/* 0x78 */ u32 mTexMtxCalcType;
}; // Size: 0x7C
class J3DAnmTexPattern : public J3DAnmBase {
public:
/* 8032AED8 */ J3DAnmTexPattern();
/* 8032AF50 */ void getTexNo(u16, u16*) const;
/* 8032B004 */ void searchUpdateMaterialID(J3DMaterialTable*);
/* 8032B09C */ void searchUpdateMaterialID(J3DModelData*);
/* 8032BD20 */ virtual ~J3DAnmTexPattern();
/* 8032BD94 */ virtual s32 getKind() const;
private:
/* 0x0C */ void* field_0xc;
/* 0x10 */ void* mAnmTable;
/* 0x14 */ u16 field_0x14;
/* 0x16 */ u16 mUpdateMaterialNum;
/* 0x18 */ u16* field_0x18;
/* 0x1C */ JUTNameTab field_0x1c;
}; // Size: 0x2C
class J3DAnmTevRegKey : public J3DAnmBase {
public:
/* 8032AE18 */ J3DAnmTevRegKey();
/* 8032B1F8 */ void getTevColorReg(u16, _GXColorS10*) const;
/* 8032B4BC */ void getTevKonstReg(u16, _GXColor*) const;
/* 8032B780 */ void searchUpdateMaterialID(J3DMaterialTable*);
/* 8032B87C */ void searchUpdateMaterialID(J3DModelData*);
/* 8032BD9C */ virtual ~J3DAnmTevRegKey();
/* 8032BE24 */ virtual s32 getKind() const;
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]; }
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;
/* 0x20 */ u16* mCRegUpdateMaterialID;
/* 0x24 */ JUTNameTab field_0x24;
/* 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;
}; // Size: 0x70
class J3DAnmColor : public J3DAnmBase {
public:
/* 8032A828 */ J3DAnmColor();
/* 8032A8A4 */ void searchUpdateMaterialID(J3DMaterialTable*);
/* 8032BCAC */ virtual ~J3DAnmColor();
/* 8032BF44 */ virtual s32 getKind() const;
/* 8032BF4C */ 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]; }
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;
}; // Size: 0x2C
class J3DAnmColorKey : public J3DAnmColor {
public:
/* 8032AB00 */ J3DAnmColorKey();
/* 8032BE2C */ virtual ~J3DAnmColorKey();
/* 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;
};
class J3DAnmColorFull : public J3DAnmColor {
public:
/* 8032AB00 */ J3DAnmColorFull();
/* 8032BE2C */ virtual ~J3DAnmColorFull();
/* 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;
};
class J3DAnmVtxColor : public J3DAnmBase {
public:
J3DAnmVtxColor();
virtual ~J3DAnmVtxColor();
virtual s32 getKind() const;
virtual void getColor(u8, u16, _GXColor*) const;
private:
/* 0x0C */ s16 mAnmTableNum[2];
/* 0x10 */ int mAnmVtxColorIndexData[2];
}; // Size: 0x18
class J3DAnmVtxColorKey : public J3DAnmVtxColor {
public:
/* 8032A4E0 */ J3DAnmVtxColorKey();
/* 8032BF50 */ virtual ~J3DAnmVtxColorKey();
/* 8032BFBC */ virtual s32 getKind() const;
/* 8032A53C */ virtual void getColor(u8, u16, _GXColor*) const;
private:
/* 0x18 */ int field_0x18[2];
};
class J3DAnmVtxColorFull : public J3DAnmVtxColor {
/* 8032A30C */ J3DAnmVtxColorFull();
/* 8032BFC4 */ virtual ~J3DAnmVtxColorFull();
/* 8032C030 */ virtual s32 getKind() const;
/* 8032A368 */ virtual void getColor(u8, u16, _GXColor*) const;
private:
/* 0x18 */ int field_0x18[2];
};
class J3DAnmCluster : public J3DAnmBase {
public:
/* 8032BCAC */ virtual ~J3DAnmCluster();
/* 8032BF44 */ virtual s32 getKind() const;
/* 8032BF4C */ virtual f32 getWeight(u16) const;
private:
/* 0x0C */ f32* field_0xc;
}; // Size: 0x10
class J3DAnmClusterFull : public J3DAnmCluster {
public:
/* 8032BCAC */ virtual ~J3DAnmClusterFull();
/* 8032BF44 */ virtual s32 getKind() const;
/* 8032BF4C */ virtual f32 getWeight(u16) const;
private:
/* 0x10 */ int field_0x10;
};
class J3DAnmClusterKey : public J3DAnmCluster {
public:
/* 8032C044 */ virtual ~J3DAnmClusterKey();
/* 8032C0B0 */ virtual s32 getKind() const;
/* 8032A218 */ virtual f32 getWeight(u16) const;
private:
/* 0x10 */ int field_0x10;
};
class J3DFrameCtrl {
public:
enum Attribute_e {
LOOP_ONCE_e,
LOOP_ONCE_RESET_e,
LOOP_REPEAT_e,
LOOP_MIRROR_ONCE_e,
LOOP_MIRROR_REPEAT_e,
};
J3DFrameCtrl() { this->init(0); }
void init(s16);
BOOL checkPass(f32);
void update();
virtual ~J3DFrameCtrl() {}
f32 getRate() const { return mRate; }
f32 getFrame() const { return mFrame; }
s16 getEnd() const { return mEnd; }
s16 getStart() const { return mStart; }
u8 getAttribute() const { return mAttribute; }
u8 getState() const { return mState; }
void setAttribute(u8 attr) { mAttribute = attr; }
void setEnd(s16 end) { mEnd = end; }
void setRate(f32 rate) { mRate = rate; }
void setStart(s16 start) {
mStart = start;
mFrame = start;
}
void setFrame(f32 frame) { mFrame = frame; }
void setLoop(s16 loop) { mLoop = loop; }
bool checkState(u8 state) const { return mState & state; }
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 */
@@ -0,0 +1,24 @@
#ifndef J3DCLUSTER_H
#define J3DCLUSTER_H
#include "dolphin/types.h"
class J3DDeformer;
struct J3DCluster {
/* 0x00 */ f32 field_0x0;
/* 0x04 */ f32 field_0x4;
/* 0x08 */ int field_0x8;
/* 0x0C */ int field_0xc;
/* 0x10 */ u16 field_0x10;
/* 0x12 */ u16 field_0x12;
/* 0x14 */ u16 field_0x14;
/* 0x16 */ u16 field_0x16;
/* 0x18 */ u16 field_0x18[2];
/* 0x1C */ int field_0x1c;
/* 0x20 */ J3DDeformer* mDeformer;
};
struct J3DClusterKey {};
#endif /* J3DCLUSTER_H */
+115
View File
@@ -0,0 +1,115 @@
#ifndef J3DJOINT_H
#define J3DJOINT_H
#include "JSystem/J3DGraphBase/J3DTransform.h"
class J3DAnmTransform;
class J3DJoint;
class J3DMaterial;
class J3DMtxBuffer;
class J3DMtxCalc {
public:
/* 80325D1C */ static void setMtxBuffer(J3DMtxBuffer*);
/* 8000D948 */ virtual ~J3DMtxCalc();
/* 80014E90 */ virtual void setAnmTransform(J3DAnmTransform*);
/* 80014E9C */ virtual bool getAnmTransform();
/* 80014E8C */ virtual void setAnmTransform(u8, J3DAnmTransform*);
/* 80014E94 */ virtual bool getAnmTransform(u8);
/* 80014EA4 */ virtual void setWeight(u8, f32);
/* 80014EA8 */ virtual void getWeight(u8) const;
virtual void init(Vec const& param_0, Mtx*) = 0;
virtual void calc() = 0;
static J3DMtxBuffer* getMtxBuffer() { return mMtxBuffer; }
static J3DJoint* getJoint() { return mJoint; }
static void setJoint(J3DJoint* joint) { mJoint = joint; }
static J3DMtxBuffer* mMtxBuffer;
static J3DJoint* mJoint;
}; // Size: 0x4
class J3DMtxCalcNoAnmBase : public J3DMtxCalc {
public:
/* 8000FA8C */ virtual ~J3DMtxCalcNoAnmBase();
};
template <class A, class B>
class J3DMtxCalcNoAnm : public J3DMtxCalcNoAnmBase, public A, public B {
public:
J3DMtxCalcNoAnm() {}
virtual ~J3DMtxCalcNoAnm() {}
virtual void init(Vec const& param_0, f32 const (&param_1)[3][4]);
virtual void calc();
};
class J3DJoint;
typedef int (*J3DJointCallBack)(J3DJoint*, int);
class J3DJoint {
public:
/* 8032F13C */ void appendChild(J3DJoint*);
/* 8032F170 */ J3DJoint();
/* 8032F254 */ void entryIn();
/* 8032F3F8 */ void recursiveCalc();
J3DMaterial* getMesh() { return mMesh; }
u16 getJntNo() const { return mJntNo; }
u8 getScaleCompensate() const { return mScaleCompensate; }
J3DJoint* getYounger() { return mYounger; }
void setYounger(J3DJoint* pYounger) { mYounger = pYounger; }
void setCurrentMtxCalc(J3DMtxCalc* pMtxCalc) { mCurrentMtxCalc = pMtxCalc; }
J3DTransformInfo& getTransformInfo() { return mTransformInfo; }
Vec* getMax() { return &mMax; }
Vec* getMin() { return &mMin; }
void setCallBack(J3DJointCallBack callback) { mCallBack = callback; }
J3DJointCallBack getCallBack() { return mCallBack; }
void setMtxCalc(J3DMtxCalc* i_mtxCalc) { mMtxCalc = i_mtxCalc; }
J3DMtxCalc* getMtxCalc() { return mMtxCalc; }
J3DMtxCalc* getCurrentMtxCalc() { return mCurrentMtxCalc; };
J3DJoint* getChild() { return mChild; }
static J3DMtxCalc* mCurrentMtxCalc;
private:
friend struct J3DJointFactory;
friend class J3DJointTree;
/* 0x00 */ void* mCallBackUserData;
/* 0x04 */ J3DJointCallBack mCallBack;
/* 0x08 */ void* field_0x8;
/* 0x0C */ J3DJoint* mChild;
/* 0x10 */ J3DJoint* mYounger;
/* 0x14 */ u16 mJntNo;
/* 0x16 */ u8 mKind;
/* 0x17 */ u8 mScaleCompensate;
/* 0x18 */ J3DTransformInfo mTransformInfo;
/* 0x38 */ f32 mBoundingSphereRadius;
/* 0x3C */ Vec mMin;
/* 0x48 */ Vec mMax;
/* 0x54 */ J3DMtxCalc* mMtxCalc;
/* 0x58 */ J3DMaterial* mMesh;
}; // Size: 0x5C
struct J3DMtxCalcJ3DSysInitMaya {
/* 8032ECAC */ static void init(Vec const&, f32 const (&)[3][4]);
};
struct J3DMtxCalcJ3DSysInitBasic {
/* 8032EC28 */ static void init(Vec const&, f32 const (&)[3][4]);
};
struct J3DMtxCalcCalcTransformSoftimage {
/* 8032EE50 */ static void calcTransform(J3DTransformInfo const&);
};
struct J3DMtxCalcCalcTransformMaya {
/* 8032EFBC */ static void calcTransform(J3DTransformInfo const&);
};
struct J3DMtxCalcCalcTransformBasic {
/* 8032ED30 */ static void calcTransform(J3DTransformInfo const&);
};
#endif /* J3DJOINT_H */
@@ -0,0 +1,75 @@
#ifndef J3DJOINTTREE_H
#define J3DJOINTTREE_H
#include "JSystem/J3DGraphAnimator/J3DJoint.h"
#include "dolphin/types.h"
class JUTNameTab;
struct J3DModelHierarchy {
/* 0x0 */ u16 mType;
/* 0x2 */ u16 mValue;
};
class J3DMaterialTable;
struct J3DDrawMtxData {
/* 803115E0 */ J3DDrawMtxData();
/* 803115F4 */ ~J3DDrawMtxData();
/* 0x0 */ u16 mEntryNum;
/* 0x2 */ u16 mDrawFullWgtMtxNum;
/* 0x4 */ u8* mDrawMtxFlag;
/* 0x8 */ u16* mDrawMtxIndex;
}; // Size: 0xC
class J3DShapeTable;
class J3DJointTree {
public:
/* 80325A18 */ J3DJointTree();
/* 80325A9C */ void makeHierarchy(J3DJoint*, J3DModelHierarchy const**, J3DMaterialTable*,
J3DShapeTable*);
/* 80325C00 */ void findImportantMtxIndex();
/* 80325CAC */ virtual void calc(J3DMtxBuffer*, Vec const&, f32 const (&)[3][4]);
/* 80325D24 */ virtual ~J3DJointTree();
u16 getWEvlpMtxNum() const { return mWEvlpMtxNum; }
u8 getWEvlpMixMtxNum(u16 idx) const { return mWEvlpMixMtxNum[idx]; }
u16 * getWEvlpMixIndex() const { return mWEvlpMixIndex; }
f32 * getWEvlpMixWeight() const { return mWEvlpMixWeight; }
u16 * getWEvlpImportantMtxIndex() const { return mWEvlpImportantMtxIdx; }
u16 getDrawFullWgtMtxNum() const { return mDrawMtxData.mDrawFullWgtMtxNum; }
u16 getJointNum() const { return mJointNum; }
u16 getDrawMtxNum() const { return mDrawMtxData.mEntryNum; }
u8 getDrawMtxFlag(u16 idx) const { return mDrawMtxData.mDrawMtxFlag[idx]; }
u16 getDrawMtxIndex(u16 idx) const { return mDrawMtxData.mDrawMtxIndex[idx]; }
JUTNameTab* getJointName() const { return mJointName; }
J3DJoint* getRootNode() { return mRootNode; }
J3DJoint* getJointNodePointer(u16 idx) const { return mJointNodePointer[idx]; }
J3DMtxCalc* getBasicMtxCalc() const { return mBasicMtxCalc; }
Mtx& getInvJointMtx(s32 idx) const { return mInvJointMtx[idx]; }
u32 getModelDataType() const { return mModelDataType; }
bool checkFlag(u32 flag) { return mFlags & flag; }
private:
/* 0x04 */ J3DModelHierarchy* mHierarchy;
/* 0x08 */ u32 mFlags;
/* 0x0C */ u32 mModelDataType;
/* 0x10 */ J3DJoint* mRootNode;
/* 0x14 */ J3DMtxCalc* mBasicMtxCalc;
/* 0x18 */ J3DJoint** mJointNodePointer;
/* 0x1C */ u16 mJointNum;
/* 0x1E */ u16 mWEvlpMtxNum;
/* 0x20 */ u8* mWEvlpMixMtxNum;
/* 0x24 */ u16* mWEvlpMixIndex;
/* 0x28 */ f32* mWEvlpMixWeight;
/* 0x2C */ Mtx* mInvJointMtx;
/* 0x30 */ u16* mWEvlpImportantMtxIdx;
/* 0x34 */ J3DDrawMtxData mDrawMtxData;
/* 0x40 */ u32 field_0x40;
/* 0x44 */ JUTNameTab* mJointName;
}; // Size: 0x48
#endif /* J3DJOINTTREE_H */
@@ -0,0 +1,141 @@
#ifndef J3DMATERIALANM_H
#define J3DMATERIALANM_H
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
typedef struct _GXColor GXColor;
typedef struct _GXColorS10 GXColorS10;
class J3DMatColorAnm {
public:
/* 8003B2B8 */ ~J3DMatColorAnm() {};
/* 8003B2F4 */ J3DMatColorAnm() {};
void operator=(J3DMatColorAnm const& other) {
mAnmColor = other.mAnmColor;
field_0x0 = other.field_0x0;
mAnmFlag = other.mAnmFlag;
}
void setAnmFlag(bool flag) { mAnmFlag = flag; }
bool getAnmFlag() const { return mAnmFlag; }
void calc(_GXColor* pColor) const { mAnmColor->getColor(field_0x0, pColor); }
private:
/* 0x0 */ u16 field_0x0;
/* 0x2 */ u16 mAnmFlag;
/* 0x4 */ J3DAnmColor* mAnmColor;
}; // Size: 0x8
class J3DTexNoAnm {
public:
/* 8003B1F8 */ ~J3DTexNoAnm() {};
/* 8003B240 */ J3DTexNoAnm() {};
/* 8003C82C */ virtual void calc(u16* param_0) const { mAnmTexPattern->getTexNo(field_0x4, param_0); }
void operator=(J3DTexNoAnm const& other) {
mAnmTexPattern = other.mAnmTexPattern;
field_0x4 = other.field_0x4;
mAnmFlag = other.mAnmFlag;
}
void setAnmFlag(bool flag) { mAnmFlag = flag; }
bool getAnmFlag() const { return mAnmFlag; }
J3DAnmTexPattern* getAnmTexPattern() { return mAnmTexPattern; }
private:
/* 0x4 */ u16 field_0x4;
/* 0x6 */ u16 mAnmFlag;
/* 0x8 */ J3DAnmTexPattern* mAnmTexPattern;
}; // Size: 0xC
class J3DTexMtxAnm {
public:
/* 8003B264 */ ~J3DTexMtxAnm() {};
/* 8003B2A0 */ J3DTexMtxAnm() {};
void operator=(J3DTexMtxAnm const& other) {
mAnmTransform = other.mAnmTransform;
field_0x0 = other.field_0x0;
mAnmFlag = other.mAnmFlag;
}
void setAnmFlag(bool flag) { mAnmFlag = flag; }
void calc(J3DTextureSRTInfo* pSRTInfo) const {
mAnmTransform->getTransform(field_0x0, pSRTInfo);
}
bool getAnmFlag() const { return mAnmFlag; }
private:
/* 0x0 */ u16 field_0x0;
/* 0x2 */ u16 mAnmFlag;
/* 0x4 */ J3DAnmTextureSRTKey* mAnmTransform;
}; // Size: 0x8
class J3DTevKColorAnm {
public:
/* 8003B150 */ ~J3DTevKColorAnm() {};
/* 8003B18C */ J3DTevKColorAnm() {};
void operator=(J3DTevKColorAnm const& other) {
mAnmTevReg = other.mAnmTevReg;
field_0x0 = other.field_0x0;
mAnmFlag = other.mAnmFlag;
}
void setAnmFlag(bool flag) { mAnmFlag = flag; }
bool getAnmFlag() const { return mAnmFlag; }
void calc(_GXColor* pColor) const { mAnmTevReg->getTevKonstReg(field_0x0, pColor); }
private:
/* 0x0 */ u16 field_0x0;
/* 0x2 */ u16 mAnmFlag;
/* 0x4 */ J3DAnmTevRegKey* mAnmTevReg;
}; // Size: 0x8
class J3DTevColorAnm {
public:
/* 8003B1A4 */ ~J3DTevColorAnm() {};
/* 8003B1E0 */ J3DTevColorAnm() {};
void operator=(J3DTevColorAnm const& other) {
mAnmTevReg = other.mAnmTevReg;
field_0x0 = other.field_0x0;
mAnmFlag = other.mAnmFlag;
}
void setAnmFlag(bool flag) { mAnmFlag = flag; }
bool getAnmFlag() const { return mAnmFlag; }
void calc(_GXColorS10* pColor) const { mAnmTevReg->getTevColorReg(field_0x0, pColor); }
private:
/* 0x0 */ u16 field_0x0;
/* 0x2 */ u16 mAnmFlag;
/* 0x4 */ J3DAnmTevRegKey* mAnmTevReg;
}; // Size: 0x8
class J3DMaterialAnm {
public:
J3DMaterialAnm() { initialize(); }
/* 8032C320 */ void initialize();
/* 8032C5A4 */ void setMatColorAnm(int, J3DMatColorAnm*);
/* 8032C5E4 */ void setTexMtxAnm(int, J3DTexMtxAnm*);
/* 8032C624 */ void setTexNoAnm(int, J3DTexNoAnm*);
/* 8032C664 */ void setTevColorAnm(int, J3DTevColorAnm*);
/* 8032C6A4 */ void setTevKColorAnm(int, J3DTevKColorAnm*);
/* 800A4820 */ virtual ~J3DMaterialAnm() {};
/* 8032C3C4 */ virtual void calc(J3DMaterial*) const;
const J3DTexMtxAnm& getTexMtxAnm(int i) const { return mTexMtxAnm[i]; }
private:
/* 0x04 */ J3DMatColorAnm mMatColorAnm[2];
/* 0x14 */ J3DTexMtxAnm mTexMtxAnm[8];
/* 0x54 */ J3DTexNoAnm mTexNoAnm[8];
/* 0xB4 */ J3DTevColorAnm mTevColorAnm[4];
/* 0xD4 */ J3DTevKColorAnm mTevKColorAnm[4];
}; // Size: 0xF4
#endif /* J3DMATERIALANM_H */
@@ -0,0 +1,51 @@
#ifndef J3DMATERIALATTACH_H
#define J3DMATERIALATTACH_H
#include "dolphin/types.h"
class J3DMaterial;
class J3DTexture;
class J3DAnmColor;
class J3DAnmTexPattern;
class J3DAnmTextureSRTKey;
class J3DAnmTevRegKey;
class JUTNameTab;
class J3DMaterialTable {
public:
/* 8032F5A8 */ void clear();
/* 8032F5D0 */ J3DMaterialTable();
/* 8032F64C */ int removeMatColorAnimator(J3DAnmColor*);
/* 8032F6F8 */ int removeTexNoAnimator(J3DAnmTexPattern*);
/* 8032F7B4 */ int removeTexMtxAnimator(J3DAnmTextureSRTKey*);
/* 8032F880 */ int removeTevRegAnimator(J3DAnmTevRegKey*);
/* 8032F9C0 */ void createTexMtxForAnimator(J3DAnmTextureSRTKey*);
/* 8032FAF4 */ void entryMatColorAnimator(J3DAnmColor*);
/* 8032FBC8 */ void entryTexNoAnimator(J3DAnmTexPattern*);
/* 8032FCC4 */ void entryTexMtxAnimator(J3DAnmTextureSRTKey*);
/* 8032FE70 */ void entryTevRegAnimator(J3DAnmTevRegKey*);
/* 8032F604 */ virtual ~J3DMaterialTable();
J3DMaterial* getMaterialNodePointer(u16 idx) const { return mMaterialNodePointer[idx]; }
J3DTexture* getTexture() const { return mTexture; }
JUTNameTab* getTextureName() const { return mTextureName; }
JUTNameTab* getMaterialName() const { return mMaterialName; }
u16 getMaterialNum() const { return mMaterialNum; }
bool isLocked() const { return field_0x1c == 1; }
private:
/* 0x04 */ u16 mMaterialNum;
/* 0x06 */ u16 mUniqueMatNum;
/* 0x08 */ J3DMaterial** mMaterialNodePointer;
/* 0x0C */ JUTNameTab* mMaterialName;
/* 0x10 */ u32 field_0x10;
/* 0x14 */ J3DTexture* mTexture;
/* 0x18 */ JUTNameTab* mTextureName;
/* 0x1C */ u16 field_0x1c;
}; // Size: 0x20
#endif /* J3DMATERIALATTACH_H */
+116
View File
@@ -0,0 +1,116 @@
#ifndef J3DMODEL_H
#define J3DMODEL_H
#include "JSystem/J3DGraphAnimator/J3DSkinDeform.h"
#include "JSystem/J3DGraphBase/J3DPacket.h"
#include "JSystem/J3DGraphBase/J3DVertex.h"
#include "dolphin/mtx/mtxvec.h"
#include "dolphin/types.h"
enum J3DMdlFlag {
/* 0x00001 */ J3DMdlFlag_Unk00001 = 0x1,
/* 0x00002 */ J3DMdlFlag_Unk00002 = 0x2,
/* 0x00004 */ J3DMdlFlag_SkinPosCpu = 0x4,
/* 0x00008 */ J3DMdlFlag_SkinNrmCpu = 0x8,
/* 0x00010 */ J3DMdlFlag_Unk00010 = 0x10,
/* 0x20000 */ J3DMdlFlag_Unk20000 = 0x20000,
/* 0x40000 */ J3DMdlFlag_Unk40000 = 0x40000,
/* 0x80000 */ J3DMdlFlag_Unk80000 = 0x80000,
};
struct J3DUnkCalc1 {
virtual void calc(J3DModel* model);
};
struct J3DUnkCalc2 {
virtual void unk();
virtual void calc(J3DModelData* mpModelData);
};
typedef void (*J3DCalcCallBack)(J3DModel*, u32 timing);
class J3DModel {
public:
J3DModel() {
initialize();
}
J3DModel(J3DModelData* param_0, u32 param_1, u32 param_2) {
initialize();
entryModelData(param_0, param_1, param_2);
}
/* 800CFFF4 */ void setBaseTRMtx(f32 (*)[4]);
/* 80327100 */ void initialize();
/* 80327184 */ s32 entryModelData(J3DModelData*, u32, u32);
/* 80327300 */ s32 createShapePacket(J3DModelData*);
/* 803273CC */ s32 createMatPacket(J3DModelData*, u32);
/* 803275FC */ s32 newDifferedDisplayList(u32);
/* 8032767C */ void lock();
/* 803276B4 */ void unlock();
/* 803279A0 */ void diff();
/* 80327A2C */ s32 setDeformData(J3DDeformData*, u32);
/* 80327AA0 */ s32 setSkinDeform(J3DSkinDeform*, u32);
/* 80327BD4 */ void calcAnmMtx();
/* 80327C58 */ void calcWeightEnvelopeMtx();
/* 80328190 */ void calcNrmMtx();
/* 803281B4 */ void calcBumpMtx();
/* 803282B8 */ void calcBBoardMtx();
/* 803282EC */ void prepareShapePackets();
MtxP getAnmMtx(int);
/* 80327CA4 */ virtual void update();
/* 80327E4C */ virtual void entry();
/* 80327CF0 */ virtual void calc();
/* 803276EC */ virtual void calcMaterial();
/* 80327858 */ virtual void calcDiffTexMtx();
/* 80327F40 */ virtual void viewCalc();
/* 80328350 */ virtual ~J3DModel();
J3DModelData* getModelData() { return mModelData; }
void onFlag(u32 flag) { mFlags |= flag; }
void offFlag(u32 flag) { mFlags &= ~flag; }
bool checkFlag(u32 flag) const { return (mFlags & flag) ? true : false; }
bool isCpuSkinningOn() const { return (mFlags & J3DMdlFlag_SkinPosCpu) && (mFlags & J3DMdlFlag_SkinNrmCpu); }
Mtx& getBaseTRMtx() { return mBaseTransformMtx; }
void i_setBaseTRMtx(Mtx m) { MTXCopy(m, mBaseTransformMtx); }
u32 getMtxCalcMode() const { return mFlags & 0x03; }
J3DVertexBuffer* getVertexBuffer() const { return (J3DVertexBuffer*)&mVertexBuffer; }
J3DMatPacket* getMatPacket(u16 idx) const { return &mMatPacket[idx]; }
J3DShapePacket* getShapePacket(u16 idx) const { return &mShapePacket[idx]; }
J3DMtxBuffer* getMtxBuffer() const { return mMtxBuffer; }
Mtx33* getBumpMtxPtr(int idx) const { return mMtxBuffer->getBumpMtxPtr(idx); }
Mtx33* getNrmMtxPtr() const { return mMtxBuffer->getNrmMtxPtr(); }
Mtx* getDrawMtxPtr() const { return mMtxBuffer->getDrawMtxPtr(); }
void setBaseScale(const Vec& scale) { mBaseScale = scale; }
void setUserArea(u32 area) { mUserArea = area; }
u32 getUserArea() const { return mUserArea; }
Vec* getBaseScale() { return &mBaseScale; }
void setAnmMtx(int i, Mtx m) { mMtxBuffer->setAnmMtx(i, m); }
// is there a better way to handle inlines with same name as non-inlines?
MtxP i_getAnmMtx(int p1) { return mMtxBuffer->getAnmMtx(p1); }
void i_setAnmMtx(int p1, Mtx mtx) { mMtxBuffer->setAnmMtx(p1, mtx); }
/* 0x04 */ J3DModelData* mModelData;
/* 0x08 */ u32 mFlags;
/* 0x0C */ u32 mDiffFlag;
/* 0x10 */ J3DCalcCallBack mCalcCallBack;
/* 0x14 */ u32 mUserArea;
/* 0x18 */ Vec mBaseScale;
/* 0x24 */ Mtx mBaseTransformMtx;
/* 0x54 */ Mtx mInternalView;
/* 0x84 */ J3DMtxBuffer* mMtxBuffer;
/* 0x88 */ J3DVertexBuffer mVertexBuffer;
/* 0xC0 */ J3DMatPacket* mMatPacket;
/* 0xC4 */ J3DShapePacket* mShapePacket;
/* 0xC8 */ J3DDeformData* mDeformData;
/* 0xCC */ J3DSkinDeform* mSkinDeform;
/* 0xD0 */ J3DVtxColorCalc* mVtxColorCalc;
/* 0xD4 */ J3DUnkCalc1* mUnkCalc1;
/* 0xD8 */ J3DUnkCalc2* mUnkCalc2;
};
#endif /* J3DMODEL_H */
@@ -0,0 +1,93 @@
#ifndef J3DMODELDATA_H
#define J3DMODELDATA_H
#include "JSystem/J3DGraphAnimator/J3DJointTree.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h"
#include "JSystem/J3DGraphAnimator/J3DShapeTable.h"
#include "JSystem/J3DGraphBase/J3DSys.h"
#include "JSystem/J3DGraphBase/J3DVertex.h"
typedef struct _GXColor GXColor;
class JUTNameTab;
class J3DModelData {
public:
/* 80325D88 */ void clear();
/* 80325DA0 */ J3DModelData();
/* 80325E14 */ s32 newSharedDisplayList(u32);
/* 80325EC8 */ void indexToPtr();
/* 80325F94 */ void makeSharedDL();
/* 8032600C */ void simpleCalcMaterial(u16, f32 (*)[4]);
/* 803260CC */ void syncJ3DSysPointers() const;
/* 803260F8 */ void syncJ3DSysFlags() const;
/* 8032617C */ virtual ~J3DModelData();
J3DMaterialTable& getMaterialTable() { return mMaterialTable; }
JUTNameTab* getMaterialName() const { return mMaterialTable.getMaterialName(); }
J3DVertexData& getVertexData() { return mVertexData; }
u16 getShapeNum() const { return mShapeTable.getShapeNum(); }
u16 getMaterialNum() const { return mMaterialTable.getMaterialNum(); }
u16 getJointNum() const { return mJointTree.getJointNum(); }
u16 getDrawMtxNum() const { return mJointTree.getDrawMtxNum(); }
J3DMaterial* getMaterialNodePointer(u16 idx) const {
return mMaterialTable.getMaterialNodePointer(idx);
}
u32 getVtxNum() const { return mVertexData.getVtxNum(); }
u32 getNrmNum() const { return mVertexData.getNrmNum(); }
u8 getDrawMtxFlag(u16 idx) const { return mJointTree.getDrawMtxFlag(idx); }
u16 getDrawMtxIndex(u16 idx) const { return mJointTree.getDrawMtxIndex(idx); }
J3DShape* getShapeNodePointer(u16 idx) const { return mShapeTable.getShapeNodePointer(idx); }
J3DJoint* getJointNodePointer(u16 idx) const { return mJointTree.getJointNodePointer(idx); }
J3DJointTree& getJointTree() { return mJointTree; }
JUTNameTab* getJointName() const { return mJointTree.getJointName(); }
Mtx& getInvJointMtx(s32 idx) const { return mJointTree.getInvJointMtx(idx); }
J3DTexture* getTexture() const { return mMaterialTable.getTexture(); }
JUTNameTab* getTextureName() const { return mMaterialTable.getTextureName(); }
u16 getWEvlpMtxNum() const { return mJointTree.getWEvlpMtxNum(); }
u16* getWEvlpMixMtxIndex() const { return mJointTree.getWEvlpMixIndex(); }
f32* getWEvlpMixWeight() const { return mJointTree.getWEvlpMixWeight(); }
u8 getWEvlpMixMtxNum(u16 idx) const { return mJointTree.getWEvlpMixMtxNum(idx); }
u32 getModelDataType() const { return mJointTree.getModelDataType(); }
void* getVtxPosArray() const { return mVertexData.getVtxPosArray(); }
void* getVtxNrmArray() const { return mVertexData.getVtxNrmArray(); }
GXColor* getVtxColorArray(u8 idx) const { return mVertexData.getVtxColorArray(idx); }
bool checkFlag(u32 flag) const { return (mFlags & flag) ? true : false; }
u32 getFlag() const { return mFlags; }
void* getRawData() const { return mpRawData; }
u16 checkBumpFlag() const { return mbHasBumpArray; }
void setBumpFlag(u32 flag) { mbHasBumpArray = flag; }
bool checkBBoardFlag() const { return mbHasBillboard == 1; }
bool isLocked() { return mMaterialTable.isLocked(); }
void entryTexMtxAnimator(J3DAnmTextureSRTKey* anm) { mMaterialTable.entryTexMtxAnimator(anm); }
void entryTevRegAnimator(J3DAnmTevRegKey* anm) { mMaterialTable.entryTevRegAnimator(anm); }
void entryTexNoAnimator(J3DAnmTexPattern* anm) { mMaterialTable.entryTexNoAnimator(anm); }
int removeTexNoAnimator(J3DAnmTexPattern* anm) {
return mMaterialTable.removeTexNoAnimator(anm);
}
int removeTexMtxAnimator(J3DAnmTextureSRTKey* anm) {
return mMaterialTable.removeTexMtxAnimator(anm);
}
int removeTevRegAnimator(J3DAnmTevRegKey* anm) {
return mMaterialTable.removeTevRegAnimator(anm);
}
int removeMatColorAnimator(J3DAnmColor* anm) {
return mMaterialTable.removeMatColorAnimator(anm);
}
void syncJ3DSys() {
syncJ3DSysFlags();
syncJ3DSysPointers();
}
private:
/* 0x04 */ void* mpRawData;
/* 0x08 */ u32 mFlags;
/* 0x0C */ u16 mbHasBumpArray;
/* 0x0E */ u16 mbHasBillboard;
/* 0x10 */ J3DJointTree mJointTree;
/* 0x58 */ J3DMaterialTable mMaterialTable;
/* 0x78 */ J3DShapeTable mShapeTable;
/* 0x88 */ J3DVertexData mVertexData;
}; // Size: 0xE4
#endif /* J3DMODELDATA_H */
@@ -0,0 +1,81 @@
#ifndef J3DMTXBUFFER_H
#define J3DMTXBUFFER_H
#include "JSystem/J3DGraphAnimator/J3DModelData.h"
#include "dolphin/types.h"
class J3DModelData;
class J3DMtxBuffer {
public:
J3DMtxBuffer() { initialize(); }
/* 80326214 */ void initialize();
/* 80326258 */ s32 create(J3DModelData*, u32);
/* 80326364 */ s32 createAnmMtx(J3DModelData*);
/* 803263F0 */ s32 createWeightEnvelopeMtx(J3DModelData*);
/* 8032648C */ s32 setNoUseDrawMtx();
/* 803264B8 */ s32 createDoubleDrawMtx(J3DModelData*, u32);
/* 80326664 */ s32 createBumpMtxArray(J3DModelData*, u32);
/* 803268D4 */ void calcWeightEnvelopeMtx();
/* 80326ACC */ void calcDrawMtx(u32, Vec const&, f32 const (&)[3][4]);
/* 80326D3C */ void calcNrmMtx();
/* 80326EF0 */ void calcBBoardMtx();
MtxP getAnmMtx(int idx) const { return mpAnmMtx[idx]; }
void setAnmMtx(int i, Mtx m) { MTXCopy(m, (MtxP)mpAnmMtx[i]); }
MtxP getWeightAnmMtx(int idx) const { return mpWeightEvlpMtx[idx]; }
void setScaleFlag(int idx, u8 flag) { mpScaleFlagArr[idx] = flag; }
u32* getCurrentViewNoPtr() { return &mCurrentViewNo; }
u8* getScaleFlagArray() const { return mpScaleFlagArr; }
u8 getScaleFlag(int idx) const { return mpScaleFlagArr[idx]; }
u8 getEnvScaleFlag(int idx) const { return mpEvlpScaleFlagArr[idx]; }
Mtx** getDrawMtxPtrPtr() const { return mpDrawMtxArr[1]; }
Mtx* getDrawMtxPtr() const { return mpDrawMtxArr[1][mCurrentViewNo]; }
Mtx* getDrawMtx(u16 idx) const { return &mpDrawMtxArr[1][mCurrentViewNo][idx]; }
Mtx33** getNrmMtxPtrPtr() const { return mpNrmMtxArr[1]; }
Mtx33* getNrmMtxPtr() const { return mpNrmMtxArr[1][mCurrentViewNo]; }
Mtx33* getNrmMtx(u16 idx) const { return &mpNrmMtxArr[1][mCurrentViewNo][idx]; }
Mtx33*** getBumpMtxPtrPtr() const { return mpBumpMtxArr[1]; }
Mtx33* getBumpMtxPtr(int idx) const { return mpBumpMtxArr[1][idx][mCurrentViewNo]; }
J3DJointTree* getJointTree() const { return mJointTree; }
void swapDrawMtx() {
Mtx* tmp = mpDrawMtxArr[0][mCurrentViewNo];
mpDrawMtxArr[0][mCurrentViewNo] = mpDrawMtxArr[1][mCurrentViewNo];
mpDrawMtxArr[1][mCurrentViewNo] = tmp;
}
void swapNrmMtx() {
Mtx33* tmp = mpNrmMtxArr[0][mCurrentViewNo];
mpNrmMtxArr[0][mCurrentViewNo] = mpNrmMtxArr[1][mCurrentViewNo];
mpNrmMtxArr[1][mCurrentViewNo] = tmp;
}
static Mtx sNoUseDrawMtx;
static Mtx33 sNoUseNrmMtx;
static Mtx* sNoUseDrawMtxPtr;
static Mtx33* sNoUseNrmMtxPtr;
private:
/* 0x00 */ J3DJointTree* mJointTree;
/* 0x04 */ u8* mpScaleFlagArr;
/* 0x08 */ u8* mpEvlpScaleFlagArr;
/* 0x0C */ Mtx* mpAnmMtx;
/* 0x10 */ Mtx* mpWeightEvlpMtx;
/* 0x14 */ Mtx** mpDrawMtxArr[2];
/* 0x1C */ Mtx33** mpNrmMtxArr[2];
/* 0x28 */ Mtx33*** mpBumpMtxArr[2];
/* 0x2C */ u32 mFlags;
/* 0x30 */ u32 mCurrentViewNo;
/* 0x34 */ Mtx* mpUserAnmMtx;
public:
/* 803283B4 */ virtual ~J3DMtxBuffer();
};
void J3DCalcViewBaseMtx(f32 (*param_0)[4], Vec const& param_1, f32 const (&param_2)[3][4],
f32 (*param_3)[4]);
#endif /* J3DMTXBUFFER_H */
@@ -0,0 +1,33 @@
#ifndef J3DSHAPETABLE_H
#define J3DSHAPETABLE_H
#include "JSystem/J3DGraphBase/J3DShape.h"
#include "dolphin/types.h"
class JUTNameTab;
class J3DShapeTable {
public:
J3DShapeTable() {
mShapeNum = 0;
mShapeNodePointer = NULL;
mShapeName = NULL;
}
/* 803258A0 */ void hide();
/* 803258D8 */ void show();
/* 80325910 */ void initShapeNodes(J3DDrawMtxData*, J3DVertexData*);
/* 8032597C */ void sortVcdVatCmd();
virtual ~J3DShapeTable();
u16 getShapeNum() const { return mShapeNum; }
J3DShape* getShapeNodePointer(u16 idx) const { return mShapeNodePointer[idx]; }
private:
/* 0x4 */ u16 mShapeNum;
/* 0x8 */ J3DShape** mShapeNodePointer;
/* 0xC */ JUTNameTab* mShapeName;
}; // Size: 0x10
#endif /* J3DSHAPETABLE_H */
@@ -0,0 +1,120 @@
#ifndef J3DSKINDEFORM_H
#define J3DSKINDEFORM_H
#include "JSystem/J3DGraphAnimator/J3DCluster.h"
#include "JSystem/J3DGraphAnimator/J3DMtxBuffer.h"
#include "JSystem/J3DGraphBase/J3DTransform.h"
#include "dolphin/types.h"
class J3DModel;
class J3DAnmCluster;
class J3DDeformData {
public:
/* 8032E1F8 */ J3DDeformData();
/* 8032E230 */ void offAllFlag(u32);
/* 8032E298 */ void deform(J3DVertexBuffer*);
/* 8032E274 */ void deform(J3DModel*);
/* 8032E364 */ void setAnm(J3DAnmCluster*);
private:
/* 0x00 */ u16 mClusterNum;
/* 0x02 */ u16 mClusterKeyNum;
/* 0x04 */ u16 field_0x4;
/* 0x08 */ J3DCluster** mClusterPointer;
/* 0x0C */ J3DClusterKey** mClusterKeyPointer;
/* 0x10 */ int field_0x10;
/* 0x14 */ u16 field_0x14;
/* 0x16 */ u16 field_0x16;
/* 0x18 */ void* mVtxPos;
/* 0x1C */ void* mVtxNrm;
/* 0x20 */ int field_0x20;
/* 0x24 */ int field_0x24;
}; // Size: 0x28
struct J3DSkinNList {
/* 8032C6E4 */ J3DSkinNList();
/* 8032C85C */ void calcSkin_VtxPosF32(f32 (*)[4], void*, void*);
/* 8032C8E4 */ void calcSkin_VtxNrmF32(f32 (*)[4], void*, void*);
/* 0x00 */ u16* field_0x0;
/* 0x04 */ u16* field_0x4;
/* 0x08 */ f32* field_0x8;
/* 0x0C */ f32* field_0xc;
/* 0x10 */ u16 field_0x10;
/* 0x12 */ u16 field_0x12;
}; // Size: 0x14
class J3DSkinDeform {
public:
/* 8032C96C */ J3DSkinDeform();
/* 8032C9B0 */ void initSkinInfo(J3DModelData*);
/* 8032CF44 */ int initMtxIndexArray(J3DModelData*);
/* 8032D378 */ void changeFastSkinDL(J3DModelData*);
/* 8032D5C4 */ void calcNrmMtx(J3DMtxBuffer*);
/* 8032D738 */ void transformVtxPosNrm(J3DModelData*);
/* 8032D87C */ void calcAnmInvJointMtx(J3DMtxBuffer*);
/* 8032D8F4 */ void deformFastVtxPos_F32(J3DVertexBuffer*, J3DMtxBuffer*) const;
/* 8032DA1C */ void deformFastVtxNrm_F32(J3DVertexBuffer*, J3DMtxBuffer*) const;
/* 8032DB50 */ void deformVtxPos_F32(J3DVertexBuffer*, J3DMtxBuffer*) const;
/* 8032DC74 */ void deformVtxPos_S16(J3DVertexBuffer*, J3DMtxBuffer*) const;
/* 8032DDB8 */ void deformVtxNrm_F32(J3DVertexBuffer*) const;
/* 8032DEBC */ void deformVtxNrm_S16(J3DVertexBuffer*) const;
/* 8032DFDC */ void deform(J3DModel*);
void setNrmMtx(int i, MtxP mtx) {
J3DPSMtx33CopyFrom34(mtx, (Mtx3P)mNrmMtx[i]);
}
Mtx3P getNrmMtx(int i) { return mNrmMtx[i]; }
void onFlag(u32 flag) { mFlags |= flag; }
void offFlag(u32 flag) { mFlags &= ~flag; }
bool checkFlag(u32 flag) { return mFlags & flag; }
/* 8032E064 */ virtual void deform(J3DVertexBuffer*, J3DMtxBuffer*);
/* 8032E1B0 */ virtual ~J3DSkinDeform();
static u16* sWorkArea_WEvlpMixMtx[1024];
static f32* sWorkArea_WEvlpMixWeight[1024];
static u16 sWorkArea_MtxReg[1024 + 4 /* padding */];
private:
/* 0x04 */ u16* mPosData;
/* 0x08 */ u16* mNrmData;
/* 0x0C */ Mtx* mPosMtx;
/* 0x10 */ Mtx33* mNrmMtx;
/* 0x14 */ u32 mFlags;
/* 0x18 */ u8 field_0x18;
/* 0x19 */ u8 field_0x19;
/* 0x1C */ int field_0x1c;
/* 0x20 */ int field_0x20;
/* 0x24 */ J3DSkinNList* mSkinNList;
};
class J3DDeformer {
public:
/* 8032E39C */ J3DDeformer(J3DDeformData*);
/* 8032EAB4 */ void deform(J3DVertexBuffer*, u16, f32*);
/* 8032E3BC */ void deform(J3DVertexBuffer*, u16);
/* 8032E4A4 */ void deform_VtxPosF32(J3DVertexBuffer*, J3DCluster*, J3DClusterKey*, f32*);
/* 8032E60C */ void deform_VtxNrmF32(J3DVertexBuffer*, J3DCluster*, J3DClusterKey*, f32*);
/* 8032EBCC */ void normalizeWeight(int, f32*);
private:
/* 0x00 */ J3DDeformData* mDeformData;
/* 0x04 */ J3DAnmCluster* mAnmCluster;
/* 0x08 */ int field_0x8;
/* 0x0C */ int field_0xc;
/* 0x10 */ u32 mFlags;
}; // Size: 0x14
inline void J3DFillZero32B(register void* param_0, register u32 param_1) {
asm {
srwi param_1, param_1, 5
mtctr param_1
lbl_8032D948:
dcbz 0, param_0
addi param_0, param_0, 0x20
bdnz lbl_8032D948
}
}
#endif /* J3DSKINDEFORM_H */