diff --git a/include/JSystem/J3DGraphAnimator/J3DCluster.h b/include/JSystem/J3DGraphAnimator/J3DCluster.h index 6081c0dbb..abdd5e67a 100644 --- a/include/JSystem/J3DGraphAnimator/J3DCluster.h +++ b/include/JSystem/J3DGraphAnimator/J3DCluster.h @@ -4,20 +4,22 @@ #include "dolphin/types.h" class J3DDeformer; +class J3DClusterKey; +class J3DClusterVertex; class J3DCluster { public: void operator=(const J3DCluster& other) { - field_0x0 = other.field_0x0; - field_0x4 = other.field_0x4; - field_0x8 = other.field_0x8; - field_0xc = other.field_0xc; - field_0x10 = other.field_0x10; - field_0x12 = other.field_0x12; + mMaxAngle = other.mMaxAngle; + mMinAngle = other.mMinAngle; + mClusterKey = other.mClusterKey; + mFlags = other.mFlags; + mKeyNum = other.mKeyNum; + mPosNum = other.mPosNum; field_0x14 = other.field_0x14; field_0x16 = other.field_0x16; field_0x18 = other.field_0x18; - field_0x1c = other.field_0x1c; + mClusterVertex = other.mClusterVertex; mDeformer = other.mDeformer; } @@ -28,25 +30,25 @@ private: friend class J3DClusterLoader; friend class J3DClusterLoader_v15; - /* 0x00 */ f32 field_0x0; - /* 0x04 */ f32 field_0x4; - /* 0x08 */ void* field_0x8; - /* 0x0C */ u8 field_0xc; + /* 0x00 */ f32 mMaxAngle; + /* 0x04 */ f32 mMinAngle; + /* 0x08 */ J3DClusterKey* mClusterKey; + /* 0x0C */ u8 mFlags; /* 0x0D */ u8 field_0xd[0x10 - 0x0D]; - /* 0x10 */ u16 field_0x10; - /* 0x12 */ u16 field_0x12; + /* 0x10 */ u16 mKeyNum; + /* 0x12 */ u16 mPosNum; /* 0x14 */ u16 field_0x14; /* 0x16 */ u16 field_0x16; - /* 0x18 */ void* field_0x18; - /* 0x1C */ void* field_0x1c; + /* 0x18 */ u16* field_0x18; + /* 0x1C */ J3DClusterVertex* mClusterVertex; /* 0x20 */ J3DDeformer* mDeformer; }; // Size: 0x24 class J3DClusterKey { public: void operator=(const J3DClusterKey& other) { - field_0x0 = other.field_0x0; - field_0x2 = other.field_0x2; + mPosNum = other.mPosNum; + mNrmNum = other.mNrmNum; field_0x4 = other.field_0x4; field_0x8 = other.field_0x8; } @@ -55,8 +57,8 @@ private: friend class J3DClusterLoader; friend class J3DClusterLoader_v15; - /* 0x00 */ u16 field_0x0; - /* 0x02 */ u16 field_0x2; + /* 0x00 */ u16 mPosNum; + /* 0x02 */ u16 mNrmNum; /* 0x04 */ void* field_0x4; /* 0x08 */ void* field_0x8; }; // Size: 0x0C @@ -64,7 +66,7 @@ private: class J3DClusterVertex { public: void operator=(const J3DClusterVertex& other) { - field_0x0 = other.field_0x0; + mNum = other.mNum; field_0x4 = other.field_0x4; field_0x8 = other.field_0x8; } @@ -73,7 +75,7 @@ private: friend class J3DClusterLoader; friend class J3DClusterLoader_v15; - /* 0x00 */ u16 field_0x0; + /* 0x00 */ u16 mNum; /* 0x04 */ u16* field_0x4; /* 0x08 */ u16* field_0x8; }; // Size: 0x0C diff --git a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h index dd0f78d7f..afec3a448 100644 --- a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h +++ b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h @@ -18,7 +18,6 @@ public: void clear(); void deform(J3DVertexBuffer*); void deform(J3DModel*); - void setAnm(J3DAnmCluster*); u16 getClusterNum() const { return mClusterNum; } u16 getClusterKeyNum() const { return mClusterKeyNum; } @@ -33,16 +32,16 @@ private: /* 0x00 */ u16 mClusterNum; /* 0x02 */ u16 mClusterKeyNum; - /* 0x04 */ u16 field_0x4; + /* 0x04 */ u16 mClusterVertexNum; /* 0x08 */ J3DCluster* mClusterPointer; /* 0x0C */ J3DClusterKey* mClusterKeyPointer; - /* 0x10 */ J3DClusterVertex* field_0x10; - /* 0x14 */ u16 field_0x14; - /* 0x16 */ u16 field_0x16; + /* 0x10 */ J3DClusterVertex* mClusterVertex; + /* 0x14 */ u16 mVtxPosNum; + /* 0x16 */ u16 mVtxNrmNum; /* 0x18 */ f32* mVtxPos; /* 0x1C */ f32* mVtxNrm; - /* 0x20 */ JUTNameTab* field_0x20; - /* 0x24 */ JUTNameTab* field_0x24; + /* 0x20 */ JUTNameTab* mClusterName; + /* 0x24 */ JUTNameTab* mClusterKeyName; }; // Size: 0x28 class J3DSkinDeform { @@ -102,8 +101,8 @@ private: /* 0x00 */ J3DDeformData* mDeformData; /* 0x04 */ J3DAnmCluster* mAnmCluster; - /* 0x08 */ void* field_0x8; - /* 0x0C */ void* field_0xc; + /* 0x08 */ f32* field_0x8; + /* 0x0C */ f32* field_0xc; /* 0x10 */ u32 mFlags; }; // Size: 0x14 diff --git a/include/JSystem/J3DGraphLoader/J3DClusterLoader.h b/include/JSystem/J3DGraphLoader/J3DClusterLoader.h index 561e04dcc..a55c3fff2 100644 --- a/include/JSystem/J3DGraphLoader/J3DClusterLoader.h +++ b/include/JSystem/J3DGraphLoader/J3DClusterLoader.h @@ -29,19 +29,18 @@ private: friend class J3DClusterLoader; friend class J3DClusterLoader_v15; - /* 0x08 */ u16 m08; - /* 0x0A */ u16 m0A; - /* 0x0C */ u16 m0C; - /* 0x0E */ u16 m0E; - /* 0x10 */ u16 m10; - /* 0x12 */ u16 m12; - /* 0x14 */ const void* m14; - /* 0x18 */ const void* m18; - /* 0x1C */ const void* m1C; - /* 0x20 */ const void* m20; - /* 0x24 */ const void* m24; - /* 0x28 */ const void* m28; - /* 0x2C */ const void* m2C; + /* 0x08 */ u16 mClusterNum; + /* 0x0A */ u16 mClusterKeyNum; + /* 0x0C */ u16 mClusterVertexNum; + /* 0x0E */ u16 mVtxPosNum; + /* 0x10 */ u16 mVtxNrmNum; + /* 0x14 */ void* mClusterPointer; + /* 0x18 */ void* mClusterKeyPointer; + /* 0x1C */ void* mClusterVertex; + /* 0x20 */ void* mVtxPos; + /* 0x24 */ void* mVtxNrm; + /* 0x28 */ void* mClusterName; + /* 0x2C */ void* mClusterKeyName; }; struct J3DClusterLoaderDataBase { diff --git a/src/JSystem/J3DGraphAnimator/J3DCluster.cpp b/src/JSystem/J3DGraphAnimator/J3DCluster.cpp index 3d7adadcc..f7e56ccb5 100644 --- a/src/JSystem/J3DGraphAnimator/J3DCluster.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DCluster.cpp @@ -13,8 +13,8 @@ void J3DDeformData::clear() { mClusterPointer = NULL; mClusterKeyNum = 0; mClusterKeyPointer = NULL; - field_0x20 = NULL; - field_0x24 = NULL; + mClusterName = NULL; + mClusterKeyName = NULL; } /* 802F37E4-802F3814 .text __ct__13J3DDeformDataFv */ diff --git a/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp b/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp index 61d3a11a1..f79a6c4f0 100644 --- a/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp +++ b/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp @@ -29,9 +29,10 @@ J3DClusterLoader_v15::~J3DClusterLoader_v15() {} /* 802FB160-802FB21C .text load__20J3DClusterLoader_v15FPCv */ void* J3DClusterLoader_v15::load(const void* i_data) { - const JSystemFileHeader* fileHeader = (JSystemFileHeader*)i_data; mpDeformData = new J3DDeformData(); mpDeformData->clear(); + + const JSystemFileHeader* fileHeader = (JSystemFileHeader*)i_data; const JSystemBlockHeader* block = &fileHeader->mFirst; for (int i = 0; i < fileHeader->mBlockNum; i++) { switch (block->mType) { @@ -44,62 +45,65 @@ void* J3DClusterLoader_v15::load(const void* i_data) { } block = block->getNext(); } + return mpDeformData; } /* 802FB21C-802FB698 .text readCluster__20J3DClusterLoader_v15FPC15J3DClusterBlock */ void J3DClusterLoader_v15::readCluster(const J3DClusterBlock* block) { - mpDeformData->mClusterNum = block->m08; - mpDeformData->mClusterKeyNum = block->m0A; - mpDeformData->field_0x14 = block->m0E; - mpDeformData->field_0x16 = block->m10; - mpDeformData->field_0x4 = block->m0C; - if (block->m28 != NULL) { - mpDeformData->field_0x20 = new JUTNameTab(JSUConvertOffsetToPtr(block, block->m28)); + mpDeformData->mClusterNum = block->mClusterNum; + mpDeformData->mClusterKeyNum = block->mClusterKeyNum; + mpDeformData->mVtxPosNum = block->mVtxPosNum; + mpDeformData->mVtxNrmNum = block->mVtxNrmNum; + mpDeformData->mClusterVertexNum = block->mClusterVertexNum; + + if (block->mClusterName != NULL) { + mpDeformData->mClusterName = new JUTNameTab(JSUConvertOffsetToPtr(block, block->mClusterName)); } else { - mpDeformData->field_0x20 = NULL; + mpDeformData->mClusterName = NULL; } - if (block->m2C != NULL) { - mpDeformData->field_0x24 = new JUTNameTab(JSUConvertOffsetToPtr(block, block->m2C)); + if (block->mClusterKeyName != NULL) { + mpDeformData->mClusterKeyName = new JUTNameTab(JSUConvertOffsetToPtr(block, block->mClusterKeyName)); } else { - mpDeformData->field_0x24 = NULL; + mpDeformData->mClusterKeyName = NULL; } - mpDeformData->mVtxPos = JSUConvertOffsetToPtr(block, block->m20); - mpDeformData->mVtxNrm = JSUConvertOffsetToPtr(block, block->m24); + + mpDeformData->mVtxPos = JSUConvertOffsetToPtr(block, block->mVtxPos); + mpDeformData->mVtxNrm = JSUConvertOffsetToPtr(block, block->mVtxNrm); mpDeformData->mClusterPointer = new J3DCluster[mpDeformData->getClusterNum()]; - J3DCluster* blockCluster = JSUConvertOffsetToPtr(block, block->m14); + J3DCluster* blockCluster = JSUConvertOffsetToPtr(block, block->mClusterPointer); for (int i = 0; i < mpDeformData->getClusterNum(); i++) { mpDeformData->mClusterPointer[i] = blockCluster[i]; } mpDeformData->mClusterKeyPointer = new J3DClusterKey[mpDeformData->getClusterKeyNum()]; - J3DClusterKey* blockClusterKey = JSUConvertOffsetToPtr(block, block->m18); + J3DClusterKey* blockClusterKey = JSUConvertOffsetToPtr(block, block->mClusterKeyPointer); for (int i = 0; i < mpDeformData->getClusterKeyNum(); i++) { mpDeformData->mClusterKeyPointer[i] = blockClusterKey[i]; } - mpDeformData->field_0x10 = new J3DClusterVertex[mpDeformData->field_0x4]; - J3DClusterVertex* blockClusterVertex = JSUConvertOffsetToPtr(block, block->m1C); - for (int i = 0; i < mpDeformData->field_0x4; i++) { - mpDeformData->field_0x10[i] = blockClusterVertex[i]; + mpDeformData->mClusterVertex = new J3DClusterVertex[mpDeformData->mClusterVertexNum]; + J3DClusterVertex* blockClusterVertex = JSUConvertOffsetToPtr(block, block->mClusterVertex); + for (int i = 0; i < mpDeformData->mClusterVertexNum; i++) { + mpDeformData->mClusterVertex[i] = blockClusterVertex[i]; } for (int i = 0; i < mpDeformData->getClusterNum(); i++) { J3DCluster* cluster = &mpDeformData->mClusterPointer[i]; - cluster->field_0x8 = JSUConvertOffsetToPtr(block, cluster->field_0x8); + cluster->mClusterKey = JSUConvertOffsetToPtr(block, cluster->mClusterKey); cluster->field_0x18 = JSUConvertOffsetToPtr(block, cluster->field_0x18); - int r3 = (int)JSUConvertOffsetToPtr(block, cluster->field_0x1c); - int r31 = (int)blockClusterVertex; - cluster->field_0x1c = &mpDeformData->field_0x10[(r3 - r31)/0xC/0xCUL]; // fakematch, TODO + J3DClusterVertex* clusterVertex = JSUConvertOffsetToPtr(block, cluster->mClusterVertex); + u32 vertexIdx = (clusterVertex - blockClusterVertex) / sizeof(J3DClusterVertex); + cluster->mClusterVertex = &mpDeformData->mClusterVertex[vertexIdx]; J3DDeformer* deformer = new J3DDeformer(mpDeformData); if (cluster->field_0x14 != 0) { - deformer->field_0xc = new u32[cluster->field_0x14*3]; + deformer->field_0xc = new f32[cluster->field_0x14*3]; } else { deformer->field_0xc = NULL; } - deformer->mFlags = cluster->field_0xc; - deformer->field_0x8 = new u32[cluster->field_0x10]; + deformer->mFlags = cluster->mFlags; + deformer->field_0x8 = new f32[cluster->mKeyNum]; cluster->setDeformer(deformer); } @@ -109,8 +113,8 @@ void J3DClusterLoader_v15::readCluster(const J3DClusterBlock* block) { clusterKey->field_0x8 = JSUConvertOffsetToPtr(block, clusterKey->field_0x8); } - for (int i = 0; i < mpDeformData->field_0x4; i++) { - J3DClusterVertex* clusterVertex = &mpDeformData->field_0x10[i]; + for (int i = 0; i < mpDeformData->mClusterVertexNum; i++) { + J3DClusterVertex* clusterVertex = &mpDeformData->mClusterVertex[i]; clusterVertex->field_0x4 = JSUConvertOffsetToPtr(block, clusterVertex->field_0x4); clusterVertex->field_0x8 = JSUConvertOffsetToPtr(block, clusterVertex->field_0x8); } diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index a7ab89d45..b99a133de 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -24,6 +24,7 @@ #include "d/d_material.h" #include "JSystem/J3DGraphLoader/J3DAnmLoader.h" #include "d/actor/d_a_hookshot.h" +#include "d/actor/d_a_ship.h" #include "SSystem/SComponent/c_counter.h" const Vec l_ship_offset = {0.0f, 15.0f, -35.0f}; @@ -5150,7 +5151,7 @@ BOOL daPy_lk_c::startRestartRoom(u32 param_1, int eventInfoIdx, f32 param_3, int if (stageType == 7) { cXyz* pos; if (dComIfGp_getShipActor()) { - pos = &((fopAc_ac_c*)dComIfGp_getShipActor())->current.pos; + pos = &dComIfGp_getShipActor()->current.pos; } else { pos = ¤t.pos; }