From b480f7bfce867ff42dab8e55ccab146c5fbbe607 Mon Sep 17 00:00:00 2001 From: dbalatoni13 <40299962+dbalatoni13@users.noreply.github.com> Date: Mon, 7 Apr 2025 01:07:57 +0200 Subject: [PATCH] More byteswaps --- include/port/byteswap.h | 4 + src/REL/bootDll/main.c | 170 ++++++++++++++++++++-------------------- src/game/data.c | 11 ++- src/game/hsfload.c | 17 ++-- src/port/byteswap.cpp | 37 +++++++++ 5 files changed, 147 insertions(+), 92 deletions(-) diff --git a/include/port/byteswap.h b/include/port/byteswap.h index b1296121..26286fab 100644 --- a/include/port/byteswap.h +++ b/include/port/byteswap.h @@ -7,6 +7,7 @@ extern "C" #endif #include "game/animdata.h" +#include "game/hsfformat.h" void byteswap_u32(u32 *src); void byteswap_s32(s32 *src); @@ -17,6 +18,9 @@ void byteswap_animbmpdata(void *src, AnimBmpData *dest); void byteswap_animframedata(AnimFrameData *src); void byteswap_animlayerdata(AnimLayerData *src); + +void byteswap_hsfheader(HsfHeader *src); + #ifdef __cplusplus } #endif diff --git a/src/REL/bootDll/main.c b/src/REL/bootDll/main.c index eb32e58b..b0aa1f02 100644 --- a/src/REL/bootDll/main.c +++ b/src/REL/bootDll/main.c @@ -98,7 +98,7 @@ void ObjectSetup(void) Process *curr = HuPrcCurrentGet(); #if VERSION_NTSC if (omovlevtno == 0) { - //BootProgExec(); + BootProgExec(); } #else if(SystemInitF == FALSE) { @@ -119,14 +119,14 @@ void ObjectSetup(void) HuSprPosSet(group, 0, 288, 240); HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); if (omovlevtno != 0) { - HuAudSndGrpSetSet(0); - // data = HuSprAnimReadFile(TITLE_HUDSON_ANM); - // sprite_hudson = HuSprCreate(data, 0, 0); - // HuSprGrpMemberSet(group, 1, sprite_hudson); - // HuSprPosSet(group, 1, 288, 240); - // HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); - HuWinInit(1); - //BootTitleCreate(); + //HuAudSndGrpSetSet(0); + data = HuSprAnimReadFile(TITLE_HUDSON_ANM); + sprite_hudson = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 1, sprite_hudson); + HuSprPosSet(group, 1, 288, 240); + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); + //HuWinInit(1); + BootTitleCreate(); SystemInitF = 1; } else { @@ -162,21 +162,21 @@ void ObjectSetup(void) // TODO PC CharManInit(); #endif - HuWindowInit(); #ifdef __MWERKS__ // TODO PC + HuWindowInit(); MGSeqInit(); #endif //HuWinInit(1); - //BootTitleCreate(); - // data = HuSprAnimReadFile(TITLE_HUDSON_ANM); - // sprite_hudson = HuSprCreate(data, 0, 0); - // HuSprGrpMemberSet(group, 1, sprite_hudson); + BootTitleCreate(); + data = HuSprAnimReadFile(TITLE_HUDSON_ANM); + sprite_hudson = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 1, sprite_hudson); HuSprPosSet(group, 1, 288, 240); HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); - //while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { - // HuPrcVSleep(); - //} + while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { + HuPrcVSleep(); + } } else { for (i = 0; i < 180; i++) { @@ -209,9 +209,9 @@ void ObjectSetup(void) //group_samp = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(0)); //msmSysLoadGroup(0, group_samp, 0); //HuMemDirectFree(group_samp); - //while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { - // HuPrcVSleep(); - //} + while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { + HuPrcVSleep(); + } } else { for (i = 0; i < 180; i++) { @@ -234,21 +234,21 @@ void ObjectSetup(void) while (WipeStatGet()) { HuPrcVSleep(); } - //tick_prev = OSGetTick(); - //if (!SystemInitF) { + tick_prev = OSGetTick(); + if (!SystemInitF) { // HuAudSndGrpSetSet(0); - // SystemInitF = 1; - //} - //while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 1000) { - // HuPrcVSleep(); - //} + SystemInitF = 1; + } + while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 1000) { + HuPrcVSleep(); + } HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); group_thp = HuSprGrpCreate(1); //sprite_thp = HuTHPSprCreateVol("movie/opmov_a00.thp", 0, 100, 122); //HuSprGrpMemberSet(group_thp, 0, sprite_thp); //HuSprPosSet(group_thp, 0, 288, 240); - HuWinMesMaxSizeBetGet(win_size, MAKE_MESSID(54, 0), MAKE_MESSID(54, 4)); + //HuWinMesMaxSizeBetGet(win_size, MAKE_MESSID(54, 0), MAKE_MESSID(54, 4)); //demoWinId = HuWinCreate(-10000, 448 - win_size[1], win_size[0], win_size[1], 0); //HuWinMesSpeedSet(demoWinId, 0); //HuWinBGTPLvlSet(demoWinId, 0); @@ -272,7 +272,7 @@ void ObjectSetup(void) while (WipeStatGet()) { HuPrcVSleep(); } - HuWinKill(demoWinId); + //HuWinKill(demoWinId); //HuTHPClose(); HuPrcVSleep(); //HuSprGrpKill(group_thp); @@ -286,7 +286,7 @@ void ObjectSetup(void) goto repeat; } WipeColorSet(255, 255, 255); - HuAudSStreamAllFadeOut(500); + //HuAudSStreamAllFadeOut(500); WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); while (WipeStatGet()) { HuPrcVSleep(); @@ -328,10 +328,10 @@ void ObjectSetup(void) int i; for (i = 0; demoMessTimeTbl[i * 2] != -1; i++) { if (frame == demoMessTimeTbl[i * 2]) { - HuWinMesSet(demoWinId, MAKE_MESSID(54, i)); + //HuWinMesSet(demoWinId, MAKE_MESSID(54, i)); } if (frame == demoMessTimeTbl[(i * 2) + 1]) { - HuWinHomeClear(demoWinId); + //HuWinHomeClear(demoWinId); } } } @@ -365,19 +365,19 @@ void ObjectSetup(void) } #endif group = HuSprGrpCreate(3); - // data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CHOOSE_ANM); - // sprite = HuSprCreate(data, 0, 0); - // HuSprGrpMemberSet(group, 0, sprite); - // HuSprPosSet(group, 0, 288, 240); - // data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_ON_ANM); - // sprite = HuSprCreate(data, 0, 0); - // HuSprGrpMemberSet(group, 1, sprite); - // HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); - // data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_OFF_ANM); - // sprite = HuSprCreate(data, 0, 0); - // HuSprGrpMemberSet(group, 2, sprite); - // HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); - // HuSprAttrSet(group, 2, HUSPR_ATTR_DISPOFF); + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CHOOSE_ANM); + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 0, sprite); + HuSprPosSet(group, 0, 288, 240); + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_ON_ANM); + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 1, sprite); + HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_OFF_ANM); + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 2, sprite); + HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); + HuSprAttrSet(group, 2, HUSPR_ATTR_DISPOFF); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); while (WipeStatGet()) { HuPrcVSleep(); @@ -414,15 +414,15 @@ void ObjectSetup(void) #endif HuSprGrpKill(group); group = HuSprGrpCreate(1); - // if (!option) { - // data = HuSprAnimReadFile(TITLE_PROGRESSIVE_ON_ANM); - // } - // else { - // data = HuSprAnimReadFile(TITLE_PROGRESSIVE_OFF_ANM); - // } - // sprite = HuSprCreate(data, 0, 0); - // HuSprGrpMemberSet(group, 0, sprite); - // HuSprPosSet(group, 0, 288, 240); + if (!option) { + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_ON_ANM); + } + else { + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_OFF_ANM); + } + sprite = HuSprCreate(data, 0, 0); + HuSprGrpMemberSet(group, 0, sprite); + HuSprPosSet(group, 0, 288, 240); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); while (WipeStatGet()) { HuPrcVSleep(); @@ -557,28 +557,28 @@ void ObjectSetup(void) #else bootGrpId = HuSprGrpCreate(13); #endif - // sprite_data = HuSprAnimReadFile(TITLE_BG_ANM); - // sprite = HuSprCreate(sprite_data, 0, 0); - // HuSprGrpMemberSet(bootGrpId, 0, sprite); - // HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); - // HuSprDrawNoSet(bootGrpId, 0, 127); - // HuSprPosSet(bootGrpId, 0, 288, 240); - // sprite_data = HuSprAnimReadFile(TITLE_COPYRIGHT_ANM); - // sprite = HuSprCreate(sprite_data, 1, 0); - // HuSprGrpMemberSet(bootGrpId, 1, sprite); - // HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); - // HuSprPosSet(bootGrpId, 1, 288, 420); + sprite_data = HuSprAnimReadFile(TITLE_BG_ANM); + sprite = HuSprCreate(sprite_data, 0, 0); + HuSprGrpMemberSet(bootGrpId, 0, sprite); + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprDrawNoSet(bootGrpId, 0, 127); + HuSprPosSet(bootGrpId, 0, 288, 240); + sprite_data = HuSprAnimReadFile(TITLE_COPYRIGHT_ANM); + sprite = HuSprCreate(sprite_data, 1, 0); + HuSprGrpMemberSet(bootGrpId, 1, sprite); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprPosSet(bootGrpId, 1, 288, 420); #if VERSION_NTSC - // sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_ANM); - // sprite = HuSprCreate(sprite_data, 2, 0); - // HuSprGrpMemberSet(bootGrpId, 2, sprite); - // HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - // HuSprPosSet(bootGrpId, 2, 288, 380); - // sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); - // sprite = HuSprCreate(sprite_data, 0, 0); - // HuSprGrpMemberSet(bootGrpId, 3, sprite); - // HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - // HuSprPosSet(bootGrpId, 3, 288, 200); + sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_ANM); + sprite = HuSprCreate(sprite_data, 2, 0); + HuSprGrpMemberSet(bootGrpId, 2, sprite); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 2, 288, 380); + sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); + sprite = HuSprCreate(sprite_data, 0, 0); + HuSprGrpMemberSet(bootGrpId, 3, sprite); + HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 3, 288, 200); #else sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); sprite = HuSprCreate(sprite_data, 0, 0); @@ -586,11 +586,11 @@ void ObjectSetup(void) HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); HuSprPosSet(bootGrpId, 2, 288, 200); for(i=0; i<5; i++) { - // sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_EN_ANM+i); - // sprite = HuSprCreate(sprite_data, 3+i, 0); - // HuSprGrpMemberSet(bootGrpId, 3+i, sprite); - // HuSprAttrSet(bootGrpId, 3+i, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); - // HuSprPosSet(bootGrpId, 3+i, 288, 340); + sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_EN_ANM+i); + sprite = HuSprCreate(sprite_data, 3+i, 0); + HuSprGrpMemberSet(bootGrpId, 3+i, sprite); + HuSprAttrSet(bootGrpId, 3+i, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 3+i, 288, 340); } for(i=0; i<5; i++) { sprite_data = HuSprAnimReadFile(TITLE_LANGUAGE_EN_ANM+i); @@ -621,8 +621,8 @@ void ObjectSetup(void) // TODO PC OSReport(">>>>>>>>MSM_SE_SEL_01 %d\n", msmSeGetEntryID(2092, seNo)); OSReport(">>>>>>>>SE Num %d\n", msmSeGetNumPlay(0)); + HuAudSStreamPlay(20); #endif - //HuAudSStreamPlay(20); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); while (WipeStatGet()) { HuPrcVSleep(); @@ -744,10 +744,10 @@ void ObjectSetup(void) HuSprTPLvlSet(bootGrpId, 2, i / 10.0); } if (HuPadBtnDown[0] & PAD_BUTTON_START) { - s32 ret = HuAudFXPlay(2092); - if (ret < 0) { - OSReport(">>>>>Error %d\n", ret); - } + //s32 ret = HuAudFXPlay(2092); + //if (ret < 0) { + // OSReport(">>>>>Error %d\n", ret); + //} HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); return 1; } diff --git a/src/game/data.c b/src/game/data.c index 24373a3b..4686fa57 100644 --- a/src/game/data.c +++ b/src/game/data.c @@ -279,13 +279,20 @@ BOOL HuDataGetAsyncStat(s32 status) static void GetFileInfo(DataReadStat *read_stat, s32 file_num) { - uintptr_t *temp_ptr; - temp_ptr = (uintptr_t *)PTR_OFFSET(read_stat->dir, (file_num * 4))+1; + u32 *temp_ptr; + temp_ptr = (u32 *)PTR_OFFSET(read_stat->dir, (file_num * 4))+1; +#ifdef TARGET_PC + byteswap_u32(temp_ptr); +#endif read_stat->file = PTR_OFFSET(read_stat->dir, *temp_ptr); temp_ptr = read_stat->file; read_stat->raw_len = *temp_ptr++; read_stat->comp_type = *temp_ptr++; read_stat->file = temp_ptr; +#ifdef TARGET_PC + byteswap_u32(&read_stat->raw_len); + byteswap_u32(&read_stat->comp_type); +#endif } void *HuDataRead(s32 data_num) diff --git a/src/game/hsfload.c b/src/game/hsfload.c index d5db2471..d4472e0f 100644 --- a/src/game/hsfload.c +++ b/src/game/hsfload.c @@ -2,6 +2,10 @@ #include "string.h" #include "ctype.h" +#ifdef TARGET_PC +#include "port/byteswap.h" +#endif + #define AS_S16(field) (*((s16 *)&(field))) #define AS_U16(field) (*((u16 *)&(field))) @@ -117,11 +121,14 @@ static void FileLoad(void *data) fileptr = data; memcpy(&head, fileptr, sizeof(HsfHeader)); memset(&Model, 0, sizeof(HsfData)); - NSymIndex = (void **)((u32)fileptr+head.symbol.ofs); - StringTable = (char *)((u32)fileptr+head.string.ofs); - ClusterTop = (HsfCluster *)((u32)fileptr+head.cluster.ofs); - AttributeTop = (HsfAttribute *)((u32)fileptr+head.attribute.ofs); - MaterialTop = (HsfMaterial *)((u32)fileptr+head.material.ofs); +#ifdef TARGET_PC + byteswap_hsfheader(&head); +#endif + NSymIndex = (void **)((uintptr_t)fileptr+head.symbol.ofs); + StringTable = (char *)((uintptr_t)fileptr+head.string.ofs); + ClusterTop = (HsfCluster *)((uintptr_t)fileptr+head.cluster.ofs); + AttributeTop = (HsfAttribute *)((uintptr_t)fileptr + head.attribute.ofs); + MaterialTop = (HsfMaterial *)((uintptr_t)fileptr + head.material.ofs); } static HsfData *SetHsfModel(void) diff --git a/src/port/byteswap.cpp b/src/port/byteswap.cpp index 2358f02e..027978a2 100644 --- a/src/port/byteswap.cpp +++ b/src/port/byteswap.cpp @@ -311,6 +311,37 @@ template void bswap(B &base, AnimLayerData &obj) bswap_flat(base, obj.vtx, sizeof(obj.vtx) / sizeof(s16)); } +template void bswap(B &base, HsfSection &obj) +{ + bswap(base, obj.ofs); + bswap(base, obj.count); +} + +template void bswap(B &base, HsfHeader &obj) +{ + bswap(base, obj.scene); + bswap(base, obj.color); + bswap(base, obj.material); + bswap(base, obj.attribute); + bswap(base, obj.vertex); + bswap(base, obj.normal); + bswap(base, obj.st); + bswap(base, obj.face); + bswap(base, obj.object); + bswap(base, obj.bitmap); + bswap(base, obj.palette); + bswap(base, obj.motion); + bswap(base, obj.cenv); + bswap(base, obj.skeleton); + bswap(base, obj.part); + bswap(base, obj.cluster); + bswap(base, obj.shape); + bswap(base, obj.mapAttr); + bswap(base, obj.matrix); + bswap(base, obj.symbol); + bswap(base, obj.string); +} + void byteswap_u32(u32 *src) { bswap(*src, *src); @@ -362,3 +393,9 @@ void byteswap_animlayerdata(AnimLayerData *src) bswap(*src, *src); sVisitedPtrs.clear(); } + +void byteswap_hsfheader(HsfHeader *src) +{ + bswap(*src, *src); + sVisitedPtrs.clear(); +}