mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-07-07 20:11:46 -04:00
Fix endianness & 64-bit in 3D asset loading code
Combination of plumbing BE(T) through everything, making BE<T> have template specializations, and inverting at load time where more practical.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
|
||||
/**
|
||||
|
||||
@@ -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; }
|
||||
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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<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) {
|
||||
@@ -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<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);
|
||||
|
||||
@@ -10,33 +10,33 @@
|
||||
|
||||
J2DMaterialFactory::J2DMaterialFactory(J2DMaterialBlock const& param_0) {
|
||||
field_0x0 = param_0.field_0x8;
|
||||
field_0x4 = JSUConvertOffsetToPtr<J2DMaterialInitData>(¶m_0, (void*)param_0.field_0xc);
|
||||
field_0x8 = JSUConvertOffsetToPtr<u16>(¶m_0, (void*)param_0.field_0x10);
|
||||
field_0x4 = JSUConvertOffsetToPtr<J2DMaterialInitData>(¶m_0, param_0.field_0xc);
|
||||
field_0x8 = JSUConvertOffsetToPtr<u16>(¶m_0, param_0.field_0x10);
|
||||
if (param_0.field_0x18 && param_0.field_0x18 - param_0.field_0x14 > 4) {
|
||||
field_0xc = JSUConvertOffsetToPtr<J2DIndInitData>(¶m_0, (void*)param_0.field_0x18);
|
||||
field_0xc = JSUConvertOffsetToPtr<J2DIndInitData>(¶m_0, param_0.field_0x18);
|
||||
}
|
||||
else {
|
||||
field_0xc = NULL;
|
||||
}
|
||||
field_0x30 = JSUConvertOffsetToPtr<_GXCullMode>(¶m_0, (void*)param_0.field_0x1c);
|
||||
field_0x10 = JSUConvertOffsetToPtr<GXColor>(¶m_0, (void*)param_0.field_0x20);
|
||||
field_0x14 = JSUConvertOffsetToPtr<u8>(¶m_0, (void*)param_0.field_0x24);
|
||||
field_0x18 = JSUConvertOffsetToPtr<J2DColorChanInfo>(¶m_0, (void*)param_0.field_0x28);
|
||||
field_0x1c = JSUConvertOffsetToPtr<u8>(¶m_0, (void*)param_0.field_0x2c);
|
||||
field_0x20 = JSUConvertOffsetToPtr<J2DTexCoordInfo>(¶m_0, (void*)param_0.field_0x30);
|
||||
field_0x24 = JSUConvertOffsetToPtr<J2DTexMtxInfo>(¶m_0, (void*)param_0.field_0x34);
|
||||
field_0x28 = JSUConvertOffsetToPtr<u16>(¶m_0, (void*)param_0.field_0x38);
|
||||
field_0x2c = JSUConvertOffsetToPtr<u16>(¶m_0, (void*)param_0.field_0x3c);
|
||||
field_0x34 = JSUConvertOffsetToPtr<J2DTevOrderInfo>(¶m_0, (void*)param_0.field_0x40);
|
||||
field_0x38 = JSUConvertOffsetToPtr<_GXColorS10>(¶m_0, (void*)param_0.field_0x44);
|
||||
field_0x3c = JSUConvertOffsetToPtr<GXColor>(¶m_0, (void*)param_0.field_0x48);
|
||||
field_0x40 = JSUConvertOffsetToPtr<u8>(¶m_0, (void*)param_0.field_0x4c);
|
||||
field_0x44 = JSUConvertOffsetToPtr<J2DTevStageInfo>(¶m_0, (void*)param_0.field_0x50);
|
||||
field_0x48 = JSUConvertOffsetToPtr<J2DTevSwapModeInfo>(¶m_0, (void*)param_0.field_0x54);
|
||||
field_0x4c = JSUConvertOffsetToPtr<J2DTevSwapModeTableInfo>(¶m_0, (void*)param_0.field_0x58);
|
||||
field_0x50 = JSUConvertOffsetToPtr<J2DAlphaCompInfo>(¶m_0, (void*)param_0.field_0x5c);
|
||||
field_0x54 = JSUConvertOffsetToPtr<J2DBlendInfo>(¶m_0, (void*)param_0.field_0x60);
|
||||
field_0x58 = JSUConvertOffsetToPtr<u8>(¶m_0, (void*)param_0.field_0x64);
|
||||
field_0x30 = JSUConvertOffsetToPtr<BE(GXCullMode)>(¶m_0, param_0.field_0x1c);
|
||||
field_0x10 = JSUConvertOffsetToPtr<GXColor>(¶m_0, param_0.field_0x20);
|
||||
field_0x14 = JSUConvertOffsetToPtr<u8>(¶m_0, param_0.field_0x24);
|
||||
field_0x18 = JSUConvertOffsetToPtr<J2DColorChanInfo>(¶m_0, param_0.field_0x28);
|
||||
field_0x1c = JSUConvertOffsetToPtr<u8>(¶m_0, param_0.field_0x2c);
|
||||
field_0x20 = JSUConvertOffsetToPtr<J2DTexCoordInfo>(¶m_0, param_0.field_0x30);
|
||||
field_0x24 = JSUConvertOffsetToPtr<J2DTexMtxInfo>(¶m_0, param_0.field_0x34);
|
||||
field_0x28 = JSUConvertOffsetToPtr<u16>(¶m_0, param_0.field_0x38);
|
||||
field_0x2c = JSUConvertOffsetToPtr<u16>(¶m_0, param_0.field_0x3c);
|
||||
field_0x34 = JSUConvertOffsetToPtr<J2DTevOrderInfo>(¶m_0, param_0.field_0x40);
|
||||
field_0x38 = JSUConvertOffsetToPtr<BE(GXColorS10)>(¶m_0, param_0.field_0x44);
|
||||
field_0x3c = JSUConvertOffsetToPtr<GXColor>(¶m_0, param_0.field_0x48);
|
||||
field_0x40 = JSUConvertOffsetToPtr<u8>(¶m_0, param_0.field_0x4c);
|
||||
field_0x44 = JSUConvertOffsetToPtr<J2DTevStageInfo>(¶m_0, param_0.field_0x50);
|
||||
field_0x48 = JSUConvertOffsetToPtr<J2DTevSwapModeInfo>(¶m_0, param_0.field_0x54);
|
||||
field_0x4c = JSUConvertOffsetToPtr<J2DTevSwapModeTableInfo>(¶m_0, param_0.field_0x58);
|
||||
field_0x50 = JSUConvertOffsetToPtr<J2DAlphaCompInfo>(¶m_0, param_0.field_0x5c);
|
||||
field_0x54 = JSUConvertOffsetToPtr<J2DBlendInfo>(¶m_0, param_0.field_0x60);
|
||||
field_0x58 = JSUConvertOffsetToPtr<u8>(¶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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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*)((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<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*)((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<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);
|
||||
|
||||
@@ -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);
|
||||
Reference in New Issue
Block a user