slight cleanup

This commit is contained in:
lepelog 2022-01-12 19:14:44 +01:00
parent 16ee7c9813
commit e1903d20cf
3 changed files with 226 additions and 205 deletions

View File

@ -6,6 +6,205 @@
#include "dolphin/gx/GX.h"
#include "dolphin/types.h"
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 mUpdaterMaterialIDOffset;
/* 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:
virtual ~J3DAnmBase();

View File

@ -0,0 +1,13 @@
#ifndef JSUPPORT_H
#define JSUPPORT_H
template <typename T>
T* JSUConvertOffsetToPtr(const void* ptr, const void* offset) {
if (ptr == NULL) {
return NULL;
} else {
return (T*) ((s32)ptr + (s32)offset);
}
}
#endif

View File

@ -5,6 +5,7 @@
#include "JSystem/J2DGraph/J2DAnmLoader.h"
#include "JSystem/J2DGraph/J2DAnimation.h"
#include "JSystem/JSupport/JSupport.h"
#include "dol2asm.h"
#include "dolphin/types.h"
@ -12,193 +13,10 @@
// Types:
//
struct DataBlockHeader {
/* 0x0 */ u32 mType;
/* 0x4 */ u32 mNextOffset;
};
struct DataHeader {
/* 0x00 */ u32 mMagic;
/* 0x04 */ u32 mType;
/* 0x08 */ u8 _8[4];
/* 0x0C */ u32 mCount;
/* 0x10 */ u8 _10[0x20-0x10];
/* 0x20 */ DataBlockHeader mFirst;
};
struct J3DAnmVtxColorFullData { /* PlaceHolder Structure */
/* 0x00 */ DataBlockHeader mHeader;
u8 field_0x8;
u8 field_0x9; // padding?
s16 mFrameMax;
u16 mAnmTableNum[2];
u8 field_0x10[0x18-0x10];
s32 mTableOffsets[2];
s32 mVtxColorIndexDataOffsets[2];
s32 mVtxColorIndexPointerOffsets[2];
s32 mRValuesOffset;
s32 mGValuesOffset;
s32 mBValuesOffset;
s32 mAValuesOffset;
};
struct J3DAnmVisibilityFullData {
/* 0x00 */ DataBlockHeader mHeader;
u8 field_0x8;
u8 field_0x9; // padding?
s16 mFrameMax;
u16 field_0xc;
u16 field_0xe;
s32 mTableOffset;
s32 mValuesOffset;
};
struct J3DAnmTransformFullData {
/* 0x00 */ DataBlockHeader mHeader;
u8 field_0x8;
u8 field_0x9;
s16 mFrameMax;
u16 field_0xc;
u8 field_0xe[0x14-0xe];
s32 mTableOffset;
s32 mScaleValOffset;
s32 mRotValOffset;
s32 mTransValOffset;
};
struct J3DAnmColorKeyData {
/* 0x00 */ DataBlockHeader 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
struct J3DAnmTextureSRTKeyData {
/* 0x00 */ DataBlockHeader mHeader;
u8 field_0x8;
u8 field_0x9;
s16 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;
s32 field_0x40;
u32 mNameTab2Offset;
s32 field_0x48;
s32 field_0x4c;
s32 field_0x50;
s32 field_0x54;
s32 field_0x58;
s32 field_0x5c;
};
struct J3DAnmVtxColorKeyData {
/* 0x00 */ DataBlockHeader 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
struct J3DAnmTexPatternFullData {
/* 0x00 */ DataBlockHeader mHeader;
u8 field_0x8;
u8 field_0x9;
s16 mFrameMax;
u16 field_0xc;
u16 field_0xe;
s32 mTableOffset;
s32 mValuesOffset;
s32 mUpdaterMaterialIDOffset;
s32 mNameTabOffset;
};
struct J3DAnmTevRegKeyData {
/* 0x00 */ DataBlockHeader mHeader;
u8 field_0x8;
u8 field_0x9; // maybe padding
s16 mFrameMax;
u16 mCRegUpdateMaterialNum;
u16 mKRegUpdateMaterialNum;
u16 field_0x10;
u16 field_0x12;
u16 field_0x14;
u16 field_0x16;
u16 field_0x18;
u16 field_0x1a;
u16 field_0x1c;
u16 field_0x1e;
s32 mCRegTableOffset;
s32 mKRegTableOffset;
s32 mCRegUpdateMaterialIDOffset;
s32 mKRegUpdateMaterialIDOffset;
s32 mCRegNameTabOffset;
s32 mKRegNameTabOffset;
s32 mCRValuesOffset;
s32 mCGValuesOffset;
s32 mCBValuesOffset;
s32 mCAValuesOffset;
s32 mKRValuesOffset;
s32 mKGValuesOffset;
s32 mKBValuesOffset;
s32 mKAValuesOffset;
};
struct J3DAnmColorFullData { /* PlaceHolder Structure */
/* 0x00 */ DataBlockHeader mHeader;
u8 field_0x8;
u8 field_0x9[3];
s16 mFrameMax;
u16 mUpdateMaterialNum;
u8 field_0x10[0x18-0x10];
s32 mTableOffset;
s32 mUpdateMaterialIDOffset;
s32 mNameTabOffset;
s32 mRValuesOffset;
s32 mGValuesOffset;
s32 mBValuesOffset;
s32 mAValuesOffset;
};
struct J2DScreen {};
/* 80308A6C-80309290 3033AC 0824+00 0/0 26/26 2/2 .text load__20J2DAnmLoaderDataBaseFPCv
*/
void* J2DAnmLoaderDataBase::load(void const* param_0) {
const DataHeader* hdr = (const DataHeader*) param_0;
const J3DAnmDataHeader* hdr = (const J3DAnmDataHeader*) param_0;
if (hdr == NULL) {
return NULL;
} else if (hdr->mMagic == 'J3D1') {
@ -280,8 +98,8 @@ J2DAnmKeyLoader_v15::~J2DAnmKeyLoader_v15() {}
/* 80309308-80309414 303C48 010C+00 2/1 0/0 0/0 .text load__19J2DAnmKeyLoader_v15FPCv */
void *J2DAnmKeyLoader_v15::load(void const* param_0) {
const DataHeader *hdr = (const DataHeader*) param_0;
const DataBlockHeader *dataPtr = &hdr->mFirst;
const J3DAnmDataHeader *hdr = (const J3DAnmDataHeader*) param_0;
const J3DAnmDataBlockHeader *dataPtr = &hdr->mFirst;
for (s32 i = 0; i < hdr->mCount; i++) {
switch (dataPtr->mType) {
case 'ANK1':
@ -300,7 +118,7 @@ void *J2DAnmKeyLoader_v15::load(void const* param_0) {
this->readAnmTevReg((J3DAnmTevRegKeyData*) dataPtr);
break;
}
dataPtr = (DataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
}
return _4;
}
@ -308,8 +126,8 @@ void *J2DAnmKeyLoader_v15::load(void const* param_0) {
/* 80309414-80309570 303D54 015C+00 1/0 0/0 0/0 .text
* setResource__19J2DAnmKeyLoader_v15FP10J2DAnmBasePCv */
void J2DAnmKeyLoader_v15::setResource(J2DAnmBase* pAnm, void const* param_1) {
const DataHeader *hdr = (const DataHeader*) param_1;
const DataBlockHeader *dataPtr = &hdr->mFirst;
const J3DAnmDataHeader *hdr = (const J3DAnmDataHeader*) param_1;
const J3DAnmDataBlockHeader *dataPtr = &hdr->mFirst;
for (s32 i = 0; i < hdr->mCount; i++) {
switch (dataPtr->mType) {
case 'ANK1':
@ -338,7 +156,7 @@ void J2DAnmKeyLoader_v15::setResource(J2DAnmBase* pAnm, void const* param_1) {
}
break;
}
dataPtr = (DataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
}
}
@ -348,15 +166,6 @@ void J2DAnmKeyLoader_v15::readAnmTransform(J3DAnmTransformKeyData const* pData)
this->setAnmTransform((J2DAnmTransformKey*)_4, pData);
}
template <typename T> // TODO move
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 */
void J2DAnmKeyLoader_v15::setAnmTransform(J2DAnmTransformKey* param_0, J3DAnmTransformKeyData const* param_1) {
@ -478,8 +287,8 @@ void J2DAnmKeyLoader_v15::setAnmVtxColor(J2DAnmVtxColorKey* pAnm, J3DAnmVtxColor
/* 80309A80-80309B8C 3043C0 010C+00 2/1 0/0 0/0 .text load__20J2DAnmFullLoader_v15FPCv */
void *J2DAnmFullLoader_v15::load(void const* param_0) {
const DataHeader *hdr = (const DataHeader*) param_0;
const DataBlockHeader *dataPtr = &hdr->mFirst;
const J3DAnmDataHeader *hdr = (const J3DAnmDataHeader*) param_0;
const J3DAnmDataBlockHeader *dataPtr = &hdr->mFirst;
for (s32 i = 0; i < hdr->mCount; i++) {
switch (dataPtr->mType) {
case 'ANF1':
@ -498,7 +307,7 @@ void *J2DAnmFullLoader_v15::load(void const* param_0) {
this->readAnmVtxColor((J3DAnmVtxColorFullData*) dataPtr);
break;
}
dataPtr = (DataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
}
return _4;
}
@ -506,8 +315,8 @@ void *J2DAnmFullLoader_v15::load(void const* param_0) {
/* 80309B8C-80309CE8 3044CC 015C+00 1/0 0/0 0/0 .text
* setResource__20J2DAnmFullLoader_v15FP10J2DAnmBasePCv */
void J2DAnmFullLoader_v15::setResource(J2DAnmBase* pAnm, void const* pData) {
const DataHeader *hdr = (const DataHeader*) pData;
const DataBlockHeader *dataPtr = &hdr->mFirst;
const J3DAnmDataHeader *hdr = (const J3DAnmDataHeader*) pData;
const J3DAnmDataBlockHeader *dataPtr = &hdr->mFirst;
for (s32 i = 0; i < hdr->mCount; i++) {
switch (dataPtr->mType) {
case 'ANF1':
@ -531,7 +340,7 @@ void J2DAnmFullLoader_v15::setResource(J2DAnmBase* pAnm, void const* pData) {
this->setAnmVtxColor((J2DAnmVtxColorFull*) pAnm, (J3DAnmVtxColorFullData*) dataPtr);
break;
}
dataPtr = (DataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
}
}