Merge pull request #16 from TakaRikka/26-02-25-more-endian-fixes

Asset loading endian fixes (mostly)
This commit is contained in:
TakaRikka
2026-02-25 11:58:37 -08:00
committed by GitHub
33 changed files with 837 additions and 555 deletions
+46 -44
View File
@@ -4,38 +4,40 @@
#include "JSystem/J2DGraph/J2DManage.h"
#include "JSystem/J2DGraph/J2DMatBlock.h"
#include "dusk/endian.h"
/**
* @ingroup jsystem-j2d
*
*/
struct J2DMaterialBlock {
u32 field_0x0;
u32 field_0x4;
u16 field_0x8;
u16 field_0xa;
u32 field_0xc;
u32 field_0x10;
u32 field_0x14;
u32 field_0x18;
u32 field_0x1c;
u32 field_0x20;
u32 field_0x24;
u32 field_0x28;
u32 field_0x2c;
u32 field_0x30;
u32 field_0x34;
u32 field_0x38;
u32 field_0x3c;
u32 field_0x40;
u32 field_0x44;
u32 field_0x48;
u32 field_0x4c;
u32 field_0x50;
u32 field_0x54;
u32 field_0x58;
u32 field_0x5c;
u32 field_0x60;
u32 field_0x64;
BE(u32) field_0x0;
BE(u32) field_0x4;
BE(u16) field_0x8;
BE(u16) field_0xa;
BE(u32) field_0xc;
BE(u32) field_0x10;
BE(u32) field_0x14;
BE(u32) field_0x18;
BE(u32) field_0x1c;
BE(u32) field_0x20;
BE(u32) field_0x24;
BE(u32) field_0x28;
BE(u32) field_0x2c;
BE(u32) field_0x30;
BE(u32) field_0x34;
BE(u32) field_0x38;
BE(u32) field_0x3c;
BE(u32) field_0x40;
BE(u32) field_0x44;
BE(u32) field_0x48;
BE(u32) field_0x4c;
BE(u32) field_0x50;
BE(u32) field_0x54;
BE(u32) field_0x58;
BE(u32) field_0x5c;
BE(u32) field_0x60;
BE(u32) field_0x64;
};
typedef struct _GXColor GXColor;
@@ -73,23 +75,23 @@ struct J2DMaterialInitData {
u8 field_0x5;
u8 field_0x6;
u8 field_0x7;
u16 field_0x8[2];
u16 field_0xc[4];
u16 field_0x14[8];
u16 field_0x24[0xa];
u16 field_0x38[8];
u16 field_0x48;
u16 field_0x4a[4];
BE(u16) field_0x8[2];
BE(u16) field_0xc[4];
BE(u16) field_0x14[8];
BE(u16) field_0x24[0xa];
BE(u16) field_0x38[8];
BE(u16) field_0x48;
BE(u16) field_0x4a[4];
u8 field_0x52[0x10];
u8 field_0x62[0x10];
u16 field_0x72[0x10];
u16 field_0x92[0x4];
u16 field_0x9a[0x10];
u16 field_0xba[0x10];
u16 field_0xda[0x4];
u16 field_0xe2;
u16 field_0xe4;
u16 field_0xe6;
BE(u16) field_0x72[0x10];
BE(u16) field_0x92[0x4];
BE(u16) field_0x9a[0x10];
BE(u16) field_0xba[0x10];
BE(u16) field_0xda[0x4];
BE(u16) field_0xe2;
BE(u16) field_0xe4;
BE(u16) field_0xe6;
};
struct J2DTevStageInfo;
struct J2DTevSwapModeTableInfo;
@@ -155,9 +157,9 @@ private:
/* 0x24 */ J2DTexMtxInfo* field_0x24;
/* 0x28 */ u16* field_0x28;
/* 0x2C */ u16* field_0x2c;
/* 0x30 */ _GXCullMode* field_0x30;
/* 0x30 */ BE(GXCullMode)* field_0x30;
/* 0x34 */ J2DTevOrderInfo* field_0x34;
/* 0x38 */ _GXColorS10* field_0x38;
/* 0x38 */ BE(GXColorS10)* field_0x38;
/* 0x3C */ GXColor* field_0x3c;
/* 0x40 */ u8* field_0x40;
/* 0x44 */ J2DTevStageInfo* field_0x44;
+190 -172
View File
@@ -6,9 +6,17 @@
#include "JSystem/JUtility/JUTNameTab.h"
#include "global.h"
#include "dusk/endian.h"
#if TARGET_PC
#define OFFSET_PTR BE(u32)
#else
#define OFFSET_PTR void*
#endif
struct JUTDataBlockHeader {
/* 0x0 */ u32 mType;
/* 0x4 */ u32 mSize;
/* 0x0 */ BE(u32) mType;
/* 0x4 */ BE(u32) mSize;
const JUTDataBlockHeader* getNext() const { // fake inline
return reinterpret_cast<const JUTDataBlockHeader*>(reinterpret_cast<const u8*>(this) +
@@ -17,30 +25,30 @@ struct JUTDataBlockHeader {
};
struct JUTDataFileHeader { // actual struct name unknown
/* 0x00 */ u32 mMagic;
/* 0x04 */ u32 mType;
/* 0x08 */ u32 mFileSize;
/* 0x0C */ u32 mBlockNum;
/* 0x00 */ BE(u32) mMagic;
/* 0x04 */ BE(u32) mType;
/* 0x08 */ BE(u32) mFileSize;
/* 0x0C */ BE(u32) mBlockNum;
/* 0x10 */ u8 _10[0x1C - 0x10];
/* 0x1C */ u32 mSeAnmOffset; // Only exists for some BCKs
/* 0x1C */ BE(u32) mSeAnmOffset; // Only exists for some BCKs
/* 0x20 */ JUTDataBlockHeader mFirstBlock;
};
// unknown name. refers to ANK1 chunk of BCK files
struct J3DAnmTransform_ANK1 {
/* 0x00 */ u32 magic;
/* 0x04 */ u32 size;
/* 0x00 */ BE(u32) magic;
/* 0x04 */ BE(u32) size;
/* 0x08 */ u8 attribute;
/* 0x09 */ u8 rotation_frac;
/* 0x0A */ s16 duration;
/* 0x0C */ s16 keyframe_num;
/* 0x0E */ s16 scale_entries;
/* 0x10 */ s16 rotation_entries;
/* 0x12 */ s16 translation_entries;
/* 0x14 */ u32 anm_data_offset;
/* 0x18 */ u32 scale_data_offset;
/* 0x1C */ u32 rotation_data_offset;
/* 0x20 */ u32 translation_data_offset;
/* 0x0A */ BE(s16) duration;
/* 0x0C */ BE(s16) keyframe_num;
/* 0x0E */ BE(s16) scale_entries;
/* 0x10 */ BE(s16) rotation_entries;
/* 0x12 */ BE(s16) translation_entries;
/* 0x14 */ BE(u32) anm_data_offset;
/* 0x18 */ BE(u32) scale_data_offset;
/* 0x1C */ BE(u32) rotation_data_offset;
/* 0x20 */ BE(u32) translation_data_offset;
};
typedef struct _GXColor GXColor;
@@ -51,9 +59,9 @@ typedef struct _GXColorS10 GXColorS10;
*
*/
struct J3DAnmKeyTableBase {
/* 0x00 */ u16 mMaxFrame;
/* 0x02 */ u16 mOffset;
/* 0x04 */ u16 mType;
/* 0x00 */ BE(u16) mMaxFrame;
/* 0x02 */ BE(u16) mOffset;
/* 0x04 */ BE(u16) mType;
}; // Size = 0x6
/**
@@ -72,8 +80,8 @@ struct J3DAnmColorKeyTable {
*
*/
struct J3DAnmVtxColorIndexData {
/* 0x00 */ u16 mNum;
/* 0x04 */ void* mpData;
/* 0x00 */ BE(u16) mNum;
/* 0x04 */ OFFSET_PTR mpData;
};
/**
@@ -81,14 +89,14 @@ struct J3DAnmVtxColorIndexData {
*
*/
struct J3DAnmColorFullTable {
/* 0x00 */ u16 mRMaxFrame;
/* 0x02 */ u16 mROffset;
/* 0x04 */ u16 mGMaxFrame;
/* 0x06 */ u16 mGOffset;
/* 0x08 */ u16 mBMaxFrame;
/* 0x0A */ u16 mBOffset;
/* 0x0C */ u16 mAMaxFrame;
/* 0x0E */ u16 mAOffset;
/* 0x00 */ BE(u16) mRMaxFrame;
/* 0x02 */ BE(u16) mROffset;
/* 0x04 */ BE(u16) mGMaxFrame;
/* 0x06 */ BE(u16) mGOffset;
/* 0x08 */ BE(u16) mBMaxFrame;
/* 0x0A */ BE(u16) mBOffset;
/* 0x0C */ BE(u16) mAMaxFrame;
/* 0x0E */ BE(u16) mAOffset;
}; // Size = 0x10
/**
@@ -96,8 +104,8 @@ struct J3DAnmColorFullTable {
*
*/
struct J3DAnmVisibilityFullTable {
u16 _0;
u16 _2;
BE(u16) _0;
BE(u16) _2;
}; // Size = 0x4
/**
@@ -115,12 +123,12 @@ struct J3DAnmTransformKeyTable {
*
*/
struct J3DAnmTransformFullTable {
/* 0x00 */ u16 mScaleMaxFrame;
/* 0x02 */ u16 mScaleOffset;
/* 0x04 */ u16 mRotationMaxFrame;
/* 0x06 */ u16 mRotationOffset;
/* 0x08 */ u16 mTranslateMaxFrame;
/* 0x0A */ u16 mTranslateOffset;
/* 0x00 */ BE(u16) mScaleMaxFrame;
/* 0x02 */ BE(u16) mScaleOffset;
/* 0x04 */ BE(u16) mRotationMaxFrame;
/* 0x06 */ BE(u16) mRotationOffset;
/* 0x08 */ BE(u16) mTranslateMaxFrame;
/* 0x0A */ BE(u16) mTranslateOffset;
}; // Size = 0xC
/**
@@ -128,10 +136,10 @@ struct J3DAnmTransformFullTable {
*
*/
struct J3DAnmTexPatternFullTable {
/* 0x00 */ u16 mMaxFrame;
/* 0x02 */ u16 mOffset;
/* 0x00 */ BE(u16) mMaxFrame;
/* 0x02 */ BE(u16) mOffset;
/* 0x04 */ u8 mTexNo;
/* 0x06 */ u16 _6;
/* 0x06 */ BE(u16) _6;
}; // Size = 0x8
/**
@@ -165,8 +173,8 @@ struct J3DAnmKRegKeyTable {
*
*/
struct J3DAnmDataBlockHeader { // actual name unknown
/* 0x0 */ u32 mType;
/* 0x4 */ u32 mNextOffset;
/* 0x0 */ BE(u32) mType;
/* 0x4 */ BE(u32) mNextOffset;
}; // Size = 0x8
/**
@@ -174,10 +182,10 @@ struct J3DAnmDataBlockHeader { // actual name unknown
*
*/
struct J3DAnmDataHeader { // actual name unknown
/* 0x00 */ u32 mMagic;
/* 0x04 */ u32 mType;
/* 0x00 */ BE(u32) mMagic;
/* 0x04 */ BE(u32) mType;
/* 0x08 */ u8 _8[4];
/* 0x0C */ u32 mCount;
/* 0x0C */ BE(u32) mCount;
/* 0x10 */ u8 _10[0x20 - 0x10];
/* 0x20 */ J3DAnmDataBlockHeader mFirst;
};
@@ -190,16 +198,16 @@ struct J3DAnmVtxColorFullData {
/* 0x00 */ J3DAnmDataBlockHeader mHeader;
/* 0x08 */ u8 field_0x8;
/* 0x09 */ u8 field_0x9; // padding?
/* 0x0A */ s16 mFrameMax;
/* 0x0C */ u16 mAnmTableNum[2];
/* 0x0A */ BE(s16) mFrameMax;
/* 0x0C */ BE(u16) mAnmTableNum[2];
/* 0x10 */ u8 field_0x10[0x18 - 0x10];
/* 0x18 */ void* mTableOffsets[2];
/* 0x20 */ void* mVtxColorIndexDataOffsets[2];
/* 0x28 */ void* mVtxColorIndexPointerOffsets[2];
/* 0x30 */ void* mRValuesOffset;
/* 0x34 */ void* mGValuesOffset;
/* 0x38 */ void* mBValuesOffset;
/* 0x3C */ void* mAValuesOffset;
/* 0x18 */ OFFSET_PTR mTableOffsets[2];
/* 0x20 */ OFFSET_PTR mVtxColorIndexDataOffsets[2];
/* 0x28 */ OFFSET_PTR mVtxColorIndexPointerOffsets[2];
/* 0x30 */ OFFSET_PTR mRValuesOffset;
/* 0x34 */ OFFSET_PTR mGValuesOffset;
/* 0x38 */ OFFSET_PTR mBValuesOffset;
/* 0x3C */ OFFSET_PTR mAValuesOffset;
}; // Size = 0x40
STATIC_ASSERT(sizeof(J3DAnmVtxColorFullData) == 0x40);
@@ -212,11 +220,11 @@ 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 */ void* mTableOffset;
/* 0x14 */ void* mValuesOffset;
/* 0x0A */ BE(s16) mFrameMax;
/* 0x0C */ BE(u16) field_0xc;
/* 0x0E */ BE(u16) field_0xe;
/* 0x10 */ OFFSET_PTR mTableOffset;
/* 0x14 */ OFFSET_PTR mValuesOffset;
}; // Size = 0x18
STATIC_ASSERT(sizeof(J3DAnmVisibilityFullData) == 0x18);
@@ -229,13 +237,13 @@ struct J3DAnmTransformFullData {
/* 0x00 */ J3DAnmDataBlockHeader mHeader;
/* 0x08 */ u8 field_0x8;
/* 0x09 */ u8 field_0x9;
/* 0x0A */ s16 mFrameMax;
/* 0x0C */ u16 field_0xc;
/* 0x0A */ BE(s16) mFrameMax;
/* 0x0C */ BE(u16) field_0xc;
/* 0x0E */ u8 field_0xe[0x14 - 0xe];
/* 0x14 */ void* mTableOffset;
/* 0x18 */ void* mScaleValOffset;
/* 0x1C */ void* mRotValOffset;
/* 0x20 */ void* mTransValOffset;
/* 0x14 */ OFFSET_PTR mTableOffset;
/* 0x18 */ OFFSET_PTR mScaleValOffset;
/* 0x1C */ OFFSET_PTR mRotValOffset;
/* 0x20 */ OFFSET_PTR mTransValOffset;
}; // Size = 0x24
STATIC_ASSERT(sizeof(J3DAnmTransformFullData) == 0x24);
@@ -248,19 +256,19 @@ 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 */ void* mTableOffset;
/* 0x1C */ void* mUpdateMaterialIDOffset;
/* 0x20 */ void* mNameTabOffset;
/* 0x24 */ void* mRValOffset;
/* 0x28 */ void* mGValOffset;
/* 0x2C */ void* mBValOffset;
/* 0x30 */ void* mAValOffset;
/* 0x0C */ BE(s16) mFrameMax;
/* 0x0E */ BE(u16) mUpdateMaterialNum;
/* 0x10 */ BE(u16) field_0x10;
/* 0x12 */ BE(u16) field_0x12;
/* 0x14 */ BE(u16) field_0x14;
/* 0x16 */ BE(u16) field_0x16;
/* 0x18 */ OFFSET_PTR mTableOffset;
/* 0x1C */ OFFSET_PTR mUpdateMaterialIDOffset;
/* 0x20 */ OFFSET_PTR mNameTabOffset;
/* 0x24 */ OFFSET_PTR mRValOffset;
/* 0x28 */ OFFSET_PTR mGValOffset;
/* 0x2C */ OFFSET_PTR mBValOffset;
/* 0x30 */ OFFSET_PTR mAValOffset;
}; // Size = 0x34
STATIC_ASSERT(sizeof(J3DAnmColorKeyData) == 0x34);
@@ -273,32 +281,32 @@ 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 */ void* mTableOffset;
/* 0x18 */ void* mUpdateMatIDOffset;
/* 0x1C */ void* mNameTab1Offset;
/* 0x20 */ void* mUpdateTexMtxIDOffset;
/* 0x24 */ void* unkOffset;
/* 0x28 */ void* mScaleValOffset;
/* 0x2C */ void* mRotValOffset;
/* 0x30 */ void* mTransValOffset;
/* 0x34 */ u16 field_0x34;
/* 0x36 */ u16 field_0x36;
/* 0x38 */ u16 field_0x38;
/* 0x3A */ u16 field_0x3a;
/* 0x3C */ void* mInfoTable2Offset;
/* 0x40 */ void* field_0x40;
/* 0x44 */ void* mNameTab2Offset;
/* 0x48 */ void* field_0x48;
/* 0x4C */ void* field_0x4c;
/* 0x50 */ void* field_0x50;
/* 0x54 */ void* field_0x54;
/* 0x58 */ void* field_0x58;
/* 0x5C */ s32 field_0x5c;
/* 0x0A */ BE(s16) field_0xa;
/* 0x0C */ BE(u16) field_0xc;
/* 0x0E */ BE(u16) field_0xe;
/* 0x10 */ BE(u16) field_0x10;
/* 0x12 */ BE(u16) field_0x12;
/* 0x14 */ OFFSET_PTR mTableOffset;
/* 0x18 */ OFFSET_PTR mUpdateMatIDOffset;
/* 0x1C */ OFFSET_PTR mNameTab1Offset;
/* 0x20 */ OFFSET_PTR mUpdateTexMtxIDOffset;
/* 0x24 */ OFFSET_PTR unkOffset;
/* 0x28 */ OFFSET_PTR mScaleValOffset;
/* 0x2C */ OFFSET_PTR mRotValOffset;
/* 0x30 */ OFFSET_PTR mTransValOffset;
/* 0x34 */ BE(u16) field_0x34;
/* 0x36 */ BE(u16) field_0x36;
/* 0x38 */ BE(u16) field_0x38;
/* 0x3A */ BE(u16) field_0x3a;
/* 0x3C */ OFFSET_PTR mInfoTable2Offset;
/* 0x40 */ OFFSET_PTR field_0x40;
/* 0x44 */ OFFSET_PTR mNameTab2Offset;
/* 0x48 */ OFFSET_PTR field_0x48;
/* 0x4C */ OFFSET_PTR field_0x4c;
/* 0x50 */ OFFSET_PTR field_0x50;
/* 0x54 */ OFFSET_PTR field_0x54;
/* 0x58 */ OFFSET_PTR field_0x58;
/* 0x5C */ BE(s32) field_0x5c;
}; // Size = 0x60
STATIC_ASSERT(sizeof(J3DAnmTextureSRTKeyData) == 0x60);
@@ -311,16 +319,16 @@ struct J3DAnmVtxColorKeyData {
/* 0x00 */ J3DAnmDataBlockHeader mHeader;
/* 0x08 */ u8 field_0x8;
/* 0x09 */ u8 field_0x9;
/* 0x0A */ s16 mFrameMax;
/* 0x0C */ u16 mAnmTableNum[2];
/* 0x0A */ BE(s16) mFrameMax;
/* 0x0C */ BE(u16) mAnmTableNum[2];
/* 0x10 */ u8 field_0x10[0x18 - 0x10];
/* 0x18 */ void* mTableOffsets[2];
/* 0x20 */ void* mVtxColoIndexDataOffset[2];
/* 0x28 */ void* mVtxColoIndexPointerOffset[2];
/* 0x30 */ void* mRValOffset;
/* 0x34 */ void* mGValOffset;
/* 0x38 */ void* mBValOffset;
/* 0x3C */ void* mAValOffset;
/* 0x18 */ OFFSET_PTR mTableOffsets[2];
/* 0x20 */ OFFSET_PTR mVtxColoIndexDataOffset[2];
/* 0x28 */ OFFSET_PTR mVtxColoIndexPointerOffset[2];
/* 0x30 */ OFFSET_PTR mRValOffset;
/* 0x34 */ OFFSET_PTR mGValOffset;
/* 0x38 */ OFFSET_PTR mBValOffset;
/* 0x3C */ OFFSET_PTR mAValOffset;
}; // Size = 0x40
STATIC_ASSERT(sizeof(J3DAnmVtxColorKeyData) == 0x40);
@@ -333,13 +341,13 @@ 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 */ void* mTableOffset;
/* 0x14 */ void* mValuesOffset;
/* 0x18 */ void* mUpdateMaterialIDOffset;
/* 0x1C */ void* mNameTabOffset;
/* 0x0A */ BE(s16) mFrameMax;
/* 0x0C */ BE(u16) field_0xc;
/* 0x0E */ BE(u16) field_0xe;
/* 0x10 */ OFFSET_PTR mTableOffset;
/* 0x14 */ OFFSET_PTR mValuesOffset;
/* 0x18 */ OFFSET_PTR mUpdateMaterialIDOffset;
/* 0x1C */ OFFSET_PTR mNameTabOffset;
}; // Size = 0x20
STATIC_ASSERT(sizeof(J3DAnmTexPatternFullData) == 0x20);
@@ -352,31 +360,31 @@ 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 */ void* mCRegTableOffset;
/* 0x24 */ void* mKRegTableOffset;
/* 0x28 */ void* mCRegUpdateMaterialIDOffset;
/* 0x2C */ void* mKRegUpdateMaterialIDOffset;
/* 0x30 */ void* mCRegNameTabOffset;
/* 0x34 */ void* mKRegNameTabOffset;
/* 0x38 */ void* mCRValuesOffset;
/* 0x3C */ void* mCGValuesOffset;
/* 0x40 */ void* mCBValuesOffset;
/* 0x44 */ void* mCAValuesOffset;
/* 0x48 */ void* mKRValuesOffset;
/* 0x4C */ void* mKGValuesOffset;
/* 0x50 */ void* mKBValuesOffset;
/* 0x54 */ void* mKAValuesOffset;
/* 0x0A */ BE(s16) mFrameMax;
/* 0x0C */ BE(u16) mCRegUpdateMaterialNum;
/* 0x0E */ BE(u16) mKRegUpdateMaterialNum;
/* 0x10 */ BE(u16) field_0x10;
/* 0x12 */ BE(u16) field_0x12;
/* 0x14 */ BE(u16) field_0x14;
/* 0x16 */ BE(u16) field_0x16;
/* 0x18 */ BE(u16) field_0x18;
/* 0x1A */ BE(u16) field_0x1a;
/* 0x1C */ BE(u16) field_0x1c;
/* 0x1E */ BE(u16) field_0x1e;
/* 0x20 */ OFFSET_PTR mCRegTableOffset;
/* 0x24 */ OFFSET_PTR mKRegTableOffset;
/* 0x28 */ OFFSET_PTR mCRegUpdateMaterialIDOffset;
/* 0x2C */ OFFSET_PTR mKRegUpdateMaterialIDOffset;
/* 0x30 */ OFFSET_PTR mCRegNameTabOffset;
/* 0x34 */ OFFSET_PTR mKRegNameTabOffset;
/* 0x38 */ OFFSET_PTR mCRValuesOffset;
/* 0x3C */ OFFSET_PTR mCGValuesOffset;
/* 0x40 */ OFFSET_PTR mCBValuesOffset;
/* 0x44 */ OFFSET_PTR mCAValuesOffset;
/* 0x48 */ OFFSET_PTR mKRValuesOffset;
/* 0x4C */ OFFSET_PTR mKGValuesOffset;
/* 0x50 */ OFFSET_PTR mKBValuesOffset;
/* 0x54 */ OFFSET_PTR mKAValuesOffset;
}; // Size = 0x58
STATIC_ASSERT(sizeof(J3DAnmTevRegKeyData) == 0x58);
@@ -389,16 +397,16 @@ struct J3DAnmColorFullData { /* PlaceHolder Structure */
/* 0x00 */ J3DAnmDataBlockHeader mHeader;
/* 0x08 */ u8 field_0x8;
/* 0x09 */ u8 field_0x9[3];
/* 0x0C */ s16 mFrameMax;
/* 0x0E */ u16 mUpdateMaterialNum;
/* 0x0C */ BE(s16) mFrameMax;
/* 0x0E */ BE(u16) mUpdateMaterialNum;
/* 0x10 */ u8 field_0x10[0x18 - 0x10];
/* 0x18 */ void* mTableOffset;
/* 0x1C */ void* mUpdateMaterialIDOffset;
/* 0x20 */ void* mNameTabOffset;
/* 0x24 */ void* mRValuesOffset;
/* 0x28 */ void* mGValuesOffset;
/* 0x2C */ void* mBValuesOffset;
/* 0x30 */ void* mAValuesOffset;
/* 0x18 */ OFFSET_PTR mTableOffset;
/* 0x1C */ OFFSET_PTR mUpdateMaterialIDOffset;
/* 0x20 */ OFFSET_PTR mNameTabOffset;
/* 0x24 */ OFFSET_PTR mRValuesOffset;
/* 0x28 */ OFFSET_PTR mGValuesOffset;
/* 0x2C */ OFFSET_PTR mBValuesOffset;
/* 0x30 */ OFFSET_PTR mAValuesOffset;
}; // Size = 0x34
STATIC_ASSERT(sizeof(J3DAnmColorFullData) == 0x34);
@@ -419,13 +427,13 @@ struct J3DAnmTransformKeyData {
/* 0x00 */ JUTDataBlockHeader mHeader;
/* 0x08 */ u8 field_0x8;
/* 0x09 */ u8 field_0x9;
/* 0x0A */ s16 mFrameMax;
/* 0x0C */ u16 field_0xc;
/* 0x0A */ BE(s16) mFrameMax;
/* 0x0C */ BE(u16) field_0xc;
/* 0x10 */ int field_0x10;
/* 0x14 */ void* mTableOffset;
/* 0x18 */ void* field_0x18;
/* 0x1c */ void* field_0x1c;
/* 0x20 */ void* field_0x20;
/* 0x14 */ OFFSET_PTR mTableOffset;
/* 0x18 */ OFFSET_PTR field_0x18;
/* 0x1c */ OFFSET_PTR field_0x1c;
/* 0x20 */ OFFSET_PTR field_0x20;
};
/**
@@ -435,10 +443,10 @@ struct J3DAnmTransformKeyData {
struct J3DAnmClusterKeyData {
/* 0x00 */ JUTDataBlockHeader mHeader;
/* 0x08 */ u8 field_0x8;
/* 0x0A */ s16 mFrameMax;
/* 0x0C */ s32 field_0xc;
/* 0x10 */ void* mTableOffset;
/* 0x14 */ void* mWeightOffset;
/* 0x0A */ BE(s16) mFrameMax;
/* 0x0C */ BE(s32) field_0xc;
/* 0x10 */ OFFSET_PTR mTableOffset;
/* 0x14 */ OFFSET_PTR mWeightOffset;
};
/**
@@ -448,10 +456,10 @@ struct J3DAnmClusterKeyData {
struct J3DAnmClusterFullData {
/* 0x00 */ JUTDataBlockHeader mHeader;
/* 0x08 */ u8 field_0x8;
/* 0x0A */ s16 mFrameMax;
/* 0x0C */ s32 field_0xc;
/* 0x10 */ void* mTableOffset;
/* 0x14 */ void* mWeightOffset;
/* 0x0A */ BE(s16) mFrameMax;
/* 0x0C */ BE(s32) field_0xc;
/* 0x10 */ OFFSET_PTR mTableOffset;
/* 0x14 */ OFFSET_PTR mWeightOffset;
};
/**
@@ -459,8 +467,8 @@ struct J3DAnmClusterFullData {
*
*/
struct J3DAnmClusterFullTable {
u16 mMaxFrame;
u16 mOffset;
BE(u16) mMaxFrame;
BE(u16) mOffset;
};
/**
@@ -705,6 +713,14 @@ public:
/* 0x0C */ u16 mAnmTableNum[2];
/* 0x10 */ J3DAnmVtxColorIndexData* mAnmVtxColorIndexData[2];
#if TARGET_PC
// Address to which getAnmVtxColorIndexData pointers are relative.
u16* colorAddressBase[2];
u16* offsetColorIndexAddress(u8 index, OFFSET_PTR ptr) const {
return colorAddressBase[index] + ptr;
}
#endif
}; // Size: 0x18
/**
@@ -977,4 +993,6 @@ public:
/* 0x10 */ f32 mFrame;
}; // Size: 0x14
#undef OFFSET_PTR
#endif /* J3DANIMATION_H */
+40 -12
View File
@@ -2,6 +2,8 @@
#define J3DCLUSTER_H
#include "JSystem/J3DAssert.h"
#include "JSystem/J3DGraphLoader/J3DClusterLoader.h"
#include "dusk/endian.h"
class J3DDeformer;
class J3DClusterKey;
@@ -11,6 +13,12 @@ class J3DModel;
class J3DAnmCluster;
class JUTNameTab;
#if TARGET_PC
#define OFFSET_PTR BE(u32)
#else
#define OFFSET_PTR void*
#endif
/**
* @ingroup jsystem-j3d
*
@@ -31,24 +39,32 @@ public:
mDeformer = other.mDeformer;
}
#if !TARGET_PC
J3DDeformer* getDeformer() { return mDeformer; }
void setDeformer(J3DDeformer* deformer) {
J3D_ASSERT_NULLPTR(111, deformer);
mDeformer = deformer;
}
#endif
/* 0x00 */ f32 mMaxAngle;
/* 0x04 */ f32 mMinAngle;
/* 0x08 */ J3DClusterKey* mClusterKey;
/* 0x00 */ BE(f32) mMaxAngle;
/* 0x04 */ BE(f32) mMinAngle;
/* 0x08 */ OFFSET_PTR mClusterKey;
/* 0x0C */ u8 mFlags;
/* 0x0E */ u8 field_0xe[0x10 - 0xD];
/* 0x10 */ u16 mKeyNum;
/* 0x12 */ u16 mPosNum;
/* 0x14 */ u16 field_0x14;
/* 0x16 */ u16 field_0x16;
/* 0x10 */ BE(u16) mKeyNum;
/* 0x12 */ BE(u16) mPosNum;
/* 0x14 */ BE(u16) field_0x14;
/* 0x16 */ BE(u16) field_0x16;
#if TARGET_PC
OFFSET_PTR field_0x18;
OFFSET_PTR mClusterVertex;
OFFSET_PTR mDeformer;
#else
/* 0x18 */ u16* field_0x18;
/* 0x1C */ J3DClusterVertex* mClusterVertex;
/* 0x20 */ J3DDeformer* mDeformer;
#endif
};
/**
@@ -64,10 +80,10 @@ public:
field_0x8 = other.field_0x8;
}
/* 0x00 */ u16 mPosNum;
/* 0x02 */ u16 mNrmNum;
/* 0x04 */ void* field_0x4;
/* 0x08 */ void* field_0x8;
/* 0x00 */ BE(u16) mPosNum;
/* 0x02 */ BE(u16) mNrmNum;
/* 0x04 */ OFFSET_PTR field_0x4;
/* 0x08 */ OFFSET_PTR field_0x8;
}; // Size: 0x0C
/**
@@ -107,6 +123,11 @@ public:
/* 0x1C */ f32* mVtxNrm;
/* 0x20 */ JUTNameTab* mClusterName;
/* 0x24 */ JUTNameTab* mClusterKeyName;
#if TARGET_PC
J3DDeformer** mDeformers;
#endif
}; // Size: 0x28
/**
@@ -121,9 +142,16 @@ public:
field_0x8 = other.field_0x8;
}
/* 0x00 */ u16 mNum;
/* 0x00 */ BE(u16) mNum;
#if TARGET_PC
/* 0x04 */ OFFSET_PTR field_0x4;
/* 0x08 */ OFFSET_PTR field_0x8;
#else
/* 0x04 */ u16* field_0x4;
/* 0x08 */ u16* field_0x8;
#endif
}; // Size: 0x0C
#undef OFFSET_PTR
#endif /* J3DCLUSTER_H */
@@ -3,6 +3,7 @@
#include "JSystem/J3DAssert.h"
#include "JSystem/J3DGraphBase/J3DTransform.h"
#include "dusk/endian.h"
class J3DJoint;
class J3DMtxBuffer;
@@ -14,8 +15,8 @@ class JUTNameTab;
*
*/
struct J3DModelHierarchy {
/* 0x0 */ u16 mType;
/* 0x2 */ u16 mValue;
/* 0x0 */ BE(u16) mType;
/* 0x2 */ BE(u16) mValue;
};
class J3DMaterialTable;
@@ -98,6 +98,11 @@ public:
/* 0x08 */ f32* field_0x8;
/* 0x0C */ f32* field_0xc;
/* 0x10 */ u32 mFlags;
#if TARGET_PC
void* mArrayBase;
const void* mBlockBase;
#endif
}; // Size: 0x14
inline void J3DFillZero32B(__REGISTER void* param_0, __REGISTER u32 param_1) {
+3 -2
View File
@@ -5,6 +5,7 @@
#include "JSystem/J3DAssert.h"
#include "JSystem/J3DGraphBase/J3DFifo.h"
#include <dolphin/mtx.h>
#include "dusk/endian_gx.hpp"
class J3DShapeMtx;
@@ -184,7 +185,7 @@ public:
bool getNBTFlag() const { return mHasNBT; }
u32 getBumpMtxOffset() const { return mBumpMtxOffset; }
void setBumpMtxOffset(u32 offset) { mBumpMtxOffset = offset; }
GXVtxDescList* getVtxDesc() { return mVtxDesc; }
BE(GXVtxDescList)* getVtxDesc() { return mVtxDesc; }
J3DMaterial* getMaterial() const { return mMaterial; }
u16 getIndex() const { return mIndex; }
@@ -212,7 +213,7 @@ private:
/* 0x14 */ Vec mMin;
/* 0x20 */ Vec mMax;
/* 0x2C */ u8* mVcdVatCmd;
/* 0x30 */ GXVtxDescList* mVtxDesc;
/* 0x30 */ BE(GXVtxDescList)* mVtxDesc;
/* 0x34 */ bool mHasNBT;
/* 0x38 */ J3DShapeMtx** mShapeMtx;
/* 0x3C */ J3DShapeDraw** mShapeDraw;
+5 -4
View File
@@ -4,6 +4,7 @@
#include "JSystem/J3DGraphBase/J3DShape.h"
#include "JSystem/J3DAssert.h"
#include <dolphin/mtx.h>
#include "dusk/endian.h"
class J3DTexMtx;
class J3DTexGenBlock;
@@ -34,7 +35,7 @@ typedef void (J3DShapeMtxConcatView::*J3DShapeMtxConcatView_LoadFunc)(int, u16)
*/
class J3DShapeMtxMulti : public J3DShapeMtx {
public:
J3DShapeMtxMulti(u16 useMtxIndex, u16 useMtxNum, u16* useMtxIndexTable)
J3DShapeMtxMulti(u16 useMtxIndex, u16 useMtxNum, BE(u16)* useMtxIndexTable)
: J3DShapeMtx(useMtxIndex)
, mUseMtxNum(useMtxNum)
, mUseMtxIndexTable(useMtxIndexTable)
@@ -49,7 +50,7 @@ public:
private:
/* 0x8 */ u16 mUseMtxNum;
/* 0xC */ u16* mUseMtxIndexTable;
/* 0xC */ BE(u16)* mUseMtxIndexTable;
};
/**
@@ -85,7 +86,7 @@ public:
*/
class J3DShapeMtxMultiConcatView : public J3DShapeMtxConcatView {
public:
J3DShapeMtxMultiConcatView(u16 useMtxIndex, u16 useMtxNum, u16* useMtxIndexTable)
J3DShapeMtxMultiConcatView(u16 useMtxIndex, u16 useMtxNum, BE(u16)* useMtxIndexTable)
: J3DShapeMtxConcatView(useMtxIndex)
, mUseMtxNum(useMtxNum)
, mUseMtxIndexTable(useMtxIndexTable)
@@ -101,7 +102,7 @@ public:
private:
/* 0x8 */ u16 mUseMtxNum;
/* 0xC */ u16* mUseMtxIndexTable;
/* 0xC */ BE(u16)* mUseMtxIndexTable;
};
/**
+11 -2
View File
@@ -7,6 +7,8 @@
#include "global.h"
#include "JSystem/JMath/JMath.h"
#include "dusk/endian.h"
/**
* @ingroup jsystem-j3d
*
@@ -15,6 +17,8 @@ struct J3DLightInfo {
bool operator==(J3DLightInfo& other) const;
J3DLightInfo& operator=(J3DLightInfo const&);
// NOTE: Values big endian, need fixup at load
// Actually, this class doesn't seem used?
/* 0x00 */ Vec mLightPosition;
/* 0x0C */ Vec mLightDirection;
/* 0x18 */ GXColor mColor;
@@ -27,6 +31,7 @@ struct J3DLightInfo {
*
*/
struct J3DTextureSRTInfo {
// NOTE: Big endian when loaded from file!
/* 0x00 */ f32 mScaleX;
/* 0x04 */ f32 mScaleY;
/* 0x08 */ s16 mRotation;
@@ -85,9 +90,10 @@ struct J3DTexMtxInfo {
/* 0x01 */ u8 mInfo;
/* 0x02 */ u8 field_0x2;
/* 0x03 */ u8 field_0x3;
// NOTE: big endian when loaded from file!
/* 0x04 */ Vec mCenter;
/* 0x10 */ J3DTextureSRTInfo mSRT;
/* 0x24 */ Mtx44 mEffectMtx;
/* 0x24 */ Mtx44 mEffectMtx;
}; // Size: 0x64
/**
@@ -108,6 +114,9 @@ struct J3DFogInfo {
bool operator==(J3DFogInfo&) const;
J3DFogInfo& operator=(const J3DFogInfo&);
// TODO: Fog data should be converted from big endian (probably?)
// Not sure TP uses it.
/* 0x00 */ u8 mType;
/* 0x01 */ u8 mAdjEnable;
/* 0x02 */ u16 mCenter;
@@ -128,7 +137,7 @@ struct J3DNBTScaleInfo {
J3DNBTScaleInfo& operator=(const J3DNBTScaleInfo&);
/* 0x0 */ u8 mbHasScale;
/* 0x4 */ Vec mScale;
/* 0x4 */ BE(Vec) mScale;
}; // Size: 0x10
/**
+5 -3
View File
@@ -3,8 +3,10 @@
#include <dolphin/gx.h>
#include <dolphin/mtx.h>
#include "JSystem/J3DAssert.h"
#include "JSystem/JMath/JMath.h"
#include "dusk/endian.h"
enum J3DSysDrawBuf {
/* 0x0 */ J3DSysDrawBuf_Opa,
@@ -63,7 +65,7 @@ struct J3DSys {
/* 0x10C */ void* mVtxPos;
/* 0x110 */ void* mVtxNrm;
/* 0x114 */ GXColor* mVtxCol;
/* 0x118 */ Vec* mNBTScale;
/* 0x118 */ BE(Vec)* mNBTScale;
J3DSys();
void loadPosMtxIndx(int, u16) const;
@@ -131,8 +133,8 @@ struct J3DSys {
}
J3DTexture* getTexture() { return mTexture; }
void setNBTScale(Vec* scale) { mNBTScale = scale; }
Vec* getNBTScale() { return mNBTScale; }
void setNBTScale(BE(Vec)* scale) { mNBTScale = scale; }
BE(Vec)* getNBTScale() { return mNBTScale; }
void onFlag(u32 flag) { mFlags |= flag; }
+1 -1
View File
@@ -282,7 +282,7 @@ struct J3DNBTScale : public J3DNBTScaleInfo {
mScale.z = info.mScale.z;
}
Vec* getScale() { return &mScale; }
BE(Vec)* getScale() { return &mScale; }
};
extern const GXColor j3dDefaultColInfo;
+3 -2
View File
@@ -3,6 +3,7 @@
#include <dolphin/gx.h>
#include <dolphin/mtx.h>
#include "dusk/endian_gx.hpp"
typedef struct _GXColor GXColor;
class J3DModel;
@@ -41,7 +42,7 @@ public:
u32 getNrmNum() const { return mNrmNum; }
u32 getVtxNum() const { return mVtxNum; }
u32 getColNum() const { return mColNum; }
GXVtxAttrFmtList* getVtxAttrFmtList() const { return mVtxAttrFmtList; }
BE(GXVtxAttrFmtList)* getVtxAttrFmtList() const { return mVtxAttrFmtList; }
u8 getVtxPosFrac() const { return mVtxPosFrac; }
u8 getVtxNrmFrac() const { return mVtxNrmFrac; }
int getVtxPosType() const { return mVtxPosType; }
@@ -60,7 +61,7 @@ private:
/* 0x08 */ u32 mColNum;
/* 0x0C */ u32 mTexCoordNum;
/* 0x10 */ u32 mPacketNum;
/* 0x14 */ GXVtxAttrFmtList* mVtxAttrFmtList;
/* 0x14 */ BE(GXVtxAttrFmtList)* mVtxAttrFmtList;
/* 0x18 */ void* mVtxPosArray;
/* 0x1C */ void* mVtxNrmArray;
/* 0x20 */ void* mVtxNBTArray;
@@ -3,6 +3,15 @@
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
#include "dusk/endian.h"
#if TARGET_PC
#define OFFSET_PTR BE(u32)
#else
#define OFFSET_PTR void*
#endif
/**
* @ingroup jsystem-j3d
*
@@ -17,18 +26,18 @@ struct J3DClusterLoaderDataBase {
*/
class J3DClusterBlock : public JUTDataBlockHeader {
public:
/* 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;
/* 0x08 */ BE(u16) mClusterNum;
/* 0x0A */ BE(u16) mClusterKeyNum;
/* 0x0C */ BE(u16) mClusterVertexNum;
/* 0x0E */ BE(u16) mVtxPosNum;
/* 0x10 */ BE(u16) mVtxNrmNum;
/* 0x14 */ OFFSET_PTR mClusterPointer;
/* 0x18 */ OFFSET_PTR mClusterKeyPointer;
/* 0x1C */ OFFSET_PTR mClusterVertex;
/* 0x20 */ OFFSET_PTR mVtxPos;
/* 0x24 */ OFFSET_PTR mVtxNrm;
/* 0x28 */ OFFSET_PTR mClusterName;
/* 0x2C */ OFFSET_PTR mClusterKeyName;
};
/**
@@ -58,4 +67,6 @@ public:
/* 0x04 */ J3DDeformData* mpDeformData;
};
#undef OFFSET_PTR
#endif /* J3DCLUSTERLOADER_H */
@@ -7,6 +7,8 @@
class J3DMaterial;
#define MAX_TEXTURES 8
/**
* @ingroup jsystem-j3d
*
@@ -20,28 +22,28 @@ struct J3DMaterialInitData {
/* 0x005 */ u8 mZCompLocIdx;
/* 0x006 */ u8 mZModeIdx;
/* 0x007 */ u8 mDitherIdx;
/* 0x008 */ u16 mMatColorIdx[2];
/* 0x00C */ u16 mColorChanIdx[4];
/* 0x014 */ u16 mAmbColorIdx[2];
/* 0x008 */ BE(u16) mMatColorIdx[2];
/* 0x00C */ BE(u16) mColorChanIdx[4];
/* 0x014 */ BE(u16) mAmbColorIdx[2];
/* 0x018 */ u8 field_0x018[0x10];
/* 0x028 */ u16 mTexCoordIdx[8];
/* 0x028 */ BE(u16) mTexCoordIdx[MAX_TEXTURES];
/* 0x038 */ u8 field_0x038[0x10];
/* 0x048 */ u16 mTexMtxIdx[8];
/* 0x048 */ BE(u16) mTexMtxIdx[MAX_TEXTURES];
/* 0x058 */ u8 field_0x058[0x2c];
/* 0x084 */ u16 mTexNoIdx[8];
/* 0x094 */ u16 mTevKColorIdx[4];
/* 0x084 */ BE(u16) mTexNoIdx[MAX_TEXTURES];
/* 0x094 */ BE(u16) mTevKColorIdx[4];
/* 0x09C */ u8 mTevKColorSel[0x10];
/* 0x0AC */ u8 mTevKAlphaSel[0x10];
/* 0x0BC */ u16 mTevOrderIdx[0x10];
/* 0x0DC */ u16 mTevColorIdx[4];
/* 0x0E4 */ u16 mTevStageIdx[0x10];
/* 0x104 */ u16 mTevSwapModeIdx[0x10];
/* 0x124 */ u16 mTevSwapModeTableIdx[4];
/* 0x0BC */ BE(u16) mTevOrderIdx[0x10];
/* 0x0DC */ BE(u16) mTevColorIdx[4];
/* 0x0E4 */ BE(u16) mTevStageIdx[0x10];
/* 0x104 */ BE(u16) mTevSwapModeIdx[0x10];
/* 0x124 */ BE(u16) mTevSwapModeTableIdx[4];
/* 0x12C */ u8 field_0x12c[0x18];
/* 0x144 */ u16 mFogIdx;
/* 0x146 */ u16 mAlphaCompIdx;
/* 0x148 */ u16 mBlendIdx;
/* 0x14A */ u16 mNBTScaleIdx;
/* 0x144 */ BE(u16) mFogIdx;
/* 0x146 */ BE(u16) mAlphaCompIdx;
/* 0x148 */ BE(u16) mBlendIdx;
/* 0x14A */ BE(u16) mNBTScaleIdx;
}; // size 0x14C
/**
@@ -84,7 +86,7 @@ struct J3DDisplayListInit {
}; // size 8
struct J3DTexCoord2Info;
struct J3DCurrentMtxInfo;
class J3DCurrentMtxInfo;
/**
* @ingroup jsystem-j3d
@@ -145,7 +147,7 @@ public:
/* 0x00 */ u16 mMaterialNum;
/* 0x04 */ J3DMaterialInitData* mpMaterialInitData;
/* 0x08 */ u16* mpMaterialID;
/* 0x08 */ BE(u16)* mpMaterialID;
/* 0x0C */ J3DIndInitData* mpIndInitData;
/* 0x10 */ GXColor* mpMatColor;
/* 0x14 */ u8* mpColorChanNum;
@@ -157,10 +159,10 @@ public:
/* 0x2C */ J3DTexCoord2Info* mpTexCoord2Info;
/* 0x30 */ J3DTexMtxInfo* mpTexMtxInfo;
/* 0x34 */ J3DTexMtxInfo* field_0x34;
/* 0x38 */ u16* mpTexNo;
/* 0x3C */ GXCullMode* mpCullMode;
/* 0x38 */ BE(u16)* mpTexNo;
/* 0x3C */ BE(GXCullMode)* mpCullMode;
/* 0x40 */ J3DTevOrderInfo* mpTevOrderInfo;
/* 0x44 */ GXColorS10* mpTevColor;
/* 0x44 */ BE(GXColorS10)* mpTevColor;
/* 0x48 */ GXColor* mpTevKColor;
/* 0x4C */ u8* mpTevStageNum;
/* 0x50 */ J3DTevStageInfo* mpTevStageInfo;
@@ -7,7 +7,7 @@
class J3DMaterial;
struct J3DTexCoord2Info;
struct J3DCurrentMtxInfo;
class J3DCurrentMtxInfo;
/**
* @ingroup jsystem-j3d
+115 -105
View File
@@ -4,17 +4,25 @@
#include "JSystem/J3DGraphBase/J3DSys.h"
#include <dolphin/mtx.h>
#include "dusk/endian.h"
class J3DModelData;
class J3DMaterialTable;
class J3DModelHierarchy;
#if TARGET_PC
#define OFFSET_PTR BE(u32)
#else
#define OFFSET_PTR void*
#endif
/**
* @ingroup jsystem-j3d
*
*/
struct J3DModelBlock {
/* 0x00 */ u32 mBlockType;
/* 0x04 */ u32 mBlockSize;
/* 0x00 */ BE(u32) mBlockType;
/* 0x04 */ BE(u32) mBlockSize;
};
/**
@@ -22,10 +30,10 @@ struct J3DModelBlock {
*
*/
struct J3DModelFileData {
/* 0x00 */ u32 mMagic1;
/* 0x04 */ u32 mMagic2;
/* 0x00 */ BE(u32) mMagic1;
/* 0x04 */ BE(u32) mMagic2;
/* 0x08 */ u8 field_0x08[4];
/* 0x0C */ u32 mBlockNum;
/* 0x0C */ BE(u32) mBlockNum;
/* 0x10 */ u8 field_0x10[0x10];
/* 0x20 */ J3DModelBlock mBlocks[1];
};
@@ -35,10 +43,10 @@ struct J3DModelFileData {
*
*/
struct J3DModelInfoBlock : public J3DModelBlock {
/* 0x08 */ u16 mFlags;
/* 0x0C */ u32 mPacketNum;
/* 0x10 */ u32 mVtxNum;
/* 0x14 */ void* mpHierarchy;
/* 0x08 */ BE(u16) mFlags;
/* 0x0C */ BE(u32) mPacketNum;
/* 0x10 */ BE(u32) mVtxNum;
/* 0x14 */ OFFSET_PTR mpHierarchy;
}; // size 0x18
/**
@@ -46,12 +54,12 @@ struct J3DModelInfoBlock : public J3DModelBlock {
*
*/
struct J3DVertexBlock : public J3DModelBlock {
/* 0x08 */ void* mpVtxAttrFmtList;
/* 0x0C */ void* mpVtxPosArray;
/* 0x10 */ void* mpVtxNrmArray;
/* 0x14 */ void* mpVtxNBTArray;
/* 0x18 */ void* mpVtxColorArray[2];
/* 0x20 */ void* mpVtxTexCoordArray[8];
/* 0x08 */ OFFSET_PTR mpVtxAttrFmtList;
/* 0x0C */ OFFSET_PTR mpVtxPosArray;
/* 0x10 */ OFFSET_PTR mpVtxNrmArray;
/* 0x14 */ OFFSET_PTR mpVtxNBTArray;
/* 0x18 */ OFFSET_PTR mpVtxColorArray[2];
/* 0x20 */ OFFSET_PTR mpVtxTexCoordArray[8];
}; // size 0x40
/**
@@ -59,11 +67,11 @@ struct J3DVertexBlock : public J3DModelBlock {
*
*/
struct J3DEnvelopeBlock : public J3DModelBlock {
/* 0x08 */ u16 mWEvlpMtxNum;
/* 0x0C */ void* mpWEvlpMixMtxNum;
/* 0x10 */ void* mpWEvlpMixIndex;
/* 0x14 */ void* mpWEvlpMixWeight;
/* 0x18 */ void* mpInvJointMtx;
/* 0x08 */ BE(u16) mWEvlpMtxNum;
/* 0x0C */ OFFSET_PTR mpWEvlpMixMtxNum;
/* 0x10 */ OFFSET_PTR mpWEvlpMixIndex;
/* 0x14 */ OFFSET_PTR mpWEvlpMixWeight;
/* 0x18 */ OFFSET_PTR mpInvJointMtx;
}; // size 0x1C
/**
@@ -71,9 +79,9 @@ struct J3DEnvelopeBlock : public J3DModelBlock {
*
*/
struct J3DDrawBlock : public J3DModelBlock {
/* 0x08 */ u16 mMtxNum;
/* 0x0C */ void* mpDrawMtxFlag;
/* 0x10 */ void* mpDrawMtxIndex;
/* 0x08 */ BE(u16) mMtxNum;
/* 0x0C */ OFFSET_PTR mpDrawMtxFlag;
/* 0x10 */ OFFSET_PTR mpDrawMtxIndex;
}; // size 0x14
/**
@@ -81,10 +89,10 @@ struct J3DDrawBlock : public J3DModelBlock {
*
*/
struct J3DJointBlock : public J3DModelBlock {
/* 0x08 */ u16 mJointNum;
/* 0x0C */ void* mpJointInitData;
/* 0x10 */ void* mpIndexTable;
/* 0x14 */ void* mpNameTable;
/* 0x08 */ BE(u16) mJointNum;
/* 0x0C */ OFFSET_PTR mpJointInitData;
/* 0x10 */ OFFSET_PTR mpIndexTable;
/* 0x14 */ OFFSET_PTR mpNameTable;
}; // size 0x18
/**
@@ -92,37 +100,37 @@ struct J3DJointBlock : public J3DModelBlock {
*
*/
struct J3DMaterialBlock : public J3DModelBlock {
/* 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;
/* 0x08 */ BE(u16) mMaterialNum;
/* 0x0C */ OFFSET_PTR mpMaterialInitData;
/* 0x10 */ OFFSET_PTR mpMaterialID;
/* 0x14 */ OFFSET_PTR mpNameTable;
/* 0x18 */ OFFSET_PTR mpIndInitData;
/* 0x1C */ OFFSET_PTR mpCullMode;
/* 0x20 */ OFFSET_PTR mpMatColor;
/* 0x24 */ OFFSET_PTR mpColorChanNum;
/* 0x28 */ OFFSET_PTR mpColorChanInfo;
/* 0x2C */ OFFSET_PTR mpAmbColor;
/* 0x30 */ OFFSET_PTR mpLightInfo;
/* 0x34 */ OFFSET_PTR mpTexGenNum;
/* 0x38 */ OFFSET_PTR mpTexCoordInfo;
/* 0x3C */ OFFSET_PTR mpTexCoord2Info;
/* 0x40 */ OFFSET_PTR mpTexMtxInfo;
/* 0x44 */ OFFSET_PTR field_0x44;
/* 0x48 */ OFFSET_PTR mpTexNo;
/* 0x4C */ OFFSET_PTR mpTevOrderInfo;
/* 0x50 */ OFFSET_PTR mpTevColor;
/* 0x54 */ OFFSET_PTR mpTevKColor;
/* 0x58 */ OFFSET_PTR mpTevStageNum;
/* 0x5C */ OFFSET_PTR mpTevStageInfo;
/* 0x60 */ OFFSET_PTR mpTevSwapModeInfo;
/* 0x64 */ OFFSET_PTR mpTevSwapModeTableInfo;
/* 0x68 */ OFFSET_PTR mpFogInfo;
/* 0x6C */ OFFSET_PTR mpAlphaCompInfo;
/* 0x70 */ OFFSET_PTR mpBlendInfo;
/* 0x74 */ OFFSET_PTR mpZModeInfo;
/* 0x78 */ OFFSET_PTR mpZCompLoc;
/* 0x7C */ OFFSET_PTR mpDither;
/* 0x80 */ OFFSET_PTR mpNBTScaleInfo;
};
/**
@@ -130,34 +138,34 @@ struct J3DMaterialBlock : public J3DModelBlock {
*
*/
struct J3DMaterialBlock_v21 : public J3DModelBlock {
/* 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_0x38;
/* 0x3C */ void* mpTexNo;
/* 0x40 */ void* mpTevOrderInfo;
/* 0x44 */ void* mpTevColor;
/* 0x48 */ void* mpTevKColor;
/* 0x4C */ void* mpTevStageNum;
/* 0x50 */ void* mpTevStageInfo;
/* 0x54 */ void* mpTevSwapModeInfo;
/* 0x58 */ void* mpTevSwapModeTableInfo;
/* 0x5C */ void* mpFogInfo;
/* 0x60 */ void* mpAlphaCompInfo;
/* 0x64 */ void* mpBlendInfo;
/* 0x68 */ void* mpZModeInfo;
/* 0x6C */ void* mpZCompLoc;
/* 0x70 */ void* mpDither;
/* 0x74 */ void* mpNBTScaleInfo;
/* 0x08 */ BE(u16) mMaterialNum;
/* 0x0C */ OFFSET_PTR mpMaterialInitData;
/* 0x10 */ OFFSET_PTR mpMaterialID;
/* 0x14 */ OFFSET_PTR mpNameTable;
/* 0x18 */ OFFSET_PTR mpCullMode;
/* 0x1C */ OFFSET_PTR mpMatColor;
/* 0x20 */ OFFSET_PTR mpColorChanNum;
/* 0x24 */ OFFSET_PTR mpColorChanInfo;
/* 0x28 */ OFFSET_PTR mpTexGenNum;
/* 0x2C */ OFFSET_PTR mpTexCoordInfo;
/* 0x30 */ OFFSET_PTR mpTexCoord2Info;
/* 0x34 */ OFFSET_PTR mpTexMtxInfo;
/* 0x38 */ OFFSET_PTR field_0x38;
/* 0x3C */ OFFSET_PTR mpTexNo;
/* 0x40 */ OFFSET_PTR mpTevOrderInfo;
/* 0x44 */ OFFSET_PTR mpTevColor;
/* 0x48 */ OFFSET_PTR mpTevKColor;
/* 0x4C */ OFFSET_PTR mpTevStageNum;
/* 0x50 */ OFFSET_PTR mpTevStageInfo;
/* 0x54 */ OFFSET_PTR mpTevSwapModeInfo;
/* 0x58 */ OFFSET_PTR mpTevSwapModeTableInfo;
/* 0x5C */ OFFSET_PTR mpFogInfo;
/* 0x60 */ OFFSET_PTR mpAlphaCompInfo;
/* 0x64 */ OFFSET_PTR mpBlendInfo;
/* 0x68 */ OFFSET_PTR mpZModeInfo;
/* 0x6C */ OFFSET_PTR mpZCompLoc;
/* 0x70 */ OFFSET_PTR mpDither;
/* 0x74 */ OFFSET_PTR mpNBTScaleInfo;
};
/**
@@ -165,13 +173,13 @@ struct J3DMaterialBlock_v21 : public J3DModelBlock {
*
*/
struct J3DMaterialDLBlock : public J3DModelBlock {
/* 0x08 */ u16 mMaterialNum;
/* 0x0C */ void* mpDisplayListInit;
/* 0x10 */ void* mpPatchingInfo;
/* 0x14 */ void* mpCurrentMtxInfo;
/* 0x18 */ void* mpMaterialMode;
/* 0x1C */ void* field_0x1c;
/* 0x20 */ void* mpNameTable;
/* 0x08 */ BE(u16) mMaterialNum;
/* 0x0C */ OFFSET_PTR mpDisplayListInit;
/* 0x10 */ OFFSET_PTR mpPatchingInfo;
/* 0x14 */ OFFSET_PTR mpCurrentMtxInfo;
/* 0x18 */ OFFSET_PTR mpMaterialMode;
/* 0x1C */ OFFSET_PTR field_0x1c;
/* 0x20 */ OFFSET_PTR mpNameTable;
};
/**
@@ -179,15 +187,15 @@ struct J3DMaterialDLBlock : public J3DModelBlock {
*
*/
struct J3DShapeBlock : public J3DModelBlock {
/* 0x08 */ u16 mShapeNum;
/* 0x0C */ void* mpShapeInitData;
/* 0x10 */ void* mpIndexTable;
/* 0x14 */ void* mpNameTable;
/* 0x18 */ void* mpVtxDescList;
/* 0x1C */ void* mpMtxTable;
/* 0x20 */ void* mpDisplayListData;
/* 0x24 */ void* mpMtxInitData;
/* 0x28 */ void* mpDrawInitData;
/* 0x08 */ BE(u16) mShapeNum;
/* 0x0C */ OFFSET_PTR mpShapeInitData;
/* 0x10 */ OFFSET_PTR mpIndexTable;
/* 0x14 */ OFFSET_PTR mpNameTable;
/* 0x18 */ OFFSET_PTR mpVtxDescList;
/* 0x1C */ OFFSET_PTR mpMtxTable;
/* 0x20 */ OFFSET_PTR mpDisplayListData;
/* 0x24 */ OFFSET_PTR mpMtxInitData;
/* 0x28 */ OFFSET_PTR mpDrawInitData;
}; // size 0x2C
/**
@@ -195,9 +203,9 @@ struct J3DShapeBlock : public J3DModelBlock {
*
*/
struct J3DTextureBlock : public J3DModelBlock {
/* 0x08 */ u16 mTextureNum;
/* 0x0C */ void* mpTextureRes;
/* 0x10 */ void* mpNameTable;
/* 0x08 */ BE(u16) mTextureNum;
/* 0x0C */ OFFSET_PTR mpTextureRes;
/* 0x10 */ OFFSET_PTR mpNameTable;
};
enum J3DModelLoaderFlagTypes {
@@ -347,4 +355,6 @@ struct J3DMtxCalcJ3DSysInitSoftimage {
}
};
#undef OFFSET_PTR
#endif /* J3DMODELLOADER_H */
@@ -15,13 +15,13 @@ struct ResNTAB;
*/
struct J3DShapeInitData {
/* 0x00 */ u8 mShapeMtxType;
/* 0x02 */ u16 mMtxGroupNum;
/* 0x04 */ u16 mVtxDescListIndex;
/* 0x06 */ u16 mMtxInitDataIndex;
/* 0x08 */ u16 mDrawInitDataIndex;
/* 0x0C */ f32 mRadius;
/* 0x10 */ Vec mMin;
/* 0x1C */ Vec mMax;
/* 0x02 */ BE(u16) mMtxGroupNum;
/* 0x04 */ BE(u16) mVtxDescListIndex;
/* 0x06 */ BE(u16) mMtxInitDataIndex;
/* 0x08 */ BE(u16) mDrawInitDataIndex;
/* 0x0C */ BE(f32) mRadius;
/* 0x10 */ BE(Vec) mMin;
/* 0x1C */ BE(Vec) mMax;
};
/**
@@ -29,9 +29,9 @@ struct J3DShapeInitData {
*
*/
struct J3DShapeMtxInitData {
/* 0x00 */ u16 mUseMtxIndex;
/* 0x02 */ u16 mUseMtxCount;
/* 0x04 */ u32 mFirstUseMtxIndex;
/* 0x00 */ BE(u16) mUseMtxIndex;
/* 0x02 */ BE(u16) mUseMtxCount;
/* 0x04 */ BE(u32) mFirstUseMtxIndex;
};
/**
@@ -39,8 +39,8 @@ struct J3DShapeMtxInitData {
*
*/
struct J3DShapeDrawInitData {
/* 0x00 */ u32 mDisplayListSize;
/* 0x04 */ u32 mDisplayListIndex;
/* 0x00 */ BE(u32) mDisplayListSize;
/* 0x04 */ BE(u32) mDisplayListIndex;
};
/**
@@ -49,7 +49,7 @@ struct J3DShapeDrawInitData {
*/
struct J3DShapeFactory {
J3DShapeFactory(J3DShapeBlock const&);
J3DShape* create(int, u32, GXVtxDescList*);
J3DShape* create(int, u32, BE(GXVtxDescList)*);
J3DShapeMtx* newShapeMtx(u32, int, int) const;
J3DShapeDraw* newShapeDraw(int, int) const;
void allocVcdVatCmdBuffer(u32);
@@ -58,19 +58,25 @@ struct J3DShapeFactory {
s32 calcSizeShapeMtx(u32, int, int) const;
/* 0x00 */ J3DShapeInitData* mShapeInitData;
/* 0x04 */ u16* mIndexTable;
/* 0x08 */ GXVtxDescList* mVtxDescList;
/* 0x0C */ u16* mMtxTable;
/* 0x04 */ BE(u16)* mIndexTable;
/* 0x08 */ BE(GXVtxDescList)* mVtxDescList;
/* 0x0C */ BE(u16)* mMtxTable;
/* 0x10 */ u8* mDisplayListData;
/* 0x14 */ J3DShapeMtxInitData* mMtxInitData;
/* 0x18 */ J3DShapeDrawInitData* mDrawInitData;
/* 0x1C */ u8* mVcdVatCmdBuffer;
u16 getMtxGroupNum(int no) const { return mShapeInitData[mIndexTable[no]].mMtxGroupNum; }
GXVtxDescList* getVtxDescList(int no) const { return (GXVtxDescList*)((u8*)mVtxDescList + mShapeInitData[mIndexTable[no]].mVtxDescListIndex); }
BE(GXVtxDescList)* getVtxDescList(int no) const { return (BE(GXVtxDescList)*)((u8*)mVtxDescList + mShapeInitData[mIndexTable[no]].mVtxDescListIndex); }
f32 getRadius(int no) const { return mShapeInitData[mIndexTable[no]].mRadius; }
#if TARGET_PC
// Reference return only used for reading, messes with endian handling
Vec getMin[[nodiscard]](int no) const { return mShapeInitData[mIndexTable[no]].mMin; }
Vec getMax[[nodiscard]](int no) const { return mShapeInitData[mIndexTable[no]].mMax; }
#else
Vec& getMin(int no) const { return mShapeInitData[mIndexTable[no]].mMin; }
Vec& getMax(int no) const { return mShapeInitData[mIndexTable[no]].mMax; }
#endif
};
+4
View File
@@ -18,7 +18,11 @@ T* JSUConvertOffsetToPtr(const void* ptr, uintptr_t offset) {
*
*/
template <typename T>
#if TARGET_PC
T* JSUConvertOffsetToPtr(const void* ptr, u32 offset) {
#else
T* JSUConvertOffsetToPtr(const void* ptr, const void* offset) {
#endif
T* ret;
if (offset == NULL) {
ret = NULL;