diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h index d5d600a4c..8b4ec14ea 100644 --- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h +++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h @@ -57,7 +57,7 @@ struct J3DAnmTransformFullTable { struct J3DAnmTexPatternFullTable { /* 0x00 */ u16 mMaxFrame; /* 0x02 */ u16 mOffset; - /* 0x04 */ u8 _4; + /* 0x04 */ u8 mTexNo; /* 0x06 */ u16 _6; }; // Size = 0x8 @@ -66,7 +66,7 @@ struct J3DAnmCRegKeyTable { /* 0x06 */ J3DAnmKeyTableBase mGTable; /* 0x0C */ J3DAnmKeyTableBase mBTable; /* 0x12 */ J3DAnmKeyTableBase mATable; - /* 0x18 */ u8 _18; + /* 0x18 */ u8 mColorId; u8 padding[3]; }; // Size = 0x1C @@ -75,7 +75,7 @@ struct J3DAnmKRegKeyTable { /* 0x06 */ J3DAnmKeyTableBase mGTable; /* 0x0C */ J3DAnmKeyTableBase mBTable; /* 0x12 */ J3DAnmKeyTableBase mATable; - /* 0x18 */ u8 _18; + /* 0x18 */ u8 mColorId; u8 padding[3]; }; // Size = 0x1C @@ -373,36 +373,42 @@ public: } u16 getUpdateMaterialID(u16 idx) const { return mUpdateMaterialID[idx]; } - u16 getUpdateMaterialNum() const { return field_0x14 / 3; } + u16 getUpdateMaterialNum() const { return mTrackNum / 3; } + u16 getUpdateTexMtxID(u16 idx) const { return mUpdateTexMtxID[idx]; } + + u32 getTexMtxCalcType() const { return mTexMtxCalcType; } + Vec& getSRTCenter(u16 idx) const { return mSRTCenter[idx]; } 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 + /* 0x0C */ void* field_0xc; + /* 0x10 */ int mDecShift; + /* 0x14 */ u16 mTrackNum; + /* 0x18 */ void* mAnmTable; + /* 0x1C */ u16 mScaleNum; + /* 0x1E */ u16 mRotNum; + /* 0x20 */ u16 mTransNum; + /* 0x24 */ f32* mScaleData; + /* 0x28 */ f32* mRotData; + /* 0x2C */ f32* mTransData; + /* 0x30 */ u8* mUpdateTexMtxID; + /* 0x34 */ u16* mUpdateMaterialID; + /* 0x38 */ JUTNameTab mMaterialName; + /* 0x48 */ Vec* mSRTCenter; + /* 0x4C */ u16 mPostTrackNum; + /* 0x50 */ void * mPostAnmTable; + /* 0x54 */ void * field_0x54; + /* 0x58 */ void * field_0x58; + /* 0x5C */ f32* mPostScaleData; + /* 0x60 */ f32* mPostRotData; + /* 0x64 */ f32* mPostTransData; + /* 0x68 */ u8* mPostUpdateTexMtxID; + /* 0x68 */ u16* mPostUpdateMaterialID; + /* 0x70 */ JUTNameTab mDualName; + /* 0x80 */ Vec* mPostSRTCenter; + /* 0x80 */ u32 mTexMtxCalcType; +}; // Size: 0x88 + +STATIC_ASSERT(sizeof(J3DAnmTextureSRTKey) == 0x88); class J3DAnmVisibilityFull : public J3DAnmBase { public: @@ -428,16 +434,22 @@ public: void searchUpdateMaterialID(J3DMaterialTable*); void searchUpdateMaterialID(J3DModelData*); + u16 getUpdateMaterialID(u16 idx) const { return mUpdateMaterialID[idx]; } + u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; } + + J3DAnmTexPatternFullTable * getAnmTable() const { return mAnmTable; } + virtual ~J3DAnmTexPattern(); 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; + /* 0x10 */ s16* mTextureIndex; + /* 0x14 */ J3DAnmTexPatternFullTable* mAnmTable; + /* 0x18 */ u16 field_0x18; + /* 0x1A */ u16 mUpdateMaterialNum; + /* 0x1C */ u16* mUpdateMaterialID; + /* 0x20 */ JUTNameTab mMaterialName; }; // Size: 0x2C class J3DAnmTevRegKey : public J3DAnmBase { @@ -457,32 +469,24 @@ public: u16 getCRegUpdateMaterialID(u16 idx) const { return mCRegUpdateMaterialID[idx]; } u16 getKRegUpdateMaterialID(u16 idx) const { return mKRegUpdateMaterialID[idx]; } + J3DAnmCRegKeyTable * getAnmCRegKeyTable() const { return mAnmCRegKeyTable; } + J3DAnmKRegKeyTable * getAnmKRegKeyTable() const { return mAnmKRegKeyTable; } + 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 + /* 0x0C */ u32 field_0x0c; + /* 0x10 */ u16 mCRegUpdateMaterialNum; + /* 0x12 */ u16 mKRegUpdateMaterialNum; + /* 0x14 */ u16 mCRegDataCount[4]; + /* 0x1C */ u16 mKRegDataCount[4]; + /* 0x24 */ u16* mCRegUpdateMaterialID; + /* 0x28 */ JUTNameTab mCRegNameTab; + /* 0x38 */ u16* mKRegUpdateMaterialID; + /* 0x3C */ JUTNameTab mKRegNameTab; + /* 0x4C */ J3DAnmCRegKeyTable* mAnmCRegKeyTable; + /* 0x50 */ J3DAnmKRegKeyTable* mAnmKRegKeyTable; + /* 0x54 */ s16 * mAnmCRegData[4]; + /* 0x64 */ s16 * mAnmKRegData[4]; +}; // Size: 0x74 class J3DAnmColor : public J3DAnmBase { public: @@ -503,10 +507,11 @@ private: /* 0x0E */ u16 field_0xe; /* 0x10 */ u16 field_0x10; /* 0x12 */ u16 field_0x12; - /* 0x14 */ u16 mUpdateMaterialNum; - /* 0x18 */ u16* mUpdateMaterialID; - /* 0x1C */ JUTNameTab field_0x1c; -}; // Size: 0x2C + /* 0x14 */ u32 field_0x14; + /* 0x18 */ u16 mUpdateMaterialNum; + /* 0x1C */ u16* mUpdateMaterialID; + /* 0x20 */ JUTNameTab field_0x1c; +}; // Size: 0x30 class J3DAnmColorKey : public J3DAnmColor { public: diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h index dec569648..fd986b8c0 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h @@ -8,21 +8,25 @@ typedef struct _GXColorS10 GXColorS10; class J3DMatColorAnm { public: - ~J3DMatColorAnm() {}; - J3DMatColorAnm() {}; + ~J3DMatColorAnm() {} + J3DMatColorAnm() {} + J3DMatColorAnm(J3DAnmColor * pAnm, u16 materialIdx) { + mAnmColor = pAnm; + mMaterialIdx = materialIdx; + } void operator=(J3DMatColorAnm const& other) { mAnmColor = other.mAnmColor; - field_0x0 = other.field_0x0; + mMaterialIdx = other.mMaterialIdx; mAnmFlag = other.mAnmFlag; } void setAnmFlag(bool flag) { mAnmFlag = flag; } bool getAnmFlag() const { return mAnmFlag; } - void calc(_GXColor* pColor) const { mAnmColor->getColor(field_0x0, pColor); } + void calc(_GXColor* pColor) const { mAnmColor->getColor(mMaterialIdx, pColor); } private: - /* 0x0 */ u16 field_0x0; + /* 0x0 */ u16 mMaterialIdx; /* 0x2 */ u16 mAnmFlag; /* 0x4 */ J3DAnmColor* mAnmColor; }; // Size: 0x8 @@ -51,65 +55,77 @@ private: class J3DTexMtxAnm { public: - ~J3DTexMtxAnm() {}; - J3DTexMtxAnm() {}; + ~J3DTexMtxAnm() {} + J3DTexMtxAnm() {} + J3DTexMtxAnm(J3DAnmTextureSRTKey * pAnm, u16 materialIdx) { + mAnmTransform = pAnm; + mMaterialIdx = materialIdx; + } void operator=(J3DTexMtxAnm const& other) { mAnmTransform = other.mAnmTransform; - field_0x0 = other.field_0x0; + mMaterialIdx = other.mMaterialIdx; mAnmFlag = other.mAnmFlag; } void setAnmFlag(bool flag) { mAnmFlag = flag; } void calc(J3DTextureSRTInfo* pSRTInfo) const { - mAnmTransform->getTransform(field_0x0, pSRTInfo); + mAnmTransform->getTransform(mMaterialIdx, pSRTInfo); } bool getAnmFlag() const { return mAnmFlag; } private: - /* 0x0 */ u16 field_0x0; + /* 0x0 */ u16 mMaterialIdx; /* 0x2 */ u16 mAnmFlag; /* 0x4 */ J3DAnmTextureSRTKey* mAnmTransform; }; // Size: 0x8 class J3DTevKColorAnm { public: - ~J3DTevKColorAnm() {}; - J3DTevKColorAnm() {}; + ~J3DTevKColorAnm() {} + J3DTevKColorAnm() {} + J3DTevKColorAnm(J3DAnmTevRegKey * pAnm, u16 materialIdx) { + mAnmTevReg = pAnm; + mMaterialIdx = materialIdx; + } void operator=(J3DTevKColorAnm const& other) { mAnmTevReg = other.mAnmTevReg; - field_0x0 = other.field_0x0; + mMaterialIdx = other.mMaterialIdx; mAnmFlag = other.mAnmFlag; } void setAnmFlag(bool flag) { mAnmFlag = flag; } bool getAnmFlag() const { return mAnmFlag; } - void calc(_GXColor* pColor) const { mAnmTevReg->getTevKonstReg(field_0x0, pColor); } + void calc(_GXColor* pColor) const { mAnmTevReg->getTevKonstReg(mMaterialIdx, pColor); } private: - /* 0x0 */ u16 field_0x0; + /* 0x0 */ u16 mMaterialIdx; /* 0x2 */ u16 mAnmFlag; /* 0x4 */ J3DAnmTevRegKey* mAnmTevReg; }; // Size: 0x8 class J3DTevColorAnm { public: - ~J3DTevColorAnm() {}; - J3DTevColorAnm() {}; + ~J3DTevColorAnm() {} + J3DTevColorAnm() {} + J3DTevColorAnm(J3DAnmTevRegKey * pAnm, u16 materialIdx) { + mAnmTevReg = pAnm; + mMaterialIdx = materialIdx; + } void operator=(J3DTevColorAnm const& other) { mAnmTevReg = other.mAnmTevReg; - field_0x0 = other.field_0x0; + mMaterialIdx = other.mMaterialIdx; mAnmFlag = other.mAnmFlag; } void setAnmFlag(bool flag) { mAnmFlag = flag; } bool getAnmFlag() const { return mAnmFlag; } - void calc(_GXColorS10* pColor) const { mAnmTevReg->getTevColorReg(field_0x0, pColor); } + void calc(_GXColorS10* pColor) const { mAnmTevReg->getTevColorReg(mMaterialIdx, pColor); } private: - /* 0x0 */ u16 field_0x0; + /* 0x0 */ u16 mMaterialIdx; /* 0x2 */ u16 mAnmFlag; /* 0x4 */ J3DAnmTevRegKey* mAnmTevReg; }; // Size: 0x8 @@ -119,11 +135,11 @@ public: J3DMaterialAnm() { initialize(); } void initialize(); - void setMatColorAnm(int, J3DMatColorAnm*); - void setTexMtxAnm(int, J3DTexMtxAnm*); - void setTexNoAnm(int, J3DTexNoAnm*); - void setTevColorAnm(int, J3DTevColorAnm*); - void setTevKColorAnm(int, J3DTevKColorAnm*); + inline void setMatColorAnm(int i, J3DMatColorAnm* pAnm) { mMatColorAnm[i] = pAnm; } + inline void setTexMtxAnm(int i, J3DTexMtxAnm* pAnm) { mTexMtxAnm[i] = pAnm; } + inline void setTexNoAnm(int i, J3DTexNoAnm* pAnm) { mTexNoAnm[i] = pAnm; } + inline void setTevColorAnm(int i, J3DTevColorAnm* pAnm) { mTevColorAnm[i] = pAnm; } + inline void setTevKColorAnm(int i, J3DTevKColorAnm* pAnm) { mTevKColorAnm[i] = pAnm; } virtual ~J3DMaterialAnm() {}; virtual void calc(J3DMaterial*) const; diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h index 6e4c17ea8..f274de05a 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAttach.h @@ -20,19 +20,18 @@ class J3DMaterialTable { public: void clear(); J3DMaterialTable(); + s32 entryMatColorAnimator(J3DAnmColor*); + s32 entryTexNoAnimator(J3DAnmTexPattern*); + s32 entryTexMtxAnimator(J3DAnmTextureSRTKey*); + s32 entryTevRegAnimator(J3DAnmTevRegKey*); int removeMatColorAnimator(J3DAnmColor*); int removeTexNoAnimator(J3DAnmTexPattern*); int removeTexMtxAnimator(J3DAnmTextureSRTKey*); int removeTevRegAnimator(J3DAnmTevRegKey*); - void createTexMtxForAnimator(J3DAnmTextureSRTKey*); - void entryMatColorAnimator(J3DAnmColor*); - void entryTexNoAnimator(J3DAnmTexPattern*); - void entryTexMtxAnimator(J3DAnmTextureSRTKey*); - void entryTevRegAnimator(J3DAnmTevRegKey*); - void setMatColorAnimator(J3DAnmColor*, J3DMatColorAnm *); - void setTexNoAnimator(J3DAnmTexPattern*, J3DTexNoAnm*); - void setTexMtxAnimator(J3DAnmTextureSRTKey*, J3DTexMtxAnm*, J3DTexMtxAnm*); - void setTevRegAnimator(J3DAnmTevRegKey*, J3DTevColorAnm*, J3DTevKColorAnm*); + s32 setMatColorAnimator(J3DAnmColor*, J3DMatColorAnm *); + s32 setTexNoAnimator(J3DAnmTexPattern*, J3DTexNoAnm*); + s32 setTexMtxAnimator(J3DAnmTextureSRTKey*, J3DTexMtxAnm*, J3DTexMtxAnm*); + s32 setTevRegAnimator(J3DAnmTevRegKey*, J3DTevColorAnm*, J3DTevKColorAnm*); virtual ~J3DMaterialTable(); @@ -50,10 +49,11 @@ private: /* 0x06 */ u16 mUniqueMatNum; /* 0x08 */ J3DMaterial** mMaterialNodePointer; /* 0x0C */ JUTNameTab* mMaterialName; - /* 0x10 */ u32 field_0x10; + /* 0x10 */ u16 field_0x10; /* 0x14 */ u32 field_0x14; /* 0x18 */ J3DTexture* mTexture; /* 0x1C */ JUTNameTab* mTextureName; -}; // Size: 0x20 + /* 0x20 */ u16 field_0x20; +}; // Size: 0x22 #endif /* J3DMATERIALATTACH_H */ diff --git a/include/JSystem/J3DGraphBase/J3DTexture.h b/include/JSystem/J3DGraphBase/J3DTexture.h index e5b4a31d1..46840e139 100644 --- a/include/JSystem/J3DGraphBase/J3DTexture.h +++ b/include/JSystem/J3DGraphBase/J3DTexture.h @@ -63,6 +63,8 @@ struct J3DTexCoord : public J3DTexCoordInfo { u8 getTexGenMtx() { return mTexGenMtx & 0xff; } u16 getTexMtxReg() { return mTexMtxReg & 0xff; } + void setTexGenMtx(u8 v) { mTexGenMtx = v; } + void resetTexMtxReg() { mTexMtxReg = mTexGenMtx; } diff --git a/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp b/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp index 5e5689140..34c144458 100644 --- a/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp @@ -4,16 +4,24 @@ // #include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" /* 802F5C48-802F5C70 .text clear__16J3DMaterialTableFv */ void J3DMaterialTable::clear() { - /* Nonmatching */ + mMaterialNum = 0; + mMaterialNodePointer = NULL; + mMaterialName = NULL; + field_0x10 = NULL; + field_0x14 = NULL; + mTexture = NULL; + mTextureName = NULL; + field_0x20 = 0; } /* 802F5C70-802F5CAC .text __ct__16J3DMaterialTableFv */ J3DMaterialTable::J3DMaterialTable() { - /* Nonmatching */ + clear(); } /* 802F5CAC-802F5CF4 .text __dt__16J3DMaterialTableFv */ @@ -22,56 +30,271 @@ J3DMaterialTable::~J3DMaterialTable() { } /* 802F5CF4-802F5DC8 .text entryMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */ -void J3DMaterialTable::entryMatColorAnimator(J3DAnmColor*) { - /* Nonmatching */ +s32 J3DMaterialTable::entryMatColorAnimator(J3DAnmColor* pAnm) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setMatColorAnm(0, new J3DMatColorAnm(pAnm, i)); + } + } + + return ret; } /* 802F5DC8-802F6058 .text entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */ -void J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey*) { - /* Nonmatching */ +s32 J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* pAnm) { } /* 802F6058-802F61E8 .text entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */ -void J3DMaterialTable::entryTevRegAnimator(J3DAnmTevRegKey*) { - /* Nonmatching */ +s32 J3DMaterialTable::entryTevRegAnimator(J3DAnmTevRegKey* pAnm) { + s32 ret = 0; + u16 cRegMaterialNum = pAnm->getCRegUpdateMaterialNum(); + u16 kRegMaterialNum = pAnm->getKRegUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < cRegMaterialNum; i++) { + u16 materialID = pAnm->getCRegUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + u8 colorId = pAnm->getAnmCRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTevColorAnm(colorId, new J3DTevColorAnm(pAnm, i)); + } + } + + for (u16 i = 0; i < kRegMaterialNum; i++) { + u16 materialID = pAnm->getKRegUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + u8 colorId = pAnm->getAnmKRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTevKColorAnm(colorId, new J3DTevKColorAnm(pAnm, i)); + } + } + + return ret; } /* 802F61E8-802F6260 .text removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */ -int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor*) { - /* Nonmatching */ +int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor* pAnm) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setMatColorAnm(0, NULL); + } + } + + return ret; } /* 802F6260-802F62F4 .text removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */ -int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern*) { - /* Nonmatching */ +int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* pAnm) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + u8 texNo = pAnm->getAnmTable()[i].mTexNo; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTexNoAnm(texNo, NULL); + } + } + + return ret; } /* 802F62F4-802F6398 .text removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */ -int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey*) { - /* Nonmatching */ +int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey* pAnm) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterial * pMaterial = getMaterialNodePointer(materialID); + J3DMaterialAnm * pMatAnm = pMaterial->getMaterialAnm(); + u8 texMtxID = pAnm->getUpdateTexMtxID(i); + if (pMatAnm == NULL) { + ret = 1; + } else if (texMtxID != 0xFF) { + pMatAnm->setTexMtxAnm(texMtxID, NULL); + } + } + } + + return ret; } /* 802F6398-802F64B8 .text removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */ -int J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey*) { - /* Nonmatching */ +int J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey* pAnm) { + s32 ret = 0; + u16 cRegMaterialNum = pAnm->getCRegUpdateMaterialNum(); + u16 kRegMaterialNum = pAnm->getKRegUpdateMaterialNum(); + + for (u16 i = 0; i < cRegMaterialNum; i++) { + if (pAnm->getCRegUpdateMaterialID(i) != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getCRegUpdateMaterialID(i))->getMaterialAnm(); + u8 colorId = pAnm->getAnmCRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTevColorAnm(colorId, NULL); + } + } + + for (u16 i = 0; i < kRegMaterialNum; i++) { + if (pAnm->getKRegUpdateMaterialID(i) != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getKRegUpdateMaterialID(i))->getMaterialAnm(); + u8 colorId = pAnm->getAnmKRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) { + ret = 1; + } else { + pMatAnm->setTevKColorAnm(colorId, NULL); + } + } + } + + return ret; } /* 802F64B8-802F6550 .text setMatColorAnimator__16J3DMaterialTableFP11J3DAnmColorP14J3DMatColorAnm */ -void J3DMaterialTable::setMatColorAnimator(J3DAnmColor*, J3DMatColorAnm*) { - /* Nonmatching */ +s32 J3DMaterialTable::setMatColorAnimator(J3DAnmColor* pAnm, J3DMatColorAnm* pAnmR) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setMatColorAnm(0, &pAnmR[i]); + } + } + + return ret; } /* 802F6550-802F6600 .text setTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPatternP11J3DTexNoAnm */ -void J3DMaterialTable::setTexNoAnimator(J3DAnmTexPattern*, J3DTexNoAnm*) { - /* Nonmatching */ +s32 J3DMaterialTable::setTexNoAnimator(J3DAnmTexPattern* pAnm, J3DTexNoAnm* pAnmR) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm(); + u8 texNo = pAnm->getAnmTable()[i].mTexNo; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTexNoAnm(texNo, &pAnmR[i]); + } + } + + return ret; } /* 802F6600-802F6798 .text setTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKeyP12J3DTexMtxAnmP12J3DTexMtxAnm */ -void J3DMaterialTable::setTexMtxAnimator(J3DAnmTextureSRTKey*, J3DTexMtxAnm*, J3DTexMtxAnm*) { - /* Nonmatching */ +s32 J3DMaterialTable::setTexMtxAnimator(J3DAnmTextureSRTKey* pAnm, J3DTexMtxAnm* pTexAnmR, J3DTexMtxAnm* pDualAnmR) { + s32 ret = 0; + u16 materialNum = pAnm->getUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < materialNum; i++) { + u16 materialID = pAnm->getUpdateMaterialID(i); + if (materialID != 0xFFFF) { + J3DMaterial * pMaterial = getMaterialNodePointer(materialID); + J3DMaterialAnm * pMatAnm = pMaterial->getMaterialAnm(); + u8 texMtxID = pAnm->getUpdateTexMtxID(i); + if (pMatAnm == NULL) { + ret = 1; + } else if (texMtxID != 0xFF) { + if (pMaterial->getTexGenBlock()->getTexCoord(texMtxID) != NULL) { + pMaterial->getTexGenBlock()->getTexCoord(texMtxID)->setTexGenMtx(GX_TEXMTX0 + (texMtxID & 0xFF) * 3); + } + + J3DTexMtx *pTexMtx = pMaterial->getTexGenBlock()->getTexMtx(texMtxID); + pTexMtx->getTexMtxInfo().mInfo = ((pTexMtx->getTexMtxInfo().mInfo) & 0x7F) | (u8)(pAnm->getTexMtxCalcType() << 7); + pTexMtx->getTexMtxInfo().mCenter.x = pAnm->getSRTCenter(i).x; + pTexMtx->getTexMtxInfo().mCenter.x = pAnm->getSRTCenter(i).y; + pTexMtx->getTexMtxInfo().mCenter.z = pAnm->getSRTCenter(i).z; + + pMatAnm->setTexMtxAnm(texMtxID, &pTexAnmR[i]); + } + } + } + + return ret; } /* 802F6798-802F68F0 .text setTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKeyP14J3DTevColorAnmP15J3DTevKColorAnm */ -void J3DMaterialTable::setTevRegAnimator(J3DAnmTevRegKey*, J3DTevColorAnm*, J3DTevKColorAnm*) { - /* Nonmatching */ +s32 J3DMaterialTable::setTevRegAnimator(J3DAnmTevRegKey* pAnm, J3DTevColorAnm* pCRegAnmR, J3DTevKColorAnm* pKRegAnmR) { + s32 ret = 0; + u16 cRegMaterialNum = pAnm->getCRegUpdateMaterialNum(); + u16 kRegMaterialNum = pAnm->getKRegUpdateMaterialNum(); + + if (field_0x20 == 1) + return 2; + + for (u16 i = 0; i < cRegMaterialNum; i++) { + if (pAnm->getCRegUpdateMaterialID(i) != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getCRegUpdateMaterialID(i))->getMaterialAnm(); + u8 colorId = pAnm->getAnmCRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) + ret = 1; + else + pMatAnm->setTevColorAnm(colorId, &pCRegAnmR[i]); + } + } + + for (u16 i = 0; i < kRegMaterialNum; i++) { + if (pAnm->getKRegUpdateMaterialID(i) != 0xFFFF) { + J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getKRegUpdateMaterialID(i))->getMaterialAnm(); + u8 colorId = pAnm->getAnmKRegKeyTable()[i].mColorId; + if (pMatAnm == NULL) { + ret = 1; + } else { + pMatAnm->setTevKColorAnm(colorId, &pKRegAnmR[i]); + } + } + } + + return ret; }