mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-07-11 13:08:33 -04:00
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
This commit is contained in:
@@ -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 */
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "JSystem/JSupport/JSUList.h"
|
||||
#include <dolphin/gx.h>
|
||||
#include <dolphin/mtx.h>
|
||||
#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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<s16> 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<BE(s16)> field_0x10[4];
|
||||
/* 0x20 */ u32 mCornerColor[4];
|
||||
}; // Size: 0x30
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,17 +4,18 @@
|
||||
#include <dolphin/gx.h>
|
||||
#include <dolphin/mtx.h>
|
||||
#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; }
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<u32> val;
|
||||
this->read(&val, sizeof(val));
|
||||
return val;
|
||||
}
|
||||
|
||||
u32 read32b() {
|
||||
u32 val;
|
||||
BE<u32> val;
|
||||
this->read(&val, sizeof(val));
|
||||
return val;
|
||||
}
|
||||
|
||||
s32 readS32() {
|
||||
s32 val;
|
||||
BE<s32> val;
|
||||
this->read(&val, sizeof(val));
|
||||
return val;
|
||||
}
|
||||
|
||||
s16 readS16() {
|
||||
s16 val;
|
||||
BE<s16> val;
|
||||
this->read(&val, sizeof(val));
|
||||
return val;
|
||||
}
|
||||
|
||||
u16 readU16() {
|
||||
u16 val;
|
||||
BE<u16> val;
|
||||
this->read(&val, sizeof(val));
|
||||
return val;
|
||||
}
|
||||
@@ -59,18 +60,20 @@ public:
|
||||
}
|
||||
|
||||
u16 read16b() {
|
||||
u16 val;
|
||||
BE<u16> 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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
+57
-56
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
+31
-2
@@ -18,9 +18,11 @@
|
||||
#include <stdlib.h>
|
||||
#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<f32, s32>(RES_S32(std::bit_cast<s32, f32>(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<TA>& operator op(BE<TA>& 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<u16>::swap(u16 val) {
|
||||
return RES_U16(val);
|
||||
@@ -122,6 +141,16 @@ inline s32 BE<s32>::swap(s32 val) {
|
||||
return RES_S32(val);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline s64 BE<s64>::swap(s64 val) {
|
||||
return RES_S64(val);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline u64 BE<u64>::swap(u64 val) {
|
||||
return RES_U64(val);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline f32 BE<f32>::swap(f32 val) {
|
||||
return RES_F32(val);
|
||||
|
||||
Reference in New Issue
Block a user