From c1bcbdc0677e5cf12f33fb59520d03b16ae232ad Mon Sep 17 00:00:00 2001 From: dbalatoni13 <40299962+dbalatoni13@users.noreply.github.com> Date: Sun, 6 Apr 2025 07:05:03 +0200 Subject: [PATCH] More exports --- CMakeLists.txt | 3 +- config/GMPE01_00/symbols.txt | 2 +- config/GMPE01_01/symbols.txt | 2 +- config/GMPJ01_00/symbols.txt | 2 +- config/GMPP01_00/symbols.txt | 2 +- dol.def | 31 ++ include/dolphin/os.h | 2 +- include/game/pad.h | 25 +- include/game/window.h | 7 +- include/game/wipe.h | 3 +- src/REL/bootDll/main.c | 924 ++++++++++++++++++----------------- src/game/main.c | 3 +- src/game/objmain.c | 5 +- src/game/pad.c | 22 +- src/game/window.c | 18 +- src/game/wipe.c | 2 +- src/port/audio.c | 707 +++++++++++++++++++++++++++ src/port/stubs.c | 9 +- 18 files changed, 1270 insertions(+), 499 deletions(-) create mode 100644 src/port/audio.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 41d2ddcc..795fcb2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,7 +40,6 @@ set(DOLPHIN_FILES set(GAME_FILES src/game/armem.c - src/game/audio.c src/game/card.c src/game/ClusterExec.c src/game/data.c @@ -73,12 +72,14 @@ set(GAME_FILES src/game/perf.c src/game/printfunc.c src/game/process.c + src/game/window.c src/game/wipe.c ) set(PORT_FILES src/port/ar.c src/port/arq.c + src/port/audio.c src/port/byteswap.cpp src/port/dvd.c src/port/imgui.cpp diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 17ef4f4f..6f350097 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -4620,7 +4620,7 @@ lbl_80192160 = .bss:0x80192160; // type:object size:0x100 lbl_80192260 = .bss:0x80192260; // type:object size:0x100 wipeData = .bss:0x80192360; // type:object size:0x4C data:4byte winData = .bss:0x801923C0; // type:object size:0x3000 align:32 data:byte -winKey = .bss:0x801953C0; // type:object size:0x10 +winKey = .bss:0x801953C0; // type:object size:0x10 scope:local winComKeyBuf = .bss:0x801953D0; // type:object size:0x1400 ARInfo = .bss:0x801967E0; // type:object size:0x400 scope:local data:byte arqReq = .bss:0x80196BE0; // type:object size:0x20 scope:local diff --git a/config/GMPE01_01/symbols.txt b/config/GMPE01_01/symbols.txt index 5bed188a..21137761 100644 --- a/config/GMPE01_01/symbols.txt +++ b/config/GMPE01_01/symbols.txt @@ -4619,7 +4619,7 @@ lbl_80192160 = .bss:0x80192160; // type:object size:0x100 lbl_80192260 = .bss:0x80192260; // type:object size:0x100 wipeData = .bss:0x80192360; // type:object size:0x4C data:4byte winData = .bss:0x801923C0; // type:object size:0x3000 align:32 data:byte -winKey = .bss:0x801953C0; // type:object size:0x10 +winKey = .bss:0x801953C0; // type:object size:0x10 scope:local winComKeyBuf = .bss:0x801953D0; // type:object size:0x1400 ARInfo = .bss:0x801967E0; // type:object size:0x400 data:byte arqReq = .bss:0x80196BE0; // type:object size:0x20 scope:local diff --git a/config/GMPJ01_00/symbols.txt b/config/GMPJ01_00/symbols.txt index ca5a261c..b4a34dc7 100644 --- a/config/GMPJ01_00/symbols.txt +++ b/config/GMPJ01_00/symbols.txt @@ -4452,7 +4452,7 @@ lbl_80192160 = .bss:0x80191E00; // type:object size:0x100 lbl_80192260 = .bss:0x80191F00; // type:object size:0x100 wipeData = .bss:0x80192000; // type:object size:0x4C data:4byte winData = .bss:0x80192060; // type:object size:0x3000 data:byte -winKey = .bss:0x80195060; // type:object size:0x10 +winKey = .bss:0x80195060; // type:object size:0x10 scope:local winComKeyBuf = .bss:0x80195070; // type:object size:0x1400 ARInfo = .bss:0x80196480; // type:object size:0x400 scope:local data:byte arqReq = .bss:0x80196880; // type:object size:0x20 scope:local diff --git a/config/GMPP01_00/symbols.txt b/config/GMPP01_00/symbols.txt index acf35410..70a581ce 100644 --- a/config/GMPP01_00/symbols.txt +++ b/config/GMPP01_00/symbols.txt @@ -5547,7 +5547,7 @@ lbl_80192160 = .bss:0x801AF500; // type:object size:0x100 lbl_80192260 = .bss:0x801AF600; // type:object size:0x100 wipeData = .bss:0x801AF700; // type:object size:0x4C data:4byte winData = .bss:0x801AF760; // type:object size:0x3000 align:32 data:byte -winKey = .bss:0x801B2760; // type:object size:0x10 +winKey = .bss:0x801B2760; // type:object size:0x10 scope:local winComKeyBuf = .bss:0x801B2770; // type:object size:0x1400 mesWInsert = .bss:0x801B3B70; // type:object size:0x10 scope:local ARInfo = .bss:0x801B3B80; // type:object size:0x400 data:byte diff --git a/dol.def b/dol.def index cef22cf5..578710d3 100644 --- a/dol.def +++ b/dol.def @@ -1,6 +1,10 @@ EXPORTS OSReport OSGetTick + HuAudFXPlay + HuAudSStreamAllFadeOut + HuAudSStreamPlay + HuAudSndGrpSetSet HuMemDirectMalloc HuMemDirectFree HuDataSelHeapReadNum @@ -20,8 +24,35 @@ EXPORTS HuPrcCurrentGet HuPrcSleep HuPrcVSleep + HuSprAnimRead + HuSprCreate + HuSprGrpCreate + HuSprGrpMemberSet + HuSprGrpKill + HuSprAttrSet + HuSprAttrReset + HuSprDrawNoSet + HuSprPosSet + HuSprScaleSet + HuSprTPLvlSet + HuWindowInit + HuWinInit + HuWinCreate + HuWinKill + HuWinHomeClear + HuWinPriSet + HuWinAttrSet + HuWinBGTPLvlSet + HuWinMesSpeedSet + HuWinMesSet + HuWinMesMaxSizeBetGet omOvlCallEx omOvlReturnEx omOvlHisChg omOvlHisGet omInitObjMan + WipeColorSet + WipeCreate + WipeExecAlways + WipeInit + WipeStatGet diff --git a/include/dolphin/os.h b/include/dolphin/os.h index 02750f79..bfe75527 100644 --- a/include/dolphin/os.h +++ b/include/dolphin/os.h @@ -225,7 +225,7 @@ BOOL OSRestoreInterrupts(BOOL level); #endif // _DEBUG -__declspec(dllexport) void OSReport(const char *msg, ...); +void OSReport(const char *msg, ...); void OSPanic(const char *file, int line, const char *msg, ...); void OSFatal(GXColor fg, GXColor bg, const char *msg); diff --git a/include/game/pad.h b/include/game/pad.h index 2223f0b4..3c279ff4 100644 --- a/include/game/pad.h +++ b/include/game/pad.h @@ -2,23 +2,24 @@ #define _GAME_PAD_H #include "dolphin.h" +#include "version.h" #define PAD_BUTTON_DIR (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN) #define PAD_BUTTON_TRIGGER_L 0x4000 #define PAD_BUTTON_TRIGGER_R 0x2000 -extern u16 HuPadBtn[4]; -extern u16 HuPadBtnDown[4]; -extern u16 HuPadBtnRep[4]; -extern s8 HuPadStkX[4]; -extern s8 HuPadStkY[4]; -extern s8 HuPadSubStkX[4]; -extern s8 HuPadSubStkY[4]; -extern u8 HuPadTrigL[4]; -extern u8 HuPadTrigR[4]; -extern u8 HuPadDStk[4]; -extern u8 HuPadDStkRep[4]; +SHARED_SYM extern u16 HuPadBtn[4]; +SHARED_SYM extern u16 HuPadBtnDown[4]; +SHARED_SYM extern u16 HuPadBtnRep[4]; +SHARED_SYM extern s8 HuPadStkX[4]; +SHARED_SYM extern s8 HuPadStkY[4]; +SHARED_SYM extern s8 HuPadSubStkX[4]; +SHARED_SYM extern s8 HuPadSubStkY[4]; +SHARED_SYM extern u8 HuPadTrigL[4]; +SHARED_SYM extern u8 HuPadTrigR[4]; +SHARED_SYM extern u8 HuPadDStk[4]; +SHARED_SYM extern u8 HuPadDStkRep[4]; extern s8 HuPadErr[4]; extern u16 _PadBtn[4]; extern u16 _PadBtnDown[4]; @@ -32,4 +33,4 @@ void HuPadRumbleAllStop(void); s16 HuPadStatGet(s16 pad); u32 HuPadRumbleGet(void); -#endif \ No newline at end of file +#endif diff --git a/include/game/window.h b/include/game/window.h index a2ff8eb1..05afd68d 100644 --- a/include/game/window.h +++ b/include/game/window.h @@ -3,6 +3,7 @@ #include "game/animdata.h" #include "dolphin.h" +#include "version.h" #define MAKE_MESSID(bank, mess) (((bank) << 16)+(mess)) #define MAKE_MESSID_PTR(ptr) ((u32)(ptr)) @@ -75,8 +76,8 @@ typedef struct { /* 0x160 */ u8 ATTRIBUTE_ALIGN(32) mess_pal[10][3]; } WindowData; // Size 0x180 -extern WindowData winData[32]; -extern void *messDataPtr; +SHARED_SYM extern WindowData winData[32]; +SHARED_SYM extern void *messDataPtr; void HuWindowInit(void); void HuWinInit(s32 mess_data_no); @@ -139,6 +140,4 @@ void HuWinExCleanup(s16 window); void HuWinExAnimPopIn(s16 window, s16 portrait); void *MessData_MesPtrGet(void *data, u32 index); -extern void *messDataPtr; - #endif diff --git a/include/game/wipe.h b/include/game/wipe.h index baafbe25..52f2f985 100644 --- a/include/game/wipe.h +++ b/include/game/wipe.h @@ -2,6 +2,7 @@ #define _GAME_WIPE_H #include "dolphin.h" +#include "version.h" #define WIPE_TYPE_PREV -1 #define WIPE_TYPE_NORMAL 0 @@ -37,7 +38,7 @@ void WipeCreate(s16 mode, s16 type, s16 duration); void WipeColorSet(u8 r, u8 g, u8 b); u8 WipeStatGet(void); -extern WipeState wipeData; +SHARED_SYM extern WipeState wipeData; extern BOOL wipeFadeInF; #endif diff --git a/src/REL/bootDll/main.c b/src/REL/bootDll/main.c index a3dc0d93..24793ced 100644 --- a/src/REL/bootDll/main.c +++ b/src/REL/bootDll/main.c @@ -23,7 +23,7 @@ #define HU_PAD_BTNDOWN_ALL (HuPadBtnDown[0] | HuPadBtnDown[1] | HuPadBtnDown[2] | HuPadBtnDown[3]) #define HU_PAD_DSTK_ALL (HuPadDStkRep[0] | HuPadDStkRep[1] | HuPadDStkRep[2] | HuPadDStkRep[3]) -extern int SystemInitF; +SHARED_SYM extern int SystemInitF; static omObjData *debugOutView; Process *objman; @@ -158,9 +158,15 @@ void ObjectSetup(void) WipeColorSet(255, 255, 255); if (!SystemInitF) { tick_prev = OSGetTick(); +#ifdef __MWERKS__ + // TODO PC CharManInit(); +#endif HuWindowInit(); +#ifdef __MWERKS__ + // TODO PC MGSeqInit(); +#endif HuWinInit(1); BootTitleCreate(); data = HuSprAnimReadFile(TITLE_HUDSON_ANM); @@ -198,11 +204,11 @@ void ObjectSetup(void) HuPrcVSleep(); } if (!SystemInitF) { - void *group_samp; + //void *group_samp; tick_prev = OSGetTick(); - group_samp = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(0)); - msmSysLoadGroup(0, group_samp, 0); - HuMemDirectFree(group_samp); + //group_samp = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(0)); + //msmSysLoadGroup(0, group_samp, 0); + //HuMemDirectFree(group_samp); while (OSTicksToMilliseconds(OSGetTick() - tick_prev) < 3000) { HuPrcVSleep(); } @@ -239,9 +245,9 @@ void ObjectSetup(void) 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); + //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)); demoWinId = HuWinCreate(-10000, 448 - win_size[1], win_size[0], win_size[1], 0); HuWinMesSpeedSet(demoWinId, 0); @@ -254,22 +260,22 @@ void ObjectSetup(void) HuPrcVSleep(); } skip_wait = FALSE; - while (!HuTHPEndCheck()) { - UpdateDemoMess(); - if (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A)) { - skip_wait = TRUE; - break; - } - HuPrcVSleep(); - } + //while (!HuTHPEndCheck()) { + // UpdateDemoMess(); + // if (HuPadBtnDown[0] & (PAD_BUTTON_START | PAD_BUTTON_A)) { + // skip_wait = TRUE; + // break; + // } + // HuPrcVSleep(); + //} WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); while (WipeStatGet()) { HuPrcVSleep(); } HuWinKill(demoWinId); - HuTHPClose(); + //HuTHPClose(); HuPrcVSleep(); - HuSprGrpKill(group_thp); + //HuSprGrpKill(group_thp); if (!skip_wait) { HuPrcSleep(60); } @@ -330,458 +336,468 @@ void ObjectSetup(void) } } -// #if VERSION_NTSC + #if VERSION_NTSC -// static u16 progPosTbl[] = { 236, 313, 353, 313 }; + static u16 progPosTbl[] = { 236, 313, 353, 313 }; -// void BootProgExec(void) -// { -// s16 i; -// s16 option; -// s16 group; -// s16 sprite; -// AnimData *data; -// option = 0; -// if (OSGetResetCode() != OS_RESET_RESTART) { -// return; -// } -// if (VIGetDTVStatus() != VI_NON_INTERLACE) { -// OSSetProgressiveMode(OS_PROGRESSIVE_MODE_OFF); -// return; -// } -// if (OSGetProgressiveMode() == OS_PROGRESSIVE_MODE_OFF && !(HU_PAD_BTN_ALL & PAD_BUTTON_B)) { -// return; -// } -// if (OSGetProgressiveMode() == OS_PROGRESSIVE_MODE_ON) { -// VIConfigure(&GXNtsc480IntDf); -// VIFlush(); -// } -// 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); -// WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); -// while (WipeStatGet()) { -// HuPrcVSleep(); -// } -// for (i = 0; i < 600; i++) { -// if (HU_PAD_DSTK_ALL & (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT)) { -// option ^= 1; -// HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); -// i = 0; -// } -// if (HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { -// HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); -// HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); -// HuSprAttrReset(group, 2, HUSPR_ATTR_DISPOFF); -// break; -// } -// HuPrcVSleep(); -// } -// WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); -// while (WipeStatGet()) { -// HuPrcVSleep(); -// } -// if (!option) { -// OSSetProgressiveMode(OS_PROGRESSIVE_MODE_ON); -// VIConfigure(&GXNtsc480Prog); -// VIFlush(); -// HuPrcSleep(100); -// } -// else { -// OSSetProgressiveMode(OS_PROGRESSIVE_MODE_OFF); -// } -// 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); -// WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); -// while (WipeStatGet()) { -// HuPrcVSleep(); -// } -// HuPrcSleep(60); -// for (i = 0; i < 180; i++) { -// if (HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { -// break; -// } -// HuPrcVSleep(); -// } -// WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); -// while (WipeStatGet()) { -// HuPrcVSleep(); -// } -// HuSprGrpKill(group); -// HuPrcSleep(30); -// } + void BootProgExec(void) + { + s16 i; + s16 option; + s16 group; + s16 sprite; + AnimData *data; + option = 0; +#ifdef __MWERKS__ + if (OSGetResetCode() != OS_RESET_RESTART) { + return; + } + if (VIGetDTVStatus() != VI_NON_INTERLACE) { + OSSetProgressiveMode(OS_PROGRESSIVE_MODE_OFF); + return; + } + if (OSGetProgressiveMode() == OS_PROGRESSIVE_MODE_OFF && !(HU_PAD_BTN_ALL & PAD_BUTTON_B)) { + return; + } + if (OSGetProgressiveMode() == OS_PROGRESSIVE_MODE_ON) { + VIConfigure(&GXNtsc480IntDf); + VIFlush(); + } +#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); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + for (i = 0; i < 600; i++) { + if (HU_PAD_DSTK_ALL & (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT)) { + option ^= 1; + HuSprPosSet(group, 1, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); + i = 0; + } + if (HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); + HuSprPosSet(group, 2, progPosTbl[option * 2], progPosTbl[(option * 2) + 1]); + HuSprAttrReset(group, 2, HUSPR_ATTR_DISPOFF); + break; + } + HuPrcVSleep(); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); + while (WipeStatGet()) { + HuPrcVSleep(); + } +#ifdef __MWERKS__ + // TODO PC + if (!option) { + OSSetProgressiveMode(OS_PROGRESSIVE_MODE_ON); + VIConfigure(&GXNtsc480Prog); + VIFlush(); + HuPrcSleep(100); + } + else { + OSSetProgressiveMode(OS_PROGRESSIVE_MODE_OFF); + } +#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); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 20); + while (WipeStatGet()) { + HuPrcVSleep(); + } + HuPrcSleep(60); + for (i = 0; i < 180; i++) { + if (HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { + break; + } + HuPrcVSleep(); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + HuSprGrpKill(group); + HuPrcSleep(30); + } -// #endif + #endif -// static u16 debugCamTbl[] = { 1, 2 }; + static u16 debugCamTbl[] = { 1, 2 }; -// void DebugCamOutView(omObjData *obj) -// { -// s16 i; -// for (i = 0; i < 1; i++) { -// Vec pos, target, up; -// float x, y, z; + void DebugCamOutView(omObjData *obj) + { + s16 i; + for (i = 0; i < 1; i++) { + Vec pos, target, up; + float x, y, z; -// x = debugCamRot[i].x; -// y = debugCamRot[i].y; -// z = debugCamRot[i].z; + x = debugCamRot[i].x; + y = debugCamRot[i].y; + z = debugCamRot[i].z; -// pos.x = (((sind(y) * cosd(x)) * debugCamZoom[i]) + debugCamPos[i].x); -// pos.y = (-sind(x) * debugCamZoom[i]) + debugCamPos[i].y; -// pos.z = ((cosd(y) * cosd(x)) * debugCamZoom[i]) + debugCamPos[i].z; -// target.x = debugCamPos[i].x; -// target.y = debugCamPos[i].y; -// target.z = debugCamPos[i].z; -// up.x = sind(y) * sind(x); -// up.y = cosd(x); -// up.z = cosd(y) * sind(x); -// Hu3DCameraPosSet(debugCamTbl[i], pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); -// } -// } + pos.x = (((sind(y) * cosd(x)) * debugCamZoom[i]) + debugCamPos[i].x); + pos.y = (-sind(x) * debugCamZoom[i]) + debugCamPos[i].y; + pos.z = ((cosd(y) * cosd(x)) * debugCamZoom[i]) + debugCamPos[i].z; + target.x = debugCamPos[i].x; + target.y = debugCamPos[i].y; + target.z = debugCamPos[i].z; + up.x = sind(y) * sind(x); + up.y = cosd(x); + up.z = cosd(y) * sind(x); + Hu3DCameraPosSet(debugCamTbl[i], pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); + } + } -// void DebugCamUpdate(omObjData *obj) -// { -// Vec pos; -// Vec offset; -// Vec dir; -// Vec y_offset; + #ifdef __MWERKS__ + void DebugCamUpdate(omObjData *obj) + { + Vec pos; + Vec offset; + Vec dir; + Vec y_offset; -// f32 z_rot; -// s8 stick_pos; + f32 z_rot; + s8 stick_pos; -// #if VERSION_NTSC -// if ((HuPadBtnDown[0] & 0x800)) { -// debugCamOnF = (debugCamOnF) ? 0 : 1; -// } -// #endif -// if (debugCamOnF != 0) { -// debugCamRot[0].y += 0.1f * HuPadStkX[0]; -// debugCamRot[0].x += 0.1f * HuPadStkY[0]; -// debugCamZoom[0] += HuPadTrigL[0] / 2; -// debugCamZoom[0] -= HuPadTrigR[0] / 2; -// if (debugCamZoom[0] < 100.0f) { -// debugCamZoom[0] = 100.0f; -// } -// pos.x = debugCamPos[0].x + (debugCamZoom[0] * (sind(debugCamRot[0].y) * cosd(debugCamRot[0].x))); -// pos.y = (debugCamPos[0].y + (debugCamZoom[0] * -sind(debugCamRot[0].x))); -// pos.z = (debugCamPos[0].z + (debugCamZoom[0] * (cosd(debugCamRot[0].y) * cosd(debugCamRot[0].x)))); -// offset.x = debugCamPos[0].x - pos.x; -// offset.y = debugCamPos[0].y - pos.y; -// offset.z = debugCamPos[0].z - pos.z; -// dir.x = (sind(debugCamRot[0].y) * sind(debugCamRot[0].x)); -// dir.y = cosd(debugCamRot[0].x); -// dir.z = (cosd(debugCamRot[0].y) * sind(debugCamRot[0].x)); -// z_rot = debugCamRot[0].z; -// y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cosd(z_rot)) -// + dir.y * (offset.x * offset.y * (1.0f - cosd(z_rot)) - offset.z * sind(z_rot)) -// + dir.z * (offset.x * offset.z * (1.0f - cosd(z_rot)) + offset.y * sind(z_rot)); + #if VERSION_NTSC + if ((HuPadBtnDown[0] & 0x800)) { + debugCamOnF = (debugCamOnF) ? 0 : 1; + } + #endif + if (debugCamOnF != 0) { + debugCamRot[0].y += 0.1f * HuPadStkX[0]; + debugCamRot[0].x += 0.1f * HuPadStkY[0]; + debugCamZoom[0] += HuPadTrigL[0] / 2; + debugCamZoom[0] -= HuPadTrigR[0] / 2; + if (debugCamZoom[0] < 100.0f) { + debugCamZoom[0] = 100.0f; + } + pos.x = debugCamPos[0].x + (debugCamZoom[0] * (sind(debugCamRot[0].y) * cosd(debugCamRot[0].x))); + pos.y = (debugCamPos[0].y + (debugCamZoom[0] * -sind(debugCamRot[0].x))); + pos.z = (debugCamPos[0].z + (debugCamZoom[0] * (cosd(debugCamRot[0].y) * cosd(debugCamRot[0].x)))); + offset.x = debugCamPos[0].x - pos.x; + offset.y = debugCamPos[0].y - pos.y; + offset.z = debugCamPos[0].z - pos.z; + dir.x = (sind(debugCamRot[0].y) * sind(debugCamRot[0].x)); + dir.y = cosd(debugCamRot[0].x); + dir.z = (cosd(debugCamRot[0].y) * sind(debugCamRot[0].x)); + z_rot = debugCamRot[0].z; + y_offset.x = dir.x * (offset.x * offset.x + (1.0f - offset.x * offset.x) * cosd(z_rot)) + + dir.y * (offset.x * offset.y * (1.0f - cosd(z_rot)) - offset.z * sind(z_rot)) + + dir.z * (offset.x * offset.z * (1.0f - cosd(z_rot)) + offset.y * sind(z_rot)); -// y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cosd(z_rot)) -// + dir.x * (offset.x * offset.y * (1.0f - cosd(z_rot)) + offset.z * sind(z_rot)) -// + dir.z * (offset.y * offset.z * (1.0f - cosd(z_rot)) - offset.x * sind(z_rot)); + y_offset.y = dir.y * (offset.y * offset.y + (1.0f - offset.y * offset.y) * cosd(z_rot)) + + dir.x * (offset.x * offset.y * (1.0f - cosd(z_rot)) + offset.z * sind(z_rot)) + + dir.z * (offset.y * offset.z * (1.0f - cosd(z_rot)) - offset.x * sind(z_rot)); -// y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cosd(z_rot)) -// + (dir.x * (offset.x * offset.z * (1.0 - cosd(z_rot)) - offset.y * sind(z_rot)) -// + dir.y * (offset.y * offset.z * (1.0 - cosd(z_rot)) + offset.x * sind(z_rot))); + y_offset.z = dir.z * (offset.z * offset.z + (1.0f - offset.z * offset.z) * cosd(z_rot)) + + (dir.x * (offset.x * offset.z * (1.0 - cosd(z_rot)) - offset.y * sind(z_rot)) + + dir.y * (offset.y * offset.z * (1.0 - cosd(z_rot)) + offset.x * sind(z_rot))); -// VECCrossProduct(&dir, &offset, &offset); -// VECNormalize(&offset, &offset); -// stick_pos = (HuPadSubStkX[0] & 0xF8); -// if (stick_pos != 0) { -// debugCamPos[0].x += 0.05f * (offset.x * stick_pos); -// debugCamPos[0].y += 0.05f * (offset.y * stick_pos); -// debugCamPos[0].z += 0.05f * (offset.z * stick_pos); -// } -// VECNormalize(&y_offset, &offset); -// stick_pos = -(HuPadSubStkY[0] & 0xF8); -// if (stick_pos != 0) { -// debugCamPos[0].x += 0.05f * (offset.x * stick_pos); -// debugCamPos[0].y += 0.05f * (offset.y * stick_pos); -// debugCamPos[0].z += 0.05f * (offset.z * stick_pos); -// } -// } -// } + VECCrossProduct(&dir, &offset, &offset); + VECNormalize(&offset, &offset); + stick_pos = (HuPadSubStkX[0] & 0xF8); + if (stick_pos != 0) { + debugCamPos[0].x += 0.05f * (offset.x * stick_pos); + debugCamPos[0].y += 0.05f * (offset.y * stick_pos); + debugCamPos[0].z += 0.05f * (offset.z * stick_pos); + } + VECNormalize(&y_offset, &offset); + stick_pos = -(HuPadSubStkY[0] & 0xF8); + if (stick_pos != 0) { + debugCamPos[0].x += 0.05f * (offset.x * stick_pos); + debugCamPos[0].y += 0.05f * (offset.y * stick_pos); + debugCamPos[0].z += 0.05f * (offset.z * stick_pos); + } + } + } +#endif -// void BootTitleCreate(void) -// { -// s16 model; -// s16 sprite; -// AnimData *sprite_data; -// s16 i; -// titleMdlId[0] = model = Hu3DModelCreateFile(TITLE_CHAR_HSF); -// Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); -// Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); -// titleMdlId[1] = model = Hu3DModelCreateFile(TITLE_CUBE_HSF); -// Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); -// Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); -// titleMdlId[2] = model = Hu3DModelCreateFile(TITLE_SKY_HSF); -// Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); -// Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); -// Hu3DModelCameraInfoSet(model, 1); -// Hu3DModelLightInfoSet(model, 1); -// #if VERSION_NTSC -// bootGrpId = HuSprGrpCreate(4); -// #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); -// #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); -// #else -// sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); -// sprite = HuSprCreate(sprite_data, 0, 0); -// HuSprGrpMemberSet(bootGrpId, 2, sprite); -// 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); -// } -// for(i=0; i<5; i++) { -// sprite_data = HuSprAnimReadFile(TITLE_LANGUAGE_EN_ANM+i); -// sprite = HuSprCreate(sprite_data, 8+i, 0); -// HuSprGrpMemberSet(bootGrpId, 8+i, sprite); -// HuSprAttrSet(bootGrpId, 8+i, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); -// HuSprPosSet(bootGrpId, 8+i, 288, 380); -// } -// #endif -// } + void BootTitleCreate(void) + { + s16 model; + s16 sprite; + AnimData *sprite_data; + s16 i; + titleMdlId[0] = model = Hu3DModelCreateFile(TITLE_CHAR_HSF); + Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); + titleMdlId[1] = model = Hu3DModelCreateFile(TITLE_CUBE_HSF); + Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); + titleMdlId[2] = model = Hu3DModelCreateFile(TITLE_SKY_HSF); + Hu3DModelAttrSet(model, HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(model, HU3D_MOTATTR_LOOP); + Hu3DModelCameraInfoSet(model, 1); + Hu3DModelLightInfoSet(model, 1); + #if VERSION_NTSC + bootGrpId = HuSprGrpCreate(4); + #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); + #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); + #else + sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); + sprite = HuSprCreate(sprite_data, 0, 0); + HuSprGrpMemberSet(bootGrpId, 2, sprite); + 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); + } + for(i=0; i<5; i++) { + sprite_data = HuSprAnimReadFile(TITLE_LANGUAGE_EN_ANM+i); + sprite = HuSprCreate(sprite_data, 8+i, 0); + HuSprGrpMemberSet(bootGrpId, 8+i, sprite); + HuSprAttrSet(bootGrpId, 8+i, HUSPR_ATTR_DISPOFF | HUSPR_ATTR_LINEAR); + HuSprPosSet(bootGrpId, 8+i, 288, 380); + } + #endif + } -// BOOL BootTitleExec(void) -// { -// float scale; -// float scale_time; -// int seNo[32]; -// s16 pressStartMemberNo; -// s16 languageMemberNo; -// s16 i; -// s16 choice; -// float temp; -// repeat: -// Hu3DModelAttrReset(titleMdlId[0], HU3D_ATTR_DISPOFF); -// Hu3DModelAttrReset(titleMdlId[1], HU3D_ATTR_DISPOFF); -// HuSprAttrReset(bootGrpId, 0, HUSPR_ATTR_DISPOFF); -// HuSprAttrReset(bootGrpId, 1, HUSPR_ATTR_DISPOFF); -// OSReport(">>>>>>>>MSM_SE_SEL_01 %d\n", msmSeGetEntryID(2092, seNo)); -// OSReport(">>>>>>>>SE Num %d\n", msmSeGetNumPlay(0)); -// HuAudSStreamPlay(20); -// WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); -// while (WipeStatGet()) { -// HuPrcVSleep(); -// } -// #if VERSION_NTSC -// HuSprAttrReset(bootGrpId, 3, HUSPR_ATTR_DISPOFF); -// for (i = 1; i <= 50; i++) { -// scale = (cosd(i * 1.8) * 10.0) + 1.0; -// HuSprScaleSet(bootGrpId, 3, scale, scale); -// HuSprTPLvlSet(bootGrpId, 3, i / 50.0); -// HuPrcVSleep(); -// } -// HuSprAttrReset(bootGrpId, 2, HUSPR_ATTR_DISPOFF); -// #else -// HuSprAttrReset(bootGrpId, 2, HUSPR_ATTR_DISPOFF); -// for (i = 1; i <= 50; i++) { -// scale = (cosd(i * 1.8) * 10.0) + 1.0; -// HuSprScaleSet(bootGrpId, 2, scale, scale); -// HuSprTPLvlSet(bootGrpId, 2, i / 50.0); -// HuPrcVSleep(); -// } -// if(GwLanguage == -1) { -// pressStartMemberNo = 3; -// languageMemberNo = 8; -// } else { -// pressStartMemberNo = GwLanguage+3-1; -// languageMemberNo = GwLanguage+8-1; -// } -// HuSprAttrReset(bootGrpId, pressStartMemberNo, HUSPR_ATTR_DISPOFF); -// HuSprAttrReset(bootGrpId, languageMemberNo, HUSPR_ATTR_DISPOFF); -// for(i=1; i<=20; i++) { -// scale = sind(i*4.5); -// HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); -// HuSprScaleSet(bootGrpId, languageMemberNo, scale*0.7, scale*0.7); -// HuPrcVSleep(); -// } -// choice = 0; -// scale_time = 0; -// #endif + BOOL BootTitleExec(void) + { + float scale; + float scale_time; + int seNo[32]; + s16 pressStartMemberNo; + s16 languageMemberNo; + s16 i; + s16 choice; + float temp; + repeat: + Hu3DModelAttrReset(titleMdlId[0], HU3D_ATTR_DISPOFF); + Hu3DModelAttrReset(titleMdlId[1], HU3D_ATTR_DISPOFF); + HuSprAttrReset(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(bootGrpId, 1, HUSPR_ATTR_DISPOFF); +#ifdef __MWERKS__ + // TODO PC + OSReport(">>>>>>>>MSM_SE_SEL_01 %d\n", msmSeGetEntryID(2092, seNo)); + OSReport(">>>>>>>>SE Num %d\n", msmSeGetNumPlay(0)); +#endif + HuAudSStreamPlay(20); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + #if VERSION_NTSC + HuSprAttrReset(bootGrpId, 3, HUSPR_ATTR_DISPOFF); + for (i = 1; i <= 50; i++) { + scale = (cosd(i * 1.8) * 10.0) + 1.0; + HuSprScaleSet(bootGrpId, 3, scale, scale); + HuSprTPLvlSet(bootGrpId, 3, i / 50.0); + HuPrcVSleep(); + } + HuSprAttrReset(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + #else + HuSprAttrReset(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + for (i = 1; i <= 50; i++) { + scale = (cosd(i * 1.8) * 10.0) + 1.0; + HuSprScaleSet(bootGrpId, 2, scale, scale); + HuSprTPLvlSet(bootGrpId, 2, i / 50.0); + HuPrcVSleep(); + } + if(GwLanguage == -1) { + pressStartMemberNo = 3; + languageMemberNo = 8; + } else { + pressStartMemberNo = GwLanguage+3-1; + languageMemberNo = GwLanguage+8-1; + } + HuSprAttrReset(bootGrpId, pressStartMemberNo, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(bootGrpId, languageMemberNo, HUSPR_ATTR_DISPOFF); + for(i=1; i<=20; i++) { + scale = sind(i*4.5); + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + HuSprScaleSet(bootGrpId, languageMemberNo, scale*0.7, scale*0.7); + HuPrcVSleep(); + } + choice = 0; + scale_time = 0; + #endif -// #if VERSION_NTSC -// for (i = scale_time = 0; i < 1800; i++) { -// #else -// for (i = temp = 0; i < 1800; i++) { -// #endif -// #if VERSION_PAL -// if((choice == 0 && (HuPadDStkRep[0] & PAD_BUTTON_DOWN)) || (choice != 0 && (HuPadDStkRep[0] & PAD_BUTTON_UP))) { -// HuAudFXPlay(0); -// for(i=1; i<=10; i++) { -// scale = ((1-(i/10.0))*(((cosd(scale_time)*0.1)+0.9)-0.7))+0.7; -// if(choice == 0) { -// HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); -// } else { -// HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); -// } -// scale = ((1-(i/10.0))*(((cosd(scale_time/3.0)*0.05)+0.65)-1.0))+1.0; -// if(choice == 0) { -// HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); -// } else { -// HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); -// } -// HuPrcVSleep(); -// } -// choice ^= 1; -// scale_time = 0; -// } -// if (HuPadBtnDown[0] & (PAD_BUTTON_START|PAD_BUTTON_A)) { -// if(choice == 0) { -// s32 ret = HuAudFXPlay(2092); -// if (ret < 0) { -// OSReport(">>>>>Error %d\n", ret); -// } -// HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); -// return 1; -// } else { -// HuAudFXPlay(1); -// HuAudSStreamAllFadeOut(500); -// WipeColorSet(255, 255, 255); -// WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); -// while (WipeStatGet()) { -// HuPrcVSleep(); -// } -// Hu3DModelAttrSet(titleMdlId[0], HU3D_ATTR_DISPOFF); -// Hu3DModelAttrSet(titleMdlId[1], HU3D_ATTR_DISPOFF); -// Hu3DModelAttrSet(titleMdlId[2], HU3D_ATTR_DISPOFF); -// HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); -// HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); -// HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); -// HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); -// for(i=0; i<5; i++) { -// HuSprAttrSet(bootGrpId, i+3, HUSPR_ATTR_DISPOFF); -// } -// for(i=0; i<5; i++) { -// HuSprAttrSet(bootGrpId, i+8, HUSPR_ATTR_DISPOFF); -// } -// LanguageMenuExec(); -// Hu3DModelCameraInfoSet(titleMdlId[2], 1); -// Hu3DModelLightInfoSet(titleMdlId[2], 1); -// HuWinInit(1); -// goto repeat; -// } -// } -// scale = (cosd(scale_time) * 0.1) + 0.9; -// if(choice == 0) { -// HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); -// } else { -// HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); -// } -// scale = (cosd(scale_time/3.0) * 0.05) + 0.65; -// if(choice == 0) { -// HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); -// } else { -// HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); -// } -// scale_time += 5; -// HuPrcVSleep(); -// #else -// if (i <= 10) { -// HuSprTPLvlSet(bootGrpId, 2, i / 10.0); -// } -// if (HuPadBtnDown[0] & PAD_BUTTON_START) { -// s32 ret = HuAudFXPlay(2092); -// if (ret < 0) { -// OSReport(">>>>>Error %d\n", ret); -// } -// HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); -// return 1; -// } -// scale = (sind(i * scale_time) * 0.1) + 0.9; -// scale_time += 0.05; -// if (scale_time > 5) { -// scale_time = 5; -// } -// HuSprScaleSet(bootGrpId, 2, scale, scale); -// HuPrcVSleep(); -// #endif + #if VERSION_NTSC + for (i = scale_time = 0; i < 1800; i++) { + #else + for (i = temp = 0; i < 1800; i++) { + #endif + #if VERSION_PAL + if((choice == 0 && (HuPadDStkRep[0] & PAD_BUTTON_DOWN)) || (choice != 0 && (HuPadDStkRep[0] & PAD_BUTTON_UP))) { + HuAudFXPlay(0); + for(i=1; i<=10; i++) { + scale = ((1-(i/10.0))*(((cosd(scale_time)*0.1)+0.9)-0.7))+0.7; + if(choice == 0) { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } + scale = ((1-(i/10.0))*(((cosd(scale_time/3.0)*0.05)+0.65)-1.0))+1.0; + if(choice == 0) { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } + HuPrcVSleep(); + } + choice ^= 1; + scale_time = 0; + } + if (HuPadBtnDown[0] & (PAD_BUTTON_START|PAD_BUTTON_A)) { + if(choice == 0) { + s32 ret = HuAudFXPlay(2092); + if (ret < 0) { + OSReport(">>>>>Error %d\n", ret); + } + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + return 1; + } else { + HuAudFXPlay(1); + HuAudSStreamAllFadeOut(500); + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + Hu3DModelAttrSet(titleMdlId[0], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[1], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[2], HU3D_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+3, HUSPR_ATTR_DISPOFF); + } + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+8, HUSPR_ATTR_DISPOFF); + } + LanguageMenuExec(); + Hu3DModelCameraInfoSet(titleMdlId[2], 1); + Hu3DModelLightInfoSet(titleMdlId[2], 1); + HuWinInit(1); + goto repeat; + } + } + scale = (cosd(scale_time) * 0.1) + 0.9; + if(choice == 0) { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } + scale = (cosd(scale_time/3.0) * 0.05) + 0.65; + if(choice == 0) { + HuSprScaleSet(bootGrpId, languageMemberNo, scale, scale); + } else { + HuSprScaleSet(bootGrpId, pressStartMemberNo, scale, scale); + } + scale_time += 5; + HuPrcVSleep(); + #else + if (i <= 10) { + HuSprTPLvlSet(bootGrpId, 2, i / 10.0); + } + if (HuPadBtnDown[0] & PAD_BUTTON_START) { + s32 ret = HuAudFXPlay(2092); + if (ret < 0) { + OSReport(">>>>>Error %d\n", ret); + } + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + return 1; + } + scale = (sind(i * scale_time) * 0.1) + 0.9; + scale_time += 0.05; + if (scale_time > 5) { + scale_time = 5; + } + HuSprScaleSet(bootGrpId, 2, scale, scale); + HuPrcVSleep(); + #endif -// } -// WipeColorSet(255, 255, 255); -// WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); -// while (WipeStatGet()) { -// HuPrcVSleep(); -// } -// Hu3DModelAttrSet(titleMdlId[0], HU3D_ATTR_DISPOFF); -// Hu3DModelAttrSet(titleMdlId[1], HU3D_ATTR_DISPOFF); -// Hu3DModelAttrSet(titleMdlId[2], HU3D_ATTR_DISPOFF); -// #if VERSION_NTSC -// HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); -// HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); -// HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); -// HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF); -// #else -// HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); -// HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); -// HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); -// for(i=0; i<5; i++) { -// HuSprAttrSet(bootGrpId, i+3, HUSPR_ATTR_DISPOFF); -// } -// for(i=0; i<5; i++) { -// HuSprAttrSet(bootGrpId, i+8, HUSPR_ATTR_DISPOFF); -// } -// #endif -// return 0; -// } + } + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + while (WipeStatGet()) { + HuPrcVSleep(); + } + Hu3DModelAttrSet(titleMdlId[0], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[1], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(titleMdlId[2], HU3D_ATTR_DISPOFF); + #if VERSION_NTSC + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 3, HUSPR_ATTR_DISPOFF); + #else + HuSprAttrSet(bootGrpId, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 1, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(bootGrpId, 2, HUSPR_ATTR_DISPOFF); + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+3, HUSPR_ATTR_DISPOFF); + } + for(i=0; i<5; i++) { + HuSprAttrSet(bootGrpId, i+8, HUSPR_ATTR_DISPOFF); + } + #endif + return 0; + } -// #include "nintendoData.inc" + #include "nintendoData.inc" -// void *NintendoDataDecode(void) -// { -// u32 *src = (u32 *)nintendoData; -// u32 size = *src++; -// void *dst = HuMemDirectMalloc(HEAP_DATA, size); -// int decode_type = *src++; -// if(dst) { -// HuDecodeData(src, dst, size, decode_type); -// } -// return dst; -// } + void *NintendoDataDecode(void) + { + u32 *src = (u32 *)nintendoData; + u32 size = *src++; + void *dst = HuMemDirectMalloc(HEAP_DATA, size); + int decode_type = *src++; + if(dst) { + HuDecodeData(src, dst, size, decode_type); + } + return dst; + } diff --git a/src/game/main.c b/src/game/main.c index 29f1b24f..b104b7f2 100644 --- a/src/game/main.c +++ b/src/game/main.c @@ -15,6 +15,7 @@ #include "game/sprite.h" #include "game/sreset.h" #include "game/wipe.h" +#include "version.h" #ifdef TARGET_PC #include "port/imgui.h" @@ -45,7 +46,7 @@ static u32 pe_req; static u32 rf_req; static u32 fi_req; s32 HuDvdErrWait; -s32 SystemInitF; +SHARED_SYM s32 SystemInitF; #ifdef TARGET_PC #include diff --git a/src/game/objmain.c b/src/game/objmain.c index a0e433c4..1c3aeda5 100644 --- a/src/game/objmain.c +++ b/src/game/objmain.c @@ -8,7 +8,6 @@ #include "game/pad.h" #include "game/printfunc.h" - #define OM_OVL_HIS_MAX 16 #define OM_MAX_GROUPS 10 @@ -47,8 +46,8 @@ s16 omdispinfo; static omOvlHisData omovlhis[OM_OVL_HIS_MAX]; -SHARED_SYM u8 omSysPauseEnableFlag = TRUE; -SHARED_SYM OverlayID omprevovl = OVL_INVALID; +u8 omSysPauseEnableFlag = TRUE; +OverlayID omprevovl = OVL_INVALID; static void omWatchOverlayProc(void); static void omInsertObj(Process *objman_process, omObjData *object); diff --git a/src/game/pad.c b/src/game/pad.c index 3fa8da4f..1b828789 100644 --- a/src/game/pad.c +++ b/src/game/pad.c @@ -19,17 +19,17 @@ static void PadADConv(s16 pad, PADStatus *status); static int padStatErrOld[4]; static PadRumble rumbleData[4]; -u16 HuPadBtn[4]; -u16 HuPadBtnDown[4]; -u16 HuPadBtnRep[4]; -s8 HuPadStkX[4]; -s8 HuPadStkY[4]; -s8 HuPadSubStkX[4]; -s8 HuPadSubStkY[4]; -u8 HuPadTrigL[4]; -u8 HuPadTrigR[4]; -u8 HuPadDStk[4]; -u8 HuPadDStkRep[4]; +SHARED_SYM u16 HuPadBtn[4]; +SHARED_SYM u16 HuPadBtnDown[4]; +SHARED_SYM u16 HuPadBtnRep[4]; +SHARED_SYM s8 HuPadStkX[4]; +SHARED_SYM s8 HuPadStkY[4]; +SHARED_SYM s8 HuPadSubStkX[4]; +SHARED_SYM s8 HuPadSubStkY[4]; +SHARED_SYM u8 HuPadTrigL[4]; +SHARED_SYM u8 HuPadTrigR[4]; +SHARED_SYM u8 HuPadDStk[4]; +SHARED_SYM u8 HuPadDStkRep[4]; s8 HuPadErr[4]; u16 _PadBtn[4]; u16 _PadBtnDown[4]; diff --git a/src/game/window.c b/src/game/window.c index ac3be92e..8846f8f5 100644 --- a/src/game/window.c +++ b/src/game/window.c @@ -45,8 +45,8 @@ static void GetMesMaxSizeSub(u32 mess); static s32 GetMesMaxSizeSub2(WindowData *window, u8 *mess_data); void mtxTransCat(Mtx, float, float, float); -WindowData ATTRIBUTE_ALIGN(32) winData[32]; -u32 winKey[4]; +SHARED_SYM WindowData ATTRIBUTE_ALIGN(32) winData[32]; +static u32 winKey[4]; keyBufData winComKeyBuf[256]; static AnimData *iconAnim; @@ -54,7 +54,7 @@ static AnimData *cursorAnim; static AnimData *cardAnimA; static AnimData *cardAnimB; static Process *winProc; -void *messDataPtr; +SHARED_SYM void *messDataPtr; static s32 messDataNo; static s16 winMaxWidth; static s16 winMaxHeight; @@ -1313,6 +1313,8 @@ void HuWinMesRead(s32 mess_data_no) void HuWinMesSet(s16 window, u32 mess) { +#ifdef __MWERKS__ + // TODO PC WindowData *window_ptr = &winData[window]; window_ptr->stat = 1; @@ -1339,10 +1341,13 @@ void HuWinMesSet(s16 window, u32 mess) window_ptr->mess_time = 0; #endif } +#endif } void HuWinInsertMesSet(s16 window, u32 mess, s16 index) { +#ifdef __MWERKS__ + // TODO PC WindowData *window_ptr = &winData[window]; if (!(mess & 0x80000000)) { @@ -1358,6 +1363,7 @@ void HuWinInsertMesSet(s16 window, u32 mess, s16 index) else { window_ptr->insert_mess[index] = (u8 *)mess; } +#endif } s16 HuWinChoiceGet(s16 window, s16 start_choice) @@ -1662,6 +1668,8 @@ void HuWinMesMaxSizeBetGet(float *size, u32 start, u32 end) static void GetMesMaxSizeSub(u32 mess) { +#ifdef __MWERKS__ + // TODO PC s16 line_h; s16 char_w; s16 line_w; @@ -1765,6 +1773,7 @@ static void GetMesMaxSizeSub(u32 mess) if (winMaxHeight < line_h) { winMaxHeight = line_h; } +#endif } static s32 GetMesMaxSizeSub2(WindowData *window, u8 *mess_data) @@ -1845,6 +1854,8 @@ s16 HuWinKeyWaitNumGet(u32 mess) { s16 wait_num; u8 *mess_data; +#ifdef __MWERKS__ + // TODO PC if (mess > 0x80000000) { mess_data = (u8 *)mess; @@ -1857,6 +1868,7 @@ s16 HuWinKeyWaitNumGet(u32 mess) wait_num++; } } +#endif return wait_num; } diff --git a/src/game/wipe.c b/src/game/wipe.c index 2445cc5c..e35ac056 100644 --- a/src/game/wipe.c +++ b/src/game/wipe.c @@ -9,7 +9,7 @@ s16 HuSysVWaitGet(s16 old); typedef s32 (*fadeFunc)(void); -WipeState wipeData; +SHARED_SYM WipeState wipeData; BOOL wipeFadeInF; static void WipeColorFill(GXColor color); diff --git a/src/port/audio.c b/src/port/audio.c new file mode 100644 index 00000000..e1d4a9cb --- /dev/null +++ b/src/port/audio.c @@ -0,0 +1,707 @@ +#include "game/audio.h" +#include "game/memory.h" +#include "game/msm.h" +#include "game/object.h" +#include "game/wipe.h" +#include "game/gamework_data.h" + +static int HuSePlay(int seId, MSM_SEPARAM *param); + +extern s16 omSysExitReq; + +s32 charVoiceGroupStat[8]; +static s32 sndFXBuf[64][2]; + +static s16 Hu3DAudVol; +static s16 sndGroupBak; +static s32 auxANoBak; +static s32 auxBNoBak; +static s8 HuAuxAVol; +static s8 HuAuxBVol; +float Snd3DBackSurDisOffset; +float Snd3DFrontSurDisOffset; +float Snd3DStartDisOffset; +float Snd3DSpeedOffset; +float Snd3DDistOffset; +s32 musicOffF; +u8 fadeStat; + +static char *lbl_8012E9AC[] = { + "sound/MPNGC02.son", + "sound/MPNGC16.son", + "" +}; + + +void HuAudInit(void) +{ + MSM_INIT msmInit; + MSM_ARAM msmAram; + + s32 result; + s16 i; + + msmInit.heap = HuMemDirectMalloc(HEAP_MUSIC, 0x13FC00); + msmInit.heapSize = 0x13FC00; + msmInit.msmPath = "/sound/mpgcsnd.msm"; + msmInit.pdtPath = "/sound/mpgcstr.pdt"; + msmInit.open = NULL; + msmInit.read = NULL; + msmInit.close = NULL; + msmAram.skipARInit = TRUE; + msmAram.aramEnd = 0x808000; + // result = msmSysInit(&msmInit, &msmAram); + + // if (result < 0) { + // OSReport("MSM(Sound Manager) Error:Error Code %d\n", result); + // while (1); + // } + if (OSGetSoundMode() == OS_SOUND_MODE_MONO) { + // msmSysSetOutputMode(SND_OUTPUTMODE_MONO); + } else { + // msmSysSetOutputMode(SND_OUTPUTMODE_SURROUND); + } + for (i = 0; i < 64; i++) { + sndFXBuf[i][0] = -1; + } + for (i = 0; i < 8; i++) { + charVoiceGroupStat[i] = 0; + } + sndGroupBak = -1; + auxANoBak = auxBNoBak = -1; + fadeStat = 0; + musicOffF = 0; +} + +s32 HuAudStreamPlay(char *name, BOOL flag) { + return 0; +} + +void HuAudStreamVolSet(s16 vol) { + // AISetStreamVolLeft(vol); + // AISetStreamVolRight(vol); + Hu3DAudVol = vol; +} + +void HuAudStreamPauseOn(void) { + // AISetStreamPlayState(0); +} + +void HuAudStreamPauseOff(void) { + // AISetStreamPlayState(1); +} + +void HuAudStreamFadeOut(s32 arg0) { +} + +void HuAudAllStop(void) { + HuAudSeqAllStop(); + HuAudFXAllStop(); + HuAudSStreamAllStop(); +} + +void HuAudFadeOut(s32 speed) { + HuAudFXAllStop(); + HuAudSeqAllFadeOut(speed); + HuAudSStreamAllFadeOut(speed); +} + +int HuAudFXPlay(int seId) +{ + WipeState *wipe = &wipeData; + + if (omSysExitReq != 0 || (wipeData.mode == WIPE_MODE_OUT && wipe->time / wipe->duration > 0.5)) { + return 0; + } + return HuAudFXPlayVolPan(seId, MSM_VOL_MAX, MSM_PAN_CENTER); +} + +int HuAudFXPlayVol(int seId, s16 vol) { + if (omSysExitReq != 0) { + return 0; + } + return HuAudFXPlayVolPan(seId, vol, MSM_PAN_CENTER); +} + +int HuAudFXPlayVolPan(int seId, s16 vol, s16 pan) +{ + MSM_SEPARAM seParam; + + if (omSysExitReq != 0) { + return 0; + } + seParam.flag = MSM_SEPARAM_VOL|MSM_SEPARAM_PAN; + seParam.vol = vol; + seParam.pan = pan; + return HuSePlay(seId, &seParam); +} + +void HuAudFXStop(int seNo) { + // msmSeStop(seNo, 0); +} + +void HuAudFXAllStop(void) { + // msmSeStopAll(0, 0); +} + +void HuAudFXFadeOut(int seNo, s32 speed) { + // msmSeStop(seNo, speed); +} + +void HuAudFXPanning(int seNo, s16 pan) { + MSM_SEPARAM seParam; + + if (omSysExitReq == 0) { + seParam.flag = MSM_SEPARAM_PAN; + seParam.pan = pan; + // msmSeSetParam(seNo, &seParam); + } +} + +void HuAudFXListnerSet(Vec *pos, Vec *heading, float sndDist, float sndSpeed) +{ + if(omSysExitReq) { + return; + } + HuAudFXListnerSetEX(pos, heading, + sndDist + Snd3DDistOffset, + sndSpeed + Snd3DSpeedOffset, + Snd3DStartDisOffset, + Snd3DFrontSurDisOffset + (0.25 * sndDist + Snd3DStartDisOffset), + Snd3DBackSurDisOffset + (0.25 * sndDist + Snd3DStartDisOffset)); +} + +void HuAudFXListnerSetEX(Vec *pos, Vec *heading, float sndDist, float sndSpeed, float startDis, float frontSurDis, float backSurDis) +{ + MSM_SELISTENER listener; + if(omSysExitReq) { + return; + } + listener.flag = MSM_LISTENER_STARTDIS|MSM_LISTENER_FRONTSURDIS|MSM_LISTENER_BACKSURDIS; + listener.startDis = startDis + Snd3DStartDisOffset; + listener.frontSurDis = frontSurDis + Snd3DFrontSurDisOffset; + listener.backSurDis = backSurDis + Snd3DBackSurDisOffset; + // msmSeSetListener(pos, heading, sndDist + Snd3DDistOffset, sndSpeed + Snd3DSpeedOffset, &listener); + OSReport("//////////////////////////////////\n"); + OSReport("sndDist %f\n", sndDist); + OSReport("sndSpeed %f\n", sndSpeed); + OSReport("startDis %f\n", listener.startDis); + OSReport("frontSurDis %f\n", listener.frontSurDis); + OSReport("backSurDis %f\n", listener.backSurDis); + OSReport("//////////////////////////////////\n"); +} + +void HuAudFXListnerUpdate(Vec *pos, Vec *heading) +{ + if (omSysExitReq == 0) { + // msmSeUpdataListener(pos, heading); + } +} + +int HuAudFXEmiterPlay(int seId, Vec *pos) +{ + MSM_SEPARAM seParam; + if(omSysExitReq) { + return 0; + } + seParam.flag = MSM_SEPARAM_POS; + seParam.pos.x = pos->x; + seParam.pos.y = pos->y; + seParam.pos.z = pos->z; + // return HuSePlay(seId, &seParam); + return 12; +} + +void HuAudFXEmiterUpDate(int seNo, Vec *pos) +{ + MSM_SEPARAM param; + if(omSysExitReq) { + return; + } + param.flag = MSM_SEPARAM_POS; + param.pos.x = pos->x; + param.pos.y = pos->y; + param.pos.z = pos->z; + // msmSeSetParam(seNo, ¶m); +} + +void HuAudFXListnerKill(void) { + // msmSeDelListener(); +} + +void HuAudFXPauseAll(s32 pause) { + // msmSePauseAll(pause, 0x64); + return 12; +} + +s32 HuAudFXStatusGet(int seNo) { + // return msmSeGetStatus(seNo); + return 12; +} + +s32 HuAudFXPitchSet(int seNo, s16 pitch) +{ + MSM_SEPARAM param; + if(omSysExitReq) { + return 0; + } + param.flag = MSM_SEPARAM_PITCH; + param.pitch = pitch; + // return msmSeSetParam(seNo, ¶m); + return 12; +} + +s32 HuAudFXVolSet(int seNo, s16 vol) +{ + MSM_SEPARAM param; + + if(omSysExitReq) { + return 0; + } + param.flag = MSM_SEPARAM_VOL; + param.vol = vol; + // return msmSeSetParam(seNo, ¶m); + return 12; +} + +s32 HuAudSeqPlay(s16 musId) { + s32 channel; + + if (musicOffF != 0 || omSysExitReq != 0) { + return 0; + } + // channel = msmMusPlay(musId, NULL); + return channel; +} + +void HuAudSeqStop(s32 musNo) { + if (musicOffF != 0 || omSysExitReq != 0) { + return; + } + // msmMusStop(musNo, 0); +} + +void HuAudSeqFadeOut(s32 musNo, s32 speed) { + if (musicOffF == 0) { + // msmMusStop(musNo, speed); + } +} + +void HuAudSeqAllFadeOut(s32 speed) { + s16 i; + + for (i = 0; i < 4; i++) { + // if (msmMusGetStatus(i) == 2) { + // msmMusStop(i, speed); + // } + } +} + +void HuAudSeqAllStop(void) { + // msmMusStopAll(0, 0); +} + +void HuAudSeqPauseAll(s32 pause) { + // msmMusPauseAll(pause, 0x64); +} + +void HuAudSeqPause(s32 musNo, s32 pause, s32 speed) { + if (musicOffF != 0 || omSysExitReq != 0) { + return; + } + // msmMusPause(musNo, pause, speed); +} + +s32 HuAudSeqMidiCtrlGet(s32 musNo, s8 channel, s8 ctrl) { + if (musicOffF != 0 || omSysExitReq != 0) { + return 0; + } + // return msmMusGetMidiCtrl(musNo, channel, ctrl); + return 12; +} + +s32 HuAudSStreamPlay(s16 streamId) { + MSM_STREAMPARAM param; + s32 result; + + if (musicOffF != 0 || omSysExitReq != 0) { + return 0; + } + param.flag = MSM_STREAMPARAM_NONE ; + // result = msmStreamPlay(streamId, ¶m); + return result; +} + +void HuAudSStreamStop(s32 seNo) { + if (musicOffF == 0) { + // msmStreamStop(seNo, 0); + } +} + +void HuAudSStreamFadeOut(s32 seNo, s32 speed) { + if (musicOffF == 0) { + // msmStreamStop(seNo, speed); + } +} + +void HuAudSStreamAllFadeOut(s32 speed) { + // msmStreamStopAll(speed); +} + +void HuAudSStreamAllStop(void) { + // msmStreamStopAll(0); +} + +s32 HuAudSStreamStatGet(s32 seNo) { + return 12; + // return msmStreamGetStatus(seNo); +} + +SNDGRPTBL sndGrpTable[] = { + { OVL_BOOT, -1, 0, 1, -1, -1 }, + { OVL_INST, -1, 0, 1, -1, -1 }, + { OVL_M401, 18, 0, 2, 64, 64 }, + { OVL_M402, 19, 0, 3, 48, 32 }, + { OVL_M403, 20, 0, 1, -1, -1 }, + { OVL_M404, 21, 0, 1, -1, -1 }, + { OVL_M405, 22, 0, 1, 64, 32 }, + { OVL_M406, 23, 0, 1, -1, -1 }, + { OVL_M407, 24, 0, 1, -1, -1 }, + { OVL_M408, 25, 0, 1, -1, -1 }, + { OVL_M409, 26, 0, 4, -1, -1 }, + { OVL_M410, 27, 0, 1, -1, -1 }, + { OVL_M411, 28, 0, 1, -1, -1 }, + { OVL_M412, 29, 0, 1, -1, -1 }, + { OVL_M413, 30, 0, 1, -1, -1 }, + { OVL_M414, 31, 0, 1, -1, -1 }, + { OVL_M415, 32, 0, 1, -1, -1 }, + { OVL_M416, 33, 0, 1, -1, -1 }, + { OVL_M417, 34, 0, 1, -1, -1 }, + { OVL_M418, 35, 0, 1, 64, 64 }, + { OVL_M419, 36, 0, 6, -1, -1 }, + { OVL_M420, 37, 0, 1, -1, -1 }, + { OVL_M421, 38, 0, 1, -1, -1 }, + { OVL_M422, 39, 0, 1, -1, -1 }, + { OVL_M423, 40, 0, 1, -1, -1 }, + { OVL_M424, 41, 0, 1, -1, -1 }, + { OVL_M425, 42, 0, 1, -1, -1 }, + { OVL_M426, 43, 0, 1, -1, -1 }, + { OVL_M427, 44, 0, 1, 64, 72 }, + { OVL_M428, 45, 0, 1, -1, -1 }, + { OVL_M429, 46, 0, 1, -1, -1 }, + { OVL_M430, 47, 0, 1, -1, -1 }, + { OVL_M431, 48, 0, 1, -1, -1 }, + { OVL_M432, 49, 0, 1, 48, 32 }, + { OVL_M433, 50, 0, 1, -1, -1 }, + { OVL_M434, 51, 0, 1, -1, -1 }, + { OVL_M435, 52, 0, 9, 32, 64 }, + { OVL_M436, 53, 0, 10, 32, 64 }, + { OVL_M437, 54, 0, 1, 32, 64 }, + { OVL_M438, 55, 0, 11, -1, -1 }, + { OVL_M439, 56, 0, 12, 48, 32 }, + { OVL_M440, 57, 0, 1, -1, -1 }, + { OVL_M441, 58, 0, 1, -1, -1 }, + { OVL_M442, 59, 0, 1, -1, -1 }, + { OVL_M443, 60, 0, 1, -1, -1 }, + { OVL_M444, 61, 0, 1, -1, -1 }, + { OVL_M445, 62, 0, 1, -1, -1 }, + { OVL_M446, 63, 0, 1, -1, -1 }, + { OVL_M447, 64, 0, 1, -1, -1 }, + { OVL_M448, 65, 0, 1, -1, -1 }, + { OVL_M449, 66, 0, 1, -1, -1 }, + { OVL_M450, 67, 0, 13, 64, 64 }, + { OVL_M451, 68, 0, 1, -1, -1 }, + { OVL_M453, 69, 0, 1, -1, -1 }, + { OVL_M455, 70, 0, 1, -1, -1 }, + { OVL_M456, 71, 0, 1, -1, -1 }, + { OVL_M457, 72, 0, 14, 64, 32 }, + { OVL_M458, 73, 0, 15, 64, 32 }, + { OVL_M459, 74, 0, 1, -1, -1 }, + { OVL_M460, 75, 0, 1, -1, -1 }, + { OVL_M461, 76, 0, 1, -1, -1 }, + { OVL_M462, 77, 0, 1, -1, -1 }, + { OVL_M463, 78, 0, 1, -1, -1 }, + { OVL_MENT, -1, 0, 1, -1, -1 }, + { OVL_MGMODE, 1, 0, 1, -1, -1 }, + { OVL_MODESEL, 0, 0, 1, -1, -1 }, + { OVL_MODELTEST, 18, 0, 1, -1, -1 }, + { OVL_MSETUP, 0, 0, 1, -1, -1 }, + { OVL_MSTORY, 5, 0, 1, -1, -1 }, + { OVL_MSTORY2, 5, 0, 1, -1, -1 }, + { OVL_MSTORY3, 8, 0, 1, -1, -1 }, + { OVL_NIS, 9, 0, 1, -1, -1 }, + { OVL_OPTION, -1, 0, 1, -1, -1 }, + { OVL_PRESENT, -1, 0, 1, -1, -1 }, + { OVL_RESULT, -1, 0, 1, -1, -1 }, + { OVL_SAF, 0, 0, 2, 127, 127 }, + { OVL_SELMENU, 0, 0, 1, -1, -1 }, + { OVL_W01, 9, 0, 1, -1, -1 }, + { OVL_W02, 10, 0, 1, -1, -1 }, + { OVL_W03, 11, 0, 1, -1, -1 }, + { OVL_W04, 12, 0, 1, -1, -1 }, + { OVL_W05, 13, 0, 1, -1, -1 }, + { OVL_W06, 14, 0, 1, -1, -1 }, + { OVL_W10, 15, 0, 1, -1, -1 }, + { OVL_W20, 16, 0, 1, -1, -1 }, + { OVL_W21, 17, 0, 1, -1, -1 }, + { OVL_MPEX, 4, 0, 1, -1, -1 }, + { OVL_ZTAR, -1, 0, 1, -1, -1 }, + { OVL_E3SETUP, 0, 0, 1, -1, -1 }, + { OVL_STAFF, -1, 0, 1, -1, -1 }, + { OVL_INVALID, -1, 0, 1, 0, 0 } +}; + +void HuAudDllSndGrpSet(u16 ovl) { + SNDGRPTBL *sndGrp; + s16 grpSet; + + sndGrp = sndGrpTable; + while (1) { + if (sndGrp->ovl == ovl) { + grpSet = sndGrp->grpSet; + break; + } + if (sndGrp->ovl == OVL_INVALID) { + grpSet = 0x12; + break; + } + sndGrp++; + } + if (grpSet != -1) { + OSReport("SOUND ##########################\n"); + HuAudSndGrpSetSet(grpSet); + if (sndGrp->auxANo != auxANoBak || sndGrp->auxBNo != auxBNoBak) { + // msmSysSetAux(sndGrp->auxANo, sndGrp->auxBNo); + OSReport("Change AUX %d,%d\n", sndGrp->auxANo, sndGrp->auxBNo); + auxANoBak = sndGrp->auxANo; + auxBNoBak = sndGrp->auxBNo; + HuPrcVSleep(); + } + HuAudAUXVolSet(sndGrp->auxAVol, sndGrp->auxBVol); + OSReport("##########################\n"); + } +} + +void HuAudSndGrpSetSet(s16 dataSize) { + void *buf; + OSTick osTick; + s32 numPlay; + s32 err; + + if (sndGroupBak != dataSize) { + // msmMusStopAll(1, 0); + // msmSeStopAll(1, 0); + osTick = OSGetTick(); + // while ((msmMusGetNumPlay(1) != 0 || msmSeGetNumPlay(1) != 0) + // && OSTicksToMilliseconds(OSGetTick() - osTick) < 500); + OSReport("%d\n", OSTicksToMilliseconds(OSGetTick() - osTick)); + if (OSTicksToMilliseconds(OSGetTick() - osTick) >= 500) { + // numPlay = msmSeGetNumPlay(1); + // OSReport("Timed Out! Mus %d:SE %d\n", msmMusGetNumPlay(1), numPlay); + } + OSReport("GroupSet %d\n", dataSize); + sndGroupBak = dataSize; + // err = msmSysDelGroupAll(); + // buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(1)); + // err = msmSysLoadGroupSet(dataSize, buf); + OSReport("***********GroupSet Error %d\n", err); + // HuMemDirectFree(buf); + } +} + +void HuAudSndGrpSet(s16 grpId) { + void *buf; + + // buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(grpId)); + // msmSysLoadGroup(grpId, buf, 0); + HuMemDirectFree(buf); +} + +void HuAudSndCommonGrpSet(s16 grpId, s32 groupCheck) { + s16 err; + OSTick osTick; + void *buf; + s16 i; + + for (i = 0; i < 8; i++) { + charVoiceGroupStat[i] = 0; + } + // msmMusStopAll(1, 0); + // msmSeStopAll(1, 0); + osTick = OSGetTick(); + // while ((msmMusGetNumPlay(1) != 0 || msmSeGetNumPlay(1) != 0) + // && OSTicksToMilliseconds(OSGetTick() - osTick) < 500); + OSReport("CommonGrpSet %d\n", grpId); + if (groupCheck != 0) { + // err = msmSysDelGroupBase(0); + if (err < 0) { + OSReport("Del Group Error %d\n", err); + } + } + // buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(grpId)); + // msmSysLoadGroupBase(grpId, buf); + // HuMemDirectFree(buf); + sndGroupBak = -1; +} + +void HuAudAUXSet(s32 auxA, s32 auxB) { + if (auxA == -1) { + auxA = 0; + } + if (auxB == -1) { + auxB = 1; + } + // msmSysSetAux(auxA, auxB); +} + +void HuAudAUXVolSet(s8 auxA, s8 auxB) { + HuAuxAVol = auxA; + HuAuxBVol = auxB; +} + +void HuAudVoiceInit(s16 ovl) { + SNDGRPTBL *sndGrp; + OSTick osTick; + s16 numNotChars; + s16 grpId; + s16 temp_r25; + s16 character; + + void *buf; + s16 i; + + if (ovl != OVL_INVALID) { + sndGrp = sndGrpTable; + while (1) { + if (sndGrp->ovl == ovl && sndGrp->grpSet == -1) { + return; + } + if (sndGrp->ovl == OVL_INVALID) { + break; + } + sndGrp++; + } + } + for (i = numNotChars = 0; i < 4; i++) { + character = GWPlayerCfg[i].character; + if (character < 0 || character >= 8 || character == 0xFF || charVoiceGroupStat[character] != 0) { + numNotChars++; + } + } + if (numNotChars < 4) { + for (i = 0; i < 8; i++) { + charVoiceGroupStat[i] = 0; + } + // msmMusStopAll(1, 0); + // msmSeStopAll(1, 0); + osTick = OSGetTick(); + // while ((msmMusGetNumPlay(1) != 0 || msmSeGetNumPlay(1) != 0) + // && OSTicksToMilliseconds(OSGetTick() - osTick) < 500); + OSReport("############CharGrpSet\n"); + // temp_r25 = msmSysDelGroupBase(0); + if (temp_r25 < 0) { + OSReport("Del Group Error %d\n", temp_r25); + } else { + OSReport("Del Group OK\n"); + } + for (i = 0; i < 4; i++) { + character = GWPlayerCfg[i].character; + if (character >= 0 && character < 8 && character != 0xFF) { + charVoiceGroupStat[character] = 1; + grpId = character + 10; + // buf = HuMemDirectMalloc(HEAP_DATA, msmSysGetSampSize(grpId)); + #if VERSION_NTSC + // msmSysLoadGroupBase(grpId, buf); + #else + temp_r25 = msmSysLoadGroupBase(grpId, buf); + #endif + // HuMemDirectFree(buf); + } + } + sndGroupBak = -1; + } +} + +s32 HuAudPlayerVoicePlay(s16 player, s16 seId) { + s16 charNo = GWPlayerCfg[player].character; + + return HuAudCharVoicePlay(charNo, seId); +} + +s32 HuAudPlayerVoicePlayPos(s16 player, s16 seId, Vec *pos) { + s16 charNo = GWPlayerCfg[player].character; + + return HuAudCharVoicePlayPos(charNo, seId, pos); +} + +void HuAudPlayerVoicePlayEntry(s16 player, s16 seId) { + s16 charNo = GWPlayerCfg[player].character; + + HuAudCharVoicePlayEntry(charNo, seId); +} + +s32 HuAudCharVoicePlay(s16 charNo, s16 seId) +{ + MSM_SEPARAM param; + + // if (omSysExitReq != 0) { + // return 0; + // } + // seId += (charNo << 6); + // param.flag = MSM_SEPARAM_NONE; + // if (HuAuxAVol != -1) { + // param.flag |= MSM_SEPARAM_AUXVOLA; + // } + // if (HuAuxBVol != -1) { + // param.flag |= MSM_SEPARAM_AUXVOLB; + // } + // param.auxAVol = HuAuxAVol; + // param.auxBVol = HuAuxBVol; + return HuSePlay(seId, ¶m); +} + +s32 HuAudCharVoicePlayPos(s16 charNo, s16 seId, Vec *pos) { + MSM_SEPARAM param; + + // if (omSysExitReq != 0) { + // return 0; + // } + // seId += (charNo << 6); + // param.flag = MSM_SEPARAM_POS; + // if (HuAuxAVol != -1) { + // param.flag |= MSM_SEPARAM_AUXVOLA; + // } + // if (HuAuxBVol != -1) { + // param.flag |= MSM_SEPARAM_AUXVOLB; + // } + // param.auxAVol = HuAuxAVol; + // param.auxBVol = HuAuxBVol; + // param.pos.x = pos->x; + // param.pos.y = pos->y; + // param.pos.z = pos->z; + return HuSePlay(seId, ¶m); +} + +void HuAudCharVoicePlayEntry(s16 charNo, s16 seId) { + // int seNoTbl[MSM_ENTRY_SENO_MAX]; // size unknown (min: 30, max: 33) + // u16 id; + // u16 i; + + // seId += (charNo << 6); + // id = msmSeGetEntryID(seId, seNoTbl); + // for (i = 0; i < id; i++) { + // msmSeStop(seNoTbl[i], 0); + // } +} + +static int HuSePlay(int seId, MSM_SEPARAM *param) +{ + s32 result; + + // result = msmSePlay(seId, param); + // if (result < 0) { + // OSReport("#########SE Entry Error\n", seId, result); + // } + return 12; + // return result; +} diff --git a/src/port/stubs.c b/src/port/stubs.c index 2c89632f..79cf1fa1 100644 --- a/src/port/stubs.c +++ b/src/port/stubs.c @@ -9,7 +9,7 @@ // Credits: Super Monkey Ball -__declspec(dllexport) void OSReport(const char *msg, ...) +void OSReport(const char *msg, ...) { va_list args; va_start(args, msg); @@ -22,6 +22,11 @@ u32 OSGetConsoleType() return OS_CONSOLE_RETAIL1; } +u32 OSGetSoundMode() +{ + return 2; +} + s32 CARDCancel(CARDFileInfo *fileInfo) { puts("CARDCancel is a stub"); @@ -676,8 +681,6 @@ void ARQInit(void) { // Hudson void HuDvdErrDispInit(GXRenderModeObj *rmode, void *xfb1, void *xfb2) { } -void HuAudInit(void) { } - void msmSysRegularProc(void) { puts("msmSysRegularProc is a stub");