From a1497b3bf5529efb280ae04d4c8e11fb8c1069ab Mon Sep 17 00:00:00 2001 From: lepelog <25211966+lepelog@users.noreply.github.com> Date: Tue, 4 Jan 2022 18:06:14 +0100 Subject: [PATCH] tmp --- include/JSystem/J2DGraph/J2DAnimation.h | 38 +++--- include/JSystem/J2DGraph/J2DAnmLoader.h | 22 ++- libs/JSystem/J2DGraph/J2DAnimation.cpp | 24 ++-- libs/JSystem/J2DGraph/J2DAnmLoader.cpp | 170 +++++++++++++++++++++++- 4 files changed, 213 insertions(+), 41 deletions(-) diff --git a/include/JSystem/J2DGraph/J2DAnimation.h b/include/JSystem/J2DGraph/J2DAnimation.h index 654c997b511..0757385a1db 100644 --- a/include/JSystem/J2DGraph/J2DAnimation.h +++ b/include/JSystem/J2DGraph/J2DAnimation.h @@ -20,9 +20,9 @@ public: f32 getFrame() const { return mFrame; } s32 getKind() const { return mKind; } -private: /* 0x0 */ // vtable - /* 0x4 */ u8 field_0x4[2]; + /* 0x4 */ u8 field_0x4; + /* 0x5 */ u8 field_0x5; /* 0x6 */ s16 mFrameMax; /* 0x8 */ f32 mFrame; /* 0xC */ s32 mKind; @@ -107,13 +107,12 @@ public: /* 80184370 */ virtual ~J2DAnmTransform() {} /* 80191130 */ virtual void getTransform(u16, J3DTransformInfo*) const; -protected: /* 0x10 */ f32* mScaleValues; /* 0x14 */ s16* mRotationValues; /* 0x18 */ f32* mTranslateValues; }; // Size: 0x1C -struct J2DAnmTransformKeyInfo { +struct J3DAnmTransformKeyTable { J3DAnmKeyTableBase mScaleInfo; J3DAnmKeyTableBase mRotationInfo; J3DAnmKeyTableBase mTranslateInfo; @@ -127,10 +126,10 @@ public: } /* 8030AAFC */ virtual void calcTransform(f32, u16, J3DTransformInfo*) const; -private: - /* 0x1C */ u8 field_0x1c[8]; + /* 0x1C */ u8 field_0x1c[6]; + /* 0x22 */ s16 field_0x22; /* 0x24 */ u32 field_0x24; - /* 0x28 */ J2DAnmTransformKeyInfo* mInfoTable; + /* 0x28 */ J3DAnmTransformKeyTable* mInfoTable; }; struct J2DAnmTransformFullInfo { @@ -153,12 +152,6 @@ private: /* 0x24 */ J2DAnmTransformFullInfo* mTableInfo; }; -struct J2DAnmTextureSRTKeyInfo { - J3DAnmKeyTableBase mScaleInfo; - J3DAnmKeyTableBase mRotationInfo; - J3DAnmKeyTableBase mTranslationInfo; -}; // Size = 0x12 - class J2DAnmTextureSRTKey : public J2DAnmBase { public: /* 8030B9F0 */ void calcTransform(f32, u16, J3DTextureSRTInfo*) const; @@ -167,30 +160,31 @@ public: /* 8030BC60 */ virtual void searchUpdateMaterialID(J2DScreen*); u16 getUpdateMaterialNum() const { return mUpdateMaterialNum / 3; } -private: /* 0x10 */ int field_0x10; - /* 0x14 */ J2DAnmTextureSRTKeyInfo* mInfoTable; + /* 0x14 */ J3DAnmTransformKeyTable* mInfoTable; /* 0x18 */ u16 mUpdateMaterialNum; /* 0x1A */ u16 field_0x1a; /* 0x1C */ u16 field_0x1c; + /* 0x1E */ u16 field_0x1e; /* 0x20 */ f32* mScaleValues; /* 0x24 */ s16* mRotationValues; /* 0x28 */ f32* mTranslationValues; /* 0x2C */ u8* mUpdateTexMtxID; /* 0x30 */ u16* mUpdateMaterialID; /* 0x34 */ JUTNameTab field_0x34; - /* 0x44 */ u8 field_0x44[4]; + /* 0x44 */ Vec *field_0x44; /* 0x48 */ u16 field_0x48; /* 0x4A */ u16 field_0x4a; /* 0x4C */ u16 field_0x4c; /* 0x4E */ u16 field_0x4e; - /* 0x50 */ int field_0x50; - /* 0x54 */ int field_0x54; - /* 0x58 */ int field_0x58; - /* 0x5C */ int field_0x5c; - /* 0x60 */ u8 field_0x60[8]; + /* 0x50 */ f32* field_0x50; + /* 0x54 */ s16* field_0x54; + /* 0x58 */ f32* field_0x58; + /* 0x5C */ J3DAnmTransformKeyTable* field_0x5c; + /* 0x60 */ u8* field_0x60; + /* 0x64 */ u16* field_0x64; /* 0x68 */ JUTNameTab field_0x68; - /* 0x78 */ u8 field_0x78[4]; + /* 0x78 */ Vec* field_0x78; /* 0x7C */ int field_0x7c; }; diff --git a/include/JSystem/J2DGraph/J2DAnmLoader.h b/include/JSystem/J2DGraph/J2DAnmLoader.h index b6867363da2..bf1b882f8cf 100644 --- a/include/JSystem/J2DGraph/J2DAnmLoader.h +++ b/include/JSystem/J2DGraph/J2DAnmLoader.h @@ -11,12 +11,24 @@ struct J2DAnmLoaderDataBase { class J2DAnmLoader { public: - virtual void load(void const*) = 0; + virtual void *load(void const*) = 0; virtual void setResource(J2DAnmBase*, void const*) = 0; - /* 8030A410 */ virtual ~J2DAnmLoader(); + /* 8030A410 */ virtual ~J2DAnmLoader() {} }; -struct J3DAnmTransformKeyData; +struct J3DAnmTransformKeyData { + /* 0x00 */ u8 _0[0x8]; + /* 0x08 */ u8 _8; + /* 0x09 */ u8 _9; + /* 0x0A */ s16 mFrameMax; + /* 0x0C */ u16 _C; + /* 0x0E */ u8 _E[0x14-0xE]; + /* 0x14 */ s32 mTableOffset; + /* 0x18 */ s32 mScaleOffset; + /* 0x1C */ s32 mRotationOffset; + /* 0x20 */ s32 mTranslateOffset; + +}; struct J3DAnmTextureSRTKeyData; struct J3DAnmColorKeyData; struct J3DAnmVtxColorKeyData; @@ -41,9 +53,11 @@ public: /* 80309FDC */ void readAnmTevReg(J3DAnmTevRegKeyData const*); /* 8030A004 */ void setAnmTevReg(J2DAnmTevRegKey*, J3DAnmTevRegKeyData const*); - /* 80309308 */ virtual void load(void const*); + /* 80309308 */ virtual void *load(void const*); /* 80309414 */ virtual void setResource(J2DAnmBase*, void const*); /* 803092AC */ virtual ~J2DAnmKeyLoader_v15(); + + /* 0x04 */ void* _4; }; class J2DAnmFullLoader_v15 : public J2DAnmLoader { diff --git a/libs/JSystem/J2DGraph/J2DAnimation.cpp b/libs/JSystem/J2DGraph/J2DAnimation.cpp index fcb85ac1b7c..f2241fe9180 100644 --- a/libs/JSystem/J2DGraph/J2DAnimation.cpp +++ b/libs/JSystem/J2DGraph/J2DAnimation.cpp @@ -103,9 +103,9 @@ void J2DAnmTransformFull::getTransform(u16 param_0, J3DTransformInfo* transformI void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1, J3DTransformInfo* transformInfo) const { u16 idx = param_1 * 3; - J2DAnmTransformKeyInfo* xInf = &mInfoTable[idx]; - J2DAnmTransformKeyInfo* yInf = &mInfoTable[idx + 1]; - J2DAnmTransformKeyInfo* zInf = &mInfoTable[idx + 2]; + J3DAnmTransformKeyTable* xInf = &mInfoTable[idx]; + J3DAnmTransformKeyTable* yInf = &mInfoTable[idx + 1]; + J3DAnmTransformKeyTable* zInf = &mInfoTable[idx + 2]; switch (xInf->mScaleInfo.mMaxFrame) { case 0: transformInfo->mScale.x = 1; @@ -464,9 +464,9 @@ void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) cons * calcTransform__19J2DAnmTextureSRTKeyCFfUsP17J3DTextureSRTInfo */ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTInfo* pInfo) const { u16 idx = param_1 * 3; - J2DAnmTextureSRTKeyInfo* xInf = &mInfoTable[idx]; - J2DAnmTextureSRTKeyInfo* yInf = &mInfoTable[idx + 1]; - J2DAnmTextureSRTKeyInfo* zInf = &mInfoTable[idx + 2]; + J3DAnmTransformKeyTable* xInf = &mInfoTable[idx]; + J3DAnmTransformKeyTable* yInf = &mInfoTable[idx + 1]; + J3DAnmTransformKeyTable* zInf = &mInfoTable[idx + 2]; switch (xInf->mScaleInfo.mMaxFrame) { case 0: pInfo->mScaleX = 1; @@ -502,27 +502,27 @@ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTI param_0, &zInf->mRotationInfo, &mRotationValues[zInf->mRotationInfo.mOffset])) << field_0x10; } - switch (xInf->mTranslationInfo.mMaxFrame) { + switch (xInf->mTranslateInfo.mMaxFrame) { case 0: pInfo->mTranslationX = 0; break; case 1: - pInfo->mTranslationX = mTranslationValues[xInf->mTranslationInfo.mOffset]; + pInfo->mTranslationX = mTranslationValues[xInf->mTranslateInfo.mOffset]; break; default: pInfo->mTranslationX = J2DGetKeyFrameInterpolationf( - param_0, &xInf->mTranslationInfo, &mTranslationValues[xInf->mTranslationInfo.mOffset]); + param_0, &xInf->mTranslateInfo, &mTranslationValues[xInf->mTranslateInfo.mOffset]); } - switch (yInf->mTranslationInfo.mMaxFrame) { + switch (yInf->mTranslateInfo.mMaxFrame) { case 0: pInfo->mTranslationY = 0; break; case 1: - pInfo->mTranslationY = mTranslationValues[yInf->mTranslationInfo.mOffset]; + pInfo->mTranslationY = mTranslationValues[yInf->mTranslateInfo.mOffset]; break; default: pInfo->mTranslationY = J2DGetKeyFrameInterpolationf( - param_0, &yInf->mTranslationInfo, &mTranslationValues[yInf->mTranslationInfo.mOffset]); + param_0, &yInf->mTranslateInfo, &mTranslationValues[yInf->mTranslateInfo.mOffset]); } } diff --git a/libs/JSystem/J2DGraph/J2DAnmLoader.cpp b/libs/JSystem/J2DGraph/J2DAnmLoader.cpp index 33fff4e5ff8..ee19e3f3d46 100644 --- a/libs/JSystem/J2DGraph/J2DAnmLoader.cpp +++ b/libs/JSystem/J2DGraph/J2DAnmLoader.cpp @@ -18,11 +18,35 @@ struct J3DAnmVtxColorFullData {}; struct J3DAnmVisibilityFullData {}; -struct J3DAnmTransformKeyData {}; - struct J3DAnmTransformFullData {}; -struct J3DAnmTextureSRTKeyData {}; +struct J3DAnmTextureSRTKeyData { + u8 field_0x0[8]; + u8 field_0x8; + u8 field_0x9; + u16 field_0xa; + u16 field_0xc; + u16 field_0xe; + u16 field_0x10; + u16 field_0x12; + s32 mTableOffset; + s32 mUpdateMatIDOffset; + s32 mNameTab1Offset; + s32 mUpdateTexMtxIDOffset; + s32 unkOffset; + s32 mScaleValOffset; + s32 mRotValOffset; + s32 mTransValOffset; + u16 field_0x34; + u16 field_0x36; + u16 field_0x38; + u16 field_0x3a; + s32 mInfoTable2Offset; + u8 field_0x40[4]; + s32 mNameTab2Offset; + u8 field_0x48[0x5C-0x48]; + s32 field_0x5c; +}; struct J3DAnmTexPatternFullData {}; @@ -184,6 +208,9 @@ asm void* J2DAnmLoaderDataBase::load(void const* param_0) { #pragma pop /* 80309290-803092AC 303BD0 001C+00 1/1 0/0 0/0 .text __ct__19J2DAnmKeyLoader_v15Fv */ +#ifndef NM +J2DAnmKeyLoader_v15::J2DAnmKeyLoader_v15() {} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -192,8 +219,12 @@ asm J2DAnmKeyLoader_v15::J2DAnmKeyLoader_v15() { #include "asm/JSystem/J2DGraph/J2DAnmLoader/__ct__19J2DAnmKeyLoader_v15Fv.s" } #pragma pop +#endif /* 803092AC-80309308 303BEC 005C+00 2/1 0/0 0/0 .text __dt__19J2DAnmKeyLoader_v15Fv */ +#ifndef NM +J2DAnmKeyLoader_v15::~J2DAnmKeyLoader_v15() {} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -202,8 +233,48 @@ asm J2DAnmKeyLoader_v15::~J2DAnmKeyLoader_v15() { #include "asm/JSystem/J2DGraph/J2DAnmLoader/__dt__19J2DAnmKeyLoader_v15Fv.s" } #pragma pop +#endif + +struct DataBlockHeader { + /* 0x0 */ u32 mType; + /* 0x4 */ u32 mNextOffset; +}; + +struct DataHeader { + /* 0x00 */ u8 _0[0xC]; + /* 0x0C */ u32 mCount; + /* 0x10 */ u8 _10[0x20-0x10]; + /* 0x20 */ DataBlockHeader mFirst; +}; /* 80309308-80309414 303C48 010C+00 2/1 0/0 0/0 .text load__19J2DAnmKeyLoader_v15FPCv */ +#ifndef NM +void *J2DAnmKeyLoader_v15::load(void const* param_0) { + const DataHeader *hdr = (const DataHeader*) param_0; + const DataBlockHeader *dataPtr = &hdr->mFirst; + for (s32 i = 0; i < hdr->mCount; i++) { + switch (dataPtr->mType) { + case 'ANK1': + this->readAnmTransform((J3DAnmTransformKeyData*) dataPtr); + break; + case 'PAK1': + this->readAnmColor((J3DAnmColorKeyData*) dataPtr); + break; + case 'TTK1': + this->readAnmTextureSRT((J3DAnmTextureSRTKeyData*) dataPtr); + break; + case 'VCK1': + this->readAnmVtxColor((J3DAnmVtxColorKeyData*) dataPtr); + break; + case 'TRK1': + this->readAnmTevReg((J3DAnmTevRegKeyData*) dataPtr); + break; + } + dataPtr = (DataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset); + } + return _4; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -213,9 +284,46 @@ extern "C" asm void load__19J2DAnmKeyLoader_v15FPCv() { #include "asm/JSystem/J2DGraph/J2DAnmLoader/load__19J2DAnmKeyLoader_v15FPCv.s" } #pragma pop +#endif /* 80309414-80309570 303D54 015C+00 1/0 0/0 0/0 .text * setResource__19J2DAnmKeyLoader_v15FP10J2DAnmBasePCv */ +#ifndef NM +void J2DAnmKeyLoader_v15::setResource(J2DAnmBase* pAnm, void const* param_1) { + const DataHeader *hdr = (const DataHeader*) param_1; + const DataBlockHeader *dataPtr = &hdr->mFirst; + for (s32 i = 0; i < hdr->mCount; i++) { + switch (dataPtr->mType) { + case 'ANK1': + if (pAnm->getKind() == 0) { + this->setAnmTransform((J2DAnmTransformKey*) pAnm, (J3DAnmTransformKeyData*) dataPtr); + } + break; + case 'PAK1': + if (pAnm->getKind() == 1) { + this->setAnmColor((J2DAnmColorKey*) pAnm, (J3DAnmColorKeyData*) dataPtr); + } + break; + case 'TTK1': + if (pAnm->getKind() == 4) { + this->setAnmTextureSRT((J2DAnmTextureSRTKey*) pAnm, (J3DAnmTextureSRTKeyData*) dataPtr); + } + break; + case 'TRK1': + if (pAnm->getKind() == 5) { + this->setAnmTevReg((J2DAnmTevRegKey*) pAnm, (J3DAnmTevRegKeyData*) dataPtr); + } + break; + case 'VCK1': + if (pAnm->getKind() == 7) { + this->setAnmVtxColor((J2DAnmVtxColorKey*) pAnm, (J3DAnmVtxColorKeyData*) dataPtr); + } + break; + } + dataPtr = (DataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -224,9 +332,15 @@ asm void J2DAnmKeyLoader_v15::setResource(J2DAnmBase* param_0, void const* param #include "asm/JSystem/J2DGraph/J2DAnmLoader/setResource__19J2DAnmKeyLoader_v15FP10J2DAnmBasePCv.s" } #pragma pop +#endif /* 80309570-80309598 303EB0 0028+00 1/1 0/0 0/0 .text * readAnmTransform__19J2DAnmKeyLoader_v15FPC22J3DAnmTransformKeyData */ +#ifndef NM +void J2DAnmKeyLoader_v15::readAnmTransform(J3DAnmTransformKeyData const* pData) { + this->setAnmTransform((J2DAnmTransformKey*)_4, pData); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -235,9 +349,32 @@ asm void J2DAnmKeyLoader_v15::readAnmTransform(J3DAnmTransformKeyData const* par #include "asm/JSystem/J2DGraph/J2DAnmLoader/readAnmTransform__19J2DAnmKeyLoader_v15FPC22J3DAnmTransformKeyData.s" } #pragma pop +#endif + +template +T* JSUConvertOffsetToPtr(const void* ptr, const void* offset) { + if (ptr == NULL) { + return NULL; + } else { + return (T*) ((s32)ptr + (s32)offset); + } +} /* 80309598-80309634 303ED8 009C+00 2/2 0/0 0/0 .text * setAnmTransform__19J2DAnmKeyLoader_v15FP18J2DAnmTransformKeyPC22J3DAnmTransformKeyData */ +#ifndef NM +void J2DAnmKeyLoader_v15::setAnmTransform(J2DAnmTransformKey* param_0, J3DAnmTransformKeyData const* param_1) { + param_0->field_0x22 = param_1->_C; + param_0->mFrameMax = param_1->mFrameMax; + param_0->field_0x4 = param_1->_8; + param_0->field_0x24 = param_1->_9; + param_0->mFrame = 0; + param_0->mInfoTable = JSUConvertOffsetToPtr(param_1, (void*)param_1->mTableOffset); + param_0->mScaleValues = JSUConvertOffsetToPtr(param_1, (void*) param_1->mScaleOffset); + param_0->mRotationValues = JSUConvertOffsetToPtr(param_1, (void*) param_1->mRotationOffset); + param_0->mTranslateValues = JSUConvertOffsetToPtr(param_1, (void*) param_1->mTranslateOffset); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -247,9 +384,15 @@ asm void J2DAnmKeyLoader_v15::setAnmTransform(J2DAnmTransformKey* param_0, #include "asm/JSystem/J2DGraph/J2DAnmLoader/func_80309598.s" } #pragma pop +#endif /* 80309634-8030965C 303F74 0028+00 1/1 0/0 0/0 .text * readAnmTextureSRT__19J2DAnmKeyLoader_v15FPC23J3DAnmTextureSRTKeyData */ +#ifndef NM +void J2DAnmKeyLoader_v15::readAnmTextureSRT(J3DAnmTextureSRTKeyData const* param_0) { + this->setAnmTextureSRT((J2DAnmTextureSRTKey*) _4, param_0); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -258,9 +401,29 @@ asm void J2DAnmKeyLoader_v15::readAnmTextureSRT(J3DAnmTextureSRTKeyData const* p #include "asm/JSystem/J2DGraph/J2DAnmLoader/readAnmTextureSRT__19J2DAnmKeyLoader_v15FPC23J3DAnmTextureSRTKeyData.s" } #pragma pop +#endif /* 8030965C-80309848 303F9C 01EC+00 2/2 0/0 0/0 .text * setAnmTextureSRT__19J2DAnmKeyLoader_v15FP19J2DAnmTextureSRTKeyPC23J3DAnmTextureSRTKeyData */ +#ifndef NM +void J2DAnmKeyLoader_v15::setAnmTextureSRT(J2DAnmTextureSRTKey* pAnm, J3DAnmTextureSRTKeyData const* pData) { + pAnm->mUpdateMaterialNum = pData->field_0xc; + pAnm->mFrameMax = pData->field_0xa; + pAnm->field_0x4 = pData->field_0x8; + pAnm->field_0x10 = pData->field_0x9; + pAnm->mFrame = 0; + pAnm->field_0x1a = pData->field_0xe; + pAnm->field_0x1c = pData->field_0x10; + pAnm->field_0x1e = pData->field_0x12; + pAnm->mInfoTable = JSUConvertOffsetToPtr(pData, (void*)pData->mTableOffset); + pAnm->mUpdateMaterialID = JSUConvertOffsetToPtr(pData, (void*)pData->mUpdateMatIDOffset); + pAnm->field_0x34.setResource(JSUConvertOffsetToPtr(pData, (void*)pData->mNameTab1Offset)); + pAnm->mUpdateTexMtxID = JSUConvertOffsetToPtr(pData, (void*)pData->mUpdateTexMtxIDOffset); + pAnm->field_0x44 = JSUConvertOffsetToPtr(pData, (void*)pData->unkOffset); + + +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -270,6 +433,7 @@ asm void J2DAnmKeyLoader_v15::setAnmTextureSRT(J2DAnmTextureSRTKey* param_0, #include "asm/JSystem/J2DGraph/J2DAnmLoader/func_8030965C.s" } #pragma pop +#endif /* 80309848-80309870 304188 0028+00 1/1 0/0 0/0 .text * readAnmColor__19J2DAnmKeyLoader_v15FPC18J3DAnmColorKeyData */