From 3e4b9bf59b890cb1372ff0da93a920f13f1d4b01 Mon Sep 17 00:00:00 2001 From: CraftyBoss Date: Sun, 1 Mar 2026 04:24:38 -0800 Subject: [PATCH] update some actors to use sizeof for mSize, endian swap J2DScreen related structs, add 64bit endian swapping game appears to be hanging on fully initing some processes, so while there isnt an immediate crash, nothing seems to be happening --- include/JSystem/J2DGraph/J2DMaterialFactory.h | 50 +++--- include/JSystem/J2DGraph/J2DPane.h | 5 +- include/JSystem/J2DGraph/J2DPicture.h | 17 +- include/JSystem/J2DGraph/J2DScreen.h | 21 +-- include/JSystem/J2DGraph/J2DTevs.h | 13 +- include/JSystem/J2DGraph/J2DTextBox.h | 23 +-- include/JSystem/JSupport/JSUInputStream.h | 20 ++- include/JSystem/JUtility/JUTNameTab.h | 8 +- include/d/d_event_data.h | 113 ++++++------ include/dolphin/os.h | 4 + include/dusk/endian.h | 33 +++- src/JSystem/J2DGraph/J2DMaterialFactory.cpp | 164 +++++++++--------- src/JSystem/J2DGraph/J2DPane.cpp | 30 ++-- src/JSystem/J2DGraph/J2DPicture.cpp | 3 +- src/JSystem/J2DGraph/J2DPictureEx.cpp | 7 +- src/JSystem/J2DGraph/J2DScreen.cpp | 4 +- src/JSystem/J2DGraph/J2DTevs.cpp | 4 +- src/JSystem/J2DGraph/J2DWindow.cpp | 16 +- src/JSystem/J2DGraph/J2DWindowEx.cpp | 23 +-- src/JSystem/JSupport/JSUInputStream.cpp | 1 + src/d/actor/d_a_cstaF.cpp | 2 +- src/d/actor/d_a_cstatue.cpp | 2 +- src/d/actor/d_a_obj_hbombkoya.cpp | 28 +-- src/d/actor/d_a_obj_ice_l.cpp | 2 +- src/d/actor/d_a_obj_magLiftRot.cpp | 4 +- src/d/actor/d_a_obj_tornado.cpp | 4 +- src/d/actor/d_a_obj_wchain.cpp | 4 +- src/d/actor/d_a_scene_exit.cpp | 2 +- src/d/d_event_data.cpp | 19 +- src/f_pc/f_pc_base.cpp | 20 ++- 30 files changed, 364 insertions(+), 282 deletions(-) diff --git a/include/JSystem/J2DGraph/J2DMaterialFactory.h b/include/JSystem/J2DGraph/J2DMaterialFactory.h index 20bcbe1eb4..211b8be180 100644 --- a/include/JSystem/J2DGraph/J2DMaterialFactory.h +++ b/include/JSystem/J2DGraph/J2DMaterialFactory.h @@ -136,38 +136,38 @@ public: u8 newDither(int) const; u8 getMaterialMode(int idx) const { - return field_0x4[field_0x8[idx]].field_0x0; + return mpMaterialInitData[mpMaterialID[idx]].field_0x0; } u8 getMaterialAlphaCalc(int idx) const { - return field_0x4[field_0x8[idx]].field_0x6; + return mpMaterialInitData[mpMaterialID[idx]].field_0x6; } private: - /* 0x00 */ u16 field_0x0; + /* 0x00 */ u16 mMaterialNum; /* 0x02 */ u16 field_0x2; - /* 0x04 */ J2DMaterialInitData* field_0x4; - /* 0x08 */ u16* field_0x8; - /* 0x0C */ J2DIndInitData* field_0xc; - /* 0x10 */ GXColor* field_0x10; - /* 0x14 */ u8* field_0x14; - /* 0x18 */ J2DColorChanInfo* field_0x18; - /* 0x1C */ u8* field_0x1c; - /* 0x20 */ J2DTexCoordInfo* field_0x20; - /* 0x24 */ J2DTexMtxInfo* field_0x24; - /* 0x28 */ u16* field_0x28; - /* 0x2C */ u16* field_0x2c; - /* 0x30 */ BE(GXCullMode)* field_0x30; - /* 0x34 */ J2DTevOrderInfo* field_0x34; - /* 0x38 */ BE(GXColorS10)* field_0x38; - /* 0x3C */ GXColor* field_0x3c; - /* 0x40 */ u8* field_0x40; - /* 0x44 */ J2DTevStageInfo* field_0x44; - /* 0x48 */ J2DTevSwapModeInfo* field_0x48; - /* 0x4C */ J2DTevSwapModeTableInfo* field_0x4c; - /* 0x50 */ J2DAlphaCompInfo* field_0x50; - /* 0x54 */ J2DBlendInfo* field_0x54; - /* 0x58 */ u8* field_0x58; + /* 0x04 */ J2DMaterialInitData* mpMaterialInitData; + /* 0x08 */ BE(u16)* mpMaterialID; + /* 0x0C */ J2DIndInitData* mpIndInitData; + /* 0x10 */ GXColor* mpMatColor; + /* 0x14 */ u8* mpColorChanNum; + /* 0x18 */ J2DColorChanInfo* mpColorChanInfo; + /* 0x1C */ u8* mpTexGenNum; + /* 0x20 */ J2DTexCoordInfo* mpTexCoordInfo; + /* 0x24 */ J2DTexMtxInfo* mpTexMtxInfo; + /* 0x28 */ BE(u16)* mpTexNo; + /* 0x2C */ BE(u16)* mpFontNo; + /* 0x30 */ BE(GXCullMode)* mpCullMode; + /* 0x34 */ J2DTevOrderInfo* mpTevOrderInfo; + /* 0x38 */ BE(GXColorS10)* mpTevColor; + /* 0x3C */ GXColor* mpTevKColor; + /* 0x40 */ u8* mpTevStageNum; + /* 0x44 */ J2DTevStageInfo* mpTevStageInfo; + /* 0x48 */ J2DTevSwapModeInfo* mpTevSwapModeInfo; + /* 0x4C */ J2DTevSwapModeTableInfo* mpTevSwapModeTableInfo; + /* 0x50 */ J2DAlphaCompInfo* mpAlphaCompInfo; + /* 0x54 */ J2DBlendInfo* mpBlendInfo; + /* 0x58 */ u8* mpDither; }; #endif /* J2DMATERIALFACTORY_H */ diff --git a/include/JSystem/J2DGraph/J2DPane.h b/include/JSystem/J2DGraph/J2DPane.h index 8ef7bd802f..b1677223ad 100644 --- a/include/JSystem/J2DGraph/J2DPane.h +++ b/include/JSystem/J2DGraph/J2DPane.h @@ -5,6 +5,7 @@ #include "JSystem/JSupport/JSUList.h" #include #include +#include "dusk/endian.h" class J2DAnmBase; class J2DAnmColor; @@ -40,8 +41,8 @@ enum J2DBasePosition { * */ struct J2DPaneHeader { - /* 0x0 */ u32 mKind; - /* 0x4 */ u32 mSize; + /* 0x0 */ BE(u32) mKind; + /* 0x4 */ BE(u32) mSize; }; /** diff --git a/include/JSystem/J2DGraph/J2DPicture.h b/include/JSystem/J2DGraph/J2DPicture.h index e73fd3fc9b..f6805ea2bc 100644 --- a/include/JSystem/J2DGraph/J2DPicture.h +++ b/include/JSystem/J2DGraph/J2DPicture.h @@ -4,6 +4,7 @@ #include "JSystem/J2DGraph/J2DPane.h" #include "JSystem/JUtility/JUTTexture.h" #include "JSystem/JUtility/TColor.h" +#include "dusk/endian.h" class J2DMaterial; class JUTPalette; @@ -31,8 +32,8 @@ enum J2DBinding { * */ struct J2DPicHeader { - /* 0x0 */ u32 mTag; - /* 0x4 */ u32 mSize; + /* 0x0 */ BE(u32) mTag; + /* 0x4 */ BE(u32) mSize; }; /** @@ -40,12 +41,12 @@ struct J2DPicHeader { * */ struct J2DScrnBlockPictureParameter { - /* 0x00 */ u16 field_0x0; - /* 0x02 */ u16 mMaterialNum; - /* 0x04 */ u16 field_0x4; - /* 0x06 */ u16 field_0x6; - /* 0x08 */ u16 field_0x8[4]; - /* 0x10 */ JGeometry::TVec2 field_0x10[4]; + /* 0x00 */ BE(u16) field_0x0; + /* 0x02 */ BE(u16) mMaterialNum; + /* 0x04 */ BE(u16) field_0x4; + /* 0x06 */ BE(u16) field_0x6; + /* 0x08 */ BE(u16) field_0x8[4]; + /* 0x10 */ JGeometry::TVec2 field_0x10[4]; /* 0x20 */ u32 mCornerColor[4]; }; // Size: 0x30 diff --git a/include/JSystem/J2DGraph/J2DScreen.h b/include/JSystem/J2DGraph/J2DScreen.h index fbd65db10b..6f959f56fc 100644 --- a/include/JSystem/J2DGraph/J2DScreen.h +++ b/include/JSystem/J2DGraph/J2DScreen.h @@ -4,6 +4,7 @@ #include "JSystem/J2DGraph/J2DManage.h" #include "JSystem/J2DGraph/J2DPane.h" #include "JSystem/JUtility/TColor.h" +#include "dusk/endian.h" class J2DMaterial; class JUTNameTab; @@ -13,10 +14,10 @@ class JUTNameTab; * */ struct J2DScrnHeader { - /* 0x00 */ u32 mTag; - /* 0x04 */ u32 mType; - /* 0x08 */ u32 mFileSize; - /* 0x0C */ u32 mBlockNum; + /* 0x00 */ BE(u32) mTag; + /* 0x04 */ BE(u32) mType; + /* 0x08 */ BE(u32) mFileSize; + /* 0x0C */ BE(u32) mBlockNum; /* 0x10 */ u8 padding[0x10]; }; @@ -25,10 +26,10 @@ struct J2DScrnHeader { * */ struct J2DScrnInfoHeader { - /* 0x0 */ u32 mTag; - /* 0x4 */ u32 mSize; - /* 0x8 */ u16 mWidth; - /* 0xA */ u16 mHeight; + /* 0x0 */ BE(u32) mTag; + /* 0x4 */ BE(u32) mSize; + /* 0x8 */ BE(u16) mWidth; + /* 0xA */ BE(u16) mHeight; /* 0xC */ u32 mColor; }; @@ -37,8 +38,8 @@ struct J2DScrnInfoHeader { * */ struct J2DScrnBlockHeader { - /* 0x00 */ u32 mTag; - /* 0x04 */ s32 mSize; + /* 0x00 */ BE(u32) mTag; + /* 0x04 */ BE(s32) mSize; }; /** diff --git a/include/JSystem/J2DGraph/J2DTevs.h b/include/JSystem/J2DGraph/J2DTevs.h index f7ce3f4ef9..8bf27091ce 100644 --- a/include/JSystem/J2DGraph/J2DTevs.h +++ b/include/JSystem/J2DGraph/J2DTevs.h @@ -4,17 +4,18 @@ #include #include #include "global.h" +#include "dusk/endian.h" /** * @ingroup jsystem-j2d * */ struct J2DTextureSRTInfo { - /* 0x00 */ f32 mScaleX; - /* 0x04 */ f32 mScaleY; - /* 0x08 */ f32 mRotationDeg; - /* 0x0C */ f32 mTranslationX; - /* 0x10 */ f32 mTranslationY; + /* 0x00 */ BE(f32) mScaleX; + /* 0x04 */ BE(f32) mScaleY; + /* 0x08 */ BE(f32) mRotationDeg; + /* 0x0C */ BE(f32) mTranslationX; + /* 0x10 */ BE(f32) mTranslationY; }; // Size: 0x14 /** @@ -31,7 +32,7 @@ struct J2DTexMtxInfo { /* 0x01 */ u8 mTexMtxDCC; /* 0x02 */ u8 field_0x2; // padding ? /* 0x03 */ u8 field_0x3; // padding ? - /* 0x04 */ Vec mCenter; + /* 0x04 */ BE(Vec) mCenter; /* 0x10 */ J2DTextureSRTInfo mTexSRTInfo; GXTexMtxType getTexMtxType() const { return (GXTexMtxType)mTexMtxType; } diff --git a/include/JSystem/J2DGraph/J2DTextBox.h b/include/JSystem/J2DGraph/J2DTextBox.h index 417e6ede77..ff4781297a 100644 --- a/include/JSystem/J2DGraph/J2DTextBox.h +++ b/include/JSystem/J2DGraph/J2DTextBox.h @@ -3,6 +3,7 @@ #include "JSystem/J2DGraph/J2DMaterial.h" #include "JSystem/J2DGraph/J2DPane.h" +#include "dusk/endian.h" class J2DMaterial; class JUTFont; @@ -24,8 +25,8 @@ enum J2DTextBoxHBinding { * */ struct J2DTbxBlockHeader { - /* 0x00 */ u32 mTag; - /* 0x04 */ s32 mSize; + /* 0x00 */ BE(u32) mTag; + /* 0x04 */ BE(s32) mSize; }; /** @@ -33,17 +34,17 @@ struct J2DTbxBlockHeader { * */ struct J2DTextBoxInfo { - /* 0x00 */ u16 field_0x0; - /* 0x02 */ u16 field_0x2; - /* 0x04 */ u16 mMaterialNum; - /* 0x06 */ s16 mCharSpace; - /* 0x08 */ s16 mLineSpace; - /* 0x0A */ u16 mFontSizeX; - /* 0x0C */ u16 mFontSizeY; + /* 0x00 */ BE(u16) field_0x0; + /* 0x02 */ BE(u16) field_0x2; + /* 0x04 */ BE(u16) mMaterialNum; + /* 0x06 */ BE(s16) mCharSpace; + /* 0x08 */ BE(s16) mLineSpace; + /* 0x0A */ BE(u16) mFontSizeX; + /* 0x0C */ BE(u16) mFontSizeY; /* 0x0E */ u8 mHBind; /* 0x0F */ u8 mVBind; - /* 0x10 */ u32 mCharColor; - /* 0x14 */ u32 mGradColor; + /* 0x10 */ BE(u32) mCharColor; + /* 0x14 */ BE(u32) mGradColor; /* 0x18 */ u8 mConnected; /* 0x19 */ char field_0x19[3]; /* 0x1C */ u16 field_0x1c; diff --git a/include/JSystem/JSupport/JSUInputStream.h b/include/JSystem/JSupport/JSUInputStream.h index afde440837..a1957a22ad 100644 --- a/include/JSystem/JSupport/JSUInputStream.h +++ b/include/JSystem/JSupport/JSUInputStream.h @@ -2,6 +2,7 @@ #define JSUINPUTSTREAM_H #include "JSystem/JSupport/JSUIosBase.h" +#include "dusk/endian.h" /** * @ingroup jsystem-jsupport @@ -17,31 +18,31 @@ public: /* vt[5] */ virtual u32 readData(void*, s32) = 0; u32 readU32() { - u32 val; + BE val; this->read(&val, sizeof(val)); return val; } u32 read32b() { - u32 val; + BE val; this->read(&val, sizeof(val)); return val; } s32 readS32() { - s32 val; + BE val; this->read(&val, sizeof(val)); return val; } s16 readS16() { - s16 val; + BE val; this->read(&val, sizeof(val)); return val; } u16 readU16() { - u16 val; + BE val; this->read(&val, sizeof(val)); return val; } @@ -59,18 +60,20 @@ public: } u16 read16b() { - u16 val; + BE val; this->read(&val, sizeof(val)); return val; } JSUInputStream& operator>>(u32& dest) { read(&dest, 4); + be_swap(dest); return *this; } JSUInputStream& operator>>(u16& dest) { read(&dest, 2); + be_swap(dest); return *this; } @@ -81,6 +84,7 @@ public: JSUInputStream& operator>>(s16& dest) { read(&dest, 2); + be_swap(dest); return *this; } @@ -98,7 +102,9 @@ public: } s32 read(u32& param_0) { - return read(¶m_0, 4); + auto ret = read(¶m_0, 4); + be_swap(param_0); + return ret; } // TODO: return value probably wrong diff --git a/include/JSystem/JUtility/JUTNameTab.h b/include/JSystem/JUtility/JUTNameTab.h index 0aa772a40d..5abd0912d4 100644 --- a/include/JSystem/JUtility/JUTNameTab.h +++ b/include/JSystem/JUtility/JUTNameTab.h @@ -8,11 +8,11 @@ * */ struct ResNTAB { - u16 mEntryNum; - u16 mPad0; + BE(u16) mEntryNum; + BE(u16) mPad0; struct Entry { - u16 mKeyCode; - u16 mOffs; + BE(u16) mKeyCode; + BE(u16) mOffs; } mEntries[1]; inline const char* getName(u32 index) const { diff --git a/include/d/d_event_data.h b/include/d/d_event_data.h index 22a835ec24..f42e16b7a7 100644 --- a/include/d/d_event_data.h +++ b/include/d/d_event_data.h @@ -3,24 +3,25 @@ #include "global.h" #include "f_pc/f_pc_base.h" +#include "dusk/endian.h" struct msg_class; struct event_binary_data_header { - /* 0x00 */ u32 eventTop; // offset to Event chunk - /* 0x04 */ s32 eventNum; - /* 0x08 */ u32 staffTop; // offset to Staff chunk - /* 0x0C */ s32 staffNum; - /* 0x10 */ u32 cutTop; // offset to Cut chunk - /* 0x14 */ s32 cutNum; - /* 0x18 */ u32 dataTop; // offset to Data chunk - /* 0x1C */ s32 dataNum; - /* 0x20 */ u32 fDataTop; // offset to FData chunk - /* 0x24 */ s32 fDataNum; - /* 0x28 */ u32 iDataTop; // offset to IData chunk - /* 0x2C */ s32 iDataNum; - /* 0x30 */ u32 sDataTop; // offset to SData chunk - /* 0x34 */ s32 sDataNum; + /* 0x00 */ BE(u32) eventTop; // offset to Event chunk + /* 0x04 */ BE(s32) eventNum; + /* 0x08 */ BE(u32) staffTop; // offset to Staff chunk + /* 0x0C */ BE(s32) staffNum; + /* 0x10 */ BE(u32) cutTop; // offset to Cut chunk + /* 0x14 */ BE(s32) cutNum; + /* 0x18 */ BE(u32) dataTop; // offset to Data chunk + /* 0x1C */ BE(s32) dataNum; + /* 0x20 */ BE(u32) fDataTop; // offset to FData chunk + /* 0x24 */ BE(s32) fDataNum; + /* 0x28 */ BE(u32) iDataTop; // offset to IData chunk + /* 0x2C */ BE(s32) iDataNum; + /* 0x30 */ BE(u32) sDataTop; // offset to SData chunk + /* 0x34 */ BE(s32) sDataNum; /* 0x38 */ u8 unk[8]; }; // Size: 0x40 @@ -45,11 +46,11 @@ public: char* getName() { return mName; } /* 0x00 */ char mName[32]; - /* 0x20 */ u32 mIndex; - /* 0x24 */ int mType; - /* 0x28 */ int mDataIndex; - /* 0x2C */ int mNumber; - /* 0x30 */ int mNext; + /* 0x20 */ BE(u32) mIndex; + /* 0x24 */ BE(int) mType; + /* 0x28 */ BE(int) mDataIndex; + /* 0x2C */ BE(int) mNumber; + /* 0x30 */ BE(int) mNext; /* 0x34 */ u8 field_0x34[12]; }; // Size: 0x40 @@ -79,12 +80,12 @@ public: u32 getTagId() { return mTagID; } /* 0x00 */ char mName[32]; - /* 0x20 */ u32 mTagID; - /* 0x24 */ u32 mIndex; - /* 0x28 */ int mFlags[3]; - /* 0x34 */ u32 mFlagId; - /* 0x38 */ int mDataTop; - /* 0x3C */ int mNext; + /* 0x20 */ BE(u32) mTagID; + /* 0x24 */ BE(u32) mIndex; + /* 0x28 */ BE(int) mFlags[3]; + /* 0x34 */ BE(u32) mFlagId; + /* 0x38 */ BE(int) mDataTop; + /* 0x3C */ BE(int) mNext; /* 0x40 */ u8 field_0x40[0x10]; }; // Size: 0x50 @@ -136,26 +137,26 @@ public: }; struct MessageData { - s16 unk; + BE(s16) unk; }; struct SoundData { - s16 unk; - s16 timer; + BE(s16) unk; + BE(s16) timer; }; struct TimerKeeperData { - s32 timer; + BE(s32) timer; }; struct DirectorData { - s16 unk; - s16 unk2; + BE(s16) unk; + BE(s16) unk2; }; struct EffectData { u8 pad[8]; - s32 unk; + BE(s32) unk; }; void specialProc_WaitStart(int index); @@ -180,16 +181,16 @@ public: // private: /* 0x00 */ char mName[8]; - /* 0x08 */ u8 mWork[0x18]; - /* 0x20 */ s32 mTagID; - /* 0x24 */ u32 mIndex; - /* 0x28 */ u32 mFlagID; - /* 0x2C */ int mType; - /* 0x30 */ int mStartCut; - /* 0x34 */ s16 field_0x34; - /* 0x36 */ s16 mWaitTimer; - /* 0x38 */ int mCurrentCut; - /* 0x3C */ s32 field_0x3c; + /* 0x08 */ u8 mWork[0x18]; // PROBLEM: this buffer is now too small for StaffWork to fit in + /* 0x20 */ BE(s32) mTagID; + /* 0x24 */ BE(u32) mIndex; + /* 0x28 */ BE(u32) mFlagID; + /* 0x2C */ BE(int) mType; + /* 0x30 */ BE(int) mStartCut; + /* 0x34 */ BE(s16) field_0x34; + /* 0x36 */ BE(s16) mWaitTimer; + /* 0x38 */ BE(int) mCurrentCut; + /* 0x3C */ BE(s32) field_0x3c; /* 0x40 */ bool field_0x40; /* 0x41 */ bool field_0x41; /* 0x42 */ u8 mData[0x50 - 0x42]; @@ -223,21 +224,21 @@ public: int getPriority() { return mPriority; } /* 0x00 */ char mName[32]; - /* 0x20 */ u32 mIndex; - /* 0x24 */ int field_0x24; - /* 0x28 */ int mPriority; - /* 0x2C */ int mStaff[20]; - /* 0x7C */ int mNStaff; - /* 0x80 */ int field_0x80; - /* 0x84 */ int field_0x84; - /* 0x88 */ int mFlags[3]; + /* 0x20 */ BE(u32) mIndex; + /* 0x24 */ BE(int) field_0x24; + /* 0x28 */ BE(int) mPriority; + /* 0x2C */ BE(int) mStaff[20]; + /* 0x7C */ BE(int) mNStaff; + /* 0x80 */ BE(int) field_0x80; + /* 0x84 */ BE(int) field_0x84; + /* 0x88 */ BE(int) mFlags[3]; /* 0x94 */ bool mPlaySound; - /* 0x96 */ s16 field_0x96; - /* 0x98 */ f32 field_0x98; - /* 0x9C */ f32 field_0x9c; - /* 0xA0 */ f32 field_0xa0; - /* 0xA4 */ int mEventState; - /* 0xA8 */ int field_0xa8; + /* 0x96 */ BE(s16) field_0x96; + /* 0x98 */ BE(f32) field_0x98; + /* 0x9C */ BE(f32) field_0x9c; + /* 0xA0 */ BE(f32) field_0xa0; + /* 0xA4 */ BE(int) mEventState; + /* 0xA8 */ BE(int) field_0xa8; /* 0xAC */ u8 field_0xac[4]; }; // Size: 0xB0 diff --git a/include/dolphin/os.h b/include/dolphin/os.h index ef23b716ff..c8c996cd6d 100644 --- a/include/dolphin/os.h +++ b/include/dolphin/os.h @@ -361,6 +361,8 @@ inline s16 __OSf32tos16(__REGISTER f32 inF) { psq_st inF, 0(tmpPtr), 0x1, 5 lha out, 0(tmpPtr) } +#else + return (s16)inF; // this is wrong i believe #endif // clang-format on @@ -381,6 +383,8 @@ inline u8 __OSf32tou8(__REGISTER f32 inF) { psq_st inF, 0(tmpPtr), 0x1, 2 lbz out, 0(tmpPtr) } +#else + return (u8)inF; // this is also wrong i believe #endif // clang-format on diff --git a/include/dusk/endian.h b/include/dusk/endian.h index 756c391fe0..50e476accd 100644 --- a/include/dusk/endian.h +++ b/include/dusk/endian.h @@ -18,9 +18,11 @@ #include #define BSWAP16(x) _byteswap_ushort(x) #define BSWAP32(x) _byteswap_ulong(x) + #define BSWAP64(x) _byteswap_uint64(x) #else #define BSWAP16(x) __builtin_bswap16(x) #define BSWAP32(x) __builtin_bswap32(x) + #define BSWAP64(x) __builtin_bswap64(x) #endif #else #define BSWAP16(x) (x) @@ -31,8 +33,9 @@ inline u16 be16(u16 val) { return BSWAP16(val); } inline s16 be16s(s16 val) { return (s16)BSWAP16((u16)val); } inline u32 be32(u32 val) { return BSWAP32(val); } - inline s32 be32s(s32 val) { return (s32)BSWAP32((u32)val); } +inline u64 be64(u64 val) { return BSWAP64(val); } +inline s64 be64s(s64 val) { return (s64)BSWAP64((u64)val); } #ifdef TARGET_PC // Helper wrappers so code below reads nicely: @@ -48,6 +51,12 @@ static inline u32 RES_U32(u32 v) { static inline s32 RES_S32(s32 v) { return be32s(v); } +static inline u64 RES_U64(u64 v) { + return be64(v); +} +static inline s64 RES_S64(s64 v) { + return be64s(v); +} static inline f32 RES_F32(f32 v) { return std::bit_cast(RES_S32(std::bit_cast(v))); } @@ -73,6 +82,16 @@ struct BE { inner = swap(from); } + T operator--(int dec) { + inner -= dec; + return swap(inner); + } + + T operator++(int inc) { + inner += inc; + return swap(inner); + } + operator T() const { return swap(inner); } @@ -94,7 +113,6 @@ constexpr BE& operator op(BE& a, TB b) { \ return a; \ } - BIN_ASSIGN_OP(&=); BIN_ASSIGN_OP(|=); BIN_ASSIGN_OP(+=); @@ -102,6 +120,7 @@ BIN_ASSIGN_OP(/=); #undef BIN_ASSIGN_OP + template<> inline u16 BE::swap(u16 val) { return RES_U16(val); @@ -122,6 +141,16 @@ inline s32 BE::swap(s32 val) { return RES_S32(val); } +template<> +inline s64 BE::swap(s64 val) { + return RES_S64(val); +} + +template<> +inline u64 BE::swap(u64 val) { + return RES_U64(val); +} + template<> inline f32 BE::swap(f32 val) { return RES_F32(val); diff --git a/src/JSystem/J2DGraph/J2DMaterialFactory.cpp b/src/JSystem/J2DGraph/J2DMaterialFactory.cpp index 1b22ce0243..15159a922c 100644 --- a/src/JSystem/J2DGraph/J2DMaterialFactory.cpp +++ b/src/JSystem/J2DGraph/J2DMaterialFactory.cpp @@ -9,42 +9,42 @@ #include J2DMaterialFactory::J2DMaterialFactory(J2DMaterialBlock const& param_0) { - field_0x0 = param_0.field_0x8; - field_0x4 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0xc); - field_0x8 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x10); + mMaterialNum = param_0.field_0x8; + mpMaterialInitData = JSUConvertOffsetToPtr(¶m_0, param_0.field_0xc); + mpMaterialID = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x10); if (param_0.field_0x18 && param_0.field_0x18 - param_0.field_0x14 > 4) { - field_0xc = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x18); + mpIndInitData = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x18); } else { - field_0xc = NULL; + mpIndInitData = NULL; } - field_0x30 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x1c); - field_0x10 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x20); - field_0x14 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x24); - field_0x18 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x28); - field_0x1c = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x2c); - field_0x20 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x30); - field_0x24 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x34); - field_0x28 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x38); - field_0x2c = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x3c); - field_0x34 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x40); - field_0x38 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x44); - field_0x3c = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x48); - field_0x40 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x4c); - field_0x44 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x50); - field_0x48 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x54); - field_0x4c = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x58); - field_0x50 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x5c); - field_0x54 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x60); - field_0x58 = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x64); + mpCullMode = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x1c); + mpMatColor = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x20); + mpColorChanNum = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x24); + mpColorChanInfo = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x28); + mpTexGenNum = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x2c); + mpTexCoordInfo = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x30); + mpTexMtxInfo = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x34); + mpTexNo = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x38); + mpFontNo = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x3c); + mpTevOrderInfo = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x40); + mpTevColor = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x44); + mpTevKColor = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x48); + mpTevStageNum = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x4c); + mpTevStageInfo = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x50); + mpTevSwapModeInfo = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x54); + mpTevSwapModeTableInfo = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x58); + mpAlphaCompInfo = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x5c); + mpBlendInfo = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x60); + mpDither = JSUConvertOffsetToPtr(¶m_0, param_0.field_0x64); } u32 J2DMaterialFactory::countStages(int param_0) const { - J2DMaterialInitData* iVar5 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar5 = &mpMaterialInitData[mpMaterialID[param_0]]; u32 uVar4 = 0; u32 uVar3 = 0; if (iVar5->field_0x4 != 0xff) { - uVar3 = field_0x40[iVar5->field_0x4]; + uVar3 = mpTevStageNum[iVar5->field_0x4]; } for (int i = 0; i < 8; i++) { if (iVar5->field_0x38[i] != 0xffff) { @@ -121,11 +121,11 @@ J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int index, u32 par param_0->getTevBlock()->setTevOrder(i, newTevOrder(index, i)); } for (u8 i = 0; i < local_370; i++) { - J2DMaterialInitData* local_38c = &field_0x4[field_0x8[index]]; + J2DMaterialInitData* local_38c = &mpMaterialInitData[mpMaterialID[index]]; param_0->getTevBlock()->setTevStage(i, newTevStage(index, i)); if (local_38c->field_0xba[i] != 0xffff) { - param_0->getTevBlock()->getTevStage(i)->setTexSel(field_0x48[local_38c->field_0xba[i]].mTexSel); - param_0->getTevBlock()->getTevStage(i)->setRasSel(field_0x48[local_38c->field_0xba[i]].mRasSel); + param_0->getTevBlock()->getTevStage(i)->setTexSel(mpTevSwapModeInfo[local_38c->field_0xba[i]].mTexSel); + param_0->getTevBlock()->getTevStage(i)->setRasSel(mpTevSwapModeInfo[local_38c->field_0xba[i]].mRasSel); } } for (u8 i = 0; i < 4; i++) { @@ -151,14 +151,14 @@ J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int index, u32 par for (u8 i = 0; i < 8; i++) { param_0->getTexGenBlock()->setTexMtx(i, newTexMtx(index, i)); } - J2DMaterialInitData* local_394 = &field_0x4[field_0x8[index]]; + J2DMaterialInitData* local_394 = &mpMaterialInitData[mpMaterialID[index]]; for (u8 i = 0; i < local_370; i++) { param_0->getTevBlock()->setTevKColorSel(i, local_394->field_0x52[i]); } for (u8 i = 0; i < local_370; i++) { param_0->getTevBlock()->setTevKAlphaSel(i, local_394->field_0x62[i]); } - if (field_0xc != NULL || local_378 != 0) { + if (mpIndInitData != NULL || local_378 != 0) { u8 local_410 = newIndTexStageNum(index); param_0->mIndBlock->setIndTexStageNum(local_410); for (u8 i = 0; i < local_410; i++) { @@ -183,52 +183,52 @@ JUtility::TColor J2DMaterialFactory::newMatColor(int param_0, int param_1) const #else JUtility::TColor local_20 = GXColor{0xff,0xff,0xff,0xff}; #endif - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x8[param_1] != 0xffff) { - return field_0x10[iVar2->field_0x8[param_1]]; + return mpMatColor[iVar2->field_0x8[param_1]]; } return local_20; } u8 J2DMaterialFactory::newColorChanNum(int param_0) const { - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x2 != 0xff) { - return field_0x14[iVar2->field_0x2]; + return mpColorChanNum[iVar2->field_0x2]; } return 0; } J2DColorChan J2DMaterialFactory::newColorChan(int param_0, int param_1) const { int r29 = 0; - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0xc[param_1] != 0xffff) { - return J2DColorChan(field_0x18[iVar2->field_0xc[param_1]]); + return J2DColorChan(mpColorChanInfo[iVar2->field_0xc[param_1]]); } return J2DColorChan(); } u32 J2DMaterialFactory::newTexGenNum(int param_0) const { int r30 = 0; - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x3 != 0xff) { - return field_0x1c[iVar2->field_0x3]; + return mpTexGenNum[iVar2->field_0x3]; } return 0; } J2DTexCoord J2DMaterialFactory::newTexCoord(int param_0, int param_1) const { - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x14[param_1] != 0xffff) { - return J2DTexCoord(field_0x20[iVar2->field_0x14[param_1]]); + return J2DTexCoord(mpTexCoordInfo[iVar2->field_0x14[param_1]]); } return J2DTexCoord(); } J2DTexMtx* J2DMaterialFactory::newTexMtx(int param_0, int param_1) const { J2DTexMtx* rv = NULL; - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x24[param_1] != 0xffff) { - rv = new J2DTexMtx(field_0x24[iVar2->field_0x24[param_1]]); + rv = new J2DTexMtx(mpTexMtxInfo[iVar2->field_0x24[param_1]]); rv->calc(); } return rv; @@ -236,33 +236,33 @@ J2DTexMtx* J2DMaterialFactory::newTexMtx(int param_0, int param_1) const { u8 J2DMaterialFactory::newCullMode(int param_0) const { int r30 = 0; - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x1 != 0xff) { - return field_0x30[iVar2->field_0x1]; + return mpCullMode[iVar2->field_0x1]; } return 0xff; } u16 J2DMaterialFactory::newTexNo(int param_0, int param_1) const { - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x38[param_1] != 0xffff) { - return field_0x28[iVar2->field_0x38[param_1]]; + return mpTexNo[iVar2->field_0x38[param_1]]; } return 0x1FFFF; } u16 J2DMaterialFactory::newFontNo(int param_0) const { - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x48 != 0xffff) { - return field_0x2c[iVar2->field_0x48]; + return mpFontNo[iVar2->field_0x48]; } return 0x1FFFF; } J2DTevOrder J2DMaterialFactory::newTevOrder(int param_0, int param_1) const { - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x72[param_1] != 0xffff) { - return J2DTevOrder(field_0x34[iVar2->field_0x72[param_1]]); + return J2DTevOrder(mpTevOrderInfo[iVar2->field_0x72[param_1]]); } return J2DTevOrder(); } @@ -270,10 +270,10 @@ J2DTevOrder J2DMaterialFactory::newTevOrder(int param_0, int param_1) const { J2DGXColorS10 J2DMaterialFactory::newTevColor(int param_0, int param_1) const { GXColorS10 color = {0, 0, 0, 0}; J2DGXColorS10 rv = color; - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x92[param_1] != 0xffff) { - return (GXColorS10) field_0x38[iVar2->field_0x92[param_1]]; + return (GXColorS10) mpTevColor[iVar2->field_0x92[param_1]]; } return rv; @@ -281,42 +281,42 @@ J2DGXColorS10 J2DMaterialFactory::newTevColor(int param_0, int param_1) const { JUtility::TColor J2DMaterialFactory::newTevKColor(int param_0, int param_1) const { JUtility::TColor local_20 = COMPOUND_LITERAL(GXColor){0xFF, 0xFF, 0xFF, 0xFF}; - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x4a[param_1] != 0xffff) { - return field_0x3c[iVar2->field_0x4a[param_1]]; + return mpTevKColor[iVar2->field_0x4a[param_1]]; } return local_20; } u8 J2DMaterialFactory::newTevStageNum(int param_0) const { - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x4 != 0xff) { - return field_0x40[iVar2->field_0x4]; + return mpTevStageNum[iVar2->field_0x4]; } return 0xFF; } J2DTevStage J2DMaterialFactory::newTevStage(int param_0, int param_1) const { - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x9a[param_1] != 0xffff) { - return J2DTevStage(field_0x44[iVar2->field_0x9a[param_1]]); + return J2DTevStage(mpTevStageInfo[iVar2->field_0x9a[param_1]]); } return J2DTevStage(); } J2DTevSwapModeTable J2DMaterialFactory::newTevSwapModeTable(int param_0, int param_1) const { - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0xda[param_1] != 0xffff) { - return J2DTevSwapModeTable(field_0x4c[iVar2->field_0xda[param_1]]); + return J2DTevSwapModeTable(mpTevSwapModeTableInfo[iVar2->field_0xda[param_1]]); } return J2DTevSwapModeTable(j2dDefaultTevSwapModeTable); } u8 J2DMaterialFactory::newIndTexStageNum(int param_0) const { u8 r31 = 0; - if (field_0xc != NULL) { - if (field_0xc[param_0].field_0x0 == 1) { - return field_0xc[param_0].field_0x1; + if (mpIndInitData != NULL) { + if (mpIndInitData[param_0].field_0x0 == 1) { + return mpIndInitData[param_0].field_0x1; } } return r31; @@ -324,9 +324,9 @@ u8 J2DMaterialFactory::newIndTexStageNum(int param_0) const { J2DIndTexOrder J2DMaterialFactory::newIndTexOrder(int param_0, int param_1) const { J2DIndTexOrder rv; - if (field_0xc != NULL) { - if (field_0xc[param_0].field_0x0 == 1) { - return J2DIndTexOrder(field_0xc[param_0].field_0x4[param_1]); + if (mpIndInitData != NULL) { + if (mpIndInitData[param_0].field_0x0 == 1) { + return J2DIndTexOrder(mpIndInitData[param_0].field_0x4[param_1]); } } return rv; @@ -334,9 +334,9 @@ J2DIndTexOrder J2DMaterialFactory::newIndTexOrder(int param_0, int param_1) cons J2DIndTexMtx J2DMaterialFactory::newIndTexMtx(int param_0, int param_1) const { J2DIndTexMtx rv; - if (field_0xc != NULL) { - if (field_0xc[param_0].field_0x0 == 1) { - return J2DIndTexMtx(field_0xc[param_0].field_0xc[param_1]); + if (mpIndInitData != NULL) { + if (mpIndInitData[param_0].field_0x0 == 1) { + return J2DIndTexMtx(mpIndInitData[param_0].field_0xc[param_1]); } } return rv; @@ -344,9 +344,9 @@ J2DIndTexMtx J2DMaterialFactory::newIndTexMtx(int param_0, int param_1) const { J2DIndTevStage J2DMaterialFactory::newIndTevStage(int param_0, int param_1) const { J2DIndTevStage rv; - if (field_0xc != NULL) { - if (field_0xc[param_0].field_0x0 == 1) { - return J2DIndTevStage(field_0xc[param_0].field_0x68[param_1]); + if (mpIndInitData != NULL) { + if (mpIndInitData[param_0].field_0x0 == 1) { + return J2DIndTevStage(mpIndInitData[param_0].field_0x68[param_1]); } } return rv; @@ -354,34 +354,34 @@ J2DIndTevStage J2DMaterialFactory::newIndTevStage(int param_0, int param_1) cons J2DIndTexCoordScale J2DMaterialFactory::newIndTexCoordScale(int param_0, int param_1) const { J2DIndTexCoordScale rv; - if (field_0xc != NULL) { - if (field_0xc[param_0].field_0x0 == 1) { - return J2DIndTexCoordScale(field_0xc[param_0].field_0x60[param_1]); + if (mpIndInitData != NULL) { + if (mpIndInitData[param_0].field_0x0 == 1) { + return J2DIndTexCoordScale(mpIndInitData[param_0].field_0x60[param_1]); } } return rv; } J2DAlphaComp J2DMaterialFactory::newAlphaComp(int param_0) const { - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0xe2 != 0xffff) { - return J2DAlphaComp(field_0x50[iVar2->field_0xe2]); + return J2DAlphaComp(mpAlphaCompInfo[iVar2->field_0xe2]); } return J2DAlphaComp(); } J2DBlend J2DMaterialFactory::newBlend(int param_0) const { - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0xe4 != 0xffff) { - return J2DBlend(field_0x54[iVar2->field_0xe4]); + return J2DBlend(mpBlendInfo[iVar2->field_0xe4]); } return J2DBlend(j2dDefaultBlendInfo); } u8 J2DMaterialFactory::newDither(int param_0) const { - J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; + J2DMaterialInitData* iVar2 = &mpMaterialInitData[mpMaterialID[param_0]]; if (iVar2->field_0x5 != 0xff) { - return field_0x58[iVar2->field_0x5]; + return mpDither[iVar2->field_0x5]; } return 0; } diff --git a/src/JSystem/J2DGraph/J2DPane.cpp b/src/JSystem/J2DGraph/J2DPane.cpp index 11cb5b1230..e066257001 100644 --- a/src/JSystem/J2DGraph/J2DPane.cpp +++ b/src/JSystem/J2DGraph/J2DPane.cpp @@ -630,23 +630,23 @@ J2DPane* J2DPane::getParentPane() { /* name unknown */ struct J2DPaneInfo { - /* 0x00 */ u32 mKind; - /* 0x04 */ u32 mSize; - /* 0x08 */ u16 field_0x8; - /* 0x0A */ u16 field_0xa; + /* 0x00 */ BE(u32) mKind; + /* 0x04 */ BE(u32) mSize; + /* 0x08 */ BE(u16) field_0x8; + /* 0x0A */ BE(u16) field_0xa; /* 0x0B */ u8 mVisible; /* 0x0C */ u8 mBasePosition; - /* 0x10 */ u64 mInfoTag; - /* 0x18 */ u64 mUserInfoTag; - /* 0x20 */ f32 mRotOffsetX; - /* 0x24 */ f32 mRotOffsetY; - /* 0x28 */ f32 mScaleX; - /* 0x2C */ f32 mScaleY; - /* 0x30 */ f32 mRotateX; - /* 0x34 */ f32 mRotateY; - /* 0x38 */ f32 mRotateZ; - /* 0x3C */ f32 mTranslateX; - /* 0x40 */ f32 mTranslateY; + /* 0x10 */ BE(u64) mInfoTag; + /* 0x18 */ BE(u64) mUserInfoTag; + /* 0x20 */ BE(f32) mRotOffsetX; + /* 0x24 */ BE(f32) mRotOffsetY; + /* 0x28 */ BE(f32) mScaleX; + /* 0x2C */ BE(f32) mScaleY; + /* 0x30 */ BE(f32) mRotateX; + /* 0x34 */ BE(f32) mRotateY; + /* 0x38 */ BE(f32) mRotateZ; + /* 0x3C */ BE(f32) mTranslateX; + /* 0x40 */ BE(f32) mTranslateY; }; // Size: 0x48 void J2DPane::makePaneExStream(J2DPane* p_parent, JSURandomInputStream* p_stream) { diff --git a/src/JSystem/J2DGraph/J2DPicture.cpp b/src/JSystem/J2DGraph/J2DPicture.cpp index efeaca2ebf..e88433ecf4 100644 --- a/src/JSystem/J2DGraph/J2DPicture.cpp +++ b/src/JSystem/J2DGraph/J2DPicture.cpp @@ -45,7 +45,8 @@ J2DPicture::J2DPicture(J2DPane* p_pane, JSURandomInputStream* p_stream, J2DMater u16 matNum = picInfo.field_0x4; for (int i = 0; i < 4; i++) { - field_0x10a[i] = picInfo.field_0x10[i]; + field_0x10a[i].x = picInfo.field_0x10[i].x; + field_0x10a[i].y = picInfo.field_0x10[i].y; mCornerColor[i] = picInfo.mCornerColor[i]; } diff --git a/src/JSystem/J2DGraph/J2DPictureEx.cpp b/src/JSystem/J2DGraph/J2DPictureEx.cpp index 27cc68cc94..5d0014fe77 100644 --- a/src/JSystem/J2DGraph/J2DPictureEx.cpp +++ b/src/JSystem/J2DGraph/J2DPictureEx.cpp @@ -21,11 +21,11 @@ J2DPictureEx::J2DPictureEx(J2DPane* param_0, JSURandomInputStream* param_1, u32 field_0x194 = 0; field_0x198 = 0; s32 origPosition = param_1->getPosition(); - u32 local_68[2]; + BE(u32) local_68[2]; param_1->read(local_68, 8); mKind = local_68[0]; s32 iVar2 = param_1->getPosition(); - u32 auStack_70[2]; + BE(u32) auStack_70[2]; param_1->peek(auStack_70, 8); makePaneExStream(param_0, param_1); param_1->seek(iVar2 + auStack_70[1], JSUStreamSeekFrom_SET); @@ -36,7 +36,8 @@ J2DPictureEx::J2DPictureEx(J2DPane* param_0, JSURandomInputStream* param_1, u32 for (int i = 0; i < 4; i++) { field_0x158[i] = aJStack_60.field_0x8[i]; - field_0x10a[i] = aJStack_60.field_0x10[i]; + field_0x10a[i].x = aJStack_60.field_0x10[i].x; + field_0x10a[i].y = aJStack_60.field_0x10[i].y; mCornerColor[i] = JUtility::TColor(aJStack_60.mCornerColor[i]); } diff --git a/src/JSystem/J2DGraph/J2DScreen.cpp b/src/JSystem/J2DGraph/J2DScreen.cpp index 37c9aef084..65626a69a0 100644 --- a/src/JSystem/J2DGraph/J2DScreen.cpp +++ b/src/JSystem/J2DGraph/J2DScreen.cpp @@ -368,9 +368,9 @@ bool J2DScreen::createMaterial(JSURandomInputStream* p_stream, u32 param_1, JKRA char* ptr = (char*)sec_s; u16 size = lastOffset; while (ptr[size] != 0) { - size++; + size++; } - size++; + size++; u8* nametab = new u8[size]; if (nametab == NULL) { diff --git a/src/JSystem/J2DGraph/J2DTevs.cpp b/src/JSystem/J2DGraph/J2DTevs.cpp index bc06be7b8b..bfe85d81ff 100644 --- a/src/JSystem/J2DGraph/J2DTevs.cpp +++ b/src/JSystem/J2DGraph/J2DTevs.cpp @@ -118,8 +118,8 @@ J2DTexCoordInfo const j2dDefaultTexCoordInfo[8] = { {GX_TG_MTX2x4, GX_TG_TEX6, GX_IDENTITY, 0}, {GX_TG_MTX2x4, GX_TG_TEX7, GX_IDENTITY, 0}, }; -J2DTexMtxInfo const j2dDefaultTexMtxInfo = {1, 1, 255, 255, 0.5f, 0.5f, - 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f}; +J2DTexMtxInfo const j2dDefaultTexMtxInfo = {1, 1, 255, 255, {0.5f, 0.5f, + 0.0f}, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f}; J2DIndTexMtxInfo const j2dDefaultIndTexMtxInfo = {{0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f}, 1}; diff --git a/src/JSystem/J2DGraph/J2DWindow.cpp b/src/JSystem/J2DGraph/J2DWindow.cpp index 7907afc8c9..b6d341d507 100644 --- a/src/JSystem/J2DGraph/J2DWindow.cpp +++ b/src/JSystem/J2DGraph/J2DWindow.cpp @@ -24,17 +24,17 @@ J2DWindow::J2DWindow(J2DPane* param_0, JSURandomInputStream* param_1, JKRArchive struct J2DWindowData { u8 field_0x0[0x10]; - u16 field_0x10[4]; + BE(u16) field_0x10[4]; u8 field_0x18; u8 field_0x19; - u16 field_0x1a; - u16 field_0x1c; - u16 field_0x1e; - u16 field_0x20; - u16 field_0x22; - u16 field_0x24; + BE(u16) field_0x1a; + BE(u16) field_0x1c; + BE(u16) field_0x1e; + BE(u16) field_0x20; + BE(u16) field_0x22; + BE(u16) field_0x24; u8 field_0x26[0xa]; - u32 field_0x30[4]; + BE(u32) field_0x30[4]; }; J2DWindow::J2DWindow(J2DPane* param_0, JSURandomInputStream* param_1, J2DMaterial* param_2) : diff --git a/src/JSystem/J2DGraph/J2DWindowEx.cpp b/src/JSystem/J2DGraph/J2DWindowEx.cpp index 6b1b6748d2..0056b0cc80 100644 --- a/src/JSystem/J2DGraph/J2DWindowEx.cpp +++ b/src/JSystem/J2DGraph/J2DWindowEx.cpp @@ -3,21 +3,22 @@ #include "JSystem/J2DGraph/J2DWindowEx.h" #include "JSystem/JUtility/JUTTexture.h" #include "JSystem/JSupport/JSURandomInputStream.h" +#include "dusk/endian.h" struct J2DWindowExDef { - u32 field_0x0[4]; - u16 field_0x10[4]; + BE(u32) field_0x0[4]; + BE(u16) field_0x10[4]; u8 field_0x18; u8 field_0x19; - u16 field_0x1A; - u16 field_0x1C; - u16 field_0x1E; - u16 field_0x20; - u16 field_0x22; - u16 field_0x24; - u16 field_0x26; - u16 field_0x28[4]; - u32 field_0x30[4]; + BE(u16) field_0x1A; + BE(u16) field_0x1C; + BE(u16) field_0x1E; + BE(u16) field_0x20; + BE(u16) field_0x22; + BE(u16) field_0x24; + BE(u16) field_0x26; + BE(u16) field_0x28[4]; + BE(u32) field_0x30[4]; }; STATIC_ASSERT(sizeof(J2DWindowExDef) == 0x40); diff --git a/src/JSystem/JSupport/JSUInputStream.cpp b/src/JSystem/JSupport/JSUInputStream.cpp index cb5a2fdc09..4a0c638699 100644 --- a/src/JSystem/JSupport/JSUInputStream.cpp +++ b/src/JSystem/JSupport/JSUInputStream.cpp @@ -25,6 +25,7 @@ char* JSUInputStream::read(char* str) { setState(IOS_STATE_1); return 0; } + be_swap(sp8); s32 len = readData(str, sp8); str[len] = 0; diff --git a/src/d/actor/d_a_cstaF.cpp b/src/d/actor/d_a_cstaF.cpp index 833a9f5892..dfb5f95f16 100644 --- a/src/d/actor/d_a_cstaF.cpp +++ b/src/d/actor/d_a_cstaF.cpp @@ -584,7 +584,7 @@ actor_process_profile_definition g_profile_CSTAF = { fpcPi_CURRENT_e, // mListPrio PROC_CSTAF, // mProcName &g_fpcLf_Method.base, // sub_method - 0x00000B38, // mSize + sizeof(daCstaF_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_cstatue.cpp b/src/d/actor/d_a_cstatue.cpp index 57536d8c55..6d1b29da20 100644 --- a/src/d/actor/d_a_cstatue.cpp +++ b/src/d/actor/d_a_cstatue.cpp @@ -1220,7 +1220,7 @@ actor_process_profile_definition g_profile_CSTATUE = { fpcPi_CURRENT_e, // mListPrio PROC_CSTATUE, // mProcName &g_fpcLf_Method.base, // sub_method - 0x00000B2C, // mSize + sizeof(daCstatue_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_obj_hbombkoya.cpp b/src/d/actor/d_a_obj_hbombkoya.cpp index c701ffbf0e..de659ec008 100644 --- a/src/d/actor/d_a_obj_hbombkoya.cpp +++ b/src/d/actor/d_a_obj_hbombkoya.cpp @@ -273,18 +273,18 @@ static actor_method_class daObjHBombkoya_METHODS = { }; actor_process_profile_definition g_profile_Obj_HBombkoya = { - fpcLy_CURRENT_e, // mLayerID - 3, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_Obj_HBombkoya, // mProcName - &g_fpcLf_Method.base, // sub_method - 0x000007C0, // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 675, // mPriority - &daObjHBombkoya_METHODS, // sub_method - 0x00040100, // mStatus - fopAc_ACTOR_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 3, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_Obj_HBombkoya, // mProcName + &g_fpcLf_Method.base, // sub_method + sizeof(daObjHBombkoya_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 675, // mPriority + &daObjHBombkoya_METHODS, // sub_method + 0x00040100, // mStatus + fopAc_ACTOR_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; diff --git a/src/d/actor/d_a_obj_ice_l.cpp b/src/d/actor/d_a_obj_ice_l.cpp index 7048eb3a18..69d53f653a 100644 --- a/src/d/actor/d_a_obj_ice_l.cpp +++ b/src/d/actor/d_a_obj_ice_l.cpp @@ -261,7 +261,7 @@ actor_process_profile_definition g_profile_Obj_Ice_l = { fpcPi_CURRENT_e, // mListPrio PROC_Obj_Ice_l, // mProcName &g_fpcLf_Method.base, // sub_method - 0x00000640, // mSize + sizeof(daObjIce_l_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_obj_magLiftRot.cpp b/src/d/actor/d_a_obj_magLiftRot.cpp index ce64f16e90..9f07a93386 100644 --- a/src/d/actor/d_a_obj_magLiftRot.cpp +++ b/src/d/actor/d_a_obj_magLiftRot.cpp @@ -367,8 +367,8 @@ actor_process_profile_definition g_profile_Obj_MagLiftRot = { 3, // mListID fpcPi_CURRENT_e, // mListPrio PROC_Obj_MagLiftRot, // mProcName - &g_fpcLf_Method.base, // sub_method - 0x00000634, // mSize + &g_fpcLf_Method.base, // sub_method + sizeof(daMagLiftRot_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_obj_tornado.cpp b/src/d/actor/d_a_obj_tornado.cpp index 6761f0a329..9f996ccab1 100644 --- a/src/d/actor/d_a_obj_tornado.cpp +++ b/src/d/actor/d_a_obj_tornado.cpp @@ -231,8 +231,8 @@ actor_process_profile_definition g_profile_Obj_Tornado = { 7, // mListID fpcPi_CURRENT_e, // mListPrio PROC_Obj_Tornado, // mProcName - &g_fpcLf_Method.base, // sub_method - 0x00000770, // mSize + &g_fpcLf_Method.base, // sub_method + sizeof(daObjTrnd_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_obj_wchain.cpp b/src/d/actor/d_a_obj_wchain.cpp index d812cc0040..1200d62938 100644 --- a/src/d/actor/d_a_obj_wchain.cpp +++ b/src/d/actor/d_a_obj_wchain.cpp @@ -388,8 +388,8 @@ actor_process_profile_definition g_profile_Obj_Wchain = { 7, // mListID fpcPi_CURRENT_e, // mListPrio PROC_Obj_Wchain, // mProcName - &g_fpcLf_Method.base, // sub_method - 0x000007BC, // mSize + &g_fpcLf_Method.base, // sub_method + sizeof(daObjWchain_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/actor/d_a_scene_exit.cpp b/src/d/actor/d_a_scene_exit.cpp index 846b833faa..80c3a11f21 100644 --- a/src/d/actor/d_a_scene_exit.cpp +++ b/src/d/actor/d_a_scene_exit.cpp @@ -110,7 +110,7 @@ actor_process_profile_definition2 g_profile_SCENE_EXIT = { fpcPi_CURRENT_e, // mListPrio PROC_SCENE_EXIT, // mProcName &g_fpcLf_Method.base, // sub_method - 0x0000059C, // mSize + sizeof(daScex_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method diff --git a/src/d/d_event_data.cpp b/src/d/d_event_data.cpp index c0e34a0c50..4c028999b4 100644 --- a/src/d/d_event_data.cpp +++ b/src/d/d_event_data.cpp @@ -1071,7 +1071,7 @@ void dEvDtStaff_c::specialProcDirector() { dStage_MapEvent_dt_c* mapEvent = dEvt_control_c::searchMapEventData(data->unk); if (mapEvent != NULL) { if (mapEvent->type == dStage_MapEvent_dt_TYPE_MAPTOOLCAMERA) { - data->unk2 = mapEvent->data.maptool.field_0x14; + data->unk2 = (s16)mapEvent->data.maptool.field_0x14; } else { data->unk2 = -1; } @@ -1553,11 +1553,28 @@ int dEvDtBase_c::init(char* i_data, int i_roomNo) { } if (getFDataNum() > 0) { +#if TARGET_PC + auto data = (f32*)(i_data + getFDataTop()); + int num = getFDataNum(); + for (int i = 0; i < num; i++) + be_swap(data[i]); + setFDataP(data); +#else setFDataP((f32*)(i_data + getFDataTop())); +#endif } if (getIDataNum() > 0) { +#if TARGET_PC + // endian swap here + auto data = (int*)(i_data + getIDataTop()); + int num = getIDataNum(); + for (int i = 0; i < num; i++) + be_swap(data[i]); + setIDataP(data); +#else setIDataP((int*)(i_data + getIDataTop())); +#endif } if (getSDataNum() > 0) { diff --git a/src/f_pc/f_pc_base.cpp b/src/f_pc/f_pc_base.cpp index bbeac76038..edd8a842f4 100644 --- a/src/f_pc/f_pc_base.cpp +++ b/src/f_pc/f_pc_base.cpp @@ -2,6 +2,7 @@ * f_pc_base.cpp * Framework - Process Base */ +#define PROCS_DUMP_NAMES 1 #include "f_pc/f_pc_base.h" #include "SSystem/SComponent/c_malloc.h" @@ -16,6 +17,21 @@ #include "Z2AudioLib/Z2AudioMgr.h" #include +#if TARGET_PC +#include "d/d_procname.h" + +static const char* getProcName(s16 id) { + for (auto procName : procNames) { + if (procName.id == id) { + return procName.name; + } + } + + return nullptr; +} + +#endif + BOOL fpcBs_Is_JustOfType(int i_typeA, int i_typeB) { if (i_typeB == i_typeA) { return TRUE; @@ -119,8 +135,8 @@ base_process_class* fpcBs_Create(s16 i_profname, fpc_ProcID i_procID, void* i_ap u32 size; pprofile = (process_profile_definition*)fpcPf_Get(i_profname); - printf("[DIAG] fpcBs_Create: profname=%d profile=%p procSize=%d unkSize=%d\n", - i_profname, pprofile, pprofile->process_size, pprofile->unk_size); fflush(stdout); + printf("[DIAG] fpcBs_Create: pid=%d profname=%s (%d) profile=%p procSize=%d unkSize=%d\n", + i_procID, getProcName(i_profname), i_profname, pprofile, pprofile->process_size, pprofile->unk_size); fflush(stdout); size = pprofile->process_size + pprofile->unk_size; pprocess = (base_process_class*)cMl::memalignB(-4, size);