Files
2024-04-20 11:03:11 -07:00

206 lines
6.9 KiB
C++

#ifndef J3DMODELLOADER_H
#define J3DMODELLOADER_H
#include "JSystem/J3DGraphAnimator/J3DModelData.h"
#include "JSystem/JUtility/JUTDataHeader.h"
inline u32 getBdlFlag_MaterialType(u32 i_flags) {
return i_flags & 0x3000;
}
struct J3DModelInfoBlock : public JUTDataBlockHeader {
/* 0x08 */ u16 mFlags;
/* 0x0C */ u32 mPacketNum;
/* 0x10 */ u32 mVtxNum;
/* 0x14 */ void* mpHierarchy;
}; // Size: 0x18
struct J3DVertexBlock : public JUTDataBlockHeader {
/* 0x08 */ void* mpVtxAttrFmtList;
/* 0x0C */ void* mpVtxPosArray;
/* 0x10 */ void* mpVtxNrmArray;
/* 0x14 */ void* mpVtxNBTArray;
/* 0x18 */ void* mpVtxColorArray[2];
/* 0x20 */ void* mpVtxTexCoordArray[8];
}; // Size: 0x40
struct J3DEnvelopBlock : public JUTDataBlockHeader {
/* 0x08 */ u16 mWEvlpMtxNum;
/* 0x0C */ void* mpWEvlpMixMtxNum;
/* 0x10 */ void* mpWEvlpMixMtxIndex;
/* 0x14 */ void* mpWEvlpMixWeight;
/* 0x18 */ void* mpInvJointMtx;
}; // Size: 0x1C
struct J3DDrawBlock : public JUTDataBlockHeader {
/* 0x08 */ u16 mMtxNum;
/* 0x0C */ void* mpDrawMtxFlag;
/* 0x10 */ void* mpDrawMtxIndex;
}; // Size: 0x14
struct J3DJointBlock;
struct J3DMaterialBlock : public JUTDataBlockHeader {
/* 0x08 */ u16 mMaterialNum;
/* 0x0C */ void* mpMaterialInitData;
/* 0x10 */ void* mpMaterialID;
/* 0x14 */ void* mpNameTable;
/* 0x18 */ void* mpIndInitData;
/* 0x1C */ void* mpCullMode;
/* 0x20 */ void* mpMatColor;
/* 0x24 */ void* mpColorChanNum;
/* 0x28 */ void* mpColorChanInfo;
/* 0x2C */ void* mpAmbColor;
/* 0x30 */ void* mpLightInfo;
/* 0x34 */ void* mpTexGenNum;
/* 0x38 */ void* mpTexCoordInfo;
/* 0x3C */ void* mpTexCoord2Info;
/* 0x40 */ void* mpTexMtxInfo;
/* 0x44 */ void* field_0x44;
/* 0x48 */ void* mpTexNo;
/* 0x4C */ void* mpTevOrderInfo;
/* 0x50 */ void* mpTevColor;
/* 0x54 */ void* mpTevKColor;
/* 0x58 */ void* mpTevStageNum;
/* 0x5C */ void* mpTevStageInfo;
/* 0x60 */ void* mpTevSwapModeInfo;
/* 0x64 */ void* mpTevSwapModeTableInfo;
/* 0x68 */ void* mpFogInfo;
/* 0x6C */ void* mpAlphaCompInfo;
/* 0x70 */ void* mpBlendInfo;
/* 0x74 */ void* mpZModeInfo;
/* 0x78 */ void* mpZCompLoc;
/* 0x7C */ void* mpDither;
/* 0x80 */ void* mpNBTScaleInfo;
};
struct J3DMaterialBlock_v21 : public JUTDataBlockHeader {
/* 0x08 */ u16 mMaterialNum;
/* 0x0C */ void* mpMaterialInitData;
/* 0x10 */ void* mpMaterialID;
/* 0x14 */ void* mpNameTable;
/* 0x18 */ void* mpCullMode;
/* 0x1C */ void* mpMatColor;
/* 0x20 */ void* mpColorChanNum;
/* 0x24 */ void* mpColorChanInfo;
/* 0x28 */ void* mpTexGenNum;
/* 0x2C */ void* mpTexCoordInfo;
/* 0x30 */ void* mpTexCoord2Info;
/* 0x34 */ void* mpTexMtxInfo;
/* 0x38 */ void* field_0x44;
/* 0x3C */ void* mpTexNo;
/* 0x40 */ void* mpTevOrderInfo;
/* 0x44 */ void* mpTevColor;
/* 0x48 */ void* mpTevKColor;
/* 0x4C */ void* mpTevStageNum;
/* 0x50 */ void* mpTevStageInfo;
/* 0x54 */ void* mpTevSwapModeInfo;
/* 0x58 */ void* mpTevSwapModeTableInfo;
/* 0x68 */ void* mpFogInfo;
/* 0x6C */ void* mpAlphaCompInfo;
/* 0x70 */ void* mpBlendInfo;
/* 0x74 */ void* mpZModeInfo;
/* 0x78 */ void* mpZCompLoc;
/* 0x7C */ void* mpDither;
/* 0x80 */ void* mpNBTScaleInfo;
};
struct J3DMaterialDLBlock : public JUTDataBlockHeader {
/* 0x08 */ u16 mMaterialNum;
/* 0x0C */ void* mpDisplayListInit;
/* 0x10 */ void* mpPatchingInfo;
/* 0x14 */ void* mpCurrentMtxInfo;
/* 0x18 */ void* field_0x18;
/* 0x1C */ void* field_0x1c;
/* 0x20 */ void* mpNameTable;
/* more */
};
struct J3DShapeBlock;
struct J3DTextureBlock : public JUTDataBlockHeader {
/* 0x08 */ u16 mTextureNum;
/* 0x0C */ void* mpTextureRes;
/* 0x10 */ void* mpNameTable;
};
class J3DModelLoaderDataBase {
public:
static J3DModelData* load(void const*, u32);
static J3DModelData* loadBinaryDisplayList(void const*, u32);
static J3DMaterialTable* loadMaterialTable(void const*);
};
class J3DModelLoader {
public:
J3DModelLoader() :
mpModelData(NULL),
mpMaterialTable(NULL),
mpShapeBlock(NULL),
mpMaterialBlock(NULL),
mpModelHierarchy(NULL),
field_0x18(0) {}
virtual J3DModelData* load(const void*, u32);
virtual J3DMaterialTable* loadMaterialTable(const void*);
virtual J3DModelData* loadBinaryDisplayList(const void*, u32);
virtual u32 calcLoadSize(const void*, u32);
virtual u32 calcLoadMaterialTableSize(const void*);
virtual u32 calcLoadBinaryDisplayListSize(const void*, u32);
virtual u16 countMaterialNum(const void*);
virtual void setupBBoardInfo();
virtual ~J3DModelLoader() {}
virtual void readMaterial(const J3DMaterialBlock*, u32) {}
virtual void readMaterial_v21(const J3DMaterialBlock_v21*, u32) {}
virtual void readMaterialTable(const J3DMaterialBlock*, u32) {}
virtual void readMaterialTable_v21(const J3DMaterialBlock_v21*, u32) {}
virtual u32 calcSizeMaterial(const J3DMaterialBlock*, u32) { return 0; }
virtual u32 calcSizeMaterialTable(const J3DMaterialBlock*, u32) { return 0; }
void readInformation(const J3DModelInfoBlock*, u32);
void readVertex(const J3DVertexBlock*);
void readEnvelop(const J3DEnvelopBlock*);
void readDraw(const J3DDrawBlock*);
void readJoint(const J3DJointBlock*);
void readShape(const J3DShapeBlock*, u32);
void readTexture(const J3DTextureBlock*);
void readTextureTable(const J3DTextureBlock*);
void readPatchedMaterial(const J3DMaterialBlock*, u32);
void readMaterialDL(const J3DMaterialDLBlock*, u32);
void modifyMaterial(u32);
u32 calcSizeInformation(const J3DModelInfoBlock*, u32);
u32 calcSizeJoint(const J3DJointBlock*);
u32 calcSizeShape(const J3DShapeBlock*, u32);
u32 calcSizeTexture(const J3DTextureBlock*);
u32 calcSizeTextureTable(const J3DTextureBlock*);
u32 calcSizePatchedMaterial(const J3DMaterialBlock*, u32);
u32 calcSizeMaterialDL(const J3DMaterialDLBlock*, u32);
protected:
/* 0x04 */ J3DModelData* mpModelData;
/* 0x08 */ J3DMaterialTable* mpMaterialTable;
/* 0x0C */ const J3DShapeBlock* mpShapeBlock;
/* 0x10 */ const J3DMaterialBlock* mpMaterialBlock;
/* 0x14 */ J3DModelHierarchy* mpModelHierarchy;
/* 0x18 */ u8 field_0x18;
/* 0x19 */ u8 field_0x19;
};
class J3DModelLoader_v21 : public J3DModelLoader {
public:
~J3DModelLoader_v21() {}
void readMaterial_v21(const J3DMaterialBlock_v21*, u32);
void readMaterialTable_v21(const J3DMaterialBlock_v21*, u32);
};
class J3DModelLoader_v26 : public J3DModelLoader {
public:
~J3DModelLoader_v26() {}
void readMaterial(const J3DMaterialBlock*, u32);
void readMaterialTable(const J3DMaterialBlock*, u32);
u32 calcSizeMaterial(const J3DMaterialBlock*, u32);
u32 calcSizeMaterialTable(const J3DMaterialBlock*, u32);
};
#endif /* J3DMODELLOADER_H */