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

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