diff --git a/files.cmake b/files.cmake index 0d2bce5539..907b0a2d53 100644 --- a/files.cmake +++ b/files.cmake @@ -1317,9 +1317,11 @@ set(REL_FILES ) set(DUSK_FILES + include/dusk/endian_gx.hpp src/dusk/asserts.cpp src/dusk/imgui.cpp src/dusk/stubs.cpp + src/dusk/endian.cpp src/dusk/extras.c src/dusk/extras.cpp src/dusk/globals.cpp diff --git a/include/JSystem/J2DGraph/J2DMaterialFactory.h b/include/JSystem/J2DGraph/J2DMaterialFactory.h index 09eb1fe4ec..20bcbe1eb4 100644 --- a/include/JSystem/J2DGraph/J2DMaterialFactory.h +++ b/include/JSystem/J2DGraph/J2DMaterialFactory.h @@ -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; diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h index 041ce31875..c53173ae5d 100644 --- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h +++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h @@ -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(reinterpret_cast(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 */ diff --git a/include/JSystem/J3DGraphAnimator/J3DCluster.h b/include/JSystem/J3DGraphAnimator/J3DCluster.h index 969ad6ae71..df7ca2e5c4 100644 --- a/include/JSystem/J3DGraphAnimator/J3DCluster.h +++ b/include/JSystem/J3DGraphAnimator/J3DCluster.h @@ -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 */ diff --git a/include/JSystem/J3DGraphAnimator/J3DJointTree.h b/include/JSystem/J3DGraphAnimator/J3DJointTree.h index 285efa88d5..9d357b6613 100644 --- a/include/JSystem/J3DGraphAnimator/J3DJointTree.h +++ b/include/JSystem/J3DGraphAnimator/J3DJointTree.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; diff --git a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h index 74cc8f9fa0..9ae2a81d27 100644 --- a/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h +++ b/include/JSystem/J3DGraphAnimator/J3DSkinDeform.h @@ -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) { diff --git a/include/JSystem/J3DGraphBase/J3DShape.h b/include/JSystem/J3DGraphBase/J3DShape.h index 8687b2b794..37e26f899c 100644 --- a/include/JSystem/J3DGraphBase/J3DShape.h +++ b/include/JSystem/J3DGraphBase/J3DShape.h @@ -5,6 +5,7 @@ #include "JSystem/J3DAssert.h" #include "JSystem/J3DGraphBase/J3DFifo.h" #include +#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; diff --git a/include/JSystem/J3DGraphBase/J3DShapeMtx.h b/include/JSystem/J3DGraphBase/J3DShapeMtx.h index d840b66c7a..e6bdcf1993 100644 --- a/include/JSystem/J3DGraphBase/J3DShapeMtx.h +++ b/include/JSystem/J3DGraphBase/J3DShapeMtx.h @@ -4,6 +4,7 @@ #include "JSystem/J3DGraphBase/J3DShape.h" #include "JSystem/J3DAssert.h" #include +#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; }; /** diff --git a/include/JSystem/J3DGraphBase/J3DStruct.h b/include/JSystem/J3DGraphBase/J3DStruct.h index 3faf248d84..82debd627e 100644 --- a/include/JSystem/J3DGraphBase/J3DStruct.h +++ b/include/JSystem/J3DGraphBase/J3DStruct.h @@ -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 /** diff --git a/include/JSystem/J3DGraphBase/J3DSys.h b/include/JSystem/J3DGraphBase/J3DSys.h index cc19cda7e6..0d88487f5f 100644 --- a/include/JSystem/J3DGraphBase/J3DSys.h +++ b/include/JSystem/J3DGraphBase/J3DSys.h @@ -3,8 +3,10 @@ #include #include + #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; } diff --git a/include/JSystem/J3DGraphBase/J3DTevs.h b/include/JSystem/J3DGraphBase/J3DTevs.h index a13b54e4a4..ad160c0e9d 100644 --- a/include/JSystem/J3DGraphBase/J3DTevs.h +++ b/include/JSystem/J3DGraphBase/J3DTevs.h @@ -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; diff --git a/include/JSystem/J3DGraphBase/J3DVertex.h b/include/JSystem/J3DGraphBase/J3DVertex.h index 2486fdc41c..02c15e2499 100644 --- a/include/JSystem/J3DGraphBase/J3DVertex.h +++ b/include/JSystem/J3DGraphBase/J3DVertex.h @@ -3,6 +3,7 @@ #include #include +#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; diff --git a/include/JSystem/J3DGraphLoader/J3DClusterLoader.h b/include/JSystem/J3DGraphLoader/J3DClusterLoader.h index d02f38d7a8..8fa2681f35 100644 --- a/include/JSystem/J3DGraphLoader/J3DClusterLoader.h +++ b/include/JSystem/J3DGraphLoader/J3DClusterLoader.h @@ -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 */ diff --git a/include/JSystem/J3DGraphLoader/J3DMaterialFactory.h b/include/JSystem/J3DGraphLoader/J3DMaterialFactory.h index bed19cd693..e3834dc87f 100644 --- a/include/JSystem/J3DGraphLoader/J3DMaterialFactory.h +++ b/include/JSystem/J3DGraphLoader/J3DMaterialFactory.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; diff --git a/include/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h b/include/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h index af166e1b13..e59d158959 100644 --- a/include/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h +++ b/include/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h @@ -7,7 +7,7 @@ class J3DMaterial; struct J3DTexCoord2Info; -struct J3DCurrentMtxInfo; +class J3DCurrentMtxInfo; /** * @ingroup jsystem-j3d diff --git a/include/JSystem/J3DGraphLoader/J3DModelLoader.h b/include/JSystem/J3DGraphLoader/J3DModelLoader.h index 5fff37ecad..9f3c979c37 100644 --- a/include/JSystem/J3DGraphLoader/J3DModelLoader.h +++ b/include/JSystem/J3DGraphLoader/J3DModelLoader.h @@ -4,17 +4,25 @@ #include "JSystem/J3DGraphBase/J3DSys.h" #include +#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 */ diff --git a/include/JSystem/J3DGraphLoader/J3DShapeFactory.h b/include/JSystem/J3DGraphLoader/J3DShapeFactory.h index 702de3bdf4..90a9bcb602 100644 --- a/include/JSystem/J3DGraphLoader/J3DShapeFactory.h +++ b/include/JSystem/J3DGraphLoader/J3DShapeFactory.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 }; diff --git a/include/JSystem/JSupport/JSupport.h b/include/JSystem/JSupport/JSupport.h index 717fd9b7b0..5b6b26a20f 100644 --- a/include/JSystem/JSupport/JSupport.h +++ b/include/JSystem/JSupport/JSupport.h @@ -18,7 +18,11 @@ T* JSUConvertOffsetToPtr(const void* ptr, uintptr_t offset) { * */ template +#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; diff --git a/include/dusk/endian.h b/include/dusk/endian.h index 6623f2f0b2..179bdf046e 100644 --- a/include/dusk/endian.h +++ b/include/dusk/endian.h @@ -1,7 +1,10 @@ #ifndef DOLPHIN_ENDIAN_H #define DOLPHIN_ENDIAN_H +#include + #include "dolphin/types.h" +#include "dolphin/mtx.h" // Platform detection - Little Endian targets #if defined(_WIN32) || defined(__x86_64__) || defined(__i386__) || defined(__aarch64__) || defined(_M_X64) || defined(_M_IX86) @@ -45,6 +48,9 @@ static inline u32 RES_U32(u32 v) { static inline s32 RES_S32(s32 v) { return be32s(v); } +static inline f32 RES_F32(f32 v) { + return std::bit_cast(RES_S32(std::bit_cast(v))); +} #else // On GameCube host-endian == file-endian, these are no-ops (keep as macros to allow compile in // original code paths) @@ -62,32 +68,102 @@ static inline s32 RES_S32(s32 v) { template struct BE { T inner; - operator T() const; + BE() = default; + BE(const T& from) { + inner = swap(from); + } + + operator T() const { + return swap(inner); + } + + T host[[nodiscard]]() const { + return swap(inner); + } + + static T swap[[nodiscard]](T val); }; template<> -inline BE::operator u16() const { - return RES_U16(inner); +inline u16 BE::swap(u16 val) { + return RES_U16(val); } template<> -inline BE::operator s16() const { - return RES_S16(inner); +inline s16 BE::swap(s16 val) { + return RES_S16(val); } template<> -inline BE::operator u32() const { - return RES_U32(inner); +inline u32 BE::swap(u32 val) { + return RES_U32(val); } template<> -inline BE::operator s32() const { - return RES_S32(inner); +inline s32 BE::swap(s32 val) { + return RES_S32(val); +} + +template<> +inline f32 BE::swap(f32 val) { + return RES_F32(val); +} + +template<> +struct BE { + BE x; + BE y; + BE z; + + operator Vec() const { + return { x, y, z }; + } + + static Vec swap(Vec val) { + return { + BE::swap(val.x), + BE::swap(val.y), + BE::swap(val.z), + }; + } +}; + +template <> +struct BE { + BE contents[4][4]; + + auto& operator[](int x) const { + return contents[x]; + } +}; + +template +void be_swap(T& val) { + val = BE::swap(val); +} + +template +void be_swap(T (& val)[N]) { + for (u32 i = 0; i < N; i++) { + be_swap(val[i]); + } + val = BE::swap(val); +} + +template<> +inline void be_swap(Mtx44& val) { + for (auto & x : val) { + for (float & y : x) { + be_swap(y); + } + } } #define BE(T) BE +#define BE_HOST(T) (T.host()) #else #define BE(T) T +#define BE_HOST(T) (T) #endif diff --git a/include/dusk/endian_gx.hpp b/include/dusk/endian_gx.hpp new file mode 100644 index 0000000000..e0fd9cdcba --- /dev/null +++ b/include/dusk/endian_gx.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "dolphin/gx/GXStruct.h" +#include "endian.h" + +template <> +struct BE { + BE attr; + BE type; +}; + +template <> +struct BE { + BE attr; + BE cnt; + BE type; + u8 frac; +}; diff --git a/src/JSystem/J2DGraph/J2DAnmLoader.cpp b/src/JSystem/J2DGraph/J2DAnmLoader.cpp index 9dda6c1f9b..46c6764684 100644 --- a/src/JSystem/J2DGraph/J2DAnmLoader.cpp +++ b/src/JSystem/J2DGraph/J2DAnmLoader.cpp @@ -122,7 +122,7 @@ void* J2DAnmKeyLoader_v15::load(void const* p_data) { OS_REPORT("Unknown data block\n"); break; } - dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset); + dataPtr = (J3DAnmDataBlockHeader*)((intptr_t)dataPtr + dataPtr->mNextOffset); } return mpResource; @@ -165,7 +165,7 @@ void J2DAnmKeyLoader_v15::setResource(J2DAnmBase* p_anm, void const* p_data) { OS_REPORT("Unknown data block\n"); break; } - dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset); + dataPtr = (J3DAnmDataBlockHeader*)((intptr_t)dataPtr + dataPtr->mNextOffset); } } @@ -184,11 +184,11 @@ void J2DAnmKeyLoader_v15::setAnmTransform(J2DAnmTransformKey* p_anm, p_anm->field_0x24 = p_data->field_0x9; p_anm->mFrame = 0; p_anm->mInfoTable = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mTableOffset); - p_anm->mScaleValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->field_0x18); - p_anm->mRotationValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->field_0x1c); + JSUConvertOffsetToPtr(p_data, p_data->mTableOffset); + p_anm->mScaleValues = JSUConvertOffsetToPtr(p_data, p_data->field_0x18); + p_anm->mRotationValues = JSUConvertOffsetToPtr(p_data, p_data->field_0x1c); p_anm->mTranslateValues = - JSUConvertOffsetToPtr(p_data, (void*)p_data->field_0x20); + JSUConvertOffsetToPtr(p_data, p_data->field_0x20); } void J2DAnmKeyLoader_v15::readAnmTextureSRT(J3DAnmTextureSRTKeyData const* p_data) { @@ -210,31 +210,31 @@ void J2DAnmKeyLoader_v15::setAnmTextureSRT(J2DAnmTextureSRTKey* p_anm, p_anm->field_0x1c = p_data->field_0x10; p_anm->field_0x1e = p_data->field_0x12; p_anm->mInfoTable = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mTableOffset); - p_anm->mUpdateMaterialID = JSUConvertOffsetToPtr(p_data, (void*)p_data->mUpdateMatIDOffset); + JSUConvertOffsetToPtr(p_data, p_data->mTableOffset); + p_anm->mUpdateMaterialID = JSUConvertOffsetToPtr(p_data, p_data->mUpdateMatIDOffset); p_anm->field_0x34.setResource( - JSUConvertOffsetToPtr(p_data, (void*)p_data->mNameTab1Offset)); + JSUConvertOffsetToPtr(p_data, p_data->mNameTab1Offset)); p_anm->mUpdateTexMtxID = JSUConvertOffsetToPtr(p_data, p_data->mUpdateTexMtxIDOffset); - p_anm->field_0x44 = JSUConvertOffsetToPtr(p_data, (void*)p_data->unkOffset); - p_anm->mScaleValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mScaleValOffset); - p_anm->mRotationValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mRotValOffset); - p_anm->mTranslationValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mTransValOffset); + p_anm->field_0x44 = JSUConvertOffsetToPtr(p_data, p_data->unkOffset); + p_anm->mScaleValues = JSUConvertOffsetToPtr(p_data, p_data->mScaleValOffset); + p_anm->mRotationValues = JSUConvertOffsetToPtr(p_data, p_data->mRotValOffset); + p_anm->mTranslationValues = JSUConvertOffsetToPtr(p_data, p_data->mTransValOffset); if (p_data->mNameTab2Offset != 0) { p_anm->field_0x68.setResource( - JSUConvertOffsetToPtr(p_data, (void*)p_data->mNameTab2Offset)); + JSUConvertOffsetToPtr(p_data, p_data->mNameTab2Offset)); } p_anm->field_0x4e = p_data->field_0x34; p_anm->field_0x48 = p_data->field_0x36; p_anm->field_0x4a = p_data->field_0x38; p_anm->field_0x4c = p_data->field_0x3a; p_anm->field_0x5c = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mInfoTable2Offset); - p_anm->field_0x64 = JSUConvertOffsetToPtr(p_data, (void*)p_data->field_0x40); + JSUConvertOffsetToPtr(p_data, p_data->mInfoTable2Offset); + p_anm->field_0x64 = JSUConvertOffsetToPtr(p_data, p_data->field_0x40); p_anm->field_0x60 = JSUConvertOffsetToPtr(p_data, p_data->field_0x48); - p_anm->field_0x78 = JSUConvertOffsetToPtr(p_data, (void*)p_data->field_0x4c); - p_anm->field_0x50 = JSUConvertOffsetToPtr(p_data, (void*)p_data->field_0x50); - p_anm->field_0x54 = JSUConvertOffsetToPtr(p_data, (void*)p_data->field_0x54); - p_anm->field_0x58 = JSUConvertOffsetToPtr(p_data, (void*)p_data->field_0x58); + p_anm->field_0x78 = JSUConvertOffsetToPtr(p_data, p_data->field_0x4c); + p_anm->field_0x50 = JSUConvertOffsetToPtr(p_data, p_data->field_0x50); + p_anm->field_0x54 = JSUConvertOffsetToPtr(p_data, p_data->field_0x54); + p_anm->field_0x58 = JSUConvertOffsetToPtr(p_data, p_data->field_0x58); switch (p_data->field_0x5c) { case 0: p_anm->field_0x7c = 0; @@ -265,15 +265,15 @@ void J2DAnmKeyLoader_v15::setAnmColor(J2DAnmColorKey* p_anm, J3DAnmColorKeyData p_anm->field_0x14 = p_data->field_0x14; p_anm->field_0x16 = p_data->field_0x16; p_anm->mInfoTable = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mTableOffset); - p_anm->mRValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mRValOffset); - p_anm->mGValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mGValOffset); - p_anm->mBValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mBValOffset); - p_anm->mAValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mAValOffset); + JSUConvertOffsetToPtr(p_data, p_data->mTableOffset); + p_anm->mRValues = JSUConvertOffsetToPtr(p_data, p_data->mRValOffset); + p_anm->mGValues = JSUConvertOffsetToPtr(p_data, p_data->mGValOffset); + p_anm->mBValues = JSUConvertOffsetToPtr(p_data, p_data->mBValOffset); + p_anm->mAValues = JSUConvertOffsetToPtr(p_data, p_data->mAValOffset); p_anm->mUpdateMaterialID = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mUpdateMaterialIDOffset); + JSUConvertOffsetToPtr(p_data, p_data->mUpdateMaterialIDOffset); p_anm->field_0x20.setResource( - JSUConvertOffsetToPtr(p_data, (void*)p_data->mNameTabOffset)); + JSUConvertOffsetToPtr(p_data, p_data->mNameTabOffset)); } void J2DAnmKeyLoader_v15::readAnmVtxColor(J3DAnmVtxColorKeyData const* p_data) { @@ -291,21 +291,21 @@ void J2DAnmKeyLoader_v15::setAnmVtxColor(J2DAnmVtxColorKey* p_anm, p_anm->mAnmTableNum[0] = p_data->mAnmTableNum[0]; p_anm->mAnmTableNum[1] = p_data->mAnmTableNum[1]; p_anm->mInfoTable[0] = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mTableOffsets[0]); + JSUConvertOffsetToPtr(p_data, p_data->mTableOffsets[0]); p_anm->mInfoTable[1] = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mTableOffsets[1]); + JSUConvertOffsetToPtr(p_data, p_data->mTableOffsets[1]); p_anm->mVtxColorIndexData[0] = JSUConvertOffsetToPtr( - p_data, (void*)p_data->mVtxColoIndexDataOffset[0]); + p_data, p_data->mVtxColoIndexDataOffset[0]); p_anm->mVtxColorIndexData[1] = JSUConvertOffsetToPtr( - p_data, (void*)p_data->mVtxColoIndexDataOffset[1]); + p_data, p_data->mVtxColoIndexDataOffset[1]); p_anm->mVtxColorIndexPointer[0] = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mVtxColoIndexPointerOffset[0]); + JSUConvertOffsetToPtr(p_data, p_data->mVtxColoIndexPointerOffset[0]); p_anm->mVtxColorIndexPointer[1] = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mVtxColoIndexPointerOffset[1]); - p_anm->mRValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mRValOffset); - p_anm->mGValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mGValOffset); - p_anm->mBValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mBValOffset); - p_anm->mAValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mAValOffset); + JSUConvertOffsetToPtr(p_data, p_data->mVtxColoIndexPointerOffset[1]); + p_anm->mRValues = JSUConvertOffsetToPtr(p_data, p_data->mRValOffset); + p_anm->mGValues = JSUConvertOffsetToPtr(p_data, p_data->mGValOffset); + p_anm->mBValues = JSUConvertOffsetToPtr(p_data, p_data->mBValOffset); + p_anm->mAValues = JSUConvertOffsetToPtr(p_data, p_data->mAValOffset); } void* J2DAnmFullLoader_v15::load(void const* p_data) { @@ -334,7 +334,7 @@ void* J2DAnmFullLoader_v15::load(void const* p_data) { OS_REPORT("Unknown data block\n"); break; } - dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset); + dataPtr = (J3DAnmDataBlockHeader*)((intptr_t)dataPtr + dataPtr->mNextOffset); } return mpResource; } @@ -372,7 +372,7 @@ void J2DAnmFullLoader_v15::setResource(J2DAnmBase* p_anm, void const* p_data) { OS_REPORT("Unknown data block\n"); break; } - dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset); + dataPtr = (J3DAnmDataBlockHeader*)((intptr_t)dataPtr + dataPtr->mNextOffset); } } @@ -394,10 +394,10 @@ void J2DAnmFullLoader_v15::setAnmTransform(J2DAnmTransformFull* p_anm, p_anm->field_0x4 = p_data->field_0x8; p_anm->mFrame = 0; p_anm->mTableInfo = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mTableOffset); - p_anm->mScaleValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mScaleValOffset); - p_anm->mRotationValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mRotValOffset); - p_anm->mTranslateValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mTransValOffset); + JSUConvertOffsetToPtr(p_data, p_data->mTableOffset); + p_anm->mScaleValues = JSUConvertOffsetToPtr(p_data, p_data->mScaleValOffset); + p_anm->mRotationValues = JSUConvertOffsetToPtr(p_data, p_data->mRotValOffset); + p_anm->mTranslateValues = JSUConvertOffsetToPtr(p_data, p_data->mTransValOffset); } void J2DAnmFullLoader_v15::readAnmColor(J3DAnmColorFullData const* p_data) { @@ -413,15 +413,15 @@ void J2DAnmFullLoader_v15::setAnmColor(J2DAnmColorFull* p_anm, J3DAnmColorFullDa p_anm->mFrame = 0; p_anm->mUpdateMaterialNum = p_data->mUpdateMaterialNum; p_anm->mInfoTable = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mTableOffset); + JSUConvertOffsetToPtr(p_data, p_data->mTableOffset); p_anm->mRValues = JSUConvertOffsetToPtr(p_data, p_data->mRValuesOffset); p_anm->mGValues = JSUConvertOffsetToPtr(p_data, p_data->mGValuesOffset); p_anm->mBValues = JSUConvertOffsetToPtr(p_data, p_data->mBValuesOffset); p_anm->mAValues = JSUConvertOffsetToPtr(p_data, p_data->mAValuesOffset); p_anm->mUpdateMaterialID = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mUpdateMaterialIDOffset); + JSUConvertOffsetToPtr(p_data, p_data->mUpdateMaterialIDOffset); p_anm->field_0x20.setResource( - JSUConvertOffsetToPtr(p_data, (void*)p_data->mNameTabOffset)); + JSUConvertOffsetToPtr(p_data, p_data->mNameTabOffset)); } void J2DAnmFullLoader_v15::readAnmTexPattern(J3DAnmTexPatternFullData const* p_data) { @@ -439,12 +439,12 @@ void J2DAnmFullLoader_v15::setAnmTexPattern(J2DAnmTexPattern* p_anm, p_anm->mUpdateMaterialNum = p_data->field_0xc; p_anm->field_0x18 = p_data->field_0xe; p_anm->mAnmTable = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mTableOffset); - p_anm->mValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mValuesOffset); + JSUConvertOffsetToPtr(p_data, p_data->mTableOffset); + p_anm->mValues = JSUConvertOffsetToPtr(p_data, p_data->mValuesOffset); p_anm->mUpdateMaterialID = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mUpdateMaterialIDOffset); + JSUConvertOffsetToPtr(p_data, p_data->mUpdateMaterialIDOffset); p_anm->field_0x20.setResource( - JSUConvertOffsetToPtr(p_data, (void*)p_data->mNameTabOffset)); + JSUConvertOffsetToPtr(p_data, p_data->mNameTabOffset)); } void J2DAnmKeyLoader_v15::readAnmTevReg(J3DAnmTevRegKeyData const* p_data) { @@ -460,34 +460,34 @@ void J2DAnmKeyLoader_v15::setAnmTevReg(J2DAnmTevRegKey* p_anm, J3DAnmTevRegKeyDa p_anm->mFrame = 0; p_anm->mCRegUpdateMaterialNum = p_data->mCRegUpdateMaterialNum; p_anm->mAnmCRegKeyTable = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mCRegTableOffset); + JSUConvertOffsetToPtr(p_data, p_data->mCRegTableOffset); p_anm->mCRegUpdateMaterialID = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mCRegUpdateMaterialIDOffset); + JSUConvertOffsetToPtr(p_data, p_data->mCRegUpdateMaterialIDOffset); p_anm->mCRegNameTab.setResource( - JSUConvertOffsetToPtr(p_data, (void*)p_data->mCRegNameTabOffset)); + JSUConvertOffsetToPtr(p_data, p_data->mCRegNameTabOffset)); p_anm->mKRegUpdateMaterialNum = p_data->mKRegUpdateMaterialNum; p_anm->mAnmKRegKeyTable = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mKRegTableOffset); + JSUConvertOffsetToPtr(p_data, p_data->mKRegTableOffset); p_anm->mKRegUpdateMaterialID = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mKRegUpdateMaterialIDOffset); + JSUConvertOffsetToPtr(p_data, p_data->mKRegUpdateMaterialIDOffset); p_anm->mKRegNameTab.setResource( - JSUConvertOffsetToPtr(p_data, (void*)p_data->mKRegNameTabOffset)); + JSUConvertOffsetToPtr(p_data, p_data->mKRegNameTabOffset)); p_anm->field_0x14 = p_data->field_0x10; p_anm->field_0x16 = p_data->field_0x12; p_anm->field_0x18 = p_data->field_0x14; p_anm->field_0x1a = p_data->field_0x16; - p_anm->mCRValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mCRValuesOffset); - p_anm->mCGValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mCGValuesOffset); - p_anm->mCBValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mCBValuesOffset); - p_anm->mCAValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mCAValuesOffset); + p_anm->mCRValues = JSUConvertOffsetToPtr(p_data, p_data->mCRValuesOffset); + p_anm->mCGValues = JSUConvertOffsetToPtr(p_data, p_data->mCGValuesOffset); + p_anm->mCBValues = JSUConvertOffsetToPtr(p_data, p_data->mCBValuesOffset); + p_anm->mCAValues = JSUConvertOffsetToPtr(p_data, p_data->mCAValuesOffset); p_anm->field_0x1c = p_data->field_0x18; p_anm->field_0x1e = p_data->field_0x1a; p_anm->field_0x20 = p_data->field_0x1c; p_anm->field_0x22 = p_data->field_0x1e; - p_anm->mKRValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mKRValuesOffset); - p_anm->mKGValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mKGValuesOffset); - p_anm->mKBValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mKBValuesOffset); - p_anm->mKAValues = JSUConvertOffsetToPtr(p_data, (void*)p_data->mKAValuesOffset); + p_anm->mKRValues = JSUConvertOffsetToPtr(p_data, p_data->mKRValuesOffset); + p_anm->mKGValues = JSUConvertOffsetToPtr(p_data, p_data->mKGValuesOffset); + p_anm->mKBValues = JSUConvertOffsetToPtr(p_data, p_data->mKBValuesOffset); + p_anm->mKAValues = JSUConvertOffsetToPtr(p_data, p_data->mKAValuesOffset); } void J2DAnmFullLoader_v15::readAnmVisibility(J3DAnmVisibilityFullData const* p_data) { @@ -505,7 +505,7 @@ void J2DAnmFullLoader_v15::setAnmVisibility(J2DAnmVisibilityFull* p_anm, p_anm->field_0x10 = p_data->field_0xc; p_anm->field_0x12 = p_data->field_0xe; p_anm->mTable = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mTableOffset); + JSUConvertOffsetToPtr(p_data, p_data->mTableOffset); p_anm->mValues = JSUConvertOffsetToPtr(p_data, p_data->mValuesOffset); } @@ -524,17 +524,17 @@ void J2DAnmFullLoader_v15::setAnmVtxColor(J2DAnmVtxColorFull* p_anm, p_anm->mAnmTableNum[0] = p_data->mAnmTableNum[0]; p_anm->mAnmTableNum[1] = p_data->mAnmTableNum[1]; p_anm->mInfoTable[0] = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mTableOffsets[0]); + JSUConvertOffsetToPtr(p_data, p_data->mTableOffsets[0]); p_anm->mInfoTable[1] = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mTableOffsets[1]); + JSUConvertOffsetToPtr(p_data, p_data->mTableOffsets[1]); p_anm->mVtxColorIndexData[0] = JSUConvertOffsetToPtr( - p_data, (void*)p_data->mVtxColorIndexDataOffsets[0]); + p_data, p_data->mVtxColorIndexDataOffsets[0]); p_anm->mVtxColorIndexData[1] = JSUConvertOffsetToPtr( - p_data, (void*)p_data->mVtxColorIndexDataOffsets[1]); + p_data, p_data->mVtxColorIndexDataOffsets[1]); p_anm->mVtxColorIndexPointer[0] = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mVtxColorIndexPointerOffsets[0]); + JSUConvertOffsetToPtr(p_data, p_data->mVtxColorIndexPointerOffsets[0]); p_anm->mVtxColorIndexPointer[1] = - JSUConvertOffsetToPtr(p_data, (void*)p_data->mVtxColorIndexPointerOffsets[1]); + JSUConvertOffsetToPtr(p_data, p_data->mVtxColorIndexPointerOffsets[1]); p_anm->mRValues = JSUConvertOffsetToPtr(p_data, p_data->mRValuesOffset); p_anm->mGValues = JSUConvertOffsetToPtr(p_data, p_data->mGValuesOffset); p_anm->mBValues = JSUConvertOffsetToPtr(p_data, p_data->mBValuesOffset); diff --git a/src/JSystem/J2DGraph/J2DMaterialFactory.cpp b/src/JSystem/J2DGraph/J2DMaterialFactory.cpp index e7a3639844..1b22ce0243 100644 --- a/src/JSystem/J2DGraph/J2DMaterialFactory.cpp +++ b/src/JSystem/J2DGraph/J2DMaterialFactory.cpp @@ -10,33 +10,33 @@ J2DMaterialFactory::J2DMaterialFactory(J2DMaterialBlock const& param_0) { field_0x0 = param_0.field_0x8; - field_0x4 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0xc); - field_0x8 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x10); + field_0x4 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0xc); + field_0x8 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x10); if (param_0.field_0x18 && param_0.field_0x18 - param_0.field_0x14 > 4) { - field_0xc = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x18); + field_0xc = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x18); } else { field_0xc = NULL; } - field_0x30 = JSUConvertOffsetToPtr<_GXCullMode>(¶m_0, (void*)param_0.field_0x1c); - field_0x10 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x20); - field_0x14 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x24); - field_0x18 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x28); - field_0x1c = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x2c); - field_0x20 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x30); - field_0x24 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x34); - field_0x28 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x38); - field_0x2c = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x3c); - field_0x34 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x40); - field_0x38 = JSUConvertOffsetToPtr<_GXColorS10>(¶m_0, (void*)param_0.field_0x44); - field_0x3c = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x48); - field_0x40 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x4c); - field_0x44 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x50); - field_0x48 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x54); - field_0x4c = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x58); - field_0x50 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x5c); - field_0x54 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x60); - field_0x58 = JSUConvertOffsetToPtr(¶m_0, (void*)param_0.field_0x64); + field_0x30 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x1c); + field_0x10 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x20); + field_0x14 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x24); + field_0x18 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x28); + field_0x1c = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x2c); + field_0x20 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x30); + field_0x24 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x34); + field_0x28 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x38); + field_0x2c = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x3c); + field_0x34 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x40); + field_0x38 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x44); + field_0x3c = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x48); + field_0x40 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x4c); + field_0x44 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x50); + field_0x48 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x54); + field_0x4c = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x58); + field_0x50 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x5c); + field_0x54 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x60); + field_0x58 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x64); } u32 J2DMaterialFactory::countStages(int param_0) const { @@ -273,7 +273,7 @@ J2DGXColorS10 J2DMaterialFactory::newTevColor(int param_0, int param_1) const { J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; if (iVar2->field_0x92[param_1] != 0xffff) { - return field_0x38[iVar2->field_0x92[param_1]]; + return (GXColorS10) field_0x38[iVar2->field_0x92[param_1]]; } return rv; diff --git a/src/JSystem/J3DGraphAnimator/J3DCluster.cpp b/src/JSystem/J3DGraphAnimator/J3DCluster.cpp index 3f6398fda8..3e0daccddd 100644 --- a/src/JSystem/J3DGraphAnimator/J3DCluster.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DCluster.cpp @@ -6,6 +6,8 @@ #include "JSystem/JMath/JMATrigonometric.h" #include +#include "JSystem/JSupport/JSupport.h" + J3DDeformData::J3DDeformData() { mClusterNum = 0; mClusterKeyNum = 0; @@ -19,11 +21,22 @@ J3DDeformData::J3DDeformData() { mVtxNrm = NULL; mClusterName = NULL; mClusterKeyName = NULL; +#if TARGET_PC + mDeformers = NULL; +#endif } +#if TARGET_PC +#define DEFORMER(i) mDeformers[i] +#define CALC_OFFSET(ptr, type, base) JSUConvertOffsetToPtr(base, ptr) +#else +#define DEFORMER(i) mClusterPointer[i].getDeformer() +#define CALC_OFFSET(ptr, type, base) ((u16*)ptr) +#endif + void J3DDeformData::offAllFlag(u32 i_flag) { for (u16 i = 0; i < mClusterNum; i++) { - mClusterPointer[i].getDeformer()->offFlag(i_flag); + DEFORMER(i)->offFlag(i_flag); } } @@ -40,7 +53,7 @@ void J3DDeformData::deform(J3DVertexBuffer* buffer) { buffer->swapVtxNrmArrayPointer(); for (u16 i = 0; i < mClusterNum; i++) { - mClusterPointer[i].getDeformer()->deform(buffer, i); + DEFORMER(i)->deform(buffer, i); } DCStoreRangeNoSync(buffer->getVtxPosArrayPointer(0), @@ -55,7 +68,7 @@ void J3DDeformData::deform(J3DVertexBuffer* buffer) { void J3DDeformData::setAnm(J3DAnmCluster* anm) { for (u16 i = 0; i < mClusterNum; i++) { - mClusterPointer[i].getDeformer()->setAnmCluster(anm); + DEFORMER(i)->setAnmCluster(anm); } } @@ -92,7 +105,7 @@ void J3DDeformer::deform_VtxPosF32(J3DVertexBuffer* i_buffer, J3DCluster* i_clus int keyNum = i_cluster->mKeyNum; f32* vtxPosArray = (f32*)i_buffer->getVtxPosArrayPointer(0); f32* deformVtxPos = mDeformData->getVtxPos(); - u16* iVar9 = i_cluster->field_0x18; + u16* iVar9 = CALC_OFFSET(i_cluster->field_0x18, u16, mBlockBase); for (int i = 0; i < posNum; i++) { int index = iVar9[i] * 3; @@ -104,12 +117,12 @@ void J3DDeformer::deform_VtxPosF32(J3DVertexBuffer* i_buffer, J3DCluster* i_clus f32 local_58[2] = {1.0f, -1.0f}; for (u16 i = 0; i < posNum; i++) { - int index = i_cluster->field_0x18[i] * 3; + int index = CALC_OFFSET(i_cluster->field_0x18, u16, mBlockBase)[i] * 3; for (u16 j = 0; j < keyNum; j++) { int uVar8; int uVar7; key = &i_key[j]; - uVar8 = uVar7 = ((u16*)key->field_0x4)[i]; + uVar8 = uVar7 = CALC_OFFSET(key->field_0x4, u16, mBlockBase)[i]; uVar7 &= ~0xE000; uVar7 *= 3; f32 deform0 = deformVtxPos[uVar7]; @@ -141,7 +154,7 @@ void J3DDeformer::deform_VtxNrmF32(J3DVertexBuffer* i_buffer, J3DCluster* i_clus iVar13[index + 2] = 0.0f; for (u16 j = 0; j < keyNum; j++) { J3DClusterKey* key = &i_key[j]; - int uVar3 = ((u16*)key->field_0x8)[i]; + int uVar3 = CALC_OFFSET(key->field_0x8, u16, mBlockBase)[i]; int uVar4 = uVar3; uVar3 &= ~0xE000; uVar3 *= 3; @@ -169,14 +182,14 @@ void J3DDeformer::deform_VtxNrmF32(J3DVertexBuffer* i_buffer, J3DCluster* i_clus } for (u16 i = 0; i < uVar2; i++) { - J3DClusterVertex* clusterVtx = &i_cluster->mClusterVertex[i]; + J3DClusterVertex* clusterVtx = &CALC_OFFSET(i_cluster->mClusterVertex, J3DClusterVertex, mArrayBase)[i]; Vec vec; vec.x = 0.0f; vec.y = 0.0f; vec.z = 0.0f; f32 scale = 1.0f / clusterVtx->mNum; for (u16 j = 0; j < clusterVtx->mNum; j++) { - int index = clusterVtx->field_0x4[j] * 3; + int index = CALC_OFFSET(clusterVtx->field_0x4, u16, mBlockBase)[j] * 3; vec.x += scale * iVar13[index]; vec.y += scale * iVar13[index + 1]; vec.z += scale * iVar13[index + 2]; @@ -184,12 +197,12 @@ void J3DDeformer::deform_VtxNrmF32(J3DVertexBuffer* i_buffer, J3DCluster* i_clus normalize((f32*)&vec); for (u16 j = 0; j < clusterVtx->mNum; j++) { - u16 tmp = clusterVtx->field_0x8[j]; + u16 tmp = CALC_OFFSET(clusterVtx->field_0x8, u16, mBlockBase)[j]; if (tmp == 0xffff) { continue; } int index = tmp * 3; - u16 iVar4 = clusterVtx->field_0x4[j]; + u16 iVar4 = CALC_OFFSET(clusterVtx->field_0x4, u16, mBlockBase)[j]; int index2 = iVar4 * 3; f32 dot = vec.x * iVar13[index2] + vec.y * iVar13[index2 + 1] diff --git a/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp b/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp index d705c1c59a..ad73e64745 100644 --- a/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp @@ -239,7 +239,7 @@ int J3DSkinDeform::initMtxIndexArray(J3DModelData* pModelData) { int nrm_num = -1; int tex_num = -1; int r23 = 0; - for (GXVtxDescList* vtxDesc = pModelData->getShapeNodePointer(i)->getVtxDesc(); vtxDesc->attr != 0xff; vtxDesc++) { + for (BE(GXVtxDescList)* vtxDesc = pModelData->getShapeNodePointer(i)->getVtxDesc(); vtxDesc->attr != 0xff; vtxDesc++) { switch (vtxDesc->attr) { case GX_VA_PNMTXIDX: pnmtx_num = r23; @@ -356,7 +356,7 @@ void J3DSkinDeform::changeFastSkinDL(J3DModelData* pModelData) { int vtxSize = 0; J3DShape* pShapeNode = pModelData->getShapeNodePointer(i); - for (GXVtxDescList* vtxDesc = pShapeNode->getVtxDesc(); vtxDesc->attr != GX_VA_NULL; vtxDesc++) { + for (BE(GXVtxDescList)* vtxDesc = pShapeNode->getVtxDesc(); vtxDesc->attr != GX_VA_NULL; vtxDesc++) { if (vtxDesc->attr == GX_VA_PNMTXIDX) { pnmtxIdxOffs = vtxSize; } @@ -402,8 +402,8 @@ void J3DSkinDeform::changeFastSkinDL(J3DModelData* pModelData) { for (u16 i = 0; i < pModelData->getShapeNum(); i++) { J3DShape* shape = pModelData->getShapeNodePointer(i); - GXVtxDescList* desc = shape->getVtxDesc(); - GXVtxDescList* descDst = desc; + BE(GXVtxDescList)* desc = shape->getVtxDesc(); + BE(GXVtxDescList)* descDst = desc; for (; desc->attr != GX_VA_NULL; desc++) { if (desc->attr != GX_VA_PNMTXIDX) { descDst->attr = desc->attr; @@ -687,7 +687,11 @@ void J3DVtxColorCalc::calc(J3DVertexBuffer* buffer) { mpVtxColor->getColor(0, i, &color); J3DAnmVtxColorIndexData* r28 = mpVtxColor->getAnmVtxColorIndexData(0, i); for (u32 j = 0; j < r28->mNum; j++) { +#if TARGET_PC + colorArray[mpVtxColor->offsetColorIndexAddress(0, r28->mpData)[j]] = color; +#else colorArray[((u16*)r28->mpData)[j]] = color; +#endif } } DCStoreRange(colorArray, buffer->getVertexData()->getColNum() * 4); diff --git a/src/JSystem/J3DGraphBase/J3DShape.cpp b/src/JSystem/J3DGraphBase/J3DShape.cpp index 91dd5b8ea0..57882b57eb 100644 --- a/src/JSystem/J3DGraphBase/J3DShape.cpp +++ b/src/JSystem/J3DGraphBase/J3DShape.cpp @@ -43,7 +43,7 @@ void J3DShape::addTexMtxIndexInDL(GXAttr attr, u32 valueBase) { s32 stride = 0; bool found = false; - for (GXVtxDescList* vtxDesc = getVtxDesc(); vtxDesc->attr != GX_VA_NULL; vtxDesc++) { + for (BE(GXVtxDescList)* vtxDesc = getVtxDesc(); vtxDesc->attr != GX_VA_NULL; vtxDesc++) { if (vtxDesc->attr == GX_VA_PNMTXIDX) pnmtxidxOffs = stride; @@ -69,7 +69,7 @@ void J3DShape::addTexMtxIndexInVcd(GXAttr attr) { s32 attrOffs = -1; s32 stride = 0; - GXVtxDescList* vtxDesc = getVtxDesc(); + BE(GXVtxDescList)* vtxDesc = getVtxDesc(); s32 attrCount = 0; for (; vtxDesc->attr != GX_VA_NULL; vtxDesc++) { @@ -82,11 +82,11 @@ void J3DShape::addTexMtxIndexInVcd(GXAttr attr) { if (attrIdx == -1) return; - GXVtxDescList* newVtxDesc = new GXVtxDescList[attrCount + 2]; + BE(GXVtxDescList)* newVtxDesc = new BE(GXVtxDescList)[attrCount + 2]; bool inserted = false; vtxDesc = getVtxDesc(); - GXVtxDescList* dst = newVtxDesc; + BE(GXVtxDescList)* dst = newVtxDesc; for (; vtxDesc->attr != GX_VA_NULL; vtxDesc++) { if ((attr < vtxDesc->attr) && !inserted) { dst->attr = attr; @@ -154,7 +154,7 @@ bool J3DShape::isSameVcdVatCmd(J3DShape* other) { } void J3DShape::makeVtxArrayCmd() { - GXVtxAttrFmtList* vtxAttr = mVertexData->getVtxAttrFmtList(); + BE(GXVtxAttrFmtList)* vtxAttr = mVertexData->getVtxAttrFmtList(); u8 stride[12]; void* array[12]; @@ -210,7 +210,7 @@ void J3DShape::makeVtxArrayCmd() { } } - GXVtxDescList* vtxDesc = mVtxDesc; + BE(GXVtxDescList)* vtxDesc = mVtxDesc; mHasPNMTXIdx = false; for (; vtxDesc->attr != GX_VA_NULL; vtxDesc++) { if (vtxDesc->attr == GX_VA_NBT && vtxDesc->type != GX_NONE) { @@ -237,9 +237,11 @@ void J3DShape::makeVcdVatCmd() { GDLObj gdl_obj; GDInitGDLObj(&gdl_obj, mVcdVatCmd, kVcdVatDLSize); GDSetCurrent(&gdl_obj); - GDSetVtxDescv(mVtxDesc); + puts("GDSetVtxDescv is stubbed out due to BE issues"); + // GDSetVtxDescv(mVtxDesc); makeVtxArrayCmd(); - J3DGDSetVtxAttrFmtv(GX_VTXFMT0, mVertexData->getVtxAttrFmtList(), mHasNBT); + puts("J3DGDSetVtxAttrFmtv is stubbed out due to BE issues"); + // J3DGDSetVtxAttrFmtv(GX_VTXFMT0, mVertexData->getVtxAttrFmtList(), mHasNBT); GDPadCurr32(); GDFlushCurrToMem(); GDSetCurrent(NULL); diff --git a/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp index a48f9ab928..03d8404755 100644 --- a/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp +++ b/src/JSystem/J3DGraphBase/J3DShapeMtx.cpp @@ -369,7 +369,7 @@ void J3DShapeMtxConcatView::loadNrmMtx(int param_0, u16 param_1, MtxP param_2) c J3DFifoLoadNrmMtxImm(param_2, 0); } else { Mtx33 mtx; - Vec* scale = j3dSys.getNBTScale(); + BE(Vec)* scale = j3dSys.getNBTScale(); J3DPSMtx33CopyFrom34(param_2, mtx); J3DScaleNrmMtx33(mtx, *scale); J3DFifoLoadNrmMtxImm3x3(mtx, 0); @@ -384,7 +384,7 @@ void J3DShapeMtxConcatView::loadNrmMtx(int param_0, u16 param_1, MtxP param_2) c if (!sNBTFlag) { J3DFifoLoadNrmMtxImm3x3(mtx, 0); } else { - Vec* scale = j3dSys.getNBTScale(); + BE(Vec)* scale = j3dSys.getNBTScale(); J3DScaleNrmMtx33(mtx, *scale); J3DFifoLoadNrmMtxImm3x3(mtx, 0); } @@ -463,7 +463,7 @@ void J3DShapeMtxMultiConcatView::loadNrmMtx(int param_0, u16 param_1, MtxP param if (!sNBTFlag) { J3DFifoLoadNrmMtxImm(param_2, param_0 * 3); } else { - Vec* nbt_scale = j3dSys.getNBTScale(); + BE(Vec)* nbt_scale = j3dSys.getNBTScale(); J3DPSMtx33CopyFrom34(param_2, mtx1); J3DScaleNrmMtx33(mtx1, *nbt_scale); J3DFifoLoadNrmMtxImm3x3(mtx1, 0); @@ -476,7 +476,7 @@ void J3DShapeMtxMultiConcatView::loadNrmMtx(int param_0, u16 param_1, MtxP param if (!sNBTFlag) { J3DFifoLoadNrmMtxImm3x3(mtx2, param_0 * 3); } else { - Vec* nbt_scale = j3dSys.getNBTScale(); + BE(Vec)* nbt_scale = j3dSys.getNBTScale(); J3DScaleNrmMtx33(mtx2, *nbt_scale); J3DFifoLoadNrmMtxImm3x3(mtx2, param_0 * 3); } @@ -507,7 +507,7 @@ void J3DShapeMtxBBoardConcatView::load() const { if (!sNBTFlag) { J3DFifoLoadNrmMtxImm(mtx, 0); } else { - Vec* nbt_scale = j3dSys.getNBTScale(); + BE(Vec)* nbt_scale = j3dSys.getNBTScale(); J3DScaleNrmMtx(mtx, *nbt_scale); J3DFifoLoadNrmMtxImm(mtx, 0); } @@ -531,7 +531,7 @@ void J3DShapeMtxYBBoardConcatView::load() const { if (!sNBTFlag) { J3DFifoLoadNrmMtxImm(mtx1, 0); } else { - Vec* nbt_scale = j3dSys.getNBTScale(); + BE(Vec)* nbt_scale = j3dSys.getNBTScale(); J3DScaleNrmMtx(mtx1, *nbt_scale); J3DFifoLoadNrmMtxImm(mtx1, 0); } @@ -540,7 +540,7 @@ void J3DShapeMtxYBBoardConcatView::load() const { if (!sNBTFlag) { J3DFifoLoadNrmMtxImm3x3(mtx2, 0); } else { - Vec* nbt_scale = j3dSys.getNBTScale(); + BE(Vec)* nbt_scale = j3dSys.getNBTScale(); J3DScaleNrmMtx33(mtx2, *nbt_scale); J3DFifoLoadNrmMtxImm3x3(mtx2, 0); } diff --git a/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp b/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp index daef72afec..a1170e64c0 100644 --- a/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp +++ b/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp @@ -377,17 +377,22 @@ void J3DAnmFullLoader_v15::setAnmVtxColor(J3DAnmVtxColorFull* dst, data, data->mVtxColorIndexDataOffsets[0]); dst->mAnmVtxColorIndexData[1] = JSUConvertOffsetToPtr( data, data->mVtxColorIndexDataOffsets[1]); - void* indexPtr0 = + u16* indexPtr0 = JSUConvertOffsetToPtr(data, data->mVtxColorIndexPointerOffsets[0]); - void* indexPtr1 = + u16* indexPtr1 = JSUConvertOffsetToPtr(data, data->mVtxColorIndexPointerOffsets[1]); +#if TARGET_PC + dst->colorAddressBase[0] = indexPtr0; + dst->colorAddressBase[1] = indexPtr1; +#else for (s32 i = 0; i < dst->mAnmTableNum[0]; i++) dst->mAnmVtxColorIndexData[0][i].mpData = (void*)((s32)indexPtr0 + (s32)dst->mAnmVtxColorIndexData[0][i].mpData * 2); for (s32 i = 0; i < dst->mAnmTableNum[1]; i++) dst->mAnmVtxColorIndexData[1][i].mpData = (void*)((s32)indexPtr1 + (s32)dst->mAnmVtxColorIndexData[1][i].mpData * 2); +#endif dst->mColorR = JSUConvertOffsetToPtr(data, data->mRValuesOffset); dst->mColorG = JSUConvertOffsetToPtr(data, data->mGValuesOffset); @@ -660,15 +665,20 @@ void J3DAnmKeyLoader_v15::setAnmVtxColor(J3DAnmVtxColorKey* dst, data, data->mVtxColoIndexDataOffset[0]); dst->mAnmVtxColorIndexData[1] = JSUConvertOffsetToPtr( data, data->mVtxColoIndexDataOffset[1]); - void* indexPtr0 = JSUConvertOffsetToPtr(data, data->mVtxColoIndexPointerOffset[0]); - void* indexPtr1 = JSUConvertOffsetToPtr(data, data->mVtxColoIndexPointerOffset[1]); + u16* indexPtr0 = JSUConvertOffsetToPtr(data, data->mVtxColoIndexPointerOffset[0]); + u16* indexPtr1 = JSUConvertOffsetToPtr(data, data->mVtxColoIndexPointerOffset[1]); +#if TARGET_PC + dst->colorAddressBase[0] = indexPtr0; + dst->colorAddressBase[1] = indexPtr1; +#else for (s32 i = 0; i < dst->mAnmTableNum[0]; i++) dst->mAnmVtxColorIndexData[0][i].mpData = (void*)((s32)indexPtr0 + (s32)dst->mAnmVtxColorIndexData[0][i].mpData * 2); for (s32 i = 0; i < dst->mAnmTableNum[1]; i++) dst->mAnmVtxColorIndexData[1][i].mpData = (void*)((s32)indexPtr1 + (s32)dst->mAnmVtxColorIndexData[1][i].mpData * 2); +#endif dst->mColorR = JSUConvertOffsetToPtr(data, data->mRValOffset); dst->mColorG = JSUConvertOffsetToPtr(data, data->mGValOffset); diff --git a/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp b/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp index 7d868d8730..42fa13bc5a 100644 --- a/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp +++ b/src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp @@ -72,7 +72,7 @@ void J3DClusterLoader_v15::readCluster(const J3DClusterBlock* block) { mpDeformData->mVtxPos = JSUConvertOffsetToPtr(block, block->mVtxPos); mpDeformData->mVtxNrm = JSUConvertOffsetToPtr(block, block->mVtxNrm); - void* clusterPointer = block->mClusterPointer; + intptr_t clusterPointer = (intptr_t) block->mClusterPointer; int clusterKeyPointerSize = (intptr_t)block->mClusterKeyPointer - (intptr_t)block->mClusterPointer; int clusterVertexPointerSize = (intptr_t)block->mClusterVertex - (intptr_t)block->mClusterPointer; int vtxPosSize = (intptr_t)block->mVtxPos - (intptr_t)block->mClusterPointer; @@ -82,12 +82,18 @@ void J3DClusterLoader_v15::readCluster(const J3DClusterBlock* block) { mpDeformData->mClusterKeyPointer = (J3DClusterKey*)&arr[clusterKeyPointerSize]; mpDeformData->mClusterVertex = (J3DClusterVertex*)&arr[clusterVertexPointerSize]; +#if TARGET_PC + mpDeformData->mDeformers = new J3DDeformer*[mpDeformData->getClusterNum()]; +#endif + for (int i = 0; i < mpDeformData->getClusterNum(); i++) { J3DCluster* cluster = &mpDeformData->mClusterPointer[i]; +#if !TARGET_PC cluster->mClusterKey = JSUConvertOffsetToPtr(arr - (intptr_t)clusterPointer, cluster->mClusterKey); cluster->field_0x18 = JSUConvertOffsetToPtr(block, cluster->field_0x18); cluster->mClusterVertex = JSUConvertOffsetToPtr(arr - (intptr_t)clusterPointer, cluster->mClusterVertex); +#endif J3DDeformer* deformer = new J3DDeformer(mpDeformData); if (cluster->field_0x14 != 0) { deformer->field_0xc = new f32[cluster->field_0x14 * 3]; @@ -96,9 +102,16 @@ void J3DClusterLoader_v15::readCluster(const J3DClusterBlock* block) { } deformer->mFlags = cluster->mFlags; deformer->field_0x8 = new f32[cluster->mKeyNum]; +#if TARGET_PC + deformer->mArrayBase = arr - clusterPointer; + deformer->mBlockBase = block; + mpDeformData->mDeformers[i] = deformer; +#else cluster->setDeformer(deformer); +#endif } +#if !TARGET_PC for (int i = 0; i < mpDeformData->getClusterKeyNum(); i++) { J3DClusterKey* clusterKey = &mpDeformData->mClusterKeyPointer[i]; clusterKey->field_0x4 = JSUConvertOffsetToPtr(block, clusterKey->field_0x4); @@ -110,6 +123,7 @@ void J3DClusterLoader_v15::readCluster(const J3DClusterBlock* block) { clusterVertex->field_0x4 = JSUConvertOffsetToPtr(block, clusterVertex->field_0x4); clusterVertex->field_0x8 = JSUConvertOffsetToPtr(block, clusterVertex->field_0x8); } +#endif DCStoreRange(arr, vtxPosSize); } diff --git a/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp b/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp index 93970e3c4f..b700190099 100644 --- a/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp +++ b/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp @@ -1,6 +1,9 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep #include "JSystem/J3DGraphLoader/J3DMaterialFactory.h" + +#include + #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "JSystem/JMath/JMath.h" #include "JSystem/JSupport/JSupport.h" @@ -9,13 +12,13 @@ J3DMaterialFactory::J3DMaterialFactory(J3DMaterialBlock const& i_block) { mMaterialNum = i_block.mMaterialNum; mpMaterialInitData = JSUConvertOffsetToPtr(&i_block, i_block.mpMaterialInitData); - mpMaterialID = JSUConvertOffsetToPtr(&i_block, i_block.mpMaterialID); + mpMaterialID = JSUConvertOffsetToPtr(&i_block, i_block.mpMaterialID); if (i_block.mpIndInitData != NULL && (uintptr_t)i_block.mpIndInitData - (uintptr_t)i_block.mpNameTable > 4) { mpIndInitData = JSUConvertOffsetToPtr(&i_block, i_block.mpIndInitData); } else { mpIndInitData = NULL; } - mpCullMode = JSUConvertOffsetToPtr(&i_block, i_block.mpCullMode); + mpCullMode = JSUConvertOffsetToPtr(&i_block, i_block.mpCullMode); mpMatColor = JSUConvertOffsetToPtr(&i_block, i_block.mpMatColor); mpColorChanNum = JSUConvertOffsetToPtr(&i_block, i_block.mpColorChanNum); mpColorChanInfo = JSUConvertOffsetToPtr(&i_block, i_block.mpColorChanInfo); @@ -26,9 +29,9 @@ J3DMaterialFactory::J3DMaterialFactory(J3DMaterialBlock const& i_block) { mpTexCoord2Info = JSUConvertOffsetToPtr(&i_block, i_block.mpTexCoord2Info); mpTexMtxInfo = JSUConvertOffsetToPtr(&i_block, i_block.mpTexMtxInfo); field_0x34 = JSUConvertOffsetToPtr(&i_block, i_block.field_0x44); - mpTexNo = JSUConvertOffsetToPtr(&i_block, i_block.mpTexNo); + mpTexNo = JSUConvertOffsetToPtr(&i_block, i_block.mpTexNo); mpTevOrderInfo = JSUConvertOffsetToPtr(&i_block, i_block.mpTevOrderInfo); - mpTevColor = JSUConvertOffsetToPtr(&i_block, i_block.mpTevColor); + mpTevColor = JSUConvertOffsetToPtr(&i_block, i_block.mpTevColor); mpTevKColor = JSUConvertOffsetToPtr(&i_block, i_block.mpTevKColor); mpTevStageNum = JSUConvertOffsetToPtr(&i_block, i_block.mpTevStageNum); mpTevStageInfo = JSUConvertOffsetToPtr(&i_block, i_block.mpTevStageInfo); @@ -471,7 +474,7 @@ J3DGXColor J3DMaterialFactory::newMatColor(int i_idx, int i_no) const { #endif J3DMaterialInitData* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mMatColorIdx[i_no] != 0xffff) { - return mpMatColor[mtl_init_data->mMatColorIdx[i_no]]; + return (GXColor) mpMatColor[mtl_init_data->mMatColorIdx[i_no]]; } else { return dflt; } @@ -504,7 +507,7 @@ J3DGXColor J3DMaterialFactory::newAmbColor(int i_idx, int i_no) const { #endif J3DMaterialInitData* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mAmbColorIdx[i_no] != 0xffff) { - return mpAmbColor[mtl_init_data->mAmbColorIdx[i_no]]; + return (GXColor) mpAmbColor[mtl_init_data->mAmbColorIdx[i_no]]; } else { return dflt; } @@ -533,7 +536,18 @@ J3DTexMtx* J3DMaterialFactory::newTexMtx(int i_idx, int i_no) const { J3DTexMtx* tex_mtx = NULL; J3DMaterialInitData* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mTexMtxIdx[i_no] != 0xffff) { +#if TARGET_LITTLE_ENDIAN + auto tex_mtx_info = mpTexMtxInfo[mtl_init_data->mTexMtxIdx[i_no]]; + be_swap(tex_mtx_info.mCenter); + be_swap(tex_mtx_info.mSRT.mScaleX); + be_swap(tex_mtx_info.mSRT.mScaleY); + be_swap(tex_mtx_info.mSRT.mRotation); + be_swap(tex_mtx_info.mSRT.mTranslationX); + be_swap(tex_mtx_info.mSRT.mTranslationY); + tex_mtx = new J3DTexMtx(tex_mtx_info); +#else tex_mtx = new J3DTexMtx(mpTexMtxInfo[mtl_init_data->mTexMtxIdx[i_no]]); +#endif } return tex_mtx; } @@ -571,7 +585,7 @@ J3DGXColorS10 J3DMaterialFactory::newTevColor(int i_idx, int i_no) const { J3DGXColorS10 dflt = _dflt; J3DMaterialInitData* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mTevColorIdx[i_no] != 0xffff) { - return mpTevColor[mtl_init_data->mTevColorIdx[i_no]]; + return (GXColorS10) mpTevColor[mtl_init_data->mTevColorIdx[i_no]]; } else { return dflt; } @@ -585,7 +599,7 @@ J3DGXColor J3DMaterialFactory::newTevKColor(int i_idx, int i_no) const { #endif J3DMaterialInitData* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mTevKColorIdx[i_no] != 0xffff) { - return mpTevKColor[mtl_init_data->mTevKColorIdx[i_no]]; + return (GXColor) mpTevKColor[mtl_init_data->mTevKColorIdx[i_no]]; } else { return dflt; } diff --git a/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp b/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp index 68622ff346..8ba4352bcc 100644 --- a/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp +++ b/src/JSystem/J3DGraphLoader/J3DModelLoader.cpp @@ -281,7 +281,7 @@ void J3DModelLoader::readInformation(J3DModelInfoBlock const* i_block, u32 i_fla mpModelData->setHierarchy(JSUConvertOffsetToPtr(i_block, i_block->mpHierarchy)); } -static _GXCompType getFmtType(_GXVtxAttrFmtList* i_fmtList, _GXAttr i_attr) { +static _GXCompType getFmtType(BE(_GXVtxAttrFmtList)* i_fmtList, _GXAttr i_attr) { for (; i_fmtList->attr != GX_VA_NULL; i_fmtList++) { if (i_fmtList->attr == i_attr) { return i_fmtList->type; @@ -294,7 +294,7 @@ void J3DModelLoader::readVertex(J3DVertexBlock const* i_block) { J3D_ASSERT_NULLPTR(577, i_block); J3DVertexData& vertex_data = mpModelData->getVertexData(); vertex_data.mVtxAttrFmtList = - JSUConvertOffsetToPtr(i_block, i_block->mpVtxAttrFmtList); + JSUConvertOffsetToPtr(i_block, i_block->mpVtxAttrFmtList); vertex_data.mVtxPosArray = JSUConvertOffsetToPtr(i_block, i_block->mpVtxPosArray); vertex_data.mVtxNrmArray = JSUConvertOffsetToPtr(i_block, i_block->mpVtxNrmArray); vertex_data.mVtxNBTArray = JSUConvertOffsetToPtr(i_block, i_block->mpVtxNBTArray); @@ -517,7 +517,7 @@ void J3DModelLoader::readShape(J3DShapeBlock const* i_block, u32 i_flags) { J3D_ASSERT_ALLOCMEM(1034, shape_table->mShapeNodePointer); factory.allocVcdVatCmdBuffer(shape_table->mShapeNum); J3DModelHierarchy const* hierarchy_entry = mpModelData->getHierarchy(); - GXVtxDescList* vtx_desc_list = NULL; + BE(GXVtxDescList)* vtx_desc_list = NULL; for (; hierarchy_entry->mType != 0; hierarchy_entry++) { if (hierarchy_entry->mType == 0x12) { shape_table->mShapeNodePointer[hierarchy_entry->mValue] = diff --git a/src/JSystem/J3DGraphLoader/J3DShapeFactory.cpp b/src/JSystem/J3DGraphLoader/J3DShapeFactory.cpp index a37319a74c..d69c0629cf 100644 --- a/src/JSystem/J3DGraphLoader/J3DShapeFactory.cpp +++ b/src/JSystem/J3DGraphLoader/J3DShapeFactory.cpp @@ -10,16 +10,16 @@ J3DShapeFactory::J3DShapeFactory(J3DShapeBlock const& block) { mShapeInitData = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpShapeInitData); - mIndexTable = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpIndexTable); - mVtxDescList = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpVtxDescList); - mMtxTable = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpMtxTable); + mIndexTable = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpIndexTable); + mVtxDescList = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpVtxDescList); + mMtxTable = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpMtxTable); mDisplayListData = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpDisplayListData); mMtxInitData = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpMtxInitData); mDrawInitData = JSUConvertOffsetToPtr(&block, (uintptr_t)block.mpDrawInitData); mVcdVatCmdBuffer = NULL; } -J3DShape* J3DShapeFactory::create(int no, u32 flag, GXVtxDescList* vtxDesc) { +J3DShape* J3DShapeFactory::create(int no, u32 flag, BE(GXVtxDescList)* vtxDesc) { J3DShape* shape = new J3DShape; J3D_ASSERT_ALLOCMEM(67, shape); shape->mMtxGroupNum = getMtxGroupNum(no); diff --git a/src/dusk/endian.cpp b/src/dusk/endian.cpp new file mode 100644 index 0000000000..43c422f49f --- /dev/null +++ b/src/dusk/endian.cpp @@ -0,0 +1,23 @@ +#include +#include "dusk/endian.h" + +template <> +GXColorS10 BE::swap(GXColorS10 val) { + return { + be16s(val.r), + be16s(val.g), + be16s(val.b), + be16s(val.a), + }; +} + +#define IMPL_ENUM(type) \ + template <> \ + type BE::swap(type val) { \ + return static_cast(be32(val)); \ + } + +IMPL_ENUM(GXCullMode); +IMPL_ENUM(GXAttr); +IMPL_ENUM(GXAttrType); +IMPL_ENUM(GXCompType);