From e0a0cd744284a0b15998cf5865f0f7a5626b3e47 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Fri, 26 Jan 2024 21:49:19 -0500 Subject: [PATCH 001/106] questionable solutions... --- include/game/board/player.h | 2 + src/game/board/player.c | 162 ++++++++++++++++++++++++++++++++++-- src/game/hsfdraw.c | 1 + 3 files changed, 159 insertions(+), 6 deletions(-) diff --git a/include/game/board/player.h b/include/game/board/player.h index 2acc9a20..6e4d7678 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -14,6 +14,7 @@ #include "game/gamework_data.h" #include "game/board/main.h" #include "game/board/space.h" +#include "game/board/ui.h" extern s16 boardPlayerMdl[4]; @@ -152,5 +153,6 @@ void BoardPlayerMoveAwayStartCurr(s16, s32); void BoardBowserSuitMotionSetWalk(void); s16 BoardBowserSuitModelGet(void); void UpdateDiceDigit2D(omObjData*); +void MoveAwayObjFunc(omObjData*); #endif diff --git a/src/game/board/player.c b/src/game/board/player.c index a2f5f0c3..15b17ece 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -85,7 +85,9 @@ static s32 (*preTurnHook[4])(); s16 boardPlayerMdl[4]; static s16 playerMot[4]; static s8 rollType; +static s8 moveAwayPlayer[4]; static s16 junctionArrowRot[4]; +static omObjData* moveAwayObj; static omObjData* diceDigit2DObj; static omObjData* junctionObj; static s32 junctionMask; @@ -1029,7 +1031,7 @@ static void InitJunction(s32 arg0, s32 arg1, f32 arg8) { s32 var_r22; f32 angle; - if (junctionObj == 0) { + if (!junctionObj) { for (var_r20 = 0; var_r20 < 4; var_r20++) { junctionArrowRot[var_r20] = -1; } @@ -1351,7 +1353,7 @@ static inline f32 JunctionArrowRotGetCurr(void) { bitcopy* juncObj; f32 ret; - if (junctionObj == 0) { + if (!junctionObj) { return 0.0f; } else { juncObj = (bitcopy*) junctionObj->work; @@ -1365,7 +1367,7 @@ static inline s32 CheckArrowRot(float value) s32 sp58; bitcopy* sp5C; s16 spE; - if (junctionObj == 0) { + if (!junctionObj) { return 0; } else { sp5C = (bitcopy*) junctionObj->work; @@ -1428,7 +1430,7 @@ static s32 ExecJunction(s32 arg0, s16* arg1) { for (var_r28 = 0; var_r28 < var_r21; var_r28++) { sp88 = BoardSpaceGet(0, spD0[var_r28]); - if (sp88 == 0) { + if (!sp88) { spD0[var_r28] = 0; } else { PSVECSubtract(&sp88->pos, &spAC, &spB8); @@ -1731,7 +1733,7 @@ void BoardPlayerDiceJumpStart(s32 arg0) { } s32 BoardPlayerDiceJumpCheck(s32 arg0) { - if (diceJumpObj[arg0] == 0) { + if (!diceJumpObj[arg0]) { return 0; } if (diceJumpObj[arg0]->work[1] == 0) { @@ -1939,7 +1941,7 @@ typedef struct bitcopy3 { u8 field00_bit5 : 2; u8 field00_bit7 : 1; }; - u8 unk_01; + s8 unk_01; s8 unk_02; s8 unk_03; s16 unk_04; @@ -2040,6 +2042,154 @@ static void UpdateDiceDigitSprite(omObjData* arg0) { } } +static void UpdateDiceDigit2D(omObjData* arg0) { + f32 var_f30; + bitcopy3* temp_r30; + + temp_r30 = (bitcopy3*) diceDigit2DObj->work; + if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { + if (temp_r30->unk_04 != -1) { + HuSprGrpKill(temp_r30->unk_04); + temp_r30->unk_04 = -1; + } + diceDigit2DObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r30->unk_03 == 0) { + temp_r30->unk_01 += 4; + if (temp_r30->unk_01 >= 0x5A) { + temp_r30->unk_03 = 1; + } + + OSs8tof32(&temp_r30->unk_01, &var_f30); + var_f30 *= 2.0f; + if (var_f30 >= 90.0f) { + var_f30 -= 90.0f; + } + } + + { // hack until the compiler does what we want + f32 sp1C[2]; + f32 spC[2] = { 320.0f, 256.0f }; + s32 sp14[2]; + s32 var_r30; + s32 temp_r29; + bitcopy3* temp_r31; + + temp_r31 = (bitcopy3*) arg0->work; + temp_r29 = GWPlayer[temp_r31->unk_02].roll; + if (temp_r29 != 0) { + sp14[0] = temp_r29 % 10; + sp14[1] = temp_r29 / 10; + } else { + temp_r31->field00_bit0 = 1; + } + + for (var_r30 = 0; var_r30 < 2; var_r30++) { + if (((var_r30 == 1) && (sp14[1] == 0)) || (temp_r31->field00_bit1 == 0)) { + HuSprAttrSet(temp_r31->unk_04, var_r30, 4); + } else { + if ((sp14[1] == 0) && (var_r30 == 0)) { + sp1C[0] = 288.0f; + } else { + sp1C[0] = spC[var_r30]; + } + sp1C[1] = 176.0f; + HuSprAttrReset(temp_r31->unk_04, var_r30, 4); + HuSprBankSet(temp_r31->unk_04, var_r30, sp14[var_r30]); + HuSprPosSet(temp_r31->unk_04, var_r30, sp1C[0], sp1C[1]); + } + } + } +} + +void BoardPlayerBtnDownWait(s32 arg0, u32 arg1) { + s32 spC; + s32 sp8; + s32 temp_r31; + + temp_r31 = GWPlayer[arg0].port; + while (1) { + if ((HuPadBtnDown[temp_r31] & arg1) != 0) return; + HuPrcVSleep(); + } +} + +void BoardPlayerAutoSizeSet(s32 player, s32 value) { + PlayerState* temp_r28; + + temp_r28 = BoardPlayerGet(player); + if ((temp_r28->auto_size != 0) || (value == 0)) { + BoardStatusHammerKill(player); + } + temp_r28->auto_size = value; + if (value != 0) { + BoardStatusHammerCreate(player); + } +} + +s32 BoardPlayerAutoSizeGet(s32 arg0) { + PlayerState* temp_r30 = BoardPlayerGet(arg0); + + if (temp_r30 != 0 ) { + arg0 = temp_r30->auto_size; + } + return arg0; +} + +u32 BoardPlayerMoveAwayIsDone(void) { + if (!moveAwayObj) { + return 0; + } + return 1; +} + +void BoardPlayerMoveAwayStart(s32 arg0, s32 arg1, s32 arg2) { + bitcopy3* temp_r25; + Point3d sp28; + Point3d sp1C; + Point3d sp10; + s32 temp_r29; + s32 var_r30; + s32 var_r31; + s32 var_r28; + s32 var_r27; + + moveAwayPlayer[0] = moveAwayPlayer[1] = moveAwayPlayer[2] = moveAwayPlayer[3] = -1; + var_r30 = arg0 + 1; + + var_r27 = 0; + // hack + for (var_r28 = var_r28 = var_r27; var_r27 < 4; var_r27++, var_r30++) { + var_r30 &= 3; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if ((var_r31 == var_r30) && (arg1 == GWPlayer[var_r31].space_curr)) { + moveAwayPlayer[var_r28++] = var_r31; + } + } + } + BoardSpaceRotGet(0, arg1, &sp28); + + for (var_r31 = 0; var_r31 < var_r28; var_r31++) { + BoardSpaceCornerPosGet(arg1, var_r31, &sp1C); + temp_r29 = moveAwayPlayer[var_r31]; + if (arg2 != 0) { + BoardPlayerPosSetV(temp_r29, &sp1C); + moveAwayPlayer[var_r31] = -1; + } else { + BoardPlayerPosGet(temp_r29, &sp10); + BoardPlayerPosLerpStart(temp_r29, &sp10, &sp1C, 0x19); + } + } + if (arg2 == 0) { + moveAwayObj = omAddObjEx(boardObjMan, 0x100, 0U, 0U, -1, &MoveAwayObjFunc); + temp_r25 = (bitcopy3*) moveAwayObj->work; + temp_r25->field00_bit0 = 0; + } +} + // ... void BoardPlayerCopyMat(s32 arg0) { diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index 5d360457..fc130c03 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -441,6 +441,7 @@ static void FaceDraw(HsfdrawStruct00 *arg0, HsfdrawStruct02 *arg1) { s16 var_r24; s16 var_r31; s16 var_r17; + s16 var_r6; u32 temp_r19; HsfConstData *temp_r20; HsfMaterial *temp_r30; From 6d67132ca4868d85736820b08170b6441d734759 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 3 Feb 2024 16:06:31 -0600 Subject: [PATCH 002/106] Introduce enums for specific data directories --- include/data_num/title.h | 23 ++ include/data_num/win.h | 37 ++++ include/datadir_enum.h | 23 ++ include/datadir_table.h | 280 ++++++++++++------------- include/game/data.h | 13 +- src/REL/bootDll/main.c | 30 +-- src/REL/w03Dll/main.c | 28 +-- src/REL/w03Dll/mg_item.c | 28 +-- src/REL/w03Dll/statue.c | 36 ++-- src/REL/w10Dll/host.c | 4 +- src/REL/w10Dll/main.c | 24 +-- src/REL/w10Dll/tutorial.c | 22 +- src/game/board/basic_space.c | 26 +-- src/game/board/main.c | 64 +++--- src/game/board/player.c | 9 - src/game/board/space.c | 7 +- src/game/board/warp.c | 4 +- src/game/data.c | 2 +- src/game/minigame_seq.c | 18 +- src/game/objsub.c | 394 +++++++++++++++++------------------ src/game/window.c | 66 +++--- 21 files changed, 603 insertions(+), 535 deletions(-) create mode 100644 include/data_num/title.h create mode 100644 include/data_num/win.h create mode 100644 include/datadir_enum.h diff --git a/include/data_num/title.h b/include/data_num/title.h new file mode 100644 index 00000000..2d0ce603 --- /dev/null +++ b/include/data_num/title.h @@ -0,0 +1,23 @@ +#ifndef DATANUM_TITLE_H +#define DATANUM_TITLE_H + +#include "datadir_enum.h" + +enum { + TITLE_NINTENDO_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 0), + TITLE_HUDSON_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 1), + TITLE_PRESS_START_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 2), + TITLE_PROGRESSIVE_CHOOSE_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 3), + TITLE_PROGRESSIVE_ON_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 4), + TITLE_PROGRESSIVE_OFF_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 5), + TITLE_PROGRESSIVE_CURSOR_ON_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 6), + TITLE_PROGRESSIVE_CURSOR_OFF_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 7), + TITLE_BG_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 8), + TITLE_LOGO_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 9), + TITLE_COPYRIGHT_ANM = DATA_MAKE_NUM(DATADIR_TITLE, 10), + TITLE_CHAR_HSF = DATA_MAKE_NUM(DATADIR_TITLE, 11), + TITLE_CUBE_HSF = DATA_MAKE_NUM(DATADIR_TITLE, 12), + TITLE_SKY_HSF = DATA_MAKE_NUM(DATADIR_TITLE, 13), +}; + +#endif \ No newline at end of file diff --git a/include/data_num/win.h b/include/data_num/win.h new file mode 100644 index 00000000..13b62a1b --- /dev/null +++ b/include/data_num/win.h @@ -0,0 +1,37 @@ +#ifndef DATANUM_WIN_H +#define DATANUM_WIN_H + +#include "datadir_enum.h" + +enum { + WIN_FONTJ_ANM = DATA_MAKE_NUM(DATADIR_WIN, 0), + WIN_FONTE_ANM = DATA_MAKE_NUM(DATADIR_WIN, 1), + WIN_CURSOR_ANM = DATA_MAKE_NUM(DATADIR_WIN, 2), + WIN_ICON_ANM = DATA_MAKE_NUM(DATADIR_WIN, 3), + WIN_CARDA_ANM = DATA_MAKE_NUM(DATADIR_WIN, 4), + WIN_CARDB_ANM = DATA_MAKE_NUM(DATADIR_WIN, 5), + WIN_FRAME1_ANM = DATA_MAKE_NUM(DATADIR_WIN, 6), + WIN_FRAME2_ANM = DATA_MAKE_NUM(DATADIR_WIN, 7), + WIN_FRAME3_ANM = DATA_MAKE_NUM(DATADIR_WIN, 8), + WIN_W01_HOST_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 9), + WIN_W02_HOST_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 10), + WIN_W03_HOST_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 11), + WIN_W04_HOST_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 12), + WIN_W05_HOST_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 13), + WIN_W06_HOST_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 14), + WIN_TOAD_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 15), + WIN_BOBOMB_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 16), + WIN_SHYGUY_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 17), + WIN_BOO_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 18), + WIN_GOOMBA_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 19), + WIN_BOWSER_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 20), + WIN_KKID_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 21), + WIN_KOOPA_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 22), + WIN_CONDOR_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 23), + WIN_BOO_BLUE_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 24), + WIN_DOLPHIN_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 25), + WIN_BOO_RED_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 26), + WIN_THWOMP_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 27), +}; + +#endif \ No newline at end of file diff --git a/include/datadir_enum.h b/include/datadir_enum.h new file mode 100644 index 00000000..e98d5c52 --- /dev/null +++ b/include/datadir_enum.h @@ -0,0 +1,23 @@ +#ifndef DATADIR_ENUM +#define DATADIR_ENUM + +#define DATADIR_DEFINE(name, path) DATADIR_ID_##name, + +typedef enum { + #include "datadir_table.h" + DATADIR_ID_MAX +}; + +#undef DATADIR_DEFINE + +#define DATADIR_DEFINE(name, path) DATADIR_##name = (DATADIR_ID_##name) << 16, + +typedef enum { + #include "datadir_table.h" +}; + +#undef DATADIR_DEFINE + +#define DATA_MAKE_NUM(dir, file) ((dir)+(file)) + +#endif \ No newline at end of file diff --git a/include/datadir_table.h b/include/datadir_table.h index b2cb103a..408931fb 100644 --- a/include/datadir_table.h +++ b/include/datadir_table.h @@ -1,140 +1,140 @@ -DATADIR_DEFINE(DATADIR_E3SETUP, "data/E3setup.bin") -DATADIR_DEFINE(DATADIR_BBATTLE, "data/bbattle.bin") -DATADIR_DEFINE(DATADIR_BGUEST, "data/bguest.bin") -DATADIR_DEFINE(DATADIR_BKOOPA, "data/bkoopa.bin") -DATADIR_DEFINE(DATADIR_BKOOPASUIT, "data/bkoopasuit.bin") -DATADIR_DEFINE(DATADIR_BKUJIYA, "data/bkujiya.bin") -DATADIR_DEFINE(DATADIR_BLAST5, "data/blast5.bin") -DATADIR_DEFINE(DATADIR_BOARD, "data/board.bin") -DATADIR_DEFINE(DATADIR_BPAUSE, "data/bpause.bin") -DATADIR_DEFINE(DATADIR_BYOKODORI, "data/byokodori.bin") -DATADIR_DEFINE(DATADIR_DAISY, "data/daisy.bin") -DATADIR_DEFINE(DATADIR_DAISYMDL0, "data/daisymdl0.bin") -DATADIR_DEFINE(DATADIR_DAISYMDL1, "data/daisymdl1.bin") -DATADIR_DEFINE(DATADIR_DAISYMOT, "data/daisymot.bin") -DATADIR_DEFINE(DATADIR_DONKEY, "data/donkey.bin") -DATADIR_DEFINE(DATADIR_DONKEYMDL0, "data/donkeymdl0.bin") -DATADIR_DEFINE(DATADIR_DONKEYMDL1, "data/donkeymdl1.bin") -DATADIR_DEFINE(DATADIR_DONKEYMOT, "data/donkeymot.bin") -DATADIR_DEFINE(DATADIR_EFFECT, "data/effect.bin") -DATADIR_DEFINE(DATADIR_GAMEMES, "data/gamemes.bin") -DATADIR_DEFINE(DATADIR_INST, "data/inst.bin") -DATADIR_DEFINE(DATADIR_INSTFONT, "data/instfont.bin") -DATADIR_DEFINE(DATADIR_INSTPIC, "data/instpic.bin") -DATADIR_DEFINE(DATADIR_LUIGI, "data/luigi.bin") -DATADIR_DEFINE(DATADIR_LUIGIMDL0, "data/luigimdl0.bin") -DATADIR_DEFINE(DATADIR_LUIGIMDL1, "data/luigimdl1.bin") -DATADIR_DEFINE(DATADIR_LUIGIMOT, "data/luigimot.bin") -DATADIR_DEFINE(DATADIR_M300, "data/m300.bin") -DATADIR_DEFINE(DATADIR_M302, "data/m302.bin") -DATADIR_DEFINE(DATADIR_M303, "data/m303.bin") -DATADIR_DEFINE(DATADIR_M330, "data/m330.bin") -DATADIR_DEFINE(DATADIR_M333, "data/m333.bin") -DATADIR_DEFINE(DATADIR_M401, "data/m401.bin") -DATADIR_DEFINE(DATADIR_M402, "data/m402.bin") -DATADIR_DEFINE(DATADIR_M403, "data/m403.bin") -DATADIR_DEFINE(DATADIR_M404, "data/m404.bin") -DATADIR_DEFINE(DATADIR_M405, "data/m405.bin") -DATADIR_DEFINE(DATADIR_M406, "data/m406.bin") -DATADIR_DEFINE(DATADIR_M407, "data/m407.bin") -DATADIR_DEFINE(DATADIR_M408, "data/m408.bin") -DATADIR_DEFINE(DATADIR_M409, "data/m409.bin") -DATADIR_DEFINE(DATADIR_M410, "data/m410.bin") -DATADIR_DEFINE(DATADIR_M411, "data/m411.bin") -DATADIR_DEFINE(DATADIR_M412, "data/m412.bin") -DATADIR_DEFINE(DATADIR_M413, "data/m413.bin") -DATADIR_DEFINE(DATADIR_M414, "data/m414.bin") -DATADIR_DEFINE(DATADIR_M415, "data/m415.bin") -DATADIR_DEFINE(DATADIR_M416, "data/m416.bin") -DATADIR_DEFINE(DATADIR_M417, "data/m417.bin") -DATADIR_DEFINE(DATADIR_M418, "data/m418.bin") -DATADIR_DEFINE(DATADIR_M419, "data/m419.bin") -DATADIR_DEFINE(DATADIR_M420, "data/m420.bin") -DATADIR_DEFINE(DATADIR_M421, "data/m421.bin") -DATADIR_DEFINE(DATADIR_M422, "data/m422.bin") -DATADIR_DEFINE(DATADIR_M423, "data/m423.bin") -DATADIR_DEFINE(DATADIR_M424, "data/m424.bin") -DATADIR_DEFINE(DATADIR_M425, "data/m425.bin") -DATADIR_DEFINE(DATADIR_M426, "data/m426.bin") -DATADIR_DEFINE(DATADIR_M427, "data/m427.bin") -DATADIR_DEFINE(DATADIR_M428, "data/m428.bin") -DATADIR_DEFINE(DATADIR_M429, "data/m429.bin") -DATADIR_DEFINE(DATADIR_M430, "data/m430.bin") -DATADIR_DEFINE(DATADIR_M431, "data/m431.bin") -DATADIR_DEFINE(DATADIR_M432, "data/m432.bin") -DATADIR_DEFINE(DATADIR_M433, "data/m433.bin") -DATADIR_DEFINE(DATADIR_M434, "data/m434.bin") -DATADIR_DEFINE(DATADIR_M435, "data/m435.bin") -DATADIR_DEFINE(DATADIR_M436, "data/m436.bin") -DATADIR_DEFINE(DATADIR_M437, "data/m437.bin") -DATADIR_DEFINE(DATADIR_M438, "data/m438.bin") -DATADIR_DEFINE(DATADIR_M439, "data/m439.bin") -DATADIR_DEFINE(DATADIR_M440, "data/m440.bin") -DATADIR_DEFINE(DATADIR_M441, "data/m441.bin") -DATADIR_DEFINE(DATADIR_M442, "data/m442.bin") -DATADIR_DEFINE(DATADIR_M443, "data/m443.bin") -DATADIR_DEFINE(DATADIR_M444, "data/m444.bin") -DATADIR_DEFINE(DATADIR_M445, "data/m445.bin") -DATADIR_DEFINE(DATADIR_M446, "data/m446.bin") -DATADIR_DEFINE(DATADIR_M447, "data/m447.bin") -DATADIR_DEFINE(DATADIR_M448, "data/m448.bin") -DATADIR_DEFINE(DATADIR_M449, "data/m449.bin") -DATADIR_DEFINE(DATADIR_M450, "data/m450.bin") -DATADIR_DEFINE(DATADIR_M451, "data/m451.bin") -DATADIR_DEFINE(DATADIR_M453, "data/m453.bin") -DATADIR_DEFINE(DATADIR_M455, "data/m455.bin") -DATADIR_DEFINE(DATADIR_M456, "data/m456.bin") -DATADIR_DEFINE(DATADIR_M457, "data/m457.bin") -DATADIR_DEFINE(DATADIR_M458, "data/m458.bin") -DATADIR_DEFINE(DATADIR_M459, "data/m459.bin") -DATADIR_DEFINE(DATADIR_M460, "data/m460.bin") -DATADIR_DEFINE(DATADIR_M461, "data/m461.bin") -DATADIR_DEFINE(DATADIR_M462, "data/m462.bin") -DATADIR_DEFINE(DATADIR_MARIO, "data/mario.bin") -DATADIR_DEFINE(DATADIR_MARIOMDL0, "data/mariomdl0.bin") -DATADIR_DEFINE(DATADIR_MARIOMDL1, "data/mariomdl1.bin") -DATADIR_DEFINE(DATADIR_MARIOMOT, "data/mariomot.bin") -DATADIR_DEFINE(DATADIR_MENT, "data/ment.bin") -DATADIR_DEFINE(DATADIR_MGCONST, "data/mgconst.bin") -DATADIR_DEFINE(DATADIR_MGMODE, "data/mgmode.bin") -DATADIR_DEFINE(DATADIR_MODESEL, "data/modesel.bin") -DATADIR_DEFINE(DATADIR_MPEX, "data/mpex.bin") -DATADIR_DEFINE(DATADIR_MSTORY, "data/mstory.bin") -DATADIR_DEFINE(DATADIR_MSTORY2, "data/mstory2.bin") -DATADIR_DEFINE(DATADIR_MSTORY3, "data/mstory3.bin") -DATADIR_DEFINE(DATADIR_MSTORY4, "data/mstory4.bin") -DATADIR_DEFINE(DATADIR_OPTION, "data/option.bin") -DATADIR_DEFINE(DATADIR_PEACH, "data/peach.bin") -DATADIR_DEFINE(DATADIR_PEACHMDL0, "data/peachmdl0.bin") -DATADIR_DEFINE(DATADIR_PEACHMDL1, "data/peachmdl1.bin") -DATADIR_DEFINE(DATADIR_PEACHMOT, "data/peachmot.bin") -DATADIR_DEFINE(DATADIR_PRESENT, "data/present.bin") -DATADIR_DEFINE(DATADIR_RESULT, "data/result.bin") -DATADIR_DEFINE(DATADIR_SAF, "data/saf.bin") -DATADIR_DEFINE(DATADIR_SELMENU, "data/selmenu.bin") -DATADIR_DEFINE(DATADIR_SETUP, "data/setup.bin") -DATADIR_DEFINE(DATADIR_STAFF, "data/staff.bin") -DATADIR_DEFINE(DATADIR_TITLE, "data/title.bin") -DATADIR_DEFINE(DATADIR_W01, "data/w01.bin") -DATADIR_DEFINE(DATADIR_W02, "data/w02.bin") -DATADIR_DEFINE(DATADIR_W03, "data/w03.bin") -DATADIR_DEFINE(DATADIR_W04, "data/w04.bin") -DATADIR_DEFINE(DATADIR_W05, "data/w05.bin") -DATADIR_DEFINE(DATADIR_W06, "data/w06.bin") -DATADIR_DEFINE(DATADIR_W10, "data/w10.bin") -DATADIR_DEFINE(DATADIR_W20, "data/w20.bin") -DATADIR_DEFINE(DATADIR_W21, "data/w21.bin") -DATADIR_DEFINE(DATADIR_WALUIGI, "data/waluigi.bin") -DATADIR_DEFINE(DATADIR_WALUIGIMDL0, "data/waluigimdl0.bin") -DATADIR_DEFINE(DATADIR_WALUIGIMDL1, "data/waluigimdl1.bin") -DATADIR_DEFINE(DATADIR_WALUIGIMOT, "data/waluigimot.bin") -DATADIR_DEFINE(DATADIR_WARIO, "data/wario.bin") -DATADIR_DEFINE(DATADIR_WARIOMDL0, "data/wariomdl0.bin") -DATADIR_DEFINE(DATADIR_WARIOMDL1, "data/wariomdl1.bin") -DATADIR_DEFINE(DATADIR_WARIOMOT, "data/wariomot.bin") -DATADIR_DEFINE(DATADIR_WIN, "data/win.bin") -DATADIR_DEFINE(DATADIR_YOSHI, "data/yoshi.bin") -DATADIR_DEFINE(DATADIR_YOSHIMDL0, "data/yoshimdl0.bin") -DATADIR_DEFINE(DATADIR_YOSHIMDL1, "data/yoshimdl1.bin") -DATADIR_DEFINE(DATADIR_YOSHIMOT, "data/yoshimot.bin") -DATADIR_DEFINE(DATADIR_ZTAR, "data/ztar.bin") \ No newline at end of file +DATADIR_DEFINE(E3SETUP, "data/E3setup.bin") +DATADIR_DEFINE(BBATTLE, "data/bbattle.bin") +DATADIR_DEFINE(BGUEST, "data/bguest.bin") +DATADIR_DEFINE(BKOOPA, "data/bkoopa.bin") +DATADIR_DEFINE(BKOOPASUIT, "data/bkoopasuit.bin") +DATADIR_DEFINE(BKUJIYA, "data/bkujiya.bin") +DATADIR_DEFINE(BLAST5, "data/blast5.bin") +DATADIR_DEFINE(BOARD, "data/board.bin") +DATADIR_DEFINE(BPAUSE, "data/bpause.bin") +DATADIR_DEFINE(BYOKODORI, "data/byokodori.bin") +DATADIR_DEFINE(DAISY, "data/daisy.bin") +DATADIR_DEFINE(DAISYMDL0, "data/daisymdl0.bin") +DATADIR_DEFINE(DAISYMDL1, "data/daisymdl1.bin") +DATADIR_DEFINE(DAISYMOT, "data/daisymot.bin") +DATADIR_DEFINE(DONKEY, "data/donkey.bin") +DATADIR_DEFINE(DONKEYMDL0, "data/donkeymdl0.bin") +DATADIR_DEFINE(DONKEYMDL1, "data/donkeymdl1.bin") +DATADIR_DEFINE(DONKEYMOT, "data/donkeymot.bin") +DATADIR_DEFINE(EFFECT, "data/effect.bin") +DATADIR_DEFINE(GAMEMES, "data/gamemes.bin") +DATADIR_DEFINE(INST, "data/inst.bin") +DATADIR_DEFINE(INSTFONT, "data/instfont.bin") +DATADIR_DEFINE(INSTPIC, "data/instpic.bin") +DATADIR_DEFINE(LUIGI, "data/luigi.bin") +DATADIR_DEFINE(LUIGIMDL0, "data/luigimdl0.bin") +DATADIR_DEFINE(LUIGIMDL1, "data/luigimdl1.bin") +DATADIR_DEFINE(LUIGIMOT, "data/luigimot.bin") +DATADIR_DEFINE(M300, "data/m300.bin") +DATADIR_DEFINE(M302, "data/m302.bin") +DATADIR_DEFINE(M303, "data/m303.bin") +DATADIR_DEFINE(M330, "data/m330.bin") +DATADIR_DEFINE(M333, "data/m333.bin") +DATADIR_DEFINE(M401, "data/m401.bin") +DATADIR_DEFINE(M402, "data/m402.bin") +DATADIR_DEFINE(M403, "data/m403.bin") +DATADIR_DEFINE(M404, "data/m404.bin") +DATADIR_DEFINE(M405, "data/m405.bin") +DATADIR_DEFINE(M406, "data/m406.bin") +DATADIR_DEFINE(M407, "data/m407.bin") +DATADIR_DEFINE(M408, "data/m408.bin") +DATADIR_DEFINE(M409, "data/m409.bin") +DATADIR_DEFINE(M410, "data/m410.bin") +DATADIR_DEFINE(M411, "data/m411.bin") +DATADIR_DEFINE(M412, "data/m412.bin") +DATADIR_DEFINE(M413, "data/m413.bin") +DATADIR_DEFINE(M414, "data/m414.bin") +DATADIR_DEFINE(M415, "data/m415.bin") +DATADIR_DEFINE(M416, "data/m416.bin") +DATADIR_DEFINE(M417, "data/m417.bin") +DATADIR_DEFINE(M418, "data/m418.bin") +DATADIR_DEFINE(M419, "data/m419.bin") +DATADIR_DEFINE(M420, "data/m420.bin") +DATADIR_DEFINE(M421, "data/m421.bin") +DATADIR_DEFINE(M422, "data/m422.bin") +DATADIR_DEFINE(M423, "data/m423.bin") +DATADIR_DEFINE(M424, "data/m424.bin") +DATADIR_DEFINE(M425, "data/m425.bin") +DATADIR_DEFINE(M426, "data/m426.bin") +DATADIR_DEFINE(M427, "data/m427.bin") +DATADIR_DEFINE(M428, "data/m428.bin") +DATADIR_DEFINE(M429, "data/m429.bin") +DATADIR_DEFINE(M430, "data/m430.bin") +DATADIR_DEFINE(M431, "data/m431.bin") +DATADIR_DEFINE(M432, "data/m432.bin") +DATADIR_DEFINE(M433, "data/m433.bin") +DATADIR_DEFINE(M434, "data/m434.bin") +DATADIR_DEFINE(M435, "data/m435.bin") +DATADIR_DEFINE(M436, "data/m436.bin") +DATADIR_DEFINE(M437, "data/m437.bin") +DATADIR_DEFINE(M438, "data/m438.bin") +DATADIR_DEFINE(M439, "data/m439.bin") +DATADIR_DEFINE(M440, "data/m440.bin") +DATADIR_DEFINE(M441, "data/m441.bin") +DATADIR_DEFINE(M442, "data/m442.bin") +DATADIR_DEFINE(M443, "data/m443.bin") +DATADIR_DEFINE(M444, "data/m444.bin") +DATADIR_DEFINE(M445, "data/m445.bin") +DATADIR_DEFINE(M446, "data/m446.bin") +DATADIR_DEFINE(M447, "data/m447.bin") +DATADIR_DEFINE(M448, "data/m448.bin") +DATADIR_DEFINE(M449, "data/m449.bin") +DATADIR_DEFINE(M450, "data/m450.bin") +DATADIR_DEFINE(M451, "data/m451.bin") +DATADIR_DEFINE(M453, "data/m453.bin") +DATADIR_DEFINE(M455, "data/m455.bin") +DATADIR_DEFINE(M456, "data/m456.bin") +DATADIR_DEFINE(M457, "data/m457.bin") +DATADIR_DEFINE(M458, "data/m458.bin") +DATADIR_DEFINE(M459, "data/m459.bin") +DATADIR_DEFINE(M460, "data/m460.bin") +DATADIR_DEFINE(M461, "data/m461.bin") +DATADIR_DEFINE(M462, "data/m462.bin") +DATADIR_DEFINE(MARIO, "data/mario.bin") +DATADIR_DEFINE(MARIOMDL0, "data/mariomdl0.bin") +DATADIR_DEFINE(MARIOMDL1, "data/mariomdl1.bin") +DATADIR_DEFINE(MARIOMOT, "data/mariomot.bin") +DATADIR_DEFINE(MENT, "data/ment.bin") +DATADIR_DEFINE(MGCONST, "data/mgconst.bin") +DATADIR_DEFINE(MGMODE, "data/mgmode.bin") +DATADIR_DEFINE(MODESEL, "data/modesel.bin") +DATADIR_DEFINE(MPEX, "data/mpex.bin") +DATADIR_DEFINE(MSTORY, "data/mstory.bin") +DATADIR_DEFINE(MSTORY2, "data/mstory2.bin") +DATADIR_DEFINE(MSTORY3, "data/mstory3.bin") +DATADIR_DEFINE(MSTORY4, "data/mstory4.bin") +DATADIR_DEFINE(OPTION, "data/option.bin") +DATADIR_DEFINE(PEACH, "data/peach.bin") +DATADIR_DEFINE(PEACHMDL0, "data/peachmdl0.bin") +DATADIR_DEFINE(PEACHMDL1, "data/peachmdl1.bin") +DATADIR_DEFINE(PEACHMOT, "data/peachmot.bin") +DATADIR_DEFINE(PRESENT, "data/present.bin") +DATADIR_DEFINE(RESULT, "data/result.bin") +DATADIR_DEFINE(SAF, "data/saf.bin") +DATADIR_DEFINE(SELMENU, "data/selmenu.bin") +DATADIR_DEFINE(SETUP, "data/setup.bin") +DATADIR_DEFINE(STAFF, "data/staff.bin") +DATADIR_DEFINE(TITLE, "data/title.bin") +DATADIR_DEFINE(W01, "data/w01.bin") +DATADIR_DEFINE(W02, "data/w02.bin") +DATADIR_DEFINE(W03, "data/w03.bin") +DATADIR_DEFINE(W04, "data/w04.bin") +DATADIR_DEFINE(W05, "data/w05.bin") +DATADIR_DEFINE(W06, "data/w06.bin") +DATADIR_DEFINE(W10, "data/w10.bin") +DATADIR_DEFINE(W20, "data/w20.bin") +DATADIR_DEFINE(W21, "data/w21.bin") +DATADIR_DEFINE(WALUIGI, "data/waluigi.bin") +DATADIR_DEFINE(WALUIGIMDL0, "data/waluigimdl0.bin") +DATADIR_DEFINE(WALUIGIMDL1, "data/waluigimdl1.bin") +DATADIR_DEFINE(WALUIGIMOT, "data/waluigimot.bin") +DATADIR_DEFINE(WARIO, "data/wario.bin") +DATADIR_DEFINE(WARIOMDL0, "data/wariomdl0.bin") +DATADIR_DEFINE(WARIOMDL1, "data/wariomdl1.bin") +DATADIR_DEFINE(WARIOMOT, "data/wariomot.bin") +DATADIR_DEFINE(WIN, "data/win.bin") +DATADIR_DEFINE(YOSHI, "data/yoshi.bin") +DATADIR_DEFINE(YOSHIMDL0, "data/yoshimdl0.bin") +DATADIR_DEFINE(YOSHIMDL1, "data/yoshimdl1.bin") +DATADIR_DEFINE(YOSHIMOT, "data/yoshimot.bin") +DATADIR_DEFINE(ZTAR, "data/ztar.bin") \ No newline at end of file diff --git a/include/game/data.h b/include/game/data.h index 612f11fb..889a931c 100644 --- a/include/game/data.h +++ b/include/game/data.h @@ -3,6 +3,8 @@ #include "game/dvd.h" +#include "datadir_enum.h" + #define DATA_DECODE_NONE 0 #define DATA_DECODE_LZ 1 #define DATA_DECODE_SLIDE 2 @@ -10,21 +12,10 @@ #define DATA_DECODE_FSLIDE 4 #define DATA_DECODE_RLE 5 -#define MAKE_DATA_NUM(dir, file) (((dir) << 16)+(file)) -#define MAKE_DIR_NUM(dir) ((dir) << 16) - #define DATA_NUM_LISTEND -1 #include "dolphin/types.h" -#define DATADIR_DEFINE(name, path) name, - -typedef enum { - #include "datadir_table.h" - DATADIR_COUNT -} DataDirID; - -#undef DATADIR_DEFINE typedef struct data_read_stat { s32 dir_id; diff --git a/src/REL/bootDll/main.c b/src/REL/bootDll/main.c index 2b445351..42f9acbb 100644 --- a/src/REL/bootDll/main.c +++ b/src/REL/bootDll/main.c @@ -14,6 +14,8 @@ #include "math.h" #include "rel_sqrt_consts.h" +#include "data_num/title.h" + #define HU_PAD_BTN_ALL (HuPadBtn[0] | HuPadBtn[1] | HuPadBtn[2] | HuPadBtn[3]) #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]) @@ -86,7 +88,7 @@ static void BootProc(void) HuSprAttrSet(group, 0, SPRITE_ATTR_HIDDEN); if(omovlevtno != 0) { HuAudSndGrpSetSet(0); - data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 1)); + data = HuSprAnimReadFile(TITLE_HUDSON_ANM); sprite_hudson = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 1, sprite_hudson); HuSprPosSet(group, 1, 288, 240); @@ -116,7 +118,7 @@ static void BootProc(void) MGSeqInit(); HuWinInit(1); TitleInit(); - data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 1)); + data = HuSprAnimReadFile(TITLE_HUDSON_ANM); sprite_hudson = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 1, sprite_hudson); HuSprPosSet(group, 1, 288, 240); @@ -287,15 +289,15 @@ static void ProgressiveProc(void) VIFlush(); } group = HuSprGrpCreate(3); - data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 3)); + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CHOOSE_ANM); sprite = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 0, sprite); HuSprPosSet(group, 0, 288, 240); - data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 6)); + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_ON_ANM); sprite = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 1, sprite); HuSprPosSet(group, 1, progressivePosTbl[option*2], progressivePosTbl[(option*2)+1]); - data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 7)); + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_CURSOR_OFF_ANM); sprite = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 2, sprite); HuSprPosSet(group, 2, progressivePosTbl[option*2], progressivePosTbl[(option*2)+1]); @@ -333,9 +335,9 @@ static void ProgressiveProc(void) HuSprGrpKill(group); group = HuSprGrpCreate(1); if(!option) { - data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 4)); + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_ON_ANM); } else { - data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 5)); + data = HuSprAnimReadFile(TITLE_PROGRESSIVE_OFF_ANM); } sprite = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 0, sprite); @@ -452,35 +454,35 @@ static void TitleInit(void) s16 model; s16 sprite; AnimData *sprite_data; - titleModel[0] = model = Hu3DModelCreateFile(MAKE_DATA_NUM(DATADIR_TITLE, 11)); + titleModel[0] = model = Hu3DModelCreateFile(TITLE_CHAR_HSF); Hu3DModelAttrSet(model, 1); Hu3DModelAttrSet(model, 0x40000001); - titleModel[1] = model = Hu3DModelCreateFile(MAKE_DATA_NUM(DATADIR_TITLE, 12)); + titleModel[1] = model = Hu3DModelCreateFile(TITLE_CUBE_HSF); Hu3DModelAttrSet(model, 1); Hu3DModelAttrSet(model, 0x40000001); - titleModel[2] = model = Hu3DModelCreateFile(MAKE_DATA_NUM(DATADIR_TITLE, 13)); + titleModel[2] = model = Hu3DModelCreateFile(TITLE_SKY_HSF); Hu3DModelAttrSet(model, 1); Hu3DModelAttrSet(model, 0x40000001); Hu3DModelCameraInfoSet(model, 1); Hu3DModelLightInfoSet(model, 1); titleGroup = HuSprGrpCreate(4); - sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 8)); + sprite_data = HuSprAnimReadFile(TITLE_BG_ANM); sprite = HuSprCreate(sprite_data, 0, 0); HuSprGrpMemberSet(titleGroup, 0, sprite); HuSprAttrSet(titleGroup, 0, SPRITE_ATTR_HIDDEN); HuSprDrawNoSet(titleGroup, 0, 127); HuSprPosSet(titleGroup, 0, 288, 240); - sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 10)); + sprite_data = HuSprAnimReadFile(TITLE_COPYRIGHT_ANM); sprite = HuSprCreate(sprite_data, 1, 0); HuSprGrpMemberSet(titleGroup, 1, sprite); HuSprAttrSet(titleGroup, 1, SPRITE_ATTR_HIDDEN); HuSprPosSet(titleGroup, 1, 288, 420); - sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 2)); + sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_ANM); sprite = HuSprCreate(sprite_data, 2, 0); HuSprGrpMemberSet(titleGroup, 2, sprite); HuSprAttrSet(titleGroup, 2, SPRITE_ATTR_HIDDEN|SPRITE_ATTR_BILINEAR); HuSprPosSet(titleGroup, 2, 288, 380); - sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 9)); + sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); sprite = HuSprCreate(sprite_data, 0, 0); HuSprGrpMemberSet(titleGroup, 3, sprite); HuSprAttrSet(titleGroup, 3, SPRITE_ATTR_HIDDEN|SPRITE_ATTR_BILINEAR); diff --git a/src/REL/w03Dll/main.c b/src/REL/w03Dll/main.c index 6e04ca5b..78665f8c 100644 --- a/src/REL/w03Dll/main.c +++ b/src/REL/w03Dll/main.c @@ -44,18 +44,18 @@ u8 WipeStatGet(void); //DATA w03StructUnk0 lbl_1_data_0[] = { -{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0004)}, -{{145.0988f, 65.6173f, -2004.14f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0005)}, -{{-1548.14f, -1148.76f, -1095.54f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0006)}, -{{1050.0f, 50.0f, -1810.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000B)}, -{{-1950.0f, 50.0f, 1790.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000B)}, -{{1050.0f, 0.0f, -1750.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000A)}, -{{-1950.0f, 0.0f, 1850.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x000A)}, -{{1950.0f, 0.0f, -1800.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0010)}, -{{-3150.0f, 0.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0011)}, -{{-3150.0f, 270.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0077, 0x0012)}, -{{2080.0f, 0.0f, -1635.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x000D)}, -{{-3000.0f, 0.0f, -500.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x000D)}, +{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0004)}, +{{145.0988f, 65.6173f, -2004.14f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0005)}, +{{-1548.14f, -1148.76f, -1095.54f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0006)}, +{{1050.0f, 50.0f, -1810.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x000B)}, +{{-1950.0f, 50.0f, 1790.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x000B)}, +{{1050.0f, 0.0f, -1750.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x000A)}, +{{-1950.0f, 0.0f, 1850.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x000A)}, +{{1950.0f, 0.0f, -1800.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0010)}, +{{-3150.0f, 0.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0011)}, +{{-3150.0f, 270.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0012)}, +{{2080.0f, 0.0f, -1635.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_BGUEST, 0x000D)}, +{{-3000.0f, 0.0f, -500.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_BGUEST, 0x000D)}, }; s16 lbl_1_data_1E0 = -1; @@ -80,12 +80,12 @@ w03StructUnk1 lbl_1_data_1EC = { }; s32 lbl_1_data_20C[] = { - MAKE_DATA_NUM(0x0077, 0x001C), + DATA_MAKE_NUM(DATADIR_W03, 0x001C), DATA_NUM_LISTEND }; s32 lbl_1_data_214[] = { - MAKE_DATA_NUM(0x0002, 0x000E), + DATA_MAKE_NUM(DATADIR_BGUEST, 0x000E), DATA_NUM_LISTEND }; diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index 3003f53a..7143ac03 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -130,20 +130,20 @@ char* lbl_1_data_508[] = { }; s32 lbl_1_data_514[] = { - MAKE_DATA_NUM(7, 0x6D), - MAKE_DATA_NUM(7, 0x6E), - MAKE_DATA_NUM(7, 0x6F), - MAKE_DATA_NUM(7, 0x70), - MAKE_DATA_NUM(7, 0x71), - MAKE_DATA_NUM(7, 0x72), - MAKE_DATA_NUM(7, 0x73), - MAKE_DATA_NUM(7, 0x74), - MAKE_DATA_NUM(7, 0x76), - MAKE_DATA_NUM(7, 0x77), - MAKE_DATA_NUM(7, 0x78), - MAKE_DATA_NUM(7, 0x79), - MAKE_DATA_NUM(7, 0x7A), - MAKE_DATA_NUM(7, 0x7B), + DATA_MAKE_NUM(DATADIR_BOARD, 0x6D), + DATA_MAKE_NUM(DATADIR_BOARD, 0x6E), + DATA_MAKE_NUM(DATADIR_BOARD, 0x6F), + DATA_MAKE_NUM(DATADIR_BOARD, 0x70), + DATA_MAKE_NUM(DATADIR_BOARD, 0x71), + DATA_MAKE_NUM(DATADIR_BOARD, 0x72), + DATA_MAKE_NUM(DATADIR_BOARD, 0x73), + DATA_MAKE_NUM(DATADIR_BOARD, 0x74), + DATA_MAKE_NUM(DATADIR_BOARD, 0x76), + DATA_MAKE_NUM(DATADIR_BOARD, 0x77), + DATA_MAKE_NUM(DATADIR_BOARD, 0x78), + DATA_MAKE_NUM(DATADIR_BOARD, 0x79), + DATA_MAKE_NUM(DATADIR_BOARD, 0x7A), + DATA_MAKE_NUM(DATADIR_BOARD, 0x7B), }; //BSS diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index 460c807e..40d5ad42 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -41,26 +41,26 @@ s32 lbl_1_data_288 = -1; char lbl_1_data_28C[] = "%d"; -s32 lbl_1_data_290[] = { //TODO: make sure this actually uses MAKE_DATA_NUM macro - MAKE_DATA_NUM(0x5F, 0x62), - MAKE_DATA_NUM(0x1A, 0x62), - MAKE_DATA_NUM(0x6D, 0x62), - MAKE_DATA_NUM(0x8A, 0x62), - MAKE_DATA_NUM(0x85, 0x62), - MAKE_DATA_NUM(0x11, 0x62), - MAKE_DATA_NUM(0x0D, 0x62), - MAKE_DATA_NUM(0x81, 0x62), +s32 lbl_1_data_290[] = { //TODO: make sure this actually uses DATA_MAKE_NUM macro + DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x62), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 0x62), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 0x62), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 0x62), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 0x62), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 0x62), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 0x62), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 0x62), }; -s32 lbl_1_data_2B0[] = { //TODO: make sure this actually uses MAKE_DATA_NUM macro - MAKE_DATA_NUM(0x5F, 0x33), - MAKE_DATA_NUM(0x1A, 0x33), - MAKE_DATA_NUM(0x6D, 0x33), - MAKE_DATA_NUM(0x8A, 0x33), - MAKE_DATA_NUM(0x85, 0x33), - MAKE_DATA_NUM(0x11, 0x33), - MAKE_DATA_NUM(0x0D, 0x33), - MAKE_DATA_NUM(0x81, 0x33), +s32 lbl_1_data_2B0[] = { //TODO: make sure this actually uses DATA_MAKE_NUM macro + DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x33), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 0x33), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 0x33), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 0x33), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 0x33), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 0x33), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 0x33), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 0x33), }; s32 lbl_1_data_2D0[] = { diff --git a/src/REL/w10Dll/host.c b/src/REL/w10Dll/host.c index 7b500cc9..9d8ef0bc 100644 --- a/src/REL/w10Dll/host.c +++ b/src/REL/w10Dll/host.c @@ -3,7 +3,7 @@ #include "game/board/window.h" s32 lbl_1_data_78[2] = { - MAKE_DATA_NUM(DATADIR_W10, 16), + DATA_MAKE_NUM(DATADIR_W10, 16), -1 }; @@ -14,7 +14,7 @@ Vec lbl_1_data_80[2] = { void fn_1_AEC(void) { lbl_1_bss_1C = 0; - lbl_1_bss_1E = BoardModelCreate(MAKE_DATA_NUM(DATADIR_W10, 15), lbl_1_data_78, 0); + lbl_1_bss_1E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 15), lbl_1_data_78, 0); BoardModelMotionStart(lbl_1_bss_1E, 1, 0x40000001); BoardTutorialHostSet(lbl_1_bss_1E); BoardModelLayerSet(lbl_1_bss_1E, 6); diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index a447042d..1a1a87fe 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -22,7 +22,7 @@ unkw10Dll lbl_1_data_0[1] = { 3300.0f, 100.0f, -900.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, - MAKE_DATA_NUM(DATADIR_W10, 3) + DATA_MAKE_NUM(DATADIR_W10, 3) }; @@ -42,22 +42,22 @@ s32 lbl_1_data_34[] = { }; s32 lbl_1_data_54[2] = { - MAKE_DATA_NUM(DATADIR_W10, 18), + DATA_MAKE_NUM(DATADIR_W10, 18), DATA_NUM_LISTEND }; s32 lbl_1_data_5C[2] = { - MAKE_DATA_NUM(DATADIR_BGUEST, 9), + DATA_MAKE_NUM(DATADIR_BGUEST, 9), DATA_NUM_LISTEND }; s32 lbl_1_data_64[2] = { - MAKE_DATA_NUM(DATADIR_BGUEST, 24), + DATA_MAKE_NUM(DATADIR_BGUEST, 24), DATA_NUM_LISTEND }; s32 lbl_1_data_6C[2] = { - MAKE_DATA_NUM(DATADIR_BGUEST, 14), + DATA_MAKE_NUM(DATADIR_BGUEST, 14), DATA_NUM_LISTEND }; @@ -85,26 +85,26 @@ void BoardCreate(void) { fn_1_AEC(); fn_1_1D68(); lbl_1_bss_C = 0; - BoardSpaceInit(MAKE_DATA_NUM(DATADIR_W10, 0)); + BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W10, 0)); temp = BoardSpaceFlagSearch(0, 1); BoardTutorialBlockSetPos(temp, 1); - lbl_1_data_28 = BoardModelCreate(MAKE_DATA_NUM(DATADIR_W10, 1), NULL, 0); + lbl_1_data_28 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 1), NULL, 0); fn_8006DDE8(lbl_1_data_28, -1.0f); BoardModelPosSet(lbl_1_data_28, 0.0f, 0.0f, 0.0f); BoardModelMotionStart(lbl_1_data_28, 0, 0x40000001); BoardModelMotionSpeedSet(lbl_1_data_28, 1.0f); - lbl_1_data_2A = BoardModelCreate(MAKE_DATA_NUM(DATADIR_W10, 2), NULL, 0); + lbl_1_data_2A = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 2), NULL, 0); fn_8006DDE8(lbl_1_data_2A, -1.0f); BoardModelPosSet(lbl_1_data_2A, 0.0f, 0.0f, 0.0f); BoardModelMotionStart(lbl_1_data_2A, 0, 0x40000001); - lbl_1_data_2C = BoardModelCreate(MAKE_DATA_NUM(DATADIR_W10, 17), lbl_1_data_54, 0); + lbl_1_data_2C = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 17), lbl_1_data_54, 0); BoardModelPosSet(lbl_1_data_2C, 0.0f, 0.0f, 0.0f); BoardModelMotionStart(lbl_1_data_2C, 1, 0x40000001); - lbl_1_data_2E = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BGUEST, 5), lbl_1_data_5C, 0); + lbl_1_data_2E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 5), lbl_1_data_5C, 0); BoardModelMotionStart(lbl_1_data_2E, 1, 0x40000001); - lbl_1_data_32 = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BGUEST, 18), lbl_1_data_64, 0); + lbl_1_data_32 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 18), lbl_1_data_64, 0); BoardModelMotionStart(lbl_1_data_32, 1, 0x40000001); - lbl_1_data_30 = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BGUEST, 13), lbl_1_data_6C, 0); + lbl_1_data_30 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 13), lbl_1_data_6C, 0); BoardModelMotionStart(lbl_1_data_30, 1, 0x40000001); BoardLightHookSet(&fn_1_8C0, &fn_1_904); for (i = 0; i < ARRAY_COUNT(lbl_1_data_0); i++) { diff --git a/src/REL/w10Dll/tutorial.c b/src/REL/w10Dll/tutorial.c index 2425dadf..99a728ec 100644 --- a/src/REL/w10Dll/tutorial.c +++ b/src/REL/w10Dll/tutorial.c @@ -68,17 +68,17 @@ w10DllUnk04 lbl_1_data_108[42] = { char lbl_1_data_258[] = "Tutorial Hook P0:%d P1:%d P2:%d P3:%d SCEN:%d CUE:%d PRM:%d DICE:%d MSG:%d\n"; s32 lbl_1_data_2A8[11] = { - MAKE_DATA_NUM(DATADIR_W10, 4), - MAKE_DATA_NUM(DATADIR_W10, 5), - MAKE_DATA_NUM(DATADIR_W10, 6), - MAKE_DATA_NUM(DATADIR_W10, 7), - MAKE_DATA_NUM(DATADIR_W10, 8), - MAKE_DATA_NUM(DATADIR_W10, 9), - MAKE_DATA_NUM(DATADIR_W10, 10), - MAKE_DATA_NUM(DATADIR_W10, 11), - MAKE_DATA_NUM(DATADIR_W10, 12), - MAKE_DATA_NUM(DATADIR_W10, 13), - MAKE_DATA_NUM(DATADIR_W10, 14) + DATA_MAKE_NUM(DATADIR_W10, 4), + DATA_MAKE_NUM(DATADIR_W10, 5), + DATA_MAKE_NUM(DATADIR_W10, 6), + DATA_MAKE_NUM(DATADIR_W10, 7), + DATA_MAKE_NUM(DATADIR_W10, 8), + DATA_MAKE_NUM(DATADIR_W10, 9), + DATA_MAKE_NUM(DATADIR_W10, 10), + DATA_MAKE_NUM(DATADIR_W10, 11), + DATA_MAKE_NUM(DATADIR_W10, 12), + DATA_MAKE_NUM(DATADIR_W10, 13), + DATA_MAKE_NUM(DATADIR_W10, 14) }; void fn_1_176C(void) { diff --git a/src/game/board/basic_space.c b/src/game/board/basic_space.c index 165df930..23dcceda 100644 --- a/src/game/board/basic_space.c +++ b/src/game/board/basic_space.c @@ -52,16 +52,16 @@ static omObjData *coinChgObj[4] = { }; static s32 coinDigitMdl[10] = { - MAKE_DATA_NUM(DATADIR_BOARD, 12), - MAKE_DATA_NUM(DATADIR_BOARD, 13), - MAKE_DATA_NUM(DATADIR_BOARD, 14), - MAKE_DATA_NUM(DATADIR_BOARD, 15), - MAKE_DATA_NUM(DATADIR_BOARD, 16), - MAKE_DATA_NUM(DATADIR_BOARD, 17), - MAKE_DATA_NUM(DATADIR_BOARD, 18), - MAKE_DATA_NUM(DATADIR_BOARD, 19), - MAKE_DATA_NUM(DATADIR_BOARD, 20), - MAKE_DATA_NUM(DATADIR_BOARD, 21), + DATA_MAKE_NUM(DATADIR_BOARD, 12), + DATA_MAKE_NUM(DATADIR_BOARD, 13), + DATA_MAKE_NUM(DATADIR_BOARD, 14), + DATA_MAKE_NUM(DATADIR_BOARD, 15), + DATA_MAKE_NUM(DATADIR_BOARD, 16), + DATA_MAKE_NUM(DATADIR_BOARD, 17), + DATA_MAKE_NUM(DATADIR_BOARD, 18), + DATA_MAKE_NUM(DATADIR_BOARD, 19), + DATA_MAKE_NUM(DATADIR_BOARD, 20), + DATA_MAKE_NUM(DATADIR_BOARD, 21), }; void BoardLandBlueExec(s32 player, s32 space) { @@ -206,8 +206,8 @@ void BoardCoinChgHide(s32 index) { } static const s32 coinSignMdl[2] = { - MAKE_DATA_NUM(DATADIR_BOARD, 22), - MAKE_DATA_NUM(DATADIR_BOARD, 23) + DATA_MAKE_NUM(DATADIR_BOARD, 22), + DATA_MAKE_NUM(DATADIR_BOARD, 23) }; static void CreateCoinChg(coinChg *coin_chg, Vec *pos) { @@ -221,7 +221,7 @@ static void CreateCoinChg(coinChg *coin_chg, Vec *pos) { coin_chg->sign_model = BoardModelCreate(coinSignMdl[coin_chg->minus], NULL, 0); coin_chg->tens_model = BoardModelCreate(coinDigitMdl[coin_chg->tens], NULL, 0); coin_chg->ones_model = BoardModelCreate(coinDigitMdl[coin_chg->ones], NULL, 0); - coin_chg->coin_model = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BOARD, 10), NULL, 0); + coin_chg->coin_model = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 0); BoardModelPosSetV(coin_chg->sign_model, pos); BoardModelPosSetV(coin_chg->tens_model, pos); BoardModelPosSetV(coin_chg->ones_model, pos); diff --git a/src/game/board/main.c b/src/game/board/main.c index 6f4de9c2..93bf8b68 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -210,7 +210,7 @@ static void KillBoardFunc(omObjData *object) BoardTutorialWorkRestore(); } _ClearFlag(FLAG_ID_MAKE(1, 0)); - HuARDirFree(MAKE_DIR_NUM(DATADIR_BOARD)); + HuARDirFree(DATADIR_BOARD); if(_CheckFlag(FLAG_ID_MAKE(1, 27))) { omOvlReturnEx(2, 1); } else { @@ -668,7 +668,7 @@ static void CreateBoard(void) if(!reset_unk32) { GWSystem.unk_32 = 1; } - guest_status = BoardDataDirReadAsync(MAKE_DIR_NUM(DATADIR_BGUEST)); + guest_status = BoardDataDirReadAsync(DATADIR_BGUEST); if(guest_status != -1) { BoardDataAsyncWait(guest_status); } @@ -698,29 +698,29 @@ static void CreateBoard(void) BoardCameraMotionWait(); BoardTauntInit(); _SetFlag(FLAG_ID_MAKE(1, 14)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BKOOPASUIT)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BBATTLE)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BKOOPA)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BKUJIYA)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BYOKODORI)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BPAUSE)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BLAST5)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_EFFECT)); + HuDataDirClose(DATADIR_BKOOPASUIT); + HuDataDirClose(DATADIR_BBATTLE); + HuDataDirClose(DATADIR_BKOOPA); + HuDataDirClose(DATADIR_BKUJIYA); + HuDataDirClose(DATADIR_BYOKODORI); + HuDataDirClose(DATADIR_BPAUSE); + HuDataDirClose(DATADIR_BLAST5); + HuDataDirClose(DATADIR_EFFECT); _SetFlag(FLAG_ID_MAKE(1, 16)); } static void DestroyBoard(void) { s32 dir_table[] = { - MAKE_DIR_NUM(DATADIR_W01), - MAKE_DIR_NUM(DATADIR_W02), - MAKE_DIR_NUM(DATADIR_W03), - MAKE_DIR_NUM(DATADIR_W04), - MAKE_DIR_NUM(DATADIR_W05), - MAKE_DIR_NUM(DATADIR_W06), - MAKE_DIR_NUM(DATADIR_W10), - MAKE_DIR_NUM(DATADIR_W20), - MAKE_DIR_NUM(DATADIR_W21), + DATADIR_W01, + DATADIR_W02, + DATADIR_W03, + DATADIR_W04, + DATADIR_W05, + DATADIR_W06, + DATADIR_W10, + DATADIR_W20, + DATADIR_W21 }; BoardTauntKill(); BoardAudSeqFadeOutAll(); @@ -738,14 +738,14 @@ static void DestroyBoard(void) BoardModelKillAll(); BoardWinKillAll(); HuDataDirClose(dir_table[BoardCurrGet()]); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_EFFECT)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BGUEST)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BKOOPASUIT)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BBATTLE)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BKOOPA)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BKUJIYA)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BYOKODORI)); - HuDataDirClose(MAKE_DIR_NUM(DATADIR_BOARD)); + HuDataDirClose(DATADIR_EFFECT); + HuDataDirClose(DATADIR_BGUEST); + HuDataDirClose(DATADIR_BKOOPASUIT); + HuDataDirClose(DATADIR_BBATTLE); + HuDataDirClose(DATADIR_BKOOPA); + HuDataDirClose(DATADIR_BKUJIYA); + HuDataDirClose(DATADIR_BYOKODORI); + HuDataDirClose(DATADIR_BOARD); createFunc = destroyFunc = NULL; } @@ -1760,7 +1760,7 @@ void BoardConfettiCreate(Vec *pos, s16 count, float range) object->trans.y = pos->y; object->trans.z = pos->z; object->rot.x = range; - work->gfx_mdl = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BOARD, 7), NULL, 0); + work->gfx_mdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 7), NULL, 0); BoardModelLayerSet(work->gfx_mdl, 2); BoardModelVisibilitySet(work->gfx_mdl, 0); { @@ -1962,9 +1962,9 @@ typedef struct last5_gfx_work { } Last5GfxWork; static s32 last5GfxSprTbl[3] = { - MAKE_DATA_NUM(DATADIR_BOARD, 95), - MAKE_DATA_NUM(DATADIR_BOARD, 97), - MAKE_DATA_NUM(DATADIR_BOARD, 96), + DATA_MAKE_NUM(DATADIR_BOARD, 95), + DATA_MAKE_NUM(DATADIR_BOARD, 97), + DATA_MAKE_NUM(DATADIR_BOARD, 96), }; static float last5GfxPosTbl[2][3][2] = { @@ -2019,7 +2019,7 @@ void BoardLast5GfxInit(void) } spr_file = last5GfxSprTbl[i]; if(i == 2 && work->is_last && GWLanguageGet() != 0) { - spr_file = MAKE_DATA_NUM(DATADIR_BOARD, 98); + spr_file = DATA_MAKE_NUM(DATADIR_BOARD, 98); } BoardSpriteCreate(spr_file, prio, NULL, &work->sprites[i]); HuSprGrpMemberSet(work->group, i, work->sprites[i]); diff --git a/src/game/board/player.c b/src/game/board/player.c index 121cb243..33378078 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -13,24 +13,15 @@ extern void BoardModelExistDupe(s16, s32); extern void BoardModelCameraSet(s16, u16); extern void BoardItemStatusKill(s32); extern void BoardModelAmbSet(s16, f32, f32, f32); -extern void BoardModelPosSetV(s16, Vec*); -extern void BoardModelPosSet(s16, f32, f32, f32); extern s32 BoardModelPosGet(s16, Vec*); -extern void BoardModelRotSetV(s16, Vec*); -extern void BoardModelRotSet(s16, f32, f32, f32); extern s32 BoardModelRotGet(s16, Vec*); -extern void BoardModelRotYSet(s16, f32); extern f32 BoardModelRotYGet(s16); -extern void BoardModelScaleSetV(s16, Vec*); -extern void BoardModelScaleSet(s16, f32, f32, f32); extern void BoardModelScaleGet(s16, s32*); extern void BoardModelVoiceEnableSet(s16, s32, s32); extern s32 BoardModelMotionCreate(s16, s32); extern void BoardModelMotionKill(s16, s32); extern s32 BoardModelMotionEndCheck(s16); -extern s32 BoardModelMotionStart(s16, s32, s32); extern s32 BoardModelMotionShiftSet(s16, s32, f32, f32, u32); -extern void BoardModelMotionSpeedSet(s16, f32); extern void BoardModelMotionTimeSet(s16, f32); extern f32 BoardModelMotionTimeGet(s16); extern f32 BoardModelMotionMaxTimeGet(s16); diff --git a/src/game/board/space.c b/src/game/board/space.c index 9e6d6ffd..3bccfbd6 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -13,7 +13,6 @@ extern s16 BoardStarHostMdlGet(void); -extern void BoardModelPosSetV(s16 model, Vec *pos); extern s16 BoardModelCreate(s32 file, s32 *data, s32 arg3); extern s16 BoardModelIDGet(s16 model); @@ -991,7 +990,7 @@ void BoardSpaceInit(s32 data_num) AnimData *data; void *data_base; s32 size; - data = data_base = HuDataSelHeapReadNum(MAKE_DATA_NUM(DATADIR_BOARD, 29), MEMORY_DEFAULT_NUM, HEAP_DATA); + data = data_base = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_BOARD, 29), MEMORY_DEFAULT_NUM, HEAP_DATA); data->bmp = (void *)((u32)data_base+(u32)data->bmp); data->pat = (void *)((u32)data_base+(u32)data->pat); data->bank = (void *)((u32)data_base+(u32)data->bank); @@ -1023,7 +1022,7 @@ void BoardSpaceInit(s32 data_num) AnimData *data; void *data_base; s32 size; - data = data_base = HuDataSelHeapReadNum(MAKE_DATA_NUM(DATADIR_BOARD, 28), MEMORY_DEFAULT_NUM, HEAP_DATA); + data = data_base = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_BOARD, 28), MEMORY_DEFAULT_NUM, HEAP_DATA); data->bmp = (void *)((u32)data_base+(u32)data->bmp); data->pat = (void *)((u32)data_base+(u32)data->pat); data->bank = (void *)((u32)data_base+(u32)data->bank); @@ -1058,7 +1057,7 @@ void BoardSpaceInit(s32 data_num) GWSystem.star_flag = 0; } if(BoardCurrGet() != 7 && BoardCurrGet() != 8) { - starPlatMdl = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BOARD, 6), NULL, 0); + starPlatMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 6), NULL, 0); BoardModelMotionStart(starPlatMdl, 0, 0x40000001); BoardModelVisibilitySet(starPlatMdl, 0); if(_CheckFlag(FLAG_ID_MAKE(1, 1))) { diff --git a/src/game/board/warp.c b/src/game/board/warp.c index 19f8253c..52d00063 100644 --- a/src/game/board/warp.c +++ b/src/game/board/warp.c @@ -139,7 +139,7 @@ static void WarpInit(s32 player) { Vec pos; s16 player_mdl = BoardPlayerModelGet(player); - warpSpringMdl = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BOARD, 1), NULL, 0); + warpSpringMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 1), NULL, 0); BoardSpacePosGet(0, GWPlayer[player].space_curr, &pos); warpYFloor = 1500.0f + pos.y; BoardModelLayerSet(warpSpringMdl, 2); @@ -187,7 +187,7 @@ static void WarpStartImpact(s32 player) { warpImpactCnt++; } } - warpImpactMdl = BoardModelCreate(MAKE_DATA_NUM(DATADIR_BOARD, 2), NULL, 0); + warpImpactMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 2), NULL, 0); BoardModelVisibilitySet(warpImpactMdl, 0); BoardModelMotionSpeedSet(warpImpactMdl, 0.0f); BoardCameraMoveSet(0); diff --git a/src/game/data.c b/src/game/data.c index 5f55fd6f..d1717de7 100644 --- a/src/game/data.c +++ b/src/game/data.c @@ -11,7 +11,7 @@ static void **HuDataReadMultiSub(s32 *data_ids, BOOL use_num, s32 num); #define DATADIR_DEFINE(name, path) { path, -1 }, -static FileListEntry DataDirStat[DATADIR_COUNT+1] = { +static FileListEntry DataDirStat[DATADIR_ID_MAX+1] = { #include "datadir_table.h" { NULL, -1 } }; diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index 38fd3919..7003880a 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -399,7 +399,7 @@ static int SeqInitTimer(SeqWork *work, va_list params) work->work_float[0] = 0; work->spr_grp[0] = spr_grp = HuSprGrpCreate(4); HuSprGrpScaleSet(spr_grp, work->scale_x, work->scale_y); - spr_anim = HuSprAnimRead(SeqReadFile(MAKE_DATA_NUM(DATADIR_GAMEMES, 2))); + spr_anim = HuSprAnimRead(SeqReadFile(DATA_MAKE_NUM(DATADIR_GAMEMES, 2))); x = 12; for(i=0; i<2; i++) { sprite = HuSprCreate(spr_anim, 5, 0); @@ -410,13 +410,13 @@ static int SeqInitTimer(SeqWork *work, va_list params) x -= 24; (void)i; //Hack for Matching } - spr_anim = HuSprAnimRead(SeqReadFile(MAKE_DATA_NUM(DATADIR_GAMEMES, 1))); + spr_anim = HuSprAnimRead(SeqReadFile(DATA_MAKE_NUM(DATADIR_GAMEMES, 1))); sprite = HuSprCreate(spr_anim, 7, 0); HuSprGrpMemberSet(spr_grp, 2, sprite); HuSprPosSet(spr_grp, 2, 0, 0); HuSprTPLvlSet(spr_grp, 2, 0.5f); HuSprColorSet(spr_grp, 2, 0, 0, 0); - spr_anim = HuSprAnimRead(SeqReadFile(MAKE_DATA_NUM(DATADIR_GAMEMES, 0))); + spr_anim = HuSprAnimRead(SeqReadFile(DATA_MAKE_NUM(DATADIR_GAMEMES, 0))); sprite = HuSprCreate(spr_anim, 6, 0); HuSprGrpMemberSet(spr_grp, 3, sprite); HuSprPosSet(spr_grp, 3, 0, 0); @@ -907,23 +907,23 @@ static AnimData *SeqLoadFontChar(char *str, s16 flags) return NULL; } if(c == 32) { - return HuSprAnimRead(SeqReadFile(MAKE_DATA_NUM(DATADIR_GAMEMES, 10))); + return HuSprAnimRead(SeqReadFile(DATA_MAKE_NUM(DATADIR_GAMEMES, 10))); } for(id = 0, list=seqFontAlphaTbl; *list != 0; id++, list++) { if(*list == c) { - data_num = MAKE_DATA_NUM(DATADIR_GAMEMES, id+21); + data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id+21); return HuSprAnimRead(SeqReadFile(data_num)); } } for(id = 0, list=seqFontNumTbl; *list != 0; id++, list++) { if(*list == c) { - data_num = MAKE_DATA_NUM(DATADIR_GAMEMES, id+11); + data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id+11); return HuSprAnimRead(SeqReadFile(data_num)); } } for(id = 0, list=seqPunctTbl; *list != 0; id++, list++) { if(*list == c) { - data_num = MAKE_DATA_NUM(DATADIR_GAMEMES, id+154); + data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id+154); return HuSprAnimRead(SeqReadFile(data_num)); } } @@ -942,9 +942,9 @@ static AnimData *SeqLoadFontChar(char *str, s16 flags) while(*list != 0) { if(*list == c) { if(flags & 0x1) { - data_num = MAKE_DATA_NUM(DATADIR_GAMEMES, id+156); + data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id+156); } else { - data_num = MAKE_DATA_NUM(DATADIR_GAMEMES, id+73); + data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id+73); } return HuSprAnimRead(SeqReadFile(data_num)); } diff --git a/src/game/objsub.c b/src/game/objsub.c index 414ae740..b6cc9206 100644 --- a/src/game/objsub.c +++ b/src/game/objsub.c @@ -10,11 +10,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170001, // name_mess - MAKE_DIR_NUM(DATADIR_M401), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 0), // inst_pic[0] + DATADIR_M401, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 0), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 0), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 0), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210000, // rules_mess @@ -28,11 +28,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170002, // name_mess - MAKE_DIR_NUM(DATADIR_M402), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 1), // inst_pic[0] + DATADIR_M402, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 1), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 1), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 1), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210004, // rules_mess @@ -46,11 +46,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170003, // name_mess - MAKE_DIR_NUM(DATADIR_M403), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 2), // inst_pic[0] + DATADIR_M403, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 2), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 2), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 2), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210008, // rules_mess @@ -64,11 +64,11 @@ MgInfo mgInfoTbl[] = { 2, // flag 255, // record_idx 0x170004, // name_mess - MAKE_DIR_NUM(DATADIR_M404), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 3), // inst_pic[0] + DATADIR_M404, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 3), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 3), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 3), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x21000C, // rules_mess @@ -82,11 +82,11 @@ MgInfo mgInfoTbl[] = { 2, // flag 0, // record_idx 0x170005, // name_mess - MAKE_DIR_NUM(DATADIR_M405), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 4), // inst_pic[0] + DATADIR_M405, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 4), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 4), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 4), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210010, // rules_mess @@ -100,11 +100,11 @@ MgInfo mgInfoTbl[] = { 2, // flag 255, // record_idx 0x170006, // name_mess - MAKE_DIR_NUM(DATADIR_M406), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 5), // inst_pic[0] + DATADIR_M406, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 5), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 5), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 5), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210014, // rules_mess @@ -118,11 +118,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 1, // record_idx 0x170007, // name_mess - MAKE_DIR_NUM(DATADIR_M407), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 6), // inst_pic[0] + DATADIR_M407, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 6), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 6), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 6), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210018, // rules_mess @@ -136,11 +136,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170008, // name_mess - MAKE_DIR_NUM(DATADIR_M408), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 7), // inst_pic[0] + DATADIR_M408, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 7), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 7), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 7), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x21001C, // rules_mess @@ -154,11 +154,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170009, // name_mess - MAKE_DIR_NUM(DATADIR_M409), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 8), // inst_pic[0] + DATADIR_M409, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 8), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 8), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 8), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210020, // rules_mess @@ -172,11 +172,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x17000A, // name_mess - MAKE_DIR_NUM(DATADIR_M410), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 9), // inst_pic[0] + DATADIR_M410, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 9), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 9), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 9), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210024, // rules_mess @@ -190,13 +190,13 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x17000B, // name_mess - MAKE_DIR_NUM(DATADIR_M411), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 10), // inst_pic[0] - MAKE_DATA_NUM(DATADIR_INSTPIC, 11), // inst_pic[1] - MAKE_DATA_NUM(DATADIR_INSTPIC, 12), // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 62), // mg_pic[0] - MAKE_DATA_NUM(DATADIR_INSTPIC, 11), // mg_pic[1] - MAKE_DATA_NUM(DATADIR_INSTPIC, 12), // mg_pic[2] + DATADIR_M411, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 10), // inst_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 11), // inst_pic[1] + DATA_MAKE_NUM(DATADIR_INSTPIC, 12), // inst_pic[2] + DATA_MAKE_NUM(DATADIR_INSTPIC, 62), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 11), // mg_pic[1] + DATA_MAKE_NUM(DATADIR_INSTPIC, 12), // mg_pic[2] 0x210028, // rules_mess 0x210029, // control_mess[0] 0, // control_mess[1] @@ -208,11 +208,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x17000C, // name_mess - MAKE_DIR_NUM(DATADIR_M412), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 13), // inst_pic[0] + DATADIR_M412, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 13), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 13), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 13), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x21002C, // rules_mess @@ -226,11 +226,11 @@ MgInfo mgInfoTbl[] = { 2, // flag 255, // record_idx 0x17000D, // name_mess - MAKE_DIR_NUM(DATADIR_M413), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 14), // inst_pic[0] + DATADIR_M413, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 14), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 63), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 63), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210030, // rules_mess @@ -244,11 +244,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x17000E, // name_mess - MAKE_DIR_NUM(DATADIR_M414), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 15), // inst_pic[0] + DATADIR_M414, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 15), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 15), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 15), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210034, // rules_mess @@ -262,11 +262,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x17000F, // name_mess - MAKE_DIR_NUM(DATADIR_M415), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 16), // inst_pic[0] + DATADIR_M415, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 16), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 16), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 16), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210038, // rules_mess @@ -280,11 +280,11 @@ MgInfo mgInfoTbl[] = { 1, // flag 255, // record_idx 0x170010, // name_mess - MAKE_DIR_NUM(DATADIR_M416), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 17), // inst_pic[0] + DATADIR_M416, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 17), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 17), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 17), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x21003C, // rules_mess @@ -298,11 +298,11 @@ MgInfo mgInfoTbl[] = { 1, // flag 255, // record_idx 0x170011, // name_mess - MAKE_DIR_NUM(DATADIR_M417), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 18), // inst_pic[0] + DATADIR_M417, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 18), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 18), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 18), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210040, // rules_mess @@ -316,11 +316,11 @@ MgInfo mgInfoTbl[] = { 1, // flag 255, // record_idx 0x170012, // name_mess - MAKE_DIR_NUM(DATADIR_M418), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 19), // inst_pic[0] + DATADIR_M418, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 19), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 19), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 19), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210044, // rules_mess @@ -334,11 +334,11 @@ MgInfo mgInfoTbl[] = { 1, // flag 255, // record_idx 0x170013, // name_mess - MAKE_DIR_NUM(DATADIR_M419), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 20), // inst_pic[0] + DATADIR_M419, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 20), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 20), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 20), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210048, // rules_mess @@ -352,11 +352,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170014, // name_mess - MAKE_DIR_NUM(DATADIR_M420), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 21), // inst_pic[0] + DATADIR_M420, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 21), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 21), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 21), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x21004C, // rules_mess @@ -370,11 +370,11 @@ MgInfo mgInfoTbl[] = { 1, // flag 255, // record_idx 0x170015, // name_mess - MAKE_DIR_NUM(DATADIR_M421), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 22), // inst_pic[0] + DATADIR_M421, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 22), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 22), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 22), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210050, // rules_mess @@ -388,11 +388,11 @@ MgInfo mgInfoTbl[] = { 1, // flag 255, // record_idx 0x170016, // name_mess - MAKE_DIR_NUM(DATADIR_M422), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 23), // inst_pic[0] + DATADIR_M422, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 23), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 23), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 23), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210054, // rules_mess @@ -406,11 +406,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170017, // name_mess - MAKE_DIR_NUM(DATADIR_M423), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 24), // inst_pic[0] + DATADIR_M423, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 24), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 24), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 24), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210058, // rules_mess @@ -424,11 +424,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170018, // name_mess - MAKE_DIR_NUM(DATADIR_M424), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 25), // inst_pic[0] + DATADIR_M424, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 25), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 25), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 25), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x21005C, // rules_mess @@ -442,11 +442,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170019, // name_mess - MAKE_DIR_NUM(DATADIR_M425), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 26), // inst_pic[0] + DATADIR_M425, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 26), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 26), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 26), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210060, // rules_mess @@ -460,11 +460,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x17001A, // name_mess - MAKE_DIR_NUM(DATADIR_M426), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 27), // inst_pic[0] + DATADIR_M426, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 27), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 27), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 27), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210064, // rules_mess @@ -478,11 +478,11 @@ MgInfo mgInfoTbl[] = { 2, // flag 2, // record_idx 0x17001B, // name_mess - MAKE_DIR_NUM(DATADIR_M427), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 28), // inst_pic[0] + DATADIR_M427, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 28), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 28), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 28), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210068, // rules_mess @@ -496,11 +496,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x17001C, // name_mess - MAKE_DIR_NUM(DATADIR_M428), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 29), // inst_pic[0] + DATADIR_M428, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 29), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 29), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 29), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x21006C, // rules_mess @@ -514,11 +514,11 @@ MgInfo mgInfoTbl[] = { 2, // flag 255, // record_idx 0x17001D, // name_mess - MAKE_DIR_NUM(DATADIR_M429), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 30), // inst_pic[0] + DATADIR_M429, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 30), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 64), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 64), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210070, // rules_mess @@ -532,11 +532,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x17001E, // name_mess - MAKE_DIR_NUM(DATADIR_M430), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 31), // inst_pic[0] + DATADIR_M430, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 31), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 31), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 31), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210074, // rules_mess @@ -550,11 +550,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x17001F, // name_mess - MAKE_DIR_NUM(DATADIR_M431), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 32), // inst_pic[0] + DATADIR_M431, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 32), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 32), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 32), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210078, // rules_mess @@ -568,11 +568,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 3, // record_idx 0x170020, // name_mess - MAKE_DIR_NUM(DATADIR_M432), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 33), // inst_pic[0] + DATADIR_M432, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 33), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 33), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 33), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x21007C, // rules_mess @@ -586,11 +586,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170021, // name_mess - MAKE_DIR_NUM(DATADIR_M433), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 34), // inst_pic[0] + DATADIR_M433, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 34), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 34), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 34), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210080, // rules_mess @@ -604,11 +604,11 @@ MgInfo mgInfoTbl[] = { 2, // flag 255, // record_idx 0x170022, // name_mess - MAKE_DIR_NUM(DATADIR_M434), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 35), // inst_pic[0] + DATADIR_M434, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 35), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 35), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 35), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210084, // rules_mess @@ -622,11 +622,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170023, // name_mess - MAKE_DIR_NUM(DATADIR_M435), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 36), // inst_pic[0] + DATADIR_M435, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 36), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 36), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 36), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -640,11 +640,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170024, // name_mess - MAKE_DIR_NUM(DATADIR_M436), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 37), // inst_pic[0] + DATADIR_M436, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 37), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 37), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 37), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -658,11 +658,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170025, // name_mess - MAKE_DIR_NUM(DATADIR_M437), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 38), // inst_pic[0] + DATADIR_M437, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 38), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 38), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 38), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -676,11 +676,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170026, // name_mess - MAKE_DIR_NUM(DATADIR_M438), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 39), // inst_pic[0] + DATADIR_M438, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 39), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 39), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 39), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210094, // rules_mess @@ -694,11 +694,11 @@ MgInfo mgInfoTbl[] = { 2, // flag 255, // record_idx 0x170027, // name_mess - MAKE_DIR_NUM(DATADIR_M439), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 40), // inst_pic[0] + DATADIR_M439, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 40), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 40), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 40), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x210098, // rules_mess @@ -712,11 +712,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170028, // name_mess - MAKE_DIR_NUM(DATADIR_M440), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 41), // inst_pic[0] + DATADIR_M440, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 41), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 41), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 41), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x21009C, // rules_mess @@ -730,11 +730,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170029, // name_mess - MAKE_DIR_NUM(DATADIR_M441), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 42), // inst_pic[0] + DATADIR_M441, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 42), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 42), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 42), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100A0, // rules_mess @@ -748,11 +748,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x17002A, // name_mess - MAKE_DIR_NUM(DATADIR_M442), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 43), // inst_pic[0] + DATADIR_M442, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 43), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 65), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 65), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100A4, // rules_mess @@ -766,11 +766,11 @@ MgInfo mgInfoTbl[] = { 2, // flag 5, // record_idx 0x17002B, // name_mess - MAKE_DIR_NUM(DATADIR_M443), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 44), // inst_pic[0] + DATADIR_M443, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 44), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 44), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 44), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100A8, // rules_mess @@ -784,11 +784,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x17002C, // name_mess - MAKE_DIR_NUM(DATADIR_M444), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 45), // inst_pic[0] + DATADIR_M444, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 45), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 45), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 45), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -802,11 +802,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x17002D, // name_mess - MAKE_DIR_NUM(DATADIR_M445), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 46), // inst_pic[0] + DATADIR_M445, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 46), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 46), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 46), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100AC, // rules_mess @@ -820,11 +820,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x17002E, // name_mess - MAKE_DIR_NUM(DATADIR_M446), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 47), // inst_pic[0] + DATADIR_M446, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 47), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 47), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 47), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100B0, // rules_mess @@ -838,11 +838,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x17002F, // name_mess - MAKE_DIR_NUM(DATADIR_M447), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 48), // inst_pic[0] + DATADIR_M447, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 48), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 48), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 48), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100B4, // rules_mess @@ -856,11 +856,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170030, // name_mess - MAKE_DIR_NUM(DATADIR_M448), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 49), // inst_pic[0] + DATADIR_M448, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 49), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 49), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 49), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100B8, // rules_mess @@ -874,11 +874,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170031, // name_mess - MAKE_DIR_NUM(DATADIR_M449), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] + DATADIR_M449, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100BC, // rules_mess @@ -892,11 +892,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170032, // name_mess - MAKE_DIR_NUM(DATADIR_M450), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 51), // inst_pic[0] + DATADIR_M450, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 51), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 51), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 51), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100C0, // rules_mess @@ -910,13 +910,13 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170033, // name_mess - MAKE_DIR_NUM(DATADIR_M451), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 52), // inst_pic[0] - MAKE_DATA_NUM(DATADIR_INSTPIC, 53), // inst_pic[1] - MAKE_DATA_NUM(DATADIR_INSTPIC, 54), // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 52), // mg_pic[0] - MAKE_DATA_NUM(DATADIR_INSTPIC, 53), // mg_pic[1] - MAKE_DATA_NUM(DATADIR_INSTPIC, 54), // mg_pic[2] + DATADIR_M451, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 52), // inst_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 53), // inst_pic[1] + DATA_MAKE_NUM(DATADIR_INSTPIC, 54), // inst_pic[2] + DATA_MAKE_NUM(DATADIR_INSTPIC, 52), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 53), // mg_pic[1] + DATA_MAKE_NUM(DATADIR_INSTPIC, 54), // mg_pic[2] 0x2100C4, // rules_mess 0x37000D, // control_mess[0] 0, // control_mess[1] @@ -928,11 +928,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170033, // name_mess - MAKE_DIR_NUM(DATADIR_M450), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 55), // inst_pic[0] + DATADIR_M450, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 55), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 55), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 55), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -946,11 +946,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170034, // name_mess - MAKE_DIR_NUM(DATADIR_M450), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] + DATADIR_M450, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100C8, // rules_mess @@ -964,11 +964,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170033, // name_mess - MAKE_DIR_NUM(DATADIR_M450), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 55), // inst_pic[0] + DATADIR_M450, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 55), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 55), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 55), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -982,11 +982,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170035, // name_mess - MAKE_DIR_NUM(DATADIR_M455), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 56), // inst_pic[0] + DATADIR_M455, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 56), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 56), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 56), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100CC, // rules_mess @@ -1000,11 +1000,11 @@ MgInfo mgInfoTbl[] = { 3, // flag 255, // record_idx 0x170036, // name_mess - MAKE_DIR_NUM(DATADIR_M456), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 57), // inst_pic[0] + DATADIR_M456, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 57), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 57), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 57), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0x2100D0, // rules_mess @@ -1018,11 +1018,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170037, // name_mess - MAKE_DIR_NUM(DATADIR_M457), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 58), // inst_pic[0] + DATADIR_M457, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 58), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 58), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 58), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -1036,11 +1036,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170038, // name_mess - MAKE_DIR_NUM(DATADIR_M458), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 59), // inst_pic[0] + DATADIR_M458, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 59), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 59), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 59), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -1054,11 +1054,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170038, // name_mess - MAKE_DIR_NUM(DATADIR_M458), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] + DATADIR_M458, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -1072,11 +1072,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170038, // name_mess - MAKE_DIR_NUM(DATADIR_M458), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] + DATADIR_M458, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -1090,11 +1090,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170038, // name_mess - MAKE_DIR_NUM(DATADIR_M458), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] + DATADIR_M458, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -1108,11 +1108,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170038, // name_mess - MAKE_DIR_NUM(DATADIR_M458), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] + DATADIR_M458, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess @@ -1126,11 +1126,11 @@ MgInfo mgInfoTbl[] = { 0, // flag 255, // record_idx 0x170038, // name_mess - MAKE_DIR_NUM(DATADIR_M458), // data_dir - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] + DATADIR_M458, // data_dir + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // inst_pic[0] 0, // inst_pic[1] 0, // inst_pic[2] - MAKE_DATA_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] + DATA_MAKE_NUM(DATADIR_INSTPIC, 50), // mg_pic[0] 0, // mg_pic[1] 0, // mg_pic[2] 0, // rules_mess diff --git a/src/game/window.c b/src/game/window.c index 91e72636..8602f2fa 100644 --- a/src/game/window.c +++ b/src/game/window.c @@ -14,6 +14,8 @@ #include "stdarg.h" #include "string.h" +#include "data_num/win.h" + typedef struct { /* 0x00 */ AnimData **anim; /* 0x04 */ s16 bank; @@ -163,10 +165,10 @@ static u8 ATTRIBUTE_ALIGN(32) charColPal[2*3*10] = { }; static s32 frameFileTbl[] = { - MAKE_DATA_NUM(DATADIR_WIN, 6), - MAKE_DATA_NUM(DATADIR_WIN, 7), - MAKE_DATA_NUM(DATADIR_WIN, 8), - MAKE_DATA_NUM(DATADIR_WIN, 6) + WIN_FRAME1_ANM, + WIN_FRAME2_ANM, + WIN_FRAME3_ANM, + WIN_FRAME1_ANM }; static char *mesDataTbl[] = { @@ -190,7 +192,7 @@ static s16 winPrio = 1000; void HuWindowInit(void) { s16 i; - winAMemP = HuAR_DVDtoARAM(MAKE_DIR_NUM(DATADIR_WIN)); + winAMemP = HuAR_DVDtoARAM(DATADIR_WIN); for (i = 0; i < 32; i++) { winData[i].group = -1; } @@ -215,33 +217,33 @@ void HuWinInit(s32 mess_data_no) { } if (!fontAnim) { if (LanguageNo == 0) { - anim_data = HuDataReadNum(MAKE_DATA_NUM(DATADIR_WIN, 0), MEMORY_DEFAULT_NUM); + anim_data = HuDataReadNum(WIN_FONTJ_ANM, MEMORY_DEFAULT_NUM); } else { - anim_data = HuDataReadNum(MAKE_DATA_NUM(DATADIR_WIN, 1), MEMORY_DEFAULT_NUM); + anim_data = HuDataReadNum(WIN_FONTE_ANM, MEMORY_DEFAULT_NUM); } fontAnim = HuSprAnimRead(anim_data); } if (!iconAnim) { - anim_data = HuDataReadNum(MAKE_DATA_NUM(DATADIR_WIN, 3), MEMORY_DEFAULT_NUM); + anim_data = HuDataReadNum(WIN_ICON_ANM, MEMORY_DEFAULT_NUM); iconAnim = HuSprAnimRead(anim_data); HuSprAnimLock(iconAnim); } if (!cursorAnim) { - anim_data = HuDataReadNum(MAKE_DATA_NUM(DATADIR_WIN, 2), MEMORY_DEFAULT_NUM); + anim_data = HuDataReadNum(WIN_CURSOR_ANM, MEMORY_DEFAULT_NUM); cursorAnim = HuSprAnimRead(anim_data); HuSprAnimLock(cursorAnim); } if (!cardAnimA) { - anim_data = HuDataReadNum(MAKE_DATA_NUM(DATADIR_WIN, 4), MEMORY_DEFAULT_NUM); + anim_data = HuDataReadNum(WIN_CARDA_ANM, MEMORY_DEFAULT_NUM); cardAnimA = HuSprAnimRead(anim_data); HuSprAnimLock(cardAnimA); } if (!cardAnimB) { - anim_data = HuDataReadNum(MAKE_DATA_NUM(DATADIR_WIN, 5), MEMORY_DEFAULT_NUM); + anim_data = HuDataReadNum(WIN_CARDB_ANM, MEMORY_DEFAULT_NUM); cardAnimB = HuSprAnimRead(anim_data); HuSprAnimLock(cardAnimB); } - HuDataDirClose(MAKE_DIR_NUM(DATADIR_WIN)); + HuDataDirClose(DATADIR_WIN); HuWinComKeyReset(); winPrio = 1000; } @@ -402,7 +404,7 @@ void HuWinAllKill(void) { HuMemDirectFree(messDataPtr); messDataPtr = 0; } - HuDataDirClose(MAKE_DIR_NUM(DATADIR_WIN)); + HuDataDirClose(DATADIR_WIN); } static void MesDispFunc(SpriteData *sprite) { @@ -1775,25 +1777,25 @@ void HuWinDisablePlayerReset(s16 window, u8 player) { } static s32 winPortraitTbl[] = { - MAKE_DATA_NUM(DATADIR_WIN, 15), - MAKE_DATA_NUM(DATADIR_WIN, 16), - MAKE_DATA_NUM(DATADIR_WIN, 17), - MAKE_DATA_NUM(DATADIR_WIN, 18), - MAKE_DATA_NUM(DATADIR_WIN, 19), - MAKE_DATA_NUM(DATADIR_WIN, 20), - MAKE_DATA_NUM(DATADIR_WIN, 21), - MAKE_DATA_NUM(DATADIR_WIN, 22), - MAKE_DATA_NUM(DATADIR_WIN, 23), - MAKE_DATA_NUM(DATADIR_WIN, 24), - MAKE_DATA_NUM(DATADIR_WIN, 25), - MAKE_DATA_NUM(DATADIR_WIN, 26), - MAKE_DATA_NUM(DATADIR_WIN, 27), - MAKE_DATA_NUM(DATADIR_WIN, 9), - MAKE_DATA_NUM(DATADIR_WIN, 10), - MAKE_DATA_NUM(DATADIR_WIN, 11), - MAKE_DATA_NUM(DATADIR_WIN, 12), - MAKE_DATA_NUM(DATADIR_WIN, 13), - MAKE_DATA_NUM(DATADIR_WIN, 14) + WIN_TOAD_TALK_ANM, + WIN_BOBOMB_TALK_ANM, + WIN_SHYGUY_TALK_ANM, + WIN_BOO_TALK_ANM, + WIN_GOOMBA_TALK_ANM, + WIN_BOWSER_TALK_ANM, + WIN_KKID_TALK_ANM, + WIN_KOOPA_TALK_ANM, + WIN_CONDOR_TALK_ANM, + WIN_BOO_BLUE_TALK_ANM, + WIN_DOLPHIN_TALK_ANM, + WIN_BOO_RED_TALK_ANM, + WIN_THWOMP_TALK_ANM, + WIN_W01_HOST_TALK_ANM, + WIN_W02_HOST_TALK_ANM, + WIN_W03_HOST_TALK_ANM, + WIN_W04_HOST_TALK_ANM, + WIN_W05_HOST_TALK_ANM, + WIN_W06_HOST_TALK_ANM }; s16 HuWinExCreate(float x, float y, s16 w, s16 h, s16 portrait) { From 3d049a98db9cdc7753a53ade71f85208edfa6007 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 3 Feb 2024 16:07:35 -0600 Subject: [PATCH 003/106] Remove typedef from datadir enums --- include/datadir_enum.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/datadir_enum.h b/include/datadir_enum.h index e98d5c52..d4c85750 100644 --- a/include/datadir_enum.h +++ b/include/datadir_enum.h @@ -3,7 +3,7 @@ #define DATADIR_DEFINE(name, path) DATADIR_ID_##name, -typedef enum { +enum { #include "datadir_table.h" DATADIR_ID_MAX }; @@ -12,7 +12,7 @@ typedef enum { #define DATADIR_DEFINE(name, path) DATADIR_##name = (DATADIR_ID_##name) << 16, -typedef enum { +enum { #include "datadir_table.h" }; From 57f9fcf689ca925f5f261a218842c3c1af700a04 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 3 Feb 2024 21:00:18 -0600 Subject: [PATCH 004/106] Document and clean up saveload.c --- config/GMPE01_00/symbols.txt | 2 +- include/data_num/win.h | 5 + include/game/saveload.h | 49 ++- src/game/saveload.c | 718 ++++++++++++++++++----------------- 4 files changed, 409 insertions(+), 365 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 62bc469a..dcae058a 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5137,7 +5137,7 @@ VolumeTable = .data:0x801311E8; // type:object size:0x100 scope:local lbl_801312E8 = .data:0x801312E8; // type:object size:0x4D lbl_80131335 = .data:0x80131335; // type:object size:0x1B mgInfoTbl = .data:0x80131350; // type:object size:0xE00 data:2byte -lbl_80132150 = .data:0x80132150; // type:object size:0x40 +saveComment = .data:0x80132150; // type:object size:0x40 scope:local lbl_80132190 = .data:0x80132190; // type:object size:0xC data:string lbl_8013219C = .data:0x8013219C; // type:object size:0xC data:string lbl_801321A8 = .data:0x801321A8; // type:object size:0xC data:string diff --git a/include/data_num/win.h b/include/data_num/win.h index 13b62a1b..3a38070f 100644 --- a/include/data_num/win.h +++ b/include/data_num/win.h @@ -32,6 +32,11 @@ enum { WIN_DOLPHIN_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 25), WIN_BOO_RED_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 26), WIN_THWOMP_TALK_ANM = DATA_MAKE_NUM(DATADIR_WIN, 27), + WIN_CARD_BOX1_ICON_ANM = DATA_MAKE_NUM(DATADIR_WIN, 28), + WIN_CARD_BOX2_ICON_ANM = DATA_MAKE_NUM(DATADIR_WIN, 29), + WIN_CARD_BOX3_ICON_ANM = DATA_MAKE_NUM(DATADIR_WIN, 30), + WIN_CARD_BANNER_ANM = DATA_MAKE_NUM(DATADIR_WIN, 31), + WIN_SAVE_BG_ANM = DATA_MAKE_NUM(DATADIR_WIN, 32), }; #endif \ No newline at end of file diff --git a/include/game/saveload.h b/include/game/saveload.h index 10b3af30..d75df8af 100644 --- a/include/game/saveload.h +++ b/include/game/saveload.h @@ -2,18 +2,41 @@ #define _GAME_SAVELOAD_H #include "dolphin.h" +#include "game/gamework_data.h" -s32 SLFileOpen(char *arg0); -s32 SLFileCreate(char *arg0, u32 arg1, void *arg2); -s32 SLFileWrite(s32 arg0, void *arg1); -s32 SLFileRead(s32 arg0, void *arg1); +#define SAVE_BUF_SIZE 16384 + +typedef struct save_buf_data { + u8 comment[CARD_COMMENT_SIZE]; + u8 banner[CARD_BANNER_WIDTH*CARD_BANNER_HEIGHT]; + u8 bannerTlut[512]; + u8 icon[CARD_ICON_WIDTH*CARD_ICON_HEIGHT*4]; + u8 iconTlut[512]; + GameStat stat; + SystemState system; + PlayerState player[4]; + SystemState systemBackup; + PlayerState playerBackup[4]; +} SaveBufData; + +typedef union save_buf_all { + SaveBufData data; + u8 ATTRIBUTE_ALIGN(32) buf[SAVE_BUF_SIZE]; +} SaveBufAll; + +extern SaveBufAll saveBuf; + +s32 SLFileOpen(char *fileName); +s32 SLFileCreate(char *fileName, u32 size, void *addr); +s32 SLFileWrite(s32 length, void *addr); +s32 SLFileRead(s32 length, void *addr); s32 SLFileClose(void); -void SLCurSlotNoSet(s16 arg0); -void SLCurBoxNoSet(s8 arg0); -void SLSaveFlagSet(s32 arg0); +void SLCurSlotNoSet(s16 slotno); +void SLCurBoxNoSet(s8 boxno); +void SLSaveFlagSet(s32 flag); s32 SLSaveFlagGet(void); -void SLSaveDataMake(s32 arg0, OSTime *arg1); -void SLSaveDataInfoSet(OSTime *arg0); +void SLSaveDataMake(s32 erase, OSTime *time); +void SLSaveDataInfoSet(OSTime *time); void SLCommonSet(void); void SLSaveBoard(void); void SLSaveBoardBackup(void); @@ -27,9 +50,9 @@ BOOL SLSerialNoCheck(void); BOOL SLCheckSumCheck(void); u16 SLCheckSumGet(void); void SLCheckSumSet(void); -s32 SLStatSet(s32 arg0); -s32 SLCardMount(s16 arg0); -s32 SLFormat(s16 arg0); -s16 SLMessOut(s16 arg0); +s32 SLStatSet(s32 reportF); +s32 SLCardMount(s16 slotNo); +s32 SLFormat(s16 slotNo); +s16 SLMessOut(s16 mess); #endif diff --git a/src/game/saveload.c b/src/game/saveload.c index e12b3f39..e3277ebb 100644 --- a/src/game/saveload.c +++ b/src/game/saveload.c @@ -5,8 +5,13 @@ #include "game/flag.h" #include "game/card.h" #include "game/gamework_data.h" +#include "data_num/win.h" #include "string.h" +#include "stddef.h" + +#define SAVE_GET_PLAYER(player_idx) &saveBuf.buf[((player_idx)*sizeof(PlayerState))+offsetof(SaveBufData, player)] +#define SAVE_GET_PLAYER_BACKUP(player_idx) &saveBuf.buf[((player_idx)*sizeof(PlayerState))+offsetof(SaveBufData, playerBackup)] static s16 SLCreateSaveWin(void); static void SLKillSaveWin(void); @@ -15,15 +20,15 @@ static void SLKillSaveWin(void); extern u8 UnMountCnt; CARDFileInfo curFileInfo; -u8 ATTRIBUTE_ALIGN(32) saveBuf[0x4000]; +SaveBufAll saveBuf; u64 SLSerialNo; s32 saveExecF; u8 curBoxNo; s16 curSlotNo; -u8 lbl_80132150[64] = { - "Mario Party 4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +u8 saveComment[2][32] = { + "Mario Party 4", "File 0 00/00/0000" }; @@ -42,45 +47,45 @@ static char *SlotNameTbl[] = { static s32 saveMessWin = -1; -s32 SLFileOpen(char *arg0) { - s32 temp_r3; +s32 SLFileOpen(char *fileName) { + s32 result; if (SaveEnableF == 0) { return 0; } while (1) { - temp_r3 = SLCardMount(curSlotNo); - if (temp_r3 < 0) { - return temp_r3; + result = SLCardMount(curSlotNo); + if(result < 0) { + return result; } - temp_r3 = HuCardOpen(curSlotNo, arg0, &curFileInfo); - if (temp_r3 == CARD_RESULT_NOFILE) { + result = HuCardOpen(curSlotNo, fileName, &curFileInfo); + if (result == CARD_RESULT_NOFILE) { return CARD_RESULT_NOFILE; } - if (temp_r3 == CARD_RESULT_WRONGDEVICE) { + if (result == CARD_RESULT_WRONGDEVICE) { SLMessOut(7); return CARD_RESULT_FATAL_ERROR; } - if (temp_r3 == CARD_RESULT_FATAL_ERROR) { + if (result == CARD_RESULT_FATAL_ERROR) { SLMessOut(1); return CARD_RESULT_FATAL_ERROR; } - if (temp_r3 == CARD_RESULT_NOCARD) { + if (result == CARD_RESULT_NOCARD) { SLMessOut(0); return CARD_RESULT_NOCARD; } - if (temp_r3 == CARD_RESULT_BROKEN) { - temp_r3 = HuCardSectorSizeGet(curSlotNo); - if (temp_r3 > 0 && temp_r3 != 0x2000) { + if (result == CARD_RESULT_BROKEN) { + result = HuCardSectorSizeGet(curSlotNo); + if (result > 0 && result != 8192) { SLMessOut(8); return CARD_RESULT_WRONGDEVICE; } UnMountCnt = 0; - temp_r3 = SLMessOut(5); - if (temp_r3 == 0) { - temp_r3 = SLFormat(curSlotNo); - if (temp_r3 != 0) { - return temp_r3; + result = SLMessOut(5); + if (result == 0) { + result = SLFormat(curSlotNo); + if (result != 0) { + return result; } } else { return CARD_RESULT_NOFILE; @@ -91,299 +96,299 @@ s32 SLFileOpen(char *arg0) { } } -s32 SLFileCreate(char *arg0, u32 arg1, void *arg2) { - float sp18[2]; - u32 sp14; - u32 sp10; - s32 temp_r30; - s32 temp_r31; +s32 SLFileCreate(char *fileName, u32 size, void *addr) { + float winSize[2]; + u32 byteNotUsed; + u32 filesNotUsed; + s32 window; + s32 result; if (SaveEnableF == 0) { return 0; } - temp_r31 = SLCardMount(curSlotNo); - if (temp_r31 < 0) { - return temp_r31; + result = SLCardMount(curSlotNo); + if (result < 0) { + return result; } - temp_r31 = HuCardSectorSizeGet(curSlotNo); - if (temp_r31 < 0 && temp_r31 != 0x2000) { + result = HuCardSectorSizeGet(curSlotNo); + if (result < 0 && result != 8192) { SLMessOut(8); return CARD_RESULT_FATAL_ERROR; } - temp_r31 = HuCardFreeSpaceGet(curSlotNo, &sp14, &sp10); - if (sp10 == 0 && arg1 > sp14) { + result = HuCardFreeSpaceGet(curSlotNo, &byteNotUsed, &filesNotUsed); + if (filesNotUsed == 0 && size > byteNotUsed) { SLMessOut(4); return CARD_RESULT_INSSPACE; } - if (sp10 == 0) { + if (filesNotUsed == 0) { SLMessOut(2); return CARD_RESULT_INSSPACE; } - if (arg1 > sp14) { + if (size > byteNotUsed) { SLMessOut(3); return CARD_RESULT_INSSPACE; } HuWinInit(1); - HuWinMesMaxSizeGet(1, sp18, 0x10000B); - temp_r30 = HuWinExCreateStyled(-10000.0f, 200.0f, sp18[0], sp18[1], -1, 2); - HuWinExAnimIn(temp_r30); - HuWinMesSet(temp_r30, 0x10000B); - HuWinMesWait(temp_r30); + HuWinMesMaxSizeGet(1, winSize, MAKE_MESSID(16, 11)); + window = HuWinExCreateStyled(-10000.0f, 200.0f, winSize[0], winSize[1], -1, 2); + HuWinExAnimIn(window); + HuWinMesSet(window, MAKE_MESSID(16, 11)); + HuWinMesWait(window); _SetFlag(FLAG_ID_MAKE(3, 0)); - temp_r31 = HuCardCreate(curSlotNo, arg0, arg1, &curFileInfo); + result = HuCardCreate(curSlotNo, fileName, size, &curFileInfo); _ClearFlag(0x30000); - if (temp_r31 < 0) { - HuWinExAnimOut(temp_r30); - HuWinExCleanup(temp_r30); + if (result < 0) { + HuWinExAnimOut(window); + HuWinExCleanup(window); } - if (temp_r31 == CARD_RESULT_NOCARD) { + if (result == CARD_RESULT_NOCARD) { SLMessOut(0); return CARD_RESULT_NOCARD; } - if (temp_r31 < 0) { + if (result < 0) { SLMessOut(1); return CARD_RESULT_FATAL_ERROR; } _SetFlag(FLAG_ID_MAKE(3, 0)); - temp_r31 = HuCardWrite(&curFileInfo, arg2, arg1, 0); + result = HuCardWrite(&curFileInfo, addr, size, 0); _ClearFlag(FLAG_ID_MAKE(3, 0)); - if (temp_r31 < 0) { - HuWinExAnimOut(temp_r30); - HuWinExCleanup(temp_r30); + if (result < 0) { + HuWinExAnimOut(window); + HuWinExCleanup(window); } - if (temp_r31 == CARD_RESULT_NOCARD) { + if (result == CARD_RESULT_NOCARD) { SLMessOut(0); return CARD_RESULT_NOCARD; } - if (temp_r31 < 0) { + if (result < 0) { SLMessOut(1); return CARD_RESULT_FATAL_ERROR; } _SetFlag(FLAG_ID_MAKE(3, 0)); - temp_r31 = SLStatSet(1); + result = SLStatSet(1); _ClearFlag(FLAG_ID_MAKE(3, 0)); - HuWinExAnimOut(temp_r30); - HuWinExCleanup(temp_r30); - if (temp_r31 < 0) { - return temp_r31; + HuWinExAnimOut(window); + HuWinExCleanup(window); + if (result < 0) { + return result; } return 0; } -s32 SLFileWrite(s32 arg0, void *arg1) { - float sp10[2]; - s32 temp_r31; - s32 var_r30; +s32 SLFileWrite(s32 length, void *addr) { + float winSize[2]; + s32 window; + s32 result; if (SaveEnableF == 0) { return 0; } HuWinInit(1); - HuWinMesMaxSizeGet(1, sp10, 0x10000B); - temp_r31 = HuWinExCreateStyled(-10000.0f, 200.0f, sp10[0], sp10[1], -1, 2); - HuWinExAnimIn(temp_r31); - HuWinMesSet(temp_r31, 0x10000B); - HuWinMesWait(temp_r31); - HuPrcSleep(0x3C); + HuWinMesMaxSizeGet(1, winSize, MAKE_MESSID(16, 11)); + window = HuWinExCreateStyled(-10000.0f, 200.0f, winSize[0], winSize[1], -1, 2); + HuWinExAnimIn(window); + HuWinMesSet(window, MAKE_MESSID(16, 11)); + HuWinMesWait(window); + HuPrcSleep(60); _SetFlag(FLAG_ID_MAKE(3, 0)); - var_r30 = HuCardWrite(&curFileInfo, arg1, arg0, 0); - if (var_r30 == 0) { - var_r30 = SLStatSet(1); + result = HuCardWrite(&curFileInfo, addr, length, 0); + if (result == 0) { + result = SLStatSet(1); } _ClearFlag(FLAG_ID_MAKE(3, 0)); - HuWinExAnimOut(temp_r31); - HuWinExCleanup(temp_r31); - return var_r30; + HuWinExAnimOut(window); + HuWinExCleanup(window); + return result; } -s32 SLFileRead(s32 arg0, void *arg1) { - s32 temp_r3; +s32 SLFileRead(s32 length, void *addr) { + s32 result; if (SaveEnableF == 0) { return 0; } - temp_r3 = HuCardRead(&curFileInfo, arg1, arg0, 0); - if (temp_r3 == CARD_RESULT_NOCARD) { + result = HuCardRead(&curFileInfo, addr, length, 0); + if (result == CARD_RESULT_NOCARD) { SLMessOut(0); - } else if (temp_r3 < 0) { + } else if (result < 0) { SLMessOut(1); } - return temp_r3; + return result; } s32 SLFileClose(void) { - s32 temp_r31; + s32 result; if (SaveEnableF == 0) { return 0; } - temp_r31 = HuCardClose(&curFileInfo); - return temp_r31; + result = HuCardClose(&curFileInfo); + return result; } -void SLCurSlotNoSet(s16 arg0) { - curSlotNo = arg0; +void SLCurSlotNoSet(s16 slotno) { + curSlotNo = slotno; } -void SLCurBoxNoSet(s8 arg0) { - curBoxNo = arg0; +void SLCurBoxNoSet(s8 boxno) { + curBoxNo = boxno; } -void SLSaveFlagSet(s32 arg0) { - if (arg0 == 0) { +void SLSaveFlagSet(s32 flag) { + if (flag == 0) { GWGameStat.party_continue = 0; GWGameStat.story_continue = 0; } - SaveEnableF = arg0; + SaveEnableF = flag; } s32 SLSaveFlagGet(void) { return SaveEnableF; } -void SLSaveDataMake(s32 arg0, OSTime *arg1) { - AnimData *temp_r3; - u8 *var_r30; +void SLSaveDataMake(s32 erase, OSTime *time) { + AnimData *anim_data; + u8 *buf; s32 i; - var_r30 = saveBuf; - if (arg0 != 0) { - for (i = 0; i < 0x4000; i++) { - var_r30[i] = 0xFF; + buf = saveBuf.buf; + if (erase != 0) { + for (i = 0; i < SAVE_BUF_SIZE; i++) { + buf[i] = 0xFF; } } for (i = 0; i < 0x20; i++) { - var_r30[i] = lbl_80132150[i]; + buf[i] = (&saveComment[0][0])[i]; } for (i = 0; i < 0x20; i++) { - (&var_r30[0x20])[i] = lbl_80132150[i + 0x20]; + (&buf[0x20])[i] = (&saveComment[0][0])[i+32]; } - temp_r3 = HuSprAnimRead(HuDataSelHeapReadNum(0x86001F, MEMORY_DEFAULT_NUM, HEAP_DATA)); - memcpy(var_r30 + 0x40, temp_r3->bmp->data, 0xC00); - memcpy(var_r30 + 0xC40, temp_r3->bmp->palData, 0x200); - temp_r3 = HuSprAnimRead(HuDataSelHeapReadNum(curBoxNo + 0x86001C, MEMORY_DEFAULT_NUM, HEAP_DATA)); - memcpy(var_r30 + 0xE40, temp_r3->bmp->data, 0x1000); - memcpy(var_r30 + 0x1E40, temp_r3->bmp->palData, 0x200); - SLSaveDataInfoSet(arg1); + anim_data = HuSprAnimReadFile(WIN_CARD_BANNER_ANM); + memcpy(buf + offsetof(SaveBufData, banner), anim_data->bmp->data, CARD_BANNER_WIDTH*CARD_BANNER_HEIGHT); + memcpy(buf + offsetof(SaveBufData, bannerTlut), anim_data->bmp->palData, 512); + anim_data = HuSprAnimReadFile(curBoxNo + WIN_CARD_BOX1_ICON_ANM); + memcpy(buf + offsetof(SaveBufData, icon), anim_data->bmp->data, CARD_ICON_WIDTH*CARD_ICON_HEIGHT*4); + memcpy(buf + offsetof(SaveBufData, iconTlut), anim_data->bmp->palData, 512); + SLSaveDataInfoSet(time); } -void SLSaveDataInfoSet(OSTime *arg0) { - s16 temp_r30; - s16 temp_r31; +void SLSaveDataInfoSet(OSTime *time) { + s16 year; + s16 digit; OSCalendarTime sp8; - OSTicksToCalendarTime(*arg0, &sp8); - saveBuf[0x25] = curBoxNo + 0x31; - temp_r31 = (sp8.mon + 1) / 10; - saveBuf[0x28] = temp_r31 + 0x30; - temp_r31 = (sp8.mon + 1) % 10; - saveBuf[0x29] = temp_r31 + 0x30; - temp_r31 = sp8.mday / 10; - saveBuf[0x2B] = temp_r31 + 0x30; - temp_r31 = sp8.mday % 10; - saveBuf[0x2C] = temp_r31 + 0x30; - temp_r30 = sp8.year; - temp_r31 = temp_r30 / 1000; - saveBuf[0x2E] = temp_r31 + 0x30; - temp_r30 -= temp_r31 * 1000; - temp_r31 = temp_r30 / 100; - saveBuf[0x2F] = temp_r31 + 0x30; - temp_r30 -= temp_r31 * 100; - temp_r31 = temp_r30 / 10; - saveBuf[0x30] = temp_r31 + 0x30; - temp_r30 -= temp_r31 * 10; - saveBuf[0x31] = temp_r30 + 0x30; + OSTicksToCalendarTime(*time, &sp8); + saveBuf.data.comment[37] = curBoxNo + '1'; + digit = (sp8.mon + 1) / 10; + saveBuf.data.comment[40] = digit + '0'; + digit = (sp8.mon + 1) % 10; + saveBuf.data.comment[41] = digit + '0'; + digit = sp8.mday / 10; + saveBuf.data.comment[43] = digit + '0'; + digit = sp8.mday % 10; + saveBuf.data.comment[44] = digit + '0'; + year = sp8.year; + digit = year / 1000; + saveBuf.data.comment[46] = digit + '0'; + year -= digit * 1000; + digit = year / 100; + saveBuf.data.comment[47] = digit + '0'; + year -= digit * 100; + digit = year / 10; + saveBuf.data.comment[48] = digit + '0'; + year -= digit * 10; + saveBuf.data.comment[49] = year + '0'; } void SLCommonSet(void) { - OSTime temp_r28; + OSTime create_time; - temp_r28 = OSGetTime(); - GWGameStat.create_time = temp_r28; - memcpy(saveBuf + 0x2040, &GWGameStat, 0x118); - SLSaveDataInfoSet(&temp_r28); + create_time = OSGetTime(); + GWGameStat.create_time = create_time; + memcpy(&saveBuf.data.stat, &GWGameStat, sizeof(GameStat)); + SLSaveDataInfoSet(&create_time); } void SLSaveBoard(void) { s16 i; - memcpy(saveBuf + 0x2158, &GWSystem, 0xDC); + memcpy(&saveBuf.data.system, &GWSystem, sizeof(SystemState)); for (i = 0; i < 4; i++) { - memcpy(&saveBuf[i * 0x30 + 0x2234], &GWPlayer[i], 0x30); + memcpy(SAVE_GET_PLAYER(i), &GWPlayer[i], sizeof(PlayerState)); } } void SLSaveBoardBackup(void) { s16 i; - memcpy(saveBuf + 0x22F4, &GWSystem, 0xDC); + memcpy(&saveBuf.data.systemBackup, &GWSystem, sizeof(SystemState)); for (i = 0; i < 4; i++) { - memcpy(&saveBuf[i * 0x30 + 0x23D0], &GWPlayer[i], 0x30); + memcpy(SAVE_GET_PLAYER_BACKUP(i), &GWPlayer[i], sizeof(PlayerState)); } } s32 SLSave(void) { - s32 var_r31; + s32 result; while (1) { SLCheckSumSet(); - var_r31 = SLFileOpen(SaveFileNameTbl[curBoxNo]); - if (var_r31 == CARD_RESULT_NOFILE) { + result = SLFileOpen(SaveFileNameTbl[curBoxNo]); + if (result == CARD_RESULT_NOFILE) { if (!SLSerialNoCheck()) { SLMessOut(9); } else { SLCreateSaveWin(); - var_r31 = SLFileCreate(SaveFileNameTbl[curBoxNo], 0x4000, saveBuf); + result = SLFileCreate(SaveFileNameTbl[curBoxNo], 16384, &saveBuf); SLKillSaveWin(); - if (var_r31 >= 0) { + if (result >= 0) { SLSerialNoGet(); goto block_32; } } } else { - if (var_r31 == CARD_RESULT_NOCARD) { - var_r31 = SLMessOut(0xA); - if (var_r31 != 0) { - SLMessOut(0xB); + if (result == CARD_RESULT_NOCARD) { + result = SLMessOut(10); + if (result != 0) { + SLMessOut(11); continue; } SLSaveFlagSet(0); break; } - if (var_r31 >= 0) { + if (result >= 0) { if (!SLSerialNoCheck()) { SLMessOut(9); } else { SLCreateSaveWin(); - var_r31 = SLFileWrite(0x4000, saveBuf); + result = SLFileWrite(16384, &saveBuf); SLKillSaveWin(); - if (var_r31 == CARD_RESULT_NOCARD) { + if (result == CARD_RESULT_NOCARD) { SLMessOut(0); - } else if (var_r31 == CARD_RESULT_WRONGDEVICE) { + } else if (result == CARD_RESULT_WRONGDEVICE) { SLMessOut(7); - } else if (var_r31 == CARD_RESULT_BROKEN) { - var_r31 = HuCardSectorSizeGet(curSlotNo); - if (var_r31 > 0 && var_r31 != 0x2000) { + } else if (result == CARD_RESULT_BROKEN) { + result = HuCardSectorSizeGet(curSlotNo); + if (result > 0 && result != 8192) { SLMessOut(8); goto block_36; } UnMountCnt = 0; - var_r31 = SLMessOut(5); - if (var_r31 == 0) { - var_r31 = SLFormat(curSlotNo); - if (var_r31 != 0) { - return var_r31; + result = SLMessOut(5); + if (result == 0) { + result = SLFormat(curSlotNo); + if (result) { + return result; } continue; } else { - var_r31 = CARD_RESULT_BROKEN; + result = CARD_RESULT_BROKEN; } - } else if (var_r31 < 0) { + } else if (result < 0) { SLMessOut(1); } block_32: SLFileClose(); - if (var_r31 >= 0) { + if (result >= 0) { HuCardUnMount(curSlotNo); return 1; } @@ -391,9 +396,9 @@ block_32: } } block_36: - var_r31 = SLMessOut(0xA); - if (var_r31 != 0) { - SLMessOut(0xB); + result = SLMessOut(10); + if (result != 0) { + SLMessOut(11); } else { SLSaveFlagSet(0); break; @@ -404,19 +409,19 @@ block_36: } static s16 SLCreateSaveWin(void) { - float sp8[2]; - s16 temp_r3; + float size[2]; + s16 window; HuWinInit(1); HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - HuWinMesMaxSizeGet(1, sp8, 0x100044); - temp_r3 = HuWinExCreateStyled(-10000.0f, 150.0f, sp8[0], sp8[1], -1, 2); - saveMessWin = temp_r3; - HuWinExAnimIn(temp_r3); - HuWinInsertMesSet(temp_r3, MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - HuWinMesSet(temp_r3, 0x100044); - HuWinMesWait(temp_r3); - return temp_r3; + HuWinMesMaxSizeGet(1, size, MAKE_MESSID(16, 68)); + window = HuWinExCreateStyled(-10000.0f, 150.0f, size[0], size[1], -1, 2); + saveMessWin = window; + HuWinExAnimIn(window); + HuWinInsertMesSet(window, MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + HuWinMesSet(window, MAKE_MESSID(16, 68)); + HuWinMesWait(window); + return window; } static void SLKillSaveWin(void) { @@ -428,18 +433,18 @@ static void SLKillSaveWin(void) { } s32 SLLoad(void) { - s32 var_r31; - u16 *temp_r29; - u16 temp_r27; + s32 result; + u16 *save_checksum; + u16 checksum; - var_r31 = SLFileOpen(SaveFileNameTbl[curBoxNo]); - if (var_r31 >= 0) { - var_r31 = SLFileRead(0x4000, saveBuf); + result = SLFileOpen(SaveFileNameTbl[curBoxNo]); + if (result >= 0) { + result = SLFileRead(16384, &saveBuf); SLFileClose(); - if (var_r31 >= 0) { - temp_r29 = (u16*) &saveBuf[0x2490]; - temp_r27 = SLCheckSumGet(); - *temp_r29 == temp_r27; + if (result >= 0) { + save_checksum = (u16 *)&saveBuf.buf[sizeof(SaveBufData)]; + checksum = SLCheckSumGet(); + *save_checksum == checksum; } } HuCardUnMount(curSlotNo); @@ -447,15 +452,15 @@ s32 SLLoad(void) { } void SLLoadGameStat(void) { - memcpy(&GWGameStat, saveBuf + 0x2040, 0x118); + memcpy(&GWGameStat, &saveBuf.data.stat, sizeof(GameStat)); } void SLLoadBoard(void) { s16 i; - memcpy(&GWSystem, saveBuf + 0x2158, 0xDC); + memcpy(&GWSystem, &saveBuf.data.system, sizeof(SystemState)); for (i = 0; i < 4; i++) { - memcpy(&GWPlayer[i], &saveBuf[i * 0x30 + 0x2234], 0x30); + memcpy(&GWPlayer[i], SAVE_GET_PLAYER(i), sizeof(PlayerState)); GWPlayerCfg[i].character = GWPlayer[i].character; GWPlayerCfg[i].pad_idx = GWPlayer[i].port; GWPlayerCfg[i].diff = GWPlayer[i].diff; @@ -467,9 +472,9 @@ void SLLoadBoard(void) { void SLLoadBoardBackup(void) { s16 i; - memcpy(&GWSystem, saveBuf + 0x22F4, 0xDC); + memcpy(&GWSystem, &saveBuf.data.systemBackup, 0xDC); for (i = 0; i < 4; i++) { - memcpy(&GWPlayer[i], &saveBuf[i * 0x30 + 0x23D0], 0x30); + memcpy(&GWPlayer[i], SAVE_GET_PLAYER_BACKUP(i), sizeof(PlayerState)); GWPlayerCfg[i].character = GWPlayer[i].character; GWPlayerCfg[i].pad_idx = GWPlayer[i].port; GWPlayerCfg[i].diff = GWPlayer[i].diff; @@ -483,27 +488,27 @@ void SLSerialNoGet(void) { } BOOL SLSerialNoCheck(void) { - s32 var_r31; - u64 sp8; + s32 result; + u64 serialNo; if (SLSerialNo == 0) { return TRUE; } - var_r31 = CARDGetSerialNo(curSlotNo, &sp8); - if (var_r31 < 0) { + result = CARDGetSerialNo(curSlotNo, &serialNo); + if (result < 0) { return TRUE; } - if (sp8 != SLSerialNo) { + if (serialNo != SLSerialNo) { return FALSE; } return TRUE; } BOOL SLCheckSumCheck(void) { - u16 *temp_r31 = (u16*) &saveBuf[0x2490]; - u16 temp_r3 = SLCheckSumGet(); + u16 *save_checksum = (u16 *)&saveBuf.buf[sizeof(SaveBufData)]; + u16 checksum = SLCheckSumGet(); - if (*temp_r31 == temp_r3) { + if (*save_checksum == checksum) { return TRUE; } return FALSE; @@ -511,100 +516,100 @@ BOOL SLCheckSumCheck(void) { u16 SLCheckSumGet(void) { u32 i; - u32 var_r30; + u32 checksum; - for (i = var_r30 = 0; i < 0x2490; i++) { - var_r30 += saveBuf[i]; + for (i = checksum = 0; i < sizeof(SaveBufData); i++) { + checksum += saveBuf.buf[i]; } - var_r30 = ~var_r30; - return (u16) var_r30 & 0xFFFF; + checksum = ~checksum; + return (u16) checksum & 0xFFFF; } void SLCheckSumSet(void) { - u16 temp_r31 = SLCheckSumGet(); + u16 checksum = SLCheckSumGet(); - saveBuf[0x2490] = (temp_r31 >> 8) & 0xFF; - saveBuf[0x2491] = temp_r31; + saveBuf.buf[sizeof(SaveBufData)] = (checksum >> 8) & 0xFF; + saveBuf.buf[sizeof(SaveBufData)+1] = checksum; } -s32 SLStatSet(s32 arg0) { - CARDStat sp8; - s32 temp_r29; - s32 temp_r3; +s32 SLStatSet(s32 reportF) { + CARDStat stat; + s32 fileNo; + s32 result; - temp_r29 = curFileInfo.fileNo; - temp_r3 = CARDGetStatus(curSlotNo, temp_r29, &sp8); - if (temp_r3 == -3) { - if (arg0 != 0) { + fileNo = curFileInfo.fileNo; + result = CARDGetStatus(curSlotNo, fileNo, &stat); + if (result == CARD_RESULT_NOCARD) { + if (reportF != 0) { SLMessOut(0); } return -3; } - if (temp_r3 < 0) { - if (arg0 != 0) { + if (result < 0) { + if (reportF != 0) { SLMessOut(1); } return CARD_RESULT_FATAL_ERROR; } - sp8.commentAddr = 0; - sp8.iconAddr = 0x40; - CARDSetBannerFormat(&sp8, CARD_STAT_BANNER_C8); - CARDSetIconFormat(&sp8, 0, CARD_STAT_ICON_C8); - CARDSetIconFormat(&sp8, 1, CARD_STAT_ICON_C8); - CARDSetIconFormat(&sp8, 2, CARD_STAT_ICON_C8); - CARDSetIconFormat(&sp8, 3, CARD_STAT_ICON_C8); - CARDSetIconSpeed(&sp8, 0, CARD_STAT_SPEED_MIDDLE); - CARDSetIconSpeed(&sp8, 1, CARD_STAT_SPEED_MIDDLE); - CARDSetIconSpeed(&sp8, 2, CARD_STAT_SPEED_MIDDLE); - CARDSetIconSpeed(&sp8, 3, CARD_STAT_SPEED_MIDDLE); - CARDSetIconSpeed(&sp8, 4, CARD_STAT_SPEED_END); - CARDSetIconAnim(&sp8, CARD_STAT_ANIM_LOOP); + CARDSetCommentAddress(&stat, 0); + CARDSetIconAddress(&stat, 64); + CARDSetBannerFormat(&stat, CARD_STAT_BANNER_C8); + CARDSetIconFormat(&stat, 0, CARD_STAT_ICON_C8); + CARDSetIconFormat(&stat, 1, CARD_STAT_ICON_C8); + CARDSetIconFormat(&stat, 2, CARD_STAT_ICON_C8); + CARDSetIconFormat(&stat, 3, CARD_STAT_ICON_C8); + CARDSetIconSpeed(&stat, 0, CARD_STAT_SPEED_MIDDLE); + CARDSetIconSpeed(&stat, 1, CARD_STAT_SPEED_MIDDLE); + CARDSetIconSpeed(&stat, 2, CARD_STAT_SPEED_MIDDLE); + CARDSetIconSpeed(&stat, 3, CARD_STAT_SPEED_MIDDLE); + CARDSetIconSpeed(&stat, 4, CARD_STAT_SPEED_END); + CARDSetIconAnim(&stat, CARD_STAT_ANIM_LOOP); - temp_r3 = CARDSetStatus(curSlotNo, temp_r29, &sp8); - if (temp_r3 == CARD_RESULT_NOCARD) { - if (arg0 != 0) { + result = CARDSetStatus(curSlotNo, fileNo, &stat); + if (result == CARD_RESULT_NOCARD) { + if (reportF != 0) { SLMessOut(0); } return CARD_RESULT_NOCARD; } - if (temp_r3 < 0) { - if (arg0 != 0) { + if (result < 0) { + if (reportF != 0) { SLMessOut(1); } return CARD_RESULT_FATAL_ERROR; } - return temp_r3; + return result; } -s32 SLCardMount(s16 arg0) { - s32 temp_r3; +s32 SLCardMount(s16 slotNo) { + s32 result; while (1) { - temp_r3 = HuCardMount(curSlotNo); - if (temp_r3 == CARD_RESULT_WRONGDEVICE) { + result = HuCardMount(curSlotNo); + if (result == CARD_RESULT_WRONGDEVICE) { SLMessOut(7); - return temp_r3; + return result; } - if (temp_r3 == CARD_RESULT_FATAL_ERROR) { + if (result == CARD_RESULT_FATAL_ERROR) { SLMessOut(1); return CARD_RESULT_FATAL_ERROR; } - if (temp_r3 == CARD_RESULT_NOCARD) { + if (result == CARD_RESULT_NOCARD) { SLMessOut(0); return CARD_RESULT_NOCARD; } - if (temp_r3 == CARD_RESULT_BROKEN) { - temp_r3 = HuCardSectorSizeGet(curSlotNo); - if (temp_r3 > 0 && temp_r3 != 0x2000) { + if (result == CARD_RESULT_BROKEN) { + result = HuCardSectorSizeGet(curSlotNo); + if (result > 0 && result != 8192) { SLMessOut(8); return CARD_RESULT_WRONGDEVICE; } UnMountCnt = 0; - temp_r3 = SLMessOut(5); - if (temp_r3 == 0) { - temp_r3 = SLFormat(curSlotNo); - if (temp_r3 != 0) { - return temp_r3; + result = SLMessOut(5); + if (result == 0) { + result = SLFormat(curSlotNo); + if (result != 0) { + return result; } } else { return CARD_RESULT_FATAL_ERROR; @@ -613,184 +618,195 @@ s32 SLCardMount(s16 arg0) { break; } } - temp_r3 = HuCardSectorSizeGet(curSlotNo); - if (temp_r3 < 0) { + result = HuCardSectorSizeGet(curSlotNo); + if (result < 0) { SLMessOut(1); - return temp_r3; + return result; } - if (temp_r3 != 0x2000) { + if (result != 8192) { SLMessOut(8); return CARD_RESULT_WRONGDEVICE; } return 0; } -s32 SLFormat(s16 arg0) { - float sp8[2]; - s16 temp_r24; - s16 temp_r3; - s16 temp_r3_2; - OSTime temp_r19; +s32 SLFormat(s16 slotNo) { + float winSize[2]; + s16 result; + s16 window1; + s16 window2; + OSTime time; HuWinInit(1); HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(16, 56)); - temp_r3 = HuWinExCreateStyled(-10000.0f, 150.0f, sp8[0], sp8[1], -1, 2); - HuWinExAnimIn(temp_r3); - HuWinInsertMesSet(temp_r3, MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - HuWinMesSet(temp_r3, MAKE_MESSID(16, 56)); - HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(16, 11)); - temp_r3_2 = HuWinExCreateStyled(-10000.0f, 200.0f, sp8[0], sp8[1], -1, 2); - HuWinExAnimIn(temp_r3_2); - HuWinMesSet(temp_r3_2, MAKE_MESSID(16, 11)); - HuWinMesWait(temp_r3_2); - HuPrcSleep(0x1E); + HuWinMesMaxSizeGet(1, winSize, MAKE_MESSID(16, 56)); + window1 = HuWinExCreateStyled(-10000.0f, 150.0f, winSize[0], winSize[1], -1, 2); + HuWinExAnimIn(window1); + HuWinInsertMesSet(window1, MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); + HuWinMesSet(window1, MAKE_MESSID(16, 56)); + HuWinMesMaxSizeGet(1, winSize, MAKE_MESSID(16, 11)); + window2 = HuWinExCreateStyled(-10000.0f, 200.0f, winSize[0], winSize[1], -1, 2); + HuWinExAnimIn(window2); + HuWinMesSet(window2, MAKE_MESSID(16, 11)); + HuWinMesWait(window2); + HuPrcSleep(30); if (UnMountCnt & (1 << curSlotNo)) { - HuWinExAnimOut(temp_r3); - HuWinExCleanup(temp_r3); - HuWinExAnimOut(temp_r3_2); - HuWinExCleanup(temp_r3_2); - SLMessOut(0xC); + HuWinExAnimOut(window1); + HuWinExCleanup(window1); + HuWinExAnimOut(window2); + HuWinExCleanup(window2); + SLMessOut(12); return 0; } _SetFlag(FLAG_ID_MAKE(3, 0)); - temp_r24 = HuCardFormat(curSlotNo); + result = HuCardFormat(curSlotNo); _ClearFlag(FLAG_ID_MAKE(3, 0)); - if (temp_r24 < 0) { - HuWinExAnimOut(temp_r3); - HuWinExCleanup(temp_r3); - HuWinExAnimOut(temp_r3_2); - HuWinExCleanup(temp_r3_2); + if (result < 0) { + HuWinExAnimOut(window1); + HuWinExCleanup(window1); + HuWinExAnimOut(window2); + HuWinExCleanup(window2); } - if (temp_r24 == CARD_RESULT_FATAL_ERROR) { + if (result == CARD_RESULT_FATAL_ERROR) { SLMessOut(6); SLMessOut(1); return CARD_RESULT_FATAL_ERROR; } - if (temp_r24 == CARD_RESULT_NOCARD) { + if (result == CARD_RESULT_NOCARD) { SLMessOut(0); return CARD_RESULT_NOCARD; } - if (temp_r24 == CARD_RESULT_WRONGDEVICE) { + if (result == CARD_RESULT_WRONGDEVICE) { SLMessOut(7); - return temp_r24; + return result; } - HuWinExAnimOut(temp_r3); - HuWinExCleanup(temp_r3); - HuWinExAnimOut(temp_r3_2); - HuWinExCleanup(temp_r3_2); + HuWinExAnimOut(window1); + HuWinExCleanup(window1); + HuWinExAnimOut(window2); + HuWinExCleanup(window2); CARDGetSerialNo(curSlotNo, &SLSerialNo); curBoxNo = 0; - temp_r19 = OSGetTime(); - SLSaveDataMake(0, &temp_r19); + time = OSGetTime(); + SLSaveDataMake(0, &time); SLCheckSumSet(); - return temp_r24; + return result; } -s16 SLMessOut(s16 arg0) { +s16 SLMessOut(s16 mess) { WindowData *var_r26; - float sp8[2]; - u32 var_r29; - s32 var_r31; - s32 var_r27; - s16 temp_r3; - s16 var_r28; + float size[2]; + u32 slot_mess; + s32 save_mess; + s32 has_choice; + s16 window; + s16 choice; - var_r28 = -1; - var_r29 = 0; - var_r27 = 0; + choice = -1; + slot_mess = 0; + has_choice = 0; HuWinInit(1); SLKillSaveWin(); - switch (arg0) { + switch (mess) { case 0: - var_r31 = MAKE_MESSID(16, 2); + save_mess = MAKE_MESSID(16, 2); break; + case 1: - var_r31 = MAKE_MESSID(16, 83); + save_mess = MAKE_MESSID(16, 83); HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); break; + case 2: HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); - var_r31 = MAKE_MESSID(16, 74); + slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + save_mess = MAKE_MESSID(16, 74); break; + case 3: - var_r31 = MAKE_MESSID(16, 74); + save_mess = MAKE_MESSID(16, 74); HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); break; + case 4: - var_r31 = MAKE_MESSID(16, 74); + save_mess = MAKE_MESSID(16, 74); HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); break; + case 5: HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); - var_r31 = MAKE_MESSID(16, 4); - var_r27 = 1; + slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + save_mess = MAKE_MESSID(16, 4); + has_choice = 1; break; + case 6: - var_r31 = MAKE_MESSID(16, 54); + save_mess = MAKE_MESSID(16, 54); break; case 7: HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); - var_r31 = MAKE_MESSID(16, 55); + slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + save_mess = MAKE_MESSID(16, 55); break; + case 8: HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); - var_r31 = MAKE_MESSID(16, 57); + slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + save_mess = MAKE_MESSID(16, 57); break; + case 9: HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); - var_r31 = MAKE_MESSID(16, 69); + slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + save_mess = MAKE_MESSID(16, 69); break; + case 10: - var_r31 = MAKE_MESSID(16, 70); - var_r27 = 1; + save_mess = MAKE_MESSID(16, 70); + has_choice = 1; break; + case 11: HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0); - var_r29 = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); - var_r31 = MAKE_MESSID(16, 72); + slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]); + save_mess = MAKE_MESSID(16, 72); break; + case 12: - var_r31 = MAKE_MESSID(16, 80); + save_mess = MAKE_MESSID(16, 80); break; } - if (var_r31 == MAKE_MESSID(16, 4)) { - HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(16, 78)); + if (save_mess == MAKE_MESSID(16, 4)) { + HuWinMesMaxSizeGet(1, size, MAKE_MESSID(16, 78)); } else { - HuWinMesMaxSizeGet(1, sp8, var_r31); + HuWinMesMaxSizeGet(1, size, save_mess); } - temp_r3 = HuWinExCreateStyled(-10000.0f, 200.0f, sp8[0], sp8[1], -1, 2); - var_r26 = &winData[temp_r3]; + window = HuWinExCreateStyled(-10000.0f, 200.0f, size[0], size[1], -1, 2); + var_r26 = &winData[window]; var_r26->active_pad = 1; - if (var_r29 != 0) { - HuWinInsertMesSet(temp_r3, var_r29, 0); + if (slot_mess != 0) { + HuWinInsertMesSet(window, slot_mess, 0); } - HuWinAttrSet(temp_r3, 0x10); - HuWinExAnimIn(temp_r3); - HuWinMesSet(temp_r3, var_r31); - HuWinMesWait(temp_r3); - if (var_r27 != 0) { - var_r28 = HuWinChoiceGet(temp_r3, 1); - if (arg0 == 5 && var_r28 == 0) { - HuWinMesSet(temp_r3, MAKE_MESSID(16, 78)); - HuWinMesWait(temp_r3); - var_r28 = HuWinChoiceGet(temp_r3, 1); + HuWinAttrSet(window, 0x10); + HuWinExAnimIn(window); + HuWinMesSet(window, save_mess); + HuWinMesWait(window); + if (has_choice) { + choice = HuWinChoiceGet(window, 1); + if (mess == 5 && choice == 0) { + HuWinMesSet(window, MAKE_MESSID(16, 78)); + HuWinMesWait(window); + choice = HuWinChoiceGet(window, 1); } } - if (arg0 == 0xB) { - while (!(HuPadBtnDown[0] & 0x100)) { + if (mess == 11) { + while (!(HuPadBtnDown[0] & PAD_BUTTON_A)) { HuPrcVSleep(); } } - HuWinExAnimOut(temp_r3); - HuWinExCleanup(temp_r3); - return var_r28; + HuWinExAnimOut(window); + HuWinExCleanup(window); + return choice; } From 88ac4a463f1088d576bc2c68891103f1c0ad862d Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 4 Feb 2024 11:32:36 -0600 Subject: [PATCH 005/106] Match to SeqInitFlip --- config/GMPE01_00/symbols.txt | 4 +- src/game/minigame_seq.c | 602 ++++++++++++++++++++++++++++++++++- 2 files changed, 595 insertions(+), 11 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index dcae058a..7535ca9c 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -4943,8 +4943,8 @@ seqFontKanaTbl = .data:0x8012F3D0; // type:object size:0x52 scope:local data:str seqFontNumTbl = .data:0x8012F422; // type:object size:0xB scope:local data:string letterBufTbl = .data:0x8012F430; // type:object size:0x14 scope:local wordMgTbl = .data:0x8012F444; // type:object size:0x18 scope:local -letterOfs$912 = .data:0x8012F45C; // type:object size:0x40 scope:local -letterOfs$913 = .data:0x8012F49C; // type:object size:0x1C scope:local +letterOfs$909 = .data:0x8012F45C; // type:object size:0x40 scope:local +letterOfs$1386 = .data:0x8012F49C; // type:object size:0x1C scope:local letterOfs$914 = .data:0x8012F4B8; // type:object size:0x38 scope:local charMKoopaNameE = .data:0x8012F4F0; // type:object size:0xA scope:local data:string winCharNameTbl = .data:0x8012F4FC; // type:object size:0x78 scope:local diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index 7003880a..2a44e7c5 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -8,6 +8,8 @@ #include "stdarg.h" +#define ABS(x) (((x) < 0) ? -(x) : (x)) + void MGSeqStub(void); void MGSeqPauseEnableCtrl(s32 flag); @@ -163,8 +165,8 @@ void MGSeqInit(void) seqDoneF = 0; lbl_801D3D94 = 0; seqTimer = 30; - HuAR_DVDtoARAM(MAKE_DIR_NUM(DATADIR_GAMEMES)); - HuAR_DVDtoARAM(MAKE_DIR_NUM(DATADIR_MGCONST)); + HuAR_DVDtoARAM(DATADIR_GAMEMES); + HuAR_DVDtoARAM(DATADIR_MGCONST); while(HuARDMACheck()); fn_80036BC8(); mgSeqInitF = -1; @@ -890,13 +892,6 @@ static s32 SeqMakeWord(SeqWork *work, char *str, s16 flags) return grp_idx; } -static s32 SeqCloneWord(SeqWork *work, s16 grp_idx) -{ - s16 i; - - return i; -} - static AnimData *SeqLoadFontChar(char *str, s16 flags) { s32 data_num; @@ -1487,6 +1482,595 @@ static int SeqUpdateMGBattle(SeqWork *work) return 1; } +static int SeqUpdateMG1vs3(SeqWork *work) +{ + s16 idx; + float scale; + if(work->param[0] != 0 && work->type != -1) { + switch(work->param[0]) { + case 2: + if(work->param[1] != -1) { + (void)work; //HACK: to introduce extra branch + } else { + work->type = -1; + work->work_float[0] = 0.0f; + } + work->param[0] = 0; + break; + + case 1: + work->time_max = work->param[1]; + work->param[0] = 0; + break; + + case 3: + work->type = 1; + work->param[0] = 0; + break; + + default: + work->param[0] = 0; + break; + } + } + if(work->type == 2) { + return 1; + } + work->time += seqSpeed; + if(work->time >= work->time_max && work->type != -1) { + work->stat |= 0x4; + work->type = -1; + work->work_float[0] = 0.0f; + } + if(work->type) { + switch(work->type) { + case 1: + { + float time; + float scale_x, scale_y; + float pos_x, pos_y; + s16 i; + s16 j; + if(work->work_s16[1] == 0) { + if(work->time <= 10) { + scale = work->time/10.0f; + time = work->time; + for(idx=0; idxwork_s16[3]; idx++) { + scale_x = 0.3*work->scale_x; + scale_y = 0.3*work->scale_y; + pos_x = ((28.0f*scale_x)+(work->x-(0.5f*(scale_x*(work->work_s16[3]*56)))))+(scale_x*(idx*56)); + pos_y = work->y-(150.0*sin((M_PI*(((16.0f/3.0f)*time)+20.0f))/180.0)); + HuSprPosSet(work->spr_grp[0], idx, pos_x, pos_y); + HuSprScaleSet(work->spr_grp[0], idx, scale_x, scale_y*cos(M_PI*(12.0f*time)/180.0)); + HuSprTPLvlSet(work->spr_grp[0], idx, scale); + } + } else { + if(work->time <= 60) { + for(i=0; i<4; i++) { + for(idx=0; idxwork_s16[3]; idx++) { + time = (work->time-10)-(idx*3)-i; + if(time < 0.0f) { + time = 0.0f; + } else { + if(time > 30.0f) { + continue; + } + } + scale = 0.3+(0.7*(1.0-cos((M_PI*(time*3.0f))/180.0))); + scale_x = work->scale_x*scale; + scale_y = work->scale_y*scale; + pos_x = ((28.0f*scale_x)+(work->x-(0.5f*(scale_x*(work->work_s16[3]*56)))))+(scale_x*(idx*56)); + pos_y = work->y-(150.0*sin((M_PI*(((16.0f/3.0f)*time)+20.0f))/180.0)); + HuSprPosSet(work->spr_grp[i], idx, pos_x, pos_y); + HuSprScaleSet(work->spr_grp[i], idx, scale_x, scale_y*cos(M_PI*(12.0f*time)/180.0)); + } + } + if(work->time == 60) { + for(i=1; i<4; i++) { + for(j=0; jwork_s16[3]; j++) { + HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + } + } + } + } else { + if(work->time > 70) { + time = work->time-70; + scale = 0.5*sin((M_PI*(time*9.0f))/180.0); + for(j=0; jwork_s16[3]; j++) { + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x)); + HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); + HuSprScaleSet(work->spr_grp[0], j, work->scale_x+scale, work->scale_y+scale); + } + } + } + } + if(work->time == 70) { + HuAudFXPlay(36); + work->stat |= 0x10; + } + if(work->time == 90) { + work->stat |= 0x4; + SeqPlayStartFX(); + } + if(work->time >= 90) { + work->type = 0; + } + } else { + if(work->time == 1) { + if(work->work_s16[1] == 1) { + HuAudFXPlay(37); + } else { + HuAudFXPlay(40); + } + MGSeqPauseEnableCtrl(0); + work->stat |= 0x10; + } + if(work->time <= 20) { + for(i=1; i<4; i++) { + for(j=0; jwork_s16[3]; j++) { + HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + } + } + time = work->time; + scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0)); + for(j=0; jwork_s16[3]; j++) { + HuSprAttrReset(work->spr_grp[0], j, SPRITE_ATTR_HIDDEN); + pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56)); + HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); + HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); + } + if(time == 20.0f) { + for(i=1; i<4; i++) { + for(j=0; jwork_s16[3]; j++) { + HuSprAttrReset(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + } + } + } + } else { + if(work->time > 80 || work->time < 140) { + for(i=0; i<4; i++) { + for(j=0; jwork_s16[3]; j++) { + time = (work->time-80)-i-j; + if(time < 0 || time > 40) { + continue; + } + if(time <= 20) { + float pos_base = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(j*56); + pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+((work->work_s16[3]-j-1)*56); + HuSprPosSet(work->spr_grp[i], j, pos_base+((time/20.0f)*(pos_x-pos_base)), work->y+((440.0f-work->y)*(time/20.0f))); + } else { + time -= 20.0f; + pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+((work->work_s16[3]-j-1)*56); + pos_y = 440.0f; + HuSprPosSet(work->spr_grp[i], j, pos_x, pos_y+((-40.0f-pos_y)*(time/20.0f))); + } + } + } + } + } + if(work->time == 140) { + work->stat |= 0x4; + } + if(work->time >= 140) { + work->type = 0; + work->stat |= 0x8; + } + } + } + break; + + case -1: + { + work->work_float[0] += seqSpeed*0.1f; + scale = 1.0f-work->work_float[0]; + if(scale <= 0.0f) { + scale = 0.0f; + work->type = 0; + work->stat |= 0x8; + if(work->work_s16[1] == 0) { + MGSeqPauseEnableCtrl(1); + } + } + for(idx=0; idxwork_s16[3]; idx++) { + HuSprTPLvlSet(work->spr_grp[0], idx, scale); + } + } + break; + + default: + break; + } + } + if(seqDoneF || (work->stat & 0x8)) { + MGSeqSprKill(work); + return 0; + } + return 1; +} + +static int SeqUpdateMGStory(SeqWork *work) +{ + s16 idx; + float scale; + if(work->param[0] != 0 && work->type != -1) { + switch(work->param[0]) { + case 2: + if(work->param[1] != -1) { + (void)work; //HACK: to introduce extra branch + } else { + work->type = -1; + work->work_float[0] = 0.0f; + } + work->param[0] = 0; + break; + + case 1: + work->time_max = work->param[1]; + work->param[0] = 0; + break; + + case 3: + work->type = 1; + work->param[0] = 0; + break; + + default: + work->param[0] = 0; + break; + } + } + if(work->type == 2) { + return 1; + } + work->time += seqSpeed; + if(work->time >= work->time_max && work->type != -1) { + work->stat |= 0x4; + work->type = -1; + work->work_float[0] = 0.0f; + } + if(work->type) { + switch(work->type) { + case 1: + { + float pos_x, pos_y; + float time; + s16 i; + s16 j; + if(work->work_s16[1] == 0) { + if(work->time <= 30) { + for(idx=0; idxwork_s16[3]; idx++) { + time = (work->time-(idx*2)); + if(time < 0.0f || time > 15.0f) { + continue; + } + pos_x = -50.0f; + HuSprPosSet(work->spr_grp[0], idx, pos_x+((288.0f-pos_x)*(time/15.0f)), work->y); + HuSprTPLvlSet(work->spr_grp[0], idx, 1.0f); + HuSprZRotSet(work->spr_grp[0], idx, (1.0-(time/15.0f))*180.0); + pos_x = 626.0f; + HuSprPosSet(work->spr_grp[1], idx, pos_x+((288.0f-pos_x)*(time/15.0f)), work->y); + HuSprTPLvlSet(work->spr_grp[1], idx, 1.0f); + HuSprZRotSet(work->spr_grp[1], idx, (1.0-(time/15.0f))*-180.0); + } + if(work->time == 30) { + for(j=0; jwork_s16[3]; j++) { + HuSprAttrSet(work->spr_grp[1], j, SPRITE_ATTR_HIDDEN); + } + } + } else { + if(work->time > 35 && work->time <= 45) { + time = work->time-35; + for(idx=0; idxwork_s16[3]; idx++) { + pos_x = (work->x-(0.5f*(work->work_s16[3]*56)))+28.0f+(idx*56); + HuSprPosSet(work->spr_grp[0], idx, 288.0f+((pos_x-288.0f)*(time/10.0f)), work->y); + } + } else { + if(work->time > 55) { + time = work->time-55; + scale = 0.5*sin(M_PI*(9.0f*time)/180.0); + for(j=0; jwork_s16[3]; j++) { + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x)); + HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); + HuSprScaleSet(work->spr_grp[0], j, work->scale_x+scale, work->scale_y+scale); + } + } + } + } + if(work->time == 55) { + HuAudFXPlay(36); + work->stat |= 0x10; + } + if(work->time == 75) { + SeqPlayStartFX(); + work->stat |= 0x4; + } + if(work->time >= 75) { + work->type = 0; + } + } else { + if(work->time == 1) { + if(work->work_s16[1] == 1) { + HuAudFXPlay(37); + } else { + HuAudFXPlay(40); + } + MGSeqPauseEnableCtrl(0); + work->stat |= 0x10; + } + if(work->time <= 20) { + for(i=1; i<4; i++) { + for(j=0; jwork_s16[3]; j++) { + HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + } + } + time = work->time; + scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0)); + for(j=0; jwork_s16[3]; j++) { + HuSprAttrReset(work->spr_grp[0], j, SPRITE_ATTR_HIDDEN); + pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56)); + HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); + HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); + } + if(time == 20.0f){ + for(i=1; i<4; i++) { + for(j=0; jwork_s16[3]; j++) { + HuSprAttrReset(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + } + } + } + } else if(work->time > 80 && work->time < 160) { + for(i=0; i<4; i++) { + for(j=0; jwork_s16[3]; j++) { + s16 initF; + float dx, dy; + time = (work->time-80)-i; + if(time < 0 || time > 60) { + continue; + } + pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(j*56); + dx = 28.0f+(work->x-(0.5f*(work->work_s16[3]*56))); + pos_y = work->y; + for(idx=initF=0; idxx-(0.5f*(work->work_s16[3]*56))); + initF = 1; + dy = 25.0f; + dx = 10.0f; + } + + } else { + pos_x += dx; + pos_y += dy; + dx += 0.1; + dy -= 2.0f; + if(pos_y < 0.0f) { + break; + } + } + } + + HuSprPosSet(work->spr_grp[i], j, pos_x, pos_y); + } + } + } + if(work->time == 160) { + work->stat |= 0x4; + } + if(work->time >= 160) { + work->type = 0; + work->stat |= 0x8; + } + } + } + break; + + case -1: + { + work->work_float[0] += seqSpeed*0.1f; + scale = 1.0f-work->work_float[0]; + if(scale <= 0.0f) { + scale = 0.0f; + work->type = 0; + work->stat |= 0x8; + if(work->work_s16[1] == 0) { + MGSeqPauseEnableCtrl(1); + } + } + for(idx=0; idxwork_s16[3]; idx++) { + HuSprTPLvlSet(work->spr_grp[0], idx, scale); + } + } + break; + + default: + break; + } + } + if(seqDoneF || (work->stat & 0x8)) { + MGSeqSprKill(work); + return 0; + } + return 1; +} + +static int SeqUpdateMG2vs2(SeqWork *work) +{ + s16 idx; + float scale; + if(work->param[0] != 0 && work->type != -1) { + switch(work->param[0]) { + case 2: + if(work->param[1] != -1) { + (void)work; //HACK: to introduce extra branch + } else { + work->type = -1; + work->work_float[0] = 0.0f; + } + work->param[0] = 0; + break; + + case 1: + work->time_max = work->param[1]; + work->param[0] = 0; + break; + + case 3: + work->type = 1; + work->param[0] = 0; + break; + + default: + work->param[0] = 0; + break; + } + } + if(work->type == 2) { + return 1; + } + work->time += seqSpeed; + if(work->time >= work->time_max && work->type != -1) { + work->stat |= 0x4; + work->type = -1; + work->work_float[0] = 0.0f; + } + if(work->type) { + switch(work->type) { + case 1: + { + static s16 letterOfs[] = { + -10, -50, + 0, -30, + 5, -60, + -10, 60, + 8, -40, + 5, 50, + -10, 20 + }; + + float pos_x; + float time; + s16 i; + s16 j; + if(work->work_s16[1] == 0) { + if(work->time <= 30) { + time = work->time; + for(idx=0; idxwork_s16[3]; idx++) { + pos_x = (28.0f+(work->x-(0.5f*(work->scale_x*(work->work_s16[3]*56)))))+(idx*56); + HuSprPosSet(work->spr_grp[0], idx, pos_x+((1.0f-(time/30.0f))*letterOfs[(idx*2)]), work->y+((1.0f-(time/30.0f))*letterOfs[(idx*2)+1])); + HuSprTPLvlSet(work->spr_grp[0], idx, time/30.0f); + } + } else { + if(work->time > 40 && work->time <= 60) { + time = work->time-40; + scale = 0.5*sin(((time*9.0f)*M_PI)/180.0); + for(j=0; jwork_s16[3]; j++) { + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x)); + HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); + HuSprScaleSet(work->spr_grp[0], j, work->scale_x+scale, work->scale_y+scale); + } + } + } + if(work->time == 40) { + HuAudFXPlay(36); + work->stat |= 0x10; + } + if(work->time == 60) { + work->stat |= 0x4; + SeqPlayStartFX(); + } + if(work->time >= 60) { + work->type = 0; + } + } else { + if(work->time == 1) { + if(work->work_s16[1] == 1) { + HuAudFXPlay(37); + } else { + HuAudFXPlay(40); + } + MGSeqPauseEnableCtrl(0); + work->stat |= 0x10; + } + if(work->time <= 20) { + for(i=1; i<4; i++) { + for(j=0; jwork_s16[3]; j++) { + HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + } + } + time = work->time; + scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0)); + for(j=0; jwork_s16[3]; j++) { + HuSprAttrReset(work->spr_grp[0], j, SPRITE_ATTR_HIDDEN); + pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56)); + HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); + HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); + } + if(time == 20.0f) { + for(i=1; i<4; i++) { + for(j=0; jwork_s16[3]; j++) { + HuSprAttrReset(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + } + } + } + } else { + if(work->time > 80 && work->time < 140) { + time = work->time-80; + for(idx=0; idxwork_s16[3]; idx++) { + float radius = (idx*56)-(((work->work_s16[3]-1)*56)/2); + float angle = (1.0f+(1.0f-(ABS(radius)/320.0f)))*720.0f; + float new_scale; + radius *= 1.0-(time/60.0f); + HuSprPosSet(work->spr_grp[0], idx, (radius*sin(M_PI*(((time/60.0f)*angle)+90.0f)/180.0))+work->x, (radius*cos(M_PI*(((time/60.0f)*angle)+90.0f)/180.0))+work->y); + HuSprZRotSet(work->spr_grp[0], idx, -(time/60.0f)*720.0f); + new_scale = 0.5+(0.5*(1.0f-(time/60.0f))); + HuSprScaleSet(work->spr_grp[0], idx, new_scale, new_scale); + HuSprTPLvlSet(work->spr_grp[0], idx, 1.0f-(time/60.0f)); + } + } + } + if(work->time == 140) { + work->stat |= 0x4; + } + if(work->time >= 150) { + work->type = 0; + work->stat |= 0x8; + } + } + } + break; + + case -1: + { + work->work_float[0] += seqSpeed*0.1f; + scale = 1.0f-work->work_float[0]; + if(scale <= 0.0f) { + scale = 0.0f; + work->type = 0; + work->stat |= 0x8; + if(work->work_s16[1] == 0) { + MGSeqPauseEnableCtrl(1); + } + } + for(idx=0; idxwork_s16[3]; idx++) { + HuSprTPLvlSet(work->spr_grp[0], idx, scale); + } + } + break; + + default: + + break; + + } + } + if(seqDoneF || (work->stat & 0x8)) { + MGSeqSprKill(work); + return 0; + } + return 1; +} static int SeqInitDraw(SeqWork *work, va_list params) { From aeeb71011501a042f7c571247e69caa0d575f0a9 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 4 Feb 2024 13:33:00 -0600 Subject: [PATCH 006/106] Fully match data.c --- configure.py | 2 +- src/game/data.c | 155 ++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 151 insertions(+), 6 deletions(-) diff --git a/configure.py b/configure.py index f9ee5812..05ee7986 100644 --- a/configure.py +++ b/configure.py @@ -313,7 +313,7 @@ config.libs = [ Object(Matching, "game/main.c"), Object(Matching, "game/pad.c"), Object(Matching, "game/dvd.c"), - Object(NonMatching, "game/data.c"), + Object(Matching, "game/data.c"), Object(Matching, "game/decode.c"), Object(Matching, "game/font.c"), Object(Matching, "game/init.c"), diff --git a/src/game/data.c b/src/game/data.c index d1717de7..3af1b340 100644 --- a/src/game/data.c +++ b/src/game/data.c @@ -1,5 +1,6 @@ #include "game/data.h" #include "game/armem.h" +#include "game/process.h" #include "dolphin/dvd.h" #define PTR_OFFSET(ptr, offset) (void *)(((u8 *)(ptr)+(u32)(offset))) @@ -11,7 +12,7 @@ static void **HuDataReadMultiSub(s32 *data_ids, BOOL use_num, s32 num); #define DATADIR_DEFINE(name, path) { path, -1 }, -static FileListEntry DataDirStat[DATADIR_ID_MAX+1] = { +static FileListEntry DataDirStat[] = { #include "datadir_table.h" { NULL, -1 } }; @@ -21,7 +22,7 @@ static FileListEntry DataDirStat[DATADIR_ID_MAX+1] = { u32 DirDataSize; static u32 DataDirMax; static s32 shortAccessSleep; -static DataReadStat ReadDataStat[DATA_MAX_READSTAT]; +static DataReadStat ATTRIBUTE_ALIGN(32) ReadDataStat[DATA_MAX_READSTAT]; void HuDataInit(void) { @@ -131,7 +132,7 @@ DataReadStat *HuDataDirRead(s32 data_num) return read_stat; } -DataReadStat *HuDataDirReadNum(s32 data_num, s32 num) +static DataReadStat *HuDataDirReadNum(s32 data_num, s32 num) { DataReadStat *read_stat; int status; @@ -544,8 +545,152 @@ void HuDataDirCloseNum(s32 num) } } +static s32 HuDataDVDdirDirectOpen(s32 data_id, DVDFileInfo *fileInfo) +{ + s32 dir = data_id >> 16; + if(dir >= (s32)DataDirMax) { + OSReport("data.c: Data Number Error(0x%08x)\n", data_id); + return 0; + } + if(!DVDFastOpen(DataDirStat[dir].file_id, fileInfo)) { + char panic_str[48]; + sprintf(panic_str, "HuDataDVDdirDirectOpen: File Open Error(%08x)", data_id); + OSPanic("data.c", 895, panic_str); + } + return 1; +} + +static s32 HuDataDVDdirDirectRead(DVDFileInfo *fileInfo, void *dest, s32 len, s32 offset) +{ + s32 result = DVDReadAsync(fileInfo, dest, len, offset, NULL); + if(result != 1) { + OSPanic("data.c", 904, "HuDataDVDdirDirectRead: File Read Error"); + } + while(DVDGetCommandBlockStatus(&fileInfo->cb)) { + if(shortAccessSleep) { + HuPrcVSleep(); + } + } + return result; +} + +static void *HuDataDecodeIt(void *buf_start, s32 buf_ofs, s32 num, HeapID heap) +{ + void *data_start; + s32 *buf; + s32 raw_len, comp_type; + + void *dest; + buf = (s32 *)((u8 *)buf_start+buf_ofs); + if((u32)buf & 0x3) { + u8 *data = (u8 *)buf; + raw_len = *data++ << 24; + raw_len += *data++ << 16; + raw_len += *data++ << 8; + raw_len += *data++; + comp_type = *data++ << 24; + comp_type += *data++ << 16; + comp_type += *data++ << 8; + comp_type += *data++; + data_start = data; + } else { + s32 *data = buf; + raw_len = *data++; + comp_type = *data++; + data_start = data; + } + switch(heap) { + case HEAP_MUSIC: + dest = HuMemDirectMalloc(HEAP_MUSIC, DATA_EFF_SIZE(raw_len)); + break; + + case HEAP_DATA: + dest = HuMemDirectMallocNum(HEAP_DATA, DATA_EFF_SIZE(raw_len), num); + break; + + case HEAP_DVD: + dest = HuMemDirectMallocNum(HEAP_DVD, DATA_EFF_SIZE(raw_len), num); + break; + + default: + dest = HuMemDirectMallocNum(HEAP_SYSTEM, DATA_EFF_SIZE(raw_len), num); + break; + } + if(dest) { + HuDecodeData(data_start, dest, raw_len, comp_type); + } + return dest; +} + + //Still to be decompiled void *HuDataReadNumHeapShortForce(s32 data_id, s32 num, HeapID heap) { - return NULL; -} \ No newline at end of file + DVDFileInfo fileInfo; + s32 *data_hdr; + s32 *file_data; + void *file_raw_buf; + s32 read_len; + s32 file_id; + s32 file_ofs; + s32 read_ofs; + s32 data_ofs; + void *ret; + s32 dir; + s32 data_len; + s32 file_max; + + if(!HuDataDVDdirDirectOpen(data_id, &fileInfo)) { + return NULL; + } + dir = (data_id >> 16) & 0xFFFF0000; + file_id = data_id & 0xFFFF; + file_ofs = (file_id*4)+4; + data_len = OSRoundUp32B(file_ofs+8); + file_data = HuMemDirectMalloc(HEAP_SYSTEM, data_len); + if(!HuDataDVDdirDirectRead(&fileInfo, file_data, data_len, 0)) { + HuMemDirectFree(file_data); + DVDClose(&fileInfo); + return NULL; + } + file_max = *file_data; + if(file_max <= file_id) { + HuMemDirectFree(file_data); + OSReport("data.c%d: Data Number Error(0x%08x)\n", 1005, data_id); + DVDClose(&fileInfo); + return NULL; + } + data_hdr = file_data; + data_hdr += file_id+1; + file_ofs = *data_hdr; + read_ofs = OSRoundDown32B(file_ofs); + if(file_max <= file_id+1) { + read_len = fileInfo.length; + data_ofs = read_len-read_ofs; + } else { + data_hdr++; + data_ofs = (*data_hdr)-read_ofs; + read_len = fileInfo.length; + } + read_len = OSRoundUp32B(data_ofs); + HuMemDirectFree(file_data); + file_raw_buf = HuMemDirectMalloc(HEAP_SYSTEM, (read_len+4) & ~0x3); + if(file_raw_buf == NULL) { + OSReport("data.c: couldn't allocate read buffer(0x%08x)\n", data_id); + DVDClose(&fileInfo); + return NULL; + } + if(!HuDataDVDdirDirectRead(&fileInfo, file_raw_buf, read_len, read_ofs)) { + HuMemDirectFree(file_raw_buf); + DVDClose(&fileInfo); + return NULL; + } + DVDClose(&fileInfo); + data_ofs = file_ofs-read_ofs; + ret = HuDataDecodeIt(file_raw_buf, data_ofs, num, heap); + HuMemDirectFree(file_raw_buf); + return ret; +} + +char lbl_8011FDA6[] = "** dcnt %d tmp %08x sp1 %08x\n"; +char lbl_8011FDC4[] = "** dcnt %d lastNum %08x\n"; \ No newline at end of file From 6faa7ea83b4643c58b94726d9a6ac52bd15ffe8b Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 4 Feb 2024 22:59:38 -0600 Subject: [PATCH 007/106] Decompile more of minigame_seq.c --- config/GMPE01_00/symbols.txt | 2 +- include/game/object.h | 2 +- src/game/minigame_seq.c | 587 ++++++++++++++++++++++++++++++++++- 3 files changed, 587 insertions(+), 4 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 7535ca9c..e496b917 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -4945,7 +4945,7 @@ letterBufTbl = .data:0x8012F430; // type:object size:0x14 scope:local wordMgTbl = .data:0x8012F444; // type:object size:0x18 scope:local letterOfs$909 = .data:0x8012F45C; // type:object size:0x40 scope:local letterOfs$1386 = .data:0x8012F49C; // type:object size:0x1C scope:local -letterOfs$914 = .data:0x8012F4B8; // type:object size:0x38 scope:local +letterOfs$1761 = .data:0x8012F4B8; // type:object size:0x38 scope:local charMKoopaNameE = .data:0x8012F4F0; // type:object size:0xA scope:local data:string winCharNameTbl = .data:0x8012F4FC; // type:object size:0x78 scope:local wordChampionE = .data:0x8012F574; // type:object size:0xA scope:local data:string diff --git a/include/game/object.h b/include/game/object.h index a175d01d..ba3a68ee 100644 --- a/include/game/object.h +++ b/include/game/object.h @@ -86,7 +86,7 @@ void omDLLInit(FileListEntry *ovl_list); int omDLLStart(s16 ovl, s16 dll); void omDLLNumEnd(s16 ovl, s16 arg2); -void omSysPauseEnable(BOOL flag); +void omSysPauseEnable(u8 flag); void omSystemKeyCheckSetup(Process *objman_process); diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index 2a44e7c5..089c95fb 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -3,6 +3,7 @@ #include "game/process.h" #include "game/gamework_data.h" #include "game/objsub.h" +#include "game/object.h" #include "game/hsfman.h" #include "math.h" @@ -2072,14 +2073,596 @@ static int SeqUpdateMG2vs2(SeqWork *work) return 1; } +static int SeqInitFlip(SeqWork *work, va_list params) +{ + s16 i; + s16 word_grp; + s16 word_ofs; + work->work_s16[1] = va_arg(params, int); + if(work->work_s16[1] == 2) { + return SeqInitDraw(work, params); + } + work->type = 0; + work->work_float[0] = 0; + { + s32 word_ofs_temp; + s32 word_katakana; + s32 word_flag; + + if(seqLanguage == 0) { + word_ofs_temp = 3; + } else { + word_ofs_temp = 0; + } + word_ofs = word_ofs_temp; + word_katakana = 0; + if(work->work_s16[1] == 2 && word_ofs == 0) { + word_katakana = 1; + } + if(word_katakana) { + word_flag = 1; + } else { + word_flag = 0; + } + + word_grp = SeqMakeWord(work, wordMgTbl[work->work_s16[1]+word_ofs], word_flag); + } + HuSprGrpPosSet(work->spr_grp[word_grp], 0.0f, 0.0f); + for(i=0; iwork_s16[3]; i++) { + HuSprTPLvlSet(work->spr_grp[word_grp], i, 0.0f); + HuSprPosSet(work->spr_grp[word_grp], i, (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(i*56), work->y); + HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR); + HuSprAttrReset(work->spr_grp[word_grp], i, SPRITE_ATTR_HIDDEN); + } + work->work_s16[2] = work->work_s16[3]; + { + s32 word_ofs_temp; + s32 word_katakana; + s32 word_flag; + + if(seqLanguage == 0) { + word_ofs_temp = 0; + } else { + word_ofs_temp = 3; + } + word_ofs = word_ofs_temp; + word_katakana = 0; + if(work->work_s16[1] == 2 && word_ofs == 0) { + word_katakana = 1; + } + if(word_katakana) { + word_flag = 1; + } else { + word_flag = 0; + } + + word_grp = SeqMakeWord(work, wordMgTbl[work->work_s16[1]+word_ofs], word_flag); + } + HuSprGrpPosSet(work->spr_grp[word_grp], 0.0f, 0.0f); + for(i=0; iwork_s16[3]; i++) { + HuSprTPLvlSet(work->spr_grp[word_grp], i, 0.0f); + HuSprPosSet(work->spr_grp[word_grp], i, (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(i*56), work->y); + HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR); + HuSprAttrReset(work->spr_grp[word_grp], i, SPRITE_ATTR_HIDDEN); + } + if(seqPauseF) { + work->type = 2; + HuSprAttrSet(word_grp, 0, SPRITE_ATTR_HIDDEN); + } else { + work->param[0] = 3; + } + return 1; +} + +static int SeqUpdateFlip(SeqWork *work) +{ + s16 idx; + float scale; + if(work->param[0] != 0 && work->type != -1) { + switch(work->param[0]) { + case 2: + if(work->param[1] != -1) { + (void)work; //HACK: to introduce extra branch + } else { + work->type = -1; + work->work_float[0] = 0.0f; + } + work->param[0] = 0; + break; + + case 1: + work->time_max = work->param[1]; + work->param[0] = 0; + break; + + case 3: + work->type = 1; + work->param[0] = 0; + break; + + default: + work->param[0] = 0; + break; + } + } + if(work->type == 2) { + return 1; + } + work->time += seqSpeed; + if(work->time >= work->time_max && work->type != -1) { + work->stat |= 0x4; + work->type = -1; + work->work_float[0] = 0.0f; + } + if(work->type) { + switch(work->type) { + case 1: + { + float time; + float pos_x; + s16 i; + if(work->work_s16[1] == 0) { + if(work->time <= 10) { + for(idx=0; idxwork_s16[2]; idx++) { + HuSprTPLvlSet(work->spr_grp[0], idx, work->time/10.0f); + } + } else { + if(work->time <= 30) { + time = work->time-10; + if(time <= 10) { + for(idx=0; idxwork_s16[2]; idx++) { + HuSprScaleSet(work->spr_grp[0], idx, cos(M_PI*((time/10.0f)*90.0f)/180.0), 1.0f); + } + } else { + time -= 10.0f; + for(idx=0; idxwork_s16[3]; idx++) { + HuSprTPLvlSet(work->spr_grp[1], idx, 1.0f); + HuSprScaleSet(work->spr_grp[1], idx, sin(M_PI*((time/10.0f)*90.0f)/180.0), 1.0f); + } + } + } else { + if(work->time > 35 && work->time <= 55) { + time = work->time-35; + scale = 0.5*sin(((time*9.0f)*M_PI)/180.0); + for(i=0; iwork_s16[3]; i++) { + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((i*56)*(scale+work->scale_x)); + HuSprPosSet(work->spr_grp[1], i, pos_x, work->y); + HuSprScaleSet(work->spr_grp[1], i, work->scale_x+scale, work->scale_y+scale); + } + } + } + } + if(work->time == 35) { + HuAudFXPlay(36); + work->stat |= 0x10; + } + if(work->time == 55) { + work->stat |= 0x4; + SeqPlayStartFX(); + } + if(work->time >= 75) { + work->type = 0; + } + } else { + if(work->time == 1) { + if(work->work_s16[1] == 1) { + HuAudFXPlay(37); + } else { + HuAudFXPlay(40); + } + MGSeqPauseEnableCtrl(0); + work->stat |= 0x10; + } + if(work->time <= 20) { + time = work->time; + scale = 0.5*sin(M_PI*(9.0f*time)/180.0); + for(i=0; iwork_s16[3]; i++) { + HuSprTPLvlSet(work->spr_grp[1], i, 1.0f); + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((i*56)*(scale+work->scale_x)); + HuSprPosSet(work->spr_grp[1], i, pos_x, work->y); + HuSprScaleSet(work->spr_grp[1], i, work->scale_x+scale, work->scale_y+scale); + } + } else { + if(work->time > 80 && work->time <= 160) { + time = work->time-80; + for(idx=0; idxwork_s16[3]; idx++) { + scale = time-(idx*2); + if(scale < 0 || scale > 15.0f) { + continue; + } + HuSprScaleSet(work->spr_grp[1], idx, cos(M_PI*((scale/15.0f)*90.0f)/180.0), 1.0f); + } + for(idx=0; idxwork_s16[2]; idx++) { + scale = (time-15.0f)-(idx*2); + if(scale < 0 || scale > 30.0f) { + continue; + } + HuSprTPLvlSet(work->spr_grp[0], idx, 1.0f); + HuSprScaleSet(work->spr_grp[0], idx, sin(M_PI*((scale/30.0f)*180.0f)/180.0), 1.0f); + } + } + } + if(work->time == 160) { + work->stat |= 0x4; + } + if(work->time >= 160) { + work->type = 0; + work->stat |= 0x8; + } + } + } + break; + + case -1: + { + work->work_float[0] += seqSpeed*0.1f; + scale = 1.0f-work->work_float[0]; + if(scale <= 0.0f) { + scale = 0.0f; + work->type = 0; + work->stat |= 0x8; + if(work->work_s16[1] == 0) { + MGSeqPauseEnableCtrl(1); + } + } + for(idx=0; idxwork_s16[3]; idx++) { + HuSprTPLvlSet(work->spr_grp[1], idx, scale); + } + } + break; + + default: + break; + } + } + if(seqDoneF || (work->stat & 0x8)) { + MGSeqSprKill(work); + return 0; + } + return 1; +} + +static int SeqUpdateMGBowser(SeqWork *work) +{ + s16 idx; + float scale; + if(work->param[0] != 0 && work->type != -1) { + switch(work->param[0]) { + case 2: + if(work->param[1] != -1) { + (void)work; //HACK: to introduce extra branch + } else { + work->type = -1; + work->work_float[0] = 0.0f; + } + work->param[0] = 0; + break; + + case 1: + work->time_max = work->param[1]; + work->param[0] = 0; + break; + + case 3: + work->type = 1; + work->param[0] = 0; + break; + + default: + work->param[0] = 0; + break; + } + } + if(work->type == 2) { + return 1; + } + work->time += seqSpeed; + if(work->time >= work->time_max && work->type != -1) { + work->stat |= 0x4; + work->type = -1; + work->work_float[0] = 0.0f; + } + if(work->type) { + switch(work->type) { + case 1: + { + s16 i; + s16 j; + float angle; + float time_angle; + float time; + float pos_x, pos_y; + + float temp_f25; + float center_x; + s16 spr_idx[16]; + float scale_arr[16]; + + + if(work->work_s16[1] == 0) { + if(work->time <= 60) { + center_x = (0.5*(work->work_s16[3]*56))+20.0; + for(idx=0; idxwork_s16[3]; idx++) { + time = work->time-idx; + if(time < 0) { + scale_arr[idx] = 0.0f; + spr_idx[idx] = idx; + } else { + if(time > 50.0f) { + time = 50.0f; + } + time_angle = 540.0*(1.0f-(time/50.0f)); + pos_x = (28.0f+(0.5f*-(work->work_s16[3]*56)))+(idx*56); + angle = 180.0*(atan2(pos_x, center_x)/M_PI); + pos_x = work->x+(center_x*sin(M_PI*(angle+time_angle)/180.0)); + pos_y = work->y-(240.0*(1.0-(time/50.0f))); + HuSprPosSet(work->spr_grp[0], idx, pos_x, pos_y); + temp_f25 = 0.9+(0.1*cos(M_PI*(angle+time_angle)/180.0)); + HuSprScaleSet(work->spr_grp[0], idx, temp_f25*cos(M_PI*(angle+time_angle)/180.0), temp_f25); + scale_arr[idx] = cos(M_PI*(angle+time_angle)/180.0); + spr_idx[idx] = idx; + } + } + for(i=1; iwork_s16[3]; i++) { + for(idx=0; idxwork_s16[3]-i; idx++) { + if(scale_arr[idx] > scale_arr[idx+1]) { + j= spr_idx[idx]; + spr_idx[idx] = spr_idx[idx+1]; + spr_idx[idx+1] = j; + angle = scale_arr[idx]; + scale_arr[idx] = scale_arr[idx+1]; + scale_arr[idx+1] = angle; + } + } + } + for(idx=0; idxwork_s16[3]; idx++) { + HuSprPriSet(work->spr_grp[0], spr_idx[idx], idx+5); + } + } else { + if(work->time > 60 && work->time <= 80) { + time = work->time-60; + scale = 0.5*sin(((time*9.0f)*M_PI)/180.0); + for(i=0; iwork_s16[3]; i++) { + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((i*56)*(scale+work->scale_x)); + HuSprPosSet(work->spr_grp[0], i, pos_x, work->y); + HuSprScaleSet(work->spr_grp[0], i, work->scale_x+scale, work->scale_y+scale); + } + } + + } + if(work->time == 60) { + HuAudFXPlay(36); + work->stat |= 0x10; + } + if(work->time == 80) { + work->stat |= 0x4; + SeqPlayStartFX(); + } + if(work->time >= 100) { + work->type = 0; + } + } else { + if(work->time == 1) { + if(work->work_s16[1] == 1) { + HuAudFXPlay(37); + } else { + HuAudFXPlay(40); + } + MGSeqPauseEnableCtrl(0); + work->stat |= 0x10; + } + if(work->time <= 20) { + for(j=1; j<4; j++) { + for(i=0; iwork_s16[3]; i++) { + HuSprAttrSet(work->spr_grp[j], i, SPRITE_ATTR_HIDDEN); + } + } + time = work->time; + scale = work->scale_x+(0.5*sin(((time*9.0f)*M_PI)/180.0)); + for(i=0; iwork_s16[3]; i++) { + HuSprAttrReset(work->spr_grp[0], i, SPRITE_ATTR_HIDDEN); + pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(i*56)); + HuSprPosSet(work->spr_grp[0], i, pos_x, work->y); + HuSprScaleSet(work->spr_grp[0], i, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); + } + if(time == 20.0f) { + for(j=1; j<4; j++) { + for(i=0; iwork_s16[3]; i++) { + HuSprAttrReset(work->spr_grp[j], i, SPRITE_ATTR_HIDDEN); + } + } + } + } else { + if(work->time > 80 && work->time <= 125) { + static float letterOfs[] = { + -30, -30, + 606, -30, + 340, 510, + 606, 510, + -30, 450, + 606, 120, + 450, -30, + }; + for(i=0; i<4; i++) { + time = work->time-80-i; + if(time < 0.0f || time > 15.0f) { + continue; + } + for(idx=0; idxwork_s16[3]; idx++) { + pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(idx*56); + pos_x += (time/15.0f)*(letterOfs[(idx*2)]-pos_x); + pos_y = work->y+((time/15.0f)*(letterOfs[(idx*2)+1]-work->y)); + HuSprPosSet(work->spr_grp[i], idx, pos_x, pos_y); + } + } + } + } + if(work->time == 125) { + work->stat |= 0x4; + } + if(work->time >= 135) { + work->type = 0; + work->stat |= 0x8; + } + } + } + break; + + case -1: + { + work->work_float[0] += seqSpeed*0.1f; + scale = 1.0f-work->work_float[0]; + if(scale <= 0.0f) { + scale = 0.0f; + work->type = 0; + work->stat |= 0x8; + if(work->work_s16[1] == 0) { + MGSeqPauseEnableCtrl(1); + } + } + for(idx=0; idxwork_s16[3]; idx++) { + HuSprTPLvlSet(work->spr_grp[0], idx, scale); + } + } + break; + + default: + break; + } + } + if(seqDoneF || (work->stat & 0x8)) { + MGSeqSprKill(work); + return 0; + } + return 1; +} + static int SeqInitDraw(SeqWork *work, va_list params) { - + s16 word_grp; + work->work_s16[1] = 2; + work->seq_no = 13; + work->type = 0; + work->work_float[0] = 0.0f; + { + s32 word_flag; + s32 word_ofs; + + if(seqLanguage == 0) { + word_flag = 1; + } else { + word_flag = 0; + } + if(seqLanguage == 0) { + word_ofs = 0; + } else { + word_ofs = 3; + } + + word_grp = SeqMakeWord(work, wordMgTbl[2+word_ofs], word_flag); + } + HuSprGrpPosSet(work->spr_grp[word_grp], 288.0f, 240.0f); + work->param[0] = 3; + return 1; +} + +static int SeqUpdateDraw(SeqWork *work) +{ + s16 idx; + float scale; + s16 group = work->spr_grp[0]; + if(work->param[0] != 0 && work->type != -1) { + switch(work->param[0]) { + case 2: + if(work->param[1] != -1) { + (void)work; //HACK: to introduce extra branch + } else { + work->type = -1; + work->work_float[0] = 0.0f; + } + work->param[0] = 0; + break; + + case 1: + work->time_max = work->param[1]; + work->param[0] = 0; + break; + + case 3: + work->type = 1; + work->param[0] = 0; + break; + + default: + work->param[0] = 0; + break; + } + } + work->time += seqSpeed; + if(work->time >= work->time_max && work->type != -1) { + work->stat |= 0x4; + work->type = -1; + work->work_float[0] = 0.0f; + } + if(work->type) { + switch(work->type) { + case 1: + { + float time; + float scale; + float zrot; + if(work->time <= 20) { + time = work->time; + zrot = 365.0f*(time/20.0f); + scale = (double)1.3*sin(M_PI*(90.0f*(time/20.0f))/180.0); + HuSprGrpScaleSet(group, scale, scale); + HuSprGrpZRotSet(group, zrot); + } + if(work->time > 20 && work->time <= 25) { + HuSprGrpZRotSet(group, 0.0f); + time = work->time-20; + scale = 1.0+(0.3*cos(M_PI*(90.0f*(time/5.0f))/180.0)); + HuSprGrpScaleSet(group, scale, scale); + } + if(work->time == 5) { + HuAudFXPlay(40); + } + if(work->time == 60) { + work->type = 0; + } + } + break; + + case -1: + { + float tp_lvl; + work->work_float[0] += seqSpeed*0.1f; + tp_lvl = 1.0f-work->work_float[0]; + if(tp_lvl <= 0.0f) { + tp_lvl = 0.0f; + work->work_s16[1] = 0; + work->stat |= 0x8; + } + HuSprGrpTPLvlSet(group, tp_lvl); + } + break; + + default: + break; + } + } + if(seqDoneF || (work->stat & 0x8)) { + MGSeqSprKill(work); + return 0; + } + return 1; } void MGSeqPauseEnableCtrl(s32 flag) { - + if(!_CheckFlag(0x10008)) { + omSysPauseEnable(flag); + } } static void SeqPlayStartFX(void) From 756e57544253911fe9ab6ec6f56471e52f14b2a4 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Mon, 5 Feb 2024 15:01:04 -0800 Subject: [PATCH 008/106] Matched board/com_path --- configure.py | 2 +- include/game/board/com_path.h | 11 + src/game/board/com_path.c | 545 ++++++++++++++++++++++++++++++++++ 3 files changed, 557 insertions(+), 1 deletion(-) create mode 100755 include/game/board/com_path.h create mode 100755 src/game/board/com_path.c diff --git a/configure.py b/configure.py index 05ee7986..09648156 100644 --- a/configure.py +++ b/configure.py @@ -387,7 +387,7 @@ config.libs = [ Object(NonMatching, "game/board/start.c"), Object(NonMatching, "game/board/last5.c"), Object(NonMatching, "game/board/pause.c"), - Object(NonMatching, "game/board/com_path.c"), + Object(Matching, "game/board/com_path.c"), Object(NonMatching, "game/board/tutorial.c"), Object(NonMatching, "game/kerent.c"), ], diff --git a/include/game/board/com_path.h b/include/game/board/com_path.h new file mode 100755 index 00000000..2fa6e313 --- /dev/null +++ b/include/game/board/com_path.h @@ -0,0 +1,11 @@ +#ifndef _BOARD_COM_PATH_H +#define _BOARD_COM_PATH_H + +#include "dolphin/types.h" + +s16 BoardComPathReachCheck(s16 arg0, u32 arg1, s32 arg2); +s16 BoardComPathBestGet(s16 arg0); +s16 BoardComPathLenGet(s16 arg0, s16 arg1); +s16 BoardComPathW20BestGet(s16 arg0, u32 arg1, s16 arg2); + +#endif diff --git a/src/game/board/com_path.c b/src/game/board/com_path.c new file mode 100755 index 00000000..c6b480a1 --- /dev/null +++ b/src/game/board/com_path.c @@ -0,0 +1,545 @@ +#include "game/board/com_path.h" +#include "game/board/space.h" + +#define NODE_INDEX(x) ((x) ? ((x) - pathNodeData) : -1) + +typedef struct { + /* 0x00 */ struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 1; + s8 unk00_field2 : 1; + s8 unk00_field3 : 1; + u8 unk00_field4 : 1; + u8 unk00_field5 : 1; + }; + /* 0x01 */ s8 unk01; + /* 0x02 */ s8 unk02; + /* 0x03 */ s8 unk03; + /* 0x04 */ s16 unk04; + /* 0x06 */ s16 unk06[2]; // array size unknown + /* 0x0A */ char unk0A[0x3C]; + /* 0x46 */ s16 unk46[5]; +} PathNode; // Size 0x50 + +static PathNode *SearchPathNodeSpace(s16 arg0); +static s16 InitPathNode(PathNode *arg0); +static PathNode *FindChildNode(s16 arg0, PathNode *arg1); +static s32 GetNumValidLinks(BoardSpace *arg0, PathNode *arg1); +static void AddValidLinks(BoardSpace *arg0, PathNode *arg1); +static BOOL CheckPathSpace(BoardSpace *arg0); +static s16 FindValidLink(BoardSpace *arg0); +static BOOL CheckEndSpace(BoardSpace *arg0, PathNode *arg1); +static BOOL CheckPath(PathNode *arg0); +static BOOL CheckW20Path(PathNode *arg0, u32 arg1); + +static PathNode pathNodeData[16]; +static PathNode *candidateNodes[16]; +static s16 startPathSpaceSearch[16]; +static s16 startPathSpace[16]; + +static s16 numCandidates; +static s16 childNodeCnt; + +static PathNode *SearchPathNodeSpace(s16 arg0) { + PathNode *var_r31; + s32 i; + + for (var_r31 = pathNodeData, i = 0; i < 16; i++, var_r31++) { + if (var_r31->unk04 == arg0) { + break; + } + } + if (i == 16) { + var_r31 = NULL; + } + return var_r31; +} + +static s16 InitPathNode(PathNode *arg0) { + BoardSpace *temp_r30; + PathNode *var_r23; + s32 var_r29; + s16 i; + s16 var_r27; + s16 var_r26; + s16 var_r25; + s16 var_r24; + + var_r24 = arg0->unk04; + var_r29 = 0; + arg0->unk02 = var_r25 = 0; + do { + var_r27 = var_r24; + temp_r30 = BoardSpaceGet(0, var_r27); + arg0->unk06[arg0->unk02] = var_r27; + var_r23 = FindChildNode(var_r27, arg0); + if (var_r23) { + AddValidLinks(temp_r30, arg0); + arg0->unk01 = 1; + arg0->unk46[0] = var_r27; + for (i = 1; i < 5; i++) { + arg0->unk46[i] = 0; + } + return 0; + } + if (temp_r30->link_cnt == 0) { + var_r26 = 0; + var_r29 = 1; + } else { + var_r26 = GetNumValidLinks(temp_r30, arg0); + if (var_r26 == 1) { + var_r24 = FindValidLink(temp_r30); + } else { + var_r29 = 1; + } + } + if (CheckEndSpace(temp_r30, arg0)) { + var_r25++; + if (var_r25 >= arg0->unk03) { + var_r26 = 0; + var_r29 = 1; + } + } + arg0->unk02++; + } while (var_r29 == 0); + AddValidLinks(temp_r30, arg0); + arg0->unk01 = var_r26; + return arg0->unk03 - var_r25; +} + +static PathNode *FindChildNode(s16 arg0, PathNode *arg1) { + PathNode *temp_r31; + s32 var_r28; + s32 i; + s32 j; + + var_r28 = NODE_INDEX(arg1); + if (var_r28 == -1) { + return NULL; + } + for (i = 0; i < childNodeCnt; i++) { + temp_r31 = &pathNodeData[i]; + if (temp_r31 != arg1) { + for (j = 0; j < temp_r31->unk02; j++) { + if (arg0 == temp_r31->unk06[j]) { + return temp_r31; + } + } + } + } + return NULL; +} + +static s32 GetNumValidLinks(BoardSpace *arg0, PathNode *arg1) { + BoardSpace *var_r28; + s16 i; + s16 var_r29; + + for (var_r29 = i = 0; i < arg0->link_cnt; i++) { + var_r28 = BoardSpaceGet(0, arg0->link[i]); + if (!CheckPathSpace(var_r28)) { + var_r29++; + } + } + if (var_r29 >= arg0->link_cnt) { + return 0; + } + return arg0->link_cnt - var_r29; +} + +static void AddValidLinks(BoardSpace *arg0, PathNode *arg1) { + BoardSpace *var_r27; + s16 var_r30; + s16 var_r31; + + for (var_r31 = var_r30 = 0; var_r30 < arg0->link_cnt; var_r30++) { + var_r27 = BoardSpaceGet(0, arg0->link[var_r30]); + if (CheckPathSpace(var_r27)) { + arg1->unk46[var_r31] = arg0->link[var_r30]; + var_r31++; + } + } + for (; var_r31 < 5; var_r31++) { + arg1->unk46[var_r31] = 0; + } +} + +static BOOL CheckPathSpace(BoardSpace *arg0) { + if ((arg0->flag & 0x02000000) || (arg0->flag & 0x04000000)) { + return FALSE; + } else { + return TRUE; + } +} + +static s16 FindValidLink(BoardSpace *arg0) { + s16 var_r29; + s16 i; + BoardSpace *temp_r30; + + for (var_r29 = i = 0; i < arg0->link_cnt; i++) { + var_r29 = arg0->link[i]; + temp_r30 = BoardSpaceGet(0, var_r29); + if (CheckPathSpace(temp_r30)) { + break; + } + } + return var_r29; +} + +static BOOL CheckEndSpace(BoardSpace *arg0, PathNode *arg1) { + if (arg0->flag & 0x80000000) { + } + if (arg0->flag & 0x4000000) { + } + if (arg0->flag & 0x2000000) { + } + if (arg0->flag & 0x180000) { + arg1->unk00_field3 = 1; + } + if (arg0->flag & 0x48000000) { + arg1->unk00_field4 = 1; + } + if (arg0->flag & 0x20000000) { + arg1->unk00_field2 = 1; + } + if (arg0->flag & 0x10000000) { + arg1->unk00_field5 = 1; + } + switch (arg0->type) { + case 8: + arg1->unk00_field1 = 1; + return FALSE; + case 10: + return FALSE; + case 0: + return FALSE; + } + return TRUE; +} + +static inline void ComPathInlineFunc02(PathNode *arg0) { + if (numCandidates < 16) { + candidateNodes[numCandidates] = arg0; + numCandidates++; + } +} + +static inline PathNode *ComPathInlineFunc03(void) { + PathNode *ret; + + numCandidates--; + if (numCandidates < 0) { + return NULL; + } else { + ret = candidateNodes[numCandidates]; + candidateNodes[numCandidates] = NULL; + return ret; + } +} + +static inline PathNode *ComPathInlineFunc04(s16 arg0, s16 arg1) { + PathNode *var_r26; + s32 i; + + var_r26 = pathNodeData; + for (i = 0; i < 16; i++, var_r26++) { + if (var_r26->unk00_field0 == 0) { + break; + } + } + if (i == 16) { + return NULL; + } else { + var_r26->unk00_field0 = 1; + var_r26->unk04 = arg0; + var_r26->unk03 = arg1; + childNodeCnt++; + return var_r26; + } +} + +static inline void ComPathInlineFunc05(s16 arg0, s16 arg1) { + PathNode *var_r28; + s32 var_r24; + s32 temp_r17; + s32 i; + PathNode *var_r23; + + memset(pathNodeData, 0, sizeof(pathNodeData)); + memset(candidateNodes, 0, sizeof(candidateNodes)); + numCandidates = 0; + childNodeCnt = 0; + var_r23 = ComPathInlineFunc04(arg0, arg1); + ComPathInlineFunc02(var_r23); + var_r24 = 1; + temp_r17 = arg1; + while (1) { + if (var_r24 <= 0) { + break; + } + var_r28 = ComPathInlineFunc03(); + if (!var_r28) { + break; + } + var_r24--; + temp_r17 = InitPathNode(var_r28); + if (temp_r17 != 0) { + if (var_r28->unk01 <= 1) { + break; + } + for (i = 0; i < var_r28->unk01; var_r24++, i++) { + var_r23 = ComPathInlineFunc04(var_r28->unk46[i], temp_r17); + if (!var_r23) { + break; + } + ComPathInlineFunc02(var_r23); + } + } + } +} + +s16 BoardComPathReachCheck(s16 arg0, u32 arg1, s32 arg2) { + s16 sp80[10]; + s16 sp6C[10]; + PathNode *sp68; + PathNode *var_r29; + s16 sp1C; + s16 sp1A; + s16 temp_r20; + s16 var_r22; + s16 var_r28; + s16 i; + s32 var_r19; + + if (_CheckFlag(0x1000B)) { + return 0; + } + ComPathInlineFunc05(arg0, 0x1E); + memset(startPathSpaceSearch, 0, sizeof(startPathSpaceSearch)); + memset(sp80, 0, sizeof(sp80)); + memset(candidateNodes, 0, sizeof(candidateNodes)); + numCandidates = 0; + var_r29 = SearchPathNodeSpace(arg0); + sp1A = NODE_INDEX(var_r29); + ComPathInlineFunc02(var_r29); + var_r28 = 0; + var_r22 = 0; + startPathSpaceSearch[sp1A] = var_r28; + var_r19 = 0; + while (1) { + var_r29 = ComPathInlineFunc03(); + sp1C = NODE_INDEX(var_r29); + if (sp1C == -1) { + if (var_r22 != 0) { + break; + } + } else { + var_r19 = 0; + var_r28 = startPathSpaceSearch[sp1C]; + for (i = 0; i < var_r29->unk02; i++) { + if (arg2 == 0 && (BoardSpaceFlagGet(0, var_r29->unk06[i]) & 0x20000000)) { + break; + } + if (arg1 == BoardSpaceTypeGet(0, var_r29->unk06[i])) { + sp80[var_r22] = var_r28; + sp6C[var_r22] = sp1C; + if (++var_r22 < 0xA) { + var_r19 = 1; + break; + } else { + goto return_r28; + } + } + if (var_r28++ >= 0x1E) { + var_r19 = 1; + break; + } + } + if (var_r19 == 0) { + for (i = 0; i < var_r29->unk01; i++) { + sp68 = SearchPathNodeSpace(var_r29->unk46[i]); + temp_r20 = NODE_INDEX(sp68); + if (temp_r20 != -1 && temp_r20 >= 0 && temp_r20 < 16) { + startPathSpaceSearch[temp_r20] = var_r28; + ComPathInlineFunc02(sp68); + } + } + } + continue; + } + return 0; + } +return_r28: + var_r28 = 10000; + for (i = 0; i < 10; i++) { + if (var_r28 > sp80[i] && sp80[i] != 0) { + var_r28 = sp80[i]; + } + } + return var_r28; +} + +s16 BoardComPathBestGet(s16 arg0) { + PathNode *sp30; + PathNode *sp2C; + s32 i; + + ComPathInlineFunc05(arg0, 0x1E); + sp2C = SearchPathNodeSpace(arg0); + if (sp2C->unk00_field1 != 0) { + return -1; + } + if (sp2C->unk01 <= 1) { + return -1; + } + for (i = 0; i < sp2C->unk01; i++) { + sp30 = SearchPathNodeSpace(sp2C->unk46[i]); + if (sp30 && CheckPath(sp30)) { + return sp2C->unk46[i]; + } + } + return -1; +} + +s16 BoardComPathLenGet(s16 arg0, s16 arg1) { + PathNode *var_r30; + s16 temp_r21; + s16 var_r25; + s16 sp16; + s16 sp14; + s16 sp12; + s16 i; + s32 sp5C; + PathNode *sp58; + + ComPathInlineFunc05(arg0, 0x1E); + memset(startPathSpace, 0, sizeof(startPathSpace)); + memset(candidateNodes, 0, sizeof(candidateNodes)); + numCandidates = 0; + var_r30 = SearchPathNodeSpace(arg0); + sp12 = NODE_INDEX(var_r30); + ComPathInlineFunc02(var_r30); + var_r25 = 0; + sp16 = 0; + startPathSpace[sp12] = var_r25; + sp5C = 0; + while (1) { + var_r30 = ComPathInlineFunc03(); + sp14 = NODE_INDEX(var_r30); + if (sp14 == -1) { + if (sp16 != 0) { + break; + } + } else { + sp5C = 0; + var_r25 = startPathSpace[sp14]; + for (i = 0; i < var_r30->unk02; i++) { + if (BoardSpaceFlagGet(0, var_r30->unk06[i]) & 0x20000000) { + break; + } + if (var_r30->unk06[i] == arg1) { + goto return_r25; + } + if (var_r25++ >= 0x1E) { + sp5C = 1; + break; + } + } + if (sp5C == 0) { + for (i = 0; i < var_r30->unk01; i++) { + sp58 = SearchPathNodeSpace(var_r30->unk46[i]); + temp_r21 = NODE_INDEX(sp58); + if (temp_r21 != -1 && temp_r21 >= 0 && temp_r21 < 16) { + startPathSpace[temp_r21] = var_r25; + ComPathInlineFunc02(sp58); + } + } + } + continue; + } + return 0; + } +return_r25: + return var_r25; +} + +static BOOL CheckPath(PathNode *arg0) { + s32 i; + PathNode *sp1C; + + if (arg0->unk00_field1 != 0) { + return TRUE; + } + if (arg0->unk01 <= 1) { + return FALSE; + } + for (i = 0; i < arg0->unk01; i++) { + sp1C = SearchPathNodeSpace(arg0->unk46[i]); + if (sp1C && CheckPath(sp1C)) { + return TRUE; + } + } + return FALSE; +} + +s16 BoardComPathW20BestGet(s16 arg0, u32 arg1, s16 arg2) { + PathNode *var_r31; + PathNode *sp38; + s32 i; + + ComPathInlineFunc05(arg0, arg2); + var_r31 = SearchPathNodeSpace(arg0); + if (arg1 & 0x180000) { + if (var_r31->unk00_field1 != 0) { + return -1; + } + } else if (arg1 & 0x08000000) { + if (var_r31->unk00_field4 != 0) { + return -1; + } + } else if (arg1 & 0x10000000) { + if (var_r31->unk00_field5 != 0) { + return -1; + } + } + if (var_r31->unk01 <= 1) { + return -1; + } + for (i = 0; i < var_r31->unk01; i++) { + sp38 = SearchPathNodeSpace(var_r31->unk46[i]); + if (sp38 && CheckW20Path(sp38, arg1)) { + return var_r31->unk46[i]; + } + } + return -1; +} + +static BOOL CheckW20Path(PathNode *arg0, u32 arg1) { + s32 i; + PathNode *sp1C; + + if (arg1 & 0x180000) { + if (arg0->unk00_field1 != 0) { + return TRUE; + } + } else if (arg1 & 0x08000000) { + if (arg0->unk00_field4 != 0) { + return TRUE; + } + } else if (arg1 & 0x10000000) { + if (arg0->unk00_field5 != 0) { + return TRUE; + } + } + if (arg0->unk01 <= 1) { + return FALSE; + } + for (i = 0; i < arg0->unk01; i++) { + sp1C = SearchPathNodeSpace(arg0->unk46[i]); + if (sp1C && CheckW20Path(sp1C, arg1)) { + return TRUE; + } + } + return FALSE; +} From 0b15daba5a7faa22b19e8f346c1e84c8ff50a164 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Tue, 6 Feb 2024 01:20:55 -0800 Subject: [PATCH 009/106] Matched board/audio and board/com --- configure.py | 4 +- include/game/board/audio.h | 19 ++ include/game/board/com.h | 18 + include/game/msm.h | 18 +- src/game/audio.c | 2 +- src/game/board/audio.c | 158 +++++++++ src/game/board/com.c | 678 +++++++++++++++++++++++++++++++++++++ src/game/board/item.c | 4 +- src/game/board/player.c | 3 +- 9 files changed, 897 insertions(+), 7 deletions(-) create mode 100755 include/game/board/audio.h create mode 100755 include/game/board/com.h create mode 100755 src/game/board/audio.c create mode 100755 src/game/board/com.c diff --git a/configure.py b/configure.py index 09648156..79d4f1f9 100644 --- a/configure.py +++ b/configure.py @@ -363,8 +363,8 @@ config.libs = [ Object(NonMatching, "game/board/player.c"), Object(Matching, "game/board/model.c"), Object(Matching, "game/board/window.c"), - Object(NonMatching, "game/board/audio.c"), - Object(NonMatching, "game/board/com.c"), + Object(Matching, "game/board/audio.c"), + Object(Matching, "game/board/com.c"), Object(NonMatching, "game/board/view.c"), Object(NonMatching, "game/board/space.c"), Object(NonMatching, "game/board/shop.c"), diff --git a/include/game/board/audio.h b/include/game/board/audio.h new file mode 100755 index 00000000..a3b617b9 --- /dev/null +++ b/include/game/board/audio.h @@ -0,0 +1,19 @@ +#ifndef _BOARD_AUDIO_H +#define _BOARD_AUDIO_H + +#include "dolphin/types.h" + +void BoardMusStartBoard(void); +void BoardMusStart(s32 arg0, s32 arg1, s8 arg2, u16 arg3); +void BoardAudSeqFadeOutFast(s32 arg0); +void BoardAudSeqFadeOut(s32 arg0, u16 arg1); +void BoardMusLoudSet(s32 arg0, s32 arg1); +void BoardMusVolPanSet(s32 arg0, s8 arg1, u16 arg2); +void BoardAudSeqPause(s32 arg0, s32 arg1, u16 arg2); +s32 BoardMusStatusGet(s32 arg0); +void BoardAudSeqClear(void); +void BoardAudSeqFadeOutAll(void); +void BoardAudFXPlay(void); +void BoardAudFXStop(void); + +#endif diff --git a/include/game/board/com.h b/include/game/board/com.h new file mode 100755 index 00000000..1d6a605b --- /dev/null +++ b/include/game/board/com.h @@ -0,0 +1,18 @@ +#ifndef _BOARD_COM_H +#define _BOARD_COM_H + +#include "dolphin.h" + +void BoardComKeySetLeft(void); +void BoardComKeySetRight(void); +void BoardComKeySetUp(void); +void BoardComKeySetDown(void); +s8 BoardComPreferItemGet(s32 arg0, s8 *arg1, s8 arg2); +s8 BoardComPreferItemCheck(s32 arg0, s8 arg1, s8 arg2, s8 arg3); +s32 BoardComItemWeightGet(s32 arg0, s32 arg1); +s32 BoardComUseItemSet(s32 arg0, s32 arg1); +BOOL BoardComUseItemCheck(s32 arg0); +s32 BoardComJunctionInputGet(s32 arg0, Vec *arg1, s32 arg2, float *arg3); +s32 BoardComBestPlayerFind(void); + +#endif diff --git a/include/game/msm.h b/include/game/msm.h index 07df3881..75f35f19 100644 --- a/include/game/msm.h +++ b/include/game/msm.h @@ -35,6 +35,21 @@ typedef struct { /* 0x0C */ float backSurDis; } UnkMsmStruct_02; // Size (min: 0x10, max: 0x1C) +typedef struct { + /* 0x00 */ s32 unk00; + /* 0x04 */ s8 unk04; + /* 0x05 */ s8 unk05; + /* 0x06 */ u16 unk06; +} UnkMsmStruct_03; // Size unknown (min: 8, max: 0x10) + +typedef struct { + /* 0x00 */ s32 unk00; + /* 0x04 */ char unk04[1]; + /* 0x05 */ s8 unk05; + /* 0x06 */ u16 unk06; + /* 0x08 */ char unk08[1]; +} UnkMsmStruct_04; // Size unknown (min: 9, max: 0x18) + void msmSysRegularProc(void); void msmSysSetOutputMode(s32 arg0); void msmSysSetAux(s32 arg0, s32 arg1); @@ -49,9 +64,10 @@ s32 msmMusGetNumPlay(s32 arg0); s32 msmMusGetStatus(s32 arg0); void msmMusPauseAll(s32 arg0, s32 arg1); void msmMusPause(s32 arg0, s32 arg1, s32 arg2); +void msmMusSetParam(s16 arg0, UnkMsmStruct_04 *arg1); void msmMusStopAll(s32 arg0, s32 arg1); void msmMusStop(s32 arg0, s32 arg1); -s32 msmMusPlay(s32 arg0, s32 arg1); +s32 msmMusPlay(s32 arg0, UnkMsmStruct_03 *arg1); void msmSeDelListener(void); void msmSeUpdataListener(s32 arg0, s32 arg1); void msmSeSetListener(Vec* arg0, Vec* arg1, float arg2, float arg3, UnkMsmStruct_02 *arg4); diff --git a/src/game/audio.c b/src/game/audio.c index 238122eb..ca9ddb0a 100644 --- a/src/game/audio.c +++ b/src/game/audio.c @@ -261,7 +261,7 @@ s32 HuAudSeqPlay(s16 arg0) { if (musicOffF != 0 || omSysExitReq != 0) { return 0; } - temp_r31 = msmMusPlay(arg0, 0); + temp_r31 = msmMusPlay(arg0, NULL); return temp_r31; } diff --git a/src/game/board/audio.c b/src/game/board/audio.c new file mode 100755 index 00000000..ffe31714 --- /dev/null +++ b/src/game/board/audio.c @@ -0,0 +1,158 @@ +#include "game/board/audio.h" +#include "game/audio.h" +#include "game/gamework_data.h" +#include "game/msm.h" + +static s16 boardSeq[2][2]; + +static s32 boardFX = -1; + +static s16 boardMusTbl[] = { + 0x000D, 0x0011, 0x0015, + 0x001C, 0x0021, 0x0025, + 0x0028, 0x0029, 0x002A +}; + +void BoardMusStartBoard(void) { + s16 temp_r31 = boardMusTbl[GWBoardGet()]; + + BoardMusStart(0, temp_r31, 0x7F, 0); + BoardAudFXPlay(); +} + +void BoardMusStart(s32 arg0, s32 arg1, s8 arg2, u16 arg3) { + s16 *temp_r31 = boardSeq[arg0]; + UnkMsmStruct_03 sp8; + + if (arg1 == temp_r31[1]) { + return; + } + if (temp_r31[0] != -1) { + BoardAudSeqFadeOutFast(temp_r31[0]); + } + sp8.unk00 = 1; + if (arg3 != 0) { + sp8.unk00 |= 8; + } + if (arg2 < 0) { + sp8.unk00 |= 2; + arg2 = 0x7F; + } + sp8.unk06 = arg3; + sp8.unk05 = arg2; + sp8.unk04 = arg0; + temp_r31[0] = msmMusPlay(arg1, &sp8); + temp_r31[1] = arg1; +} + +void BoardAudSeqFadeOutFast(s32 arg0) { + BoardAudSeqFadeOut(arg0, 0x64); +} + +void BoardAudSeqFadeOut(s32 arg0, u16 arg1) { + s16 *temp_r31 = boardSeq[arg0]; + + if (temp_r31[0] == -1) { + return; + } + HuAudSeqFadeOut(temp_r31[0], arg1); + temp_r31[1] = temp_r31[0] = -1; +} + +void BoardMusLoudSet(s32 arg0, s32 arg1) { + if (arg1 != 0) { + BoardMusVolPanSet(arg0, 0x60, 0x1F4); + } else { + BoardMusVolPanSet(arg0, 0x7F, 0x1F4); + } +} + +void BoardMusVolPanSet(s32 arg0, s8 arg1, u16 arg2) { + s16 *temp_r31 = boardSeq[arg0]; + UnkMsmStruct_04 sp10; + + if (temp_r31[0] == -1) { + return; + } + sp10.unk00 = 1; + sp10.unk00 |= 2; + if (arg1 < 0) { + arg1 = 0x7F; + } + sp10.unk06 = arg2; + sp10.unk05 = arg1; + msmMusSetParam(temp_r31[0], &sp10); +} + +void BoardAudSeqPause(s32 arg0, s32 arg1, u16 arg2) { + s16 *temp_r31 = boardSeq[arg0]; + + if (temp_r31[0] == -1) { + return; + } + if (arg1 != 0) { + if (BoardMusStatusGet(arg0) == 3) { + return; + } + } else if (BoardMusStatusGet(arg0) != 3) { + return; + } + HuAudSeqPause(temp_r31[0], arg1, arg2); +} + +s32 BoardMusStatusGet(s32 arg0) { + s16 *temp_r31 = boardSeq[arg0]; + + if (temp_r31[0] == -1) { + return 0; + } + return msmMusGetStatus(temp_r31[0]); +} + +void BoardAudSeqClear(void) { + s32 i; + + for (i = 0; i < 2; i++) { + boardSeq[i][0] = boardSeq[i][1] = -1; + } + boardFX = -1; +} + +void BoardAudSeqFadeOutAll(void) { + s16 *temp_r31; + s32 i; + + for (i = 0; i < 2; i++) { + temp_r31 = boardSeq[i]; + if (temp_r31[0] != -1) { + HuAudSeqFadeOut(temp_r31[0], 0x64); + temp_r31[1] = temp_r31[0] = -1; + } + } + BoardAudFXStop(); +} + +void BoardAudFXPlay(void) { + s32 var_r31; + + switch (GWBoardGet()) { + case 4: + var_r31 = 0x48D; + break; + case 5: + var_r31 = 0x4A2; + break; + default: + return; + } + if (boardFX == -1) { + boardFX = HuAudFXPlay(var_r31); + } +} + +void BoardAudFXStop(void) { + if (boardFX != -1) { + HuAudFXStop(boardFX); + boardFX = -1; + } +} diff --git a/src/game/board/com.c b/src/game/board/com.c new file mode 100755 index 00000000..71bc7baa --- /dev/null +++ b/src/game/board/com.c @@ -0,0 +1,678 @@ +#include "game/board/com.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/board/com_path.h" +#include "game/board/main.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/window.h" + +#include "math.h" + +s32 BoardBooComUseCheck(s32); + +static void ExecComKeyLeft(void); +static void ExecComKeyRight(void); +static void ExecComKeyUp(void); +static void ExecComKeyDown(void); +static void ExecComKey(s32 arg0, s32 arg1, s32 arg2); +static s32 ChooseUseItem(s32 arg0); +static BOOL CheckMiniUse(s32 arg0, s32 arg1); +static BOOL CheckMegaUse(s32 arg0, s32 arg1); +static BOOL CheckSparkUse(s32 arg0, s32 arg1); +static BOOL CheckBoardChangeUse(s32 arg0, s32 arg1); +static BOOL CheckSwapUse(s32 arg0, s32 arg1); +static BOOL CheckBooUse(s32 arg0, s32 arg1); +static BOOL CheckLampUse(s32 arg0, s32 arg1); + +extern s8 boardTutorialUseItem; + +static s8 itemUse = -1; + +static s8 comItemWeightTbl[8][12] = { + { 0x0C, 0x0B, 0x05, 0x03, 0x01, 0x02, 0x06, 0x04, 0x00, 0x07, 0x09, 0x0A }, + { 0x0C, 0x0B, 0x05, 0x0A, 0x03, 0x01, 0x02, 0x00, 0x06, 0x04, 0x07, 0x09 }, + { 0x0C, 0x0B, 0x05, 0x06, 0x03, 0x01, 0x02, 0x0A, 0x07, 0x09, 0x00, 0x04 }, + { 0x0C, 0x05, 0x0B, 0x09, 0x03, 0x01, 0x02, 0x06, 0x00, 0x04, 0x0A, 0x07 }, + { 0x0C, 0x0B, 0x04, 0x09, 0x0A, 0x03, 0x01, 0x05, 0x02, 0x06, 0x00, 0x07 }, + { 0x0C, 0x0B, 0x05, 0x03, 0x01, 0x0A, 0x06, 0x02, 0x00, 0x04, 0x09, 0x07 }, + { 0x0C, 0x05, 0x0B, 0x04, 0x07, 0x09, 0x03, 0x01, 0x0A, 0x06, 0x02, 0x00 }, + { 0x0C, 0x05, 0x07, 0x0B, 0x0A, 0x09, 0x04, 0x06, 0x03, 0x01, 0x02, 0x00 } +}; + +static BOOL (*comItemUseCheckFuncTbl[])(s32, s32) = { + CheckMiniUse, + CheckMegaUse, + CheckMiniUse, + CheckMegaUse, + CheckBoardChangeUse, + CheckBoardChangeUse, + CheckSwapUse, + CheckSparkUse, + NULL, + CheckBoardChangeUse, + NULL, + CheckBooUse, + CheckLampUse, + NULL +}; + +static Vec comJunctionDirTbl[] = { + { 0.0f, 0.0f, -72.0f }, + { 90.0f, 72.0f, 0.0f }, + { 180.0f, 0.0f, 72.0f }, + { 270.0f, -72.0f, 0.0f } +}; + +static void ExecComKeyLeft(void) { + ExecComKey(GWSystem.player_curr, 0, 1); +} + +void BoardComKeySetLeft(void) { + BoardWinComKeyFuncSet(ExecComKeyLeft); +} + +static void ExecComKeyRight(void) { + ExecComKey(GWSystem.player_curr, 1, 1); +} + +void BoardComKeySetRight(void) { + BoardWinComKeyFuncSet(ExecComKeyRight); +} + +static void ExecComKeyUp(void) { + ExecComKey(GWSystem.player_curr, 0, 0); +} + +void BoardComKeySetUp(void) { + BoardWinComKeyFuncSet(ExecComKeyUp); +} + +static void ExecComKeyDown(void) { + ExecComKey(GWSystem.player_curr, 1, 0); +} + +void BoardComKeySetDown(void) { + BoardWinComKeyFuncSet(ExecComKeyDown); +} + +static void ExecComKey(s32 arg0, s32 arg1, s32 arg2) { + s32 sp14[4]; + s32 temp_r31; + s16 temp_r30; + s32 var_r29; + + sp14[0] = sp14[1] = sp14[2] = sp14[3] = 0; + temp_r31 = GWPlayer[arg0].port; + temp_r30 = GWMessDelayGet(); + if (arg2 == 0) { + var_r29 = 4; + } else { + var_r29 = 2; + } + if (arg1 == 1) { + sp14[temp_r31] = var_r29; + HuWinComKeyWait(sp14[0], sp14[1], sp14[2], sp14[3], temp_r30); + } + sp14[temp_r31] = 0x100; + HuWinComKeyWait(sp14[0], sp14[1], sp14[2], sp14[3], temp_r30); +} + +s8 BoardComPreferItemGet(s32 arg0, s8 *arg1, s8 arg2) { + s32 temp_r26; + s32 var_r28; + s32 temp_r29; + s32 var_r27; + s32 i; + s32 j; + + temp_r26 = GWPlayer[arg0].character; + var_r27 = -1; + var_r28 = 0x64; + for (i = 0; i < arg2; i++) { + temp_r29 = arg1[i]; + for (j = 0; j < 0xC; j++) { + if (temp_r29 == comItemWeightTbl[temp_r26][j]) { + if (j < var_r28 && (BoardPlayerItemFind(arg0, temp_r29) == -1 || temp_r29 == 0xC || temp_r29 == 0xB)) { + var_r28 = j; + var_r27 = i; + } + break; + } + } + } + if (var_r28 == 0x64) { + return -1; + } + return var_r27; +} + +s8 BoardComPreferItemCheck(s32 arg0, s8 arg1, s8 arg2, s8 arg3) { + s8 spB[3]; + s8 temp_r25; + + spB[0] = arg1; + spB[1] = arg2; + spB[2] = arg3; + temp_r25 = BoardComPreferItemGet(arg0, spB, 3); + return temp_r25; +} + +s32 BoardComItemWeightGet(s32 arg0, s32 arg1) { + s32 var_r30; + s32 i; + + for (i = 0; i < 0xC; i++) { + if (arg1 == comItemWeightTbl[GWPlayer[arg0].character][i]) { + break; + } + } + var_r30 = 0xB - i; + return var_r30; +} + +s32 BoardComTutorialItemGet(s32 arg0) { + s32 var_r30; + s32 var_r31; + + if (!GWPlayer[arg0].com) { + return -1; + } + if (itemUse != -1) { + var_r31 = itemUse; + } + if (boardTutorialUseItem >= 0 && boardTutorialUseItem <= 0xD) { + var_r31 = boardTutorialUseItem; + boardTutorialUseItem = -1; + } + if (var_r31 != -1) { + var_r30 = BoardPlayerItemFind(arg0, var_r31); + } else { + var_r30 = -1; + } + return var_r30; +} + +s32 BoardComUseItemSet(s32 arg0, s32 arg1) { + if (arg1 == -1) { + itemUse = -1; + return 1; + } + if (BoardPlayerItemFind(arg0, arg1) != -1) { + itemUse = arg1; + return 1; + } + return 0; +} + +BOOL BoardComUseItemCheck(s32 arg0) { + s32 var_r31; + + var_r31 = BoardPlayerItemCount(arg0); + if (var_r31 <= 0) { + return FALSE; + } + if (ChooseUseItem(arg0) != -1) { + return TRUE; + } + return FALSE; +} + +static s32 ChooseUseItem(s32 arg0) { + s32 i; + s32 j; + s32 temp_r29; + s32 var_r28; + s32 temp_r27; + s32 temp_r25; + BOOL (*temp_r24)(s32, s32); + s8 temp_r23; + + temp_r29 = -1; + temp_r25 = GWPlayer[arg0].character; + var_r28 = 0x64; + for (i = 0; i < 3; i++) { + temp_r27 = GWPlayer[arg0].items[i]; + if (temp_r27 == -1) { + continue; + } + temp_r24 = comItemUseCheckFuncTbl[temp_r27]; + if (!temp_r24) { + continue; + } + temp_r23 = temp_r24(arg0, temp_r27); + if (temp_r23) { + for (j = 0; j < 0xC; j++) { + if (temp_r27 == comItemWeightTbl[temp_r25][j]) { + if (j < var_r28) { + var_r28 = j; + } + break; + } + } + } + } + if (var_r28 == 0x64) { + return -1; + } + temp_r29 = comItemWeightTbl[temp_r25][var_r28]; + if (temp_r29 == -1) { + itemUse = -1; + } else if (BoardPlayerItemFind(arg0, temp_r29) != -1) { + itemUse = temp_r29; + } + return temp_r29; +} + +static BOOL CheckMiniUse(s32 arg0, s32 arg1) { + s32 temp_r29; + s32 var_r26; + s32 var_r25; + s32 temp_r28; + s32 temp_r23; + s32 var_r24; + s32 var_r31; + s32 var_r30; + + var_r24 = 0; + temp_r29 = GWPlayer[arg0].space_curr; + temp_r28 = GWPlayer[arg0].diff; + temp_r23 = GWPlayer[arg0].character; + switch (temp_r28) { + case 0: + var_r30 = 0x32; + break; + case 1: + var_r30 = 0x19; + break; + case 2: + var_r30 = 5; + break; + case 3: + var_r30 = 0; + break; + } + if ((temp_r28 == 0 || temp_r28 == 1) && temp_r23 == 1) { + var_r30 = 7; + } + if (GWBoardGet() != 7 && GWBoardGet() != 8) { + var_r26 = BoardComPathReachCheck(temp_r29, 8, 0); + var_r25 = BoardComPathReachCheck(temp_r29, 8, 1); + } else { + var_r26 = 0x3E7; + var_r25 = BoardComPathW20BestGet(temp_r29, 0x10000000, 0xA); + if ((GWBoardGet() == 8 || GWBoardGet() == 7) && BoardRandMod(0x64) < 0x3C) { + var_r24 = 1; + } + } + switch (GWPlayer[arg0].diff) { + case 0: + var_r31 = 5; + break; + case 1: + var_r31 = 7; + break; + case 2: + var_r31 = 9; + break; + case 3: + var_r31 = 0xA; + break; + } + if ((var_r25 < var_r31 || var_r26 < var_r31 || var_r24 != 0) && BoardRandMod(0x64) >= var_r30) { + return TRUE; + } + return FALSE; +} + +static BOOL CheckMegaUse(s32 arg0, s32 arg1) { + s32 temp_r27; + s32 temp_r26; + s32 temp_r24; + s32 temp_r29; + s16 temp_r25; + s16 var_r28; + s16 temp_r23; + s16 temp_r22; + s16 i; + + temp_r29 = GWPlayer[arg0].diff; + temp_r26 = GWPlayer[arg0].character; + switch (temp_r29) { + case 0: + var_r28 = 5; + break; + case 1: + var_r28 = 7; + break; + case 2: + var_r28 = 9; + break; + case 3: + var_r28 = 0xA; + break; + } + if (((temp_r29 == 0 || temp_r29 == 1) && temp_r26 == 0) || ((temp_r29 == 0 || temp_r29 == 1) && temp_r26 == 5)) { + var_r28 = 8; + } + if (GWBoardGet() != 7 || BoardRandMod(0x64) >= 0x3C) { + temp_r24 = GWPlayer[arg0].space_curr; + temp_r27 = BoardComPathReachCheck(temp_r24, 8, 0); + temp_r23 = GWPlayer[arg0].space_curr; + for (i = 0; i < 4; i++) { + if (i != arg0) { + temp_r22 = GWPlayer[i].space_curr; + temp_r25 = BoardComPathLenGet(temp_r23, temp_r22); + if (temp_r25 < var_r28 + 0x14 && temp_r25 > 0 && GWTeamGet() && i == BoardPlayerSameTeamFind(arg0)) { + return FALSE; + } + } + } + if (GWBoardGet() != 7 && GWBoardGet() != 8 && temp_r27 < 0xA && temp_r27 > 0) { + return FALSE; + } + } + if (BoardPlayerItemFind(arg0, arg1) != -1) { + return TRUE; + } + return FALSE; +} + +static BOOL CheckSparkUse(s32 arg0, s32 arg1) { + s32 temp_r27; + s32 temp_r28; + s32 temp_r26; + s32 temp_r25; + s32 temp_r24; + s32 i; + s32 var_r30; + + temp_r25 = GWPlayer[arg0].space_curr; + temp_r28 = GWPlayer[arg0].diff; + temp_r24 = GWPlayer[arg0].character; + switch (temp_r28) { + case 0: + var_r30 = 0x32; + break; + case 1: + var_r30 = 0x19; + break; + case 2: + var_r30 = 5; + break; + case 3: + var_r30 = 0; + break; + } + if ((temp_r28 == 0 || temp_r28 == 1) && temp_r24 == 7) { + var_r30 = 7; + } + for (i = 0; i < 4; i++) { + if (i != arg0) { + temp_r26 = GWPlayer[i].space_curr; + temp_r27 = BoardComPathLenGet(temp_r26, temp_r25); + if (temp_r27 > 0 && temp_r27 <= 0xF && BoardPlayerItemFind(arg0, arg1) != -1 && BoardRandMod(0x64) >= var_r30) { + return TRUE; + } + } + } + return FALSE; +} + +static BOOL CheckBoardChangeUse(s32 arg0, s32 arg1) { + s32 temp_r25; + s32 temp_r24; + s32 temp_r23; + s32 temp_r22; + s32 temp_r21; + s32 temp_r26; + s32 var_r30; + s32 var_r29; + s32 var_r27; + s32 i; + + temp_r25 = GWPlayer[arg0].diff; + temp_r24 = GWPlayer[arg0].character; + switch (temp_r25) { + case 0: + var_r27 = 0x32; + break; + case 1: + var_r27 = 0x19; + break; + case 2: + var_r27 = 5; + break; + case 3: + var_r27 = 0; + break; + } + if (((arg1 == 4 && temp_r24 == 4) || (arg1 == 5 && (temp_r24 == 6 || temp_r24 == 3))) && (temp_r25 == 0 || temp_r25 == 1)) { + var_r27 = 7; + } + var_r30 = 0x3E7; + for (i = 0; i < 4; i++) { + if (arg0 == i) { + continue; + } + temp_r21 = GWPlayer[i].space_curr; + if (!GWTeamGet() || i != BoardPlayerSameTeamFind(arg0)) { + temp_r26 = GWPlayer[i].space_curr; + if (GWBoardGet() == 7) { + if (BoardComPathW20BestGet(temp_r21, 0x10000000, 0xA) != -1) { + var_r29 = 0xA; + } else { + var_r29 = 0; + } + } else if (GWBoardGet() == 8) { + if (BoardComPathW20BestGet(temp_r21, 0x200000, 0xA) != -1 || BoardComPathW20BestGet(temp_r21, 0x400000, 0xA) != -1) { + var_r29 = 0xA; + } else { + var_r29 = 0; + } + } else { + var_r29 = BoardComPathReachCheck(temp_r26, 8, 0); + } + if (var_r29 != 0 && var_r29 < var_r30) { + var_r30 = var_r29; + } + } + } + if ((var_r30 > 0xF && var_r30 != 0x3E7) || (GWTeamGet() && i == BoardPlayerSameTeamFind(arg0))) { + return FALSE; + } + temp_r26 = GWPlayer[arg0].space_curr; + temp_r23 = BoardComPathReachCheck(temp_r26, 8, 0); + temp_r22 = BoardComPathReachCheck(temp_r26, 8, 1); + if (BoardPlayerItemFind(arg0, arg1) != -1 && BoardRandMod(0x64) >= var_r27) { + if ((temp_r23 == 0 || temp_r22 == 0) && var_r30 == 0x3E7) { + return TRUE; + } + if (temp_r23 > var_r30 || temp_r22 > var_r30) { + return TRUE; + } + if (temp_r23 > 0xA || temp_r22 > 0xA) { + return TRUE; + } + } + return FALSE; +} + +BOOL CheckSwapUse(s32 arg0, s32 arg1) { + s32 temp_r27; + s32 temp_r26; + s32 temp_r25; + s32 var_r30; + s32 var_r29; + s32 i; + + temp_r27 = GWPlayer[arg0].diff; + temp_r25 = GWPlayer[arg0].character; + switch (temp_r27) { + case 0: + var_r29 = 0x32; + break; + case 1: + var_r29 = 0x19; + break; + case 2: + var_r29 = 5; + break; + case 3: + var_r29 = 0; + break; + } + if ((temp_r27 == 0 || temp_r27 == 1) && temp_r25 == 2) { + var_r29 = 7; + } + for (var_r30 = i = 0; i < 4; i++) { + if (i != arg0) { + var_r30 += BoardPlayerItemCount(i); + } + } + if (var_r30 == 0) { + return FALSE; + } + if (GWTeamGet()) { + temp_r26 = BoardPlayerSameTeamFind(arg0); + for (var_r30 = i = 0; i < 4; i++) { + if (temp_r26 != i && i != arg0) { + var_r30 += BoardPlayerItemCount(i); + } + } + if (var_r30 == 0) { + return FALSE; + } + } + if (BoardPlayerItemFind(arg0, arg1) != -1 && BoardRandMod(0x64) >= var_r29) { + return TRUE; + } + return FALSE; +} + +static BOOL CheckBooUse(s32 arg0, s32 arg1) { + if (BoardPlayerCoinsGet(arg0) < 5) { + return FALSE; + } + if (BoardBooComUseCheck(arg0) == 0) { + return FALSE; + } + if (BoardPlayerItemFind(arg0, arg1) == -1) { + return FALSE; + } + return TRUE; +} + +static BOOL CheckLampUse(s32 arg0, s32 arg1) { + if ((BoardPlayerCoinsGet(arg0) >= 0x14 || GWSystem.last5_effect == 4) && BoardPlayerItemFind(arg0, arg1) != -1) { + return TRUE; + } + return FALSE; +} + +s32 BoardComJunctionInputGet(s32 arg0, Vec *arg1, s32 arg2, float *arg3) { + Vec sp28; + Vec sp1C; + Vec sp10; + float var_f30; + float var_f29; + float var_f31; + s32 var_r29; + s32 var_r27; + s32 temp_r26; + s32 var_r24; + s32 var_r23; + s32 var_r21; + s32 i; + s16 var_r28; + s16 temp_r25; + s16 spC; + + temp_r26 = GWBoardGet(); + var_r24 = 0; + temp_r25 = GWPlayer[arg0].space_curr; + var_r28 = -1; + spC = GWPlayer[arg0].roll; + switch (GWPlayer[arg0].diff) { + case 3: + var_r29 = 0; + break; + case 2: + var_r29 = 0; + break; + case 1: + var_r29 = 0xA; + break; + default: + case 0: + var_r29 = 0x1E; + break; + } + if (BoardRandMod(0x64) >= var_r29) { + var_r23 = 1; + } else { + var_r23 = 0; + } + if (var_r23 != 0) { + if (temp_r26 >= 0 && temp_r26 <= 5) { + var_r28 = BoardComPathBestGet(temp_r25); + } else if (temp_r26 == 7) { + var_r28 = BoardComPathW20BestGet(temp_r25, 0x10000000, 0xA); + } + if (var_r28 == -1) { + var_r24 = 1; + } else { + BoardSpacePosGet(0, temp_r25, &sp1C); + BoardSpacePosGet(0, var_r28, &sp28); + PSVECSubtract(&sp28, &sp1C, &sp10); + var_f31 = BoardDAngleCalc(90.0 - 180.0 * (atan2(sp10.z, sp10.x) / M_PI)); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 > 360.0f) { + var_f31 -= 360.0f; + } + } + } + if (var_r24 != 0) { + var_r21 = BoardRandMod(arg2); + var_f31 = arg3[var_r21]; + } + var_f30 = 999.0f; + for (var_r27 = i = 0; i < 4; i++) { + var_f29 = (comJunctionDirTbl[i].x - var_f31 < 0.0f) + ? -(comJunctionDirTbl[i].x - var_f31) + : (comJunctionDirTbl[i].x - var_f31); + if (var_f29 < var_f30) { + var_r27 = i; + var_f30 = var_f29; + } + } + arg1->x = comJunctionDirTbl[var_r27].y; + arg1->z = comJunctionDirTbl[var_r27].z; + arg1->y = 0.0f; + return 0; +} + +s32 BoardComBestPlayerFind(void) { + s32 temp_r30; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 i; + + if (_CheckFlag(0x1000B) != 0) { + return -1; + } + var_r28 = -1; + var_r29 = -1; + for (i = 0; i < 4; i++) { + var_r27 = GWPlayer[i].space_curr; + temp_r30 = BoardComPathReachCheck(var_r27, 8, 0); + if (temp_r30 > 0 && temp_r30 > var_r29) { + var_r29 = temp_r30; + var_r28 = i; + } + } + return var_r28; +} diff --git a/src/game/board/item.c b/src/game/board/item.c index 4fa624b8..28bdfa00 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -9,6 +9,8 @@ #include "game/process.h" #include "game/window.h" #include "game/wipe.h" +#include "game/board/audio.h" +#include "game/board/com.h" #include "game/board/main.h" #include "game/board/model.h" #include "game/board/player.h" @@ -46,11 +48,9 @@ typedef struct { u32 frandmod(u32); void CharModelCreateParticle(s32, Vec*); void CharModelLayerSetAll(s32); -void BoardComKeySetRight(void); void BoardBowserSuitInit(s32); s16 BoardBowserSuitPlayerModelGet(void); void fn_8004F578(s16, s32); -void BoardAudSeqPause(s32, s32, s32); static void ItemProcess(void); static void RestoreProcess(void); diff --git a/src/game/board/player.c b/src/game/board/player.c index 33378078..a0b7703b 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -1,5 +1,7 @@ #include "game/board/player.h" #include "game/objsub.h" +#include "game/board/com.h" + //// #include "game/board/ui.h" extern void BoardStatusHammerShowSet(s32, s32); extern void BoardYourTurnExec(s32); @@ -31,7 +33,6 @@ extern void BoardModelAttrReset(s16, s32); //// #include "game/board/tutorial.h" extern BoardTutorialHookExec(s16, s32); //// #include "game/board/com.h" -extern void BoardComUseItemSet(s32, s32); //// #include "game/board/overhead.h" extern void BoardViewOverheadExec(s32); extern void BoardViewMapExec(s32); From 5275094e2739a3d215554194a4434f4dc036b97a Mon Sep 17 00:00:00 2001 From: mrshigure Date: Tue, 6 Feb 2024 15:28:33 -0800 Subject: [PATCH 010/106] Matched board/view --- configure.py | 2 +- include/game/board/view.h | 15 + src/game/board/player.c | 4 +- src/game/board/view.c | 593 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 610 insertions(+), 4 deletions(-) create mode 100755 include/game/board/view.h create mode 100755 src/game/board/view.c diff --git a/configure.py b/configure.py index 79d4f1f9..519d6758 100644 --- a/configure.py +++ b/configure.py @@ -365,7 +365,7 @@ config.libs = [ Object(Matching, "game/board/window.c"), Object(Matching, "game/board/audio.c"), Object(Matching, "game/board/com.c"), - Object(NonMatching, "game/board/view.c"), + Object(Matching, "game/board/view.c"), Object(NonMatching, "game/board/space.c"), Object(NonMatching, "game/board/shop.c"), Object(NonMatching, "game/board/lottery.c"), diff --git a/include/game/board/view.h b/include/game/board/view.h new file mode 100755 index 00000000..456cfd14 --- /dev/null +++ b/include/game/board/view.h @@ -0,0 +1,15 @@ +#ifndef _BOARD_VIEW_H +#define _BOARD_VIEW_H + +#include "dolphin.h" + +void BoardViewOverheadExec(s32 arg0); +void BoardViewFocusGetPos(Vec *arg0); +void BoardViewFocusSet(Vec *arg0, u16 arg1); +void BoardViewMoveStart(Vec *arg0, Vec *arg1, u16 arg2); +BOOL BoardViewMoveCheck(void); +void BoardViewMoveEnd(void); +void BoardViewWait(void); +void BoardViewMapExec(s32 arg0); + +#endif diff --git a/src/game/board/player.c b/src/game/board/player.c index a0b7703b..cb722d27 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -1,6 +1,7 @@ #include "game/board/player.h" #include "game/objsub.h" #include "game/board/com.h" +#include "game/board/view.h" //// #include "game/board/ui.h" extern void BoardStatusHammerShowSet(s32, s32); @@ -34,8 +35,6 @@ extern void BoardModelAttrReset(s16, s32); extern BoardTutorialHookExec(s16, s32); //// #include "game/board/com.h" //// #include "game/board/overhead.h" -extern void BoardViewOverheadExec(s32); -extern void BoardViewMapExec(s32); //// #include "game/board/roll.h" extern s32 BoardRollExec(s32); extern void BoardRollKill(void); @@ -51,7 +50,6 @@ extern s16 boardTutorialDirInputTime; extern s8 boardTutorialDirInputX; extern s8 boardTutorialDirInputY; //// #include "game/board/view.h" -void BoardViewMapExec(s32); //// typedef struct bitcopy { diff --git a/src/game/board/view.c b/src/game/board/view.c new file mode 100755 index 00000000..46dc6f6d --- /dev/null +++ b/src/game/board/view.c @@ -0,0 +1,593 @@ +#include "game/board/view.h" +#include "game/audio.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfex.h" +#include "game/object.h" +#include "game/pad.h" +#include "game/wipe.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/ui.h" + +typedef struct { + struct { + u8 unk00_field0 : 1; + }; + u8 unk01; + s16 unk02; + s16 unk04; +} OverheadWork; + +static void ExecMapView(void); +static void ExecStarView(void); +static void ExecOverheadView(void); +static void DestroyView(void); +static void SetTargetView(void); +static void DestroyFocus(void); +static void CreateButtonWin(void); +static void DestroyButtonWin(void); +static void InitOverheadView(void); +static void DestroyOverheadView(void); +static void UpdateOverheadView(omObjData *arg0); +static void WaitOverheadView(void); + +static Vec focusPos; +static Vec focusPosTarget; + +static s8 viewControls; +static s8 viewPlayer; +static s8 viewMoveF; +static s8 focusDestroyF; +static u16 focusTimer; +static omObjData *overheadObj; +static s8 pauseDisableF; +static Process *viewProc; + +static s16 buttonWin = -1; +static s16 focusMdl = -1; + +static float overhead2DPos[][2] = { + { 48.0f, 72.0f }, + { 528.0f, 72.0f }, + { 48.0f, 408.0f }, + { 528.0f, 408.0f }, + { 288.0f, 72.0f } +}; + +static float mapViewMinZ[] = { + -2000.0f, -1500.0f, -2200.0f, + -1800.0f, -2100.0f, -3000.0f, + -3000.0f, -1800.0f, -1800.0f +}; + +static float mapViewMaxZ[] = { + 2300.0f, 2500.0f, 2600.0f, + 2000.0f, 2300.0f, 2500.0f, + 2500.0f, 2000.0f, 2000.0f +}; + +static float mapViewMinX[] = { + -3000.0f, -3000.0f, -3000.0f, + -3000.0f, -3000.0f, -3000.0f, + -3000.0f, -2000.0f, -2000.0f +}; + +static float mapViewMaxX[] = { + 3000.0f, 3000.0f, 3000.0f, + 3000.0f, 3000.0f, 3000.0f, + 3000.0f, 1600.0f, 2000.0f +}; + +static float overheadCamZoom[] = { + 14370.0f, 14500.0f, 15000.0f, + 15000.0f, 13000.0f, 15000.0f, + 100.0f, 10000.0f, 10000.0f +}; + +static float overheadCamPosZ[] = { + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, -160.0f, 0.0f +}; + +void BoardViewOverheadExec(s32 arg0) { + if (BoardPauseDisableGet() == 0) { + BoardPauseDisableSet(1); + pauseDisableF = 1; + } else { + pauseDisableF = 0; + } + _SetFlag(0x1001C); + WipeColorSet(0xFF, 0xFF, 0xFF); + WipeCreate(2, 1, 1); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + viewProc = HuPrcChildCreate(ExecOverheadView, 0x200A, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(viewProc, DestroyView); + viewControls = 2; + viewPlayer = arg0; + focusTimer = 1; + viewMoveF = 0; + BoardPlayerPosGet(arg0, &focusPos); + BoardStatusItemSet(0); + while (viewProc != NULL) { + HuPrcVSleep(); + } + BoardStatusItemSet(1); + HuPrcSleep(3); + WaitOverheadView(); + _ClearFlag(0x1001C); +} + +void BoardViewFocusGetPos(Vec *arg0) { + if (arg0) { + BoardModelPosGet(focusMdl, arg0); + } +} + +static inline void BoardViewInlineFunc00(Vec *arg0, Vec *arg1, u16 arg2) { + if (arg2 == 0) { + arg2 = 1; + } + viewControls = 1; + viewPlayer = -1; + focusTimer = arg2; + viewMoveF = 1; + if (arg0) { + focusPos = *arg0; + } + if (arg1) { + focusPosTarget = *arg1; + } +} + +void BoardViewFocusSet(Vec *arg0, u16 arg1) { + u16 var_r31; + + if (BoardPauseDisableGet() == 0) { + BoardPauseDisableSet(1); + pauseDisableF = 1; + } else { + pauseDisableF = 0; + } + focusDestroyF = 1; + BoardViewInlineFunc00(NULL, arg0, arg1); + HuPrcSleep(2); +} + +void BoardViewMoveStart(Vec *arg0, Vec *arg1, u16 arg2) { + u16 var_r31; + + if (BoardPauseDisableGet() == 0) { + BoardPauseDisableSet(1); + pauseDisableF = 1; + } else { + pauseDisableF = 0; + } + viewProc = HuPrcChildCreate(ExecStarView, 0x200A, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(viewProc, DestroyView); + focusDestroyF = 0; + BoardViewInlineFunc00(arg0, arg1, arg2); + HuPrcSleep(2); +} + +BOOL BoardViewMoveCheck(void) { + return (viewMoveF != 0) ? TRUE : FALSE; +} + +void BoardViewMoveEnd(void) { + viewMoveF = 0; +} + +void BoardViewWait(void) { + viewMoveF = 0; + while (viewProc != NULL) { + HuPrcVSleep(); + } +} + +void BoardViewMapExec(s32 arg0) { + if (BoardPauseDisableGet() == 0) { + BoardPauseDisableSet(1); + pauseDisableF = 1; + } else { + pauseDisableF = 0; + } + viewProc = HuPrcChildCreate(ExecMapView, 0x200A, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(viewProc, DestroyView); + viewControls = 0; + viewPlayer = arg0; + focusTimer = 1; + viewMoveF = 0; + BoardPlayerPosGet(arg0, &focusPos); + while (viewProc != NULL) { + HuPrcVSleep(); + } +} + +static void ExecMapView(void) { + Vec spC; + float var_f29; + float temp_f28; + float temp_f27; + float temp_f26; + float temp_f25; + float temp_f24; + u32 var_r28; + s8 sp9; + s8 sp8; + + SetTargetView(); + CreateButtonWin(); + temp_f25 = mapViewMaxZ[GWBoardGet()]; + temp_f24 = mapViewMinZ[GWBoardGet()]; + temp_f27 = mapViewMaxX[GWBoardGet()]; + temp_f26 = mapViewMinX[GWBoardGet()]; + while (1) { + var_r28 = HuPadBtnDown[GWPlayer[viewPlayer].port]; + if (var_r28 == 0x200) { + HuAudFXPlay(3); + break; + } + if (HuPadBtn[GWPlayer[viewPlayer].port] & 0x100) { + var_f29 = 40.0f; + } else { + var_f29 = 20.0f; + } + spC.x = spC.y = spC.z = 0.0f; + sp9 = HuPadStkX[GWPlayer[viewPlayer].port]; + sp8 = HuPadStkY[GWPlayer[viewPlayer].port]; + if (sp9 != 0 || sp8 != 0) { + OSs8tof32(&sp9, &spC.x); + OSs8tof32(&sp8, &spC.z); + temp_f28 = 180.0 * (atan2(spC.x, -spC.z) / M_PI); + spC.x = var_f29 * sin(temp_f28 * M_PI / 180.0); + spC.z = var_f29 * cos(temp_f28 * M_PI / 180.0); + } + PSVECAdd(&spC, &focusPos, &focusPos); + if (focusPos.x < temp_f26) { + focusPos.x = temp_f26; + } + if (focusPos.x > temp_f27) { + focusPos.x = temp_f27; + } + if (focusPos.z < temp_f24) { + focusPos.z = temp_f24; + } + if (focusPos.z > temp_f25) { + focusPos.z = temp_f25; + } + BoardModelPosSetV(focusMdl, &focusPos); + HuPrcVSleep(); + } + DestroyFocus(); + DestroyButtonWin(); + HuPrcEnd(); +} + +static void ExecStarView(void) { + Vec sp8; + float temp_f30; + + SetTargetView(); + do { + OSu16tof32(&focusTimer, &temp_f30); + PSVECSubtract(&focusPosTarget, &focusPos, &sp8); + sp8.x /= temp_f30; + sp8.y /= temp_f30; + sp8.z /= temp_f30; + viewMoveF = 1; + while (viewMoveF != 0) { + HuPrcVSleep(); + } + focusDestroyF = 0; + while (focusTimer != 0) { + PSVECAdd(&sp8, &focusPos, &focusPos); + BoardModelPosSetV(focusMdl, &focusPos); + HuPrcVSleep(); + focusTimer--; + } + BoardModelPosSetV(focusMdl, &focusPosTarget); + BoardCameraMotionWait(); + viewMoveF = 1; + while (viewMoveF != 0 && focusDestroyF == 0) { + HuPrcVSleep(); + } + } while (focusDestroyF != 0); + DestroyFocus(); + HuPrcEnd(); +} + +static void ExecOverheadView(void) { + u32 var_r31; + + if ((GWBoardGet() == 2 || GWBoardGet() == 5) && boardLightResetHook) { + boardLightResetHook(); + } + InitOverheadView(); + CreateButtonWin(); + HuPrcVSleep(); + SetTargetView(); + WipeColorSet(0xFF, 0xFF, 0xFF); + WipeCreate(1, 1, 0xA); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + while (1) { + var_r31 = HuPadBtnDown[GWPlayer[viewPlayer].port]; + if (var_r31 == 0x200) { + HuAudFXPlay(3); + break; + } + HuPrcVSleep(); + } + if ((GWBoardGet() == 2 || GWBoardGet() == 5) && boardLightSetHook) { + boardLightSetHook(); + } + DestroyButtonWin(); + DestroyFocus(); + HuPrcEnd(); +} + +static void DestroyView(void) { + if (focusMdl != -1) { + BoardModelKill(focusMdl); + focusMdl = -1; + } + DestroyOverheadView(); + DestroyButtonWin(); + viewMoveF = 0; + focusTimer = 0; + viewPlayer = -1; + if (pauseDisableF != 0) { + BoardPauseDisableSet(0); + pauseDisableF = 0; + } + viewProc = NULL; +} + +static void SetTargetView(void) { + Vec sp14; + Vec sp8; + + BoardCameraBackup(); + focusMdl = BoardModelCreate(0x7000A, 0, 0); + BoardModelVisibilitySet(focusMdl, 0); + BoardModelPosSetV(focusMdl, &focusPos); + BoardCameraNearFarSet(10.0f, 30000.0f); + if (viewControls != 2) { + sp8.x = -45.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(focusMdl, &sp8, NULL, 3000.0f, -1.0f, 0x15); + BoardCameraMotionWait(); + } else { + BoardModelPosSet(focusMdl, 0.0f, 0.0f, 0.0f); + sp14.x = 0.0f; + sp14.y = 0.0f; + sp14.z = 0.0f; + sp8.x = -78.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + sp14.z = overheadCamPosZ[GWBoardGet()]; + BoardCameraMoveSet(0); + BoardCameraMotionStartEx(focusMdl, &sp8, &sp14, overheadCamZoom[GWBoardGet()], -1.0f, 1); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + } +} + +static void DestroyFocus(void) { + if (focusMdl != -1) { + BoardModelKill(focusMdl); + focusMdl = -1; + } + BoardCameraMoveSet(0); + BoardCameraRestore(); + BoardCameraMoveSet(1); +} + +static void CreateButtonWin(void) { + float sp8[2]; + float var_f31; + float var_f30; + s32 var_r31; + + if (viewControls != 2) { + var_r31 = 0x90005; + var_f31 = 286.0f; + } else { + var_r31 = 0x10004D; + var_f31 = 328.0f; + } + HuWinMesMaxSizeGet(1, sp8, var_r31); + var_f30 = -10000.0f; + buttonWin = HuWinCreate(var_f30, var_f31, sp8[0], sp8[1], 0); + HuWinBGTPLvlSet(buttonWin, 0.0f); + HuWinMesSpeedSet(buttonWin, 0); + HuWinMesSet(buttonWin, var_r31); +} + +static void DestroyButtonWin(void) { + if (buttonWin != -1) { + HuWinKill(buttonWin); + buttonWin = -1; + } +} + +static void InitOverheadView(void) { + Vec sp10; + GXColor spA; + s16 sp8; + omObjData *temp_r26; + OverheadWork *temp_r31; + float *temp_r30; + s32 i; + s32 sp1C[8] = { + 0x0007002E, + 0x0007002F, + 0x00070030, + 0x00070031, + 0x00070032, + 0x00070033, + 0x00070034, + 0x00070035 + }; + + temp_r26 = omAddObjEx(boardObjMan, 0x1000, 0, 0, -1, UpdateOverheadView); + overheadObj = temp_r26; + temp_r31 = OM_GET_WORK_PTR(temp_r26, OverheadWork); + temp_r31->unk00_field0 = 0; + temp_r31->unk01 = 1; + temp_r31->unk02 = HuSprGrpCreate(9); + for (i = 0; i < 4; i++) { + temp_r30 = overhead2DPos[i]; + BoardSpriteCreate(sp1C[GWPlayer[i].character], 0x1388, 0, &sp8); + HuSprGrpMemberSet(temp_r31->unk02, i, sp8); + HuSprAttrSet(temp_r31->unk02, i, 1); + HuSprAttrSet(temp_r31->unk02, i, 8); + HuSprPosSet(temp_r31->unk02, i, temp_r30[0], temp_r30[1]); + if (GWPlayer[i].character == 7) { + spA.r = 0x50; + spA.g = 0x50; + spA.b = 0x50; + } else { + GWCharColorGet(GWPlayer[i].character, &spA); + } + BoardSpriteCreate(0x7006C, 0x1770, 0, &sp8); + HuSprGrpMemberSet(temp_r31->unk02, i + 4, sp8); + HuSprPosSet(temp_r31->unk02, i + 4, temp_r30[0], temp_r30[1]); + HuSprColorSet(temp_r31->unk02, i + 4, spA.r, spA.g, spA.b); + } + temp_r30 = overhead2DPos[4]; + temp_r31->unk04 = BoardModelCreate(0x70008, NULL, 0); + BoardModelMotionSpeedSet(temp_r31->unk04, 0.0f); + BoardModelLayerSet(temp_r31->unk04, 6); + BoardModelScaleSet(temp_r31->unk04, 0.4f, 0.4f, 0.4f); + BoardModelPassSet(temp_r31->unk04, 1); + sp10.x = temp_r30[0]; + sp10.y = temp_r30[1]; + sp10.z = 1000.0f; + spA.r = 0xF8; + spA.g = 0xF0; + spA.b = 0x80; + BoardSpriteCreate(0x7006C, 0x1770, 0, &sp8); + HuSprGrpMemberSet(temp_r31->unk02, 8, sp8); + HuSprPosSet(temp_r31->unk02, 8, temp_r30[0], temp_r30[1]); + HuSprColorSet(temp_r31->unk02, 8, spA.r, spA.g, spA.b); + Hu3D2Dto3D(&sp10, 1, &sp10); + BoardModelPosSetV(temp_r31->unk04, &sp10); + HuSprGrpDrawNoSet(temp_r31->unk02, 0x40); + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + BoardModelVisibilitySet(temp_r31->unk04, 0); + HuSprTPLvlSet(temp_r31->unk02, 8, 0.0f); + } +} + +static void DestroyOverheadView(void) { + if (overheadObj) { + OM_GET_WORK_PTR(overheadObj, OverheadWork)->unk00_field0 = 1; + } +} + +static void UpdateOverheadView(omObjData *arg0) { + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f31; + float temp_f30; + float *var_r29; + s32 var_r28; + s32 var_r27; + s32 i; + u32 var_r26; + OverheadWork *temp_r31; + Mtx sp5C; + Mtx sp2C; + + temp_r31 = OM_GET_WORK_PTR(arg0, OverheadWork); + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + if (temp_r31->unk02 != -1) { + HuSprGrpKill(temp_r31->unk02); + } + if (temp_r31->unk04 != -1) { + BoardModelKill(temp_r31->unk04); + } + overheadObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + var_r26 = HuPadBtnDown[GWPlayer[viewPlayer].port]; + if (var_r26 == 0x20) { + temp_r31->unk01 ^= 1; + HuAudFXPlay(0x1C); + } + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + var_r27 = 1; + } else { + var_r27 = 0; + } + for (i = 0; i < 5; i++) { + var_r29 = overhead2DPos[i]; + sp20.x = var_r29[0] - 288.0f; + sp20.y = var_r29[1] - 240.0f; + sp20.z = 1000.0f; + if (i != 4) { + BoardSpacePosGet(0, GWPlayer[i].space_curr, &sp14); + } else if (var_r27 != 0) { + sp14.x = sp14.y = sp14.z = 0.0f; + } else { + BoardSpacePosGet(0, BoardSpaceStarGetCurr(), &sp14); + } + Hu3D3Dto2D(&sp14, 1, &sp14); + sp14.x -= 288.0f; + sp14.y -= 240.0f; + PSVECSubtract(&sp20, &sp14, &sp8); + sp8.z = 0.0f; + temp_f30 = BoardDAngleCalc(180.0 * (atan2(sp8.y, sp8.x) / M_PI) - 90.0); + temp_f31 = PSVECMag(&sp8) / 32; + if (i != 4) { + var_r28 = i + 4; + } else { + var_r28 = 8; + } + HuSprZRotSet(temp_r31->unk02, var_r28, temp_f30); + HuSprScaleSet(temp_r31->unk02, var_r28, 0.5f, temp_f31); + HuSprPosSet(temp_r31->unk02, var_r28, var_r29[0], var_r29[1]); + if (i == 4 && (GWBoardGet() == 7 || GWBoardGet() == 8)) { + BoardModelVisibilitySet(temp_r31->unk04, 0); + } else if (temp_r31->unk01 != 0) { + if (i != 4) { + HuSprAttrReset(temp_r31->unk02, i, 4); + } + HuSprAttrReset(temp_r31->unk02, var_r28, 4); + BoardModelVisibilitySet(temp_r31->unk04, 1); + } else { + if (i != 4) { + HuSprAttrSet(temp_r31->unk02, i, 4); + } + HuSprAttrSet(temp_r31->unk02, var_r28, 4); + BoardModelVisibilitySet(temp_r31->unk04, 0); + } + } + sp20.x = var_r29[0]; + sp20.y = var_r29[1]; + sp20.z = 1000.0f; + BoardCameraRotGet(&sp8); + PSMTXRotRad(sp5C, 0x78, sp8.x * 0.017453292f); + PSMTXRotRad(sp2C, 0x79, sp8.y * 0.017453292f); + PSMTXConcat(sp2C, sp5C, sp2C); + BoardModelMtxSet(temp_r31->unk04, &sp2C); + Hu3D2Dto3D(&sp20, 1, &sp20); + BoardModelPosSetV(temp_r31->unk04, &sp20); +} + +static void WaitOverheadView(void) { + while (overheadObj) { + HuPrcVSleep(); + } +} From f2f4d4a56478fdba272f8fdfc4a66029583d15fb Mon Sep 17 00:00:00 2001 From: zestydevy Date: Tue, 6 Feb 2024 18:10:11 -0600 Subject: [PATCH 011/106] main.c matching for modeltestDll.c --- config/GMPE01_00/rels/modeltestDll/splits.txt | 18 + .../GMPE01_00/rels/modeltestDll/symbols.txt | 146 ++-- configure.py | 8 + include/REL/modeltestDll.h | 46 + include/unsplit.h | 1 + src/REL/modeltestDll/main.c | 826 ++++++++++++++++++ src/REL/modeltestDll/modeltest00.c | 0 src/REL/modeltestDll/modeltest01.c | 0 8 files changed, 973 insertions(+), 72 deletions(-) create mode 100644 include/REL/modeltestDll.h create mode 100644 src/REL/modeltestDll/main.c create mode 100644 src/REL/modeltestDll/modeltest00.c create mode 100644 src/REL/modeltestDll/modeltest01.c diff --git a/config/GMPE01_00/rels/modeltestDll/splits.txt b/config/GMPE01_00/rels/modeltestDll/splits.txt index 531cd645..2f84ebd2 100644 --- a/config/GMPE01_00/rels/modeltestDll/splits.txt +++ b/config/GMPE01_00/rels/modeltestDll/splits.txt @@ -5,3 +5,21 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/modeltestDll/main.c: + .text start:0x000000A0 end:0x000034B0 + .rodata start:0x00000000 end:0x00000130 + .data start:0x00000000 end:0x00000358 + .bss start:0x00000000 end:0x000009A8 + +REL/modeltestDll/modeltest00.c: + .text start:0x000034B0 end:0x00004AC8 + .rodata start:0x00000130 end:0x000001E0 + .data start:0x00000358 end:0x00000388 + .bss start:0x000009A8 end:0x00000A00 + +REL/modeltestDll/modeltest01.c: + .text start:0x00004AC8 end:0x000086B8 + .rodata start:0x000001E0 end:0x00000290 + .data start:0x00000388 end:0x000007AE + .bss start:0x00000A00 end:0x00000AC8 diff --git a/config/GMPE01_00/rels/modeltestDll/symbols.txt b/config/GMPE01_00/rels/modeltestDll/symbols.txt index 3c87f506..f6f8dd36 100644 --- a/config/GMPE01_00/rels/modeltestDll/symbols.txt +++ b/config/GMPE01_00/rels/modeltestDll/symbols.txt @@ -23,56 +23,56 @@ fn_1_82C8 = .text:0x000082C8; // type:function size:0xEC fn_1_83B4 = .text:0x000083B4; // type:function size:0x304 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0xC data:4byte lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0xC data:4byte -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 data:double -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 data:double -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 data:double -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x10 data:2byte -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 data:double -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 data:double -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x8 data:double -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 data:double -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 data:double -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 scope:local data:double +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x10 scope:local data:2byte +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 scope:local data:double +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 scope:local data:double +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float @@ -136,34 +136,35 @@ lbl_1_rodata_284 = .rodata:0x00000284; // type:object size:0x4 data:float lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 data:float lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x20 data:4byte -lbl_1_data_20 = .data:0x00000020; // type:object size:0x28 data:string -lbl_1_data_48 = .data:0x00000048; // type:object size:0x9 data:string -lbl_1_data_51 = .data:0x00000051; // type:object size:0x9 data:string -lbl_1_data_5A = .data:0x0000005A; // type:object size:0x9 data:string -lbl_1_data_63 = .data:0x00000063; // type:object size:0x9 data:string -lbl_1_data_6C = .data:0x0000006C; // type:object size:0x9 data:string -lbl_1_data_75 = .data:0x00000075; // type:object size:0x9 data:string -lbl_1_data_7E = .data:0x0000007E; // type:object size:0x9 data:string -lbl_1_data_87 = .data:0x00000087; // type:object size:0x9 data:string -lbl_1_data_90 = .data:0x00000090; // type:object size:0x9 data:string -lbl_1_data_99 = .data:0x00000099; // type:object size:0x9 data:string -lbl_1_data_A2 = .data:0x000000A2; // type:object size:0x9 data:string -lbl_1_data_AB = .data:0x000000AB; // type:object size:0x9 data:string -lbl_1_data_B4 = .data:0x000000B4; // type:object size:0x9 data:string -lbl_1_data_BD = .data:0x000000BD; // type:object size:0x9 data:string -lbl_1_data_C6 = .data:0x000000C6; // type:object size:0x9 data:string -lbl_1_data_CF = .data:0x000000CF; // type:object size:0x9 data:string +lbl_1_data_20 = .data:0x00000020; // type:object size:0x28 scope:local data:string +lbl_1_data_48 = .data:0x00000048; // type:object size:0x9 scope:local data:string +lbl_1_data_51 = .data:0x00000051; // type:object size:0x9 scope:local data:string +lbl_1_data_5A = .data:0x0000005A; // type:object size:0x9 scope:local data:string +lbl_1_data_63 = .data:0x00000063; // type:object size:0x9 scope:local data:string +lbl_1_data_6C = .data:0x0000006C; // type:object size:0x9 scope:local data:string +lbl_1_data_75 = .data:0x00000075; // type:object size:0x9 scope:local data:string +lbl_1_data_7E = .data:0x0000007E; // type:object size:0x9 scope:local data:string +lbl_1_data_87 = .data:0x00000087; // type:object size:0x9 scope:local data:string +lbl_1_data_90 = .data:0x00000090; // type:object size:0x9 scope:local data:string +lbl_1_data_99 = .data:0x00000099; // type:object size:0x9 scope:local data:string +lbl_1_data_A2 = .data:0x000000A2; // type:object size:0x9 scope:local data:string +lbl_1_data_AB = .data:0x000000AB; // type:object size:0x9 scope:local data:string +lbl_1_data_B4 = .data:0x000000B4; // type:object size:0x9 scope:local data:string +lbl_1_data_BD = .data:0x000000BD; // type:object size:0x9 scope:local data:string +lbl_1_data_C6 = .data:0x000000C6; // type:object size:0x9 scope:local data:string +lbl_1_data_CF = .data:0x000000CF; // type:object size:0x9 scope:local data:string lbl_1_data_D8 = .data:0x000000D8; // type:object size:0x40 lbl_1_data_118 = .data:0x00000118; // type:object size:0x50 data:float lbl_1_data_168 = .data:0x00000168; // type:object size:0xA0 lbl_1_data_208 = .data:0x00000208; // type:object size:0x50 lbl_1_data_258 = .data:0x00000258; // type:object size:0x50 -lbl_1_data_2A8 = .data:0x000002A8; // type:object size:0x1A data:string -lbl_1_data_2C2 = .data:0x000002C2; // type:object size:0x16 -lbl_1_data_2D8 = .data:0x000002D8; // type:object size:0x10 data:string -lbl_1_data_2E8 = .data:0x000002E8; // type:object size:0x4 data:string -lbl_1_data_2EC = .data:0x000002EC; // type:object size:0x2C data:string -lbl_1_data_318 = .data:0x00000318; // type:object size:0x40 +lbl_1_data_2A8 = .data:0x000002A8; // type:object size:0x1A scope:local data:string +lbl_1_data_2C2 = .data:0x000002C2; // type:object size:0x16 scope:local +lbl_1_data_2D8 = .data:0x000002D8; // type:object size:0x10 scope:local data:string +lbl_1_data_2E8 = .data:0x000002E8; // type:object size:0x4 scope:local data:string +lbl_1_data_2EC = .data:0x000002EC; // type:object size:0x2C scope:local data:string +lbl_1_data_318 = .data:0x00000318; // type:object size:0xA scope:local data:string +lbl_1_data_322 = .data:0x00000322; // type:object size:0x36 lbl_1_data_358 = .data:0x00000358; // type:object size:0x8 lbl_1_data_360 = .data:0x00000360; // type:object size:0x28 data:string lbl_1_data_388 = .data:0x00000388; // type:object size:0x28 data:string @@ -200,7 +201,8 @@ lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x2 data:2byte lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x4 data:float lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x1 data:byte lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x10 data:4byte -lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x414 +lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x410 +unk_bss_450 = .bss:0x00000450; // type:object size:0x4 data:4byte lbl_1_bss_454 = .bss:0x00000454; // type:object size:0x4 data:4byte lbl_1_bss_458 = .bss:0x00000458; // type:object size:0x2 data:2byte lbl_1_bss_45A = .bss:0x0000045A; // type:object size:0x6 data:2byte diff --git a/configure.py b/configure.py index 79d4f1f9..49f17192 100644 --- a/configure.py +++ b/configure.py @@ -861,6 +861,14 @@ config.libs = [ Object(NonMatching, "REL/mgmodedll/minigame.c"), } ), + Rel('modeltestDll', + objects = { + Object(Matching, "REL/executor.c"), + Object(Matching, "REL/modeltestDll/main.c"), + Object(NonMatching, "REL/modeltestDll/modeltest00.c"), + Object(NonMatching, "REL/modeltestDll/modeltest01.c"), + } + ), Rel('modeseldll', objects = { Object(Matching, "REL/executor.c"), diff --git a/include/REL/modeltestDll.h b/include/REL/modeltestDll.h new file mode 100644 index 00000000..40e74cc0 --- /dev/null +++ b/include/REL/modeltestDll.h @@ -0,0 +1,46 @@ +#ifndef REL_MODELTEST_H +#define REL_MODELTEST_H + +#include "game/hsfdraw.h" +#include "game/objsub.h" + +// -------------------------------------------------------------------------- // + +#define US_PER_60TH_SEC (1000000.0f / 60.0f) +#define US_TO_60TH_SEC(us) ((us) / US_PER_60TH_SEC) +#define FB_SIZE(width, height) width * height * 2 +#define ABS(x) ((x) < 0 ? -(x) : (x)) + +// -------------------------------------------------------------------------- // + +typedef struct +{ + s16 unk0[7]; +} HuUnkF9C2; + +typedef struct +{ + Point3d pos; // 0000 + Point3d rot; // 000C + Point3d scale; // 0018 + s32 unk24; + s32 unk28; + s32 unk2C; + HsfObject * obj; // 0030 +} HuObjUnk; + +extern Point3d CRot; +extern Point3d Center; +extern f32 CZoom; +void fn_1_29C(); +void fn_1_28F8(Point3d * arg0, Point3d * arg1); +extern void omOutView(); + +s16 MGSeqCreate(s16, ...); +void MGSeqParamSet(s16, s16, s16); +typedef void (omObjFunc2)(struct om_obj_data *); +omObjFunc2 fn_1_F9C; + +#endif + +// -------------------------------------------------------------------------- // \ No newline at end of file diff --git a/include/unsplit.h b/include/unsplit.h index 7f4e6841..35d6ade4 100644 --- a/include/unsplit.h +++ b/include/unsplit.h @@ -8,6 +8,7 @@ void MGSeqKillAll(void); void MGSeqPracticeInit(void); void CharMotionClose(s16 character); void CharModelClose(s16 character); +void CharMotionDataClose(s16 character); void CharModelKill(s16 character); s16 CharModelCreate(s16 character, s16 lod); s16 CharMotionCreate(s16 character, s32 data_num); diff --git a/src/REL/modeltestDll/main.c b/src/REL/modeltestDll/main.c new file mode 100644 index 00000000..c4a8570d --- /dev/null +++ b/src/REL/modeltestDll/main.c @@ -0,0 +1,826 @@ +#include "math.h" +#include "unsplit.h" +#include "game/object.h" +#include "game/wipe.h" +#include "game/pad.h" +#include "game/hsfanim.h" +#include "game/hsfmotion.h" +#include "game/hsfex.h" +#include "game/printfunc.h" +#include "game/window.h" +#include "game/gamework_data.h" + +#include "REL/modeltestDll.h" + +// -------------------------------------------------------------------------- // + +s32 lbl_1_data_0[8] = { + 0x005F001B, + 0x005F0015, + 0x005F0016, + 0x005F0006, + 0x005F0000, + 0x005F0000, + 0x005F0000, + 0x005F0004, +}; + +const f64 unk_rodata_0 = 0.5; +const f64 unk_rodata_8 = 3.0; +omObjData * lbl_1_bss_9A4; +omObjData * lbl_1_bss_9A0; + +// -------------------------------------------------------------------------- // + +void fn_1_A0(void) +{ + Process * prc; + OSReport("******* MODELTESTObjectSetup *********\n"); + + prc = omInitObjMan(0x32, 0x2000); + omGameSysInit(prc); + + CRot.x = -30.0f; + CRot.y = 0.0f; + CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 0.0f; + Center.z = 0.0f; + CZoom = 800.0f; + + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 45.0f, 20.0f, 20000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + + lbl_1_bss_9A4 = omAddObjEx(prc, 0, 0x20, 0x20, -1, fn_1_29C); + lbl_1_bss_9A0 = omAddObjEx(prc, 0x7FDA, 0, 0, -1, omOutView); + + Hu3DBGColorSet(0x20U, 0x80U, 0x80U); + WipeCreate(1, 0, 0x1E); +} + +// -------------------------------------------------------------------------- // + +char * lbl_1_data_D8[16] = { + "target1A", + "target1B", + "target2A", + "target2B", + "target3A", + "target3B", + "target4A", + "target4B", + "target5A", + "target5B", + "target6A", + "target6B", + "target7A", + "target7B", + "target8A", + "target8B" +}; + + +HsfanimStruct00 lbl_1_data_118 = { + /* unk00 */ 40, + /* unk02 */ {0, 0}, + /* unk04 */ 50.0f, + /* unk08 */ 0.0f, + /* unk0C */ 90.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ -0.05000000074505806f, /* z */ 0.0f}, + /* unk1C */ 50.0f, + /* unk20 */ 0.800000011920929f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 4, + /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 32, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 0, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 128, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}}, + /* unk3E */ {{ /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}}, +}; + +HsfanimStruct00 lbl_1_data_168[2] = { +{ + /* unk00 */ 50, + /* unk02 */ {0, 0}, + /* unk04 */ 5.0f, + /* unk08 */ 10.0f, + /* unk0C */ 10.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, + /* unk1C */ 2.0f, + /* unk20 */ 1.0099999904632568f, + /* unk24 */ 30.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 2, + /* unk2E */ {{ /* r */ 48, /* g */ 48, /* b */ 8, /* a */ 255}, { /* r */ 64, /* g */ 48, /* b */ 8, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk3E */ {{ /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, +}, +{ + /* unk00 */ 30, + /* unk02 */ {0, 0}, + /* unk04 */ 3.299999952316284f, + /* unk08 */ 10.0f, + /* unk0C */ 0.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ -0.05000000074505806f, /* z */ 0.0f}, + /* unk1C */ 2.0f, + /* unk20 */ 1.0f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9800000190734863f, + /* unk2C */ 2, + /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 64, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk3E */ {{ /* r */ 255, /* g */ 128, /* b */ 128, /* a */ 0}, { /* r */ 255, /* g */ 64, /* b */ 32, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, +}}; + +HsfanimStruct00 lbl_1_data_208 = { + /* unk00 */ 40, + /* unk02 */ {0, 0}, + /* unk04 */ 50.0f, + /* unk08 */ 0.0f, + /* unk0C */ 180.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, + /* unk1C */ 30.0f, + /* unk20 */ 0.8999999761581421f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 4, + /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 32, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 0, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 128, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}}, + /* unk3E */ {{ /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, +}; + +HsfanimStruct00 lbl_1_data_258 = { + /* unk00 */ 30, + /* unk02 */ {0, 0}, + /* unk04 */ 50.0f, + /* unk08 */ 0.0f, + /* unk0C */ 90.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, + /* unk1C */ 30.0f, + /* unk20 */ 0.949999988079071f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 2, + /* unk2E */ {{ /* r */ 255, /* g */ 16, /* b */ 16, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 16, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk3E */ {{ /* r */ 255, /* g */ 16, /* b */ 16, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 16, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, +}; + +const Point3d lbl_1_rodata_38 = {0.0f, 0.0f, 0.0f}; +const Point3d lbl_1_rodata_44 = {0.0f, 1.0f, 0.0f}; +s16 lbl_1_bss_99C; +s16 lbl_1_bss_99A; +s16 lbl_1_bss_98A[8]; +s16 lbl_1_bss_88A[8][16]; +s16 lbl_1_bss_888; +s16 unk_bss_886; +s16 lbl_1_bss_884; +s16 lbl_1_bss_864[16]; +s16 lbl_1_bss_664[256]; +s16 lbl_1_bss_460[258]; +s16 lbl_1_bss_45A[3]; +s16 lbl_1_bss_458; +AnimData * lbl_1_bss_454; +s32 unk_bss_450; +HuObjUnk lbl_1_bss_40[20]; +void * lbl_1_bss_30[4]; +u8 lbl_1_bss_2C; +f32 lbl_1_bss_28; +s16 lbl_1_bss_24; +f32 lbl_1_bss_20; +Process * lbl_1_bss_18[2]; +Process * lbl_1_bss_14; +Process * lbl_1_bss_10; +s32 lbl_1_bss_C; +f32 lbl_1_bss_8; +static u8 unk_bss[8]; + +// -------------------------------------------------------------------------- // + +void fn_1_29C(omObjData * arg0) +{ + Point3d sp20; + Point3d sp14; + Point3d sp8; + Mtx sp2C; + s16 var_r31; + s16 temp_r27; + u32 temp_r26; + s16 temp_r3; + void * temp_r29; + AnimData * temp_r28; + f32 temp_r5; + f32 temp_f30; + s16 chrIdx; + s32 temp_r0; + + sp14 = lbl_1_rodata_38; + sp8 = lbl_1_rodata_44; + + var_r31 = Hu3DGLightCreate(0.0f, 500.0f, 1000.0f, 0.0f, -0.5f, -1.0f, 0xFFU, 0xFFU, 0xFFU); + Hu3DGLightInfinitytSet(var_r31); + Hu3DShadowCreate(45.0f, 500.0f, 8000.0f); + Hu3DShadowTPLvlSet(0.5f); + + Hu3DShadowSizeSet(0xC0U); + sp20.x = -500.0f; + sp20.y = 1000.0f; + sp20.z = 1000.0f; + Hu3DShadowPosSet(&sp20, &sp8, &sp14); + + for (var_r31 = 0; var_r31 < 1; ++var_r31) + { + chrIdx = 0; + lbl_1_bss_98A[var_r31] = CharModelCreate(chrIdx, 2); + if (var_r31 == 1) { + Hu3DModelLayerSet(lbl_1_bss_98A[var_r31], 1); + } + + lbl_1_bss_88A[var_r31][0] = CharMotionCreate(chrIdx, lbl_1_data_0[0]); + lbl_1_bss_88A[var_r31][1] = CharMotionCreate(chrIdx, lbl_1_data_0[1]); + lbl_1_bss_88A[var_r31][2] = CharMotionCreate(chrIdx, lbl_1_data_0[2]); + lbl_1_bss_88A[var_r31][3] = CharMotionCreate(chrIdx, lbl_1_data_0[3]); + lbl_1_bss_88A[var_r31][4] = CharMotionCreate(chrIdx, lbl_1_data_0[4]); + lbl_1_bss_88A[var_r31][5] = CharMotionCreate(chrIdx, lbl_1_data_0[5]); + lbl_1_bss_88A[var_r31][6] = CharMotionCreate(chrIdx, lbl_1_data_0[6]); + lbl_1_bss_88A[var_r31][7] = CharMotionCreate(chrIdx, lbl_1_data_0[7]); + lbl_1_bss_88A[var_r31][0] = CharMotionCreate(chrIdx, 0x5F004D); + CharModelMotionSet(chrIdx, lbl_1_bss_88A[var_r31][0]); + Hu3DModelAttrSet(lbl_1_bss_98A[var_r31], 0x40000001U); + Hu3DModelPosSet(lbl_1_bss_98A[var_r31], (var_r31 / 4 * 0xC8) - 100, 0.0f, -(var_r31 % 4) * 0x96); + CharMotionDataClose(chrIdx); + } + temp_r26 = OSGetTick(); + + for (var_r31 = 0; var_r31 < 8; ++var_r31) { + Hu3DModelObjMtxGet(lbl_1_bss_98A[0], "test11_tex_we-ske_R_shoe1", sp2C); + } + + temp_r5 = OSTicksToMicroseconds(OSGetTick() - temp_r26); + OSReport("time %f\n", US_TO_60TH_SEC(temp_r5)); + var_r31 = Hu3DModelCreateFile(0x700024); + Hu3DModelScaleSet(var_r31, 5.0f, 5.0f, 5.0f); + Hu3DModelShadowMapSet(var_r31); + var_r31 = Hu3DModelCreateFile(0x26001E); + temp_r27 = Hu3DJointMotion(var_r31, HuDataSelHeapReadNum(0x26002F, 0x10000000, 2)); + Hu3DMotionSet(var_r31, temp_r27); + Hu3DModelAttrSet(var_r31, 0x40000001U); + + for (var_r31 = 0; var_r31 < 10; ++var_r31) { + if (var_r31 == 0) { + lbl_1_bss_664[var_r31] = Hu3DModelCreateFile(0x700019); + } else { + lbl_1_bss_664[var_r31] = Hu3DModelLink(lbl_1_bss_664[0]); + } + Hu3DModelShadowSet(lbl_1_bss_664[var_r31]); + Hu3DModelPosSet(lbl_1_bss_664[var_r31], ((( var_r31 / 5) * 0x1F4) + 0xC8), 0.0f, (-( var_r31 % 5) * 0x12C)); + Hu3DModelAttrSet(lbl_1_bss_664[var_r31], 0x4000U); + Hu3DModelAttrSet(lbl_1_bss_664[var_r31], 0x40000001U); + } + temp_r29 = HuDataSelHeapReadNum(0x700013, 0x10000000, 2); + temp_r28 = HuSprAnimRead(temp_r29); + lbl_1_bss_99C = HuSprGrpCreate(0x14); + + for (var_r31 = 0; var_r31 < 0x14; ++var_r31) { + lbl_1_bss_99A = HuSprCreate(temp_r28, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_99C, var_r31, lbl_1_bss_99A); + HuSprPosSet(lbl_1_bss_99C, var_r31, 640.0f, 240.0f); + } + + HuSprExecLayerSet(0x40, 1); + HuSprGrpDrawNoSet(lbl_1_bss_99C, 0x40); + lbl_1_bss_458 = 0x293; + lbl_1_bss_45A[0] = MGSeqCreate(1, lbl_1_bss_458 / 60, -1, -1); + temp_r29 = HuDataSelHeapReadNum(0x120001, 0x10000000, 2); + temp_r28 = HuSprAnimRead(temp_r29); + lbl_1_bss_888 = Hu3DParManCreate(temp_r28, 0x3E8, &lbl_1_data_208); + Hu3DParManAttrSet(lbl_1_bss_888, 0x45); + Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(lbl_1_bss_888), 1U); + Hu3DParManRotSet(lbl_1_bss_888, 0.0f, 0.0f, 0.0f); + Hu3DParManVacumeSet(lbl_1_bss_888, 500.0f, 0.0f, 0.0f, 1.0f); + lbl_1_bss_884 = Hu3DParManLink(lbl_1_bss_888, &lbl_1_data_258); + Hu3DParManAttrSet(lbl_1_bss_884, 0x143); + Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(lbl_1_bss_884), 1U); + Hu3DParManVecSet(lbl_1_bss_884, 0.0f, 1.0f, 0.0f); + Hu3DParManVacumeSet(lbl_1_bss_884, 500.0f, 0.0f, 0.0f, 1.0f); + Hu3DParManColorSet(lbl_1_bss_884, 0); + temp_r29 = HuDataSelHeapReadNum(0x120002, 0x10000000, 2); + temp_r28 = HuSprAnimRead(temp_r29); + + for (var_r31 = 0; var_r31 < 10; ++var_r31) { + lbl_1_bss_864[var_r31] = Hu3DParManCreate(temp_r28, 0x1F4, &lbl_1_data_168[0]); + Hu3DParManAttrSet(lbl_1_bss_864[var_r31], 0x864); + Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(lbl_1_bss_864[var_r31]), 1U); + Hu3DParManPosSet(lbl_1_bss_864[var_r31], (100.0 * sin((M_PI * (36.0f * var_r31)) / 180.0)), 0.0f, 100.0 * cos((M_PI * (36.0f * var_r31)) / 180.0)); + Hu3DParManRotSet(lbl_1_bss_864[var_r31], -90.0f, 0.0f, 0.0f); + } + + lbl_1_bss_C = 0; + Hu3DFogSet(5000.0f, 10000.0f, 0x20U, 0x10U, 0x30U); + arg0->func = fn_1_F9C; +} + +// -------------------------------------------------------------------------- // + +s32 unrefData[] = { + 0,0,0 +}; + +// -------------------------------------------------------------------------- // + +void fn_1_F38(void) +{ + f32 var_f31; + var_f31 = 0.0f; + + while(TRUE) { + Hu3DModelRotSet(lbl_1_bss_460[0], 0.0f, var_f31, 0.0f); + var_f31 += 1.0f; + HuPrcVSleep(); + } +} + +// -------------------------------------------------------------------------- // + +static inline void HuControlCamCenter(Point3d *sp18, Point3d *sp30) { + s8 temp_r28; + + temp_r28 = HuPadSubStkX[0] & 0xF8; + if (temp_r28 != 0) { + Center.x += 0.05f * (sp30->x * temp_r28); + Center.y += 0.05f * (sp30->y * temp_r28); + Center.z += 0.05f * (sp30->z * temp_r28); + } + PSVECNormalize(sp18, sp30); + temp_r28 = -(HuPadSubStkY[0] & 0xF8); + if (temp_r28 != 0) { + Center.x += 0.05f * (sp30->x * temp_r28); + Center.y += 0.05f * (sp30->y * temp_r28); + Center.z += 0.05f * (sp30->z * temp_r28); + } +} + +// -------------------------------------------------------------------------- // + +const HuUnkF9C2 lbl_1_rodata_B8 = { + {8, 6, 4, 7, 9, 10, 11} +}; + +// -------------------------------------------------------------------------- // + +void fn_1_F9C(struct om_obj_data * omData) +{ + Point3d sp3C; + Point3d sp30; + Point3d sp24; + Point3d sp18; + f32 temp_f31; + s32 var_r31; + s16 var_r30; + HuUnkF9C2 teropPatterns; + + if (omSysExitReq != 0) { + if (lbl_1_bss_10 != 0) { + HuPrcKill(lbl_1_bss_10); + } + if (lbl_1_bss_14 != 0) { + HuPrcKill(lbl_1_bss_14); + } + if (lbl_1_bss_18[0] != 0) { + HuPrcKill(lbl_1_bss_18[0]); + } + CharModelKill(-1); + omOvlReturnEx(1, 1); + return; + } + + CRot.y += 0.1f * HuPadStkX[0]; + CRot.x += 0.1f * HuPadStkY[0]; + CZoom += HuPadTrigL[0] / 2; + CZoom -= HuPadTrigR[0] / 2; + + if (((HuPadBtn[0] & PAD_BUTTON_LEFT) != 0) && (lbl_1_data_118.unk0C < 360.0f)) { + lbl_1_data_118.unk0C += 1.0f; + } + + if (((HuPadBtn[0] & PAD_BUTTON_RIGHT) != 0) && (lbl_1_data_118.unk0C > 0.0f)) { + lbl_1_data_118.unk0C -= 1.0f; + } + + if ((HuPadBtnDown[0] & PAD_BUTTON_X) != 0) { + Hu3DParManAttrSet(lbl_1_bss_888, 0x81); + Hu3DParManAttrSet(lbl_1_bss_884, 0x81); + } + + lbl_1_bss_20 += 2.0f; + if (lbl_1_bss_20 > 360.0f) { + lbl_1_bss_20 -= 360.0f; + } + + for (var_r30 = 0; var_r30 < 10; ++var_r30) { + f32 temp_f30; + s32 var_r29; + s32 var_fake; + + while (0) { + (void) temp_f30; + (void) temp_f30; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r31; + (void) var_r30; + (void) var_r30; + (void) var_r30; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_r29; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + (void) var_fake; + } + } + + if (lbl_1_bss_458 > 0) { + MGSeqParamSet(lbl_1_bss_45A[0], 1, lbl_1_bss_458 / 60); + --lbl_1_bss_458; + if (lbl_1_bss_458 <= 0) { + MGSeqParamSet(lbl_1_bss_45A[0], 2, -1); + } + } + + sp3C.x = Center.x + (CZoom * (sin((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0))); + sp3C.y = (Center.y + (CZoom * -sin((M_PI * CRot.x) / 180.0))); + sp3C.z = (Center.z + (CZoom * (cos((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0)))); + sp30.x = Center.x - sp3C.x; + sp30.y = Center.y - sp3C.y; + sp30.z = Center.z - sp3C.z; + sp24.x = (sin((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + sp24.y = cos((M_PI * CRot.x) / 180.0); + sp24.z = (cos((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + temp_f31 = CRot.z; + + sp18.x = sp24.x * (sp30.x * sp30.x + (1.0f - sp30.x * sp30.x) * cos((M_PI * temp_f31) / 180.0)) + + sp24.y * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.z * sin((M_PI * temp_f31) / 180.0)) + + sp24.z * (sp30.x * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.y * sin((M_PI * temp_f31) / 180.0)); + + sp18.y = sp24.y * (sp30.y * sp30.y + (1.0f - sp30.y * sp30.y) * cos((M_PI * temp_f31) / 180.0)) + + sp24.x * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.z * sin((M_PI * temp_f31) / 180.0)) + + sp24.z * (sp30.y * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.x * sin((M_PI * temp_f31) / 180.0)); + + sp18.z = sp24.z * (sp30.z * sp30.z + (1.0f - sp30.z * sp30.z) * cos((M_PI * temp_f31) / 180.0)) + + (sp24.x * (sp30.x * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) - sp30.y * sin((M_PI * temp_f31) / 180.0)) + + sp24.y * (sp30.y * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) + sp30.x * sin((M_PI * temp_f31) / 180.0))); + + PSVECCrossProduct(&sp24, &sp30, &sp30); + PSVECNormalize(&sp30, &sp30); + + if (lbl_1_bss_C == 0) { + HuControlCamCenter(&sp18, &sp30); + } + + teropPatterns = lbl_1_rodata_B8; + + if ((HuPadBtnDown[0] & PAD_BUTTON_X) != 0) { + ++lbl_1_bss_24; + if (lbl_1_bss_24 >= 7) { + lbl_1_bss_24 = 0; + } + } + + if ((HuPadBtnDown[0] & PAD_BUTTON_B) != 0) { + var_r30 = MGSeqCreate(teropPatterns.unk0[lbl_1_bss_24], 0); + } + if ((HuPadBtnDown[0] & PAD_BUTTON_A) != 0) { + var_r30 = MGSeqCreate(teropPatterns.unk0[lbl_1_bss_24], 2); + } + if ((HuPadBtnDown[0] & PAD_BUTTON_Y) != 0) { + var_r30 = MGSeqCreate(0xE, 0x3B); + } + + if ((HuPadBtnDown[0] & (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN)) != 0) { + if ((HuPadBtnDown[0] & PAD_BUTTON_UP) != 0) { + MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, -1, -1, -1); + } + if ((HuPadBtnDown[0] & PAD_BUTTON_LEFT) != 0) { + MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, -1, -1); + } + if ((HuPadBtnDown[0] & PAD_BUTTON_DOWN) != 0) { + MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, GWPlayerCfg[2].character, -1); + } + if ((HuPadBtnDown[0] & PAD_BUTTON_RIGHT) != 0) { + MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, GWPlayerCfg[1].character, GWPlayerCfg[2].character, GWPlayerCfg[3].character); + } + } + fontcolor = 5; + print8(0x10, 0x190, 1.5f, "Terop Pattern%d", lbl_1_bss_24 + 1); + lbl_1_bss_8 += 5.0f; + if (lbl_1_bss_8 > 360.0f) { + lbl_1_bss_8 -= 360.0f; + } +} + +// -------------------------------------------------------------------------- // + +void fn_1_20F4(void) +{ + s16 temp_r3; + s16 var_r29; + HsfObject * temp_r3_2; + HuObjUnk * temp_r31; + Mtx spC0; + Vec sp24; + Mtx sp90; + Mtx sp60; + Mtx sp30; + Vec sp18; + Vec spC; + f32 temp_f27; + f32 var_f29; // ! - uninitialized + s16 var_r27; // ! - uninitialized + s32 var_r26; + f32 temp_f30; + + temp_r3 = Hu3DModelCreateFile(0x6C0000); + Hu3DModelPosSet(temp_r3, 0.0f, 0.0f, 100.0f); + + for (var_r29 = 0; var_r29 < 16; ++var_r29) + { + OSReport("%s\n", lbl_1_data_D8[var_r29]); + temp_r3_2 = Hu3DModelObjPtrGet(temp_r3, lbl_1_data_D8[var_r29]); + lbl_1_bss_40[var_r29].obj = temp_r3_2; + + Hu3DMotionNoMotSet(temp_r3, lbl_1_data_D8[var_r29], 0x380); + + lbl_1_bss_40[var_r29].pos.x = temp_r3_2->data.base.pos.x; + lbl_1_bss_40[var_r29].pos.y = temp_r3_2->data.base.pos.y; + lbl_1_bss_40[var_r29].pos.z = temp_r3_2->data.base.pos.z; + lbl_1_bss_40[var_r29].rot.x = temp_r3_2->data.base.rot.x; + lbl_1_bss_40[var_r29].rot.y = temp_r3_2->data.base.rot.y; + lbl_1_bss_40[var_r29].rot.z = temp_r3_2->data.base.rot.z; + lbl_1_bss_40[var_r29].scale.x = temp_r3_2->data.base.scale.x; + lbl_1_bss_40[var_r29].scale.y = temp_r3_2->data.base.scale.y; + lbl_1_bss_40[var_r29].scale.z = temp_r3_2->data.base.scale.z; + + OSReport( + "%d:(%3.2f,%3.2f,%3.2f),(%3.2f,%3.2f,%3.2f)\n", + var_r29, + temp_r3_2->data.base.pos.x, + temp_r3_2->data.base.pos.y, + temp_r3_2->data.base.pos.z, + temp_r3_2->data.base.rot.x, + temp_r3_2->data.base.rot.y, + temp_r3_2->data.base.rot.z + ); + } + while (TRUE) + { + Hu3DModelObjMtxGet(temp_r3, "ske_skirt", sp30); + + for (var_r29 = 0; var_r29 < 8; ++var_r29) + { + temp_r31 = &lbl_1_bss_40[var_r29 * 2]; + temp_r31->obj->data.curr.rot.x = temp_r31->rot.x; + temp_r31->obj->data.curr.rot.y = temp_r31->rot.y; + temp_r31->obj->data.curr.rot.z = temp_r31->rot.z; + + Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[var_r29 * 2], sp90); + + temp_r31 = &lbl_1_bss_40[(var_r29 * 2) + 1]; + temp_r31->obj->data.curr.rot.x = temp_r31->rot.x; + temp_r31->obj->data.curr.rot.y = temp_r31->rot.y; + temp_r31->obj->data.curr.rot.z = temp_r31->rot.z; + + Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[(var_r29 * 2) + 1], spC0); + Hu3DMtxTransGet(spC0, &sp18); + PSMTXInverse(sp30, sp60); + Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[(var_r29 * 2) + 1], spC0); + Hu3DMtxTransGet(spC0, &sp18); + PSMTXMultVec(sp60, &sp18, &sp18); + + temp_f27 = 180.0 * (atan2(sp18.z, sp18.x) / M_PI); + temp_r31 = &lbl_1_bss_40[var_r29 * 2]; + temp_r31->obj->data.curr.rot.x = temp_r31->rot.x + (var_f29 * (2.0 * (sin((M_PI * temp_f27) / 180.0) * sin((M_PI * var_r27) / 180.0)))); + temp_r31->obj->data.curr.rot.y = temp_r31->rot.y; + temp_r31->obj->data.curr.rot.z = temp_r31->rot.z + (var_f29 * cos((M_PI * var_r27) / 180.0)); + + Hu3DModelObjMtxGet(temp_r3, lbl_1_data_D8[(var_r29 * 2) + 1], spC0); + Hu3DMtxTransGet(spC0, &sp24); + fn_1_28F8(&sp24, &spC); + HuSprPosSet(lbl_1_bss_99C, var_r29, spC.x, spC.y); + } + + var_r27 += 5; + if (var_r27 > 0x168) { + var_r27 -= 0x168; + } + + if (HuPadSubStkX[1] < 0) { + var_r26 = -HuPadSubStkX[1]; + } else { + var_r26 = HuPadSubStkX[1]; + } + + + if (var_r26 < 0xA && ABS(HuPadSubStkY[1]) < 0xA) { + var_r27 = 0x168; + var_f29 = 0.0f; + } else { + var_r27 = 180.0 * (atan2(HuPadSubStkX[1], HuPadSubStkY[1]) / M_PI); + temp_f30 = (HuPadSubStkX[1] * HuPadSubStkX[1]) + (HuPadSubStkY[1] * HuPadSubStkY[1]); + var_f29 = sqrtf(temp_f30); + if (var_f29 > 80.0f) { + var_f29 = 80.0f; + } + } + + HuPrcVSleep(); + } +} + +// -------------------------------------------------------------------------- // + +void fn_1_28F8(Point3d * arg0, Point3d * arg1) +{ + Point3d spC; + Mtx sp18; + CameraData * cam; + f32 temp_f31; + f32 temp_f30; + + cam = &Hu3DCamera[0]; + C_MTXLookAt(sp18, &cam->pos, &cam->up, &cam->target); + PSMTXMultVec(sp18, arg0, &spC); + + temp_f31 = (1.2f * (spC.z * (sin((M_PI * (cam->fov / 2)) / 180.0) / (cos((M_PI * (cam->fov / 2)) / 180.0))))); + temp_f30 = (spC.z * (sin((M_PI * (cam->fov / 2)) / 180.0) / (cos((M_PI * (cam->fov / 2)) / 180.0)))); + arg1->x = 288.0f + (spC.x * (288.0f / -temp_f31)); + arg1->y = 240.0f + (spC.y * (240.0f / temp_f30)); +} + +void fn_1_2AFC(void) { + s16 temp_r3; + + HuWinInit(1); + temp_r3 = HuWinCreate(-10000.0f, -10000.0f, 480, 0x80, 0); + HuWinMesSpeedSet(temp_r3, 3); + + while (TRUE) { + HuWinMesSet(temp_r3, 0x200011); + HuWinMesWait(temp_r3); + } +} + +// -------------------------------------------------------------------------- // + +// unreferenced data +u8 lbl_1_data_322[54] = { + 255, 255, 255, 255, 0, 0, 60, 68, 155, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 68, 155, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, 0, +}; + +// -------------------------------------------------------------------------- // + +void fn_1_2B68(ModelData * mdl, Mtx arg1) +{ + GXColor sp17; + Mtx sp150; + Mtx sp120; + Mtx spF0; + Mtx spC0; + Mtx sp90; + GXTexObj sp30; + f32 sp18[2][3]; + Mtx44 sp50; + AnimBmpData * sp10; + f32 temp_f31; + f32 var_f30; // ! - uninitialized + f32 var_f29; // ! - uninitialized + f32 var_f28; // ! - uninitialized + f32 var_f27; // ! - uninitialized + + if (!lbl_1_bss_30[0]) { + lbl_1_bss_30[0] = HuMemDirectMallocNum(HEAP_SYSTEM, FB_SIZE(640, 480), 0x10000000); + } + + GXSetTexCopySrc(0, 0, 640, 480); + GXSetTexCopyDst(640, 480, GX_TF_RGB565, GX_FALSE); + GXCopyTex(lbl_1_bss_30[0], GX_FALSE); + DCFlushRangeNoSync(lbl_1_bss_30[0], FB_SIZE(640, 480)); + C_MTXOrtho(sp50, 0.0f, 480.0f, 0.0f, 576.0f, 0.0f, 10.0f); + GXSetProjection(sp50, GX_ORTHOGRAPHIC); + GXSetViewport(0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + GXSetScissor(0, 0, 640, 480); + GXInvalidateTexAll(); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxDesc(GX_VA_NRM, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0U); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0U); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0U); + GXSetCullMode(GX_CULL_NONE); + GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3CU, 0U, 0x7DU); + GXSetNumTevStages(1); + + sp17.r = + sp17.g = + sp17.b = + sp17.a = 255; + GXSetChanMatColor(GX_COLOR0A0, sp17); + + sp17.r = + sp17.g = + sp17.b = 128; + sp17.a = 255; + GXSetChanAmbColor(GX_COLOR0A0, sp17); + + GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE); + GXSetNumChans(1U); + GXSetChanCtrl(GX_COLOR0, 1U, GX_SRC_REG, GX_SRC_VTX, 1U, GX_DF_CLAMP, GX_AF_SPOT); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + GXSetAlphaCompare(GX_GEQUAL, 1U, GX_AOP_AND, GX_GEQUAL, 1U); + GXSetZCompLoc(0U); + PSMTXIdentity(arg1); + GXLoadPosMtxImm(arg1, 0U); + + PSMTXInvXpose(arg1, sp90); + GXLoadNrmMtxImm(sp90, 0); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + + sp10 = lbl_1_bss_454->bmp; + lbl_1_bss_2C += 1; + HuSprTexLoad(lbl_1_bss_454, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR); + + PPCSync(); + GXInitTexObj(&sp30, lbl_1_bss_30[0], 0x280U, 0x1E0U, 4U, GX_CLAMP, GX_CLAMP, 0U); + GXInitTexObjLOD(&sp30, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0U, 0U, GX_ANISO_1); + GXLoadTexObj(&sp30, GX_TEXMAP0); + GXSetNumIndStages(1U); + + PSMTXScale(sp150, 0.1f, 0.1f, 0.0f); + sp18[0][0] = sp150[0][0]; + sp18[0][1] = sp150[0][1]; + sp18[0][2] = 0.0f; + sp18[1][0] = sp150[1][0]; + sp18[1][1] = sp150[1][1]; + sp18[1][2] = 0.0f; + + PSMTXRotRad(spF0, 0x58, -1.5707964f); + mtxRot(spF0, 0.0f, 0.0f, 0.0f); + temp_f31 = 0.0015625f; + PSMTXScale(sp120, temp_f31, temp_f31, temp_f31); + PSMTXConcat(sp120, spF0, sp150); + PSMTXTrans(spC0, 0.5f, 0.0f, 0.5f); + GXLoadTexMtxImm(sp150, 0x1EU, GX_MTX2x4); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_POS, 0x1EU, 0U, 0x7DU); + GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD0, GX_TEXMAP1); + GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_4, GX_ITS_4); + GXSetIndTexMtx(GX_ITM_0, sp18, 0); + GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, 1, 0, GX_ITM_0); + + lbl_1_bss_28 += 5.0f; + if (lbl_1_bss_28 > 360.0f) { + lbl_1_bss_28 -= 360.0f; + } + + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + + GXPosition3f32(0.0f, 0.0f, 0.0f); + GXTexCoord2f32(0.0f, 1.0f); + GXNormal3f32(0.0f, var_f30 / 640.0f, var_f29 / 480.0f); + + GXPosition3f32(640.0f, 0.0f, 0.0f); + GXTexCoord2f32(0.0f, 1.0f); + GXNormal3f32(0.0f, var_f28 / 640.0f, var_f29 / 480.0f); + + GXPosition3f32(640.0f, 480.0f, 0.0f); + GXTexCoord2f32(0.0f, 1.0f); + GXNormal3f32(0.0f, var_f28 / 640.0f, var_f27 / 480.0f); + + GXPosition3f32(0.0f, 480.0f, 0.0f); + GXTexCoord2f32(0.0f, 1.0f); + GXNormal3f32(0.0f, var_f30 / 640.0f, var_f27 / 480.0f); + + GXEnd(); + GXSetNumIndStages(0U); + GXSetTevDirect(GX_TEVSTAGE0); + GXSetTevDirect(GX_TEVSTAGE1); +} + +// -------------------------------------------------------------------------- // \ No newline at end of file diff --git a/src/REL/modeltestDll/modeltest00.c b/src/REL/modeltestDll/modeltest00.c new file mode 100644 index 00000000..e69de29b diff --git a/src/REL/modeltestDll/modeltest01.c b/src/REL/modeltestDll/modeltest01.c new file mode 100644 index 00000000..e69de29b From c9227f85a775303e27ee67c31ae85e8baba84178 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 6 Feb 2024 20:38:32 -0600 Subject: [PATCH 012/106] Decompile rest of sequences --- config/GMPE01_00/symbols.txt | 78 ++--- src/game/minigame_seq.c | 614 ++++++++++++++++++++++++++++++++--- 2 files changed, 604 insertions(+), 88 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index e496b917..c3234c1d 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -4946,9 +4946,9 @@ wordMgTbl = .data:0x8012F444; // type:object size:0x18 scope:local letterOfs$909 = .data:0x8012F45C; // type:object size:0x40 scope:local letterOfs$1386 = .data:0x8012F49C; // type:object size:0x1C scope:local letterOfs$1761 = .data:0x8012F4B8; // type:object size:0x38 scope:local -charMKoopaNameE = .data:0x8012F4F0; // type:object size:0xA scope:local data:string +lbl_8012F4F0 = .data:0x8012F4F0; // type:object size:0xA scope:local data:string winCharNameTbl = .data:0x8012F4FC; // type:object size:0x78 scope:local -wordChampionE = .data:0x8012F574; // type:object size:0xA scope:local data:string +lbl_8012F574 = .data:0x8012F574; // type:object size:0xA scope:local data:string winWordTbl = .data:0x8012F580; // type:object size:0x18 scope:local winPosOfs = .data:0x8012F598; // type:object size:0x50 scope:local practiceTbl = .data:0x8012F5E8; // type:object size:0xAC scope:local @@ -5522,7 +5522,7 @@ omDLLinfoTbl = .bss:0x801901E0; // type:object size:0x50 sndFXBuf = .bss:0x80190230; // type:object size:0x200 scope:local charVoiceGroupStat = .bss:0x80190430; // type:object size:0x20 scope:local seqWorkData = .bss:0x80190450; // type:object size:0x400 scope:local data:4byte -seqMaxTime = .bss:0x80190850; // type:object size:0x10 scope:local data:2byte +winnerNameW = .bss:0x80190850; // type:object size:0x10 scope:local data:2byte esprite = .bss:0x80190860; // type:object size:0x600 data:2byte espanim = .bss:0x80190E60; // type:object size:0x1200 data:4byte lbl_80192060 = .bss:0x80192060; // type:object size:0x100 @@ -5790,42 +5790,42 @@ wordFinishJ = .sdata:0x801D34CC; // type:object size:0x8 scope:local wordDrawJ = .sdata:0x801D34D4; // type:object size:0x6 scope:local wordFinishE = .sdata:0x801D34DA; // type:object size:0x8 scope:local data:string wordDrawE = .sdata:0x801D34E2; // type:object size:0x6 scope:local data:string -charMarioNameJ = .sdata:0x801D34E8; // type:object size:0x4 scope:local -charMarioNameE = .sdata:0x801D34EC; // type:object size:0x6 scope:local data:string -charLuigiNameJ = .sdata:0x801D34F2; // type:object size:0x6 scope:local -charLuigiNameE = .sdata:0x801D34F8; // type:object size:0x6 scope:local data:string -charPeachNameJ = .sdata:0x801D34FE; // type:object size:0x5 scope:local -charPeachNameE = .sdata:0x801D3503; // type:object size:0x6 scope:local data:string -charYoshiNameJ = .sdata:0x801D3509; // type:object size:0x5 scope:local -charYoshiNameE = .sdata:0x801D350E; // type:object size:0x6 scope:local data:string -charWarioNameJ = .sdata:0x801D3514; // type:object size:0x4 scope:local -charWarioNameE = .sdata:0x801D3518; // type:object size:0x6 scope:local data:string -charDonkeyNameJ = .sdata:0x801D351E; // type:object size:0x6 scope:local -charDonkeyNameE = .sdata:0x801D3524; // type:object size:0x5 scope:local data:string -charDaisyNameJ = .sdata:0x801D3529; // type:object size:0x7 scope:local -charDaisyNameE = .sdata:0x801D3530; // type:object size:0x6 scope:local data:string -charWaluigiNameJ = .sdata:0x801D3536; // type:object size:0x7 scope:local -charWaluigiNameE = .sdata:0x801D353D; // type:object size:0x8 scope:local data:string -charKoopaNameJ = .sdata:0x801D3545; // type:object size:0x5 scope:local -charKoopaNameE = .sdata:0x801D354A; // type:object size:0x7 scope:local data:string -charKinopioNameJ = .sdata:0x801D3551; // type:object size:0x6 scope:local -charKinopioNameE = .sdata:0x801D3557; // type:object size:0x5 scope:local data:string -charHeihoNameJ = .sdata:0x801D355C; // type:object size:0x5 scope:local -charHeihoNameE = .sdata:0x801D3561; // type:object size:0x8 scope:local data:string -charTeresaNameJ = .sdata:0x801D3569; // type:object size:0x4 scope:local -charTeresaNameE = .sdata:0x801D356D; // type:object size:0x4 scope:local data:string -charNoko2NameJ = .sdata:0x801D3571; // type:object size:0x5 scope:local -charNoko2NameE = .sdata:0x801D3576; // type:object size:0x6 scope:local data:string -charMKoopaNameJ = .sdata:0x801D357C; // type:object size:0x7 scope:local -charKuriboNameJ = .sdata:0x801D3583; // type:object size:0x6 scope:local -charKuriboNameJ = .sdata:0x801D3589; // type:object size:0x7 scope:local data:string -wordWinJ = .sdata:0x801D3590; // type:object size:0x3 scope:local -wordWinE = .sdata:0x801D3593; // type:object size:0x5 scope:local data:string -wordLoseJ = .sdata:0x801D3598; // type:object size:0x6 scope:local -wordLoseE = .sdata:0x801D359E; // type:object size:0x5 scope:local data:string -wordChampionJ = .sdata:0x801D35A3; // type:object size:0x7 scope:local -wordPauseJ = .sdata:0x801D35AA; // type:object size:0x6 scope:local -wordPauseE = .sdata:0x801D35B0; // type:object size:0x6 scope:local data:string +lbl_801D34E8 = .sdata:0x801D34E8; // type:object size:0x4 scope:local +lbl_801D34EC = .sdata:0x801D34EC; // type:object size:0x6 scope:local data:string +lbl_801D34F2 = .sdata:0x801D34F2; // type:object size:0x6 scope:local +lbl_801D34F8 = .sdata:0x801D34F8; // type:object size:0x6 scope:local data:string +lbl_801D34FE = .sdata:0x801D34FE; // type:object size:0x5 scope:local +lbl_801D3503 = .sdata:0x801D3503; // type:object size:0x6 scope:local data:string +lbl_801D3509 = .sdata:0x801D3509; // type:object size:0x5 scope:local +lbl_801D350E = .sdata:0x801D350E; // type:object size:0x6 scope:local data:string +lbl_801D3514 = .sdata:0x801D3514; // type:object size:0x4 scope:local +lbl_801D3518 = .sdata:0x801D3518; // type:object size:0x6 scope:local data:string +lbl_801D351E = .sdata:0x801D351E; // type:object size:0x6 scope:local +lbl_801D3524 = .sdata:0x801D3524; // type:object size:0x5 scope:local data:string +lbl_801D3529 = .sdata:0x801D3529; // type:object size:0x7 scope:local +lbl_801D3530 = .sdata:0x801D3530; // type:object size:0x6 scope:local data:string +lbl_801D3536 = .sdata:0x801D3536; // type:object size:0x7 scope:local +lbl_801D353D = .sdata:0x801D353D; // type:object size:0x8 scope:local data:string +lbl_801D3545 = .sdata:0x801D3545; // type:object size:0x5 scope:local +lbl_801D354A = .sdata:0x801D354A; // type:object size:0x7 scope:local data:string +lbl_801D3551 = .sdata:0x801D3551; // type:object size:0x6 scope:local +lbl_801D3557 = .sdata:0x801D3557; // type:object size:0x5 scope:local data:string +lbl_801D355C = .sdata:0x801D355C; // type:object size:0x5 scope:local +lbl_801D3561 = .sdata:0x801D3561; // type:object size:0x8 scope:local data:string +lbl_801D3569 = .sdata:0x801D3569; // type:object size:0x4 scope:local +lbl_801D356D = .sdata:0x801D356D; // type:object size:0x4 scope:local data:string +lbl_801D3571 = .sdata:0x801D3571; // type:object size:0x5 scope:local +lbl_801D3576 = .sdata:0x801D3576; // type:object size:0x6 scope:local data:string +lbl_801D357C = .sdata:0x801D357C; // type:object size:0x7 scope:local +lbl_801D3583 = .sdata:0x801D3583; // type:object size:0x6 scope:local +lbl_801D3589 = .sdata:0x801D3589; // type:object size:0x7 scope:local data:string +lbl_801D3590 = .sdata:0x801D3590; // type:object size:0x3 scope:local +lbl_801D3593 = .sdata:0x801D3593; // type:object size:0x5 scope:local data:string +lbl_801D3598 = .sdata:0x801D3598; // type:object size:0x6 scope:local +lbl_801D359E = .sdata:0x801D359E; // type:object size:0x5 scope:local data:string +lbl_801D35A3 = .sdata:0x801D35A3; // type:object size:0x7 scope:local +lbl_801D35AA = .sdata:0x801D35AA; // type:object size:0x6 scope:local +lbl_801D35B0 = .sdata:0x801D35B0; // type:object size:0x6 scope:local data:string pauseStrTbl = .sdata:0x801D35B8; // type:object size:0x8 scope:local lbl_801D35C0 = .sdata:0x801D35C0; // type:object size:0x8 lbl_801D35C8 = .sdata:0x801D35C8; // type:object size:0x8 diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index 089c95fb..14923a6d 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -9,8 +9,11 @@ #include "stdarg.h" +#undef abs + #define ABS(x) (((x) < 0) ? -(x) : (x)) + void MGSeqStub(void); void MGSeqPauseEnableCtrl(s32 flag); @@ -119,23 +122,22 @@ static s16 mgSeqTypeTbl[9] = { }; static char lbl_8012F336[] = { - 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, - 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, - 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, - 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, - 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, - 0xD9, 0xDA, 0xDB, 0xDC, 0xA6, 0xDD, 0xA7, 0xA8, - 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB6, - 0xB7, 0xB8, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xCA, 0xCB, 0xCC, - 0xCD, 0xCE, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0x21, - 0x3F, 0xB0, 0x00 + "アイウエオカキク" + "ケコサシスセソタ" + "チツテトナニヌネ" + "ノハヒフヘホマミ" + "ムメモヤユヨラリ" + "ルレロワヲンァィ" + "ゥェォャュョッカ" + "キクコサシスセソ" + "タチツテトハヒフ" + "ヘホハヒフヘホ" + "!?ー" }; static char lbl_8012F389[] = "x first\n"; static char lbl_8012F392[] = "y first\n"; -static s16 seqMaxTime[8]; static SeqWork seqWorkData[8]; static s16 seqTimer; @@ -284,7 +286,6 @@ s16 MGSeqCreate(s16 type, ...) type = mgSeqTypeTbl[mgInfoTbl[GWSystem.mg_next].type]; } } - //FIXME: Fix truncation of type ret = CreateSeq(type, params); va_end(params); return ret; @@ -766,53 +767,42 @@ static int SeqUpdateType2(SeqWork *work) static char seqFontAlphaTbl[] = { - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', - 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', - 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', - 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', - 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', - 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', - 'w', 'x', 'y', 'z', '\0' + "ABCDEFGH" + "IJKLMNOP" + "QRSTUVWX" + "YZabcdef" + "ghijklmn" + "opqrstuv" + "wxyz" }; static char seqFontKanaTbl[] = { - 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, - 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, - 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, - 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, - 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, - 0xD9, 0xDA, 0xDB, 0xDC, 0xA6, 0xDD, 0xA7, 0xA8, - 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB6, - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, - 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xCA, 0xCB, - 0xCC, 0xCD, 0xCE, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, - 0xB0, 0x00 + "アイウエオカキク" + "ケコサシスセソタ" + "チツテトナニヌネ" + "ノハヒフヘホマミ" + "ムメモヤユヨラリ" + "ルレロワヲンァィ" + "ゥェォャュョッカ" + "キクケコサシスセ" + "ソタチツテトハヒ" + "フヘホハヒフヘホ" + "ー" }; -static char seqFontNumTbl[] = { - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', '\0' -}; +static char seqFontNumTbl[] = "0123456789"; static s32 *letterBufTbl[5] = { }; static char wordStartE[] = "START!"; -static char seqPunctTbl[] = { - '!', '?', '\0' -}; +static char seqPunctTbl[] = "!?"; -static char wordStartJ[] = { - 0xBD, 0xC0, 0xB0, 0xC4, 0x21, 0x00 -}; +static char wordStartJ[] = "スタート!"; -static char wordFinishJ[] = { - 0xCC, 0xA8, 0xC6, 0xAF, 0xBC, 0xAD, 0x21, 0x00 -}; +static char wordFinishJ[] = "フィニッシュ!"; -static char wordDrawJ[] = { - 0xCB, 0xB7, 0xDC, 0xB9, 0x21, 0x00 -}; +static char wordDrawJ[] = "ヒキワケ!"; static char wordFinishE[] = "FINISH!"; static char wordDrawE[] = "DRAW!"; @@ -923,11 +913,11 @@ static AnimData *SeqLoadFontChar(char *str, s16 flags) return HuSprAnimRead(SeqReadFile(data_num)); } } - if(str[1] == 222) { + if(str[1] == '゙') { list = seqFontKanaTbl; list += 55; id = 55; - } else if(str[1] == 223) { + } else if(str[1] == '゚') { list = seqFontKanaTbl; list += 75; id = 75; @@ -2658,6 +2648,532 @@ static int SeqUpdateDraw(SeqWork *work) return 1; } +static char *winCharNameTbl[] = { + "マリオ", + "MARIO", + "ルイージ", + "LUIGI", + "ピーチ", + "PEACH", + "ヨッシー", + "YOSHI", + "ワリオ", + "WARIO", + "ドンキー", + " DK ", + "デイジー", + "DAISY", + "ワルイージ", + "WALUIGI", + "クッパ", + "BOWSER", + "キノピオ", + "TOAD", + "ヘイホー", + "SHY GUY", + "テレサ", + "BOO", + "ノコノコ", + "KOOPA", + "ミニクッパ", + "KOOPA KID", + "クリボー", + "GOOMBA" +}; + +static char *winWordTbl[] = { + "カチ", + "WON", + "ハイボク", + "LOSE", + "ユウショウ!", + "CHAMPION!" +}; + +static s16 winPosOfs[][5][2] = { + { + { 114, 0 }, + { -144, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 } + }, + { + { 0, 35 }, + { -144, -35 }, + { 144, -35 }, + { 0, 0 }, + { 0, 0 } + }, + { + { 0, 105 }, + { 0, -105 }, + { -144, 0 }, + { 144, 0 }, + { 0, 0 } + }, + { + { 0, 105 }, + { -144, -105 }, + { 144, -105 }, + { -144, 0 }, + { 144, 0 } + } +}; + +static s16 winnerNameW[8]; + +#define GET_WIN_WORD_OFS() ((seqLanguage == 0) ? 0 : 1) +#define GET_WIN_KANAF() ((seqLanguage == 0) ? 1 : 0) + + +static int SeqInitWin(SeqWork *work, va_list params) +{ + s32 win_type = va_arg(params, int); + s16 word_idx; + s16 word_grp; + s32 i; + s32 j; + s32 num_winners; + float word_w; + float word_x; + if(win_type < 0 && win_type >= 6) { + return 0; + } + if(win_type == 3) { + word_idx = GET_WIN_WORD_OFS(); + } else { + if(win_type == 4) { + word_idx = GET_WIN_WORD_OFS()+2; + } else { + word_idx = GET_WIN_WORD_OFS()+4; + } + } + word_grp = SeqMakeWord(work, winWordTbl[word_idx], GET_WIN_KANAF()); + winnerNameW[0] = work->work_s16[3]*50; + for(i=0; iwork_s16[3]; i++) { + HuSprPosSet(work->spr_grp[word_grp], i, 25.0f+((i*50)-(0.5f*(work->work_s16[3]*50))), 0.0f); + HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR); + } + num_winners = 0; + work->work_float[1] = 1.0f; + for(j=0; j<4; j++) { + s32 winner = va_arg(params, int); + if(winner < 0) { + continue; + } + word_grp = SeqMakeWord(work, winCharNameTbl[(winner*2)+GET_WIN_WORD_OFS()], 0); + if(seqLanguage != 0) { + char *name = winCharNameTbl[(winner*2)+GET_WIN_WORD_OFS()]; + word_w = 0.0f; + for(i=word_w; iwork_s16[3]; i++, name++) { + if(*name == ' ') { + word_w += 30.0f; + } else { + word_w += 50.0f; + } + } + name = winCharNameTbl[(winner*2)+GET_WIN_WORD_OFS()]; + word_x = 0.0f; + for(i=word_x; iwork_s16[3]; i++, name++) { + HuSprPosSet(work->spr_grp[word_grp], i, 25.0+(word_x-(0.5*word_w)), 0.0f); + HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR); + if(*name == ' ') { + word_x += 30.0f; + } else { + word_x += 50.0f; + } + } + if(work->work_float[1] == 0.6f || winner == 7 || winner == 13 || winner == 10) { + work->work_float[1] = 0.6f; + } else { + work->work_float[1] = 0.75f; + } + winnerNameW[num_winners+1] = word_w; + } else { + if(winner == 7 || winner == 13) { + for(i=0;iwork_s16[3]; i++) { + HuSprPosSet(work->spr_grp[word_grp], i, 26.0f+((i*52)-(0.5f*(work->work_s16[3]*52))), 0.0f); + HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR); + } + work->work_float[1] = 0.8f; + winnerNameW[num_winners+1] = work->work_s16[3]*52; + } else { + work->work_float[1] = 1.0f; + winnerNameW[num_winners+1] = work->work_s16[3]*56; + } + + } + num_winners++; + } + if(num_winners == 0) { + return 0; + } + work->work_s16[1] = 0; + work->work_s16[3] = num_winners+1; + work->work_float[0] = 0.0f; + work->type = 0; + for(j=0; jwork_float[1])); + if(j == 0) { + word_x = (((576.0f-word_x)/2.0f)+(word_x-(winnerNameW[0]/2)))-288.0f; + } else { + word_x = (((576.0f-word_x)/2.0f)+(winnerNameW[1]/2))-288.0f; + } + } else { + if(abs(winPosOfs[num_winners-1][j][0]) == 144.0f) { + if(winnerNameW[j]+32 < 288.0f) { + word_x = 176.0f; + } else { + word_x = 32.0f+((winnerNameW[j]*work->work_float[1])/2.0f); + } + if(winPosOfs[num_winners-1][j][0] < 0) { + word_x = -(288.0f-word_x); + } else { + word_x = (576.0f-word_x)-288.0f; + } + } else { + word_x = winPosOfs[num_winners-1][j][0]; + } + } + HuSprGrpPosSet(work->spr_grp[j], 288.0f+word_x, 240.0f+winPosOfs[num_winners-1][j][1]); + } + if(seqPauseF) { + work->type = 1; + num_winners++; + for(j=0; jspr_grp[j], 0, SPRITE_ATTR_HIDDEN); + } + } else { + work->param[0] = 3; + } + return 1; +} + + +static int SeqUpdateWin(SeqWork *work) +{ + s32 idx; + float tp_lvl; + s16 group = work->spr_grp[0]; + if(work->param[0] != 0 && work->type != -1) { + switch(work->param[0]) { + case 2: + if(work->param[1] != -1) { + (void)work; //HACK: to introduce extra branch + } else { + work->type = -1; + work->work_float[0] = 0.0f; + } + work->param[0] = 0; + break; + + case 1: + work->time_max = work->param[1]; + work->param[0] = 0; + break; + + case 3: + work->type = 1; + work->param[0] = 0; + break; + + default: + work->param[0] = 0; + break; + } + } + work->time += seqSpeed; + if(work->time >= work->time_max && work->type != -1) { + work->stat |= 0x4; + work->type = -1; + work->work_float[0] = 0.0f; + } + if(work->type) { + switch(work->type) { + case 1: + { + float time; + float scale; + float zrot; + if(work->time <= 20) { + time = work->time; + zrot = 365.0f*(time/20.0f); + scale = sin(M_PI*(90.0f*(time/20.0f))/180.0); + HuSprGrpScaleSet(work->spr_grp[0], scale, scale); + HuSprGrpZRotSet(work->spr_grp[0], zrot); + scale = 1.0+(5.0*cos(M_PI*(90.0f*(time/20.0f))/180.0)); + tp_lvl = time/20.0f; + for(idx=1; idxwork_s16[3]; idx++) { + HuSprGrpTPLvlSet(work->spr_grp[idx], tp_lvl); + HuSprGrpScaleSet(work->spr_grp[idx], scale*work->work_float[1], scale); + } + } + if(work->time > 20 && work->time <= 22) { + HuSprGrpZRotSet(work->spr_grp[0], 0.0f); + for(idx=1; idxwork_s16[3]; idx++) { + float pos_x; + float ofs[2]; + if(work->time == 21) { + ofs[0] = ((idx & 0x1)*2)-1; + ofs[1] = (idx & 0x2) ? 2 : -1; + } else { + ofs[0] = ofs[1] = 0.0f; + } + if(work->work_s16[3] == 2) { + pos_x = winnerNameW[1]+winnerNameW[0]+32; + pos_x = (((576.0f-pos_x)/2.0f)+(winnerNameW[1]/2))-288.0f; + } else { + if(abs(winPosOfs[work->work_s16[3]-2][idx][0]) == 144.0f) { + if(winnerNameW[idx]+32 < 288.0f) { + pos_x = 176.0f; + } else { + pos_x = 32.0f+((winnerNameW[idx]*work->work_float[1])/2.0f); + } + if(winPosOfs[work->work_s16[3]-2][idx][0] < 0) { + pos_x = -(288.0f-pos_x); + } else { + pos_x = (576.0f-pos_x)-288.0f; + } + } else { + pos_x = winPosOfs[work->work_s16[3]-2][idx][0]; + } + } + HuSprGrpPosSet(work->spr_grp[idx], (288.0f+pos_x)+ofs[0], ofs[1]+(240.0f+winPosOfs[work->work_s16[3]-2][idx][1])); + } + } + if(work->time == 125) { + work->type = 0; + } + } + break; + + case -1: + { + work->work_float[0] += seqSpeed*0.1f; + tp_lvl = 1.0f-work->work_float[0]; + if(tp_lvl <= 0.0f) { + tp_lvl = 0.0f; + work->work_s16[1] = 0; + work->stat |= 0x8; + } + for(idx=0; idxwork_s16[3]; idx++) { + HuSprGrpTPLvlSet(work->spr_grp[idx], tp_lvl); + } + } + break; + + default: + break; + } + } + if(seqDoneF || (work->stat & 0x8)) { + MGSeqSprKill(work); + return 0; + } + return 1; +} + +static int SeqInitRecord(SeqWork *work, va_list params) +{ + AnimData *spr_data; + s16 spr_grp; + s16 time_pos[2]; + s16 i; + s16 sprite; + s16 digit_idx; + s32 digit; + seqRecordVal = va_arg(params, int); + work->type = 0; + work->work_float[0] = 0.0f; + work->spr_grp[0] = spr_grp = HuSprGrpCreate(10); + spr_data = HuSprAnimRead(SeqReadFile(DATA_MAKE_NUM(DATADIR_GAMEMES, 9))); + sprite = HuSprCreate(spr_data, 0, 0); + HuSprGrpMemberSet(spr_grp, 0, sprite); + HuSprPosSet(spr_grp, 0, 0.0f, -32.0f); + spr_data = HuSprAnimRead(SeqReadFile(DATA_MAKE_NUM(DATADIR_GAMEMES, 8))); + sprite = HuSprCreate(spr_data, 0, 0); + HuSprGrpMemberSet(spr_grp, 1, sprite); + spr_data = HuSprAnimRead(SeqReadFile(DATA_MAKE_NUM(DATADIR_GAMEMES, 7))); + for(i=0; i<8; i++) { + sprite = HuSprCreate(spr_data, 0, 0); + HuSprGrpMemberSet(spr_grp, i+2, sprite); + } + if(omcurovl == OVL_M407 || omcurovl == OVL_M453 || omcurovl == OVL_M459 || omcurovl == OVL_M460 || omcurovl == OVL_M462 || omcurovl == OVL_M442) { + digit_idx = 0; + if(seqRecordVal > 9999) { + seqRecordVal = 9999; + } + digit = seqRecordVal/1000; + if(digit != 0) { + HuSprBankSet(spr_grp, digit_idx+2, digit); + seqRecordVal -= digit*1000; + digit_idx++; + } + + digit = seqRecordVal/100; + if(digit != 0 || digit_idx != 0) { + HuSprBankSet(spr_grp, digit_idx+2, digit); + seqRecordVal -= digit*100; + digit_idx++; + } + digit = seqRecordVal/10; + if(digit != 0 || digit_idx != 0) { + HuSprBankSet(spr_grp, digit_idx+2, digit); + seqRecordVal -= digit*10; + digit_idx++; + } + HuSprBankSet(spr_grp, digit_idx+2, seqRecordVal); + digit_idx++; + for(i=digit_idx; i<8; i++) { + HuSprAttrSet(spr_grp, i+2, SPRITE_ATTR_HIDDEN); + } + HuSprPosSet(spr_grp, 1, (-((digit_idx*44)+48)/2)+24, 32.0f); + for(i=0; iparam[0] = 3; + return 1; +} + +static int SeqUpdateRecord(SeqWork *work) +{ + s16 group; + if(_CheckFlag(0x1000C)) { + work->work_s16[1] = 0; + work->stat |= 0xC; + } else { + group = work->spr_grp[0]; + if(work->param[0] != 0 && work->type != -1) { + switch(work->param[0]) { + case 2: + if(work->param[1] != -1) { + (void)work; //HACK: to introduce extra branch + } else { + work->type = -1; + work->work_float[0] = 0.0f; + } + work->param[0] = 0; + break; + + case 1: + work->time_max = work->param[1]; + work->param[0] = 0; + break; + + case 3: + work->type = 1; + work->param[0] = 0; + break; + + default: + work->param[0] = 0; + break; + } + } + work->time += seqSpeed; + if(work->time >= work->time_max && work->type != -1) { + work->stat |= 0x4; + work->type = -1; + work->work_float[0] = 0.0f; + } + if(work->type) { + switch(work->type) { + case 1: + { + if(work->time <= 10) { + HuSprGrpTPLvlSet(group, work->time/10.0); + } + if(work->time == 5) { + HuAudFXPlay(38); + } + if(work->time == 30) { + work->type = 0; + } + } + break; + + case -1: + { + float tp_lvl; + work->work_float[0] += seqSpeed*0.1f; + tp_lvl = 1.0f-work->work_float[0]; + if(tp_lvl <= 0.0f) { + tp_lvl = 0.0f; + work->work_s16[1] = 0; + work->stat |= 0x8; + } + HuSprGrpTPLvlSet(group, tp_lvl); + } + break; + + default: + break; + } + } + } + + if(seqDoneF || (work->stat & 0x8)) { + MGSeqSprKill(work); + return 0; + } + return 1; +} + void MGSeqPauseEnableCtrl(s32 flag) { if(!_CheckFlag(0x10008)) { From d5db3936efa9d5bc009a5198ba7e31565330524a Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 6 Feb 2024 20:55:18 -0600 Subject: [PATCH 013/106] Try putting character in comment --- src/game/minigame_seq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index 14923a6d..7b10a84c 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -913,11 +913,11 @@ static AnimData *SeqLoadFontChar(char *str, s16 flags) return HuSprAnimRead(SeqReadFile(data_num)); } } - if(str[1] == '゙') { + if(str[1] == 222) { //゙ list = seqFontKanaTbl; list += 55; id = 55; - } else if(str[1] == '゚') { + } else if(str[1] == 223) { //゚ list = seqFontKanaTbl; list += 75; id = 75; From a64a522cb9d113253b0651cdfbbfb140fe737af4 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 6 Feb 2024 20:57:10 -0600 Subject: [PATCH 014/106] Try fullwidth dakuten --- src/game/minigame_seq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index 7b10a84c..8b80385f 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -913,11 +913,11 @@ static AnimData *SeqLoadFontChar(char *str, s16 flags) return HuSprAnimRead(SeqReadFile(data_num)); } } - if(str[1] == 222) { //゙ + if(str[1] == 222) { //゛ list = seqFontKanaTbl; list += 55; id = 55; - } else if(str[1] == 223) { //゚ + } else if(str[1] == 223) { //゜ list = seqFontKanaTbl; list += 75; id = 75; From 6baac0126f45cc965aa6d8e367327ace8dbf4bb8 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 6 Feb 2024 22:30:04 -0600 Subject: [PATCH 015/106] Finish minigame_seq.c --- config/GMPE01_00/symbols.txt | 4 +- configure.py | 2 +- include/game/objsub.h | 2 +- src/game/minigame_seq.c | 413 ++++++++++++++++++++++++++++++++++- src/game/objsub.c | 4 +- 5 files changed, 409 insertions(+), 16 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index c3234c1d..5da2e905 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -4952,7 +4952,7 @@ lbl_8012F574 = .data:0x8012F574; // type:object size:0xA scope:local data:string winWordTbl = .data:0x8012F580; // type:object size:0x18 scope:local winPosOfs = .data:0x8012F598; // type:object size:0x50 scope:local practiceTbl = .data:0x8012F5E8; // type:object size:0xAC scope:local -practicePosYTbl = .data:0x8012F694; // type:object size:0xC scope:local +yPosTbl$2366 = .data:0x8012F694; // type:object size:0xC scope:local seqStartFXTbl = .data:0x8012F6A0; // type:object size:0xF0 scope:local lbl_8012F790 = .data:0x8012F790; // type:object size:0x15 data:string lbl_8012F7A5 = .data:0x8012F7A5; // type:object size:0x10 data:string @@ -5826,7 +5826,7 @@ lbl_801D359E = .sdata:0x801D359E; // type:object size:0x5 scope:local data:strin lbl_801D35A3 = .sdata:0x801D35A3; // type:object size:0x7 scope:local lbl_801D35AA = .sdata:0x801D35AA; // type:object size:0x6 scope:local lbl_801D35B0 = .sdata:0x801D35B0; // type:object size:0x6 scope:local data:string -pauseStrTbl = .sdata:0x801D35B8; // type:object size:0x8 scope:local +pauseStr$2216 = .sdata:0x801D35B8; // type:object size:0x8 scope:local lbl_801D35C0 = .sdata:0x801D35C0; // type:object size:0x8 lbl_801D35C8 = .sdata:0x801D35C8; // type:object size:0x8 lbl_801D35D0 = .sdata:0x801D35D0; // type:object size:0x8 diff --git a/configure.py b/configure.py index 362f7bfd..92dd8b02 100644 --- a/configure.py +++ b/configure.py @@ -339,7 +339,7 @@ config.libs = [ Object(Matching, "game/frand.c"), Object(Matching, "game/audio.c"), Object(Matching, "game/EnvelopeExec.c"), - Object(NonMatching, "game/minigame_seq.c"), + Object(Matching, "game/minigame_seq.c"), Object(Matching, "game/ovllist.c"), Object(Matching, "game/esprite.c"), Object(NonMatching, "game/code_8003FF68.c"), diff --git a/include/game/objsub.h b/include/game/objsub.h index e4926f22..c83ecd03 100644 --- a/include/game/objsub.h +++ b/include/game/objsub.h @@ -19,7 +19,7 @@ typedef struct mg_info { u32 advice_mess; } MgInfo; -s16 omMgIndexGet(s16 overlay); +s32 omMgIndexGet(s16 overlay); void omGameSysInit(Process *objman); void omVibrate(s16 player_cfg_index, s16 duration, s16 off, s16 on); diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index 8b80385f..0c030084 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -5,6 +5,10 @@ #include "game/objsub.h" #include "game/object.h" #include "game/hsfman.h" +#include "game/window.h" +#include "game/wipe.h" +#include "game/pad.h" + #include "math.h" #include "stdarg.h" @@ -2604,7 +2608,7 @@ static int SeqUpdateDraw(SeqWork *work) if(work->time <= 20) { time = work->time; zrot = 365.0f*(time/20.0f); - scale = (double)1.3*sin(M_PI*(90.0f*(time/20.0f))/180.0); + scale = 1.3f*sin(M_PI*(90.0f*(time/20.0f))/180.0); HuSprGrpScaleSet(group, scale, scale); HuSprGrpZRotSet(group, zrot); } @@ -2683,7 +2687,7 @@ static char *winCharNameTbl[] = { static char *winWordTbl[] = { "カチ", - "WON", + "WON!", "ハイボク", "LOSE", "ユウショウ!", @@ -2723,7 +2727,7 @@ static s16 winPosOfs[][5][2] = { static s16 winnerNameW[8]; -#define GET_WIN_WORD_OFS() ((seqLanguage == 0) ? 0 : 1) +#define GET_LANG_IDX() ((seqLanguage == 0) ? 0 : 1) #define GET_WIN_KANAF() ((seqLanguage == 0) ? 1 : 0) @@ -2741,12 +2745,12 @@ static int SeqInitWin(SeqWork *work, va_list params) return 0; } if(win_type == 3) { - word_idx = GET_WIN_WORD_OFS(); + word_idx = GET_LANG_IDX(); } else { if(win_type == 4) { - word_idx = GET_WIN_WORD_OFS()+2; + word_idx = GET_LANG_IDX()+2; } else { - word_idx = GET_WIN_WORD_OFS()+4; + word_idx = GET_LANG_IDX()+4; } } word_grp = SeqMakeWord(work, winWordTbl[word_idx], GET_WIN_KANAF()); @@ -2762,9 +2766,9 @@ static int SeqInitWin(SeqWork *work, va_list params) if(winner < 0) { continue; } - word_grp = SeqMakeWord(work, winCharNameTbl[(winner*2)+GET_WIN_WORD_OFS()], 0); + word_grp = SeqMakeWord(work, winCharNameTbl[(winner*2)+GET_LANG_IDX()], 0); if(seqLanguage != 0) { - char *name = winCharNameTbl[(winner*2)+GET_WIN_WORD_OFS()]; + char *name = winCharNameTbl[(winner*2)+GET_LANG_IDX()]; word_w = 0.0f; for(i=word_w; iwork_s16[3]; i++, name++) { if(*name == ' ') { @@ -2773,7 +2777,7 @@ static int SeqInitWin(SeqWork *work, va_list params) word_w += 50.0f; } } - name = winCharNameTbl[(winner*2)+GET_WIN_WORD_OFS()]; + name = winCharNameTbl[(winner*2)+GET_LANG_IDX()]; word_x = 0.0f; for(i=word_x; iwork_s16[3]; i++, name++) { HuSprPosSet(work->spr_grp[word_grp], i, 25.0+(word_x-(0.5*word_w)), 0.0f); @@ -3174,6 +3178,173 @@ static int SeqUpdateRecord(SeqWork *work) return 1; } +static void PauseProc(void); + +void MGSeqPauseInit(void) +{ + MGSeqPauseEnableCtrl(0); + HuWinInit(1); + pauseProcess = HuPrcCreate(PauseProc, 100, 4096, 0); + HuPrcSetStat(pauseProcess, PROCESS_STAT_PAUSE_EN|PROCESS_STAT_UPAUSE_EN); + pauseActiveF = 1; + pauseExitF = 0; + pauseWaitF = 0; +} + +static void PauseProc(void) +{ + s16 mg; + s16 i; + s16 j; + + s16 char_mess_map[4]; + s16 char_mess[4][4]; + s16 window[3] = { -1, -1, -1 }; + + SeqWork work; + static char *pauseStr[] = { + "ポーズ", + "PAUSE" + }; + float ratio; + + HuAudFXPlay(5); + for(i=0; i<16; i++) { + work.sprite[i] = work.spr_grp[i] = -1; + } + SeqMakeWord(&work, pauseStr[GET_LANG_IDX()], 0); + for(i=0; iwork[0] == 0) { + if(omMgIndexGet(omcurovl) == -1) { + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + object->work[0]++; + } + if(!omPauseChk() || _CheckFlag(0x1000C) || !pauseWaitF) { + return; + } + for(i=input=0; i<4; i++) { + input |= HuPadBtnDown[i]; + } + if(input & PAD_TRIGGER_Z) { + HuAudFXPlay(3); + pauseExitF = 1; + omSysPauseCtrl(0); + omSysExitReq = 1; + mgQuitExtraF = 1; + omDelObjEx(HuPrcCurrentGet(), object); + } } \ No newline at end of file diff --git a/src/game/objsub.c b/src/game/objsub.c index b6cc9206..157500c3 100644 --- a/src/game/objsub.c +++ b/src/game/objsub.c @@ -1174,7 +1174,7 @@ s16 mgTicTacToeGrid[3][3]; u8 mgIndexList[256]; GameStat mgGameStatBackup; -s16 omMgIndexGet(s16 overlay) { +s32 omMgIndexGet(s16 overlay) { s32 i; MgInfo *info; @@ -1182,7 +1182,7 @@ s16 omMgIndexGet(s16 overlay) { for (i = 0; info->ovl != ((u16)OVL_INVALID); i++) { if (info->ovl == overlay) { - return i; + return (s16)i; } info++; } From c6433029959d83a135d2e717f5914d4ca504aae7 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 7 Feb 2024 06:56:12 -0600 Subject: [PATCH 016/106] Use HsfFace in hsfdraw.c --- include/game/hsfformat.h | 14 ++-- src/game/hsfdraw.c | 169 ++++++++++++++++++--------------------- src/game/hsfload.c | 10 ++- 3 files changed, 91 insertions(+), 102 deletions(-) diff --git a/include/game/hsfformat.h b/include/game/hsfformat.h index d3104319..1beae421 100644 --- a/include/game/hsfformat.h +++ b/include/game/hsfformat.h @@ -145,20 +145,16 @@ typedef struct hsf_vertex_buf { void *data; } HsfBuffer; -typedef struct hsf_tristrip { - u16 data[4]; -} HsfTristrip; - typedef struct hsf_face { - u16 type; - u16 mat; - u16 indices[12]; + s16 type; + s16 mat; union { struct { + s16 indices[3][4]; u32 count; - HsfTristrip *data; + s16 *data; } strip; - u16 ext_indices[4]; + s16 indices[4][4]; }; float nbt[3]; } HsfFace; diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index 5f8b4646..9be7868f 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -24,18 +24,9 @@ typedef struct { u32 unk0C; } DrawDataStruct; // Size 0x10 -typedef struct { - /* 0x00 */ s16 unk00; - /* 0x02 */ s16 unk02; - /* 0x04 */ s16 unk04[3][4]; // goes up to index [3][3] (union?) - /* 0x1C */ u32 unk1C; - /* 0x20 */ void *unk20; - /* 0x24 */ char unk24[0xC]; -} HsfdrawStruct02; // Size 0x30 - static void objCall(ModelData *arg0, HsfObject *arg1); static void objMesh(ModelData *arg0, HsfObject *arg1); -static void FaceDraw(HsfdrawStruct00 *arg0, HsfdrawStruct02 *arg1); +static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1); static void SetTevStageNoTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1); static void SetTevStageTex(HsfdrawStruct00 *arg0, HsfMaterial *arg1); static GXTevKColorSel SetKColor(GXTevStageID arg0, u8 arg1); @@ -45,7 +36,7 @@ static void SetReflect(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2, u8 arg3); static void SetProjection(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2, s16 arg3, GXTexMapID arg4, u32 arg5); static void SetShadowTex(void); static void SetShadow(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2); -static void FaceDrawShadow(HsfdrawStruct00 *arg0, HsfdrawStruct02 *arg1); +static void FaceDrawShadow(HsfdrawStruct00 *arg0, HsfFace *arg1); static void LoadTexture(ModelData *arg0, HsfBitmap *arg1, HsfAttribute *arg2, s16 arg3); static void objNull(ModelData *arg0, HsfObject *arg1); static void objRoot(ModelData *arg0, HsfObject *arg1); @@ -55,10 +46,10 @@ static void objReplica(ModelData *arg0, HsfObject *arg1); static void ObjDraw(HsfdrawStruct00 *arg0); static void MDObjCall(HsfData *arg0, HsfObject *arg1); static void MDObjMesh(HsfData *arg0, HsfObject *arg1); -static void MDFaceDraw(HsfObject *arg0, HsfdrawStruct02 *arg1); -static s32 MakeCalcNBT(HsfObject *arg0, HsfdrawStruct02 *arg1, s16 arg2, s16 arg3); -static s32 MakeNBT(HsfObject *arg0, HsfdrawStruct02 *arg1, s16 arg2, s16 arg3); -static void MDFaceCnt(HsfObject *arg0, HsfdrawStruct02 *arg1); +static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1); +static s32 MakeCalcNBT(HsfObject *arg0, HsfFace *arg1, s16 arg2, s16 arg3); +static s32 MakeNBT(HsfObject *arg0, HsfFace *arg1, s16 arg2, s16 arg3); +static void MDFaceCnt(HsfObject *arg0, HsfFace *arg1); void GXResetWriteGatherPipe(void); @@ -429,7 +420,7 @@ s32 ObjCullCheck(HsfData *arg0, HsfObject *arg1, Mtx arg2) { } // TODO: not matching (https://decomp.me/scratch/54Pjw) -static void FaceDraw(HsfdrawStruct00 *arg0, HsfdrawStruct02 *arg1) { +static void FaceDraw(HsfdrawStruct00 *arg0, HsfFace *arg1) { GXColor sp2C; void *sp28; Hu3DTexAnimDataStruct *sp24; @@ -452,7 +443,7 @@ static void FaceDraw(HsfdrawStruct00 *arg0, HsfdrawStruct02 *arg1) { temp_r29 = arg0->unk00; temp_r20 = temp_r28->constData; kColorIdx = 0; - temp_r30 = &temp_r28->data.material[arg1->unk02 & 0xFFF]; + temp_r30 = &temp_r28->data.material[arg1->mat & 0xFFF]; temp_r19 = temp_r28->flags | temp_r30->flags; if (temp_r19 & 0x30) { if (temp_r19 & 0x10) { @@ -1650,7 +1641,7 @@ static void SetShadow(HsfdrawStruct00 *arg0, s16 arg1, s16 arg2) { GXSetTevAlphaOp(arg1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); } -static void FaceDrawShadow(HsfdrawStruct00 *arg0, HsfdrawStruct02 *arg1) { +static void FaceDrawShadow(HsfdrawStruct00 *arg0, HsfFace *arg1) { HsfObject *temp_r31; ModelData *temp_r28; HsfConstData *temp_r27; @@ -1662,7 +1653,7 @@ static void FaceDrawShadow(HsfdrawStruct00 *arg0, HsfdrawStruct02 *arg1) { temp_r31 = arg0->unk04; temp_r28 = arg0->unk00; temp_r27 = temp_r31->constData; - temp_r29 = &temp_r31->data.material[arg1->unk02 & 0xFFF]; + temp_r29 = &temp_r31->data.material[arg1->mat & 0xFFF]; if (temp_r29 != materialBak) { if (!(temp_r27->flags & 0x400)) { drawCnt++; @@ -2078,7 +2069,7 @@ void Hu3DDrawPost(void) { float temp_f26; float temp_f25; LightData *temp_r22; - HsfdrawStruct02 *var_r27; + HsfFace *var_r27; Mtx sp150; Mtx sp120; Mtx spF0; @@ -2217,12 +2208,12 @@ void Hu3DDrawPost(void) { if (shadowModelDrawF == 0) { for (i = 0; i < temp_r24->count;) { FaceDraw(temp_r28, var_r27); - if (var_r27->unk00 == 4) { + if (var_r27->type == 4) { totalPolyCnt += DrawData[drawCnt - 1].unk08; i++; var_r27++; } else { - totalPolyCnt += DrawData[drawCnt - 1].unk08 * ((var_r27->unk00 & 7) == 3 ? 2 : 1); + totalPolyCnt += DrawData[drawCnt - 1].unk08 * ((var_r27->type & 7) == 3 ? 2 : 1); i += DrawData[drawCnt - 1].unk08; var_r27 += DrawData[drawCnt - 1].unk08; } @@ -2236,7 +2227,7 @@ void Hu3DDrawPost(void) { GXSetNumChans(1); for (i = 0; i < temp_r24->count;) { FaceDrawShadow(temp_r28, var_r27); - if (var_r27->unk00 == 4) { + if (var_r27->type == 4) { i++; var_r27++; } else { @@ -2276,7 +2267,7 @@ static void ObjDraw(HsfdrawStruct00 *arg0) { float temp_f26; LightData *temp_r24; DrawDataStruct *temp_r25; - HsfdrawStruct02 *var_r27; + HsfFace *var_r27; Mtx sp140; Mtx sp110; Mtx spE0; @@ -2359,13 +2350,13 @@ static void ObjDraw(HsfdrawStruct00 *arg0) { if (shadowModelDrawF == 0) { for (i = 0; i < temp_r26->count;) { FaceDraw(arg0, var_r27); - if (var_r27->unk00 == 4) { + if (var_r27->type == 4) { totalPolyCnt += DrawData[drawCnt - 1].unk08; i++; var_r27++; } else { temp_r25 = &DrawData[drawCnt - 1]; - if ((var_r27->unk00 & 7) == 3) { + if ((var_r27->type & 7) == 3) { var_r20 = 2; } else { var_r20 = 1; @@ -2384,7 +2375,7 @@ static void ObjDraw(HsfdrawStruct00 *arg0) { GXSetNumChans(1); for (i = 0; i < temp_r26->count;) { FaceDrawShadow(arg0, var_r27); - if (var_r27->unk00 == 4) { + if (var_r27->type == 4) { i++; var_r27++; } else { @@ -2440,7 +2431,7 @@ static void MDObjCall(HsfData *arg0, HsfObject *arg1) { static void MDObjMesh(HsfData *arg0, HsfObject *arg1) { HsfBuffer *temp_r29; - HsfdrawStruct02 *var_r28; + HsfFace *var_r28; s16 i; temp_r29 = arg1->data.face; @@ -2502,7 +2493,7 @@ HsfConstData *ObjConstantMake(HsfObject *arg0, u32 arg1) { return temp_r3; } -static void MDFaceDraw(HsfObject *arg0, HsfdrawStruct02 *arg1) { +static void MDFaceDraw(HsfObject *arg0, HsfFace *arg1) { HsfMaterial *temp_r30; s16 *var_r24; s16 var_r26; @@ -2513,9 +2504,9 @@ static void MDFaceDraw(HsfObject *arg0, HsfdrawStruct02 *arg1) { s32 var_r25; var_r26 = -1; - temp_r30 = &arg0->data.material[arg1->unk02 & 0xFFF]; - if (temp_r30 != materialBak || polyTypeBak != (arg1->unk00 & 7) || (arg1->unk00 & 7) == 4) { - polyTypeBak = arg1->unk00 & 7; + temp_r30 = &arg0->data.material[arg1->mat & 0xFFF]; + if (temp_r30 != materialBak || polyTypeBak != (arg1->type & 7) || (arg1->type & 7) == 4) { + polyTypeBak = arg1->type & 7; materialBak = temp_r30; DrawData[drawCnt].unk00 = (u32) DLBufP - (u32) DLBufStartP; GXBeginDisplayList(DLBufP, 0x20000); @@ -2557,60 +2548,60 @@ static void MDFaceDraw(HsfObject *arg0, HsfdrawStruct02 *arg1) { Hu3DObjInfoP->flags |= 0x10000; } faceCnt = 0; - switch (arg1->unk00 & 7) { + switch (arg1->type & 7) { case 0: case 1: break; case 2: GXBegin(GX_TRIANGLES, GX_VTXFMT0, faceNumBuf[drawCnt]); for (var_r27 = 0; var_r27 < faceNumBuf[drawCnt] / 3; var_r27++, arg1++) { - GXUnknownu16(arg1->unk04[0][0]); + GXUnknownu16(arg1->indices[0][0]); if (var_r26 == -1) { - GXUnknownu16(arg1->unk04[0][1]); + GXUnknownu16(arg1->indices[0][1]); } else { MakeCalcNBT(arg0, arg1, 0, 1); } if (temp_r30->vtxMode == 5) { - temp_r28 = arg1->unk04[0][2]; + temp_r28 = arg1->indices[0][2]; GXUnknownu16(temp_r28); if (((GXColor*) arg0->data.color->data)[temp_r28].a != 0xFF) { Hu3DObjInfoP->flags |= 0x4001; } } if (var_r25 != 0) { - GXUnknownu16(arg1->unk04[0][3]); + GXUnknownu16(arg1->indices[0][3]); } - GXUnknownu16(arg1->unk04[2][0]); + GXUnknownu16(arg1->indices[2][0]); if (var_r26 == -1) { - GXUnknownu16(arg1->unk04[2][1]); + GXUnknownu16(arg1->indices[2][1]); } else { MakeNBT(arg0, arg1, 2, 0); } if (temp_r30->vtxMode == 5) { - temp_r28 = arg1->unk04[2][2]; + temp_r28 = arg1->indices[2][2]; GXUnknownu16(temp_r28); if (((GXColor*) arg0->data.color->data)[temp_r28].a != 0xFF) { Hu3DObjInfoP->flags |= 0x4001; } } if (var_r25 != 0) { - GXUnknownu16(arg1->unk04[2][3]); + GXUnknownu16(arg1->indices[2][3]); } - GXUnknownu16(arg1->unk04[1][0]); + GXUnknownu16(arg1->indices[1][0]); if (var_r26 == -1) { - GXUnknownu16(arg1->unk04[1][1]); + GXUnknownu16(arg1->indices[1][1]); } else { MakeNBT(arg0, arg1, 1, 2); } if (temp_r30->vtxMode == 5) { - temp_r28 = arg1->unk04[1][2]; + temp_r28 = arg1->indices[1][2]; GXUnknownu16(temp_r28); if (((GXColor*) arg0->data.color->data)[temp_r28].a != 0xFF) { Hu3DObjInfoP->flags |= 0x4001; } } if (var_r25 != 0) { - GXUnknownu16(arg1->unk04[1][3]); + GXUnknownu16(arg1->indices[1][3]); } } faceCnt = faceNumBuf[drawCnt] / 3; @@ -2618,125 +2609,125 @@ static void MDFaceDraw(HsfObject *arg0, HsfdrawStruct02 *arg1) { case 3: GXBegin(GX_QUADS, GX_VTXFMT0, faceNumBuf[drawCnt]); for (var_r27 = 0; var_r27 < faceNumBuf[drawCnt] / 4; var_r27++, arg1++) { - GXUnknownu16(arg1->unk04[0][0]); + GXUnknownu16(arg1->indices[0][0]); if (var_r26 == -1) { - GXUnknownu16(arg1->unk04[0][1]); + GXUnknownu16(arg1->indices[0][1]); } else { MakeCalcNBT(arg0, arg1, 0, 1); } if (temp_r30->vtxMode == 5) { - temp_r28 = arg1->unk04[0][2]; + temp_r28 = arg1->indices[0][2]; GXUnknownu16(temp_r28); if (((GXColor*) arg0->data.color->data)[temp_r28].a != 0xFF) { Hu3DObjInfoP->flags |= 0x4001; } } if (var_r25 != 0) { - GXUnknownu16(arg1->unk04[0][3]); + GXUnknownu16(arg1->indices[0][3]); } - GXUnknownu16(arg1->unk04[2][0]); + GXUnknownu16(arg1->indices[2][0]); if (var_r26 == -1) { - GXUnknownu16(arg1->unk04[2][1]); + GXUnknownu16(arg1->indices[2][1]); } else { MakeNBT(arg0, arg1, 2, 0); } if (temp_r30->vtxMode == 5) { - temp_r28 = arg1->unk04[2][2]; + temp_r28 = arg1->indices[2][2]; GXUnknownu16(temp_r28); if (((GXColor*) arg0->data.color->data)[temp_r28].a != 0xFF) { Hu3DObjInfoP->flags |= 0x4001; } } if (var_r25 != 0) { - GXUnknownu16(arg1->unk04[2][3]); + GXUnknownu16(arg1->indices[2][3]); } - GXUnknownu16(arg1->unk04[3][0]); + GXUnknownu16(arg1->indices[3][0]); if (var_r26 == -1) { - GXUnknownu16(arg1->unk04[3][1]); + GXUnknownu16(arg1->indices[3][1]); } else { MakeNBT(arg0, arg1, 3, 2); } if (temp_r30->vtxMode == 5) { - temp_r28 = arg1->unk04[3][2]; + temp_r28 = arg1->indices[3][2]; GXUnknownu16(temp_r28); if (((GXColor*) arg0->data.color->data)[temp_r28].a != 0xFF) { Hu3DObjInfoP->flags |= 0x4001; } } if (var_r25 != 0) { - GXUnknownu16(arg1->unk04[3][3]); + GXUnknownu16(arg1->indices[3][3]); } - GXUnknownu16(arg1->unk04[1][0]); + GXUnknownu16(arg1->indices[1][0]); if (var_r26 == -1) { - GXUnknownu16(arg1->unk04[1][1]); + GXUnknownu16(arg1->indices[1][1]); } else { MakeNBT(arg0, arg1, 1, 3); } if (temp_r30->vtxMode == 5) { - temp_r28 = arg1->unk04[1][2]; + temp_r28 = arg1->indices[1][2]; GXUnknownu16(temp_r28); if (((GXColor*) arg0->data.color->data)[temp_r28].a != 0xFF) { Hu3DObjInfoP->flags |= 0x4001; } } if (var_r25 != 0) { - GXUnknownu16(arg1->unk04[1][3]); + GXUnknownu16(arg1->indices[1][3]); } } faceCnt = faceNumBuf[drawCnt] / 4; break; case 4: GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, faceNumBuf[drawCnt]); - GXUnknownu16(arg1->unk04[0][0]); + GXUnknownu16(arg1->indices[0][0]); if (var_r26 == -1) { - GXUnknownu16(arg1->unk04[0][1]); + GXUnknownu16(arg1->indices[0][1]); } else { MakeCalcNBT(arg0, arg1, 0, 1); } if (temp_r30->vtxMode == 5) { - temp_r28 = arg1->unk04[0][2]; + temp_r28 = arg1->indices[0][2]; GXUnknownu16(temp_r28); if (((GXColor*) arg0->data.color->data)[temp_r28].a != 0xFF) { Hu3DObjInfoP->flags |= 0x4001; } } if (var_r25 != 0) { - GXUnknownu16(arg1->unk04[0][3]); + GXUnknownu16(arg1->indices[0][3]); } - GXUnknownu16(arg1->unk04[2][0]); + GXUnknownu16(arg1->indices[2][0]); if (var_r26 == -1) { - GXUnknownu16(arg1->unk04[2][1]); + GXUnknownu16(arg1->indices[2][1]); } else { MakeNBT(arg0, arg1, 2, 0); } if (temp_r30->vtxMode == 5) { - temp_r28 = arg1->unk04[2][2]; + temp_r28 = arg1->indices[2][2]; GXUnknownu16(temp_r28); if (((GXColor*) arg0->data.color->data)[temp_r28].a != 0xFF) { Hu3DObjInfoP->flags |= 0x4001; } } if (var_r25 != 0) { - GXUnknownu16(arg1->unk04[2][3]); + GXUnknownu16(arg1->indices[2][3]); } - GXUnknownu16(arg1->unk04[1][0]); + GXUnknownu16(arg1->indices[1][0]); if (var_r26 == -1) { - GXUnknownu16(arg1->unk04[1][1]); + GXUnknownu16(arg1->indices[1][1]); } else { MakeNBT(arg0, arg1, 1, 2); } if (temp_r30->vtxMode == 5) { - temp_r28 = arg1->unk04[1][2]; + temp_r28 = arg1->indices[1][2]; GXUnknownu16(temp_r28); if (((GXColor*) arg0->data.color->data)[temp_r28].a != 0xFF) { Hu3DObjInfoP->flags |= 0x4001; } } if (var_r25 != 0) { - GXUnknownu16(arg1->unk04[1][3]); + GXUnknownu16(arg1->indices[1][3]); } - var_r24 = arg1->unk20; - for (var_r27 = 0; var_r27 < arg1->unk1C; var_r27++, var_r24 += 4) { + var_r24 = arg1->strip.data; + for (var_r27 = 0; var_r27 < arg1->strip.count; var_r27++, var_r24 += 4) { GXUnknownu16(var_r24[0]); if (var_r26 == -1) { GXUnknownu16(var_r24[1]); @@ -2754,7 +2745,7 @@ static void MDFaceDraw(HsfObject *arg0, HsfdrawStruct02 *arg1) { GXUnknownu16(var_r24[3]); } } - faceCnt = arg1->unk1C + 1; + faceCnt = arg1->strip.count + 1; break; } temp_r3 = GXEndDisplayList(); @@ -2766,7 +2757,7 @@ static void MDFaceDraw(HsfObject *arg0, HsfdrawStruct02 *arg1) { } } -static s32 MakeCalcNBT(HsfObject *arg0, HsfdrawStruct02 *arg1, s16 arg2, s16 arg3) { +static s32 MakeCalcNBT(HsfObject *arg0, HsfFace *arg1, s16 arg2, s16 arg3) { Vec sp10; Vec *temp_r29; Vec *temp_r31; @@ -2776,9 +2767,9 @@ static s32 MakeCalcNBT(HsfObject *arg0, HsfdrawStruct02 *arg1, s16 arg2, s16 arg s16 temp_r27; temp_r31 = arg0->data.vertex->data; - temp_r27 = arg1->unk04[arg2][1]; - temp_r25 = arg1->unk04[arg2][0]; - temp_r24 = arg1->unk04[arg3][0]; + temp_r27 = arg1->indices[arg2][1]; + temp_r25 = arg1->indices[arg2][0]; + temp_r24 = arg1->indices[arg3][0]; if (arg0->data.hook != 0) { temp_r29 = arg0->data.normal->data; sp10.x = temp_r29[temp_r27].x; @@ -2801,7 +2792,7 @@ static s32 MakeCalcNBT(HsfObject *arg0, HsfdrawStruct02 *arg1, s16 arg2, s16 arg GXPosition3s16(NBTT.x * 256.0f, NBTT.y * 256.0f, NBTT.z * 256.0f); } -static s32 MakeNBT(HsfObject *arg0, HsfdrawStruct02 *arg1, s16 arg2, s16 arg3) { +static s32 MakeNBT(HsfObject *arg0, HsfFace *arg1, s16 arg2, s16 arg3) { Vec sp10; Vec *temp_r30; Vec *spC; @@ -2809,7 +2800,7 @@ static s32 MakeNBT(HsfObject *arg0, HsfdrawStruct02 *arg1, s16 arg2, s16 arg3) { s16 temp_r28; spC = arg0->data.vertex->data; - temp_r28 = arg1->unk04[arg2][1]; + temp_r28 = arg1->indices[arg2][1]; if (arg0->data.hook != 0) { temp_r30 = arg0->data.normal->data; sp10.x = temp_r30[temp_r28].x; @@ -2827,15 +2818,15 @@ static s32 MakeNBT(HsfObject *arg0, HsfdrawStruct02 *arg1, s16 arg2, s16 arg3) { GXPosition3s16(NBTT.x * 256.0f, NBTT.y * 256.0f, NBTT.z * 256.0f); } -static void MDFaceCnt(HsfObject *arg0, HsfdrawStruct02 *arg1) { +static void MDFaceCnt(HsfObject *arg0, HsfFace *arg1) { HsfMaterial *temp_r30; s16 i; - temp_r30 = &arg0->data.material[arg1->unk02 & 0xFFF]; + temp_r30 = &arg0->data.material[arg1->mat & 0xFFF]; // Bug? Likely to be polyTypeBak != (arg1->unk00 & 7) - if (temp_r30 != materialBak || ((polyTypeBak != arg1->unk00) & 7) || (arg1->unk00 & 7) == 4) { + if (temp_r30 != materialBak || ((polyTypeBak != arg1->type) & 7) || (arg1->type & 7) == 4) { polySize = 4; - polyTypeBak = arg1->unk00 & 7; + polyTypeBak = arg1->type & 7; materialBak = temp_r30; matChgCnt++; if (DLFirstF != 0) { @@ -2857,7 +2848,7 @@ static void MDFaceCnt(HsfObject *arg0, HsfdrawStruct02 *arg1) { polySize += 2; } } - switch (arg1->unk00 & 7) { + switch (arg1->type & 7) { case 0: OSReport("Error\n"); break; @@ -2876,9 +2867,9 @@ static void MDFaceCnt(HsfObject *arg0, HsfdrawStruct02 *arg1) { break; case 4: triCnt++; - faceNumBuf[drawCnt] += arg1->unk1C + 3; + faceNumBuf[drawCnt] += arg1->strip.count + 3; DLTotalNum += polySize * 3; - DLTotalNum += polySize * arg1->unk1C; + DLTotalNum += polySize * arg1->strip.count; break; default: OSReport("Error\n"); diff --git a/src/game/hsfload.c b/src/game/hsfload.c index 88c10c51..f9f448cc 100644 --- a/src/game/hsfload.c +++ b/src/game/hsfload.c @@ -3,6 +3,8 @@ #include "ctype.h" #define AS_S16(field) (*((s16 *)&(field))) +#define AS_U16(field) (*((u16 *)&(field))) + GXColor rgba[100]; HsfHeader head; HsfData Model; @@ -401,7 +403,7 @@ static void FaceLoad(void) HsfFace *data; HsfFace *file_face_strip; HsfFace *new_face_strip; - HsfTristrip *strip; + u8 *strip; s32 i; s32 j; @@ -418,14 +420,14 @@ static void FaceLoad(void) new_face->name = SetName((u32 *)&file_face->name); new_face->count = file_face->count; new_face->data = (void *)((u32)data+(u32)temp_data); - strip = (HsfTristrip *)(&((HsfFace *)new_face->data)[new_face->count]); + strip = (u8 *)(&((HsfFace *)new_face->data)[new_face->count]); } new_face = temp_face; for(i=0; idata; for(j=0; jcount; j++, new_face_strip++, file_face_strip++) { - if(file_face_strip->type == 4) { - new_face_strip->strip.data = &strip[(u32)file_face_strip->strip.data]; + if(AS_U16(file_face_strip->type) == 4) { + new_face_strip->strip.data = (s16 *)(strip+(u32)file_face_strip->strip.data*(sizeof(s16)*4)); } } } From e6614c7eb5ef8669fb0808e879cb3b1b309ad0b1 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Wed, 7 Feb 2024 17:24:15 -0800 Subject: [PATCH 017/106] Matched board/roll --- configure.py | 2 +- include/game/board/player.h | 1 + include/game/board/roll.h | 18 + include/game/board/tutorial.h | 8 + src/game/board/com.c | 3 +- src/game/board/player.c | 4 +- src/game/board/roll.c | 936 ++++++++++++++++++++++++++++++++++ 7 files changed, 966 insertions(+), 6 deletions(-) create mode 100755 include/game/board/roll.h create mode 100755 include/game/board/tutorial.h create mode 100755 src/game/board/roll.c diff --git a/configure.py b/configure.py index 92dd8b02..ac6cc8ac 100644 --- a/configure.py +++ b/configure.py @@ -374,7 +374,7 @@ config.libs = [ Object(NonMatching, "game/board/char_wheel.c"), Object(NonMatching, "game/board/mushroom.c"), Object(NonMatching, "game/board/star.c"), - Object(NonMatching, "game/board/roll.c"), + Object(Matching, "game/board/roll.c"), Object(Matching, "game/board/ui.c"), Object(NonMatching, "game/board/block.c"), Object(NonMatching, "game/board/item.c"), diff --git a/include/game/board/player.h b/include/game/board/player.h index 2acc9a20..21f1921b 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -138,6 +138,7 @@ void BoardPlayerAutoSizeSet(s32, s32); void BoardPlayerCopyMat(s32); void BoardBowserSuitKill(s32); void SetRollPlayerSize(s32); +void BoardDiceDigit2DInit(s32, s32); void BoardDiceDigit2DUpdateEnable(s32); s32 DoSparkSpace(s32, s16*); s32 MegaPlayerPassFunc(s32, s16); diff --git a/include/game/board/roll.h b/include/game/board/roll.h new file mode 100755 index 00000000..7b801c28 --- /dev/null +++ b/include/game/board/roll.h @@ -0,0 +1,18 @@ +#ifndef _BOARD_ROLL_H +#define _BOARD_ROLL_H + +#include "dolphin/types.h" + +s32 BoardRollExec(s32 arg0); +void BoardRollKill(void); +void BoardRollUPauseSet(s32 arg0); +void BoardRollWinDispSet(s32 arg0); +s16 BoardDiceEffectCreate(void); +void BoardDicePauseAll(void); +BOOL BoardDiceDoneCheck(void); +void BoardDiceStop(s32 arg0); +void BoardDiceVisibleSet(s32 arg0, s32 arg1); +void BoardDiceValueSet(s32 arg0, s32 arg1); +void BoardRollTutorialSet(s16 *arg0); + +#endif diff --git a/include/game/board/tutorial.h b/include/game/board/tutorial.h new file mode 100755 index 00000000..2d8368f1 --- /dev/null +++ b/include/game/board/tutorial.h @@ -0,0 +1,8 @@ +#ifndef _BOARD_TUTORIAL_H +#define _BOARD_TUTORIAL_H + +#include "dolphin/types.h" + +extern s8 boardTutorialUseItem; + +#endif diff --git a/src/game/board/com.c b/src/game/board/com.c index 71bc7baa..fae9cae0 100755 --- a/src/game/board/com.c +++ b/src/game/board/com.c @@ -5,6 +5,7 @@ #include "game/board/main.h" #include "game/board/player.h" #include "game/board/space.h" +#include "game/board/tutorial.h" #include "game/board/window.h" #include "math.h" @@ -25,8 +26,6 @@ static BOOL CheckSwapUse(s32 arg0, s32 arg1); static BOOL CheckBooUse(s32 arg0, s32 arg1); static BOOL CheckLampUse(s32 arg0, s32 arg1); -extern s8 boardTutorialUseItem; - static s8 itemUse = -1; static s8 comItemWeightTbl[8][12] = { diff --git a/src/game/board/player.c b/src/game/board/player.c index cb722d27..1b97cccc 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -1,6 +1,7 @@ #include "game/board/player.h" #include "game/objsub.h" #include "game/board/com.h" +#include "game/board/roll.h" #include "game/board/view.h" //// #include "game/board/ui.h" @@ -35,9 +36,6 @@ extern void BoardModelAttrReset(s16, s32); extern BoardTutorialHookExec(s16, s32); //// #include "game/board/com.h" //// #include "game/board/overhead.h" -//// #include "game/board/roll.h" -extern s32 BoardRollExec(s32); -extern void BoardRollKill(void); //// #include "game/chrman.h" extern void CharModelDataClose(s16); extern void CharModelStepTypeSet(s16, s32); diff --git a/src/game/board/roll.c b/src/game/board/roll.c new file mode 100755 index 00000000..dfb26bf1 --- /dev/null +++ b/src/game/board/roll.c @@ -0,0 +1,936 @@ +#include "game/board/roll.h" +#include "game/audio.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/object.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/window.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/tutorial.h" + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 1; + u8 unk00_field2 : 3; + u8 unk00_field3 : 2; + }; + s8 unk01; + s8 unk02; + char unk03[1]; + s16 unk04; + s16 unk06; +} DiceWork; + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 1; + u8 unk00_field2 : 1; + u8 unk00_field3 : 2; + }; + s8 unk01; + s16 unk02; + s16 unk04[2]; + float unk08; +} DiceDigitWork; + +s32 BoardRollResizeCheck(void); +s32 BoardPauseActiveCheck(void); +void BoardTutorialHookExec(s16, s32); + +static void RollMain(void); +static void DiceCreate(s32 arg0); +static void DoInput(s32 arg0); +static void DiceWaitFull(s32 arg0); +static void DiceSetHit(s32 arg0); +static void RollDestroy(void); +static void DiceMain(omObjData *arg0); +static void DicePause(s32 arg0); +static void DicePauseAll(void); +static void DiceHideEffect(s32 arg0, s32 arg1); +static void DiceDigitMain(omObjData *arg0); +static void DiceDigitKill(DiceDigitWork *arg0); +static void DiceKill(void); +static void DiceDigitMove(DiceDigitWork *arg0, s32 arg1); +static void DiceDigitRotate(DiceDigitWork *arg0, s32 arg1); +static void SameRollExec(void); +static s32 GetBtnRoll(s32 arg0); +static s32 GetComBtnRoll(s32 arg0); + +static s32 tutorialRoll[3]; + +static s8 diceValue[3]; +static s8 rollPlayer; +static s8 numDice; +static s8 inputTimer; +static s8 maxRoll; +static s8 destMode; +static s8 diceSize; +s32 lbl_801D4098; +static char sameRollCoinStr[8]; +static s8 tutorialRollF; +static Process *rollProc; + +static s16 diceMdl[3] = { -1, -1, -1 }; +static s16 diceEff[3] = { -1, -1, -1 }; +static s16 rollWin = -1; + +static omObjData *diceObj[3] = { NULL, NULL, NULL }; +static omObjData *diceDigitObj[3] = { NULL, NULL, NULL }; +static s32 diceSndStatus[3] = { -1, -1, -1 }; + +static HsfanimStruct00 diceEffParam = { + 0x0096, + { 0x00, 0x00 }, // padding? + 50.0f, + 0.0f, + 65.0f, + { 0.0f, -0.195f, 0.0f }, + 100.0f, + 0.99f, + 40.0f, + 0.999f, + 0x0004, + { + { 0xFF, 0xFF, 0x20, 0xFF }, + { 0xFF, 0xFF, 0x00, 0xFF }, + { 0xFF, 0xFF, 0x80, 0xFF }, + { 0xFF, 0xFF, 0xFF, 0xFF } + }, + { + { 0xFF, 0xFF, 0xFF, 0x00 }, + { 0xFF, 0xFF, 0xFF, 0x00 }, + { 0xFF, 0xFF, 0xFF, 0x00 }, + { 0xFF, 0xFF, 0xFF, 0x00 } + } +}; + +static s32 diceDigitMdlTbl[10] = { + 0x0007000C, + 0x0007000D, + 0x0007000E, + 0x0007000F, + 0x00070010, + 0x00070011, + 0x00070012, + 0x00070013, + 0x00070014, + 0x00070015 +}; + +s32 BoardRollExec(s32 arg0) { + rollPlayer = arg0; + inputTimer = 0; + numDice = 1; + diceSize = 0; + maxRoll = 0xA; + switch (BoardRollTypeGet()) { + case 0: + numDice = 1; + break; + case 2: + numDice = 2; + break; + case 1: + numDice = 2; + break; + case 3: + numDice = 3; + break; + } + if (BoardPlayerSizeGet(arg0) == 1) { + diceSize = 1; + maxRoll = 5; + } else if (BoardPlayerSizeGet(arg0) == 2) { + diceSize = 2; + maxRoll = 10; + if (BoardRollResizeCheck() != 0) { + numDice = 2; + } + } + if (GWPlayer[rollPlayer].bowser_suit != 0) { + diceSize = 3; + } + GWPlayer[arg0].field08_bit7 = numDice; + rollProc = HuPrcChildCreate(RollMain, 0x2005, 0x6000, 0, boardMainProc); + HuPrcDestructorSet2(rollProc, RollDestroy); + while (rollProc != NULL) { + HuPrcVSleep(); + } + while (diceObj[0] || diceObj[1] || diceObj[2]) { + HuPrcVSleep(); + } + return destMode; +} + +void BoardRollKill(void) { + if (rollProc) { + HuPrcKill(rollProc); + } + DicePauseAll(); + DiceKill(); +} + +void BoardRollUPauseSet(s32 arg0) { + if (!rollProc) { + return; + } + BoardRollWinDispSet(arg0); + BoardDiceVisibleSet(0, arg0); + BoardDiceVisibleSet(1, arg0); + BoardDiceVisibleSet(2, arg0); + DiceHideEffect(0, arg0); + DiceHideEffect(1, arg0); + DiceHideEffect(2, arg0); +} + +void BoardRollWinDispSet(s32 arg0) { + if (rollWin == -1) { + return; + } + if (arg0 != 0) { + HuWinDispOn(rollWin); + } else { + HuWinDispOff(rollWin); + } +} + +static void RollMain(void) { + float sp8[2]; + float var_f31; + float var_f30; + s32 var_r28; + s32 var_r27; + s32 temp_r26; + s32 temp_r25; + s32 var_r30; + s32 var_r29; + s32 i; + + diceValue[0] = diceValue[1] = diceValue[2] = 0; + if (BoardPlayerSizeGet(rollPlayer) == 2 || GWPlayer[rollPlayer].bowser_suit != 0) { + BoardCameraViewSet(2); + } + BoardCameraMotionWait(); + BoardCameraTargetModelSet(-1); + for (i = 0; i < numDice; i++) { + temp_r26 = rollPlayer; + if (!_CheckFlag(0x1000B)) { + var_r27 = BoardPlayerItemCount(temp_r26); + if (GWTeamGet()) { + temp_r25 = BoardPlayerSameTeamFind(temp_r26); + var_r27 += BoardPlayerItemCount(temp_r25); + } + if (BoardRollTypeGet() != -1 || var_r27 == 0 || _CheckFlag(0x10009) || BoardRollResizeCheck()) { + var_r29 = 0x90004; + } else { + var_r29 = 0x90002; + } + if (inputTimer != 0) { + var_r29 = 0x300025; + } + HuWinMesMaxSizeGet(1, sp8, var_r29); + switch (GWGameStat.language) { + case 0: + var_f31 = -10000.0f; + break; + case 1: + var_f31 = 288.0f - (sp8[0] / 2 - 16.0f); + break; + } + var_f30 = 304.0f; + rollWin = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 0); + HuWinBGTPLvlSet(rollWin, 0.0f); + HuWinMesSpeedSet(rollWin, 0); + HuWinMesSet(rollWin, var_r29); + } + DiceCreate(i); + DiceWaitFull(i); + DoInput(i); + if (rollWin != -1) { + HuWinKill(rollWin); + rollWin = -1; + } + if (destMode == -2 || destMode == -1 || destMode == -3 || destMode == -4) { + HuPrcEnd(); + } + BoardPlayerDiceJumpStart(rollPlayer); + while (!BoardPlayerDiceJumpCheck(rollPlayer)) { + HuPrcVSleep(); + } + DiceSetHit(i); + while (GWPlayer[rollPlayer].field08_bit3 != 0) { + HuPrcVSleep(); + } + } + for (var_r30 = i = 0; i < numDice; i++) { + var_r30 += diceValue[i]; + } + var_r28 = 0; + switch (numDice) { + case 2: + if (diceValue[0] == diceValue[1]) { + var_r28 = 1; + } + break; + case 3: + if (diceValue[0] == diceValue[1] && diceValue[0] == diceValue[2]) { + var_r28 = 1; + } + break; + } + if (var_r28 != 0) { + SameRollExec(); + } + BoardDicePauseAll(); + while (!BoardDiceDoneCheck()) { + HuPrcVSleep(); + } + for (i = 0; i < numDice; i++) { + BoardDiceStop(i); + } + destMode = var_r30; + GWPlayer[rollPlayer].roll = var_r30; + BoardDiceDigit2DInit(rollPlayer, 1); + if (_CheckFlag(0x1000B)) { + BoardTutorialHookExec(6, 0); + } + if (tutorialRollF != 0) { + tutorialRollF = 0; + } + HuPrcEnd(); +} + +static void DiceCreate(s32 arg0) { + Vec sp1C; + float temp_f30; + float var_f31; + omObjData *temp_r31; + DiceWork *temp_r30; + s32 sp8; + s32 spC[4] = { + 0x00070018, + 0x00070019, + 0x0007001A, + 0x0007001B + }; + + sp8 = 0; + diceMdl[arg0] = BoardModelCreate(spC[diceSize], NULL, 0); + temp_f30 = BoardRandMod(maxRoll) + 0.5f; + BoardPlayerPosGet(rollPlayer, &sp1C); + HuAudFXPlay(0x302); + BoardModelMotionStart(diceMdl[arg0], 0, 0); + BoardModelMotionSpeedSet(diceMdl[arg0], 0.0f); + BoardModelMotionTimeSet(diceMdl[arg0], temp_f30); + BoardModelScaleSet(diceMdl[arg0], 0.001f, 0.001f, 0.001f); + temp_r31 = omAddObjEx(boardObjMan, 0x102, 0, 0, -1, DiceMain); + temp_r30 = OM_GET_WORK_PTR(temp_r31, DiceWork); + temp_r30->unk00_field0 = 0; + temp_r30->unk00_field1 = 0; + temp_r30->unk00_field2 = 0; + temp_r30->unk00_field3 = arg0; + temp_r30->unk04 = 0; + temp_r30->unk01 = 4; + temp_r30->unk02 = 0; + diceObj[arg0] = temp_r31; + var_f31 = 250.0f; + if (diceSize == 2) { + var_f31 = 625.0f; + } else if (GWPlayer[rollPlayer].bowser_suit != 0) { + var_f31 = 575.0f; + } + sp1C.y += var_f31; + temp_r31->trans.x = sp1C.x; + temp_r31->trans.y = sp1C.y; + temp_r31->trans.z = sp1C.z; + temp_r31->scale.x = 0.1f; + temp_r31->scale.y = 0.1f; + temp_r31->scale.z = 0.1f; + sp1C.z += 70.0f; +} + +static void DoInput(s32 arg0) { + s32 var_r31; + s32 var_r30; + u16 sp8[1]; + + destMode = 0; + lbl_801D4098 = 0; + while (1) { + HuPrcVSleep(); + *sp8 = GetBtnRoll(rollPlayer); + if (BoardPauseActiveCheck()) { + *sp8 = 0; + continue; + } + if (*sp8 == 0x100) { + inputTimer++; + break; + } + if (inputTimer == 0) { + if (*sp8 == 0x10) { + destMode = -3; + HuAudFXPlay(1); + break; + } + if (*sp8 == 0x20) { + destMode = -4; + HuAudFXPlay(1); + break; + } + var_r31 = BoardPlayerItemCount(rollPlayer); + if (GWTeamGet()) { + var_r30 = BoardPlayerSameTeamFind(rollPlayer); + var_r31 += BoardPlayerItemCount(var_r30); + } + if (var_r31 == 0 || BoardRollTypeGet() != -1 || BoardRollResizeCheck() || _CheckFlag(0x10009)) { + if (_CheckFlag(0x10009) && GWBoardGet() == 5 && *sp8 == 0x200 && var_r31 != 0) { + HuAudFXPlay(4); + } + } else if (*sp8 == 0x200) { + destMode = -2; + HuAudFXPlay(3); + BoardPauseDisableSet(1); + break; + } + } + } +} + +static void DiceWaitFull(s32 arg0) { + DiceWork *temp_r31 = OM_GET_WORK_PTR(diceObj[arg0], DiceWork); + + while (temp_r31->unk00_field2 != 1) { + HuPrcVSleep(); + } +} + +static void DiceSetHit(s32 arg0) { + DiceWork *temp_r30 = OM_GET_WORK_PTR(diceObj[arg0], DiceWork); + + temp_r30->unk00_field2 = 2; + temp_r30->unk04 = 0; + BoardModelMotionSpeedSet(diceMdl[arg0], 0.0f); + diceValue[arg0] = (s32) BoardModelMotionTimeGet(diceMdl[arg0]) + 1; + if (tutorialRollF != 0 && tutorialRoll[arg0] != -1) { + BoardModelMotionTimeSet(diceMdl[arg0], tutorialRoll[arg0] - 1); + diceValue[arg0] = tutorialRoll[arg0]; + } +} + +static void RollDestroy(void) { + if (rollWin != -1) { + HuWinKill(rollWin); + rollWin = -1; + } + if (rollProc) { + HuPrcKill(rollProc); + } + DicePauseAll(); + DiceKill(); + BoardConfettiKill(); + rollProc = NULL; +} + +static void DiceMain(omObjData *arg0) { + DiceWork *temp_r29 = OM_GET_WORK_PTR(arg0, DiceWork); + float temp_f29; + float var_f28; + float var_f27; + s16 temp_r26; + s16 temp_r27; + + if (temp_r29->unk00_field0 != 0 || BoardIsKill()) { + if (diceSndStatus[temp_r29->unk00_field3] != -1) { + HuAudFXStop(diceSndStatus[temp_r29->unk00_field3]); + diceSndStatus[temp_r29->unk00_field3] = -1; + } + if (diceMdl[temp_r29->unk00_field3] != -1) { + BoardModelKill(diceMdl[temp_r29->unk00_field3]); + diceMdl[temp_r29->unk00_field3] = -1; + } + if (diceEff[temp_r29->unk00_field3] != -1) { + Hu3DParManKill(diceEff[temp_r29->unk00_field3]); + diceEff[temp_r29->unk00_field3] = -1; + } + DicePause(temp_r29->unk00_field3); + diceObj[temp_r29->unk00_field3] = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + switch (temp_r29->unk00_field2) { + case 0: + if (temp_r29->unk06 >= 0x438) { + temp_r29->unk00_field2 = 1; + arg0->scale.x = arg0->scale.y = arg0->scale.z = 1.0f; + arg0->rot.y = temp_r29->unk04 = 0; + } else { + if (temp_r29->unk04 == 0 && diceSndStatus[temp_r29->unk00_field3] == -1) { + diceSndStatus[temp_r29->unk00_field3] = HuAudFXPlay(0x300); + } + arg0->rot.y = temp_r29->unk06 % 360; + temp_r29->unk06 += 0x19; + if (temp_r29->unk04 < 0xB4) { + var_f27 = 0.0f; + var_f28 = 1.0f; + } else { + var_f27 = 1.0f; + var_f28 = 0.5f; + } + arg0->scale.x = var_f27 + var_f28 * sin((float) (temp_r29->unk04 % 180) * M_PI / 180.0); + arg0->scale.y = arg0->scale.x; + arg0->scale.z = arg0->scale.x; + if (temp_r29->unk04 <= 360) { + if (temp_r29->unk04 < 0xB4) { + temp_r29->unk04 += 6; + } else { + temp_r29->unk04 += 0x12; + } + if (temp_r29->unk04 > 360) { + temp_r29->unk04 = 360; + } + } + } + break; + case 1: + temp_r29->unk04 += 4; + if (temp_r29->unk04 > 360) { + temp_r29->unk04 -= 360; + } + OSs16tof32(&temp_r29->unk04, &temp_f29); + arg0->trans.y += 0.20000000298023224 * sin(temp_f29 * M_PI / 180.0); + break; + case 2: + temp_r29->unk04++; + if (temp_r29->unk04 >= 8) { + if (diceSndStatus[temp_r29->unk00_field3] != -1) { + HuAudFXStop(diceSndStatus[temp_r29->unk00_field3]); + diceSndStatus[temp_r29->unk00_field3] = -1; + } + HuAudFXPlay(0x303); + HuAudFXPlay(0x30C); + temp_r29->unk00_field2 = 3; + temp_r29->unk04 = 0; + BoardDiceValueSet(temp_r29->unk00_field3, diceValue[temp_r29->unk00_field3]); + diceEff[temp_r29->unk00_field3] = BoardDiceEffectCreate(); + Hu3DParManPosSet(diceEff[temp_r29->unk00_field3], arg0->trans.x, arg0->trans.y, arg0->trans.z); + BoardModelVisibilitySet(diceMdl[temp_r29->unk00_field3], 0); + } else { + OSs16tof32(&temp_r29->unk04, &temp_f29); + if (temp_r29->unk04 < 4) { + arg0->trans.y += 10.0f + (0.5f * temp_f29); + arg0->scale.x = (arg0->scale.x + (0.10000000149011612 * sin((M_PI * (4.0f * temp_f29)) / 180.0))); + arg0->scale.y = arg0->scale.x; + arg0->scale.z = arg0->scale.x; + } else { + BoardModelAlphaSet(diceMdl[temp_r29->unk00_field3], 0xFF - (temp_r29->unk04 << 5)); + } + arg0->trans.y += -0.49f * temp_f29 * temp_f29; + } + break; + case 3: + break; + } + if (diceEff[temp_r29->unk00_field3] != -1 && ++temp_r29->unk04 >= 150) { + temp_r29->unk00_field0 = 1; + DiceHideEffect(temp_r29->unk00_field3, 0); + } + if (temp_r29->unk00_field1 == 0 || temp_r29->unk00_field2 != 3) { + if (temp_r29->unk02++ > temp_r29->unk01) { + temp_r29->unk02 = 0; + temp_r26 = BoardModelMotionTimeGet(diceMdl[temp_r29->unk00_field3]); + do { + temp_r27 = BoardRandMod(maxRoll); + } while (temp_r27 == temp_r26); + BoardModelMotionTimeSet(diceMdl[temp_r29->unk00_field3], temp_r27 + 0.5f); + } + } + BoardModelPosSet(diceMdl[temp_r29->unk00_field3], arg0->trans.x, arg0->trans.y, arg0->trans.z); + BoardModelRotSet(diceMdl[temp_r29->unk00_field3], arg0->rot.x, arg0->rot.y, arg0->rot.z); + BoardModelScaleSet(diceMdl[temp_r29->unk00_field3], arg0->scale.x, arg0->scale.y, arg0->scale.z); +} + +static void DicePause(s32 arg0) { + omObjData *temp_r31 = diceObj[arg0]; + + if (temp_r31) { + OM_GET_WORK_PTR(temp_r31, DiceWork)->unk00_field0 = 1; + } +} + +static void DicePauseAll(void) { + DicePause(0); + DicePause(1); + DicePause(2); +} + +s16 BoardDiceEffectCreate(void) { + s16 temp_r31; + s16 temp_r30; + AnimData *temp_r29; + void *temp_r28; + + temp_r28 = HuDataSelHeapReadNum(0x7006B, MEMORY_DEFAULT_NUM, HEAP_DATA); + temp_r29 = HuSprAnimRead(temp_r28); + temp_r31 = Hu3DParManCreate(temp_r29, 0x64, &diceEffParam); + Hu3DParManAttrSet(temp_r31, 0x108); + Hu3DParManRotSet(temp_r31, 0.0f, 0.0f, 0.0f); + Hu3DParManVecSet(temp_r31, 0.0f, 0.4f, 0.2f); + Hu3DParManTimeLimitSet(temp_r31, 0x96); + temp_r30 = Hu3DParManModelIDGet(temp_r31); + Hu3DModelLayerSet(temp_r30, 1); + Hu3DParticleBlendModeSet(temp_r30, 0); + return temp_r31; +} + +static void DiceHideEffect(s32 arg0, s32 arg1) { + s16 temp_r31; + + if (diceEff[arg0] == -1) { + return; + } + temp_r31 = Hu3DParManModelIDGet(diceEff[arg0]); + if (arg1 != 0) { + Hu3DModelAttrReset(temp_r31, 1); + } else { + Hu3DModelAttrSet(temp_r31, 1); + } +} + +void BoardDicePauseAll(void) { + DiceDigitWork *temp_r30; + s32 i; + + for (i = 0; i < numDice; i++) { + if (diceDigitObj[i]) { + temp_r30 = OM_GET_WORK_PTR(diceDigitObj[i], DiceDigitWork); + temp_r30->unk00_field1 = 1; + temp_r30->unk00_field2 = 1; + temp_r30->unk02 = 0; + } + } +} + +BOOL BoardDiceDoneCheck(void) { + DiceDigitWork *temp_r30; + s32 i; + + for (i = 0; i < numDice; i++) { + if (diceDigitObj[i]) { + temp_r30 = OM_GET_WORK_PTR(diceDigitObj[i], DiceDigitWork); + if (temp_r30->unk00_field2 != 0) { + return FALSE; + } + } + } + return TRUE; +} + +void BoardDiceStop(s32 arg0) { + DiceDigitWork *temp_r31; + + if (!diceDigitObj[arg0]) { + return; + } + temp_r31 = OM_GET_WORK_PTR(diceDigitObj[arg0], DiceDigitWork); + temp_r31->unk00_field0 = 1; +} + +void BoardDiceVisibleSet(s32 arg0, s32 arg1) { + DiceDigitWork *temp_r31; + + if (!diceDigitObj[arg0]) { + return; + } + temp_r31 = OM_GET_WORK_PTR(diceDigitObj[arg0], DiceDigitWork); + if ((temp_r31->unk01 / 10) == 0) { + BoardModelVisibilitySet(temp_r31->unk04[1], 0); + } else { + BoardModelVisibilitySet(temp_r31->unk04[1], arg1); + } + BoardModelVisibilitySet(temp_r31->unk04[0], arg1); +} + +void BoardDiceValueSet(s32 arg0, s32 arg1) { + omObjData *temp_r27; + DiceDigitWork *temp_r31; + Vec spC; + s16 sp8[2]; + s16 temp_r30; + s16 i; + + if (arg1 > 0x63) { + arg1 = 0x63; + } + sp8[0] = (arg1 % 10); + sp8[1] = (arg1 / 10); + BoardPlayerPosGet(GWSystem.player_curr, &spC); + spC.y += 300.0f; + temp_r27 = omAddObjEx(boardObjMan, 0x102, 0, 0, -1, DiceDigitMain); + temp_r31 = OM_GET_WORK_PTR(temp_r27, DiceDigitWork); + temp_r31->unk00_field0 = 0; + temp_r31->unk00_field1 = 0; + temp_r31->unk00_field2 = 0; + temp_r31->unk00_field3 = arg0; + temp_r31->unk08 = 0.3f; + temp_r31->unk01 = arg1; + temp_r31->unk02 = 360; + for (i = 0; i < 2; i++) { + temp_r30 = BoardModelCreate(diceDigitMdlTbl[sp8[i]], NULL, 0); + BoardModelPosSetV(temp_r30, &spC); + BoardModelMotionStart(temp_r30, 0, 0); + BoardModelMotionSpeedSet(temp_r30, 0.0f); + BoardModelMotionTimeSet(temp_r30, 0.0f); + BoardModelScaleSet(temp_r30, 0.143f, 0.143f, 0.143f); + temp_r31->unk04[i] = temp_r30; + } + if (sp8[1] == 0) { + BoardModelVisibilitySet(temp_r31->unk04[1], 0); + } + diceDigitObj[arg0] = temp_r27; +} + +static void DiceDigitMain(omObjData *arg0) { + DiceDigitWork *temp_r31 = OM_GET_WORK_PTR(arg0, DiceDigitWork); + + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + DiceDigitKill(temp_r31); + diceDigitObj[temp_r31->unk00_field3] = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + DiceDigitMove(temp_r31, temp_r31->unk00_field1); + DiceDigitRotate(temp_r31, temp_r31->unk00_field1); +} + +static void DiceDigitKill(DiceDigitWork *arg0) { + s32 i; + + for (i = 0; i < 2; i++) { + if (arg0->unk04[i] != -1) { + BoardModelKill(arg0->unk04[i]); + } + } +} + +static void DiceKill(void) { + DiceDigitWork *temp_r29; + s32 i; + + for (i = 0; i < 3; i++) { + if (diceDigitObj[i]) { + temp_r29 = OM_GET_WORK_PTR(diceDigitObj[i], DiceDigitWork); + DiceDigitKill(temp_r29); + } + } +} + +static void DiceDigitMove(DiceDigitWork *arg0, s32 arg1) { + s32 sp8 = 0; + Vec sp30; + Vec sp24; + Vec sp54[2]; + Vec sp18 = { 288.0f, 155.0f, 240.0f }; + Vec sp3C[2] = { + { 144.0f, 155.0f, 240.0f }, + { 432.0f, 155.0f, 240.0f } + }; + Vec sp6C[3] = { + { 144.0f, 155.0f, 240.0f }, + { 432.0f, 155.0f, 240.0f }, + { 288.0f, 155.0f, 240.0f } + }; + Vec spC = { 288.0f, 176.0f, 240.0f }; + Vec *var_r29; + float var_f31; + s16 var_r27; + s16 i; + + var_r27 = (arg0->unk01 / 10); + if (arg1 != 0) { + var_r29 = &spC; + var_f31 = -20.0f * arg0->unk00_field3; + } else { + switch (numDice) { + case 1: + var_r29 = &sp18; + break; + case 2: + var_r29 = &sp3C[arg0->unk00_field3]; + break; + case 3: + var_r29 = &sp6C[arg0->unk00_field3]; + break; + } + var_f31 = 0.0f; + } + for (i = 0; i < 2; i++) { + if (var_r27 == 0) { + sp54[i].x = var_r29->x; + } else if (i != 0) { + sp54[i].x = var_r29->x - 30.0f; + } else { + sp54[i].x = var_r29->x + 30.0f; + } + sp54[i].y = var_r29->y; + sp54[i].z = var_r29->z + var_f31; + } + for (i = 0; i < 2; i++) { + BoardModelPosGet(arg0->unk04[i], &sp30); + Hu3D2Dto3D(&sp54[i], 1, &sp54[i]); + PSVECSubtract(&sp54[i], &sp30, &sp24); + if (PSVECMag(&sp24) < 0.01f) { + arg0->unk00_field2 = 0; + if (arg1 != 0 && arg0->unk00_field3 != 0) { + BoardModelVisibilitySet(arg0->unk04[i], 0); + } + } else { + arg0->unk00_field2 = 1; + } + PSVECScale(&sp24, &sp24, arg0->unk08); + PSVECAdd(&sp30, &sp24, &sp30); + BoardModelPosSetV(arg0->unk04[i], &sp30); + } +} + +static void DiceDigitRotate(DiceDigitWork *arg0, s32 arg1) { + float var_f30; + s32 i; + + if (arg1 != 0) { + arg0->unk02 += 0x12; + if (arg0->unk02 >= 360) { + arg0->unk02 = 360; + } + } else { + arg0->unk02 -= 0x12; + if (arg0->unk02 <= 0) { + arg0->unk02 = 0; + } + } + OSs16tof32(&arg0->unk02, &var_f30); + for (i = 0; i < 2; i++) { + if (arg0->unk04[i] != -1) { + BoardModelRotSet(arg0->unk04[i], 0.0f, var_f30, 0.0f); + } + } +} + +static void SameRollExec(void) { + Vec sp8; + float var_f31; + s32 var_r28; + s32 temp_r27; + s32 var_r31; + s32 i; + s32 var_r29; + + temp_r27 = -1; + BoardPauseDisableSet(1); + var_r28 = 0x50; + switch (numDice) { + case 2: + if (diceValue[0] == 7) { + var_r31 = 0x1E; + } else { + var_r31 = 0xA; + } + break; + case 3: + if (diceValue[0] == 7) { + var_r31 = 0x32; + var_r28 = 0x118; + } else if (diceValue[0] & 1) { + var_r31 = 0x1E; + } else { + var_r31 = 0xA; + } + break; + default: + return; + } + sprintf(sameRollCoinStr, "%d", var_r31); + BoardPlayerPosGet(rollPlayer, &sp8); + if (BoardPlayerSizeGet(rollPlayer) == 2 || GWPlayer[rollPlayer].bowser_suit != 0) { + sp8.y += 700.0f; + var_f31 = 450.0f; + } else { + sp8.y += 600.0f; + var_f31 = 300.0f; + } + BoardConfettiCreate(&sp8, var_r28, var_f31); + BoardAudSeqPause(0, 1, 0x3E8); + HuPrcSleep(0xA); + temp_r27 = HuAudSStreamPlay(9); + while (HuAudSStreamStatGet(temp_r27) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 0x3E8); + BoardWinCreate(0, 0x90000, -1); + BoardWinInsertMesSet(sameRollCoinStr, 0); + BoardWinWait(); + BoardWinKill(); + if (var_r31 >= 0x32) { + var_r29 = 1; + } else if (var_r31 >= 0x14) { + var_r29 = 3; + } else { + var_r29 = 6; + } + for (i = 0; i < var_r31; i++) { + BoardPlayerCoinsAdd(rollPlayer, 1); + HuAudFXPlay(7); + HuPrcSleep(var_r29); + } + HuAudFXPlay(0xF); + BoardConfettiStop(); + BoardPauseDisableSet(0); +} + +static s32 GetBtnRoll(s32 arg0) { + s32 var_r31 = 0; + s32 var_r29; + + if (boardTutorialUseItem >= 0 && boardTutorialUseItem <= 0xD) { + var_r31 = 0x200; + return var_r31; + } + if (_CheckFlag(0x1000B)) { + var_r31 = 0x100; + return var_r31; + } + if (!GWPlayer[arg0].com) { + var_r29 = GWPlayer[arg0].port; + var_r31 = HuPadBtnDown[var_r29]; + return var_r31; + } + if (_CheckFlag(0x10009) || BoardRollTypeGet() != -1) { + return 0x100; + } + var_r31 = GetComBtnRoll(arg0); + return var_r31; +} + +static s32 GetComBtnRoll(s32 arg0) { + if (BoardRollTypeGet() != -1 || BoardPlayerItemCount(arg0) == 0 || BoardRollResizeCheck() || _CheckFlag(0x10009)) { + return 0x100; + } + if (BoardComUseItemCheck(arg0)) { + return 0x200; + } + return 0x100; +} + +void BoardRollTutorialSet(s16 *arg0) { + s32 i; + + for (i = 0; i < 3; i++) { + tutorialRoll[i] = arg0[i]; + } + tutorialRollF = 1; +} From 4c9a154f6237e845aef3841fb82a461d6173192a Mon Sep 17 00:00:00 2001 From: zestydevy Date: Sat, 10 Feb 2024 11:14:49 -0600 Subject: [PATCH 018/106] matched modeltest00.c --- .../GMPE01_00/rels/modeltestDll/symbols.txt | 58 ++-- configure.py | 2 +- include/REL/modeltestDll.h | 4 + include/unsplit.h | 1 + src/REL/modeltestDll/modeltest00.c | 250 ++++++++++++++++++ 5 files changed, 285 insertions(+), 30 deletions(-) diff --git a/config/GMPE01_00/rels/modeltestDll/symbols.txt b/config/GMPE01_00/rels/modeltestDll/symbols.txt index f6f8dd36..e8215199 100644 --- a/config/GMPE01_00/rels/modeltestDll/symbols.txt +++ b/config/GMPE01_00/rels/modeltestDll/symbols.txt @@ -73,36 +73,36 @@ lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data: lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 data:double -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 data:double -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 data:double -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 scope:local data:double +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data:double +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 scope:local data:double +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0xC data:4byte lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0xC data:4byte -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0xC data:4byte -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0xC data:4byte +lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0xC scope:local data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0xC data:float lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 data:float lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float @@ -166,7 +166,7 @@ lbl_1_data_2EC = .data:0x000002EC; // type:object size:0x2C scope:local data:str lbl_1_data_318 = .data:0x00000318; // type:object size:0xA scope:local data:string lbl_1_data_322 = .data:0x00000322; // type:object size:0x36 lbl_1_data_358 = .data:0x00000358; // type:object size:0x8 -lbl_1_data_360 = .data:0x00000360; // type:object size:0x28 data:string +lbl_1_data_360 = .data:0x00000360; // type:object size:0x28 scope:local data:string lbl_1_data_388 = .data:0x00000388; // type:object size:0x28 data:string lbl_1_data_3B0 = .data:0x000003B0; // type:object size:0x58 lbl_1_data_408 = .data:0x00000408; // type:object size:0x58 diff --git a/configure.py b/configure.py index ac6cc8ac..3e0d8918 100644 --- a/configure.py +++ b/configure.py @@ -865,7 +865,7 @@ config.libs = [ objects = { Object(Matching, "REL/executor.c"), Object(Matching, "REL/modeltestDll/main.c"), - Object(NonMatching, "REL/modeltestDll/modeltest00.c"), + Object(Matching, "REL/modeltestDll/modeltest00.c"), Object(NonMatching, "REL/modeltestDll/modeltest01.c"), } ), diff --git a/include/REL/modeltestDll.h b/include/REL/modeltestDll.h index 40e74cc0..0715ad9b 100644 --- a/include/REL/modeltestDll.h +++ b/include/REL/modeltestDll.h @@ -3,6 +3,7 @@ #include "game/hsfdraw.h" #include "game/objsub.h" +#include "game/object.h" // -------------------------------------------------------------------------- // @@ -35,6 +36,9 @@ extern f32 CZoom; void fn_1_29C(); void fn_1_28F8(Point3d * arg0, Point3d * arg1); extern void omOutView(); +void fn_1_37DC(omObjData*); +void fn_1_439C(omObjData*); +void fn_1_46F0(); s16 MGSeqCreate(s16, ...); void MGSeqParamSet(s16, s16, s16); diff --git a/include/unsplit.h b/include/unsplit.h index 35d6ade4..0dd04666 100644 --- a/include/unsplit.h +++ b/include/unsplit.h @@ -20,6 +20,7 @@ void CharModelMotionTimeSet(s16 character, float time); void CharModelMotionSpeedSet(s16 character, float speed); void CharMotionKill(s16 character, s32 motion); void CharModelVoiceEnableSet(s16 character, s16 motion, s32 flag); +void CharModelCreateCoinParticle(s16, Vec *); s32 CharModelMotionEndCheck(s16 character); diff --git a/src/REL/modeltestDll/modeltest00.c b/src/REL/modeltestDll/modeltest00.c index e69de29b..17381a22 100644 --- a/src/REL/modeltestDll/modeltest00.c +++ b/src/REL/modeltestDll/modeltest00.c @@ -0,0 +1,250 @@ +#include "math.h" +#include "unsplit.h" +#include "game/wipe.h" +#include "game/pad.h" + +#include "REL/modeltestDll.h" + +// -------------------------------------------------------------------------- // + +omObjData * unk_bss_9FC; +omObjData * lbl_1_bss_9F8; +omObjData * lbl_1_bss_9F4; +s16 lbl_1_bss_9EC[4]; +s16 lbl_1_bss_9AC[4][8]; +Process * lbl_1_bss_9A8; +u16 lbl_1_data_358[4] = {1, 2, 4, 8}; + +// -------------------------------------------------------------------------- // + +void fn_1_34B0() +{ + Process * temp_r30; + s16 var_r31; + s32 var_r29; + s32 var_r28; + + OSReport("******* MODELTESTObjectSetup *********\n"); + + temp_r30 = omInitObjMan(0x32, 0x2000); + CRot.x = -22.0f; + CRot.y = 0.0f; + CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 60.0f; + Center.z = 0.0f; + CZoom = 400.0f; + + for (var_r31 = 0; var_r31 < 4; ++var_r31) + { + Hu3DCameraCreate(lbl_1_data_358[var_r31]); + Hu3DCameraPerspectiveSet(lbl_1_data_358[var_r31], 45.0f, 20.0f, 20000.0f, 1.2f); + + if ((var_r31 & 2) != 0) { + var_r29 = 0xF0; + } else { + var_r29 = 0; + } + + Hu3DCameraViewportSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, var_r29, 320.0f, 240.0f, 0.0f, 1.0f); + + if ((var_r31 & 2) != 0) { + var_r28 = 0xF0; + } else { + var_r28 = 0; + } + + Hu3DCameraScissorSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, var_r28, 320, 240); + } + + lbl_1_bss_9F4 = omAddObjEx(temp_r30, 0, 0x20U, 0x20U, -1, fn_1_37DC); + lbl_1_bss_9F8 = omAddObjEx(temp_r30, 0x7FDA, 0U, 0U, -1, fn_1_439C); + lbl_1_bss_9A8 = HuPrcCreate(fn_1_46F0, 0x64U, 0x2000U, 0); + + Hu3DBGColorSet(0x20U, 0x80U, 0x80U); + WipeCreate(1, 0, 0x1E); +} + +// -------------------------------------------------------------------------- // + +static inline void HuControlCamCenter(Point3d *sp18, Point3d *sp30) { + s8 temp_r28; + + temp_r28 = HuPadSubStkX[0] & 0xF8; + if (temp_r28 != 0) { + Center.x += 0.05f * (sp30->x * temp_r28); + Center.y += 0.05f * (sp30->y * temp_r28); + Center.z += 0.05f * (sp30->z * temp_r28); + } + PSVECNormalize(sp18, sp30); + temp_r28 = -(HuPadSubStkY[0] & 0xF8); + if (temp_r28 != 0) { + Center.x += 0.05f * (sp30->x * temp_r28); + Center.y += 0.05f * (sp30->y * temp_r28); + Center.z += 0.05f * (sp30->z * temp_r28); + } +} + +// -------------------------------------------------------------------------- // + +void fn_1_37DC(omObjData *) +{ + Point3d sp3C; + Point3d sp30; + Point3d sp24; + Point3d sp18; + float temp_f31; + + if ((HuPadBtnDown[0] & PAD_BUTTON_START) != 0) { + if (lbl_1_bss_9A8) { + HuPrcKill(lbl_1_bss_9A8); + } + omOvlReturnEx(1, 1); + return; + } + + if ((HuPadBtn[0] & PAD_BUTTON_UP) != 0) { + CRot.x += 2.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_DOWN) != 0) { + CRot.x -= 2.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_LEFT) != 0) { + CRot.y += 2.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_RIGHT) != 0) { + CRot.y -= 2.0f; + } + + CZoom += HuPadTrigL[0] / 2; + CZoom -= HuPadTrigR[0] / 2; + + sp3C.x = Center.x + (CZoom * (sin((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0))); + sp3C.y = (Center.y + (CZoom * -sin((M_PI * CRot.x) / 180.0))); + sp3C.z = (Center.z + (CZoom * (cos((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0)))); + sp30.x = Center.x - sp3C.x; + sp30.y = Center.y - sp3C.y; + sp30.z = Center.z - sp3C.z; + sp24.x = (sin((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + sp24.y = cos((M_PI * CRot.x) / 180.0); + sp24.z = (cos((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + temp_f31 = CRot.z; + + sp18.x = sp24.x * (sp30.x * sp30.x + (1.0f - sp30.x * sp30.x) * cos((M_PI * temp_f31) / 180.0)) + + sp24.y * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.z * sin((M_PI * temp_f31) / 180.0)) + + sp24.z * (sp30.x * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.y * sin((M_PI * temp_f31) / 180.0)); + + sp18.y = sp24.y * (sp30.y * sp30.y + (1.0f - sp30.y * sp30.y) * cos((M_PI * temp_f31) / 180.0)) + + sp24.x * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.z * sin((M_PI * temp_f31) / 180.0)) + + sp24.z * (sp30.y * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.x * sin((M_PI * temp_f31) / 180.0)); + + sp18.z = sp24.z * (sp30.z * sp30.z + (1.0f - sp30.z * sp30.z) * cos((M_PI * temp_f31) / 180.0)) + + (sp24.x * (sp30.x * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) - sp30.y * sin((M_PI * temp_f31) / 180.0)) + + sp24.y * (sp30.y * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) + sp30.x * sin((M_PI * temp_f31) / 180.0))); + + PSVECCrossProduct(&sp24, &sp30, &sp30); + PSVECNormalize(&sp30, &sp30); + + HuControlCamCenter(&sp18, &sp30); +} + +// -------------------------------------------------------------------------- // + +void fn_1_439C(omObjData * ) +{ + s16 var_r31; + f32 temp_f30; + f32 temp_f31; + f32 sp10; + Point3d sp2C; + Point3d sp20; + Point3d sp14; + for (var_r31 = 0; var_r31 < 4; ++var_r31) + { + temp_f31 = CRot.x; + temp_f30 = CRot.y + (var_r31 * 90); + sp10 = CRot.z; + sp2C.x = Center.x + (CZoom * (sin((M_PI * temp_f30) / 180.0) * (cos((M_PI * temp_f31) / 180.0)))); + sp2C.y = Center.y + (CZoom * -sin((M_PI * temp_f31) / 180.0)); + sp2C.z = Center.z + (CZoom * (cos((M_PI * temp_f30) / 180.0) * (cos((M_PI * temp_f31) / 180.0)))); + + sp20.x = Center.x; + sp20.y = Center.y; + sp20.z = Center.z; + + sp14.x = sin((M_PI * temp_f30) / 180.0) * (sin((M_PI * temp_f31) / 180.0)); + sp14.y = cos((M_PI * temp_f31) / 180.0); + sp14.z = cos((M_PI * temp_f30) / 180.0) * (sin((M_PI * temp_f31) / 180.0)); + + Hu3DCameraPosSet(lbl_1_data_358[var_r31], sp2C.x, sp2C.y, sp2C.z, sp14.x, sp14.y, sp14.z, sp20.x, sp20.y, sp20.z); + } +} + +// -------------------------------------------------------------------------- // + +const Point3d lbl_1_rodata_18C = {0.0f, 0.0f, 0.0f}; +const Point3d lbl_1_rodata_198 = {0.0f, 1.0f, 0.0f}; + +// -------------------------------------------------------------------------- // + +void fn_1_46F0(void) +{ + Point3d sp20; + Point3d sp14; + Point3d sp8; + s16 var_r31; + s16 var_r30; + + sp14 = lbl_1_rodata_18C; + sp8 = lbl_1_rodata_198; + + Hu3DGLightCreate(0.0f, 500.0f, 1000.0f, 0.0f, -0.5f, -1.0f, 0xFFU, 0xFFU, 0xFFU); + Hu3DShadowCreate(45.0f, 500.0f, 8000.0f); + Hu3DShadowTPLvlSet(0.5f); + Hu3DShadowSizeSet(0xC0U); + + sp20.x = -500.0f; + sp20.y = 1000.0f; + sp20.z = 1000.0f; + Hu3DShadowPosSet(&sp20, &sp8, &sp14); + + for (var_r31 = 0; var_r31 < 4; ++var_r31) + { + var_r30 = var_r31; + lbl_1_bss_9EC[var_r31] = CharModelCreate(var_r30, 8); + Hu3DModelShadowSet(lbl_1_bss_9EC[var_r31]); + lbl_1_bss_9AC[var_r31][0] = CharMotionCreate(var_r30, 0x5F0002); + CharModelMotionSet(var_r30, lbl_1_bss_9AC[var_r31][0]); + Hu3DModelAttrSet(lbl_1_bss_9EC[var_r31], 0x40000001U); + Hu3DModelCameraSet(lbl_1_bss_9EC[var_r31], lbl_1_data_358[var_r31]); + Hu3DModelPosSet(lbl_1_bss_9EC[var_r31], ((( var_r31 / 4) * 200) - 100), 0.0f, (-( var_r31 % 4) * 150)); + Hu3DModelPosSet(lbl_1_bss_9EC[var_r31], 0.0f, 0.0f, 0.0f); + CharMotionDataClose(var_r30); + } + + var_r31 = Hu3DModelCreateFile(0x700024); + Hu3DModelScaleSet(var_r31, 5.0f, 5.0f, 5.0f); + Hu3DModelShadowMapSet(var_r31); + + while (TRUE) + { + if ((HuPadBtnDown[0] & PAD_BUTTON_Y) != 0) { + Hu3DCameraKill(2); + Hu3DCameraKill(4); + Hu3DCameraKill(8); + sp20.x = + sp20.z = + sp20.y = 0.0f; + sp20.y += 200.0f; + CharModelCreateCoinParticle(4, &sp20); + } + HuPrcVSleep(); + } +} + +// -------------------------------------------------------------------------- // + +const Point3d lbl_1_rodata_1C8 = {0.0f, 0.0f, 0.0f}; +const Point3d lbl_1_rodata_1D4 = {0.0f, 0.0f, -1.0f}; + +// -------------------------------------------------------------------------- // \ No newline at end of file From 3cb84d1f21ba438ffc7c36e9bcceec6ce0ae187d Mon Sep 17 00:00:00 2001 From: zestydevy Date: Sat, 10 Feb 2024 11:26:23 -0600 Subject: [PATCH 019/106] matched modeltest00.c --- .../GMPE01_00/rels/modeltestDll/symbols.txt | 58 ++-- configure.py | 2 +- include/REL/modeltestDll.h | 4 + include/unsplit.h | 1 + src/REL/modeltestDll/modeltest00.c | 250 ++++++++++++++++++ 5 files changed, 285 insertions(+), 30 deletions(-) diff --git a/config/GMPE01_00/rels/modeltestDll/symbols.txt b/config/GMPE01_00/rels/modeltestDll/symbols.txt index f6f8dd36..e8215199 100644 --- a/config/GMPE01_00/rels/modeltestDll/symbols.txt +++ b/config/GMPE01_00/rels/modeltestDll/symbols.txt @@ -73,36 +73,36 @@ lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data: lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 data:double -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 data:double -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 data:double -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 scope:local data:double +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data:double +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x8 scope:local data:double +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0xC data:4byte lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0xC data:4byte -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0xC data:4byte -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0xC data:4byte +lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0xC scope:local data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0xC data:float lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 data:float lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float @@ -166,7 +166,7 @@ lbl_1_data_2EC = .data:0x000002EC; // type:object size:0x2C scope:local data:str lbl_1_data_318 = .data:0x00000318; // type:object size:0xA scope:local data:string lbl_1_data_322 = .data:0x00000322; // type:object size:0x36 lbl_1_data_358 = .data:0x00000358; // type:object size:0x8 -lbl_1_data_360 = .data:0x00000360; // type:object size:0x28 data:string +lbl_1_data_360 = .data:0x00000360; // type:object size:0x28 scope:local data:string lbl_1_data_388 = .data:0x00000388; // type:object size:0x28 data:string lbl_1_data_3B0 = .data:0x000003B0; // type:object size:0x58 lbl_1_data_408 = .data:0x00000408; // type:object size:0x58 diff --git a/configure.py b/configure.py index ac6cc8ac..3e0d8918 100644 --- a/configure.py +++ b/configure.py @@ -865,7 +865,7 @@ config.libs = [ objects = { Object(Matching, "REL/executor.c"), Object(Matching, "REL/modeltestDll/main.c"), - Object(NonMatching, "REL/modeltestDll/modeltest00.c"), + Object(Matching, "REL/modeltestDll/modeltest00.c"), Object(NonMatching, "REL/modeltestDll/modeltest01.c"), } ), diff --git a/include/REL/modeltestDll.h b/include/REL/modeltestDll.h index 40e74cc0..0715ad9b 100644 --- a/include/REL/modeltestDll.h +++ b/include/REL/modeltestDll.h @@ -3,6 +3,7 @@ #include "game/hsfdraw.h" #include "game/objsub.h" +#include "game/object.h" // -------------------------------------------------------------------------- // @@ -35,6 +36,9 @@ extern f32 CZoom; void fn_1_29C(); void fn_1_28F8(Point3d * arg0, Point3d * arg1); extern void omOutView(); +void fn_1_37DC(omObjData*); +void fn_1_439C(omObjData*); +void fn_1_46F0(); s16 MGSeqCreate(s16, ...); void MGSeqParamSet(s16, s16, s16); diff --git a/include/unsplit.h b/include/unsplit.h index 35d6ade4..0dd04666 100644 --- a/include/unsplit.h +++ b/include/unsplit.h @@ -20,6 +20,7 @@ void CharModelMotionTimeSet(s16 character, float time); void CharModelMotionSpeedSet(s16 character, float speed); void CharMotionKill(s16 character, s32 motion); void CharModelVoiceEnableSet(s16 character, s16 motion, s32 flag); +void CharModelCreateCoinParticle(s16, Vec *); s32 CharModelMotionEndCheck(s16 character); diff --git a/src/REL/modeltestDll/modeltest00.c b/src/REL/modeltestDll/modeltest00.c index e69de29b..17381a22 100644 --- a/src/REL/modeltestDll/modeltest00.c +++ b/src/REL/modeltestDll/modeltest00.c @@ -0,0 +1,250 @@ +#include "math.h" +#include "unsplit.h" +#include "game/wipe.h" +#include "game/pad.h" + +#include "REL/modeltestDll.h" + +// -------------------------------------------------------------------------- // + +omObjData * unk_bss_9FC; +omObjData * lbl_1_bss_9F8; +omObjData * lbl_1_bss_9F4; +s16 lbl_1_bss_9EC[4]; +s16 lbl_1_bss_9AC[4][8]; +Process * lbl_1_bss_9A8; +u16 lbl_1_data_358[4] = {1, 2, 4, 8}; + +// -------------------------------------------------------------------------- // + +void fn_1_34B0() +{ + Process * temp_r30; + s16 var_r31; + s32 var_r29; + s32 var_r28; + + OSReport("******* MODELTESTObjectSetup *********\n"); + + temp_r30 = omInitObjMan(0x32, 0x2000); + CRot.x = -22.0f; + CRot.y = 0.0f; + CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 60.0f; + Center.z = 0.0f; + CZoom = 400.0f; + + for (var_r31 = 0; var_r31 < 4; ++var_r31) + { + Hu3DCameraCreate(lbl_1_data_358[var_r31]); + Hu3DCameraPerspectiveSet(lbl_1_data_358[var_r31], 45.0f, 20.0f, 20000.0f, 1.2f); + + if ((var_r31 & 2) != 0) { + var_r29 = 0xF0; + } else { + var_r29 = 0; + } + + Hu3DCameraViewportSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, var_r29, 320.0f, 240.0f, 0.0f, 1.0f); + + if ((var_r31 & 2) != 0) { + var_r28 = 0xF0; + } else { + var_r28 = 0; + } + + Hu3DCameraScissorSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, var_r28, 320, 240); + } + + lbl_1_bss_9F4 = omAddObjEx(temp_r30, 0, 0x20U, 0x20U, -1, fn_1_37DC); + lbl_1_bss_9F8 = omAddObjEx(temp_r30, 0x7FDA, 0U, 0U, -1, fn_1_439C); + lbl_1_bss_9A8 = HuPrcCreate(fn_1_46F0, 0x64U, 0x2000U, 0); + + Hu3DBGColorSet(0x20U, 0x80U, 0x80U); + WipeCreate(1, 0, 0x1E); +} + +// -------------------------------------------------------------------------- // + +static inline void HuControlCamCenter(Point3d *sp18, Point3d *sp30) { + s8 temp_r28; + + temp_r28 = HuPadSubStkX[0] & 0xF8; + if (temp_r28 != 0) { + Center.x += 0.05f * (sp30->x * temp_r28); + Center.y += 0.05f * (sp30->y * temp_r28); + Center.z += 0.05f * (sp30->z * temp_r28); + } + PSVECNormalize(sp18, sp30); + temp_r28 = -(HuPadSubStkY[0] & 0xF8); + if (temp_r28 != 0) { + Center.x += 0.05f * (sp30->x * temp_r28); + Center.y += 0.05f * (sp30->y * temp_r28); + Center.z += 0.05f * (sp30->z * temp_r28); + } +} + +// -------------------------------------------------------------------------- // + +void fn_1_37DC(omObjData *) +{ + Point3d sp3C; + Point3d sp30; + Point3d sp24; + Point3d sp18; + float temp_f31; + + if ((HuPadBtnDown[0] & PAD_BUTTON_START) != 0) { + if (lbl_1_bss_9A8) { + HuPrcKill(lbl_1_bss_9A8); + } + omOvlReturnEx(1, 1); + return; + } + + if ((HuPadBtn[0] & PAD_BUTTON_UP) != 0) { + CRot.x += 2.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_DOWN) != 0) { + CRot.x -= 2.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_LEFT) != 0) { + CRot.y += 2.0f; + } + if ((HuPadBtn[0] & PAD_BUTTON_RIGHT) != 0) { + CRot.y -= 2.0f; + } + + CZoom += HuPadTrigL[0] / 2; + CZoom -= HuPadTrigR[0] / 2; + + sp3C.x = Center.x + (CZoom * (sin((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0))); + sp3C.y = (Center.y + (CZoom * -sin((M_PI * CRot.x) / 180.0))); + sp3C.z = (Center.z + (CZoom * (cos((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0)))); + sp30.x = Center.x - sp3C.x; + sp30.y = Center.y - sp3C.y; + sp30.z = Center.z - sp3C.z; + sp24.x = (sin((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + sp24.y = cos((M_PI * CRot.x) / 180.0); + sp24.z = (cos((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); + temp_f31 = CRot.z; + + sp18.x = sp24.x * (sp30.x * sp30.x + (1.0f - sp30.x * sp30.x) * cos((M_PI * temp_f31) / 180.0)) + + sp24.y * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.z * sin((M_PI * temp_f31) / 180.0)) + + sp24.z * (sp30.x * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.y * sin((M_PI * temp_f31) / 180.0)); + + sp18.y = sp24.y * (sp30.y * sp30.y + (1.0f - sp30.y * sp30.y) * cos((M_PI * temp_f31) / 180.0)) + + sp24.x * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.z * sin((M_PI * temp_f31) / 180.0)) + + sp24.z * (sp30.y * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.x * sin((M_PI * temp_f31) / 180.0)); + + sp18.z = sp24.z * (sp30.z * sp30.z + (1.0f - sp30.z * sp30.z) * cos((M_PI * temp_f31) / 180.0)) + + (sp24.x * (sp30.x * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) - sp30.y * sin((M_PI * temp_f31) / 180.0)) + + sp24.y * (sp30.y * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) + sp30.x * sin((M_PI * temp_f31) / 180.0))); + + PSVECCrossProduct(&sp24, &sp30, &sp30); + PSVECNormalize(&sp30, &sp30); + + HuControlCamCenter(&sp18, &sp30); +} + +// -------------------------------------------------------------------------- // + +void fn_1_439C(omObjData * ) +{ + s16 var_r31; + f32 temp_f30; + f32 temp_f31; + f32 sp10; + Point3d sp2C; + Point3d sp20; + Point3d sp14; + for (var_r31 = 0; var_r31 < 4; ++var_r31) + { + temp_f31 = CRot.x; + temp_f30 = CRot.y + (var_r31 * 90); + sp10 = CRot.z; + sp2C.x = Center.x + (CZoom * (sin((M_PI * temp_f30) / 180.0) * (cos((M_PI * temp_f31) / 180.0)))); + sp2C.y = Center.y + (CZoom * -sin((M_PI * temp_f31) / 180.0)); + sp2C.z = Center.z + (CZoom * (cos((M_PI * temp_f30) / 180.0) * (cos((M_PI * temp_f31) / 180.0)))); + + sp20.x = Center.x; + sp20.y = Center.y; + sp20.z = Center.z; + + sp14.x = sin((M_PI * temp_f30) / 180.0) * (sin((M_PI * temp_f31) / 180.0)); + sp14.y = cos((M_PI * temp_f31) / 180.0); + sp14.z = cos((M_PI * temp_f30) / 180.0) * (sin((M_PI * temp_f31) / 180.0)); + + Hu3DCameraPosSet(lbl_1_data_358[var_r31], sp2C.x, sp2C.y, sp2C.z, sp14.x, sp14.y, sp14.z, sp20.x, sp20.y, sp20.z); + } +} + +// -------------------------------------------------------------------------- // + +const Point3d lbl_1_rodata_18C = {0.0f, 0.0f, 0.0f}; +const Point3d lbl_1_rodata_198 = {0.0f, 1.0f, 0.0f}; + +// -------------------------------------------------------------------------- // + +void fn_1_46F0(void) +{ + Point3d sp20; + Point3d sp14; + Point3d sp8; + s16 var_r31; + s16 var_r30; + + sp14 = lbl_1_rodata_18C; + sp8 = lbl_1_rodata_198; + + Hu3DGLightCreate(0.0f, 500.0f, 1000.0f, 0.0f, -0.5f, -1.0f, 0xFFU, 0xFFU, 0xFFU); + Hu3DShadowCreate(45.0f, 500.0f, 8000.0f); + Hu3DShadowTPLvlSet(0.5f); + Hu3DShadowSizeSet(0xC0U); + + sp20.x = -500.0f; + sp20.y = 1000.0f; + sp20.z = 1000.0f; + Hu3DShadowPosSet(&sp20, &sp8, &sp14); + + for (var_r31 = 0; var_r31 < 4; ++var_r31) + { + var_r30 = var_r31; + lbl_1_bss_9EC[var_r31] = CharModelCreate(var_r30, 8); + Hu3DModelShadowSet(lbl_1_bss_9EC[var_r31]); + lbl_1_bss_9AC[var_r31][0] = CharMotionCreate(var_r30, 0x5F0002); + CharModelMotionSet(var_r30, lbl_1_bss_9AC[var_r31][0]); + Hu3DModelAttrSet(lbl_1_bss_9EC[var_r31], 0x40000001U); + Hu3DModelCameraSet(lbl_1_bss_9EC[var_r31], lbl_1_data_358[var_r31]); + Hu3DModelPosSet(lbl_1_bss_9EC[var_r31], ((( var_r31 / 4) * 200) - 100), 0.0f, (-( var_r31 % 4) * 150)); + Hu3DModelPosSet(lbl_1_bss_9EC[var_r31], 0.0f, 0.0f, 0.0f); + CharMotionDataClose(var_r30); + } + + var_r31 = Hu3DModelCreateFile(0x700024); + Hu3DModelScaleSet(var_r31, 5.0f, 5.0f, 5.0f); + Hu3DModelShadowMapSet(var_r31); + + while (TRUE) + { + if ((HuPadBtnDown[0] & PAD_BUTTON_Y) != 0) { + Hu3DCameraKill(2); + Hu3DCameraKill(4); + Hu3DCameraKill(8); + sp20.x = + sp20.z = + sp20.y = 0.0f; + sp20.y += 200.0f; + CharModelCreateCoinParticle(4, &sp20); + } + HuPrcVSleep(); + } +} + +// -------------------------------------------------------------------------- // + +const Point3d lbl_1_rodata_1C8 = {0.0f, 0.0f, 0.0f}; +const Point3d lbl_1_rodata_1D4 = {0.0f, 0.0f, -1.0f}; + +// -------------------------------------------------------------------------- // \ No newline at end of file From dc268a65409c01b2f35e60603c34c490e1deae44 Mon Sep 17 00:00:00 2001 From: zestydevy Date: Sat, 10 Feb 2024 11:48:55 -0600 Subject: [PATCH 020/106] ternary in fn_1_34B0 --- src/REL/modeltestDll/modeltest00.c | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/src/REL/modeltestDll/modeltest00.c b/src/REL/modeltestDll/modeltest00.c index 17381a22..9bf6eb2d 100644 --- a/src/REL/modeltestDll/modeltest00.c +++ b/src/REL/modeltestDll/modeltest00.c @@ -21,8 +21,6 @@ void fn_1_34B0() { Process * temp_r30; s16 var_r31; - s32 var_r29; - s32 var_r28; OSReport("******* MODELTESTObjectSetup *********\n"); @@ -39,22 +37,8 @@ void fn_1_34B0() { Hu3DCameraCreate(lbl_1_data_358[var_r31]); Hu3DCameraPerspectiveSet(lbl_1_data_358[var_r31], 45.0f, 20.0f, 20000.0f, 1.2f); - - if ((var_r31 & 2) != 0) { - var_r29 = 0xF0; - } else { - var_r29 = 0; - } - - Hu3DCameraViewportSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, var_r29, 320.0f, 240.0f, 0.0f, 1.0f); - - if ((var_r31 & 2) != 0) { - var_r28 = 0xF0; - } else { - var_r28 = 0; - } - - Hu3DCameraScissorSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, var_r28, 320, 240); + Hu3DCameraViewportSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, ((var_r31 & 2) != 0) ? 0xF0 : 0, 320.0f, 240.0f, 0.0f, 1.0f); + Hu3DCameraScissorSet(lbl_1_data_358[var_r31], (var_r31 & 1) * 320, ((var_r31 & 2) != 0) ? 0xF0 : 0, 320, 240); } lbl_1_bss_9F4 = omAddObjEx(temp_r30, 0, 0x20U, 0x20U, -1, fn_1_37DC); From a276a37302522deac43ca0193358c378decb5179 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 10 Feb 2024 13:42:14 -0600 Subject: [PATCH 021/106] Split several minigame rels M408, M409, M410, M411, and M450 are all split. I labeled chrman.c more as well. --- config/GMPE01_00/rels/m408Dll/splits.txt | 26 ++++++++++++++++ config/GMPE01_00/rels/m408Dll/symbols.txt | 13 +++++--- config/GMPE01_00/rels/m409Dll/splits.txt | 19 ++++++++++++ config/GMPE01_00/rels/m409Dll/symbols.txt | 7 +++-- config/GMPE01_00/rels/m410Dll/splits.txt | 25 +++++++++++++++ config/GMPE01_00/rels/m410Dll/symbols.txt | 6 ++-- config/GMPE01_00/rels/m411Dll/splits.txt | 9 ++++++ config/GMPE01_00/rels/m411Dll/symbols.txt | 2 +- config/GMPE01_00/rels/m450Dll/splits.txt | 6 ++++ config/GMPE01_00/symbols.txt | 22 +++++++------- configure.py | 37 +++++++++++++++++++++++ include/unsplit.h | 8 ++--- src/REL/modeltestDll/main.c | 20 ++++++------ src/REL/modeltestDll/modeltest00.c | 6 ++-- src/REL/w03Dll/mg_coin.c | 2 +- src/game/board/model.c | 8 ++--- 16 files changed, 171 insertions(+), 45 deletions(-) diff --git a/config/GMPE01_00/rels/m408Dll/splits.txt b/config/GMPE01_00/rels/m408Dll/splits.txt index 531cd645..d01840d2 100644 --- a/config/GMPE01_00/rels/m408Dll/splits.txt +++ b/config/GMPE01_00/rels/m408Dll/splits.txt @@ -5,3 +5,29 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/m408Dll/main.c: + .text start:0x000000A0 end:0x00008958 + .rodata start:0x00000000 end:0x000002C8 + .data start:0x00000000 end:0x00000198 + .bss start:0x00000000 end:0x00000080 + +REL/m408Dll/camera.c: + .text start:0x00008958 end:0x0000C44C + .rodata start:0x000002C8 end:0x000004C0 + .bss start:0x00000080 end:0x00000118 + +REL/m408Dll/stage.c: + .text start:0x0000C44C end:0x000118D0 + .rodata start:0x000004C0 end:0x000006C0 + .data start:0x00000198 end:0x000001A0 + .bss start:0x00000118 end:0x00000168 + +REL/m408Dll/object.c: + .text start:0x000118D0 end:0x000163C8 + .rodata start:0x000006C0 end:0x000007F4 + .data start:0x000001A0 end:0x00000574 + .bss start:0x00000168 end:0x000075AC diff --git a/config/GMPE01_00/rels/m408Dll/symbols.txt b/config/GMPE01_00/rels/m408Dll/symbols.txt index 0553b57b..9d09ad6b 100644 --- a/config/GMPE01_00/rels/m408Dll/symbols.txt +++ b/config/GMPE01_00/rels/m408Dll/symbols.txt @@ -1,6 +1,6 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0x47C +ModuleProlog = .text:0x000000A0; // type:function size:0x47C fn_1_51C = .text:0x0000051C; // type:function size:0x50 fn_1_56C = .text:0x0000056C; // type:function size:0x438 fn_1_9A4 = .text:0x000009A4; // type:function size:0x4C @@ -465,7 +465,9 @@ lbl_1_rodata_7F0 = .rodata:0x000007F0; // type:object size:0x4 data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x20 lbl_1_data_20 = .data:0x00000020; // type:object size:0xC lbl_1_data_2C = .data:0x0000002C; // type:object size:0xC -lbl_1_data_38 = .data:0x00000038; // type:object size:0x20 +lbl_1_data_38 = .data:0x00000038; // type:object size:0x4 +lbl_1_data_3C = .data:0x0000003C; // type:object size:0x18 +lbl_1_data_54 = .data:0x00000054; // type:object size:0x4 lbl_1_data_58 = .data:0x00000058; // type:object size:0xC lbl_1_data_64 = .data:0x00000064; // type:object size:0xC lbl_1_data_70 = .data:0x00000070; // type:object size:0xC @@ -478,7 +480,8 @@ lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x28 lbl_1_data_C8 = .data:0x000000C8; // type:object size:0x20 lbl_1_data_E8 = .data:0x000000E8; // type:object size:0x1C lbl_1_data_104 = .data:0x00000104; // type:object size:0x40 -lbl_1_data_144 = .data:0x00000144; // type:object size:0x58 +lbl_1_data_144 = .data:0x00000144; // type:object size:0x54 +lbl_1_data_198 = .data:0x00000198; // type:object size:0x4 lbl_1_data_19C = .data:0x0000019C; // type:object size:0x4 data:4byte lbl_1_data_1A0 = .data:0x000001A0; // type:object size:0x24 lbl_1_data_1C4 = .data:0x000001C4; // type:object size:0x24 @@ -516,7 +519,7 @@ lbl_1_bss_66 = .bss:0x00000066; // type:object size:0x6 data:2byte lbl_1_bss_6C = .bss:0x0000006C; // type:object size:0x4 data:4byte lbl_1_bss_70 = .bss:0x00000070; // type:object size:0x4 data:4byte lbl_1_bss_74 = .bss:0x00000074; // type:object size:0x4 data:4byte -lbl_1_bss_78 = .bss:0x00000078; // type:object size:0x8 data:4byte +lbl_1_bss_78 = .bss:0x00000078; // type:object size:0x4 data:4byte lbl_1_bss_80 = .bss:0x00000080; // type:object size:0x4 data:4byte lbl_1_bss_84 = .bss:0x00000084; // type:object size:0x4 data:4byte lbl_1_bss_88 = .bss:0x00000088; // type:object size:0xC @@ -526,7 +529,7 @@ lbl_1_bss_A4 = .bss:0x000000A4; // type:object size:0x50 data:4byte lbl_1_bss_F4 = .bss:0x000000F4; // type:object size:0xC data:float lbl_1_bss_100 = .bss:0x00000100; // type:object size:0xC data:float lbl_1_bss_10C = .bss:0x0000010C; // type:object size:0x4 data:4byte -lbl_1_bss_110 = .bss:0x00000110; // type:object size:0x8 data:4byte +lbl_1_bss_110 = .bss:0x00000110; // type:object size:0x4 data:4byte lbl_1_bss_118 = .bss:0x00000118; // type:object size:0x2 data:2byte lbl_1_bss_11C = .bss:0x0000011C; // type:object size:0x4 data:4byte lbl_1_bss_120 = .bss:0x00000120; // type:object size:0x8 data:4byte diff --git a/config/GMPE01_00/rels/m409Dll/splits.txt b/config/GMPE01_00/rels/m409Dll/splits.txt index 531cd645..6c9f846e 100644 --- a/config/GMPE01_00/rels/m409Dll/splits.txt +++ b/config/GMPE01_00/rels/m409Dll/splits.txt @@ -5,3 +5,22 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/m409Dll/main.c: + .text start:0x000000A0 end:0x000067E0 + .rodata start:0x00000000 end:0x000001A0 + .data start:0x00000000 end:0x00000138 + .bss start:0x00000000 end:0x000000F0 + +REL/m409Dll/player.c: + .text start:0x000067E0 end:0x0000BF88 + .rodata start:0x000001A0 end:0x00000430 + .data start:0x00000138 end:0x000001F0 + .bss start:0x000000F0 end:0x000003B0 + +REL/m409Dll/cursor.c: + .text start:0x0000BF88 end:0x0000F588 + .rodata start:0x00000430 end:0x00000488 diff --git a/config/GMPE01_00/rels/m409Dll/symbols.txt b/config/GMPE01_00/rels/m409Dll/symbols.txt index 40e875cb..7cc0e253 100644 --- a/config/GMPE01_00/rels/m409Dll/symbols.txt +++ b/config/GMPE01_00/rels/m409Dll/symbols.txt @@ -1,6 +1,6 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0x394 +ModuleProlog = .text:0x000000A0; // type:function size:0x394 fn_1_434 = .text:0x00000434; // type:function size:0xA8 fn_1_4DC = .text:0x000004DC; // type:function size:0x48 fn_1_524 = .text:0x00000524; // type:function size:0x65C @@ -294,7 +294,8 @@ lbl_1_data_CD = .data:0x000000CD; // type:object size:0x9 data:string lbl_1_data_D6 = .data:0x000000D6; // type:object size:0x3 data:string lbl_1_data_D9 = .data:0x000000D9; // type:object size:0x10 data:string lbl_1_data_E9 = .data:0x000000E9; // type:object size:0x26 data:string -lbl_1_data_10F = .data:0x0000010F; // type:object size:0x2D +lbl_1_data_10F = .data:0x0000010F; // type:object size:0x24 data:string +lbl_1_data_138 = .data:0x00000138; // type:object size:0x4 lbl_1_data_13C = .data:0x0000013C; // type:object size:0x1C lbl_1_data_158 = .data:0x00000158; // type:object size:0x20 lbl_1_data_178 = .data:0x00000178; // type:object size:0x40 @@ -321,7 +322,7 @@ lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x9C data:2byte lbl_1_bss_DC = .bss:0x000000DC; // type:object size:0x4 data:4byte lbl_1_bss_E0 = .bss:0x000000E0; // type:object size:0x4 data:4byte lbl_1_bss_E4 = .bss:0x000000E4; // type:object size:0x2 data:2byte -lbl_1_bss_E8 = .bss:0x000000E8; // type:object size:0x8 data:4byte +lbl_1_bss_E8 = .bss:0x000000E8; // type:object size:0x4 data:4byte lbl_1_bss_F0 = .bss:0x000000F0; // type:object size:0x14 data:4byte lbl_1_bss_104 = .bss:0x00000104; // type:object size:0x2 data:2byte lbl_1_bss_106 = .bss:0x00000106; // type:object size:0x2 data:2byte diff --git a/config/GMPE01_00/rels/m410Dll/splits.txt b/config/GMPE01_00/rels/m410Dll/splits.txt index 531cd645..a0e6c79f 100644 --- a/config/GMPE01_00/rels/m410Dll/splits.txt +++ b/config/GMPE01_00/rels/m410Dll/splits.txt @@ -5,3 +5,28 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/m410Dll/main.c: + .text start:0x000000A0 end:0x000031A4 + .rodata start:0x00000000 end:0x000000D0 + .data start:0x00000000 end:0x000000D8 + .bss start:0x00000000 end:0x00000030 + +REL/m410Dll/stage.c: + .text start:0x000031A4 end:0x000033A8 + .rodata start:0x000000D0 end:0x000000D8 + +REL/m410Dll/game.c: + .text start:0x000033A8 end:0x00007E30 + .rodata start:0x000000D8 end:0x000001E8 + .data start:0x000000D8 end:0x00000130 + .bss start:0x00000030 end:0x00000060 + +REL/m410Dll/player.c: + .text start:0x00007E30 end:0x0000B784 + .rodata start:0x000001E8 end:0x000003A8 + .data start:0x00000130 end:0x000002B4 + .bss start:0x00000060 end:0x00000078 diff --git a/config/GMPE01_00/rels/m410Dll/symbols.txt b/config/GMPE01_00/rels/m410Dll/symbols.txt index 64fb64e4..8aa1e144 100644 --- a/config/GMPE01_00/rels/m410Dll/symbols.txt +++ b/config/GMPE01_00/rels/m410Dll/symbols.txt @@ -1,6 +1,6 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0x444 +ModuleProlog = .text:0x000000A0; // type:function size:0x444 fn_1_4E4 = .text:0x000004E4; // type:function size:0xC4 fn_1_5A8 = .text:0x000005A8; // type:function size:0x94 fn_1_63C = .text:0x0000063C; // type:function size:0x16C @@ -278,7 +278,7 @@ lbl_1_data_DC = .data:0x000000DC; // type:object size:0x20 lbl_1_data_FC = .data:0x000000FC; // type:object size:0x8 lbl_1_data_104 = .data:0x00000104; // type:object size:0xC lbl_1_data_110 = .data:0x00000110; // type:object size:0x4 data:4byte -lbl_1_data_114 = .data:0x00000114; // type:object size:0x1C +lbl_1_data_114 = .data:0x00000114; // type:object size:0x16 data:string lbl_1_data_130 = .data:0x00000130; // type:object size:0x10 lbl_1_data_140 = .data:0x00000140; // type:object size:0x20 lbl_1_data_160 = .data:0x00000160; // type:object size:0xC @@ -299,7 +299,7 @@ lbl_1_bss_16 = .bss:0x00000016; // type:object size:0x6 data:2byte lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x2 data:2byte lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 data:4byte lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x4 data:4byte -lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x8 data:4byte +lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x4 data:4byte lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x4 data:4byte lbl_1_bss_34 = .bss:0x00000034; // type:object size:0x4 data:4byte lbl_1_bss_38 = .bss:0x00000038; // type:object size:0x4 data:4byte diff --git a/config/GMPE01_00/rels/m411Dll/splits.txt b/config/GMPE01_00/rels/m411Dll/splits.txt index 531cd645..07b9f4ac 100644 --- a/config/GMPE01_00/rels/m411Dll/splits.txt +++ b/config/GMPE01_00/rels/m411Dll/splits.txt @@ -5,3 +5,12 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/m411Dll/main.c: + .text start:0x000000A0 end:0x0000B8A8 + .rodata start:0x00000000 end:0x000002F4 + .data start:0x00000000 end:0x0000033D + .bss start:0x00000000 end:0x00000EA2 diff --git a/config/GMPE01_00/rels/m411Dll/symbols.txt b/config/GMPE01_00/rels/m411Dll/symbols.txt index 38a4c8cd..4fdb3f11 100644 --- a/config/GMPE01_00/rels/m411Dll/symbols.txt +++ b/config/GMPE01_00/rels/m411Dll/symbols.txt @@ -1,6 +1,6 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0xDE0 +ModuleProlog = .text:0x000000A0; // type:function size:0xDE0 fn_1_E80 = .text:0x00000E80; // type:function size:0x10C fn_1_F8C = .text:0x00000F8C; // type:function size:0xE8 fn_1_1074 = .text:0x00001074; // type:function size:0x424 diff --git a/config/GMPE01_00/rels/m450Dll/splits.txt b/config/GMPE01_00/rels/m450Dll/splits.txt index 531cd645..85922d10 100644 --- a/config/GMPE01_00/rels/m450Dll/splits.txt +++ b/config/GMPE01_00/rels/m450Dll/splits.txt @@ -5,3 +5,9 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/m450Dll/main.c: + .text start:0x00000000 end:0x000299BC + .rodata start:0x00000000 end:0x00000398 + .data start:0x00000000 end:0x000017C4 + .bss start:0x00000000 end:0x00000364 diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 5da2e905..576f6e43 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -860,10 +860,10 @@ CreateEffect = .text:0x8004C180; // type:function size:0x1CC scope:local UpdateEffect = .text:0x8004C34C; // type:function size:0x4A0 scope:local RotateEffect = .text:0x8004C7EC; // type:function size:0x1E8 scope:local PlayEffectSound = .text:0x8004C9D4; // type:function size:0x344 scope:local -CharMotionCreate = .text:0x8004CD18; // type:function size:0x1D0 -CharMotionSet = .text:0x8004CEE8; // type:function size:0x88 -CharMotionKill = .text:0x8004CF70; // type:function size:0x9C -CharMotionDataClose = .text:0x8004D00C; // type:function size:0x2B8 +CharModelMotionCreate = .text:0x8004CD18; // type:function size:0x1D0 +CharModelMotionIndexSet = .text:0x8004CEE8; // type:function size:0x88 +CharModelMotionKill = .text:0x8004CF70; // type:function size:0x9C +CharModelMotionDataClose = .text:0x8004D00C; // type:function size:0x2B8 CharModelDataClose = .text:0x8004D2C4; // type:function size:0x430 CharModelKill = .text:0x8004D6F4; // type:function size:0x244 CharModelMotionSet = .text:0x8004D938; // type:function size:0x7C @@ -879,11 +879,11 @@ CharModelMotionShiftSet = .text:0x8004DD84; // type:function size:0x84 CharModelMotionShiftTimeGet = .text:0x8004DE08; // type:function size:0x44 CharModelMotionSpeedSet = .text:0x8004DE4C; // type:function size:0x4C CharModelLayerSetAll = .text:0x8004DE98; // type:function size:0x80 -CharModelCreateItemHook = .text:0x8004DF18; // type:function size:0x1D4 +CharModelItemHookCreate = .text:0x8004DF18; // type:function size:0x1D4 UpdateItemHook = .text:0x8004E0EC; // type:function size:0x484 scope:local -CharModelCreateParticle = .text:0x8004E570; // type:function size:0x3FC +CharModelEffectCreate = .text:0x8004E570; // type:function size:0x3FC OrbitEffect = .text:0x8004E96C; // type:function size:0x168 scope:local -CharModelCreateCoinParticle = .text:0x8004EAD4; // type:function size:0x1A0 +CharModelCoinEffectCreate = .text:0x8004EAD4; // type:function size:0x1A0 fn_8004EC74 = .text:0x8004EC74; // type:function size:0x130 fn_8004EDA4 = .text:0x8004EDA4; // type:function size:0x2B4 fn_8004F058 = .text:0x8004F058; // type:function size:0xE4 @@ -891,10 +891,10 @@ fn_8004F13C = .text:0x8004F13C; // type:function size:0x2B4 CharModelLayerSetAll2 = .text:0x8004F3F0; // type:function size:0x80 CharModelVoiceEnableSet = .text:0x8004F470; // type:function size:0xBC fn_8004F52C = .text:0x8004F52C; // type:function size:0x4C -fn_8004F578 = .text:0x8004F578; // type:function size:0xB0 -fn_8004F628 = .text:0x8004F628; // type:function size:0x2CC -fn_8004F8F4 = .text:0x8004F8F4; // type:function size:0x2CC -fn_8004FBC0 = .text:0x8004FBC0; // type:function size:0xF80 +CharModelEffectEnableSet = .text:0x8004F578; // type:function size:0xB0 +CharModelEffectNpcInit = .text:0x8004F628; // type:function size:0x2CC +CharModelEffectNpcInitSilent = .text:0x8004F8F4; // type:function size:0x2CC +UpdateNpcEffect = .text:0x8004FBC0; // type:function size:0xF80 scope:local CharModelStepTypeSet = .text:0x80050B40; // type:function size:0x30 PlayStepFX = .text:0x80050B70; // type:function size:0xEC scope:local MapWall = .text:0x80050C5C; // type:function size:0x1B8 diff --git a/configure.py b/configure.py index 3e0d8918..84efbee8 100644 --- a/configure.py +++ b/configure.py @@ -836,6 +836,43 @@ config.libs = [ Object(NonMatching, "REL/m407dll/score.c"), } ), + Rel('m408Dll', + objects = { + Object(Matching, "REL/executor.c"), + Object(NonMatching, "REL/m408Dll/main.c"), + Object(NonMatching, "REL/m408Dll/camera.c"), + Object(NonMatching, "REL/m408Dll/stage.c"), + Object(NonMatching, "REL/m408Dll/object.c"), + } + ), + Rel('m409Dll', + objects = { + Object(Matching, "REL/executor.c"), + Object(NonMatching, "REL/m409Dll/main.c"), + Object(NonMatching, "REL/m409Dll/player.c"), + Object(NonMatching, "REL/m409Dll/cursor.c"), + } + ), + Rel('m410Dll', + objects = { + Object(Matching, "REL/executor.c"), + Object(NonMatching, "REL/m410Dll/main.c"), + Object(NonMatching, "REL/m410Dll/stage.c"), + Object(NonMatching, "REL/m410Dll/game.c"), + Object(NonMatching, "REL/m410Dll/player.c"), + } + ), + Rel('m411Dll', + objects = { + Object(Matching, "REL/executor.c"), + Object(NonMatching, "REL/m411Dll/main.c"), + } + ), + Rel('m450Dll', + objects = { + Object(NonMatching, "REL/m450Dll/main.c"), + } + ), Rel('mentDll', objects = { Object(NonMatching, "REL/mentDll/common.c"), diff --git a/include/unsplit.h b/include/unsplit.h index 0dd04666..e73ffa56 100644 --- a/include/unsplit.h +++ b/include/unsplit.h @@ -8,19 +8,19 @@ void MGSeqKillAll(void); void MGSeqPracticeInit(void); void CharMotionClose(s16 character); void CharModelClose(s16 character); -void CharMotionDataClose(s16 character); +void CharModelMotionDataClose(s16 character); void CharModelKill(s16 character); s16 CharModelCreate(s16 character, s16 lod); -s16 CharMotionCreate(s16 character, s32 data_num); +s16 CharModelMotionCreate(s16 character, s32 data_num); void CharModelMotionSet(s16 character, s16 motion); float CharModelMotionMaxTimeGet(s16 character); float CharModelMotionTimeGet(s16 character); void CharModelMotionShiftSet(s16 model, s16 motion, float time, float shift_time, u32 attr); void CharModelMotionTimeSet(s16 character, float time); void CharModelMotionSpeedSet(s16 character, float speed); -void CharMotionKill(s16 character, s32 motion); +void CharModelMotionKill(s16 character, s32 motion); void CharModelVoiceEnableSet(s16 character, s16 motion, s32 flag); -void CharModelCreateCoinParticle(s16, Vec *); +void CharModelCoinEffectCreate(s16, Vec *); s32 CharModelMotionEndCheck(s16 character); diff --git a/src/REL/modeltestDll/main.c b/src/REL/modeltestDll/main.c index c4a8570d..93f3601a 100644 --- a/src/REL/modeltestDll/main.c +++ b/src/REL/modeltestDll/main.c @@ -231,19 +231,19 @@ void fn_1_29C(omObjData * arg0) Hu3DModelLayerSet(lbl_1_bss_98A[var_r31], 1); } - lbl_1_bss_88A[var_r31][0] = CharMotionCreate(chrIdx, lbl_1_data_0[0]); - lbl_1_bss_88A[var_r31][1] = CharMotionCreate(chrIdx, lbl_1_data_0[1]); - lbl_1_bss_88A[var_r31][2] = CharMotionCreate(chrIdx, lbl_1_data_0[2]); - lbl_1_bss_88A[var_r31][3] = CharMotionCreate(chrIdx, lbl_1_data_0[3]); - lbl_1_bss_88A[var_r31][4] = CharMotionCreate(chrIdx, lbl_1_data_0[4]); - lbl_1_bss_88A[var_r31][5] = CharMotionCreate(chrIdx, lbl_1_data_0[5]); - lbl_1_bss_88A[var_r31][6] = CharMotionCreate(chrIdx, lbl_1_data_0[6]); - lbl_1_bss_88A[var_r31][7] = CharMotionCreate(chrIdx, lbl_1_data_0[7]); - lbl_1_bss_88A[var_r31][0] = CharMotionCreate(chrIdx, 0x5F004D); + lbl_1_bss_88A[var_r31][0] = CharModelMotionCreate(chrIdx, lbl_1_data_0[0]); + lbl_1_bss_88A[var_r31][1] = CharModelMotionCreate(chrIdx, lbl_1_data_0[1]); + lbl_1_bss_88A[var_r31][2] = CharModelMotionCreate(chrIdx, lbl_1_data_0[2]); + lbl_1_bss_88A[var_r31][3] = CharModelMotionCreate(chrIdx, lbl_1_data_0[3]); + lbl_1_bss_88A[var_r31][4] = CharModelMotionCreate(chrIdx, lbl_1_data_0[4]); + lbl_1_bss_88A[var_r31][5] = CharModelMotionCreate(chrIdx, lbl_1_data_0[5]); + lbl_1_bss_88A[var_r31][6] = CharModelMotionCreate(chrIdx, lbl_1_data_0[6]); + lbl_1_bss_88A[var_r31][7] = CharModelMotionCreate(chrIdx, lbl_1_data_0[7]); + lbl_1_bss_88A[var_r31][0] = CharModelMotionCreate(chrIdx, 0x5F004D); CharModelMotionSet(chrIdx, lbl_1_bss_88A[var_r31][0]); Hu3DModelAttrSet(lbl_1_bss_98A[var_r31], 0x40000001U); Hu3DModelPosSet(lbl_1_bss_98A[var_r31], (var_r31 / 4 * 0xC8) - 100, 0.0f, -(var_r31 % 4) * 0x96); - CharMotionDataClose(chrIdx); + CharModelMotionDataClose(chrIdx); } temp_r26 = OSGetTick(); diff --git a/src/REL/modeltestDll/modeltest00.c b/src/REL/modeltestDll/modeltest00.c index 9bf6eb2d..9d20fa74 100644 --- a/src/REL/modeltestDll/modeltest00.c +++ b/src/REL/modeltestDll/modeltest00.c @@ -197,13 +197,13 @@ void fn_1_46F0(void) var_r30 = var_r31; lbl_1_bss_9EC[var_r31] = CharModelCreate(var_r30, 8); Hu3DModelShadowSet(lbl_1_bss_9EC[var_r31]); - lbl_1_bss_9AC[var_r31][0] = CharMotionCreate(var_r30, 0x5F0002); + lbl_1_bss_9AC[var_r31][0] = CharModelMotionCreate(var_r30, 0x5F0002); CharModelMotionSet(var_r30, lbl_1_bss_9AC[var_r31][0]); Hu3DModelAttrSet(lbl_1_bss_9EC[var_r31], 0x40000001U); Hu3DModelCameraSet(lbl_1_bss_9EC[var_r31], lbl_1_data_358[var_r31]); Hu3DModelPosSet(lbl_1_bss_9EC[var_r31], ((( var_r31 / 4) * 200) - 100), 0.0f, (-( var_r31 % 4) * 150)); Hu3DModelPosSet(lbl_1_bss_9EC[var_r31], 0.0f, 0.0f, 0.0f); - CharMotionDataClose(var_r30); + CharModelMotionDataClose(var_r30); } var_r31 = Hu3DModelCreateFile(0x700024); @@ -220,7 +220,7 @@ void fn_1_46F0(void) sp20.z = sp20.y = 0.0f; sp20.y += 200.0f; - CharModelCreateCoinParticle(4, &sp20); + CharModelCoinEffectCreate(4, &sp20); } HuPrcVSleep(); } diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index d8b3f52f..cc18cc73 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -670,7 +670,7 @@ void fn_1_95B8(omObjData* arg0) { var_r30->unk8.y += -0.08166667f * temp_f31 * temp_f31 * 0.75f; if (var_r30->unk8.y < temp_r29->unk8) { var_r30->unk8.y = temp_r29->unk8; - CharModelCreateCoinParticle(1, &var_r30->unk8); + CharModelCoinEffectCreate(1, &var_r30->unk8); BoardModelVisibilitySet(var_r30->unk_02, 0); HuAudFXPlay(7); BoardPlayerCoinsAdd(temp_r29->unk4, 1); diff --git a/src/game/board/model.c b/src/game/board/model.c index ef7bb9c8..1e3fb24c 100644 --- a/src/game/board/model.c +++ b/src/game/board/model.c @@ -381,8 +381,8 @@ s32 BoardModelMotionCreate(s16 model, s32 data_num) } model = Hu3DJointMotion(model_ptr->id, model_ptr->mot_data[i]); } else { - model = CharMotionCreate(model_ptr->character, data_num); - CharMotionDataClose(model_ptr->character); + model = CharModelMotionCreate(model_ptr->character, data_num); + CharModelMotionDataClose(model_ptr->character); } model_ptr->mot_id[i] = model; model_ptr->mot_count++; @@ -406,7 +406,7 @@ s32 BoardModelMotionKill(s16 model, s32 motion) if(model_ptr->character == -1) { Hu3DMotionKill(model_ptr->mot_id[motion]); } else { - CharMotionKill(model_ptr->character, model_ptr->mot_id[motion]); + CharModelMotionKill(model_ptr->character, model_ptr->mot_id[motion]); } model_ptr->mot_id[motion] = -1; } @@ -1170,7 +1170,7 @@ static s32 CreateBoardModelMotion(BoardModel *model, s32 count, s32 *data_num) } index = Hu3DJointMotion(model->id, data); } else { - index = CharMotionCreate(model->character, data_num[i]); + index = CharModelMotionCreate(model->character, data_num[i]); } if(index < 0) { return -1; From 58fe346b724b7f93ce5753e15a48cd195eb203b7 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 10 Feb 2024 16:06:13 -0600 Subject: [PATCH 022/106] Several fixes name of hook variable in HsfObjectData, staticness of XFB_Geometry, default type of object work, staticness and name of commentTbl are all fixed --- config/GMPE01_00/symbols.txt | 4 ++-- include/game/hsfformat.h | 2 +- include/game/object.h | 2 +- src/game/ClusterExec.c | 2 +- src/game/EnvelopeExec.c | 2 +- src/game/fault.c | 2 +- src/game/hsfdraw.c | 6 +++--- src/game/minigame_seq.c | 2 +- src/game/saveload.c | 6 +++--- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 576f6e43..736138cb 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5137,7 +5137,7 @@ VolumeTable = .data:0x801311E8; // type:object size:0x100 scope:local lbl_801312E8 = .data:0x801312E8; // type:object size:0x4D lbl_80131335 = .data:0x80131335; // type:object size:0x1B mgInfoTbl = .data:0x80131350; // type:object size:0xE00 data:2byte -saveComment = .data:0x80132150; // type:object size:0x40 scope:local +commentTbl = .data:0x80132150; // type:object size:0x40 scope:local lbl_80132190 = .data:0x80132190; // type:object size:0xC data:string lbl_8013219C = .data:0x8013219C; // type:object size:0xC data:string lbl_801321A8 = .data:0x801321A8; // type:object size:0xC data:string @@ -5153,7 +5153,7 @@ wrongdisc_en = .data:0x8013839C; // type:object size:0x1384 noreloc jumptable_80139720 = .data:0x80139720; // type:object size:0x34 scope:local bmpMes$493 = .data:0x80139754; // type:object size:0x18 scope:local lbl_8013976C = .data:0x8013976C; // type:object size:0x13 data:string -lbl_8013977F = .data:0x8013977F; // type:object size:0x19 +lbl_8013977F = .data:0x8013977F; // type:object size:0x12 data:string camViewTbl = .data:0x80139798; // type:object size:0x24 scope:local jumptable_801397BC = .data:0x801397BC; // type:object size:0x24 scope:local confettiLightTbl = .data:0x801397E0; // type:object size:0x48 scope:local diff --git a/include/game/hsfformat.h b/include/game/hsfformat.h index 1beae421..3a291ab1 100644 --- a/include/game/hsfformat.h +++ b/include/game/hsfformat.h @@ -286,7 +286,7 @@ typedef struct hsf_object_data { HsfBuffer **vertexShape; u32 clusterCnt; HsfCluster **cluster; - u32 hook; + u32 cenvCnt; HsfCenv *cenv; void *file[2]; } HsfObjectData; diff --git a/include/game/object.h b/include/game/object.h index ba3a68ee..83b891f5 100644 --- a/include/game/object.h +++ b/include/game/object.h @@ -51,7 +51,7 @@ typedef struct om_obj_data { /* 0x40 */ s16 *model; /* 0x44 */ u16 mtncnt; /* 0x48 */ s16 *motion; -/* 0x4C */ int work[4]; +/* 0x4C */ u32 work[4]; /* 0x5C */ void *data; } omObjData; diff --git a/src/game/ClusterExec.c b/src/game/ClusterExec.c index f1494664..57fb5ef0 100644 --- a/src/game/ClusterExec.c +++ b/src/game/ClusterExec.c @@ -119,7 +119,7 @@ void ClusterProc(ModelData *arg0) { temp_r31 = temp_r23->object; temp_r31 += var_r29->target; Vertextop = temp_r31->data.vertex->data; - if (temp_r31->data.hook) { + if (temp_r31->data.cenvCnt) { for (k = 0; k < temp_r31->data.vertex->count; k++) { Vertextop[k].x = ((Vec*) temp_r31->data.file[0])[k].x; Vertextop[k].y = ((Vec*) temp_r31->data.file[0])[k].y; diff --git a/src/game/EnvelopeExec.c b/src/game/EnvelopeExec.c index b67b1117..cf417b01 100644 --- a/src/game/EnvelopeExec.c +++ b/src/game/EnvelopeExec.c @@ -179,7 +179,7 @@ static void SetEnvelopMain(HsfData *arg0) { normtop = var_r31->data.file[1]; normenv = temp_r28->data; var_r25 = var_r31->data.cenv; - for (j = 0; j < var_r31->data.hook; j++, var_r25++) { + for (j = 0; j < var_r31->data.cenvCnt; j++, var_r25++) { SetEnvelop(var_r25); } sp10 = temp_r30->data; diff --git a/src/game/fault.c b/src/game/fault.c index 4f8a8b6c..f6043a78 100644 --- a/src/game/fault.c +++ b/src/game/fault.c @@ -25,7 +25,7 @@ static RGBColor XFB_Colors[5] = { #include "Ascii8x8_1bpp.inc" -XFBGeometry XFB_Geometry; +static XFBGeometry XFB_Geometry; static s32 (*XFB_putc)(u8 c, s32 x, s32 y); diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index 9be7868f..ab4dfb55 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -240,7 +240,7 @@ static void objMesh(ModelData *arg0, HsfObject *arg1) { temp_r25 = arg1->constData; if (!(temp_r25->flags & 0x1000)) { if (CancelTRXF == 0) { - if (arg1->data.hook != 0 && hookIdx == -1) { + if (arg1->data.cenvCnt != 0 && hookIdx == -1) { temp_r21 = arg1 - temp_r20->object; PSMTXConcat(MTXBuf[0], temp_r20->matrix->data[temp_r21 + temp_r20->matrix->base_idx], MTXBuf[MTXIdx]); } else { @@ -2770,7 +2770,7 @@ static s32 MakeCalcNBT(HsfObject *arg0, HsfFace *arg1, s16 arg2, s16 arg3) { temp_r27 = arg1->indices[arg2][1]; temp_r25 = arg1->indices[arg2][0]; temp_r24 = arg1->indices[arg3][0]; - if (arg0->data.hook != 0) { + if (arg0->data.cenvCnt != 0) { temp_r29 = arg0->data.normal->data; sp10.x = temp_r29[temp_r27].x; sp10.y = temp_r29[temp_r27].y; @@ -2801,7 +2801,7 @@ static s32 MakeNBT(HsfObject *arg0, HsfFace *arg1, s16 arg2, s16 arg3) { spC = arg0->data.vertex->data; temp_r28 = arg1->indices[arg2][1]; - if (arg0->data.hook != 0) { + if (arg0->data.cenvCnt != 0) { temp_r30 = arg0->data.normal->data; sp10.x = temp_r30[temp_r28].x; sp10.y = temp_r30[temp_r28].y; diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index 0c030084..a4a7f58a 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -3556,7 +3556,7 @@ void MGSeqPracticeExitCheck(omObjData *object) s16 input; s16 i; mgQuitExtraF = 0; - if((u32)object->work[0] == 0) { + if(object->work[0] == 0) { if(omMgIndexGet(omcurovl) == -1) { omDelObjEx(HuPrcCurrentGet(), object); return; diff --git a/src/game/saveload.c b/src/game/saveload.c index e3277ebb..0c5c5c26 100644 --- a/src/game/saveload.c +++ b/src/game/saveload.c @@ -27,7 +27,7 @@ s32 saveExecF; u8 curBoxNo; s16 curSlotNo; -u8 saveComment[2][32] = { +static u8 commentTbl[2][32] = { "Mario Party 4", "File 0 00/00/0000" }; @@ -258,10 +258,10 @@ void SLSaveDataMake(s32 erase, OSTime *time) { } } for (i = 0; i < 0x20; i++) { - buf[i] = (&saveComment[0][0])[i]; + buf[i] = (&commentTbl[0][0])[i]; } for (i = 0; i < 0x20; i++) { - (&buf[0x20])[i] = (&saveComment[0][0])[i+32]; + (&buf[0x20])[i] = (&commentTbl[0][0])[i+32]; } anim_data = HuSprAnimReadFile(WIN_CARD_BANNER_ANM); memcpy(buf + offsetof(SaveBufData, banner), anim_data->bmp->data, CARD_BANNER_WIDTH*CARD_BANNER_HEIGHT); From 02d17187404ac56ab622dc3ed1adbe036611bd31 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 10 Feb 2024 16:08:08 -0600 Subject: [PATCH 023/106] Fix mpexDll splits --- config/GMPE01_00/rels/mpexDll/splits.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/GMPE01_00/rels/mpexDll/splits.txt b/config/GMPE01_00/rels/mpexDll/splits.txt index dec8bfef..965cdf04 100644 --- a/config/GMPE01_00/rels/mpexDll/splits.txt +++ b/config/GMPE01_00/rels/mpexDll/splits.txt @@ -26,5 +26,5 @@ REL/mpexDll/charsel.c: REL/mpexDll/mgname.c: .text start:0x0001CB80 end:0x0001D198 - .rodata start:0x00000610 end:0x00000618 - .data start:0x00000788 end:0x00000788 + .rodata start:0x00000610 end:0x00000620 + .data start:0x00000788 end:0x00000AA0 From 4b8ab8425d6029a3dc2dc023a1cf25e423a6bdb0 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 10 Feb 2024 21:53:14 -0600 Subject: [PATCH 024/106] Decompile sreset.c --- config/GMPE01_00/symbols.txt | 2 +- configure.py | 2 +- include/game/pad.h | 2 +- include/game/thpmain.h | 5 + src/game/pad.c | 2 +- src/game/sreset.c | 422 +++++++++++++++++++++++++++++++++++ 6 files changed, 431 insertions(+), 4 deletions(-) create mode 100644 src/game/sreset.c diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 736138cb..d2cbf982 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5143,7 +5143,7 @@ lbl_8013219C = .data:0x8013219C; // type:object size:0xC data:string lbl_801321A8 = .data:0x801321A8; // type:object size:0xC data:string SaveFileNameTbl = .data:0x801321B4; // type:object size:0xC jumptable_801321C0 = .data:0x801321C0; // type:object size:0x34 scope:local -SR_PreRstChk = .data:0x801321F8; // type:object size:0x10 +SR_PreRstChk = .data:0x801321F8; // type:object size:0x10 scope:local coveropen_en = .data:0x80132208; // type:object size:0x1384 noreloc fatalerror_en = .data:0x8013358C; // type:object size:0x1384 noreloc loading_en = .data:0x80134910; // type:object size:0x1384 noreloc diff --git a/configure.py b/configure.py index 84efbee8..4b9440b4 100644 --- a/configure.py +++ b/configure.py @@ -358,7 +358,7 @@ config.libs = [ Object(Matching, "game/objsub.c"), Object(Matching, "game/flag.c"), Object(Matching, "game/saveload.c"), - Object(NonMatching, "game/sreset.c"), + Object(Matching, "game/sreset.c"), Object(Matching, "game/board/main.c"), Object(NonMatching, "game/board/player.c"), Object(Matching, "game/board/model.c"), diff --git a/include/game/pad.h b/include/game/pad.h index a771d2c2..2223f0b4 100644 --- a/include/game/pad.h +++ b/include/game/pad.h @@ -22,7 +22,7 @@ extern u8 HuPadDStkRep[4]; extern s8 HuPadErr[4]; extern u16 _PadBtn[4]; extern u16 _PadBtnDown[4]; -extern u32 VCounter; +extern s32 VCounter; void HuPadInit(void); void HuPadRead(void); diff --git a/include/game/thpmain.h b/include/game/thpmain.h index b0d5b0d1..13fb8e2c 100644 --- a/include/game/thpmain.h +++ b/include/game/thpmain.h @@ -2,6 +2,8 @@ #define _GAME_THPMAIN_H #include "dolphin/types.h" +#include "game/process.h" + s16 HuTHPSprCreateVol(char *path, s16 loop, s16 prio, float volume); s16 HuTHPSprCreate(char *path, s16 loop, s16 prio); @@ -15,4 +17,7 @@ s32 HuTHPFrameGet(void); s32 HuTHPTotalFrameGet(void); void HuTHPSetVolume(s32 left, s32 right); +extern Process *THPProc; + + #endif \ No newline at end of file diff --git a/src/game/pad.c b/src/game/pad.c index 139e879f..cded2f4f 100644 --- a/src/game/pad.c +++ b/src/game/pad.c @@ -43,7 +43,7 @@ static u8 _PadDStkRepCnt[4]; static u8 _PadDStkRepOld[4]; static s8 _PadErr[4]; static u32 RumbleBit; -u32 VCounter; +s32 VCounter; static u32 chanTbl[4] = { PAD_CHAN0_BIT, PAD_CHAN1_BIT, PAD_CHAN2_BIT, PAD_CHAN3_BIT }; diff --git a/src/game/sreset.c b/src/game/sreset.c new file mode 100644 index 00000000..04ca1a70 --- /dev/null +++ b/src/game/sreset.c @@ -0,0 +1,422 @@ +#include "dolphin.h" +#include "game/flag.h" +#include "game/dvd.h" +#include "game/pad.h" +#include "game/audio.h" +#include "game/thpmain.h" + +#define SR_DVD_LOADING 0 +#define SR_DVD_COVER_OPEN 1 +#define SR_DVD_NO_DISK 2 +#define SR_DVD_WRONG_DISK 3 +#define SR_DVD_RETRY_ERROR 4 +#define SR_DVD_FATAL_ERROR 5 + +#define PAD_BTN_SRESET (PAD_BUTTON_START|PAD_BUTTON_X|PAD_BUTTON_B) +#define PAD_BTN_SRESET_SHORT (PAD_BUTTON_X|PAD_BUTTON_B) + +extern s32 HuDvdErrWait; + +static s32 SR_PreRstChk[4] = {}; + +#include "coveropen_en.inc" +#include "fatalerror_en.inc" +#include "loading_en.inc" +#include "nodisc_en.inc" +#include "retryerror_en.inc" +#include "wrongdisc_en.inc" + +static s16 SR_PushTime[4] = {}; +static s8 SR_ResetPad = -1; + +static s16 XfbW; +static s16 XfbH; +static s32 XfbProg; +static void *Xfb[2] = {}; +static BOOL trychkBusyWait; +s32 SR_ExecReset; +static s32 SR_RestartChk; +static BOOL H_ResetReady; + +void HuRestartSystem(void); + +s32 HuSoftResetCheck(void); +s32 HuSoftResetCountCheck(void); +static void HuSoftResetPostProc(void); + +s32 HuSoftResetButtonCheck(void) +{ + if(SR_ExecReset) { + HuRestartSystem(); + } + return (SR_ExecReset) ? 1 : 0; +} + +static OSMessageQueue ToeMessageQueue; + +void HuDvdErrDispIntFunc(u32 retraceCount) +{ + OSWakeupThread(&ToeMessageQueue.queueSend); +} + +static void HuPreRstChk(void) +{ + static PADStatus padStat[4]; + int i; + PADRead(padStat); + for(i=0; i<4; i++) { + PADStatus *status = &padStat[i]; + if(status->err != 0) { + continue; + } + if((status->button & PAD_BTN_SRESET) == PAD_BTN_SRESET) { + SR_PreRstChk[i] = 1; + } else { + SR_PreRstChk[i] = 0; + } + } +} + +static OSMessage ToeMessageArray[16]; +static OSThread ToeThread; +static u8 ToeThreadStack[4096]; + +static void *ToeThreadFunc(void *param); +static void ToeDispCheck(void); + +void HuDvdErrDispInit(GXRenderModeObj *rmode, void *xfb1, void *xfb2) +{ + BOOL intrOld; + _ClearFlag(0x30000); + SR_ResetPad = -1; + SR_ExecReset = H_ResetReady = 0; + SR_RestartChk = 0; + SR_PushTime[0] = SR_PushTime[1] = SR_PushTime[2] = SR_PushTime[3] = 0; + VIWaitForRetrace(); + VIWaitForRetrace(); + VIWaitForRetrace(); + HuPreRstChk(); + HuDvdErrWait = 0; + Xfb[0] = xfb1; + Xfb[1] = xfb2; + if(rmode) { + XfbW = (u16)(((u16)rmode->fbWidth+15) & ~0xF); + XfbH = rmode->xfbHeight; + } else { + XfbW = 640; + XfbH = 480; + } + if((u16)rmode->xFBmode == VI_XFBMODE_SF) { + XfbProg = 0; + } else { + XfbProg = 1; + } + trychkBusyWait = FALSE; + OSInitMessageQueue(&ToeMessageQueue, ToeMessageArray, 16); + OSCreateThread(&ToeThread, ToeThreadFunc, NULL, &ToeThreadStack[4096], 4096, 8, OS_THREAD_ATTR_DETACH); + OSResumeThread(&ToeThread); + intrOld = OSDisableInterrupts(); + VISetPreRetraceCallback(HuDvdErrDispIntFunc); + OSRestoreInterrupts(intrOld); +} + +static void *ToeThreadFunc(void *param) +{ + while(1) { + BOOL hide_disp; + OSSleepThread(&ToeMessageQueue.queueSend); + if(!_CheckFlag(0x30000)) { + BOOL reset; + if(!HuSoftResetCheck()) { + if(SR_ExecReset) { + reset = TRUE; + } else { + if(H_ResetReady == TRUE && OSGetResetButtonState() != TRUE) { + reset = TRUE; + } else { + if(H_ResetReady != TRUE && OSGetResetButtonState() == TRUE) { + H_ResetReady = TRUE; + } + reset = FALSE; + } + } + if(reset) { + proc_reset: + HuSoftResetPostProc(); + } + } else { + goto proc_reset; + } + } + if(SR_ExecReset) { + HuRestartSystem(); + } + if(SR_ExecReset) { + hide_disp = TRUE; + } else { + hide_disp = FALSE; + } + if(!hide_disp) { + ToeDispCheck(); + } + } +} + +static void _HuDvdErrDispXFB(s32 error); + +static void ToeDispCheck(void) +{ + s32 status; + if(SR_ResetPad != -1 || SR_ExecReset != FALSE || SR_RestartChk != 0) { + return; + } + status = DVDGetDriveStatus(); + switch(status) { + case DVD_STATE_FATAL_ERROR: + status = SR_DVD_FATAL_ERROR; + trychkBusyWait = TRUE; + break; + + case DVD_STATE_END: + HuDvdErrWait = 0; + trychkBusyWait = FALSE; + return; + + case DVD_STATE_COVER_OPEN: + status = SR_DVD_COVER_OPEN; + trychkBusyWait = TRUE; + break; + + case DVD_STATE_BUSY: + case DVD_STATE_COVER_CLOSED: + if(!trychkBusyWait) { + return; + } + status = SR_DVD_LOADING; + break; + + case DVD_STATE_NO_DISK: + status = SR_DVD_NO_DISK; + trychkBusyWait = TRUE; + break; + + case DVD_STATE_WRONG_DISK: + status = SR_DVD_WRONG_DISK; + trychkBusyWait = TRUE; + break; + + case DVD_STATE_RETRY: + status = SR_DVD_RETRY_ERROR; + trychkBusyWait = TRUE; + break; + + default: + return; + } + HuDvdErrWait = 1; + HuPadRumbleAllStop(); + VISetBlack(FALSE); + VIFlush(); + if(msmSysCheckInit()) { + HuAudSStreamAllStop(); + } + _HuDvdErrDispXFB(status); +} + +static void _HuDvdErrDispXFB(s32 error) +{ + static void *bmpMes[][6] = { + loading_en, coveropen_en, nodisc_en, wrongdisc_en, retryerror_en, fatalerror_en + }; + volatile s32 status; + u8 color[2]; + s8 language; + s16 *bmpData; + u8 *xfb1_ptr; + u8 *xfb2_ptr; + u32 i; + u32 data; + u32 row; + u32 *xfb1; + u32 *xfb2; + u32 j; + u8 y1; + u8 y2; + s32 reset; + u32 *data_ptr; + u32 row_offset; + u32 row_pitch; + language = 0; + xfb1 = Xfb[0]; + xfb2 = Xfb[1]; + for(i=0; i<0x25800; i++, xfb1++, xfb2++) { + *xfb1 = *xfb2 = 0x800080; + } + DCStoreRangeNoSync(Xfb[0], 0x96000); + DCStoreRangeNoSync(Xfb[1], 0x96000); + bmpData = bmpMes[language][error]; + data_ptr = (u32 *)(bmpData+2); + row_offset = ((XfbW/2)-(bmpData[0]/2))*2; + row_pitch = XfbW*2; + color[1] = color[0] = 128; + for(row=0; row>= 2, xfb1_ptr += 4, xfb2_ptr += 4) { + if(data & 0x3){ + if(data & 0x1) { + y1 = 0xEB; + } else { + y1 = 0x10; + } + if(data & 0x2) { + y2 = 0xEB; + } else { + y2 = 0x10; + } + xfb1_ptr[0] = y1; + xfb1_ptr[1] = color[1]; + xfb1_ptr[2] = y2; + xfb1_ptr[3] = color[0]; + xfb2_ptr[0] = y1; + xfb2_ptr[1] = color[1]; + xfb2_ptr[2] = y2; + xfb2_ptr[3] = color[0]; + } + } + } + DCStoreRangeNoSync(sp14[1], bmpData[0]*2); + DCStoreRangeNoSync(sp14[0], bmpData[0]*2); + } + status = DVDGetDriveStatus(); + while(status) { + if(status != DVDGetDriveStatus()) { + break; + } + if(SR_ExecReset) { + reset = TRUE; + } else { + if(H_ResetReady == TRUE && OSGetResetButtonState() != TRUE) { + reset = TRUE; + } else { + if(H_ResetReady != TRUE && OSGetResetButtonState() == TRUE) { + H_ResetReady = TRUE; + } + reset = FALSE; + } + } + if(reset) { + if(msmSysCheckInit()) { + msmStreamSetMasterVolume(0); + msmSeSetMasterVolume(0); + msmMusSetMasterVolume(0); + } + HuRestartSystem(); + } + + OSYieldThread(); + } +} + +void HuRestartSystem(void) +{ + u32 retrace[2]; + BOOL prevInt; + if(SR_RestartChk) { + return; + } + SR_RestartChk = TRUE; + PADRecalibrate(PAD_CHAN0_BIT|PAD_CHAN1_BIT|PAD_CHAN2_BIT|PAD_CHAN3_BIT); + msmSysCheckInit(); + VISetBlack(TRUE); + VIFlush(); + prevInt = OSDisableInterrupts(); + if(!prevInt) { + OSReport("PrevInt=DISABLE!!\n"); + } + OSEnableInterrupts(); + retrace[1] = VIGetRetraceCount(); + retrace[0] = 0; + while(retrace[1] == VIGetRetraceCount()) { + if(retrace[0]++ >= 1349800) { + break; + } + } + OSReport("Timeout Count=%d\n", retrace[0]); + __GXAbortWaitPECopyDone(); + OSResetSystem(0, 0, 0); +} + +s32 HuSoftResetCheck(void) +{ + int i; + if(VCounter == 0) { + return 0; + } + if(SR_ExecReset) { + return 1; + } + if(SR_ResetPad != -1) { + if(!(_PadBtn[SR_ResetPad] & PAD_BTN_SRESET)) { + return 1; + } + } else { + for(i=0; i<4; i++) { + if(SR_PreRstChk[i] && (_PadBtn[i] & PAD_BTN_SRESET) != PAD_BTN_SRESET) { + SR_PreRstChk[i] = 0; + } + } + } + + if(HuSoftResetCountCheck()) { + return 1; + } else { + return 0; + } +} + +s32 HuSoftResetCountCheck(void) +{ + int i; + for(i=0; i<4; i++) { + if((_PadBtn[i] & PAD_BTN_SRESET_SHORT) != PAD_BTN_SRESET_SHORT) { + SR_PushTime[i] = 0; + } else { + if(!SR_PreRstChk[i]) { + if(_PadBtn[i] & PAD_BUTTON_START) { + if(SR_PushTime[i]++ >= 30) { + SR_ResetPad = i; + return 1; + } + } else { + SR_PushTime[i] = 0; + } + } + } + } + return 0; +} + +static void HuSoftResetPostProc(void) +{ + if(!SR_ExecReset) { + VISetBlack(TRUE); + VIFlush(); + if(THPProc) { + HuTHPStop(); + HuTHPClose(); + } + if(msmSysCheckInit()) { + msmStreamSetMasterVolume(0); + msmSeSetMasterVolume(0); + msmMusSetMasterVolume(0); + } + HuPadRumbleAllStop(); + SR_ExecReset = TRUE; + } +} \ No newline at end of file From a6ab530d810eab7d0340b585fe8cc69ec4726aa5 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Sun, 11 Feb 2024 00:26:08 -0800 Subject: [PATCH 025/106] Matched board/tutorial --- configure.py | 2 +- include/REL/w10Dll.h | 2 +- include/board_unsplit.h | 6 +- include/game/board/com.h | 1 + include/game/board/tutorial.h | 21 ++++++ src/REL/w10Dll/tutorial.c | 2 +- src/game/board/basic_space.c | 2 +- src/game/board/main.c | 3 +- src/game/board/player.c | 6 +- src/game/board/roll.c | 1 - src/game/board/space.c | 4 +- src/game/board/tutorial.c | 138 ++++++++++++++++++++++++++++++++++ src/game/board/ui.c | 5 +- src/game/board/warp.c | 7 +- src/game/wipe.c | 3 +- 15 files changed, 175 insertions(+), 28 deletions(-) create mode 100755 src/game/board/tutorial.c diff --git a/configure.py b/configure.py index 4b9440b4..8a124957 100644 --- a/configure.py +++ b/configure.py @@ -388,7 +388,7 @@ config.libs = [ Object(NonMatching, "game/board/last5.c"), Object(NonMatching, "game/board/pause.c"), Object(Matching, "game/board/com_path.c"), - Object(NonMatching, "game/board/tutorial.c"), + Object(Matching, "game/board/tutorial.c"), Object(NonMatching, "game/kerent.c"), ], }, diff --git a/include/REL/w10Dll.h b/include/REL/w10Dll.h index 967ae094..c334d7ac 100644 --- a/include/REL/w10Dll.h +++ b/include/REL/w10Dll.h @@ -45,7 +45,7 @@ typedef struct w10DllUnk04 { extern s16 lbl_1_bss_20; extern s16 lbl_1_bss_22[]; extern s16 lbl_1_bss_20; -extern s32 boardTutorialData; +extern s32 boardTutorialData[4]; void fn_1_C10(s16); void fn_1_1FB0(void); diff --git a/include/board_unsplit.h b/include/board_unsplit.h index 131f4462..9bbef96f 100644 --- a/include/board_unsplit.h +++ b/include/board_unsplit.h @@ -23,9 +23,9 @@ void BoardStatusShowSetAll(s32); void BoardMGSetupTutorialExec(void); void BoardBooHouseTutorialExec(void); void BoardStatusItemSet(s32); -void BoardTutorialItemSet(s32); +void BoardTutorialItemSet(s8); void BoardCharWheelSetTarget(s32); -void BoardTutorialDirInputSet(s32, s32, s32); +void BoardTutorialDirInputSet(s8, s8, s16); void BoardSpaceStarSetIndex(s32); s32 BoardModelRotYSet(s16, f32); f32 BoardModelRotYGet(s16); @@ -54,7 +54,7 @@ void BoardLotteryHostSet(s16); void BoardStarHostSet(s16); void BoardBooHouseHostSet(s16); void BoardTutorialHookSet(void*); -void BoardTutorialBlockSetPos(s32, s32); +void BoardTutorialBlockSetPos(s32, s8); s32 BoardCameraRotGet(Vec*); s32 BoardModelScaleSet(s16, f32, f32, f32); s32 BoardIsKill(void); diff --git a/include/game/board/com.h b/include/game/board/com.h index 1d6a605b..a75d35ab 100755 --- a/include/game/board/com.h +++ b/include/game/board/com.h @@ -10,6 +10,7 @@ void BoardComKeySetDown(void); s8 BoardComPreferItemGet(s32 arg0, s8 *arg1, s8 arg2); s8 BoardComPreferItemCheck(s32 arg0, s8 arg1, s8 arg2, s8 arg3); s32 BoardComItemWeightGet(s32 arg0, s32 arg1); +s32 BoardComTutorialItemGet(s32 arg0); s32 BoardComUseItemSet(s32 arg0, s32 arg1); BOOL BoardComUseItemCheck(s32 arg0); s32 BoardComJunctionInputGet(s32 arg0, Vec *arg1, s32 arg2, float *arg3); diff --git a/include/game/board/tutorial.h b/include/game/board/tutorial.h index 2d8368f1..3b63c2ae 100755 --- a/include/game/board/tutorial.h +++ b/include/game/board/tutorial.h @@ -3,6 +3,27 @@ #include "dolphin/types.h" +void BoardTutorialInit(void); +void BoardTutorialKill(void); +void BoardTutorialHookSet(void *arg0); +void BoardTutorialHookExec(s16 arg0, s32 arg1); +void BoardTutorialPlayerInit(void); +void BoardTutorialWorkSave(void); +void BoardTutorialWorkRestore(void); +void BoardTutorialDirInputSet(s8 arg0, s8 arg1, s16 arg2); +void BoardTutorialBlockSetPos(s32 arg0, s8 arg1); +void BoardTutorialItemSet(s8 arg0); +void BoardTutorialHostSet(s16 arg0); +void BoardTutorialHostHide(s8 arg0); + +extern s32 boardTutorialData[4]; +extern s8 boardTutorialDirInputX; +extern s8 boardTutorialDirInputY; +extern s16 boardTutorialDirInputTime; +extern s32 boardTutorialBlockPos; +extern s8 boardTutorialBlockItem; +extern s8 boardTutorialBlockF; extern s8 boardTutorialUseItem; +extern s8 boardTutorialF; #endif diff --git a/src/REL/w10Dll/tutorial.c b/src/REL/w10Dll/tutorial.c index 99a728ec..a9886915 100644 --- a/src/REL/w10Dll/tutorial.c +++ b/src/REL/w10Dll/tutorial.c @@ -108,7 +108,7 @@ void fn_1_1834(void) { void fn_1_18BC(void) { fn_1_BA0(0x2E0028); fn_1_BA0(0x2E0029); - boardTutorialData = 0; + boardTutorialData[0] = 0; BoardStatusItemSet(0); } diff --git a/src/game/board/basic_space.c b/src/game/board/basic_space.c index 23dcceda..894f5e31 100644 --- a/src/game/board/basic_space.c +++ b/src/game/board/basic_space.c @@ -1,6 +1,7 @@ #include "game/board/basic_space.h" #include "game/board/main.h" #include "game/board/player.h" +#include "game/board/tutorial.h" #include "game/data.h" #include "game/flag.h" #include "game/object.h" @@ -34,7 +35,6 @@ static void CoinChgSeparate(omObjData*, coinChg*); static void CoinChgShow(omObjData*, coinChg*); static void CoinChgDisappear(omObjData*, coinChg*); -extern void BoardTutorialHookExec(s16, s32); extern void BoardCameraViewSet(s32); extern void BoardPlayerPosGet(s32, Vec*); extern void BoardModelPosGet(s16, Vec*); diff --git a/src/game/board/main.c b/src/game/board/main.c index 93bf8b68..4caa8d88 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -10,6 +10,7 @@ #include "game/hsfdraw.h" #include "game/board/main.h" #include "game/board/player.h" +#include "game/board/tutorial.h" #include "game/pad.h" #include "game/msm.h" @@ -61,8 +62,6 @@ extern s32 BoardSpacePosGet(s32 layer, s32 space, Vec *pos); extern void BoardMGSetupPlayClear(void); extern void BoardStartExec(void); -extern s8 boardTutorialF; - static void InitBoardFunc(omObjData *object); static void ExecBoardFunc(omObjData *object); static void KillBoardFunc(omObjData *object); diff --git a/src/game/board/player.c b/src/game/board/player.c index 1b97cccc..5a2b70af 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -2,6 +2,7 @@ #include "game/objsub.h" #include "game/board/com.h" #include "game/board/roll.h" +#include "game/board/tutorial.h" #include "game/board/view.h" //// #include "game/board/ui.h" @@ -32,8 +33,6 @@ extern f32 BoardModelMotionMaxTimeGet(s16); extern void BoardModelMotionTimeRangeSet(s16, s32, s32); extern void BoardModelAttrSet(s16, s32); extern void BoardModelAttrReset(s16, s32); -//// #include "game/board/tutorial.h" -extern BoardTutorialHookExec(s16, s32); //// #include "game/board/com.h" //// #include "game/board/overhead.h" //// #include "game/chrman.h" @@ -44,9 +43,6 @@ extern s8 HuPadStkX[4]; extern s8 HuPadStkY[4]; extern u16 HuPadBtnDown[4]; extern u8 HuPadDStk[4]; -extern s16 boardTutorialDirInputTime; -extern s8 boardTutorialDirInputX; -extern s8 boardTutorialDirInputY; //// #include "game/board/view.h" //// diff --git a/src/game/board/roll.c b/src/game/board/roll.c index dfb26bf1..56acfdee 100755 --- a/src/game/board/roll.c +++ b/src/game/board/roll.c @@ -40,7 +40,6 @@ typedef struct { s32 BoardRollResizeCheck(void); s32 BoardPauseActiveCheck(void); -void BoardTutorialHookExec(s16, s32); static void RollMain(void); static void DiceCreate(s32 arg0); diff --git a/src/game/board/space.c b/src/game/board/space.c index 3bccfbd6..4ee4583a 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -3,6 +3,7 @@ #include "game/board/main.h" #include "game/board/player.h" #include "game/board/space.h" +#include "game/board/tutorial.h" #include "game/hsfman.h" #include "game/data.h" #include "game/sprite.h" @@ -51,9 +52,6 @@ static s16 starPlatMdl = -1; static s32 ExecPipeSpace(s32 player, s32 space); -extern s8 boardTutorialBlockF; -extern s32 boardTutorialBlockPos; - void BoardSpaceWalkEventFuncSet(BoardSpaceEventFunc func) { diff --git a/src/game/board/tutorial.c b/src/game/board/tutorial.c new file mode 100755 index 00000000..5bdca944 --- /dev/null +++ b/src/game/board/tutorial.c @@ -0,0 +1,138 @@ +#include "game/board/tutorial.h" +#include "game/flag.h" +#include "game/gamework_data.h" +#include "game/process.h" +#include "game/board/main.h" +#include "game/board/model.h" + +s32 boardTutorialData[4]; // maybe a single s32 + padding? +static void (*tutorialHook)(s16, s32); +s8 boardTutorialDirInputX; +s8 boardTutorialDirInputY; +s16 boardTutorialDirInputTime; +s32 boardTutorialBlockPos; +s8 boardTutorialBlockItem; +s8 boardTutorialBlockF; +s8 boardTutorialUseItem; +static s16 hostMdl; +s8 boardTutorialF; +static Process *tutorialProcess; +static void *playerCfgCopy; +static void *playerCopy; +static void *systemCopy; +static void *gameStatCopy; + +static void TutorialProcFunc(void) { + while (1) { + if (_CheckFlag(0x10010)) { + BoardTutorialHookExec(0x1E, 0); + } + HuPrcVSleep(); + } +} + +void BoardTutorialInit(void) { + boardTutorialDirInputTime = -1; + boardTutorialBlockF = 0; + boardTutorialUseItem = -1; + tutorialHook = NULL; + tutorialProcess = NULL; + boardTutorialF = 0; + if (_CheckFlag(0x1000B)) { + tutorialProcess = HuPrcChildCreate(TutorialProcFunc, 0x2002, 0x2000, 0, boardMainProc); + } +} + +void BoardTutorialKill(void) { + if (_CheckFlag(0x1000B)) { + if (tutorialProcess) { + HuPrcKill(tutorialProcess); + } + boardTutorialF = 0; + } +} + +void BoardTutorialHookSet(void *arg0) { + tutorialHook = arg0; +} + +void BoardTutorialHookExec(s16 arg0, s32 arg1) { + if (tutorialHook) { + tutorialHook(arg0, arg1); + } +} + +void BoardTutorialPlayerInit(void) { + s32 i; + + for (i = 0; i < 4; i++) { + GWPlayer[i].com = 1; + GWPlayerCfg[i].iscom = 1; + } + GWSystem.board = 6; +} + +void BoardTutorialWorkSave(void) { + OSReport("-O-O-O-O-O-O-O Tutorial Save Work\n"); + if (gameStatCopy) { + HuMemDirectFree(gameStatCopy); + } + if (systemCopy) { + HuMemDirectFree(systemCopy); + } + if (playerCopy) { + HuMemDirectFree(playerCopy); + } + if (playerCfgCopy) { + HuMemDirectFree(playerCfgCopy); + } + gameStatCopy = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(GWGameStat)); + systemCopy = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(GWSystem)); + playerCopy = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(GWPlayer)); + playerCfgCopy = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(GWPlayerCfg)); + memcpy(gameStatCopy, &GWGameStat, sizeof(GWGameStat)); + memcpy(systemCopy, &GWSystem, sizeof(GWSystem)); + memcpy(playerCopy, GWPlayer, sizeof(GWPlayer)); + memcpy(playerCfgCopy, GWPlayerCfg, sizeof(GWPlayerCfg)); +} + +void BoardTutorialWorkRestore(void) { + OSReport("-O-O-O-O-O-O-O Tutorial Load Work\n"); + memcpy(&GWGameStat, gameStatCopy, sizeof(GWGameStat)); + memcpy(&GWSystem, systemCopy, sizeof(GWSystem)); + memcpy(GWPlayer, playerCopy, sizeof(GWPlayer)); + memcpy(GWPlayerCfg, playerCfgCopy, sizeof(GWPlayerCfg)); + HuMemDirectFree(gameStatCopy); + HuMemDirectFree(systemCopy); + HuMemDirectFree(playerCopy); + HuMemDirectFree(playerCfgCopy); + gameStatCopy = NULL; + systemCopy = NULL; + playerCopy = NULL; + playerCfgCopy = NULL; +} + +void BoardTutorialDirInputSet(s8 arg0, s8 arg1, s16 arg2) { + boardTutorialDirInputX = arg0; + boardTutorialDirInputY = arg1; + boardTutorialDirInputTime = arg2; +} + +void BoardTutorialBlockSetPos(s32 arg0, s8 arg1) { + boardTutorialBlockF = 1; + boardTutorialBlockPos = arg0; + boardTutorialBlockItem = arg1; + BoardSpaceBlockPosSet(); +} + +void BoardTutorialItemSet(s8 arg0) { + boardTutorialUseItem = arg0; +} + +void BoardTutorialHostSet(s16 arg0) { + hostMdl = arg0; +} + +void BoardTutorialHostHide(s8 arg0) { + BoardModelVisibilitySet(hostMdl, arg0); +} diff --git a/src/game/board/ui.c b/src/game/board/ui.c index fa0e6c56..f2e3e1bc 100755 --- a/src/game/board/ui.c +++ b/src/game/board/ui.c @@ -9,10 +9,12 @@ #include "game/pad.h" #include "game/process.h" #include "game/window.h" +#include "game/board/com.h" #include "game/board/item.h" #include "game/board/main.h" #include "game/board/model.h" #include "game/board/player.h" +#include "game/board/tutorial.h" #include "board_unsplit.h" #include "math.h" @@ -93,12 +95,9 @@ typedef struct { } UnkUiWork04; void BoardPlayerSparkSet(s32); -void BoardTutorialHookExec(s16, s32); void BoardBowserSuitMotionCreate(void); s16 BoardBowserSuitPlayerModelGet(void); void CharModelLayerSetAll(s32); -s32 BoardComTutorialItemGet(s32); -void BoardTutorialHostHide(s32); static void KillAllBoardStatus(void); static void CreateBoardStatusSprite(s32 arg0, UnkUiStatusStruct *arg1); diff --git a/src/game/board/warp.c b/src/game/board/warp.c index 52d00063..e623e207 100644 --- a/src/game/board/warp.c +++ b/src/game/board/warp.c @@ -1,8 +1,10 @@ #include "game/board/warp.h" #include "game/board/main.h" #include "game/board/player.h" +#include "game/board/tutorial.h" #include "game/wipe.h" #include "game/gamework_data.h" +#include "game/hsfdraw.h" #include "game/hsfex.h" #include "game/objsub.h" #include "board_unsplit.h" @@ -22,13 +24,8 @@ extern s32 BoardCharWheelResultGet(void); extern f32 BoardModelMotionTimeGet(s16); extern void BoardModelHookReset(s16); extern s32 BoardModelHookSet(s16, char*, s16); -extern void BoardPlayerPosSet(s32, f32, f32, f32); -extern void BoardPlayerRotYSet(s32, f32); -extern void Hu3DModelObjPosGet(s16, char*, Vec*); extern s32 BoardModelMotionEndCheck(s16); -extern s32 boardTutorialData[4]; - static Vec warpPos; static s8 warpState; diff --git a/src/game/wipe.c b/src/game/wipe.c index 451e6fb5..7d4cbea0 100644 --- a/src/game/wipe.c +++ b/src/game/wipe.c @@ -2,8 +2,7 @@ #include "game/wipe.h" #include "game/memory.h" #include "game/flag.h" - -extern s8 boardTutorialF; +#include "game/board/tutorial.h" s16 HuSysVWaitGet(s16 old); From 360053c5d88784ffc629f79c61f0f3dd38314286 Mon Sep 17 00:00:00 2001 From: darxoon Date: Sun, 11 Feb 2024 19:34:07 +0100 Subject: [PATCH 026/106] Add board/block.c --- configure.py | 2 +- src/game/board/block.c | 465 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 466 insertions(+), 1 deletion(-) create mode 100644 src/game/board/block.c diff --git a/configure.py b/configure.py index 8a124957..46ef767a 100644 --- a/configure.py +++ b/configure.py @@ -376,7 +376,7 @@ config.libs = [ Object(NonMatching, "game/board/star.c"), Object(Matching, "game/board/roll.c"), Object(Matching, "game/board/ui.c"), - Object(NonMatching, "game/board/block.c"), + Object(Matching, "game/board/block.c"), Object(NonMatching, "game/board/item.c"), Object(NonMatching, "game/board/bowser.c"), Object(NonMatching, "game/board/battle.c"), diff --git a/src/game/board/block.c b/src/game/board/block.c new file mode 100644 index 00000000..48cd1cbc --- /dev/null +++ b/src/game/board/block.c @@ -0,0 +1,465 @@ +#include "game/process.h" +#include "game/board/main.h" +#include "game/board/player.h" +#include "math.h" + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 3; + u8 unk00_field2 : 1; + u8 unk00_field3 : 1; + u8 unk00_field4 : 1; + u8 unk00_field5 : 1; + }; + + u8 unk01; + s16 unk02; + s16 unk04; +} BlockWork; + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 3; + u8 unk00_field2 : 1; + u8 unk00_field3 : 1; + u8 unk00_field4 : 1; + u8 unk00_field5 : 1; + }; + + u8 unk01; + s8 unk02; + s16 unk04; +} CoinWork; + +static void BlockProc(void); +static void DestroyBlock(void); +static void ExecBlockObj(omObjData* arg0); +static void CreateBlockObj(s32 arg0); +static void DestroyBlockObj(BlockWork* unused0, omObjData* unused1); +static void SpawnBlock(BlockWork* arg0, omObjData* arg1); +static void HitBlock(BlockWork* arg0, omObjData* arg1); +static void OpenBlock(BlockWork* arg0, omObjData* arg1); +static void SetBlockOpen(void); +static void SetBlockStop(void); +static void WaitBlockHit(void); +static void CreateCoinMdl(void); +static void KillCoinMdl(void); +static void PopupCoin(void); +static void PopupCoinExec(omObjData* arg0); + +extern s8 boardTutorialBlockF; +extern s8 boardTutorialBlockItem; + +static s16 jumpMot = -1; +static s16 starMdl = -1; + +static f32 rotMax; +static f32 scaleAngle; +static f32 rotY; + +static omObjData* blockObj; +static Process* blockProc; + +static s16 coinMdl[10] = { + -1, -1, -1, -1, 0, 0, 0, 0, 0, 0 +}; + +static s32 coinF[10]; + +s32 BoardBlockExec(s32 arg0) { + if (BoardPlayerSizeGet(arg0) == 2) { + return 0; + } + + blockProc = HuPrcChildCreate(BlockProc, 0x2003, 0x3800U, 0, boardMainProc); + HuPrcDestructorSet2(blockProc, DestroyBlock); + + while (blockProc != NULL) { + HuPrcVSleep(); + } + + return 0; +} + +static void BlockProc(void) { + s32 sp14[8] = {0x005F0060, 0x001A0060, 0x006D0060, 0x008A0060, 0x00850060, 0x00110060, 0x000D0060, 0x00810060}; + Point3d sp8; + s32 var_r28; + s32 var_r29; + s32 temp_r31; + BlockWork* temp_r30; + s32* temp_r4; + s32 var_r27; + + temp_r31 = GWSystem.player_curr; + + var_r27 = GWPlayer[temp_r31].character; + jumpMot = BoardPlayerMotionCreate(temp_r31, sp14[var_r27]); + BoardRotateDiceNumbers(temp_r31); + BoardPlayerMotBlendSet(temp_r31, 0, 0xF); + omVibrate((s16) temp_r31, 0xC, 0xC, 0); + CreateBlockObj(temp_r31); + + temp_r30 = OM_GET_WORK_PTR(blockObj, BlockWork); + while (temp_r30->unk00_field1 != 2) { + HuPrcVSleep(); + } + + BoardCameraViewSet(3); + BoardCameraMotionWait(); + BoardWinCreate(0, 0x10000, -1); + BoardWinWait(); + BoardWinKill(); + BoardPlayerMotionShiftSet(temp_r31, 0xB, 0, 8.0, 0.0); + HuPrcSleep(9); + while (BoardPlayerMotionTimeGet(temp_r31) < 30.0f) { + HuPrcVSleep(); + } + HuAudFXPlay(0x30C); + SetBlockOpen(); + while (BoardPlayerMotionEndCheck(temp_r31) == 0) { + HuPrcVSleep(); + } + BoardRotateDiceNumbers((s32) temp_r31); + if (temp_r30->unk00_field3 != 0) { + SetBlockStop(); + BoardModelPosGet(starMdl, &sp8); + if (_CheckFlag(0x1000BU) == 0) { + BoardAudSeqPause(0, 1, 0x3E8); + } + BoardStarGive(temp_r31, &sp8); + if (_CheckFlag(0x1000BU) == 0) { + BoardAudSeqPause(0, 0, 0x3E8); + } + } else { + var_r29 = 0; + while (var_r29 < 0x14) { + WaitBlockHit(); + BoardPlayerMotionStart(temp_r31, (s32) jumpMot, 0); + BoardPlayerMotionSpeedSet(temp_r31, 2); + while (BoardPlayerMotionTimeGet(temp_r31) < 4) { + HuPrcVSleep(); + } + SetBlockOpen(); + PopupCoin(); + while (BoardPlayerMotionEndCheck(temp_r31) == 0) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0); + BoardPlayerCoinsAdd(temp_r31, 1); + HuAudFXPlay(7); + HuPrcVSleep(); + var_r29 += 1; + } + SetBlockStop(); + } + if (temp_r30->unk00_field3 != 0) { + var_r28 = 0x10001; + } else { + var_r28 = 0x10002; + } + BoardWinCreate(0, var_r28, -1); + BoardWinWait(); + BoardWinKill(); + KillCoinMdl(); + temp_r30->unk00_field0 = 1; + BoardRotateDiceNumbers((s32) temp_r31); + HuPrcVSleep(); + if ((_CheckFlag(0x1000BU) != 0) && temp_r30->unk00_field3 == 0) { + BoardTutorialHookExec(0x16, 0); + } + BoardCameraViewSet(2); + BoardCameraMotionWait(); + HuPrcEnd(); +} + +static void DestroyBlock(void) { + if (jumpMot != -1) { + BoardPlayerMotionKill(GWSystem.player_curr, (s32) jumpMot); + jumpMot = -1; + } + KillCoinMdl(); + blockProc = 0; +} + + +static void CreateBlockObj(s32 arg0) { + Point3d spC; + BlockWork* temp_r31; + s8 var_r30; + + BoardPlayerPosGet(arg0, &spC); + starMdl = BoardModelCreate(0x70004, NULL, 0); + BoardModelVisibilitySet(starMdl, 0); + BoardModelMotionSpeedSet(starMdl, 0); + BoardModelLayerSet(starMdl, 2U); + + blockObj = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, ExecBlockObj); + + temp_r31 = OM_GET_WORK_PTR(blockObj, BlockWork); + temp_r31->unk00_field0 = 0; + temp_r31->unk00_field2 = 0; + temp_r31->unk00_field4 = 0; + temp_r31->unk00_field5 = 0; + temp_r31->unk00_field1 = 0; + + blockObj->trans.x = spC.x; + blockObj->trans.y = 270 + spC.y; + blockObj->trans.z = spC.z; + + blockObj->scale.x = blockObj->scale.y = blockObj->scale.z = 0.01; + blockObj->rot.x = blockObj->rot.y = blockObj->rot.z = 0.0; + + scaleAngle = 0; + rotY = 0; + rotMax = 30; + + BoardModelVisibilitySet(starMdl, 1); + + if (BoardRandFloat() > 0.5f) { + var_r30 = 0; + } else { + var_r30 = 1; + } + + temp_r31->unk00_field3 = var_r30; + + if (boardTutorialBlockF != 0) { + temp_r31->unk00_field3 = boardTutorialBlockItem; + boardTutorialBlockF = 0; + } + + HuAudFXPlay(0x302); + + if (temp_r31->unk00_field3 == 0) { + CreateCoinMdl(); + } +} + +static void ExecBlockObj(omObjData* arg0) { + BlockWork* temp_r30; + + temp_r30 = OM_GET_WORK_PTR(arg0, BlockWork); + + if (temp_r30->unk00_field0 != 0 || BoardIsKill() != 0) { + DestroyBlockObj(temp_r30, arg0); + blockObj = 0; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + + switch (temp_r30->unk00_field1) { + case 0: + SpawnBlock(temp_r30, arg0); + break; + case 2: + HitBlock(temp_r30, arg0); + break; + case 3: + OpenBlock(temp_r30, arg0); + break; + } + + if (temp_r30->unk00_field5 != 0) { + BoardModelVisibilitySet(starMdl, 0); + } + + BoardModelPosSet(starMdl, arg0->trans.x, arg0->trans.y, arg0->trans.z); + BoardModelRotSet(starMdl, arg0->rot.x, arg0->rot.y, arg0->rot.z); + BoardModelScaleSet(starMdl, arg0->scale.x, arg0->scale.y, arg0->scale.z); +} + +static void DestroyBlockObj(BlockWork* unused0, omObjData* unused1) { + if (starMdl != -1) { + BoardModelKill(starMdl); + starMdl = -1; + } +} + +static void SpawnBlock(BlockWork* arg0, omObjData* arg1) { + f32 temp_f0; + + if (scaleAngle < 90.0f) { + scaleAngle += 3.75f; + if (scaleAngle > 90.0f) { + scaleAngle = 90.0f; + } + } else { + rotMax *= 0.5f; + if (rotMax < 0.8f) { + rotY = 0.0f; + rotMax = 0.0f; + arg0->unk02 = 0; + arg0->unk00_field1 = 2; + } + } + + if (rotY < 360.0f) { + rotY += rotMax; + if (rotY > 360.0f) { + rotY = 360.0f; + } + } + + arg1->rot.y = rotY; + arg1->scale.x = arg1->scale.y = arg1->scale.z = sin(M_PI * scaleAngle / 180.0); +} + +static void HitBlock(BlockWork* arg0, omObjData* arg1) { + float var_f30; + + arg0->unk02 += 3; + if (arg0->unk02 > 0x168) { + arg0->unk02 -= 0x168; + } + OSs16tof32(&arg0->unk02, &var_f30); + arg1->trans.y = arg1->trans.y + 0.2f * sin((M_PI * var_f30) / 180.0); +} + +static void OpenBlock(BlockWork* arg0, omObjData* arg1) { + s16 sp8; + f32 temp_f30; + + if (arg0->unk00_field4 == 0) { + arg0->unk00_field4 = 1; + HuAudFXPlay(0x33B); + BoardModelMotionStart(starMdl, 0, 0); + } + + if (arg0->unk00_field2 == 0) { + OSf32tos16(&arg1->trans.y, &arg0->unk04); + arg1->trans.y += 80.0f; + arg0->unk00_field2 = 1; + } else { + OSs16tof32(&arg0->unk04, &temp_f30); + arg1->trans.y += -8.0f; + + if (arg1->trans.y < temp_f30) { + arg1->trans.y = temp_f30; + arg0->unk00_field1 = 2; + } + } +} + +static void SetBlockOpen(void) { + BlockWork* temp_r31; + + temp_r31 = OM_GET_WORK_PTR(blockObj, BlockWork); + temp_r31->unk00_field1 = 3; +} + +static void SetBlockStop(void) { + BlockWork* temp_r31; + + temp_r31 = OM_GET_WORK_PTR(blockObj, BlockWork); + temp_r31->unk00_field5 = 1; +} + +static void WaitBlockHit(void) { + BlockWork* temp_r31; + + temp_r31 = OM_GET_WORK_PTR(blockObj, BlockWork); + + while (temp_r31->unk00_field1 != 2) { + HuPrcVSleep(); + } +} + +static void CreateCoinMdl(void) { + s32 i; + + for (i = 0; i < 10; i += 1) { + coinMdl[i] = BoardModelCreate(0x7000A, NULL, 1); + BoardModelVisibilitySet(coinMdl[i], 0); + coinF[i] = 0; + } +} + +static void KillCoinMdl(void) { + s32 i; + + for (i = 0; i < 0xA; i += 1) { + if (coinMdl[i] != -1) { + BoardModelKill(coinMdl[i]); + coinMdl[i] = -1; + } + coinF[i] = 0; + } +} + +static inline s32 UnkFunc(s16 *var_r26) { + s32 i; + + for (i = 0; i < 10; i++) { + if (coinF[i] == 0) { + *var_r26 = coinMdl[i]; + return i; + } + } + + return -1; +} + +static void PopupCoin(void) { + Point3d sp8; + omObjData* temp_r3; + s32 var_r28; + s16 var_r26; + CoinWork* temp_r31; + + do { + HuPrcVSleep(); + var_r28 = UnkFunc(&var_r26); + } while (var_r28 == -1); + + temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, PopupCoinExec); + temp_r31 = OM_GET_WORK_PTR(temp_r3, CoinWork); + + temp_r31->unk00_field0 = 0; + temp_r31->unk01 = 0xA; + temp_r31->unk04 = var_r26; + temp_r31->unk02 = var_r28; + + temp_r3->trans.x = 15.0f; + temp_r3->trans.y = 40.0f; + + BoardModelPosGet(starMdl, &sp8); + BoardModelPosSetV(temp_r31->unk04, &sp8); + BoardModelVisibilitySet(temp_r31->unk04, 1); +} + +static void PopupCoinExec(omObjData* arg0) { + Point3d sp14; + Point3d sp8; + CoinWork* temp_r31; + + temp_r31 = OM_GET_WORK_PTR(arg0, CoinWork); + + if (temp_r31->unk00_field0 != 0 || BoardIsKill() != 0) { + BoardModelVisibilitySet(temp_r31->unk04, 0); + coinF[temp_r31->unk02] = 0; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + + if (temp_r31->unk01 != 0) { + temp_r31->unk01 -= 1; + } else { + temp_r31->unk00_field0 = 1; + return; + } + + BoardModelPosGet(temp_r31->unk04, &sp14); + sp14.y += arg0->trans.y; + BoardModelPosSetV(temp_r31->unk04, &sp14); + BoardModelRotGet(temp_r31->unk04, &sp8); + sp8.y += arg0->trans.x; + + if (sp8.y > 360.0f) { + sp8.y -= 360.0f; + } + + BoardModelRotSetV(temp_r31->unk04, &sp8); +} From 8eb6593ccf1eb909abff8a4fe0cb9baa942ae2c8 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 11 Feb 2024 16:43:08 -0600 Subject: [PATCH 027/106] Decompile objdll and objsysobj.c --- configure.py | 4 +- include/game/minigame_seq.h | 21 +++++ include/game/object.h | 23 ++++- src/game/minigame_seq.c | 10 +-- src/game/objdll.c | 172 ++++++++++++++++++++++++++++++++++++ src/game/objmain.c | 2 +- src/game/objsysobj.c | 149 +++++++++++++++++++++++++++++++ 7 files changed, 368 insertions(+), 13 deletions(-) create mode 100644 include/game/minigame_seq.h create mode 100644 src/game/objdll.c create mode 100644 src/game/objsysobj.c diff --git a/configure.py b/configure.py index 46ef767a..30b7cc23 100644 --- a/configure.py +++ b/configure.py @@ -334,8 +334,8 @@ config.libs = [ Object(Matching, "game/objmain.c"), Object(Matching, "game/fault.c"), Object(Matching, "game/gamework.c"), - Object(NonMatching, "game/objsysobj.c"), - Object(NonMatching, "game/objdll.c"), + Object(Matching, "game/objsysobj.c"), + Object(Matching, "game/objdll.c"), Object(Matching, "game/frand.c"), Object(Matching, "game/audio.c"), Object(Matching, "game/EnvelopeExec.c"), diff --git a/include/game/minigame_seq.h b/include/game/minigame_seq.h new file mode 100644 index 00000000..95a04e6e --- /dev/null +++ b/include/game/minigame_seq.h @@ -0,0 +1,21 @@ +#ifndef _GAME_MINIGAME_SEQ_H +#define _GAME_MINIGAME_SEQ_H + +#include "game/object.h" + +void MGSeqInit(void); +void MGSeqMain(void); +s16 MGSeqCreate(s16 type, ...); +u8 MGSeqStatGet(s16 id); +void MGSeqPosSet(s16 id, float x, float y); +void MGSeqParamSet(s16 id, s16 param1, s16 param2); +void MGSeqKill(s16 id); +void MGSeqKillAll(void); +s32 MGSeqDoneCheck(void); +void MGSeqStub(void); +void MGSeqPauseInit(void); +void MGSeqPauseEnableCtrl(s32 flag); +void MGSeqPracticeInit(void); +void MGSeqPracticeExitCheck(omObjData *object); + +#endif diff --git a/include/game/object.h b/include/game/object.h index 83b891f5..ecc9c99e 100644 --- a/include/game/object.h +++ b/include/game/object.h @@ -5,6 +5,8 @@ #include "game/process.h" #include "game/dvd.h" +#define OM_DLL_MAX 20 + #define OVL_DEFINE(name, path) name, typedef enum { @@ -55,6 +57,13 @@ typedef struct om_obj_data { /* 0x5C */ void *data; } omObjData; +typedef struct om_dll_data { + char *name; + OSModuleHeader *module; + void *bss; + s32 ret; +} omDllData; + void omMasterInit(int prio, FileListEntry *ovl_list, int ovl_count, OverlayID start_ovl); void omOvlCallEx(OverlayID overlay, s16 arg2, int event, int stat); void omOvlGotoEx(OverlayID overlay, s16 arg2, int event, int stat); @@ -83,8 +92,14 @@ OverlayID omCurrentOvlGet(void); void omDLLDBGOut(void); void omDLLInit(FileListEntry *ovl_list); -int omDLLStart(s16 ovl, s16 dll); -void omDLLNumEnd(s16 ovl, s16 arg2); +int omDLLStart(s16 overlay, s16 flag); +void omDLLNumEnd(s16 overlay, s16 flag); +void omDLLEnd(s16 dllno, s16 flag); +omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag); +void omDLLUnlink(omDllData *dll_ptr, s16 flag); +s32 omDLLSearch(s16 overlay); +void omDLLInfoDump(OSModuleInfo *module); +void omDLLHeaderDump(OSModuleHeader *module); void omSysPauseEnable(u8 flag); @@ -102,7 +117,9 @@ extern int omovlstat; extern char omUPauseFlag; extern s16 omSysExitReq; extern s16 omdispinfo; -extern char omSysPauseEnableFlag; +extern u8 omSysPauseEnableFlag; extern OverlayID omprevovl; +extern omDllData *omDLLinfoTbl[OM_DLL_MAX]; + #endif \ No newline at end of file diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index a4a7f58a..dc8d41cd 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -8,6 +8,7 @@ #include "game/window.h" #include "game/wipe.h" #include "game/pad.h" +#include "game/minigame_seq.h" #include "math.h" @@ -18,10 +19,6 @@ #define ABS(x) (((x) < 0) ? -(x) : (x)) -void MGSeqStub(void); - -void MGSeqPauseEnableCtrl(s32 flag); - extern s16 HuSysVWaitGet(s16 param); typedef struct seq_work SeqWork; @@ -329,7 +326,7 @@ void MGSeqParamSet(s16 id, s16 param1, s16 param2) } } -void MGSeqKill(s16 id, s16 param1, s16 param2) +void MGSeqKill(s16 id) { if(id >= 0 && id < 8) { if(seqWorkData[id].stat != 0) { @@ -338,7 +335,7 @@ void MGSeqKill(s16 id, s16 param1, s16 param2) } } -void MGSeqKillAll(s16 id, s16 param1, s16 param2) +void MGSeqKillAll(void) { seqDoneF = 1; MGSeqMain(); @@ -3170,7 +3167,6 @@ static int SeqUpdateRecord(SeqWork *work) } } } - if(seqDoneF || (work->stat & 0x8)) { MGSeqSprKill(work); return 0; diff --git a/src/game/objdll.c b/src/game/objdll.c new file mode 100644 index 00000000..067bee54 --- /dev/null +++ b/src/game/objdll.c @@ -0,0 +1,172 @@ +#include "game/object.h" +#include "game/dvd.h" +#include "game/memory.h" + +typedef s32 (*DLLProlog)(void); +typedef void (*DLLEpilog)(void); + +omDllData *omDLLinfoTbl[OM_DLL_MAX]; + +static FileListEntry *omDLLFileList; + +void omDLLDBGOut(void) +{ + OSReport("DLL DBG OUT\n"); +} + +void omDLLInit(FileListEntry *ovl_list) +{ + int i; + OSReport("DLL DBG OUT\n"); + for(i=0; i= 0 && !flag) { + omDllData *dll = omDLLinfoTbl[dllno]; + OSReport("objdll>Already Loaded %s(%08x %08x)\n", dll->name, dll->module, dll->bss); + + omDLLInfoDump(&dll->module->info); + omDLLHeaderDump(dll->module); + memset(dll->bss, 0, dll->module->bssSize); + HuMemDCFlushAll(); + dll->ret = ((DLLProlog)dll->module->prolog)(); + OSReport("objdll> %s prolog end\n", dll->name); + return dllno; + } else { + for(dllno=0; dllnoomDLLNumEnd Invalid dllno %d\n", overlay); + return; + } + OSReport("objdll>omDLLNumEnd %d %d\n", overlay, flag); + dllno = omDLLSearch(overlay); + if(dllno < 0) { + OSReport("objdll>omDLLNumEnd not found DLL No%d\n", overlay); + return; + } + omDLLEnd(dllno, flag); +} + +void omDLLEnd(s16 dllno, s16 flag) +{ + OSReport("objdll>omDLLEnd %d %d\n", dllno, flag); + if(flag == 1) { + OSReport("objdll>End DLL:%s\n", omDLLinfoTbl[dllno]->name); + omDLLUnlink(omDLLinfoTbl[dllno], 1); + omDLLinfoTbl[dllno] = NULL; + } else { + omDllData *dll; + dll = omDLLinfoTbl[dllno]; + OSReport("objdll>Call Epilog\n"); + ((DLLEpilog)dll->module->epilog)(); + OSReport("objdll>End DLL stayed:%s\n", omDLLinfoTbl[dllno]->name); + } + OSReport("objdll>End DLL finish\n"); +} + +omDllData *omDLLLink(omDllData **dll_ptr, s16 overlay, s16 flag) +{ + omDllData *dll; + FileListEntry *dllFile = &omDLLFileList[overlay]; + OSReport("objdll>Link DLL:%s\n", dllFile->name); + dll = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(omDllData)); + *dll_ptr = dll; + dll->name = dllFile->name; + dll->module = HuDvdDataReadDirect(dllFile->name, HEAP_SYSTEM); + dll->bss = HuMemDirectMalloc(HEAP_SYSTEM, dll->module->bssSize); + if(OSLink(&dll->module->info, dll->bss) != TRUE) { + OSReport("objdll>++++++++++++++++ DLL Link Failed\n"); + } + omDLLInfoDump(&dll->module->info); + omDLLHeaderDump(dll->module); + OSReport("objdll>LinkOK %08x %08x\n", dll->module, dll->bss); + if(flag == 1) { + OSReport("objdll> %s prolog start\n", dllFile->name); + dll->ret = ((DLLProlog)dll->module->prolog)(); + OSReport("objdll> %s prolog end\n", dllFile->name); + } + return dll; +} + +void omDLLUnlink(omDllData *dll_ptr, s16 flag) +{ + OSReport("odjdll>Unlink DLL:%s\n", dll_ptr->name); + if(flag == 1) { + OSReport("objdll>Unlink DLL epilog\n"); + ((DLLEpilog)dll_ptr->module->epilog)(); + OSReport("objdll>Unlink DLL epilog finish\n"); + } + if(OSUnlink(&dll_ptr->module->info) != TRUE) { + OSReport("objdll>+++++++++++++++++ DLL Unlink Failed\n"); + } + HuMemDirectFree(dll_ptr->bss); + HuMemDirectFree(dll_ptr->module); + HuMemDirectFree(dll_ptr); +} + +s32 omDLLSearch(s16 overlay) +{ + s32 i; + FileListEntry *dllFile = &omDLLFileList[overlay]; + OSReport("Search:%s\n", dllFile->name); + for(i=0; iname, dllFile->name) == 0) { + OSReport("+++++++++++ Find%d: %s\n", i, dll->name); + return i; + } + } + return -1; +} + +void omDLLInfoDump(OSModuleInfo *module) +{ + OSReport("===== DLL Module Info dump ====\n"); + OSReport(" ID:0x%08x\n", module->id); + OSReport(" LinkPrev:0x%08x\n", module->link.prev); + OSReport(" LinkNext:0x%08x\n", module->link.next); + OSReport(" Section num:%d\n", module->numSections); + OSReport("Section info tbl ofst:0x%08x\n", module->sectionInfoOffset); + OSReport(" nameOffset:0x%08x\n", module->nameOffset); + OSReport(" nameSize:%d\n", module->nameSize); + OSReport(" version:0x%08x\n", module->version); + OSReport("===============================\n"); +} + +void omDLLHeaderDump(OSModuleHeader *module) +{ + OSReport("==== DLL Module Header dump ====\n"); + OSReport(" bss Size:0x%08x\n", module->bssSize); + OSReport(" rel Offset:0x%08x\n", module->relOffset); + OSReport(" imp Offset:0x%08x\n", module->impOffset); + OSReport(" prolog Section:%d\n", module->prologSection); + OSReport(" epilog Section:%d\n", module->epilogSection); + OSReport("unresolved Section:%d\n", module->unresolvedSection); + OSReport(" prolog func:0x%08x\n", module->prolog); + OSReport(" epilog func:0x%08x\n", module->epilog); + OSReport(" unresolved func:0x%08x\n", module->unresolved); + OSReport("================================\n"); +} \ No newline at end of file diff --git a/src/game/objmain.c b/src/game/objmain.c index 5712f4d5..4cd4a998 100644 --- a/src/game/objmain.c +++ b/src/game/objmain.c @@ -45,7 +45,7 @@ s16 omdispinfo; static omOvlHisData omovlhis[OM_OVL_HIS_MAX]; -char omSysPauseEnableFlag = TRUE; +u8 omSysPauseEnableFlag = TRUE; OverlayID omprevovl = OVL_INVALID; static void omWatchOverlayProc(void); diff --git a/src/game/objsysobj.c b/src/game/objsysobj.c new file mode 100644 index 00000000..478db6ef --- /dev/null +++ b/src/game/objsysobj.c @@ -0,0 +1,149 @@ +#include "game/object.h" +#include "game/hsfman.h" +#include "game/pad.h" +#include "game/objsub.h" +#include "game/minigame_seq.h" +#include "game/sprite.h" +#include "game/hsfman.h" +#include "game/audio.h" +#include "math.h" + +Vec CRot; +Vec Center; +float CZoom; +Vec CRotM[16]; +Vec CenterM[16]; +float CZoomM[16]; + +omObjData *omDBGMenuButton; + +void omOutView(omObjData *object) +{ + Vec pos, target, up; + float rot_x = CRot.x; + float rot_y = CRot.y; + float rot_z = CRot.z; + pos.x = (sin(M_PI*rot_y/180.0)*cos(M_PI*rot_x/180.0)*CZoom)+Center.x; + pos.y = (-sin(M_PI*rot_x/180.0)*CZoom)+Center.y; + pos.z = (cos(M_PI*rot_y/180.0)*cos(M_PI*rot_x/180.0)*CZoom)+Center.z; + target.x = Center.x; + target.y = Center.y; + target.z = Center.z; + up.x = sin(M_PI*rot_y/180.0)*sin(M_PI*rot_x/180.0); + up.y = cos(M_PI*rot_x/180.0); + up.z = cos(M_PI*rot_y/180.0)*sin(M_PI*rot_x/180.0); + Hu3DCameraPosSet(1, pos.x, pos.y, pos.z, up.x, up.y, up.z, target.x, target.y, target.z); +} + +void omOutViewMulti(omObjData *object) +{ + u8 i; + for(i=0; iwork[0]; i++) { + Vec pos, target, up; + float rot_x = CRotM[i].x; + float rot_y = CRotM[i].y; + float rot_z = CRotM[i].z; + pos.x = (sin(M_PI*rot_y/180.0)*cos(M_PI*rot_x/180.0)*CZoomM[i])+CenterM[i].x; + pos.y = (-sin(M_PI*rot_x/180.0)*CZoomM[i])+CenterM[i].y; + pos.z = (cos(M_PI*rot_y/180.0)*cos(M_PI*rot_x/180.0)*CZoomM[i])+CenterM[i].z; + target.x = CenterM[i].x; + target.y = CenterM[i].y; + target.z = CenterM[i].z; + up.x = sin(M_PI*rot_y/180.0)*sin(M_PI*rot_x/180.0); + up.y = cos(M_PI*rot_x/180.0); + up.z = cos(M_PI*rot_y/180.0)*sin(M_PI*rot_x/180.0); + Hu3DCameraPosSetV((1 << i), &pos, &up, &target); + } +} + +void omSystemKeyCheck(omObjData *object); + +void omSystemKeyCheckSetup(Process *objman) +{ + omObjData *object; + object = omAddObjEx(objman, 32731, 0, 0, -1, omSystemKeyCheck); + omDBGSysKeyObj = object; + omSetStatBit(object, 0xA0); + object->work[0] = 0; + object->work[1] = 0; + object->work[2] = 0; +} + +void omSystemKeyCheck(omObjData *object) +{ + if(!omSysPauseEnableFlag) { + return; + } + if(object->work[0] & 0x1) { + u32 pad = object->work[1]; + if(pad != (u16)-1 && HuPadStatGet(pad) == 0 && (HuPadBtnDown[pad] & PAD_BUTTON_START)) { + object->work[0] |= 0x200; + } + if(object->work[0] & 0x200) { + if(omMgIndexGet(omcurovl) != -1) { + MGSeqPauseKill(); + } else { + object->work[0] |= 0x100; + } + } + if(object->work[0] & 0x100) { + object->work[0] &= ~0x301; + omAllPause(0); + HuPrcAllPause(0); + Hu3DPauseSet(0); + HuSprPauseSet(0); + HuAudFXPauseAll(0); + HuAudSeqPauseAll(0); + } + } else { + int i; + s16 pause = 0; + if(WipeStatGet() || omCurrentOvlGet() == OVL_INVALID || omSysExitReq) { + return; + } + for(i=0; i<4; i++) { + if(HuPadStatGet(i) == 0 && (HuPadBtnDown[i] & PAD_BUTTON_START)) { + pause = 1; + break; + } + } + if(object->work[0] & 0x80) { + object->work[0] &= ~0x80; + pause = 1; + i = (u16)-1; + } + if(pause) { + object->work[0] |= 0x1; + object->work[1] = i; + omAllPause(1); + HuPrcAllPause(1); + Hu3DPauseSet(1); + HuSprPauseSet(1); + HuAudFXPauseAll(1); + HuAudSeqPauseAll(1); + if(omMgIndexGet(omcurovl) != -1) { + MGSeqPauseInit(); + } + HuPadRumbleAllStop(); + } + } +} + + +void omSysPauseEnable(u8 flag) +{ + omSysPauseEnableFlag = flag; +} + +void omSysPauseCtrl(s16 flag) +{ + if(!omDBGSysKeyObj) { + return; + } + omDBGSysKeyObj->work[0] &= ~0x180; + if(flag) { + omDBGSysKeyObj->work[0] |= 0x80; + } else { + omDBGSysKeyObj->work[0] |= 0x100; + } +} \ No newline at end of file From 4e6643c7fe6612d0ff2a1dec75f9715e25bae68d Mon Sep 17 00:00:00 2001 From: darxoon Date: Mon, 12 Feb 2024 00:37:27 +0100 Subject: [PATCH 028/106] Improvements to block.c --- include/game/flag.h | 2 + src/game/board/block.c | 312 ++++++++++++++++++++--------------------- 2 files changed, 156 insertions(+), 158 deletions(-) diff --git a/include/game/flag.h b/include/game/flag.h index 159a959d..c2590c7c 100644 --- a/include/game/flag.h +++ b/include/game/flag.h @@ -1,6 +1,8 @@ #ifndef _GAME_FLAG_H #define _GAME_FLAG_H +#include "dolphin/types.h" + #define FLAG_ID_MAKE(group, index) (((group) << 16)|(index)) s32 _CheckFlag(u32 flag); diff --git a/src/game/board/block.c b/src/game/board/block.c index 48cd1cbc..6f043eb8 100644 --- a/src/game/board/block.c +++ b/src/game/board/block.c @@ -1,36 +1,38 @@ +#include "game/flag.h" +#include "game/objsub.h" #include "game/process.h" #include "game/board/main.h" #include "game/board/player.h" +#include "game/board/model.h" +#include "game/board/window.h" #include "math.h" +#define BLOCK_SPAWN 0 +#define BLOCK_HIT 2 +#define BLOCK_OPEN 3 + typedef struct { struct { - u8 unk00_field0 : 1; - u8 unk00_field1 : 3; + u8 kill : 1; + u8 state : 3; u8 unk00_field2 : 1; - u8 unk00_field3 : 1; - u8 unk00_field4 : 1; + u8 contains_star : 1; + u8 opened : 1; u8 unk00_field5 : 1; }; - u8 unk01; - s16 unk02; - s16 unk04; + s16 hit_y_velocity; + s16 target_y_pos; } BlockWork; typedef struct { struct { - u8 unk00_field0 : 1; - u8 unk00_field1 : 3; - u8 unk00_field2 : 1; - u8 unk00_field3 : 1; - u8 unk00_field4 : 1; - u8 unk00_field5 : 1; + u8 kill : 1; }; - u8 unk01; - s8 unk02; - s16 unk04; + u8 lifetime; + s8 model_index; + s16 model; } CoinWork; static void BlockProc(void); @@ -62,10 +64,7 @@ static f32 rotY; static omObjData* blockObj; static Process* blockProc; -static s16 coinMdl[10] = { - -1, -1, -1, -1, 0, 0, 0, 0, 0, 0 -}; - +static s16 coinMdl[10] = { -1, -1, -1, -1 }; static s32 coinF[10]; s32 BoardBlockExec(s32 arg0) { @@ -87,23 +86,23 @@ static void BlockProc(void) { s32 sp14[8] = {0x005F0060, 0x001A0060, 0x006D0060, 0x008A0060, 0x00850060, 0x00110060, 0x000D0060, 0x00810060}; Point3d sp8; s32 var_r28; - s32 var_r29; - s32 temp_r31; - BlockWork* temp_r30; + s32 i; + s32 player; + BlockWork* work; s32* temp_r4; - s32 var_r27; + s32 player_character; - temp_r31 = GWSystem.player_curr; + player = GWSystem.player_curr; - var_r27 = GWPlayer[temp_r31].character; - jumpMot = BoardPlayerMotionCreate(temp_r31, sp14[var_r27]); - BoardRotateDiceNumbers(temp_r31); - BoardPlayerMotBlendSet(temp_r31, 0, 0xF); - omVibrate((s16) temp_r31, 0xC, 0xC, 0); - CreateBlockObj(temp_r31); + player_character = GWPlayer[player].character; + jumpMot = BoardPlayerMotionCreate(player, sp14[player_character]); + BoardRotateDiceNumbers(player); + BoardPlayerMotBlendSet(player, 0, 0xF); + omVibrate(player, 12, 12, 0); + CreateBlockObj(player); - temp_r30 = OM_GET_WORK_PTR(blockObj, BlockWork); - while (temp_r30->unk00_field1 != 2) { + work = OM_GET_WORK_PTR(blockObj, BlockWork); + while (work->state != BLOCK_HIT) { HuPrcVSleep(); } @@ -112,64 +111,63 @@ static void BlockProc(void) { BoardWinCreate(0, 0x10000, -1); BoardWinWait(); BoardWinKill(); - BoardPlayerMotionShiftSet(temp_r31, 0xB, 0, 8.0, 0.0); + BoardPlayerMotionShiftSet(player, 0xB, 0, 8.0, 0.0); HuPrcSleep(9); - while (BoardPlayerMotionTimeGet(temp_r31) < 30.0f) { + while (BoardPlayerMotionTimeGet(player) < 30.0f) { HuPrcVSleep(); } HuAudFXPlay(0x30C); SetBlockOpen(); - while (BoardPlayerMotionEndCheck(temp_r31) == 0) { + while (BoardPlayerMotionEndCheck(player) == 0) { HuPrcVSleep(); } - BoardRotateDiceNumbers((s32) temp_r31); - if (temp_r30->unk00_field3 != 0) { + BoardRotateDiceNumbers(player); + + if (work->contains_star != 0) { SetBlockStop(); BoardModelPosGet(starMdl, &sp8); - if (_CheckFlag(0x1000BU) == 0) { + if (_CheckFlag(0x1000B) == 0) { BoardAudSeqPause(0, 1, 0x3E8); } - BoardStarGive(temp_r31, &sp8); - if (_CheckFlag(0x1000BU) == 0) { + BoardStarGive(player, &sp8); + if (_CheckFlag(0x1000B) == 0) { BoardAudSeqPause(0, 0, 0x3E8); } } else { - var_r29 = 0; - while (var_r29 < 0x14) { + for (i = 0; i < 0x14; i++) { WaitBlockHit(); - BoardPlayerMotionStart(temp_r31, (s32) jumpMot, 0); - BoardPlayerMotionSpeedSet(temp_r31, 2); - while (BoardPlayerMotionTimeGet(temp_r31) < 4) { + BoardPlayerMotionStart(player, (s32) jumpMot, 0); + BoardPlayerMotionSpeedSet(player, 2); + while (BoardPlayerMotionTimeGet(player) < 4) { HuPrcVSleep(); } SetBlockOpen(); PopupCoin(); - while (BoardPlayerMotionEndCheck(temp_r31) == 0) { + while (BoardPlayerMotionEndCheck(player) == 0) { HuPrcVSleep(); } - BoardPlayerMotionStart(temp_r31, 1, 0); - BoardPlayerCoinsAdd(temp_r31, 1); + BoardPlayerMotionStart(player, 1, 0); + BoardPlayerCoinsAdd(player, 1); HuAudFXPlay(7); HuPrcVSleep(); - var_r29 += 1; } + SetBlockStop(); } - if (temp_r30->unk00_field3 != 0) { - var_r28 = 0x10001; - } else { - var_r28 = 0x10002; - } - BoardWinCreate(0, var_r28, -1); + + BoardWinCreate(0, work->contains_star != 0 ? 0x10001 : 0x10002, -1); BoardWinWait(); BoardWinKill(); KillCoinMdl(); - temp_r30->unk00_field0 = 1; - BoardRotateDiceNumbers((s32) temp_r31); + work->kill = 1; + + BoardRotateDiceNumbers((s32) player); HuPrcVSleep(); - if ((_CheckFlag(0x1000BU) != 0) && temp_r30->unk00_field3 == 0) { + + if ((_CheckFlag(0x1000B) != 0) && work->contains_star == 0) { BoardTutorialHookExec(0x16, 0); } + BoardCameraViewSet(2); BoardCameraMotionWait(); HuPrcEnd(); @@ -177,20 +175,19 @@ static void BlockProc(void) { static void DestroyBlock(void) { if (jumpMot != -1) { - BoardPlayerMotionKill(GWSystem.player_curr, (s32) jumpMot); + BoardPlayerMotionKill(GWSystem.player_curr, jumpMot); jumpMot = -1; } KillCoinMdl(); blockProc = 0; } - static void CreateBlockObj(s32 arg0) { - Point3d spC; - BlockWork* temp_r31; - s8 var_r30; + Point3d player_pos; + BlockWork* work; + s8 contains_star; - BoardPlayerPosGet(arg0, &spC); + BoardPlayerPosGet(arg0, &player_pos); starMdl = BoardModelCreate(0x70004, NULL, 0); BoardModelVisibilitySet(starMdl, 0); BoardModelMotionSpeedSet(starMdl, 0); @@ -198,16 +195,16 @@ static void CreateBlockObj(s32 arg0) { blockObj = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, ExecBlockObj); - temp_r31 = OM_GET_WORK_PTR(blockObj, BlockWork); - temp_r31->unk00_field0 = 0; - temp_r31->unk00_field2 = 0; - temp_r31->unk00_field4 = 0; - temp_r31->unk00_field5 = 0; - temp_r31->unk00_field1 = 0; + work = OM_GET_WORK_PTR(blockObj, BlockWork); + work->kill = 0; + work->unk00_field2 = 0; + work->opened = 0; + work->unk00_field5 = 0; + work->state = BLOCK_SPAWN; - blockObj->trans.x = spC.x; - blockObj->trans.y = 270 + spC.y; - blockObj->trans.z = spC.z; + blockObj->trans.x = player_pos.x; + blockObj->trans.y = 270 + player_pos.y; + blockObj->trans.z = player_pos.z; blockObj->scale.x = blockObj->scale.y = blockObj->scale.z = 0.01; blockObj->rot.x = blockObj->rot.y = blockObj->rot.z = 0.0; @@ -219,50 +216,50 @@ static void CreateBlockObj(s32 arg0) { BoardModelVisibilitySet(starMdl, 1); if (BoardRandFloat() > 0.5f) { - var_r30 = 0; + contains_star = 0; } else { - var_r30 = 1; + contains_star = 1; } - temp_r31->unk00_field3 = var_r30; + work->contains_star = contains_star; if (boardTutorialBlockF != 0) { - temp_r31->unk00_field3 = boardTutorialBlockItem; + work->contains_star = boardTutorialBlockItem; boardTutorialBlockF = 0; } HuAudFXPlay(0x302); - if (temp_r31->unk00_field3 == 0) { + if (work->contains_star == 0) { CreateCoinMdl(); } } static void ExecBlockObj(omObjData* arg0) { - BlockWork* temp_r30; + BlockWork* work; - temp_r30 = OM_GET_WORK_PTR(arg0, BlockWork); + work = OM_GET_WORK_PTR(arg0, BlockWork); - if (temp_r30->unk00_field0 != 0 || BoardIsKill() != 0) { - DestroyBlockObj(temp_r30, arg0); + if (work->kill != 0 || BoardIsKill() != 0) { + DestroyBlockObj(work, arg0); blockObj = 0; omDelObjEx(HuPrcCurrentGet(), arg0); return; } - switch (temp_r30->unk00_field1) { - case 0: - SpawnBlock(temp_r30, arg0); + switch (work->state) { + case BLOCK_SPAWN: + SpawnBlock(work, arg0); break; - case 2: - HitBlock(temp_r30, arg0); + case BLOCK_HIT: + HitBlock(work, arg0); break; - case 3: - OpenBlock(temp_r30, arg0); + case BLOCK_OPEN: + OpenBlock(work, arg0); break; } - if (temp_r30->unk00_field5 != 0) { + if (work->unk00_field5 != 0) { BoardModelVisibilitySet(starMdl, 0); } @@ -279,8 +276,6 @@ static void DestroyBlockObj(BlockWork* unused0, omObjData* unused1) { } static void SpawnBlock(BlockWork* arg0, omObjData* arg1) { - f32 temp_f0; - if (scaleAngle < 90.0f) { scaleAngle += 3.75f; if (scaleAngle > 90.0f) { @@ -291,8 +286,8 @@ static void SpawnBlock(BlockWork* arg0, omObjData* arg1) { if (rotMax < 0.8f) { rotY = 0.0f; rotMax = 0.0f; - arg0->unk02 = 0; - arg0->unk00_field1 = 2; + arg0->hit_y_velocity = 0; + arg0->state = BLOCK_HIT; } } @@ -310,59 +305,60 @@ static void SpawnBlock(BlockWork* arg0, omObjData* arg1) { static void HitBlock(BlockWork* arg0, omObjData* arg1) { float var_f30; - arg0->unk02 += 3; - if (arg0->unk02 > 0x168) { - arg0->unk02 -= 0x168; + arg0->hit_y_velocity += 3; + if (arg0->hit_y_velocity > 0x168) { + arg0->hit_y_velocity -= 0x168; } - OSs16tof32(&arg0->unk02, &var_f30); - arg1->trans.y = arg1->trans.y + 0.2f * sin((M_PI * var_f30) / 180.0); + + OSs16tof32(&arg0->hit_y_velocity, &var_f30); + arg1->trans.y += 0.2f * sin((M_PI * var_f30) / 180.0); } static void OpenBlock(BlockWork* arg0, omObjData* arg1) { - s16 sp8; - f32 temp_f30; + f32 target_y_pos; - if (arg0->unk00_field4 == 0) { - arg0->unk00_field4 = 1; + if (arg0->opened == 0) { + arg0->opened = 1; HuAudFXPlay(0x33B); BoardModelMotionStart(starMdl, 0, 0); } if (arg0->unk00_field2 == 0) { - OSf32tos16(&arg1->trans.y, &arg0->unk04); + OSf32tos16(&arg1->trans.y, &arg0->target_y_pos); + arg1->trans.y += 80.0f; arg0->unk00_field2 = 1; } else { - OSs16tof32(&arg0->unk04, &temp_f30); + OSs16tof32(&arg0->target_y_pos, &target_y_pos); arg1->trans.y += -8.0f; - if (arg1->trans.y < temp_f30) { - arg1->trans.y = temp_f30; - arg0->unk00_field1 = 2; + if (arg1->trans.y < target_y_pos) { + arg1->trans.y = target_y_pos; + arg0->state = BLOCK_HIT; } } } static void SetBlockOpen(void) { - BlockWork* temp_r31; + BlockWork* work; - temp_r31 = OM_GET_WORK_PTR(blockObj, BlockWork); - temp_r31->unk00_field1 = 3; + work = OM_GET_WORK_PTR(blockObj, BlockWork); + work->state = BLOCK_OPEN; } static void SetBlockStop(void) { - BlockWork* temp_r31; + BlockWork* work; - temp_r31 = OM_GET_WORK_PTR(blockObj, BlockWork); - temp_r31->unk00_field5 = 1; + work = OM_GET_WORK_PTR(blockObj, BlockWork); + work->unk00_field5 = 1; } static void WaitBlockHit(void) { - BlockWork* temp_r31; + BlockWork* work; - temp_r31 = OM_GET_WORK_PTR(blockObj, BlockWork); + work = OM_GET_WORK_PTR(blockObj, BlockWork); - while (temp_r31->unk00_field1 != 2) { + while (work->state != BLOCK_HIT) { HuPrcVSleep(); } } @@ -389,12 +385,12 @@ static void KillCoinMdl(void) { } } -static inline s32 UnkFunc(s16 *var_r26) { +static inline s32 FindCoinModel(s16 *out_model) { s32 i; for (i = 0; i < 10; i++) { if (coinF[i] == 0) { - *var_r26 = coinMdl[i]; + *out_model = coinMdl[i]; return i; } } @@ -403,63 +399,63 @@ static inline s32 UnkFunc(s16 *var_r26) { } static void PopupCoin(void) { - Point3d sp8; - omObjData* temp_r3; - s32 var_r28; - s16 var_r26; - CoinWork* temp_r31; + Point3d star_pos; + omObjData* coinObj; + s32 model_index; + s16 model; + CoinWork* work; do { HuPrcVSleep(); - var_r28 = UnkFunc(&var_r26); - } while (var_r28 == -1); + model_index = FindCoinModel(&model); + } while (model_index == -1); - temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, PopupCoinExec); - temp_r31 = OM_GET_WORK_PTR(temp_r3, CoinWork); + coinObj = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, PopupCoinExec); + work = OM_GET_WORK_PTR(coinObj, CoinWork); - temp_r31->unk00_field0 = 0; - temp_r31->unk01 = 0xA; - temp_r31->unk04 = var_r26; - temp_r31->unk02 = var_r28; + work->kill = 0; + work->lifetime = 10; + work->model = model; + work->model_index = model_index; - temp_r3->trans.x = 15.0f; - temp_r3->trans.y = 40.0f; + coinObj->trans.x = 15.0f; + coinObj->trans.y = 40.0f; - BoardModelPosGet(starMdl, &sp8); - BoardModelPosSetV(temp_r31->unk04, &sp8); - BoardModelVisibilitySet(temp_r31->unk04, 1); + BoardModelPosGet(starMdl, &star_pos); + BoardModelPosSetV(work->model, &star_pos); + BoardModelVisibilitySet(work->model, 1); } -static void PopupCoinExec(omObjData* arg0) { - Point3d sp14; - Point3d sp8; - CoinWork* temp_r31; +static void PopupCoinExec(omObjData* obj) { + Point3d coin_pos; + Point3d coin_rot; + CoinWork* work; - temp_r31 = OM_GET_WORK_PTR(arg0, CoinWork); + work = OM_GET_WORK_PTR(obj, CoinWork); - if (temp_r31->unk00_field0 != 0 || BoardIsKill() != 0) { - BoardModelVisibilitySet(temp_r31->unk04, 0); - coinF[temp_r31->unk02] = 0; - omDelObjEx(HuPrcCurrentGet(), arg0); + if (work->kill != 0 || BoardIsKill() != 0) { + BoardModelVisibilitySet(work->model, 0); + coinF[work->model_index] = 0; + omDelObjEx(HuPrcCurrentGet(), obj); return; } - if (temp_r31->unk01 != 0) { - temp_r31->unk01 -= 1; + if (work->lifetime != 0) { + work->lifetime -= 1; } else { - temp_r31->unk00_field0 = 1; + work->kill = 1; return; } - BoardModelPosGet(temp_r31->unk04, &sp14); - sp14.y += arg0->trans.y; - BoardModelPosSetV(temp_r31->unk04, &sp14); - BoardModelRotGet(temp_r31->unk04, &sp8); - sp8.y += arg0->trans.x; + BoardModelPosGet(work->model, &coin_pos); + coin_pos.y += obj->trans.y; + BoardModelPosSetV(work->model, &coin_pos); + BoardModelRotGet(work->model, &coin_rot); + coin_rot.y += obj->trans.x; - if (sp8.y > 360.0f) { - sp8.y -= 360.0f; + if (coin_rot.y > 360.0f) { + coin_rot.y -= 360.0f; } - BoardModelRotSetV(temp_r31->unk04, &sp8); + BoardModelRotSetV(work->model, &coin_rot); } From ea0cf380bb3a8ce648aa624c869f0c67852be8df Mon Sep 17 00:00:00 2001 From: mrshigure Date: Mon, 12 Feb 2024 11:45:34 -0800 Subject: [PATCH 029/106] Matched board/pause --- configure.py | 2 +- include/game/board/pause.h | 10 + include/game/gamework_data.h | 25 + include/game/window.h | 2 +- src/game/board/main.c | 1 + src/game/board/pause.c | 1557 ++++++++++++++++++++++++++++++++++ src/game/board/roll.c | 2 +- src/game/window.c | 2 +- 8 files changed, 1597 insertions(+), 4 deletions(-) create mode 100755 include/game/board/pause.h create mode 100755 src/game/board/pause.c diff --git a/configure.py b/configure.py index 30b7cc23..d8223805 100644 --- a/configure.py +++ b/configure.py @@ -386,7 +386,7 @@ config.libs = [ Object(NonMatching, "game/board/boo_house.c"), Object(NonMatching, "game/board/start.c"), Object(NonMatching, "game/board/last5.c"), - Object(NonMatching, "game/board/pause.c"), + Object(Matching, "game/board/pause.c"), Object(Matching, "game/board/com_path.c"), Object(Matching, "game/board/tutorial.c"), Object(NonMatching, "game/kerent.c"), diff --git a/include/game/board/pause.h b/include/game/board/pause.h new file mode 100755 index 00000000..b851e7f7 --- /dev/null +++ b/include/game/board/pause.h @@ -0,0 +1,10 @@ +#ifndef _BOARD_PAUSE_H +#define _BOARD_PAUSE_H + +#include "dolphin/types.h" + +void BoardPauseStart(void); +BOOL BoardPauseActiveCheck(void); +BOOL BoardPauseReqCheck(void); + +#endif diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index ebd0bc77..c0333d13 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -152,11 +152,31 @@ static inline s32 GWTeamGet(void) return GWSystem.team; } +static inline s32 GWPartyGet(void) +{ + return GWSystem.party; +} + static inline s32 GWLanguageGet(void) { return GWGameStat.language; } +static inline s32 GWRumbleGet(void) +{ + return GWGameStat.rumble; +} + +static inline s32 GWMGExplainGet(void) +{ + return GWSystem.explain_mg; +} + +static inline s32 GWMGShowComGet(void) +{ + return GWSystem.show_com_mg; +} + static inline s32 GWMGListGet(void) { return GWSystem.mg_list; @@ -167,6 +187,11 @@ static inline s32 GWMessSpeedGet(void) return GWSystem.mess_speed; } +static inline s32 GWTurnGet(void) +{ + return GWSystem.turn; +} + static inline s32 GWBoardGet(void) { return GWSystem.board; diff --git a/include/game/window.h b/include/game/window.h index bf0f81d1..aec4a429 100644 --- a/include/game/window.h +++ b/include/game/window.h @@ -95,7 +95,7 @@ void HuWinScissorSet(s16 window, s16 x, s16 y, s16 w, s16 h); void HuWinPriSet(s16 window, s16 prio); void HuWinAttrSet(s16 window, u32 attr); void HuWinAttrReset(s16 window, u32 attr); -u8 HuWinStatGet(s16 window); +s16 HuWinStatGet(s16 window); void HuWinMesColSet(s16 window, u8 color); void HuWinMesPalSet(s16 window, u8 index, u8 r, u8 g, u8 b); void HuWinBGTPLvlSet(s16 window, float tp_level); diff --git a/src/game/board/main.c b/src/game/board/main.c index 4caa8d88..a5bfeab9 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -9,6 +9,7 @@ #include "game/hsfman.h" #include "game/hsfdraw.h" #include "game/board/main.h" +#include "game/board/pause.h" #include "game/board/player.h" #include "game/board/tutorial.h" #include "game/pad.h" diff --git a/src/game/board/pause.c b/src/game/board/pause.c new file mode 100755 index 00000000..c5e0e6fd --- /dev/null +++ b/src/game/board/pause.c @@ -0,0 +1,1557 @@ +#include "game/board/pause.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/flag.h" +#include "game/gamework_data.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/saveload.h" +#include "game/window.h" +#include "game/wipe.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/roll.h" +#include "game/board/ui.h" + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 1; + u8 unk00_field2 : 1; + u8 unk00_field3 : 3; + u8 unk00_field4 : 1; + }; + s8 unk01; + s8 unk02; + s8 unk03; + s8 unk04; + s8 unk05; + u8 unk06; + u8 unk07; + s8 unk08; + u8 unk09; + s16 unk0A; + u32 unk0C; +} ConfigWork; + +extern void omSysPauseCtrl(s32); +extern s16 BoardStarHostMdlGet(void); +extern void BoardStarHostSet(s16); + +static void PauseExit(void); +static void PauseProcess(void); +static void CreatePauseScreen(void); +static void DeletePauseScreen(void); +static void SetBoxVisible(s32 arg0); +static void PauseConfigObjFunc(omObjData *arg0); +static void UpdatePauseText(s32 arg0); +static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1); +static void PauseQuitProcess(void); +static void DeletePauseQuit(void); +static s32 UpdatePadConfig(omObjData *arg0, ConfigWork *arg1); +static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1); +static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1); +static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1); +static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1); +static void ScrollOutPadConfig(omObjData *arg0, ConfigWork *arg1); +static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2); +static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2); +static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1); +static void CreatePauseControlWin(void); +static void DeletePauseControlWin(void); +static s32 WaitPauseInput(void); +static void ShowPauseConfig(void); +static void CreatePadConfigSprite(void); +static void ShowPadConfigSprite(s32 arg0); +static void PauseCreateNumber(s32 arg0, s8 arg1); +static s32 CheckPort(s32 arg0); +static void RotateBox(float arg0, float arg1, Mtx arg2); + +static float boxRot[8]; +static Vec padBoxPos; + +static s8 pauseQuitF; +static s8 mainScreenF; +static u8 hostOldLayer; +static s16 hostMdl; +static s8 cursorPos; +static s8 boxState[8]; +static omObjData *configObj; +static Process *quitProcess; +static Process *mainProcess; + +static s8 pausePad = -1; +static s16 pauseSprGrp = -1; +static s16 padConfigSprGrp = -1; +static s16 pauseCursorPos = -1; +static s16 settingsControlWin = -1; +static s16 controlWin = -1; +static s16 quitWin = -1; +static s16 settingsWin = -1; + +static s16 boxModelID[8] = { + -1, -1, -1, -1, -1, -1, -1, -1 +}; + +static float boxPosTbl[8][2] = { + { 120.0f, 120.0f }, + { 232.0f, 120.0f }, + { 344.0f, 120.0f }, + { 456.0f, 120.0f }, + { 120.0f, 232.0f }, + { 232.0f, 232.0f }, + { 344.0f, 232.0f }, + { 456.0f, 232.0f } +}; + +static float padConfigPosTbl[4][2] = { + { 170.0f, 160.0f }, + { 266.0f, 160.0f }, + { 362.0f, 160.0f }, + { 458.0f, 160.0f } +}; + +static s32 boardLogoTbl[] = { + 0x00070057, + 0x00070058, + 0x00070059, + 0x0007005A, + 0x0007005B, + 0x0007005C, + 0x00070057, + 0x0007005D, + 0x0007005E +}; + +static float turnDigitPosTbl[] = { + 145.0f, 188.0f, 285.0f, 328.0f +}; + +static s32 boxMdlTbl[] = { + 0x00080008, + 0x00080009, + 0x0008000A, + 0x0008000B, + 0x0008000C, + 0x0008000D, + 0x0008000E, + 0x0008000F +}; + +void BoardPauseStart(void) { + mainProcess = HuPrcChildCreate(PauseProcess, 0x2001, 0x3800, 0, boardMainProc); + hostMdl = BoardStarHostMdlGet(); + BoardModelMotionStart(hostMdl, 1, 0x40000001); + HuPrcVSleep(); + omSysPauseCtrl(1); + omSysPauseEnable(1); + HuPrcSetStat(mainProcess, 0xC); + HuPrcDestructorSet2(mainProcess, PauseExit); +} + +static inline s32 PauseExitInlineFunc01(void) { + if (GWSystem.mg_list == 3) { + GWSystem.mg_list = 0; + } + return GWSystem.mg_list; +} + +static inline s32 PauseExitInlineFunc02(void) { + if (GWSystem.mess_speed == 3) { + GWSystem.mess_speed = 1; + } + return GWSystem.mess_speed; +} + +static inline s32 PauseExitInlineFunc03(void) { + if (GWSystem.save_mode == 3) { + GWSystem.save_mode = 1; + } + return GWSystem.save_mode; +} + +static void PauseExit(void) { + if (pauseQuitF == 0) { + BoardRollWinDispSet(1); + BoardDiceDigit2DShowSet(1); + BoardStatusItemSet(1); + BoardRollUPauseSet(1); + BoardLast5GfxShowSet(1); + HuAudFXPauseAll(0); + HuAudSeqPauseAll(0); + } else { + BoardConfettiKill(); + BoardAudSeqFadeOutAll(); + HuAudAllStop(); + } + DeletePauseScreen(); + DeletePauseControlWin(); + BoardEventFlagReset(); + HuDataDirClose(0x80000); + pausePad = -1; + omSysPauseCtrl(0); + if (GWMGExplainGet()) { + _SetFlag(0xB); + } else { + _ClearFlag(0xB); + } + if (GWPartyGet() == 0) { + GWGameStat.field10F_bit0 = GWMGExplainGet(); + GWGameStat.field10F_bit1 = GWMGShowComGet(); + GWGameStat.field10F_bit2 = PauseExitInlineFunc01(); + GWGameStat.field10F_bit4 = PauseExitInlineFunc02(); + GWGameStat.field10F_bit6 = PauseExitInlineFunc03(); + } else { + GWGameStat.field110_bit0 = GWMGExplainGet(); + GWGameStat.field110_bit1 = GWMGShowComGet(); + GWGameStat.field110_bit2 = PauseExitInlineFunc01(); + GWGameStat.field110_bit4 = PauseExitInlineFunc02(); + GWGameStat.field110_bit6 = PauseExitInlineFunc03(); + } + mainProcess = NULL; +} + +static void PauseProcess(void) { + s32 temp_r31; + + pauseQuitF = 0; + mainScreenF = 1; + BoardFilterFadeInit(0x1E, 0xA0); + temp_r31 = BoardDataDirReadAsync(0x80000); + BoardRollWinDispSet(0); + BoardDiceDigit2DShowSet(0); + BoardStatusItemSet(0); + BoardRollUPauseSet(0); + BoardLast5GfxShowSet(0); + HuPadRumbleAllStop(); + HuPrcSleep(1); + HuAudFXPlay(5); + while (!BoardFilterFadePauseCheck()) { + HuPrcVSleep(); + } + BoardDataAsyncWait(temp_r31); + CreatePauseScreen(); + CreatePauseControlWin(); + if (WaitPauseInput() == 1) { + ShowPauseConfig(); + } + DeletePauseScreen(); + DeletePauseControlWin(); + if (pauseQuitF != 0) { + HuPrcSleep(0x14); + WipeColorSet(0, 0, 0); + BoardKill(); + } else { + BoardFilterFadeOut(0x1E); + HuPrcSleep(0x1E); + } + HuPrcEnd(); +} + +void CreatePauseScreen(void) { + Mtx sp30; + Vec sp24; + Vec sp18; + float temp_f30; + float var_f31; + void *sp14; + omObjData *temp_r27; + ConfigWork *temp_r29; + s16 sp8; + s32 var_r28; + s32 i; + + sp14 = boardObjMan->user_data; + temp_r27 = omAddObjEx(boardObjMan, 0x108, 0, 0, -1, PauseConfigObjFunc); + configObj = temp_r27; + temp_r29 = OM_GET_WORK_PTR(temp_r27, ConfigWork); + temp_r29->unk00_field0 = 0; + temp_r29->unk02 = 0; + temp_r29->unk03 = 0; + temp_r29->unk06 = 0; + temp_r29->unk01 = 0; + temp_r29->unk00_field1 = 0; + temp_r29->unk00_field2 = 0; + temp_r29->unk0A = 0; + temp_r29->unk00_field4 = (SLSaveFlagGet() != 0) ? 0 : 1; + temp_r29->unk09 = 0; + temp_r29->unk0C = 0; + cursorPos = temp_r29->unk02 + temp_r29->unk03 * 4; + temp_r27->trans.x = -40.0f + boxPosTbl[cursorPos][0]; + temp_r27->trans.y = -32.0f + boxPosTbl[cursorPos][1]; + pauseCursorPos = HuSprGrpCreate(2); + HuSprGrpPosSet(pauseCursorPos, 0.0f, 0.0f); + BoardSpriteCreate(0x70055, 0x2BC, 0, &sp8); + HuSprGrpMemberSet(pauseCursorPos, 0, sp8); + HuSprZRotSet(pauseCursorPos, 0, 45.0f); + HuSprAttrSet(pauseCursorPos, 0, 4); + HuSprAttrSet(pauseCursorPos, 0, 8); + HuSprPosSet(pauseCursorPos, 0, temp_r27->trans.x, temp_r27->trans.y); + BoardSpriteCreate(0x80007, 0x2EE, 0, &sp8); + HuSprGrpMemberSet(pauseCursorPos, 1, sp8); + HuSprAttrSet(pauseCursorPos, 1, 4); + HuSprAttrSet(pauseCursorPos, 1, 8); + pauseSprGrp = HuSprGrpCreate(7); + HuSprGrpPosSet(pauseSprGrp, 0.0f, 0.0f); + BoardSpriteCreate(boardLogoTbl[GWBoardGet()], 0x384, 0, &sp8); + HuSprGrpMemberSet(pauseSprGrp, 0, sp8); + HuSprPosSet(pauseSprGrp, 0, 288.0f, 120.0f); + HuSprAttrSet(pauseSprGrp, 0, 4); + HuSprAttrSet(pauseSprGrp, 0, 8); + BoardSpriteCreate(0x80005, 0x384, 0, &sp8); + HuSprGrpMemberSet(pauseSprGrp, 1, sp8); + HuSprPosSet(pauseSprGrp, 1, 288.0f, 302.0f); + HuSprAttrSet(pauseSprGrp, 1, 8); + BoardSpriteCreate(0x80004, 0x320, 0, &sp8); + HuSprGrpMemberSet(pauseSprGrp, 2, sp8); + HuSprZRotSet(pauseSprGrp, 2, -30.0f); + HuSprPosSet(pauseSprGrp, 2, 87.0f, 245.0f); + HuSprAttrSet(pauseSprGrp, 2, 8); + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + HuSprAttrSet(pauseSprGrp, 2, 4); + } + if (GWPartyGet() == 1) { + if (GWTeamGet()) { + HuSprBankSet(pauseSprGrp, 2, 2); + } else { + HuSprBankSet(pauseSprGrp, 2, 0); + } + } else { + HuSprBankSet(pauseSprGrp, 2, 1); + } + for (i = 0; i < 4; i++) { + BoardSpriteCreate(0x80006, 0x320, 0, &sp8); + HuSprGrpMemberSet(pauseSprGrp, i + 3, sp8); + HuSprPosSet(pauseSprGrp, i + 3, turnDigitPosTbl[i], 301.0f); + HuSprAttrSet(pauseSprGrp, i + 3, 8); + HuSprAttrSet(pauseSprGrp, i + 3, 1); + } + padConfigSprGrp = HuSprGrpCreate(0xD); + HuSprGrpPosSet(padConfigSprGrp, 0.0f, 0.0f); + for (i = 0; i < 4; i++) { + BoardSpriteCreate(0x80000, 0x38E, 0, &sp8); + HuSprGrpMemberSet(padConfigSprGrp, i, sp8); + HuSprAttrSet(padConfigSprGrp, i, 8); + HuSprAttrSet(padConfigSprGrp, i, 1); + BoardSpriteCreate(0x80001, 0x2BC, 0, &sp8); + HuSprGrpMemberSet(padConfigSprGrp, i + 4, sp8); + HuSprAttrSet(padConfigSprGrp, i + 4, 8); + HuSprAttrSet(padConfigSprGrp, i + 4, 1); + BoardSpriteCreate(0x80002, 0x320, 0, &sp8); + HuSprGrpMemberSet(padConfigSprGrp, i + 8, sp8); + HuSprAttrSet(padConfigSprGrp, i + 8, 8); + HuSprAttrSet(padConfigSprGrp, i + 8, 1); + } + BoardSpriteCreate(0x80003, 0x3E8, 0, &sp8); + HuSprGrpMemberSet(padConfigSprGrp, 0xC, sp8); + HuSprAttrSet(padConfigSprGrp, 0xC, 4); + HuSprDrawNoSet(padConfigSprGrp, 0xC, 0x40); + CreatePadConfigSprite(); + ShowPadConfigSprite(0); + hostOldLayer = BoardModelLayerGet(hostMdl); + BoardModelLayerSet(hostMdl, 6); + sp24.x = 68.0f; + if (GWBoardGet() == 3) { + sp24.y = 464.0f; + } else { + sp24.y = 434.0f; + } + sp24.z = 1100.0f; + Hu3D2Dto3D(&sp24, 1, &sp18); + RotateBox(0.0f, 15.0f, sp30); + BoardModelMtxSet(hostMdl, &sp30); + BoardModelPosSetV(hostMdl, &sp18); + BoardModelVisibilitySet(hostMdl, 0); + BoardModelRotSet(hostMdl, 0.0f, 0.0f, 0.0f); + for (i = 0; i < 8; i++) { + boxModelID[i] = BoardModelCreate(boxMdlTbl[i], NULL, 0); + sp24.x = boxPosTbl[i][0]; + sp24.y = boxPosTbl[i][1]; + sp24.z = 700.0f; + Hu3D2Dto3D(&sp24, 1, &sp18); + temp_f30 = 0.5f; + BoardModelPosSetV(boxModelID[i], &sp18); + BoardModelLayerSet(boxModelID[i], 6); + BoardModelScaleSet(boxModelID[i], temp_f30, temp_f30, temp_f30); + switch (i) { + case 0: + case 7: + var_r28 = 0; + var_f31 = 0.0f; + break; + case 1: + var_r28 = GWMGExplainGet(); + var_f31 = (var_r28 != 0) ? 0.0f : -90.0f; + break; + case 2: + var_r28 = GWMGShowComGet(); + var_f31 = (var_r28 != 0) ? 0.0f : -90.0f; + break; + case 3: + var_r28 = PauseExitInlineFunc01(); + switch (var_r28) { + case 1: + var_r28 = 0; + var_f31 = 90.0f; + break; + case 0: + var_r28 = 1; + var_f31 = 0.0f; + break; + case 2: + var_r28 = 2; + var_f31 = -90.0f; + break; + } + break; + case 4: + var_r28 = GWRumbleGet(); + var_f31 = (var_r28 != 0) ? 0.0f : -90.0f; + break; + case 5: + var_r28 = PauseExitInlineFunc02(); + switch (var_r28) { + case 2: + var_r28 = 0; + var_f31 = 90.0f; + break; + case 1: + var_r28 = 1; + var_f31 = 0.0f; + break; + case 0: + var_r28 = 2; + var_f31 = -90.0f; + break; + } + break; + case 6: + if (temp_r29->unk00_field4 != 0) { + GWSystem.save_mode = 1; + } + var_r28 = PauseExitInlineFunc03(); + switch (var_r28) { + case 1: + var_r28 = 0; + var_f31 = 90.0f; + break; + case 0: + var_r28 = 1; + var_f31 = 0.0f; + break; + case 2: + var_r28 = 2; + var_f31 = -90.0f; + break; + } + break; + } + boxState[i] = var_r28; + boxRot[i] = var_f31; + RotateBox(3.5f, var_f31, sp30); + BoardModelMtxSet(boxModelID[i], &sp30); + BoardModelRotSet(boxModelID[i], 0.0f, 0.0f, 0.0f); + } + SetBoxVisible(0); +} + +static void DeletePauseScreen(void) { + ConfigWork *temp_r30; + Mtx sp8; + s32 i; + + if (configObj) { + temp_r30 = OM_GET_WORK_PTR(configObj, ConfigWork); + temp_r30->unk00_field0 = 1; + } + for (i = 0; i < 8; i++) { + BoardModelKill(boxModelID[i]); + boxModelID[i] = -1; + } + if (pauseSprGrp != -1) { + HuSprGrpKill(pauseSprGrp); + pauseSprGrp = -1; + } + if (padConfigSprGrp != -1) { + HuSprGrpKill(padConfigSprGrp); + padConfigSprGrp = -1; + } + if (pauseCursorPos != -1) { + HuSprGrpKill(pauseCursorPos); + pauseCursorPos = -1; + } + PSMTXIdentity(sp8); + BoardModelLayerSet(hostMdl, hostOldLayer); + BoardModelVisibilitySet(hostMdl, 1); + BoardModelMtxSet(hostMdl, &sp8); + BoardStarHostSet(hostMdl); + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + BoardModelVisibilitySet(hostMdl, 0); + } +} + +static void SetBoxVisible(s32 arg0) { + s32 i; + + for (i = 0; i < 8; i++) { + BoardModelVisibilitySet(boxModelID[i], arg0); + } +} + +static void PauseConfigObjFunc(omObjData *arg0) { + ConfigWork *temp_r31; + s16 temp_r28; + s32 var_r29; + s32 var_r27; + s32 var_r26; + + temp_r31 = OM_GET_WORK_PTR(arg0, ConfigWork); + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + configObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (mainScreenF == 0) { + if (temp_r31->unk06 != 0) { + temp_r31->unk06--; + return; + } + cursorPos = temp_r31->unk02 + temp_r31->unk03 * 4; + temp_r28 = cursorPos; + if (temp_r31->unk00_field1 != 0) { + switch (cursorPos) { + case 0: + if (UpdatePadConfig(arg0, temp_r31) != 0) { + UpdatePauseText(cursorPos); + } + break; + case 1: + if (UpdatePauseBox(arg0, temp_r31, 1) != 0) { + var_r27 = boxState[1]; + GWSystem.explain_mg = var_r27; + } + UpdatePauseText(cursorPos); + break; + case 2: + if (UpdatePauseBox(arg0, temp_r31, 2) != 0) { + var_r26 = boxState[2]; + GWSystem.show_com_mg = var_r26; + } + UpdatePauseText(cursorPos); + break; + case 3: + if (UpdatePauseBoxExt(arg0, temp_r31, 3) != 0) { + switch (boxState[3]) { + case 0: + GWSystem.mg_list = 1; + break; + case 1: + GWSystem.mg_list = 0; + break; + case 2: + GWSystem.mg_list = 2; + break; + } + } + UpdatePauseText(cursorPos); + break; + case 4: + if (UpdatePauseBox(arg0, temp_r31, 4) != 0) { + var_r29 = boxState[4]; + GWGameStat.rumble = var_r29; + if (var_r29 == 0) { + HuPadRumbleAllStop(); + } + } + UpdatePauseText(cursorPos); + break; + case 5: + if (UpdatePauseBoxExt(arg0, temp_r31, 5) != 0) { + switch (boxState[5]) { + case 0: + GWSystem.mess_speed = 2; + GWSystem.mess_delay = 0x30; + break; + case 1: + GWSystem.mess_speed = 1; + GWSystem.mess_delay = 0x20; + break; + case 2: + GWSystem.mess_speed = 0; + GWSystem.mess_delay = 0x10; + break; + } + } + UpdatePauseText(cursorPos); + break; + case 6: + if (temp_r31->unk00_field4 != 0) { + temp_r31->unk00_field1 = 0; + break; + } + if (UpdatePauseBoxExt(arg0, temp_r31, 6) != 0) { + switch (boxState[6]) { + case 0: + GWSystem.save_mode = 1; + break; + case 1: + GWSystem.save_mode = 0; + break; + case 2: + GWSystem.save_mode = 2; + break; + } + } + UpdatePauseText(cursorPos); + break; + case 7: + InitPauseQuit(arg0, temp_r31); + break; + } + } else { + cursorPos = ExecPauseConfig(arg0, temp_r31); + if (temp_r28 != cursorPos) { + arg0->trans.x = -40.0f + boxPosTbl[cursorPos][0]; + arg0->trans.y = -32.0f + boxPosTbl[cursorPos][1]; + } + UpdatePauseText(cursorPos); + HuSprPosSet(pauseCursorPos, 0, arg0->trans.x, arg0->trans.y); + } + } +} + +static void UpdatePauseText(s32 arg0) { + s32 var_r28; + s32 j; + s32 i; + + switch (arg0) { + case 0: + HuWinMesSet(settingsWin, 0x10001C); + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + if (i == GWPlayer[j].port) { + if (GWPlayer[j].com) { + var_r28 = 0x10001E; + } else { + var_r28 = 0x10001D; + } + HuWinInsertMesSet(settingsWin, var_r28, i); + break; + } + } + } + break; + case 1: + if (boxState[arg0] != 0) { + HuWinMesSet(settingsWin, 0x100021); + } else { + HuWinMesSet(settingsWin, 0x100022); + } + break; + case 2: + if (boxState[arg0] != 0) { + HuWinMesSet(settingsWin, 0x100023); + } else { + HuWinMesSet(settingsWin, 0x100024); + } + break; + case 3: + switch (boxState[arg0]) { + case 0: + HuWinMesSet(settingsWin, 0x100026); + break; + case 1: + HuWinMesSet(settingsWin, 0x100025); + break; + case 2: + HuWinMesSet(settingsWin, 0x100027); + break; + } + break; + case 4: + if (boxState[arg0] != 0) { + HuWinMesSet(settingsWin, 0x100028); + } else { + HuWinMesSet(settingsWin, 0x100029); + } + break; + case 5: + switch (boxState[arg0]) { + case 0: + HuWinMesSet(settingsWin, 0x10002C); + break; + case 1: + HuWinMesSet(settingsWin, 0x10002B); + break; + case 2: + HuWinMesSet(settingsWin, 0x10002A); + break; + } + break; + case 6: + switch (boxState[arg0]) { + case 0: + HuWinMesSet(settingsWin, 0x10002F); + break; + case 1: + HuWinMesSet(settingsWin, 0x10002D); + break; + case 2: + HuWinMesSet(settingsWin, 0x10002E); + break; + } + break; + case 7: + HuWinMesSet(settingsWin, 0x100030); + break; + } +} + +static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1) { + float var_f31; + + switch (arg1->unk01) { + case 0: + SetBoxVisible(0); + quitProcess = HuPrcChildCreate(PauseQuitProcess, 0x2001, 0x3800, 0, boardMainProc); + HuPrcSetStat(quitProcess, 0xC); + HuPrcDestructorSet2(quitProcess, DeletePauseQuit); + arg1->unk01 = 1; + arg1->unk06 = 0xA; + HuSprAttrSet(pauseCursorPos, 0, 4); + HuSprAttrSet(pauseCursorPos, 1, 4); + break; + case 1: + if (quitWin != -1 && HuWinStatGet(quitWin) == 3) { + if (HuWinChoiceNowGet(quitWin) != 0) { + HuWinMesSet(settingsWin, 0x100033); + } else { + HuWinMesSet(settingsWin, 0x100032); + } + } + if (!quitProcess) { + arg1->unk01 = 2; + if (pauseQuitF != 0) { + arg1->unk00_field0 = 1; + break; + } + } + break; + case 2: + arg1->unk00_field1 = 0; + arg1->unk01 = 0; + arg1->unk04 = 0; + arg1->unk05 = 0; + arg1->unk06 = 0; + SetBoxVisible(1); + var_f31 = 0.5f; + BoardModelScaleSet(boxModelID[7], var_f31, var_f31, var_f31); + HuSprAttrReset(pauseCursorPos, 0, 4); + if (GWPartyGet() == 0) { + HuSprAttrReset(pauseCursorPos, 1, 4); + } + break; + } +} + +static void PauseQuitProcess(void) { + WindowData *temp_r31; + float sp10[2]; + float sp8[2]; + + HuWinMesMaxSizeGet(1, sp8, 0x100031); + sp10[0] = -10000.0f; + sp10[1] = 140.0f; + quitWin = HuWinExCreate(sp10[0], sp10[1], sp8[0], sp8[1], -1); + temp_r31 = &winData[quitWin]; + temp_r31->active_pad = (1 << pausePad); + HuWinExAnimIn(quitWin); + HuWinMesSpeedSet(quitWin, 0); + HuWinMesSet(quitWin, 0x100031); + HuWinMesWait(quitWin); + if (HuWinChoiceGet(quitWin, 0) == 1) { + HuPrcSleep(0x3C); + pauseQuitF = 1; + _SetFlag(0x1001B); + } + HuPrcEnd(); +} + +static void DeletePauseQuit(void) { + if (quitWin != -1) { + HuWinExCleanup(quitWin); + quitWin = -1; + } + HuDataDirClose(0x80000); + quitProcess = NULL; +} + +static s32 UpdatePadConfig(omObjData *arg0, ConfigWork *arg1) { + switch (arg1->unk01) { + case 0: + CreatePadConfig(arg0, arg1); + break; + case 1: + ScrollInPadConfig(arg0, arg1); + break; + case 2: + CursorMovePadConfig(arg0, arg1); + break; + case 3: + ChangeDiffPadConfig(arg0, arg1); + break; + case 4: + ScrollOutPadConfig(arg0, arg1); + break; + } + if (arg1->unk00_field1 != 0) { + return 0; + } else { + return 1; + } +} + +static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1) { + Vec sp14; + Vec sp8; + s32 i; + + HuSprAttrSet(pauseCursorPos, 0, 4); + for (i = 0; i < 8; i++) { + if (i != 0) { + BoardModelVisibilitySet(boxModelID[i], 0); + } + } + arg0->rot.x = 576.0f; + arg0->rot.y = 112.0f; + arg0->rot.z = (32.0f - arg0->rot.x) / 20.0f; + arg1->unk07 = 0x14; + ShowPadConfigSprite(1); + HuSprGrpPosSet(padConfigSprGrp, arg0->rot.x, arg0->rot.y); + arg1->unk04 = 0; + arg1->unk05 = 0; + sp14.x = padConfigPosTbl[arg1->unk04][0]; + sp14.y = padConfigPosTbl[arg1->unk04][1]; + HuSprPosSet(pauseCursorPos, 0, sp14.x, sp14.y); + HuSprZRotSet(pauseCursorPos, 0, 0.0f); + padBoxPos.x = boxPosTbl[0][0]; + padBoxPos.y = boxPosTbl[0][1]; + padBoxPos.z = 700.0f; + sp14.x = 96.0f; + sp14.y = 176.0f; + sp14.z = padBoxPos.z; + PSVECSubtract(&sp14, &padBoxPos, &sp8); + arg0->scale.x = sp8.x / 20.0f; + arg0->scale.y = sp8.y / 20.0f; + arg1->unk01 = 1; +} + +static void ScrollInPadConfig(omObjData *arg0, ConfigWork *arg1) { + Vec sp8; + s32 i; + + if (arg1->unk07 == 0) { + HuSprAttrReset(pauseCursorPos, 0, 4); + if (arg1->unk00_field2 != 0) { + for (i = 0; i < 8; i++) { + if (i != 0) { + BoardModelVisibilitySet(boxModelID[i], 1); + } + } + arg1->unk00_field1 = 0; + arg1->unk00_field2 = 0; + arg1->unk04 = 0; + arg1->unk05 = 0; + arg1->unk01 = 0; + } else { + arg1->unk01 = 2; + } + return; + } + arg0->rot.x += arg0->rot.z; + HuSprGrpPosSet(padConfigSprGrp, arg0->rot.x, arg0->rot.y); + padBoxPos.x += arg0->scale.x; + padBoxPos.y += arg0->scale.y; + Hu3D2Dto3D(&padBoxPos, 1, &sp8); + BoardModelPosSetV(boxModelID[0], &sp8); + arg1->unk07--; +} + +static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) { + float sp8[4]; + s32 temp_r29; + u32 temp_r30; + + HuWinMesSet(settingsWin, 0x10001F); + temp_r30 = HuPadDStkRep[pausePad] | HuPadBtnDown[pausePad]; + temp_r29 = CheckPort(arg1->unk04); + if (temp_r30 == 0x100) { + arg1->unk01 = 3; + if (GWPlayer[temp_r29].com) { + arg1->unk00_field3 = GWPlayer[temp_r29].diff + 1; + arg1->unk05 = GWPlayer[temp_r29].diff + 1; + } else { + arg1->unk00_field3 = 0; + arg1->unk05 = 0; + } + HuSprBankSet(padConfigSprGrp, arg1->unk04 + 8, 1); + HuAudFXPlay(2); + } else if (temp_r30 == 0x200) { + HuAudFXPlay(3); + arg1->unk01 = 4; + } else { + if (temp_r30 == 1) { + arg1->unk04--; + } + if (temp_r30 == 2) { + arg1->unk04++; + } + if (arg1->unk04 < 0) { + arg1->unk04 = 0; + } else if (arg1->unk04 >= 4) { + arg1->unk04 = 3; + } else if (temp_r30 == 1 || temp_r30 == 2) { + HuAudFXPlay(0); + arg1->unk06 = 4; + } + sp8[0] = padConfigPosTbl[arg1->unk04][0]; + sp8[1] = padConfigPosTbl[arg1->unk04][1]; + HuSprPosSet(pauseCursorPos, 0, sp8[0], sp8[1]); + } +} + +static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) { + s32 temp_r29; + s32 var_r28; + s32 var_r26; + s32 var_r27; + u32 var_r30; + + var_r30 = 0; + if (HuPadStkX[pausePad] < -0x14) { + var_r30 |= 1; + } else if (HuPadStkX[pausePad] > 0x14) { + var_r30 |= 2; + } + temp_r29 = CheckPort(arg1->unk04); + if (GWGameStat.field10E_bit4 != 0) { + var_r27 = 4; + } else { + var_r27 = 3; + } + HuWinMesSet(settingsWin, 0x100020); + if (var_r30 != 0) { + if (arg1->unk0C != 0 && arg1->unk0C == var_r30) { + if (arg1->unk09++ < 0xA) { + return; + } + } else { + if (arg1->unk09++ < 2) { + return; + } + arg1->unk0C = var_r30; + } + } else { + arg1->unk0C = 0; + } + arg1->unk09 = 0; + var_r28 = 0; + if (var_r30 == 1) { + var_r28 = -1; + } + if (var_r30 == 2) { + var_r28 = 1; + } + if (var_r28 != 0) { + HuAudFXPlay(0); + arg1->unk06 = 4; + } else { + if (HuPadBtnDown[pausePad] == 0x100) { + arg1->unk01 = 2; + if (arg1->unk05 != 0) { + GWPlayer[temp_r29].com = 1; + GWPlayerCfg[temp_r29].iscom = 1; + GWPlayer[temp_r29].diff = arg1->unk05 - 1; + GWPlayerCfg[temp_r29].diff = arg1->unk05 - 1; + } else { + GWPlayer[temp_r29].com = 0; + GWPlayerCfg[temp_r29].iscom = 0; + } + HuSprBankSet(padConfigSprGrp, arg1->unk04 + 8, 0); + HuAudFXPlay(2); + arg1->unk0C = 0x100; + } + if (HuPadBtnDown[pausePad] == 0x200) { + arg1->unk01 = 2; + arg1->unk05 = arg1->unk00_field3; + HuSprBankSet(padConfigSprGrp, arg1->unk04 + 8, 0); + HuAudFXPlay(3); + arg1->unk0C = 0x200; + } + arg1->unk09 = 0; + } + arg1->unk05 += var_r28; + if (GWGameStat.field10E_bit4 == 0 && arg1->unk05 == 4) { + arg1->unk05 += var_r28; + } + if (arg1->unk05 > var_r27) { + arg1->unk05 = 0; + } else if (arg1->unk05 < 0) { + arg1->unk05 = var_r27; + } + if (arg1->unk05 != 0) { + var_r26 = arg1->unk05 + 3; + } else { + var_r26 = arg1->unk04; + } + HuSprBankSet(padConfigSprGrp, arg1->unk04 + 4, var_r26); +} + +static void ScrollOutPadConfig(omObjData *arg0, ConfigWork *arg1) { + Vec sp14; + Vec sp8; + + HuSprAttrSet(pauseCursorPos, 0, 4); + arg0->rot.x = 32.0f; + arg0->rot.y = 112.0f; + arg0->rot.z = (608.0f - arg0->rot.x) / 20.0f; + arg1->unk07 = 0x14; + ShowPadConfigSprite(1); + HuSprGrpPosSet(padConfigSprGrp, arg0->rot.x, arg0->rot.y); + sp14.x = -40.0f + boxPosTbl[0][0]; + sp14.y = -32.0f + boxPosTbl[0][1]; + HuSprPosSet(pauseCursorPos, 0, sp14.x, sp14.y); + HuSprZRotSet(pauseCursorPos, 0, 45.0f); + sp14.x = boxPosTbl[0][0]; + sp14.y = boxPosTbl[0][1]; + sp14.z = 700.0f; + PSVECSubtract(&sp14, &padBoxPos, &sp8); + arg0->scale.x = sp8.x / 20.0f; + arg0->scale.y = sp8.y / 20.0f; + arg1->unk01 = 1; + arg1->unk00_field2 = 1; +} + +static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) { + float var_f31; + float var_f30; + float var_f29; + s32 temp_r27; + u32 temp_r28; + Mtx sp8; + + switch (arg1->unk01) { + case 0: + arg1->unk08 = arg1->unk04 = boxState[arg2]; + arg0->rot.x = boxRot[arg2]; + arg0->rot.y = 0.0f; + arg1->unk01 = 1; + var_f31 = 0.7f; + BoardModelScaleSet(boxModelID[arg2], var_f31, var_f31, var_f31); + return 0; + case 1: + temp_r28 = HuPadDStk[pausePad] | HuPadBtnDown[pausePad]; + temp_r27 = arg1->unk04; + if (temp_r28 == 1) { + arg1->unk04++; + } + if (temp_r28 == 2) { + arg1->unk04--; + } + if (arg1->unk04 < 0) { + arg1->unk04 = 0; + } else if (arg1->unk04 > 1) { + arg1->unk04 = 1; + } else if (temp_r28 == 1 || temp_r28 == 2) { + HuAudFXPlay(0); + } + if (temp_r28 == 0x100) { + arg1->unk01 = 3; + HuAudFXPlay(2); + } else if (temp_r28 == 0x200) { + arg1->unk01 = 4; + HuAudFXPlay(3); + } else if (temp_r27 != arg1->unk04) { + if (arg1->unk04 != 0) { + var_f30 = 0.0f; + } else { + var_f30 = -90.0f; + } + var_f29 = arg0->rot.x; + arg0->rot.y = (var_f30 - var_f29) / 30.0f; + arg1->unk07 = 0x1E; + arg1->unk01 = 2; + } + break; + case 2: + if (arg1->unk07 != 0) { + arg0->rot.x += arg0->rot.y; + arg1->unk07--; + } else { + arg1->unk01 = 1; + } + break; + case 3: + boxState[arg2] = arg1->unk04; + boxRot[arg2] = arg0->rot.x; + arg1->unk08 = -1; + arg1->unk01 = 5; + arg1->unk0A = 0; + break; + case 4: + boxState[arg2] = arg1->unk08; + arg1->unk04 = boxState[arg2]; + arg0->rot.x = boxRot[arg2]; + arg1->unk01 = 5; + arg1->unk0A = 0; + break; + case 5: + var_f31 = 0.5f; + BoardModelScaleSet(boxModelID[arg2], var_f31, var_f31, var_f31); + arg1->unk00_field1 = 0; + arg1->unk04 = 0; + arg1->unk05 = 0; + arg1->unk01 = 0; + return 1; + } + RotateBox(3.5f, arg0->rot.x, sp8); + BoardModelMtxSet(boxModelID[arg2], &sp8); + boxState[arg2] = arg1->unk04; + return 0; +} + +static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) { + float var_f31; + float var_f30; + float var_f29; + s32 temp_r26; + s32 var_r27; + u32 temp_r28; + Mtx sp8; + + if (arg2 == 3 && GWGameStat.field10E_bit5 == 0) { + var_r27 = 1; + } else { + var_r27 = 2; + } + switch (arg1->unk01) { + case 0: + arg1->unk08 = arg1->unk04 = boxState[arg2]; + arg0->rot.x = boxRot[arg2]; + arg0->rot.y = 0.0f; + arg1->unk01 = 1; + var_f31 = 0.7f; + BoardModelScaleSet(boxModelID[arg2], var_f31, var_f31, var_f31); + return 0; + case 1: + temp_r28 = HuPadDStk[pausePad] | HuPadBtnDown[pausePad]; + temp_r26 = arg1->unk04; + if (temp_r28 == 1) { + arg1->unk04--; + } + if (temp_r28 == 2) { + arg1->unk04++; + } + if (arg1->unk04 < 0) { + arg1->unk04 = 0; + } else if (arg1->unk04 > var_r27) { + arg1->unk04 = var_r27; + } else if (temp_r28 == 1 || temp_r28 == 2) { + HuAudFXPlay(0); + } + if (temp_r28 == 0x100) { + arg1->unk01 = 3; + HuAudFXPlay(2); + } else if (temp_r28 == 0x200) { + arg1->unk01 = 4; + HuAudFXPlay(3); + } else if (temp_r26 != arg1->unk04) { + switch (arg1->unk04) { + case 0: + var_f30 = 90.0f; + break; + case 1: + var_f30 = 0.0f; + break; + case 2: + var_f30 = -90.0f; + break; + } + var_f29 = arg0->rot.x; + arg0->rot.y = (var_f30 - var_f29) / 30.0f; + arg1->unk07 = 0x1E; + arg1->unk01 = 2; + } + break; + case 2: + if (arg1->unk07 != 0) { + arg0->rot.x += arg0->rot.y; + arg1->unk07--; + } else { + arg1->unk01 = 1; + } + break; + case 3: + boxState[arg2] = arg1->unk04; + boxRot[arg2] = arg0->rot.x; + arg1->unk01 = 5; + arg1->unk0A = 0; + arg1->unk08 = -1; + break; + case 4: + boxState[arg2] = arg1->unk08; + arg1->unk04 = boxState[arg2]; + arg0->rot.x = boxRot[arg2]; + arg1->unk01 = 5; + arg1->unk0A = 0; + break; + case 5: + var_f31 = 0.5f; + BoardModelScaleSet(boxModelID[arg2], var_f31, var_f31, var_f31); + arg1->unk00_field1 = 0; + arg1->unk04 = 0; + arg1->unk05 = 0; + arg1->unk01 = 0; + return 1; + } + RotateBox(3.5f, arg0->rot.x, sp8); + BoardModelMtxSet(boxModelID[arg2], &sp8); + boxState[arg2] = arg1->unk04; + return 0; +} + +static s32 ExecPauseConfig(omObjData *arg0, ConfigWork *arg1) { + s32 var_r27; + s32 var_r26; + s32 var_r29; + s32 var_r28; + u32 temp_r30; + + temp_r30 = 0; + temp_r30 = HuPadBtnDown[pausePad]; + temp_r30 |= HuPadDStkRep[pausePad]; + var_r29 = var_r28 = 0; + if (temp_r30 == 8) { + var_r28 = -1; + } + if (temp_r30 == 4) { + var_r28 = 1; + } + if (temp_r30 == 1) { + var_r29 = -1; + } + if (temp_r30 == 2) { + var_r29 = 1; + } + arg1->unk02 += var_r29; + arg1->unk03 += var_r28; + if (arg1->unk03 < 0) { + arg1->unk03 = 0; + } else if (arg1->unk03 >= 2) { + arg1->unk03 = 1; + } else if (var_r28 != 0) { + HuAudFXPlay(0); + arg1->unk06 = 4; + } + if (arg1->unk02 < 0) { + arg1->unk02 = 0; + } else if (arg1->unk02 >= 4) { + arg1->unk02 = 3; + } else if (var_r29 != 0) { + HuAudFXPlay(0); + arg1->unk06 = 4; + } + if (temp_r30 == 0x100) { + var_r27 = 1; + var_r26 = 0; + switch (arg1->unk02 + arg1->unk03 * 4) { + case 6: + if (arg1->unk00_field4 != 0) { + var_r27 = 0; + var_r26 = 1; + } + break; + case 0: + if (GWPartyGet() == 0) { + var_r27 = 0; + var_r26 = 1; + } + break; + } + if (var_r26 != 0) { + HuAudFXPlay(4); + } else if (var_r27 != 0) { + HuAudFXPlay(2); + arg1->unk00_field1 = 1; + } + } + if (temp_r30 == 0x200) { + HuAudFXPlay(0x1C); + arg1->unk00_field0 = 1; + } + return arg1->unk02 + arg1->unk03 * 4; +} + +static void CreatePauseControlWin(void) { + float sp8[2]; + float var_f31; + float var_f30; + u32 var_r31; + + var_r31 = 0x100035; + HuWinMesMaxSizeGet(1, sp8, var_r31); + var_f31 = 152.0f; + var_f30 = 280.0f; + settingsControlWin = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 0); + HuWinBGTPLvlSet(settingsControlWin, 0.0f); + HuWinMesSpeedSet(settingsControlWin, 0); + HuWinMesSet(settingsControlWin, var_r31); + HuWinDispOff(settingsControlWin); + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + var_r31 = 0x100049; + } else { + var_r31 = 0x100034; + } + HuWinMesMaxSizeGet(1, sp8, var_r31); + var_f31 = -10000.0f; + var_f30 = 376.0f; + controlWin = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 0); + HuWinBGTPLvlSet(controlWin, 0.0f); + HuWinMesSpeedSet(controlWin, 0); + HuWinMesSet(controlWin, var_r31); + HuWinDispOff(controlWin); + var_f31 = 128.0f; + var_f30 = 312.0f; + sp8[0] = 432.0f; + sp8[1] = 128.0f; + settingsWin = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 0); + HuWinDispOff(settingsWin); + HuWinMesSpeedSet(settingsWin, 0); + var_f31 = 640.0f; + var_f30 = 112.0f; + sp8[0] = 504.0f; + sp8[1] = 128.0f; +} + +static void DeletePauseControlWin(void) { + if (settingsControlWin != -1) { + HuWinKill(settingsControlWin); + settingsControlWin = -1; + } + if (controlWin != -1) { + HuWinKill(controlWin); + controlWin = -1; + } + if (settingsWin != -1) { + HuWinKill(settingsWin); + settingsWin = -1; + } +} + +static s32 WaitPauseInput(void) { + s32 var_r28; + s32 var_r31; + u32 temp_r30; + + mainScreenF = 1; + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + var_r28 = 1; + } else { + var_r28 = 0; + } + HuWinDispOn(controlWin); + SetBoxVisible(0); + HuSprAttrReset(pauseSprGrp, 0, 4); + HuSprAttrSet(pauseCursorPos, 0, 4); + PauseCreateNumber(0, GWSystem.turn); + PauseCreateNumber(1, GWSystem.max_turn); + HuPrcSleep(4); + var_r31 = 0; + while (1) { + temp_r30 = HuPadBtnDown[pausePad]; + if (temp_r30 == 0x1000 || temp_r30 == 0x200) { + var_r31 = 0; + HuAudFXPlay(0x1C); + break; + } else if (var_r28 == 0) { + if (temp_r30 == 0x100) { + var_r31 = 1; + HuAudFXPlay(1); + break; + } + } else if (temp_r30 == 0x10) { + pauseQuitF = 1; + var_r31 = 2; + mgQuitExtraF = 1; + HuAudFXPlay(0x1C); + break; + } + HuPrcVSleep(); + } + HuWinDispOff(controlWin); + if (pauseSprGrp != -1) { + HuSprGrpKill(pauseSprGrp); + pauseSprGrp = -1; + } + HuPrcSleep(2); + return var_r31; +} + +static void ShowPauseConfig(void) { + float var_f31; + float var_f30; + + mainScreenF = 0; + HuWinDispOn(settingsControlWin); + HuWinDispOn(settingsWin); + SetBoxVisible(1); + HuSprAttrReset(pauseCursorPos, 0, 4); + BoardModelVisibilitySet(hostMdl, 1); + if (GWPartyGet() == 0) { + var_f31 = boxPosTbl[0][0]; + var_f30 = boxPosTbl[0][1]; + HuSprPosSet(pauseCursorPos, 1, var_f31, var_f30); + HuSprAttrReset(pauseCursorPos, 1, 4); + } else { + HuSprAttrSet(pauseCursorPos, 1, 4); + } + while (configObj) { + HuPrcVSleep(); + } +} + +static void CreatePadConfigSprite(void) { + float temp_f31; + float temp_f30; + s32 var_r29; + s32 temp_r28; + s32 temp_r27; + s32 temp_r26; + s32 i; + s32 j; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + if (i == GWPlayer[j].port) { + break; + } + } + temp_f31 = i * 0x60 + 0xB2; + temp_f30 = 64.0f; + temp_r28 = GWPlayer[j].character; + temp_r27 = GWPlayer[j].diff; + temp_r26 = GWPlayer[j].com; + HuSprBankSet(padConfigSprGrp, i, temp_r28); + if (temp_r26 != 0) { + var_r29 = temp_r27 + 4; + } else { + var_r29 = i; + } + HuSprBankSet(padConfigSprGrp, i + 4, var_r29); + HuSprPosSet(padConfigSprGrp, i, temp_f31, temp_f30); + HuSprPosSet(padConfigSprGrp, i + 4, temp_f31, temp_f30); + HuSprPosSet(padConfigSprGrp, i + 8, temp_f31, temp_f30); + } + HuSprPosSet(padConfigSprGrp, 0xC, 260.0f, 64.0f); + HuSprGrpPosSet(padConfigSprGrp, 0.0f, 0.0f); +} + +static void ShowPadConfigSprite(s32 arg0) { + s32 temp_r31; + s32 i; + + for (i = 0; i < 4; i++) { + temp_r31 = GWPlayer[i].port; + if (arg0 != 0) { + HuSprAttrReset(padConfigSprGrp, temp_r31, 4); + HuSprAttrReset(padConfigSprGrp, temp_r31 + 4, 4); + HuSprAttrReset(padConfigSprGrp, temp_r31 + 8, 4); + } else { + HuSprAttrSet(padConfigSprGrp, temp_r31, 4); + HuSprAttrSet(padConfigSprGrp, temp_r31 + 4, 4); + HuSprAttrSet(padConfigSprGrp, temp_r31 + 8, 4); + } + } + if (arg0 != 0) { + HuSprAttrReset(padConfigSprGrp, 0xC, 4); + } else { + HuSprAttrSet(padConfigSprGrp, 0xC, 4); + } +} + +static void PauseCreateNumber(s32 arg0, s8 arg1) { + s32 var_r31; + s32 temp_r30; + s32 temp_r29; + + temp_r29 = arg1 % 10; + temp_r30 = arg1 / 10; + if (arg0 == 0) { + var_r31 = 3; + } else { + var_r31 = 5; + } + if (temp_r30 != 0) { + HuSprBankSet(pauseSprGrp, var_r31, temp_r30); + } else { + HuSprAttrSet(pauseSprGrp, var_r31, 4); + } + HuSprBankSet(pauseSprGrp, var_r31 + 1, temp_r29); +} + +BOOL BoardPauseActiveCheck(void) { + return (mainProcess != NULL) ? TRUE : FALSE; +} + +BOOL BoardPauseReqCheck(void) { + s32 temp_r30; + s32 i; + + if (BoardPauseActiveCheck()) { + return FALSE; + } + omSysPauseEnable(0); + if (BoardPauseDisableGet() != 0) { + return FALSE; + } + for (i = 0; i < 4; i++) { + temp_r30 = GWPlayer[i].port; + if (HuPadStatGet(temp_r30) == 0 && (GWPartyGet() != 0 || GWPlayer[i].com == 0) && (HuPadBtnDown[temp_r30] & 0x1000)) { + pausePad = temp_r30; + return TRUE; + } + } + return FALSE; +} + +static s32 CheckPort(s32 arg0) { + s32 i; + + for (i = 0; i < 4; i++) { + if (arg0 == GWPlayer[i].port) { + break; + } + } + return i; +} + +static void RotateBox(float arg0, float arg1, Mtx arg2) { + Vec sp14; + Mtx spB0; + Mtx sp80; + Mtx sp50; + Mtx sp20; + + BoardCameraRotGet(&sp14); + PSMTXRotRad(spB0, 'x', MTXDegToRad(sp14.x)); + PSMTXRotRad(sp80, 'y', MTXDegToRad(sp14.y)); + PSMTXRotRad(sp50, 'x', MTXDegToRad(arg0)); + PSMTXRotRad(sp20, 'y', MTXDegToRad(arg1)); + PSMTXConcat(sp80, spB0, sp80); + PSMTXConcat(sp50, sp20, sp20); + PSMTXConcat(sp80, sp20, arg2); +} diff --git a/src/game/board/roll.c b/src/game/board/roll.c index 56acfdee..3fe6d90b 100755 --- a/src/game/board/roll.c +++ b/src/game/board/roll.c @@ -8,6 +8,7 @@ #include "game/window.h" #include "game/board/main.h" #include "game/board/model.h" +#include "game/board/pause.h" #include "game/board/player.h" #include "game/board/tutorial.h" @@ -39,7 +40,6 @@ typedef struct { } DiceDigitWork; s32 BoardRollResizeCheck(void); -s32 BoardPauseActiveCheck(void); static void RollMain(void); static void DiceCreate(s32 arg0); diff --git a/src/game/window.c b/src/game/window.c index 8602f2fa..30d28f20 100644 --- a/src/game/window.c +++ b/src/game/window.c @@ -1202,7 +1202,7 @@ void HuWinAttrReset(s16 window, u32 attr) { window_ptr->attr &= ~attr; } -u8 HuWinStatGet(s16 window) { +s16 HuWinStatGet(s16 window) { WindowData *window_ptr = &winData[window]; return window_ptr->stat; From 19a7d284498fb6abed894269d323c6ec75f93e92 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Thu, 15 Feb 2024 06:20:24 -0800 Subject: [PATCH 030/106] Matched game/chrman --- config/GMPE01_00/symbols.txt | 49 +- configure.py | 2 +- include/game/chrman.h | 47 + include/game/hsfanim.h | 3 +- include/game/hsfdraw.h | 2 + include/unsplit.h | 15 - src/REL/bootDll/main.c | 1 + src/REL/modeltestDll/main.c | 1 + src/REL/modeltestDll/modeltest00.c | 1 + src/REL/w03Dll/mg_coin.c | 1 + src/game/board/boo.c | 2 +- src/game/board/item.c | 2 +- src/game/board/model.c | 1 + src/game/board/player.c | 4 +- src/game/board/ui.c | 2 +- src/game/chrman.c | 2080 ++++++++++++++++++++++++++++ src/game/objmain.c | 1 + 17 files changed, 2171 insertions(+), 43 deletions(-) create mode 100755 include/game/chrman.h create mode 100755 src/game/chrman.c diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index d2cbf982..695c1325 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5079,10 +5079,14 @@ lbl_80130705 = .data:0x80130705; // type:object size:0x93 lbl_80130798 = .data:0x80130798; // type:object size:0x30 effectDataTbl = .data:0x801307C8; // type:object size:0x60 scope:local charDirTbl = .data:0x80130828; // type:object size:0x60 scope:local -effectParam = .data:0x80130888; // type:object size:0x110 scope:local -lbl_801309A0 = .data:0x801309A0; // type:object size:0x20 -lbl_801309C0 = .data:0x801309C0; // type:object size:0x20 -lbl_801309E0 = .data:0x801309E0; // type:object size:0x10 +effectDustParam = .data:0x80130888; // type:object size:0x38 scope:local +effectDotParam = .data:0x801308C0; // type:object size:0x38 scope:local +effectStarParam = .data:0x801308F8; // type:object size:0x38 scope:local +effectWarnParam = .data:0x80130930; // type:object size:0x38 scope:local +effectSmokeParam = .data:0x80130968; // type:object size:0x38 scope:local +lbl_801309A0 = .data:0x801309A0; // type:object size:0x20 scope:local +lbl_801309C0 = .data:0x801309C0; // type:object size:0x20 scope:local +lbl_801309E0 = .data:0x801309E0; // type:object size:0x10 scope:local jumptable_801309F0 = .data:0x801309F0; // type:object size:0x1E8 scope:local voiceParam = .data:0x80130BD8; // type:object size:0x40 scope:local lbl_80130C18 = .data:0x80130C18; // type:object size:0xE data:string @@ -5122,17 +5126,22 @@ lbl_80130F0E = .data:0x80130F0E; // type:object size:0x12 hookNameTbl = .data:0x80130F20; // type:object size:0xA0 scope:local modelParticleParam = .data:0x80130FC0; // type:object size:0x38 scope:local coinParticleParam = .data:0x80130FF8; // type:object size:0x38 scope:local -lbl_80131030 = .data:0x80131030; // type:object size:0x38 -lbl_80131068 = .data:0x80131068; // type:object size:0x38 +lbl_80131030 = .data:0x80131030; // type:object size:0x38 scope:local +lbl_80131068 = .data:0x80131068; // type:object size:0x38 scope:local lbl_801310A0 = .data:0x801310A0; // type:object size:0x1C -lbl_801310BC = .data:0x801310BC; // type:object size:0x38 -lbl_801310F4 = .data:0x801310F4; // type:object size:0x38 +lbl_801310BC = .data:0x801310BC; // type:object size:0x38 scope:local +lbl_801310F4 = .data:0x801310F4; // type:object size:0x38 scope:local lbl_8013112C = .data:0x8013112C; // type:object size:0x1A data:string -lbl_80131146 = .data:0x80131146; // type:object size:0x12 -lbl_80131158 = .data:0x80131158; // type:object size:0x24 -lbl_8013117C = .data:0x8013117C; // type:object size:0x24 -lbl_801311A0 = .data:0x801311A0; // type:object size:0x24 -lbl_801311C4 = .data:0x801311C4; // type:object size:0x24 +lbl_80131146 = .data:0x80131146; // type:object size:0x12 scope:local +lbl_80131158 = .data:0x80131158; // type:object size:0x12 scope:local +lbl_8013116A = .data:0x8013116A; // type:object size:0x12 scope:local +lbl_8013117C = .data:0x8013117C; // type:object size:0x12 scope:local +lbl_8013118E = .data:0x8013118E; // type:object size:0xE scope:local +lbl_8013119C = .data:0x8013119C; // type:object size:0xE scope:local +lbl_801311AA = .data:0x801311AA; // type:object size:0xE scope:local +lbl_801311B8 = .data:0x801311B8; // type:object size:0xE scope:local +lbl_801311C6 = .data:0x801311C6; // type:object size:0xE scope:local +lbl_801311D4 = .data:0x801311D4; // type:object size:0xE scope:local VolumeTable = .data:0x801311E8; // type:object size:0x100 scope:local lbl_801312E8 = .data:0x801312E8; // type:object size:0x4D lbl_80131335 = .data:0x80131335; // type:object size:0x1B @@ -5540,8 +5549,8 @@ charInstance = .bss:0x80196EC0; // type:object size:0x640 scope:local effectMdl = .bss:0x80197500; // type:object size:0x10 scope:local data:2byte particleData = .bss:0x80197510; // type:object size:0x20 scope:local itemHookProcess = .bss:0x80197530; // type:object size:0x80 scope:local -lbl_801975B0 = .bss:0x801975B0; // type:object size:0x10 -lbl_801975C0 = .bss:0x801975C0; // type:object size:0x90 +lbl_801975B0 = .bss:0x801975B0; // type:object size:0x10 scope:local +lbl_801975C0 = .bss:0x801975C0; // type:object size:0x90 scope:local MapObject = .bss:0x80197650; // type:object size:0x40 MapMT = .bss:0x80197690; // type:object size:0x30 MapMTR = .bss:0x801976C0; // type:object size:0x30 @@ -5834,11 +5843,11 @@ lbl_801D35D8 = .sdata:0x801D35D8; // type:object size:0x8 colorN$400 = .sdata:0x801D35E0; // type:object size:0x4 data:byte colorN$444 = .sdata:0x801D35E4; // type:object size:0x4 data:byte winPrio = .sdata:0x801D35E8; // type:object size:0x8 scope:local data:2byte -lbl_801D35F0 = .sdata:0x801D35F0; // type:object size:0x8 -lbl_801D35F8 = .sdata:0x801D35F8; // type:object size:0x8 -lbl_801D3600 = .sdata:0x801D3600; // type:object size:0x8 -lbl_801D3608 = .sdata:0x801D3608; // type:object size:0x8 -lbl_801D3610 = .sdata:0x801D3610; // type:object size:0x8 +lbl_801D35F0 = .sdata:0x801D35F0; // type:object size:0x8 scope:local +lbl_801D35F8 = .sdata:0x801D35F8; // type:object size:0x8 scope:local +lbl_801D3600 = .sdata:0x801D3600; // type:object size:0x8 scope:local +lbl_801D3608 = .sdata:0x801D3608; // type:object size:0x8 scope:local +lbl_801D3610 = .sdata:0x801D3610; // type:object size:0x8 scope:local lbl_801D3618 = .sdata:0x801D3618; // type:object size:0x1 lbl_801D3619 = .sdata:0x801D3619; // type:object size:0x5 data:string lbl_801D361E = .sdata:0x801D361E; // type:object size:0x5 data:string diff --git a/configure.py b/configure.py index d8223805..a7d06e7f 100644 --- a/configure.py +++ b/configure.py @@ -350,7 +350,7 @@ config.libs = [ Object(Matching, "game/messdata.c"), Object(Matching, "game/card.c"), Object(Matching, "game/armem.c"), - Object(NonMatching, "game/chrman.c"), + Object(Matching, "game/chrman.c"), Object(NonMatching, "game/mapspace.c"), Object(Matching, "game/THPSimple.c"), Object(Matching, "game/THPDraw.c"), diff --git a/include/game/chrman.h b/include/game/chrman.h new file mode 100755 index 00000000..05f5033d --- /dev/null +++ b/include/game/chrman.h @@ -0,0 +1,47 @@ +#ifndef _GAME_CHRMAN_H +#define _GAME_CHRMAN_H + +#include "dolphin.h" + +void CharManInit(void); +void *CharAMemPtrGet(s16 character); +void CharARAMOpen(s16 character); +void CharARAMClose(s16 character); +void CharKill(s16 arg0); +void CharKillAll(void); +s16 CharModelCreate(s16 character, s16 lod); +s16 CharModelMotionCreate(s16 character, s32 arg1); +void CharModelMotionIndexSet(s16 character, s16 arg1, s32 arg2); +void CharModelMotionKill(s16 character, u32 motion); +void CharModelMotionDataClose(s16 character); +void CharModelDataClose(s16 arg0); +void CharModelKill(s16 character); +void CharModelMotionSet(s16 character, s16 motion); +void CharModelTexAnimSet(s16 character); +char **CharModelTexNameGet(s16 arg0, s16 arg1); +char *CharModelHookNameGet(s16 arg0, s16 arg1, s16 arg2); +void CharModelMotionTimeSet(s16 character, float time); +float CharModelMotionTimeGet(s16 character); +float CharModelMotionMaxTimeGet(s16 character); +s32 CharModelMotionEndCheck(s16 character); +s16 CharModelMotionShiftIDGet(s16 character); +void CharModelMotionShiftSet(s16 character, s16 motion, float time, float shift_time, u32 attr); +float CharModelMotionShiftTimeGet(s16 character); +void CharModelMotionSpeedSet(s16 character, float speed); +void CharModelLayerSetAll(s16 arg0); +void CharModelItemHookCreate(s16 character, char *arg1); +void CharModelEffectCreate(s16 arg0, Vec *arg1); +void CharModelCoinEffectCreate(s16 arg0, Vec *arg1); +void fn_8004EC74(s16 character); +void fn_8004EDA4(s16 arg0, Vec *arg1, Vec *arg2); +void fn_8004F058(s16 character); +void fn_8004F13C(s16 arg0, Vec *arg1, Vec *arg2); +void CharModelLayerSetAll2(s16 arg0); +void CharModelVoiceEnableSet(s16 character, s16 motion, s32 flag); +void fn_8004F52C(s16 character, s32 arg1); +void CharModelEffectEnableSet(s16 character, s32 arg1); +s32 CharModelEffectNpcInit(s16 arg0, s16 arg1, s16 arg2, s16 arg3); +s32 CharModelEffectNpcInitSilent(s16 arg0, s16 arg1, s16 arg2); +void CharModelStepTypeSet(s16 character, s32 arg1); + +#endif diff --git a/include/game/hsfanim.h b/include/game/hsfanim.h index e15b822a..9070e984 100644 --- a/include/game/hsfanim.h +++ b/include/game/hsfanim.h @@ -30,7 +30,8 @@ typedef struct particle_data { /* 0x00 */ s16 unk_00; /* 0x02 */ s16 unk_02; /* 0x04 */ float unk_04; - /* 0x08 */ char unk_08[0x18]; + /* 0x08 */ char unk_08[0x14]; + /* 0x1C */ void *unk_1C; /* 0x20 */ s16 unk_20; /* 0x22 */ s16 unk_22; /* 0x24 */ float unk_24; diff --git a/include/game/hsfdraw.h b/include/game/hsfdraw.h index 7ece73ec..76d17f20 100755 --- a/include/game/hsfdraw.h +++ b/include/game/hsfdraw.h @@ -49,6 +49,8 @@ HsfObject *Hu3DObjDuplicate(HsfData *arg0, u32 arg1); void Hu3DModelObjDrawInit(void); void Hu3DModelObjDraw(s16 arg0, char *arg1, Mtx arg2); +extern Vec PGMaxPos; +extern Vec PGMinPos; extern u32 totalPolyCnt; extern u32 totalPolyCnted; extern u32 totalMatCnt; diff --git a/include/unsplit.h b/include/unsplit.h index e73ffa56..bfcdf1f3 100644 --- a/include/unsplit.h +++ b/include/unsplit.h @@ -8,20 +8,5 @@ void MGSeqKillAll(void); void MGSeqPracticeInit(void); void CharMotionClose(s16 character); void CharModelClose(s16 character); -void CharModelMotionDataClose(s16 character); -void CharModelKill(s16 character); -s16 CharModelCreate(s16 character, s16 lod); -s16 CharModelMotionCreate(s16 character, s32 data_num); -void CharModelMotionSet(s16 character, s16 motion); -float CharModelMotionMaxTimeGet(s16 character); -float CharModelMotionTimeGet(s16 character); -void CharModelMotionShiftSet(s16 model, s16 motion, float time, float shift_time, u32 attr); -void CharModelMotionTimeSet(s16 character, float time); -void CharModelMotionSpeedSet(s16 character, float speed); -void CharModelMotionKill(s16 character, s32 motion); -void CharModelVoiceEnableSet(s16 character, s16 motion, s32 flag); -void CharModelCoinEffectCreate(s16, Vec *); - -s32 CharModelMotionEndCheck(s16 character); #endif diff --git a/src/REL/bootDll/main.c b/src/REL/bootDll/main.c index 42f9acbb..4741b7ba 100644 --- a/src/REL/bootDll/main.c +++ b/src/REL/bootDll/main.c @@ -1,5 +1,6 @@ #include "game/gamework_data.h" #include "game/process.h" +#include "game/chrman.h" #include "game/data.h" #include "game/sprite.h" #include "game/object.h" diff --git a/src/REL/modeltestDll/main.c b/src/REL/modeltestDll/main.c index 93f3601a..6bad041c 100644 --- a/src/REL/modeltestDll/main.c +++ b/src/REL/modeltestDll/main.c @@ -1,5 +1,6 @@ #include "math.h" #include "unsplit.h" +#include "game/chrman.h" #include "game/object.h" #include "game/wipe.h" #include "game/pad.h" diff --git a/src/REL/modeltestDll/modeltest00.c b/src/REL/modeltestDll/modeltest00.c index 9d20fa74..c45e1f1e 100644 --- a/src/REL/modeltestDll/modeltest00.c +++ b/src/REL/modeltestDll/modeltest00.c @@ -1,5 +1,6 @@ #include "math.h" #include "unsplit.h" +#include "game/chrman.h" #include "game/wipe.h" #include "game/pad.h" diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index cc18cc73..e76ce248 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -1,4 +1,5 @@ #include "dolphin.h" +#include "game/chrman.h" #include "game/object.h" #include "REL/w03Dll.h" #include "board_unsplit.h" diff --git a/src/game/board/boo.c b/src/game/board/boo.c index 603f6017..5299df98 100755 --- a/src/game/board/boo.c +++ b/src/game/board/boo.c @@ -1,5 +1,6 @@ #include "game/board/boo.h" #include "game/audio.h" +#include "game/chrman.h" #include "game/gamework.h" #include "game/gamework_data.h" #include "game/hsfman.h" @@ -92,7 +93,6 @@ typedef struct { } BallTakeCoinWork; void BoardSpaceCameraSet(u16); -char *CharModelHookNameGet(s16, s32, s32); static void ComSetupStealPlayer(s32 arg0); static void ComSetStealPlayerInput(s32 arg0, s32 arg1); diff --git a/src/game/board/item.c b/src/game/board/item.c index 28bdfa00..59176efc 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -1,5 +1,6 @@ #include "game/board/item.h" #include "game/audio.h" +#include "game/chrman.h" #include "game/gamework.h" #include "game/gamework_data.h" #include "game/hsfanim.h" @@ -47,7 +48,6 @@ typedef struct { u32 frandmod(u32); void CharModelCreateParticle(s32, Vec*); -void CharModelLayerSetAll(s32); void BoardBowserSuitInit(s32); s16 BoardBowserSuitPlayerModelGet(void); void fn_8004F578(s16, s32); diff --git a/src/game/board/model.c b/src/game/board/model.c index 1e3fb24c..18b67186 100644 --- a/src/game/board/model.c +++ b/src/game/board/model.c @@ -1,5 +1,6 @@ #include "game/board/main.h" #include "game/board/model.h" +#include "game/chrman.h" #include "game/hsfman.h" #include "game/hsfmotion.h" #include "game/memory.h" diff --git a/src/game/board/player.c b/src/game/board/player.c index 5a2b70af..a96f7e46 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -1,4 +1,5 @@ #include "game/board/player.h" +#include "game/chrman.h" #include "game/objsub.h" #include "game/board/com.h" #include "game/board/roll.h" @@ -35,9 +36,6 @@ extern void BoardModelAttrSet(s16, s32); extern void BoardModelAttrReset(s16, s32); //// #include "game/board/com.h" //// #include "game/board/overhead.h" -//// #include "game/chrman.h" -extern void CharModelDataClose(s16); -extern void CharModelStepTypeSet(s16, s32); //// #include "game/board/pad.h" extern s8 HuPadStkX[4]; extern s8 HuPadStkY[4]; diff --git a/src/game/board/ui.c b/src/game/board/ui.c index f2e3e1bc..1087afd6 100755 --- a/src/game/board/ui.c +++ b/src/game/board/ui.c @@ -1,5 +1,6 @@ #include "game/board/ui.h" #include "game/audio.h" +#include "game/chrman.h" #include "game/data.h" #include "game/gamework.h" #include "game/gamework_data.h" @@ -97,7 +98,6 @@ typedef struct { void BoardPlayerSparkSet(s32); void BoardBowserSuitMotionCreate(void); s16 BoardBowserSuitPlayerModelGet(void); -void CharModelLayerSetAll(s32); static void KillAllBoardStatus(void); static void CreateBoardStatusSprite(s32 arg0, UnkUiStatusStruct *arg1); diff --git a/src/game/chrman.c b/src/game/chrman.c new file mode 100755 index 00000000..ba9bd32e --- /dev/null +++ b/src/game/chrman.c @@ -0,0 +1,2080 @@ +#include "game/chrman.h" +#include "game/armem.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfex.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/object.h" +#include "game/process.h" + +#include "math.h" + +typedef struct { + /* 0x00 */ s16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ s16 unk04; + /* 0x06 */ s16 unk06; + /* 0x08 */ s16 unk08; + /* 0x0A */ s16 unk0A; + /* 0x0C */ s16 unk0C[32]; + /* 0x4C */ s16 unk4C[32]; + /* 0x8C */ u8 unk8C[32]; + /* 0xAC */ u32 unkAC; + /* 0xB0 */ s8 unkB0; + /* 0xB1 */ char unkB1[3]; + /* 0xB4 */ Vec unkB4; + /* 0xC0 */ void *unkC0; + /* 0xC4 */ Process *unkC4; +} UnkCharInstanceStruct; // Size 0xC8 + +typedef struct { + /* 0x00 */ s32 unk00; + /* 0x04 */ s16 unk04; + /* 0x06 */ s16 unk06; + /* 0x08 */ s32 unk08; +} EffectData; // Size 0xC + +typedef struct { + /* 0x00 */ u32 unk00; + /* 0x04 */ u8 unk04; + /* 0x05 */ u8 unk05; + /* 0x06 */ u8 unk06; + /* 0x07 */ u8 unk07; + /* 0x08 */ u8 unk08; + /* 0x09 */ u8 unk09; + /* 0x0A */ u8 unk0A; + /* 0x0B */ char unk0B[1]; + /* 0x0C */ Vec unk0C; + /* 0x18 */ float unk18; + /* 0x1C */ float unk1C; + /* 0x20 */ float unk20; + /* 0x24 */ float unk24; + /* 0x28 */ s32 unk28; // unknown type + /* 0x2C */ float unk2C; + /* 0x30 */ float unk30; + /* 0x34 */ float unk34; +} EffectParamData; // Size 0x38 + +typedef struct { + u16 unk00; + s16 unk02; +} UnkProcessData; // Size 4 + +static void UpdateChar(void); +static void UpdateCharAnim(s16 character, s16 arg1, s16 arg2, u8 arg3, s16 arg4, Vec *arg5); +static s32 PlayCharVoice(s16 character, s16 arg1, u8 arg2); +static void InitEffect(void); +static s16 CreateEffectDust(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5); +static s16 CreateEffectSmoke(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5); +static s16 CreateEffectDot(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5); +static s16 CreateEffectStar(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5); +static s16 CreateEffectWarn(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5); +static s16 CreateEffectBird(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5); +static s16 CreateEffect(s16 arg0, s16 arg1, float arg2, float arg3, float arg4, float arg5, EffectParamData *arg6); +static void UpdateEffect(s32 arg0, ParticleData *arg1); +static void RotateEffect(HsfanimStruct01 *arg0); +static void PlayEffectSound(HsfanimStruct01 *arg0); +static void UpdateItemHook(void); +static void OrbitEffect(HsfanimStruct01 *arg0); +static void UpdateNpcEffect(void); +static s32 PlayStepFX(s16 arg0, s16 arg1, u8 arg2); + +static UnkCharInstanceStruct charInstance[8]; +static s16 effectMdl[8]; +static EffectParamData *particleData[8]; +static Process *itemHookProcess[32]; +static u16 lbl_801975B0[8]; +static u8 lbl_801975C0[0x90]; // Unused? + +static s32 skipAnimUpdate; +static void *effectAMemP; + +static u8 lbl_801D35F0[8] = { 0x0C, 0x00, 0x17, 0x75, 0x1E, 0x1E, 0x1D, 0x18 }; +static u8 lbl_801D35F8[8] = { 0x0D, 0x00, 0x17, 0x54, 0x1E, 0x00, 0x00, 0x23 }; +static u8 lbl_801D3600[8] = { 0x0A, 0x00, 0x19, 0x63, 0x26, 0x00, 0x10, 0x0F }; +static u8 lbl_801D3608[8] = { 0x0D, 0x00, 0x17, 0x69, 0x0D, 0x1E, 0x1D, 0x14 }; +static u8 lbl_801D3610[8] = { 0x15, 0x1E, 0x16, 0x54, 0x0F, 0x62, 0x39, 0x0A }; + +static EffectData effectDataTbl[8] = { + { 0x00120006, 0x000A, 0x0000, 0x00000002 }, + { 0x00120005, 0x000A, 0x0000, 0x00000002 }, + { 0x00120002, 0x0096, 0x0001, 0x00000000 }, + { 0x00120003, 0x0046, 0x0000, 0x00000000 }, + { 0x00120000, 0x012C, 0x0001, 0x00000000 }, + { 0x00120001, 0x012C, 0x0001, 0x00000000 }, + { 0x00120004, 0x00C8, 0x0001, 0x00000000 }, + { 0x00120007, 0x000C, 0x0000, 0x00000002 } +}; + +static s32 charDirTbl[8][3] = { + { 0x005D0000, 0x005E0000, 0x005F0000 }, + { 0x00180000, 0x00190000, 0x001A0000 }, + { 0x006B0000, 0x006C0000, 0x006D0000 }, + { 0x00880000, 0x00890000, 0x008A0000 }, + { 0x00830000, 0x00840000, 0x00850000 }, + { 0x000F0000, 0x00100000, 0x00110000 }, + { 0x000B0000, 0x000C0000, 0x000D0000 }, + { 0x007F0000, 0x00800000, 0x00810000 } +}; + +static EffectParamData effectDustParam = { + 0, + 0x80, 0x80, 0x80, 0xFF, + 0x40, 0x20, 0x00, 0xFF, + { 0.0f, 2.0f, 1.0f }, + 0.95f, 0.95f, 0.95f, + 0.0f, + 0x00000000, + 1.0f, + -5.0f, + 0.02f +}; + +static EffectParamData effectDotParam = { + 0, + 0xFF, 0x40, 0x40, 0x80, + 0xFF, 0x40, 0x40, 0x80, + { 0.0f, 0.0f, 0.0f }, + 0.0f, 0.0f, 0.0f, + 0.0f, + 0x00000000, + -5.0f, + 0.0f, + 0.0f +}; + +static EffectParamData effectStarParam = { + 0, + 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, + { 0.0f, 0.0f, 0.0f }, + 0.95f, 0.95f, 0.95f, + 0.0f, + 0x00000000, + -0.5f, + -10.0f, + 0.0f +}; + +static EffectParamData effectWarnParam = { + 0, + 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, + { 0.0f, 20.0f, 0.0f }, + 0.95f, 0.85f, 0.95f, + 0.0f, + 0x00000000, + 1.0f, + -5.0f, + 0.0f +}; + +static EffectParamData effectSmokeParam = { + 0, + 0x80, 0x20, 0x20, 0xFF, + 0x00, 0x00, 0x00, 0xFF, + { 0.0f, 10.0f, 0.0f }, + 1.0f, 0.95f, 1.0f, + 0.0f, + 0x00000000, + 5.0f, + -13.0f, + 0.1f +}; + +static s8 lbl_801309A0[32] = { + 10, 32, -1, -1, + 20, 40, -1, -1, + 12, 37, -1, -1, + 4, 25, -1, -1, + 5, 30, -1, -1, + 16, 1, 24, 39, + 23, 50, -1, -1, + 19, 39, -1, -1 +}; + +static s8 lbl_801309C0[32] = { + 15, 29, -1, -1, + 5, 19, -1, -1, + 5, 22, -1, -1, + 12, 28, -1, -1, + 18, 35, -1, -1, + 1, 8, 12, -1, + 0, 16, -1, -1, + 12, 28, -1, -1 +}; + +static s8 lbl_801309E0[16] = { + 5, 7, 6, 9, + 10, 11, 9, -1, + 9, 11, 9, -1, + 8, -1, 10, -1 +}; + +void CharManInit(void) { + UnkCharInstanceStruct *temp_r29; + s16 i; + s16 j; + + for (i = 0; i < 8; i++) { + temp_r29 = &charInstance[i]; + temp_r29->unkC0 = NULL; + for (j = 0; j < 32; j++) { + temp_r29->unk0C[j] = -1; + } + temp_r29->unk00 = -1; + temp_r29->unkC4 = NULL; + } + if (!effectAMemP) { + effectAMemP = (void*) HuAR_DVDtoARAM(0x120000); + } + for (i = 0; i < 8; i++) { + effectMdl[i] = -1; + particleData[i] = NULL; + } + for (i = 0; i < 32; i++) { + itemHookProcess[i] = NULL; + } +} + +void *CharAMemPtrGet(s16 character) { + return charInstance[character].unkC0; +} + +void CharARAMOpen(s16 character) { + UnkCharInstanceStruct *temp_r31; + + if (character >= 8 || character < 0 || character == 0xFF) { + return; + } + temp_r31 = &charInstance[character]; + if (!temp_r31->unkC0) { + temp_r31->unkC0 = (void*) HuAR_DVDtoARAM(charDirTbl[character][2]); + } +} + +void CharARAMClose(s16 character) { + UnkCharInstanceStruct *temp_r31; + + temp_r31 = &charInstance[character]; + if (temp_r31->unkC0) { + HuARFree((u32) temp_r31->unkC0); + temp_r31->unkC0 = NULL; + } +} + +void CharKill(s16 character) { + s16 i; + + if (character == -1) { + for (i = 0; i < 8; i++) { + CharKill(i); + } + } else { + HuDataDirClose(charDirTbl[character][0]); + HuDataDirClose(charDirTbl[character][1]); + HuDataDirClose(charDirTbl[character][2]); + CharARAMClose(character); + } +} + +void CharKillAll(void) { + CharModelKill(-1); + CharKill(-1); + HuARFree((u32) effectAMemP); + effectAMemP = NULL; +} + +s16 CharModelCreate(s16 character, s16 lod) { + s16 sp8 = 0; + UnkCharInstanceStruct *temp_r31; + void *var_r26; + s16 *var_r27; + s16 var_r25; + s32 var_r29; + + temp_r31 = &charInstance[character]; + if (temp_r31->unk00 != -1) { + Hu3DModelKill(temp_r31->unk00); + } + if (lod & 1) { + var_r29 = charDirTbl[character][0]; + } else if (lod & 2) { + var_r29 = charDirTbl[character][1]; + } else if (lod & 4) { + var_r29 = charDirTbl[character][1] | 1; + } else { + var_r29 = charDirTbl[character][1] | 2; + } + var_r26 = HuDataSelHeapReadNum(var_r29, MEMORY_DEFAULT_NUM, HEAP_DATA); + temp_r31->unk00 = var_r25 = Hu3DModelCreate(var_r26); + temp_r31->unkC4 = HuPrcCreate(UpdateChar, 0x64, 0x4000, 0); + temp_r31->unkC4->user_data = var_r27 = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(s16)); + temp_r31->unk02 = lod; + temp_r31->unkAC = 0; + *var_r27 = character; + temp_r31->unkB0 = 0; + InitEffect(); + return var_r25; +} + +static void UpdateChar(void) { + Vec sp8; + s16 *temp_r28; + UnkCharInstanceStruct *temp_r31; + ModelData *temp_r29; + s16 var_r27; + s16 i; + + temp_r28 = HuPrcCurrentGet()->user_data; + temp_r31 = &charInstance[*temp_r28]; + temp_r29 = &Hu3DData[temp_r31->unk00]; + var_r27 = 0; + while (1) { + for (i = 0; i < 32; i++) { + if (temp_r31->unk0C[i] == temp_r29->unk_08) { + break; + } + } + skipAnimUpdate = 0; + if (i != 32) { + temp_r31->unk04 = temp_r31->unk4C[i]; + UpdateCharAnim(*temp_r28, temp_r31->unk00, temp_r31->unk4C[i], temp_r31->unk8C[i], temp_r29->unk_64, &sp8); + temp_r31->unk08 = temp_r31->unk4C[i]; + } else { + temp_r31->unk04 = -1; + } + if (temp_r29->unk_0C != -1) { + for (i = 0; i < 32; i++) { + if (temp_r31->unk0C[i] == temp_r29->unk_0C) { + break; + } + } + skipAnimUpdate = 1; + var_r27 = 1; + if (i != 32) { + temp_r31->unk06 = temp_r31->unk4C[i]; + UpdateCharAnim(*temp_r28, temp_r31->unk00, temp_r31->unk4C[i], temp_r31->unk8C[i], temp_r29->unk_84, &sp8); + temp_r31->unk0A = temp_r31->unk4C[i]; + } else { + temp_r31->unk06 = -1; + } + } else if (var_r27 != 0) { + CharModelTexAnimSet(*temp_r28); + var_r27 = 0; + } + temp_r31->unkB4 = temp_r29->pos; + HuPrcVSleep(); + } +} + +static void UpdateCharAnim(s16 character, s16 arg1, s16 arg2, u8 arg3, s16 arg4, Vec *arg5) { + Vec sp1C; + Vec sp10; + ModelData *temp_r30; + s16 var_r19; + ParticleData *var_r18; + ModelData *var_r17; + HsfanimStruct01 *var_r27; + UnkCharInstanceStruct *temp_r29; + Mtx sp28; + u32 var_r22; + s16 var_r20; + s16 i; + + temp_r30 = &Hu3DData[arg1]; + temp_r29 = &charInstance[character]; + var_r22 = 0; + if (skipAnimUpdate == 0 && (temp_r30->motion_attr & 0x40000002)) { + return; + } + switch (arg2) { + case 2: + if (skipAnimUpdate == 0 && temp_r30->unk_68 <= 0.5) { + break; + } + if (skipAnimUpdate != 0 && temp_r30->unk_88 <= 0.5) { + break; + } + if (!(arg4 & 0xF) && !(temp_r29->unkAC & 0x10)) { + effectDustParam.unk0C.x = 2.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(0xA); + effectDustParam.unk0C.z = 2.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + sp1C.x = temp_r30->pos.x + temp_r30->scale.x * (frandmod(0x32) - 0x19); + sp1C.y = temp_r30->pos.y; + sp1C.z = temp_r30->pos.z + temp_r30->scale.x * (frandmod(0x32) - 0x19); + CreateEffectDust(arg1, sp1C.x, sp1C.y, sp1C.z, frandmod(0xA) + 0x1E, &effectDustParam); + } + for (i = 0; i < 4; i++) { + if (lbl_801309A0[character * 4 + i] == arg4) { + PlayStepFX(character, 0x101, arg3); + break; + } + } + break; + case 3: + if (skipAnimUpdate == 0 && temp_r30->unk_68 <= 0.5) { + break; + } + if (skipAnimUpdate != 0 && temp_r30->unk_88 <= 0.5) { + break; + } + if (!(arg4 & 3) && !(temp_r29->unkAC & 0x10)) { + effectDustParam.unk0C.x = 4.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.y = 2.0 + 0.1 * frandmod(0xA); + effectDustParam.unk0C.z = 4.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + sp1C.x = temp_r30->pos.x + temp_r30->scale.x * (frandmod(0x32) - 0x19); + sp1C.y = temp_r30->pos.y; + sp1C.z = temp_r30->pos.z + temp_r30->scale.x * (frandmod(0x32) - 0x19); + CreateEffectDust(arg1, sp1C.x, sp1C.y, sp1C.z, frandmod(0xA) + 0x1E, &effectDustParam); + } + for (i = 0; i < 4; i++) { + if (lbl_801309C0[character * 4 + i] == arg4) { + PlayStepFX(character, 0x105, arg3); + break; + } + } + break; + case 4: + if (arg4 < 5 && !(temp_r29->unkAC & 0x10)) { + effectDustParam.unk0C.x = 6.0 * sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.z = 6.0 * cos(temp_r30->rot.y * M_PI / 180.0); + for (i = 0; i < 5; i++) { + effectDustParam.unk0C.y = 2.0 + 0.1 * frandmod(0xA); + sp1C.x = temp_r30->pos.x + temp_r30->scale.x * (frandmod(0x32) - 0x19); + sp1C.y = temp_r30->pos.y; + sp1C.z = temp_r30->pos.z + temp_r30->scale.x * (frandmod(0x32) - 0x19); + CreateEffectDust(arg1, sp1C.x, sp1C.y, sp1C.z, 20.0f, &effectDustParam); + } + } + if (arg4 == 0) { + PlayStepFX(character, 0x10D, arg3); + } + break; + case 6: + if (arg4 == 5 && !(temp_r29->unkAC & 0x10)) { + for (i = 0; i < 8; i++) { + effectDustParam.unk0C.x = 4.0 * sin(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.y = 0.0f; + effectDustParam.unk0C.z = 4.0 * cos(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + CreateEffectDust(arg1, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 20.0f, &effectDustParam); + } + for (i = 0; i < 8; i++) { + effectDustParam.unk0C.x = 2.0 * sin((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.y = 0.0f; + effectDustParam.unk0C.z = 2.0 * cos((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + CreateEffectDust(arg1, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 20.0f, &effectDustParam); + } + } + for (i = 0; i < 2; i++) { + if (lbl_801309E0[character * 2 + i] == arg4) { + PlayStepFX(character, 0x10D, arg3); + break; + } + } + break; + case 7: + if (arg2 == 7) { + Hu3DModelObjMtxGet(arg1, CharModelHookNameGet(character, temp_r29->unk02, 0), sp28); + var_r20 = 10; + } else { + Hu3DModelObjMtxGet(arg1, CharModelHookNameGet(character, temp_r29->unk02, 1), sp28); + var_r20 = 13; + } + if (arg4 <= var_r20 && !(temp_r29->unkAC & 0x10)) { + effectDotParam.unk0C.x = 0.0f; + effectDotParam.unk0C.y = 0.0f; + effectDotParam.unk0C.z = 0.0f; + effectDotParam.unk2C = -5.0f; + sp1C.x = sp28[0][3]; + sp1C.y = sp28[1][3]; + sp1C.z = sp28[2][3]; + if (arg4 != 0) { + PSVECSubtract(&sp1C, arg5, &sp10); + var_r20 = 0.2 * sqrtf(sp10.x * sp10.x + sp10.y * sp10.y + sp10.z * sp10.z); + if (var_r20 > 5) { + var_r20 = 5; + } + if (var_r20 < 1) { + var_r20 = 1; + } + for (i = 1; i <= var_r20; i++) { + sp10.x = arg5->x + (sp1C.x - arg5->x) * ((float) i / var_r20); + sp10.y = arg5->y + (sp1C.y - arg5->y) * ((float) i / var_r20); + sp10.z = arg5->z + (sp1C.z - arg5->z) * ((float) i / var_r20); + CreateEffectDot(arg1, sp10.x, sp10.y, sp10.z, 50.0f, &effectDotParam); + } + } else { + CreateEffectDot(arg1, sp1C.x, sp1C.y, sp1C.z, 40.0f, &effectDotParam); + } + *arg5 = sp1C; + } + break; + case 0xA: + if (arg4 == 0) { + if (!(temp_r29->unkAC & 0x10)) { + for (i = 0; i < 8; i++) { + effectStarParam.unk0C.x = 10.0 * sin(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + effectStarParam.unk0C.y = 0.0f; + effectStarParam.unk0C.z = 10.0 * cos(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + CreateEffectStar(arg1, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 40.0f, &effectStarParam); + } + for (i = 0; i < 8; i++) { + effectDustParam.unk0C.x = 4.0 * sin((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.y = 0.0f; + effectDustParam.unk0C.z = 4.0 * cos((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + CreateEffectDust(arg1, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 20.0f, &effectDustParam); + } + } + PlayCharVoice(character, 0x119, arg3); + } + break; + case 0x1B: + if (temp_r30->unk_0C != -1 && skipAnimUpdate == 0) { + break; + } + if (!(temp_r29->unkAC & 0x10)) { + if (arg4 == 10) { + var_r19 = CreateEffectWarn(arg1, temp_r30->pos.x, temp_r30->pos.y + 100.0f, temp_r30->pos.z, 20.0f, &effectWarnParam); + if (var_r19 == -1) { + break; + } + var_r17 = &Hu3DData[effectMdl[0]]; + var_r18 = var_r17->unk_120; + var_r27 = &var_r18->unk_48[var_r19]; + var_r27->unk02 = 0; + var_r27->unk08.x = arg1; + if (character == 7) { + var_r27->unk08.y = 190.0f; + } else if (character == 2 || character == 5 || character == 6) { + var_r27->unk08.y = 140.0f; + } else { + var_r27->unk08.y = 120.0f; + } + var_r27->unk14.x = var_r27->unk14.z = 0.0f; + var_r27->unk14.y = 100.0f; + } + if (arg4 == 30) { + for (i = 0; i < 8; i++) { + effectDustParam.unk0C.x = 4.0 * sin((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.y = 0.0f; + effectDustParam.unk0C.z = 4.0 * cos((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + CreateEffectDust(arg1, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 20.0f, &effectDustParam); + } + } + } + break; + case 0x1C: + if (temp_r30->unk_0C != -1 && skipAnimUpdate == 0) { + break; + } + if (!(temp_r29->unkAC & 0x10) && arg4 == 0) { + var_r19 = CreateEffectWarn(arg1, temp_r30->pos.x, temp_r30->pos.y + 100.0f, temp_r30->pos.z, 20.0f, &effectWarnParam); + if (var_r19 == -1) { + break; + } + var_r17 = &Hu3DData[effectMdl[0]]; + var_r18 = var_r17->unk_120; + var_r27 = &var_r18->unk_48[var_r19]; + var_r27->unk02 = 0; + var_r27->unk08.x = arg1; + if (character == 7) { + var_r27->unk08.y = 150.0f; + } else if (character == 2 || character == 5 || character == 6) { + var_r27->unk08.y = 120.0f; + } else { + var_r27->unk08.y = 100.0f; + } + var_r27->unk14.x = var_r27->unk14.z = 0.0f; + var_r27->unk14.y = 100.0f; + } + break; + case 0x15: + case 0x16: + case 0x79: + if (!(temp_r29->unkAC & 1) && !(temp_r29->unkAC & 0x10)) { + PlayCharVoice(character, 0x11A, arg3); + for (i = 0; i < 3; i++) { + var_r19 = CreateEffectBird(arg1, temp_r30->pos.x, temp_r30->pos.y + 100.0f * temp_r30->scale.x, temp_r30->pos.z, 1.0f, &effectWarnParam); + if (var_r19 == -1) { + break; + } + var_r17 = &Hu3DData[effectMdl[7]]; + var_r18 = var_r17->unk_120; + var_r27 = &var_r18->unk_48[var_r19]; + var_r27->unk02 = 1; + var_r27->unk00 = 0; + var_r27->unk08.x = character; + var_r27->unk08.y = i * 0x78; + temp_r29->unkAC |= 1; + } + } + break; + case 0x13: + if ((arg4 & 1) && !(temp_r29->unkAC & 0x10)) { + Hu3DModelObjMtxGet(arg1, CharModelHookNameGet(character, temp_r29->unk02, 4), sp28); + sp1C.x = sp28[0][3]; + sp1C.y = sp28[1][3]; + sp1C.z = sp28[2][3]; + CreateEffectSmoke(arg1, sp1C.x, sp1C.y, sp1C.z, 20.0f, &effectSmokeParam); + } + break; + case 5: + if (arg4 == 0) { + if (temp_r29->unkB0 == 4) { + PlayCharVoice(character, 0x10A, arg3); + } else if (temp_r29->unkB0 == 5) { + PlayCharVoice(character, 0x10C, arg3); + } else { + PlayCharVoice(character, 0x115, arg3); + } + } + break; + case 8: + if (arg4 == 0) { + PlayCharVoice(character, 0x118, arg3); + } + break; + case 0x14: + case 0x50: + if (arg4 == 0 && !(temp_r29->unkAC & 0x14)) { + PlayCharVoice(character, 0x123, arg3); + } + break; + case 0x3B: + case 0x48: + if (arg4 == 0 && !(temp_r29->unkAC & 0x12)) { + PlayCharVoice(character, 0x122, arg3); + } + break; + case 0x3F: + case 0x53: + case 0x57: + if (arg4 == 0 && !(temp_r29->unkAC & 0x12)) { + PlayCharVoice(character, 0x124, arg3); + } + temp_r29->unkAC |= 2; + var_r22 |= 2; + break; + case 0x4B: + if (arg4 == lbl_801D3600[character] && !(temp_r29->unkAC & 0x12)) { + PlayCharVoice(character, 0x124, arg3); + temp_r29->unkAC |= 2; + var_r22 |= 2; + } + break; + case 0x4C: + if (arg4 == lbl_801D3608[character] && !(temp_r29->unkAC & 0x12)) { + PlayCharVoice(character, 0x124, arg3); + temp_r29->unkAC |= 2; + var_r22 |= 2; + } + break; + case 0x17: + if (!(temp_r29->unkAC & 0x12)) { + if (omcurovl < OVL_W01 && arg4 == lbl_801D35F0[character]) { + PlayCharVoice(character, 0x124, arg3); + temp_r29->unkAC |= 2; + var_r22 |= 2; + } else if (omcurovl >= OVL_W01 && arg4 == lbl_801D35F8[character]) { + PlayCharVoice(character, 0x122, arg3); + temp_r29->unkAC |= 2; + var_r22 |= 2; + } + } + break; + case 0x18: + if (arg4 == lbl_801D3610[character] && !(temp_r29->unkAC & 0x14)) { + PlayCharVoice(character, 0x121, arg3); + temp_r29->unkAC |= 4; + var_r22 |= 4; + } + break; + case 0x2A: + case 0x72: + if (arg4 == 0 && !(temp_r29->unkAC & 0x14)) { + PlayCharVoice(character, 0x121, arg3); + } + temp_r29->unkAC |= 4; + var_r22 |= 4; + break; + case 0x49: + case 0x4E: + if (arg4 == 0 && !(temp_r29->unkAC & 0x14)) { + PlayCharVoice(character, 0x12E, arg3); + } + temp_r29->unkAC |= 4; + var_r22 |= 4; + break; + } + if (skipAnimUpdate == 0) { + if (!(var_r22 & 4)) { + temp_r29->unkAC &= ~4; + } + if (!(var_r22 & 2)) { + temp_r29->unkAC &= ~2; + } + } +} + +static s32 PlayCharVoice(s16 character, s16 arg1, u8 arg2) { + UnkCharInstanceStruct *temp_r31; + ModelData *temp_r29; + + temp_r31 = &charInstance[character]; + temp_r29 = &Hu3DData[temp_r31->unk00]; + if (arg2 & 1) { + return; + } + if (temp_r31->unkAC & 8) { + return HuAudCharVoicePlayPos(character, arg1, &temp_r29->pos); + } else { + return HuAudCharVoicePlay(character, arg1); + } +} + +static void InitEffect(void) { + HsfanimStruct01 *var_r29; + ParticleData *temp_r30; + void *temp_r26; + AnimData *temp_r25; + s16 var_r27; + s16 i; + s16 j; + + var_r27 = 0; + for (i = 0; i < 8; i++) { + if (effectMdl[i] == -1) { + temp_r26 = HuDataSelHeapReadNum(effectDataTbl[i].unk00, MEMORY_DEFAULT_NUM, HEAP_DATA); + temp_r25 = HuSprAnimRead(temp_r26); + effectMdl[i] = Hu3DParticleCreate(temp_r25, effectDataTbl[i].unk04); + if (i == 7) { + Hu3DParticleAnimModeSet(effectMdl[i], 0); + } + Hu3DParticleHookSet(effectMdl[i], UpdateEffect); + if (!particleData[i]) { + particleData[i] = HuMemDirectMalloc(HEAP_SYSTEM, effectDataTbl[i].unk04 * sizeof(EffectParamData)); + } + Hu3DParticleBlendModeSet(effectMdl[i], effectDataTbl[i].unk06); + temp_r30 = Hu3DData[effectMdl[i]].unk_120; + temp_r30->unk_02 = 0; + temp_r30->unk_1C = particleData[i]; + temp_r30->unk_34 = 1; + var_r29 = temp_r30->unk_48; + for (j = 0; j < temp_r30->unk_30; j++, var_r29++) { + var_r29->unk2C = 0.0f; + } + var_r27 = 1; + } + } + if (var_r27 != 0) { + HuDataDirClose(0x120000); + } +} + +static s16 CreateEffectDust(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5) { + ModelData *temp_r31; + + temp_r31 = &Hu3DData[arg0]; + if (effectMdl[2] == -1) { + return -1; + } + arg4 *= temp_r31->scale.x; + return CreateEffect(effectMdl[2], temp_r31->camera, arg1, arg2, arg3, arg4, arg5); +} + +static s16 CreateEffectSmoke(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5) { + ModelData *temp_r31; + + temp_r31 = &Hu3DData[arg0]; + if (effectMdl[3] == -1) { + return -1; + } + arg4 *= temp_r31->scale.x; + return CreateEffect(effectMdl[3], temp_r31->camera, arg1, arg2, arg3, arg4, arg5); +} + +static s16 CreateEffectDot(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5) { + ModelData *temp_r31; + + temp_r31 = &Hu3DData[arg0]; + if (effectMdl[6] == -1) { + return -1; + } + arg4 *= temp_r31->scale.x; + return CreateEffect(effectMdl[6], temp_r31->camera, arg1, arg2, arg3, arg4, arg5); +} + +static s16 CreateEffectStar(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5) { + ModelData *temp_r31; + + temp_r31 = &Hu3DData[arg0]; + if (effectMdl[4] == -1) { + return -1; + } + arg4 *= temp_r31->scale.x; + return CreateEffect(effectMdl[4], temp_r31->camera, arg1, arg2, arg3, arg4, arg5); +} + +static s16 CreateEffectWarn(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5) { + ModelData *temp_r31; + + temp_r31 = &Hu3DData[arg0]; + if (effectMdl[0] == -1) { + return -1; + } + arg4 *= temp_r31->scale.x; + return CreateEffect(effectMdl[0], temp_r31->camera, arg1, arg2, arg3, arg4, arg5); +} + +static s16 CreateEffectBird(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5) { + ModelData *temp_r31; + + temp_r31 = &Hu3DData[arg0]; + if (effectMdl[7] == -1) { + return -1; + } + arg4 *= temp_r31->scale.x; + return CreateEffect(effectMdl[7], temp_r31->camera, arg1, arg2, arg3, arg4, arg5); +} + +static s16 CreateEffect(s16 arg0, s16 arg1, float arg2, float arg3, float arg4, float arg5, EffectParamData *arg6) { + ModelData *var_r28; + ParticleData *temp_r30; + EffectParamData *var_r27; + HsfanimStruct01 *var_r31; + s16 i; + + var_r28 = &Hu3DData[arg0]; + temp_r30 = var_r28->unk_120; + var_r27 = temp_r30->unk_1C; + var_r31 = &temp_r30->unk_48[temp_r30->unk_02]; + for (i = temp_r30->unk_02; i < temp_r30->unk_30; i++, var_r31++) { + if (!var_r31->unk2C) { + break; + } + } + if (i >= temp_r30->unk_30) { + var_r31 = temp_r30->unk_48; + for (i = 0; i < temp_r30->unk_30; i++, var_r31++) { + if (!var_r31->unk2C) { + break; + } + } + } + if (i != temp_r30->unk_30) { + var_r27[i] = *arg6; + var_r31->unk06 = arg1; + var_r31->unk34.x = arg2; + var_r31->unk34.y = arg3; + var_r31->unk34.z = arg4; + var_r31->unk08 = arg6->unk0C; + var_r31->unk40.r = arg6->unk04; + var_r31->unk40.g = arg6->unk05; + var_r31->unk40.b = arg6->unk06; + var_r31->unk40.a = arg6->unk07; + var_r31->unk28 = arg5; + var_r31->unk2C = arg5; + var_r31->unk00 = 0; + var_r31->unk02 = -1; + temp_r30->unk_02 = i; + } else { + return -1; + } + return i; +} + +static void UpdateEffect(s32 arg0, ParticleData *arg1) { + EffectParamData *temp_r30; + HsfanimStruct01 *var_r31; + s16 var_r28; + s16 i; + + temp_r30 = arg1->unk_1C; + if (arg1->unk_34 == 0) { + var_r31 = arg1->unk_48; + for (i = 0; i < arg1->unk_30; i++, var_r31++) { + var_r31->unk2C = 0.0f; + } + } + var_r31 = arg1->unk_48; + for (i = 0; i < arg1->unk_30; i++, var_r31++) { + if (var_r31->unk2C) { + if (var_r31->unk02 == -1) { + var_r31->unk08.x *= temp_r30[i].unk18; + var_r31->unk08.y *= temp_r30[i].unk1C; + var_r31->unk08.z *= temp_r30[i].unk20; + PSVECAdd(&var_r31->unk08, &var_r31->unk34, &var_r31->unk34); + var_r31->unk08.y += temp_r30[i].unk24; + var_r28 = var_r31->unk40.r + temp_r30[i].unk34 * (temp_r30[i].unk08 - temp_r30[i].unk04); + if (var_r28 < 0) { + var_r28 = 0; + } else if (var_r28 > 0xFF) { + var_r28 = 0xFF; + } + var_r31->unk40.r = var_r28; + var_r28 = var_r31->unk40.g + temp_r30[i].unk34 * (temp_r30[i].unk09 - temp_r30[i].unk05); + if (var_r28 < 0) { + var_r28 = 0; + } else if (var_r28 > 0xFF) { + var_r28 = 0xFF; + } + var_r31->unk40.g = var_r28; + var_r28 = var_r31->unk40.b + temp_r30[i].unk34 * (temp_r30[i].unk0A - temp_r30[i].unk06); + if (var_r28 < 0) { + var_r28 = 0; + } else if (var_r28 > 0xFF) { + var_r28 = 0xFF; + } + var_r31->unk40.b = var_r28; + var_r28 = var_r31->unk40.a + temp_r30[i].unk30; + if (var_r28 < 1) { + var_r31->unk2C = 0.0f; + } + var_r31->unk40.a = var_r28; + if (var_r31->unk2C) { + if (temp_r30[i].unk00 & 1) { + var_r31->unk2C = var_r31->unk28 * (((var_r31->unk00_s16 + i) & 1) ? 1.0 : 0.5); + } else { + var_r31->unk2C = var_r31->unk28; + } + var_r31->unk28 += temp_r30[i].unk2C; + if (var_r31->unk28 <= 0.01f) { + var_r31->unk2C = 0.0f; + } + } + var_r31->unk00_s16++; + } else { + switch (var_r31->unk02) { + case 0: + RotateEffect(var_r31); + break; + case 1: + PlayEffectSound(var_r31); + break; + case 2: + OrbitEffect(var_r31); + break; + } + } + } + } + DCStoreRangeNoSync(arg1->unk_48, arg1->unk_30 * sizeof(HsfanimStruct01)); +} + +static void RotateEffect(HsfanimStruct01 *arg0) { + ModelData *temp_r30; + float var_f31; + + temp_r30 = &Hu3DData[(s32) arg0->unk08.x]; + if (arg0->unk00_s16 < 8) { + var_f31 = 0.3 + sin((40.0f + 10.0f * (arg0->unk00_s16 + 1)) * M_PI / 180.0); + arg0->unk2C = 50.0f * var_f31 * temp_r30->scale.x; + arg0->unk40.a = 0xFF; + var_f31 = 0.3 + sin((15.0f * (arg0->unk00_s16 + 1)) * M_PI / 180.0); + } else { + var_f31 = 0.3 + sin(3 * M_PI / 4); + } + var_f31 *= temp_r30->scale.x; + arg0->unk34.x = temp_r30->pos.x + arg0->unk14.x * var_f31; + arg0->unk34.y = temp_r30->pos.y + arg0->unk08.y * temp_r30->scale.x + arg0->unk14.y * var_f31; + arg0->unk34.z = temp_r30->pos.z + arg0->unk14.z * var_f31; + if (arg0->unk00_s16 > 0x14) { + arg0->unk40.a -= 0x20; + arg0->unk2C -= 8.0f * temp_r30->scale.x; + if (arg0->unk2C < 0.0f) { + arg0->unk2C = 0.0f; + } + } + arg0->unk00_s16++; +} + +static float voiceParam[16] = { + 110.0f, 160.0f, 110.0f, 160.0f, + 150.0f, 180.0f, 130.0f, 160.0f, + 130.0f, 160.0f, 150.0f, 160.0f, + 150.0f, 180.0f, 120.0f, 210.0f +}; + +static void PlayEffectSound(HsfanimStruct01 *arg0) { + ModelData *temp_r30; + UnkCharInstanceStruct *temp_r29; + s16 temp_r26; + s16 temp_r28; + s16 var_r25; + + temp_r28 = arg0->unk08.x; + temp_r29 = &charInstance[temp_r28]; + temp_r30 = &Hu3DData[temp_r29->unk00]; + if (arg0->unk00_s16 < 0x14 && arg0->unk2C < 40.0f * temp_r30->scale.x) { + arg0->unk2C += 4.0f * temp_r30->scale.x; + } + arg0->unk40.a = 0xFF; + if (temp_r29->unk04 == 0x16 || temp_r29->unk06 == 0x16) { + var_r25 = voiceParam[temp_r28 * 2]; + } else { + var_r25 = voiceParam[temp_r28 * 2 + 1]; + } + temp_r26 = (arg0->unk00_s16 * 5) % 360; + arg0->unk34.x = temp_r30->pos.x + 40.0 * sin((arg0->unk08.y + temp_r26) * M_PI / 180.0) * temp_r30->scale.x; + arg0->unk34.y = temp_r30->pos.y + var_r25 * temp_r30->scale.x; + arg0->unk34.z = temp_r30->pos.z + 40.0 * cos((arg0->unk08.y + temp_r26) * M_PI / 180.0) * temp_r30->scale.x; + arg0->unk00_s16++; + if (arg0->unk00_s16 >= 0x8F) { + arg0->unk00_s16 = 0x48; + } + if (temp_r29->unk04 != 0x15 && temp_r29->unk04 != 0x16 && temp_r29->unk04 != 0x79 && arg0->unk00_s16 > 0x1E) { + arg0->unk2C -= 4.0f * temp_r30->scale.x; + if (arg0->unk2C < 0.0f) { + arg0->unk2C = 0.0f; + temp_r29->unkAC &= ~1; + if (arg0->unk08.y == 0.0) { + PlayCharVoice(temp_r28, 0x100, temp_r29->unkAC); + } + } + } +} + +s16 CharModelMotionCreate(s16 character, s32 data_num) { + UnkCharInstanceStruct *temp_r31; + s16 var_r28; + s16 var_r30; + u32 temp_r26; + void *var_r27; + + temp_r31 = &charInstance[character]; + if (temp_r31->unk00 == -1) { + return -1; + } + for (var_r30 = 0; var_r30 < 32; var_r30++) { + if (temp_r31->unk0C[var_r30] == -1) { + break; + } + } + if (var_r30 == 32) { + return -1; + } + temp_r26 = data_num & 0xFFFF0000; + for (var_r28 = 0; var_r28 < 8; var_r28++) { + if (temp_r26 == charDirTbl[var_r28][2]) { + break; + } + } + if (var_r28 != 8 || temp_r26 == 0) { + data_num &= 0xFFFF; + var_r27 = HuAR_ARAMtoMRAMFileRead(data_num | charDirTbl[character][2], MEMORY_DEFAULT_NUM, 2); + if (!var_r27) { + var_r27 = HuDataSelHeapReadNum(data_num | charDirTbl[character][2], MEMORY_DEFAULT_NUM, HEAP_DATA); + } + temp_r31->unk4C[var_r30] = data_num; + } else { + var_r27 = HuDataSelHeapReadNum(data_num, MEMORY_DEFAULT_NUM, HEAP_DATA); + temp_r31->unk4C[var_r30] = -1; + } + temp_r31->unk0C[var_r30] = Hu3DJointMotion(temp_r31->unk00, var_r27); + temp_r31->unk8C[var_r30] = 0; + return temp_r31->unk0C[var_r30]; +} + +void CharModelMotionIndexSet(s16 character, s16 arg1, s32 arg2) { + UnkCharInstanceStruct *temp_r30; + s16 i; + + temp_r30 = &charInstance[character]; + for (i = 0; i < 32; i++) { + if (temp_r30->unk0C[i] == arg1) { + break; + } + } + if (i != 32) { + temp_r30->unk4C[i] = arg2; + } +} + +void CharModelMotionKill(s16 character, u32 motion) { + UnkCharInstanceStruct *temp_r30; + s16 i; + + temp_r30 = &charInstance[character]; + for (i = 0; i < 32; i++) { + if (temp_r30->unk0C[i] == motion) { + break; + } + } + temp_r30->unk0C[i] = -1; + Hu3DMotionKill(motion); +} + +void CharModelMotionDataClose(s16 character) { + s16 i; + + if (character == -1) { + for (i = 0; i < 8; i++) { + CharModelMotionDataClose(i); + } + } else { + HuDataDirClose(charDirTbl[character][2]); + } +} + +void CharModelDataClose(s16 arg0) { + s16 i; + + if (arg0 == -1) { + for (i = 0; i < 8; i++) { + CharModelDataClose(i); + // Required to match. + (void) i; + (void) arg0; + } + } else { + HuDataDirClose(charDirTbl[arg0][0]); + HuDataDirClose(charDirTbl[arg0][1]); + HuDataDirClose(charDirTbl[arg0][2]); + } +} + +void CharModelKill(s16 character) { + UnkCharInstanceStruct *temp_r29; + s16 i; + + if (character == -1) { + for (i = 0; i < 8; i++) { + CharModelKill(i); + } + for (i = 0; i < 15; i++) { + lbl_801975B0[i] = 0; + } + return; + } + CharModelMotionDataClose(character); + temp_r29 = &charInstance[character]; + for (i = 0; i < 32; i++) { + if (temp_r29->unk0C[i] != -1) { + Hu3DMotionKill(temp_r29->unk0C[i]); + } + temp_r29->unk0C[i] = -1; + } + if (temp_r29->unk00 != -1) { + Hu3DModelKill(temp_r29->unk00); + } + temp_r29->unk00 = -1; + for (i = 0; i < 8; i++) { + if (charInstance[i].unk00 != -1) { + break; + } + } + if (i == 8) { + for (i = 0; i < 8; i++) { + if (effectMdl[i] != -1) { + Hu3DModelKill(effectMdl[i]); + } + effectMdl[i] = -1; + } + } + if (temp_r29->unkC4) { + HuMemDirectFree(temp_r29->unkC4->user_data); + HuPrcKill(temp_r29->unkC4); + for (i = 0; i < 32; i++) { + if (itemHookProcess[i]) { + HuPrcKill(itemHookProcess[i]); + } + itemHookProcess[i] = NULL; + } + temp_r29->unkC4 = NULL; + } +} + +void CharModelMotionSet(s16 character, s16 motion) { + UnkCharInstanceStruct *temp_r31; + MotionData *sp8; + + temp_r31 = &charInstance[character]; + sp8 = &Hu3DMotion[motion]; + CharModelTexAnimSet(character); + Hu3DMotionSet(temp_r31->unk00, motion); +} + +void CharModelTexAnimSet(s16 character) { + HsfAttribute *var_r31; + HsfdrawStruct01 *temp_r30; + ModelData *temp_r26; + UnkCharInstanceStruct *temp_r27; + s16 var_r25; + s16 i; + char **temp_r28; + + temp_r27 = &charInstance[character]; + temp_r26 = &Hu3DData[temp_r27->unk00]; + var_r31 = temp_r26->hsfData->attribute; + for (i = 0, var_r25 = 1; i < 4; i++, var_r25 <<= 1) { + if (var_r25 & temp_r27->unk02) { + break; + } + } + if (i < 4) { + temp_r28 = CharModelTexNameGet(character, temp_r27->unk02); + for (i = 0; i < temp_r26->hsfData->attributeCnt; i++, var_r31++) { + if ((var_r31->bitmap->name[0] == temp_r28[0][0] && strcmp(var_r31->bitmap->name, temp_r28[0]) == 0) + || (var_r31->bitmap->name[0] == temp_r28[1][0] && strcmp(var_r31->bitmap->name, temp_r28[1]) == 0)) { + if (var_r31->unk04) { + temp_r30 = var_r31->unk04; + temp_r30->unk08 = temp_r30->unk0C = temp_r30->unk10 = 0.0f; + temp_r30->unk14 = temp_r30->unk18 = temp_r30->unk1C = 0.0f; + } + } + } + } +} + +char *charTexNameTbl[64] = { + "s3c000m1_eyes", "s3c000m1_eyes", "s3c000m1_eyes", "s3c000m1_eyes", + "s3c000m2_eyes", "s3c000m2_eyes", "s3c000m3_eyes", "s3c000m3_eyes", + "S3c001m0_eye", "S3c001m0_eye", "S3c001m1_eye", "S3c001m1_eye", + "c001m3_eye", "c001m3_eye", "c001m3_eye", "c001m3_eye", + "s3c002m0_r_eye", "s3c002m0_l_eye", "s3c002m1_r_eye", "s3c002m1_l_eye", + "s3c002m2_r_eye", "s3c002m2_l_eye", "", "", + "eye1", "eye2", "S3c003m1", "S3c003m1", + "eye1", "eye2", "eye1", "eye2", + "GC-eyes", "GC-eyes", "s3c004m1_eye", "s3c004m1_eye", + "Clswario_eye_l1_AUTO12", "Clswario_eye_l1_AUTO13", "", "", + "m_donkey_eye4", "m_donkey_eye5", "S3donkey_eye", "S3donkey_eye", + "m_donkey_eye1", "m_donkey_eye2", "", "", + "GC-eyes", "GC-eyes", "s3c007m1_Eye_L", "s3c007m1_Eye_R", + "mat87", "mat89", "", "", + "clswaluigi_eye_l1_AUTO1", "clswaluigi_eye_l1_AUTO2", "s3c007_m1_eye", "s3c007_m1_eye", + "clswaluigi_eye_l1_AUTO9", "clswaluigi_eye_l1_AUTO10", "", "" +}; + +char **CharModelTexNameGet(s16 arg0, s16 arg1) { + s16 var_r30; + s16 i; + + for (i = 0, var_r30 = 1; i < 3; i++, var_r30 <<= 1) { + if (var_r30 & arg1) { + break; + } + } + return &charTexNameTbl[arg0 * 8 + i * 2]; +} + +static char *hookNameTbl[40] = { + "a-itemhook-r", "a-itemhook-l", "a-itemhook-fr", "a-itemhook-fl", "a-itemhook-body", + "a-itemhook-r", "a-itemhook-l", "a-itemhook-fr", "a-itemhook-fl", "a-itemhook-body", + "a-itemhook-r", "a-itemhook-l", "a-itemhook-fr", "a-itemhook-fl", "a-itemhook-body", + "a-itemhook-r", "a-itemhook-l", "a-itemhook-fr", "a-itemhook-fl", "a-itemhook-body", + "a-itemhook-r", "a-itemhook-l", "a-itemhook-fr", "a-itemhook-fl", "a-itemhook-body", + "a-itemhook-r", "a-itemhook-l", "a-itemhook-fr", "a-itemhook-fl", "a-itemhook-body", + "a-itemhook-r", "a-itemhook-l", "a-itemhook-fr", "a-itemhook-fl", "a-itemhook-body", + "a-itemhook-r", "a-itemhook-l", "a-itemhook-fr", "a-itemhook-fl", "a-itemhook-body" +}; + +char *CharModelHookNameGet(s16 arg0, s16 arg1, s16 arg2) { + s16 i; + s16 var_r30; + + for (i = 0, var_r30 = 1; i < 3; i++, var_r30 <<= 1) { + if (var_r30 & arg1) { + break; + } + } + return hookNameTbl[arg0 * 5 + arg2]; +} + +void CharModelMotionTimeSet(s16 character, float time) { + UnkCharInstanceStruct *temp_r31 = &charInstance[character]; + + Hu3DMotionTimeSet(temp_r31->unk00, time); +} + +float CharModelMotionTimeGet(s16 character) { + UnkCharInstanceStruct *temp_r31 = &charInstance[character]; + + return Hu3DMotionTimeGet(temp_r31->unk00); +} + +float CharModelMotionMaxTimeGet(s16 character) { + UnkCharInstanceStruct *temp_r31 = &charInstance[character]; + + return Hu3DMotionMaxTimeGet(temp_r31->unk00); +} + +s32 CharModelMotionEndCheck(s16 character) { + UnkCharInstanceStruct *temp_r31 = &charInstance[character]; + + return Hu3DMotionEndCheck(temp_r31->unk00); +} + +s16 CharModelMotionShiftIDGet(s16 character) { + UnkCharInstanceStruct *temp_r31 = &charInstance[character]; + + return Hu3DMotionShiftIDGet(temp_r31->unk00); +} + +void CharModelMotionShiftSet(s16 character, s16 motion, float time, float shift_time, u32 attr) { + UnkCharInstanceStruct *temp_r31 = &charInstance[character]; + MotionData *sp18 = &Hu3DMotion[motion]; + + Hu3DMotionShiftSet(temp_r31->unk00, motion, time, shift_time, attr); +} + +float CharModelMotionShiftTimeGet(s16 character) { + UnkCharInstanceStruct *temp_r31 = &charInstance[character]; + + return Hu3DMotionShiftTimeGet(temp_r31->unk00); +} + +void CharModelMotionSpeedSet(s16 character, float speed) { + UnkCharInstanceStruct *temp_r31 = &charInstance[character]; + + Hu3DMotionSpeedSet(temp_r31->unk00, speed); +} + +void CharModelLayerSetAll(s16 arg0) { + s16 i; + + for (i = 0; i < 8; i++) { + if (effectMdl[i] != -1) { + Hu3DModelLayerSet(effectMdl[i], arg0); + } + } +} + +static inline Process *CharModelItemHookCreateInlineFunc(void) { + s16 i; + + for (i = 0; i < 32; i++) { + if (!itemHookProcess[i]) { + break; + } + } + if (i == 32) { + return NULL; + } else { + itemHookProcess[i] = HuPrcCreate(UpdateItemHook, 0x64, 0x2000, 0); + return itemHookProcess[i]; + } +} + +void CharModelItemHookCreate(s16 character, char *arg1) { + Mtx sp18; + Vec spC; + UnkCharInstanceStruct *temp_r31; + ModelData *temp_r28; + HsfObject *temp_r25; + HsfConstData *temp_r24; + Process *var_r26; + UnkProcessData *temp_r27; + s16 temp_r29; + + temp_r31 = &charInstance[character]; + temp_r28 = &Hu3DData[temp_r31->unk00]; + temp_r25 = Hu3DModelObjPtrGet(temp_r31->unk00, arg1); + Hu3DModelObjMtxGet(temp_r31->unk00, arg1, sp18); + temp_r24 = temp_r25->constData; + temp_r29 = temp_r24->hook; + if (temp_r29 != -1) { + Hu3DModelHookObjReset(temp_r31->unk00, arg1); + var_r26 = CharModelItemHookCreateInlineFunc(); + if (!var_r26) { + Hu3DModelAttrSet(temp_r29, 1); + return; + } + var_r26->user_data = temp_r27 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkProcessData), MEMORY_DEFAULT_NUM); + temp_r28 = &Hu3DData[temp_r29]; + Hu3DMtxTransGet(sp18, &spC); + Hu3DModelPosSetV(temp_r29, &spC); + Hu3DMtxRotGet(sp18, &spC); + mtxRot(temp_r28->unk_F0, spC.x, spC.y, spC.z); + Hu3DMtxScaleGet(sp18, &spC); + Hu3DModelScaleSetV(temp_r29, &spC); + temp_r27->unk02 = temp_r29; + temp_r27->unk00 = temp_r28->camera; + } +} + +static void UpdateItemHook(void) { + Mtx sp14; + Vec sp8; + ModelData *temp_r30; + Process *temp_r25; + s16 var_r28; + s16 var_r29; + UnkProcessData *temp_r31; + + temp_r31 = HuPrcCurrentGet()->user_data; + temp_r30 = &Hu3DData[temp_r31->unk02]; + Hu3DModelObjMtxGet(temp_r31->unk02, "", sp14); + sp8.x = PGMinPos.x + (PGMaxPos.x - PGMinPos.x) / 2; + sp8.y = PGMinPos.y + (PGMaxPos.y - PGMinPos.y) / 2; + sp8.z = PGMinPos.z + (PGMaxPos.z - PGMinPos.z) / 2; + for (var_r29 = 0; var_r29 < 0x28; var_r29++) { + temp_r30->pos.y += 4.0f; + mtxRotCat(temp_r30->unk_F0, 24.0f, 0.0f, 0.0f); + temp_r30->scale.x *= 0.95f; + temp_r30->scale.y *= 0.95f; + temp_r30->scale.z *= 0.95f; + HuPrcVSleep(); + } + Hu3DModelObjMtxGet(temp_r31->unk02, "", sp14); + sp8.x = PGMinPos.x + (PGMaxPos.x - PGMinPos.x) / 2; + sp8.y = PGMinPos.y + (PGMaxPos.y - PGMinPos.y) / 2; + sp8.z = PGMinPos.z + (PGMaxPos.z - PGMinPos.z) / 2; + Hu3DModelAttrSet(temp_r31->unk02, 1); + effectDustParam.unk0C.x = 0.0f; + effectDustParam.unk0C.y = 0.0f; + effectDustParam.unk0C.z = 0.0f; + CreateEffectDust(temp_r31->unk02, sp8.x, sp8.y, sp8.z, 40.0f, &effectDustParam); + for (var_r29 = 0; var_r29 < 8; var_r29++) { + effectDustParam.unk0C.x = frandmod(10) - 5; + effectDustParam.unk0C.y = frandmod(10) - 5; + effectDustParam.unk0C.z = frandmod(10) - 5; + CreateEffectDust(temp_r31->unk02, sp8.x, sp8.y, sp8.z, 20.0f, &effectDustParam); + } + PSMTXIdentity(temp_r30->unk_F0); + temp_r25 = HuPrcCurrentGet(); + for (var_r28 = 0; var_r28 < 32; var_r28++) { + if (itemHookProcess[var_r28] == temp_r25) { + HuPrcKill(temp_r25); + itemHookProcess[var_r28] = NULL; + } + } + while (1) { + HuPrcVSleep(); + } +} + +static EffectParamData modelParticleParam = { + 0, + 0xFF, 0xFF, 0xFF, 0xFF, + 0x40, 0x20, 0x00, 0xFF, + { 0.0f, 2.0f, 1.0f }, + 0.95f, 0.95f, 0.95f, + 0.0f, + 0x00000000, + 1.0f, + -5.0f, + 0.02f +}; + +void CharModelEffectCreate(s16 arg0, Vec *arg1) { + s16 temp_r28; + s16 i; + HsfanimStruct01 *var_r31; + ParticleData *var_r27; + ModelData *var_r26; + + for (i = 0; i < 8; i++) { + temp_r28 = CreateEffect(effectMdl[3], arg0, arg1->x, arg1->y, arg1->z, 20.0f, &modelParticleParam); + if (temp_r28 == -1) { + break; + } + var_r26 = &Hu3DData[effectMdl[3]]; + var_r27 = var_r26->unk_120; + var_r31 = &var_r27->unk_48[temp_r28]; + var_r31->unk02 = 2; + var_r31->unk08.x = 30.0 * sin(i * 45 * M_PI / 180.0); + var_r31->unk08.y = 30.0 * cos(i * 45 * M_PI / 180.0); + var_r31->unk08.z = 0.0f; + var_r31->unk14 = *arg1; + var_r31->unk20 = 1.15f; + var_r31->unk24 = 0.1f * (frandmod(20) - 10); + var_r31->unk40.a = 0xFF - frandmod(3) * 16; + } + for (i = 0; i < 8; i++) { + temp_r28 = CreateEffect(effectMdl[3], arg0, arg1->x, arg1->y, arg1->z, 10.0f, &modelParticleParam); + if (temp_r28 == -1) { + break; + } + var_r26 = &Hu3DData[effectMdl[3]]; + var_r27 = var_r26->unk_120; + var_r31 = &var_r27->unk_48[temp_r28]; + var_r31->unk02 = 2; + var_r31->unk08.x = frandmod(100) - 50; + var_r31->unk08.y = frandmod(100) - 50; + var_r31->unk08.z = frandmod(100) - 50; + var_r31->unk14 = *arg1; + var_r31->unk20 = 1.15f; + var_r31->unk24 = 0.1f * (frandmod(20) - 10); + var_r31->unk40.a = 0xFF - frandmod(3) * 16; + } + temp_r28 = CreateEffect(effectMdl[3], arg0, arg1->x, arg1->y, arg1->z, 10.0f, &modelParticleParam); + if (temp_r28 != -1) { + var_r26 = &Hu3DData[effectMdl[3]]; + var_r27 = var_r26->unk_120; + var_r31 = &var_r27->unk_48[temp_r28]; + var_r31->unk02 = 2; + var_r31->unk08.x = 0.0f; + var_r31->unk08.y = 0.0f; + var_r31->unk08.z = 0.0f; + var_r31->unk14 = *arg1; + var_r31->unk24 = 0.0f; + var_r31->unk20 = 1.15f; + var_r31->unk40.a = 0xFF; + } +} + +static void OrbitEffect(HsfanimStruct01 *arg0) { + float temp_f31; + float var_f30; + s16 temp_r30; + + var_f30 = 20.0f + 3.75f * arg0->unk00_s16; + if (var_f30 > 90.0f) { + var_f30 = 90.0f; + } + temp_f31 = sin((M_PI * var_f30) / 180.0); + arg0->unk34.x = arg0->unk14.x + arg0->unk08.x * temp_f31; + arg0->unk34.y = arg0->unk14.y + arg0->unk08.y * temp_f31; + arg0->unk34.z = arg0->unk14.z + arg0->unk08.z * temp_f31; + arg0->unk2C *= arg0->unk20; + arg0->unk20 -= 0.01; + if (arg0->unk20 < 1.0f) { + arg0->unk20 = 1.0f; + } + if (arg0->unk00_s16 > 8) { + temp_r30 = arg0->unk40.a; + temp_r30 -= 8; + if (temp_r30 < 0) { + arg0->unk40.a = 0; + arg0->unk2C = 0.0f; + } else { + arg0->unk40.a = temp_r30; + } + } + arg0->unk00_s16++; +} + +static EffectParamData coinParticleParam = { + 1, + 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0xFF, 0x00, 0xFF, + { 0.0f, 2.0f, 1.0f }, + 0.95f, 1.0f, 0.95f, + -0.1f, + 0x00000000, + -0.2f, + -8.0f, + 0.0f +}; + +void CharModelCoinEffectCreate(s16 arg0, Vec *arg1) { + s16 temp_r29; + s16 var_r28; + s16 i; + + for (i = 0; i < 16; i++) { + temp_r29 = i * 22.5f; + coinParticleParam.unk0C.x = 5.0 * sin(temp_r29 * M_PI / 180.0); + coinParticleParam.unk0C.y = 0.1f * (frandmod(100) - 50); + coinParticleParam.unk0C.z = 5.0 * cos(temp_r29 * M_PI / 180.0); + var_r28 = CreateEffect(effectMdl[5], arg0, arg1->x, arg1->y, arg1->z, 30.0f, &coinParticleParam); + if (var_r28 == -1) { + break; + } + } +} + +static EffectParamData lbl_80131030 = { + 0, + 0xFF, 0xFF, 0x00, 0xFF, + 0xFF, 0x80, 0x00, 0xFF, + { 0.0f, 2.0f, 1.0f }, + 0.95f, 0.95f, 0.95f, + 0.0f, + 0x00000000, + -0.2f, + -16.0f, + 0.05f +}; + +static EffectParamData lbl_80131068 = { + 0, + 0xE0, 0x20, 0x20, 0xFF, + 0xE0, 0x20, 0x20, 0xFF, + { 0.0f, 2.0f, 1.0f }, + 1.0f, 1.0f, 1.0f, + 0.0f, + 0x00000000, + -0.2f, + -12.0f, + 0.05f +}; + +void fn_8004EC74(s16 character) { + Mtx sp24; + Vec sp18; + Vec spC; + UnkCharInstanceStruct *temp_r30; + ModelData *temp_r31; + s16 i; + + temp_r30 = &charInstance[character]; + temp_r31 = &Hu3DData[temp_r30->unk00]; + for (i = 0; i < 32; i++) { + if (temp_r30->unk0C[i] == temp_r31->unk_08) { + break; + } + } + if (i != 32) { + Hu3DModelObjMtxGet(temp_r30->unk00, "test11_tex_we-itemhook-r", sp24); + sp18.x = sp24[0][3]; + sp18.y = sp24[1][3]; + sp18.z = sp24[2][3]; + mtxRot(sp24, temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z); + spC.x = sp24[0][2]; + spC.y = sp24[1][2]; + spC.z = sp24[2][2]; + PSVECScale(&spC, &spC, 20.0f); + PSVECAdd(&sp18, &spC, &sp18); + fn_8004EDA4(temp_r31->camera, &sp18, &temp_r31->rot); + } +} + +void fn_8004EDA4(s16 arg0, Vec *arg1, Vec *arg2) { + Mtx sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f31; + s16 var_r28; + s16 i; + + mtxRot(sp2C, arg2->x, arg2->y, arg2->z); + sp20.x = sp2C[0][2]; + sp20.y = sp2C[1][2]; + sp20.z = sp2C[2][2]; + for (i = 0; i < 8; i++) { + temp_f31 = i * 45; + sp14.x = sp20.x * sp20.y * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.z * sin(temp_f31 * M_PI / 180.0); + sp14.y = sp20.y * sp20.y + (1.0f - sp20.y * sp20.y) * cos(temp_f31 * M_PI / 180.0); + sp14.z = sp20.y * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.x * sin(temp_f31 * M_PI / 180.0); + PSVECNormalize(&sp14, &sp14); + PSVECScale(&sp14, &lbl_80131030.unk0C, 10.0f); + var_r28 = CreateEffect(effectMdl[4], arg0, arg1->x, arg1->y, arg1->z, 20.0f, &lbl_80131030); + if (var_r28 == -1) { + break; + } + PSVECScale(&sp20, &sp8, -2.0 - 0.1 * frandmod(20)); + PSVECScale(&sp14, &sp14, 2.0f); + PSVECAdd(&sp14, &sp8, &lbl_80131068.unk0C); + var_r28 = CreateEffect(effectMdl[6], arg0, arg1->x, arg1->y, arg1->z, 20.0f, &lbl_80131068); + if (var_r28 == -1) { + break; + } + } +} + +static EffectParamData lbl_801310BC = { + 0, + 0x20, 0x20, 0xFF, 0xFF, + 0x80, 0xFF, 0x20, 0xFF, + 0.0f, 2.0f, 1.0f, + 0.95f, 0.95f, 0.95f, + 0.0f, + 0x00000000, + -0.2f, + -16.0f, + 0.06f +}; + +static EffectParamData lbl_801310F4 = { + 0, + 0x20, 0xE0, 0x20, 0xFF, + 0x20, 0xE0, 0x20, 0xFF, + 0.0f, 2.0f, 1.0f, + 1.0f, 1.0f, 1.0f, + 0.0f, + 0x00000000, + -0.2f, + -12.0f, + 0.05f +}; + +void fn_8004F058(s16 character) { + Mtx sp24; + Vec sp18; + Vec spC; + ModelData* temp_r31; + UnkCharInstanceStruct* temp_r30; + + temp_r30 = &charInstance[character]; + temp_r31 = &Hu3DData[temp_r30->unk00]; + Hu3DModelObjMtxGet(temp_r30->unk00, "test11_tex_we-ske_R_shoe1", sp24); + sp18.x = sp24[0][3]; + sp18.y = sp24[1][3]; + sp18.z = sp24[2][3]; + mtxRot(sp24, temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z); + spC.x = sp24[0][2]; + spC.y = sp24[1][2]; + spC.z = sp24[2][2]; + PSVECScale(&spC, &spC, 30.0f); + PSVECAdd(&sp18, &spC, &sp18); + fn_8004F13C(temp_r31->camera, &sp18, &temp_r31->rot); +} + +void fn_8004F13C(s16 arg0, Vec *arg1, Vec *arg2) { + Mtx sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f31; + s16 var_r28; + s16 i; + + mtxRot(sp2C, arg2->x, arg2->y, arg2->z); + sp20.x = sp2C[0][2]; + sp20.y = sp2C[1][2]; + sp20.z = sp2C[2][2]; + for (i = 0; i < 8; i++) { + temp_f31 = i * 45; + sp14.x = sp20.x * sp20.y * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.z * sin(temp_f31 * M_PI / 180.0); + sp14.y = sp20.y * sp20.y + (1.0f - sp20.y * sp20.y) * cos(temp_f31 * M_PI / 180.0); + sp14.z = sp20.y * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.x * sin(temp_f31 * M_PI / 180.0); + PSVECNormalize(&sp14, &sp14); + PSVECScale(&sp14, &lbl_801310BC.unk0C, 10.0f); + var_r28 = CreateEffect(effectMdl[4], arg0, arg1->x, arg1->y, arg1->z, 20.0f, &lbl_801310BC); + if (var_r28 == -1) { + break; + } + PSVECScale(&sp20, &sp8, -2.0 - 0.1 * frandmod(20)); + PSVECScale(&sp14, &sp14, 2.0f); + PSVECAdd(&sp14, &sp8, &lbl_801310F4.unk0C); + var_r28 = CreateEffect(effectMdl[6], arg0, arg1->x, arg1->y, arg1->z, 20.0f, &lbl_801310F4); + if (var_r28 == -1) { + break; + } + } +} + +void CharModelLayerSetAll2(s16 arg0) { + CharModelLayerSetAll(arg0); +} + +void CharModelVoiceEnableSet(s16 character, s16 motion, s32 flag) { + UnkCharInstanceStruct* temp_r31 = &charInstance[character]; + s16 i; + + if (temp_r31->unk00 == -1) { + return; + } + for (i = 0; i < 32; i++) { + if (temp_r31->unk0C[i] == motion) { + break; + } + } + if (i != 32) { + if (flag == 0) { + temp_r31->unk8C[i] |= 1; + } else { + temp_r31->unk8C[i] &= ~1; + } + } +} + +void fn_8004F52C(s16 character, s32 arg1) { + UnkCharInstanceStruct *temp_r31 = &charInstance[character]; + + if (arg1 != 0) { + temp_r31->unkAC |= 8; + return; + } else { + temp_r31->unkAC &= ~8; + } +} + +void CharModelEffectEnableSet(s16 character, s32 arg1) { + UnkCharInstanceStruct *temp_r31 = &charInstance[character]; + + if (character >= 8) { + if (arg1 == 0) { + lbl_801975B0[character] |= 0x10; + } else { + lbl_801975B0[character] &= ~0x10; + } + return; + } + if (arg1 == 0) { + temp_r31->unkAC |= 0x10; + } else { + temp_r31->unkAC &= ~0x10; + } +} + +s32 CharModelEffectNpcInit(s16 arg0, s16 arg1, s16 arg2, s16 arg3) { + Process *var_r24; + Process *var_r27; + s16 *var_r29; + + var_r24 = HuPrcCurrentGet(); + var_r27 = HuPrcChildCreate(UpdateNpcEffect, 0x64, 0x2000, 0, var_r24); + if (var_r27) { + var_r29 = HuMemDirectMallocNum(HEAP_SYSTEM, 4 * sizeof(s16), MEMORY_DEFAULT_NUM); + var_r27->user_data = var_r29; + var_r29[0] = arg0; + var_r29[1] = arg1; + var_r29[2] = arg2; + var_r29[3] = arg3; + InitEffect(); + } +} + +s32 CharModelEffectNpcInitSilent(s16 arg0, s16 arg1, s16 arg2) { + s32 sp10; + + CharModelEffectNpcInit(arg0, arg1, arg2, -1); + return sp10; +} + +static s8 lbl_80131146[] = { + 0x07, 0x20, 0x10, 0x28, + 0x01, 0x1E, 0xE7, 0xE7, + 0x01, 0x1E, 0x01, 0x1A, + 0x01, 0x14, 0x13, 0x20, + 0x02, 0x13 +}; + +static u16 lbl_80131158[] = { + 0x0051, 0x0053, + 0x0057, 0x0101, + 0x0059, 0x005B, + 0x0055, 0x0069, + 0x006A, +}; + +// Unused? +static s8 lbl_8013116A[] = { + 0x01, 0x20, 0x01, 0x15, + 0x0A, 0x1E, 0xE7, 0xE7, + 0x01, 0x1E, 0x01, 0x10, + 0x01, 0x11, 0xE7, 0xE7, + 0xE7, 0xE7 +}; + +static u16 lbl_8013117C[] = { + 0x0052, 0x0054, + 0x0058, 0x0101, + 0x005A, 0x005C, + 0x0056, 0x0069, + 0x006A +}; + +static s8 lbl_8013118E[] = { + 0x03, 0x37, 0xE7, 0xE7, + 0xE7, 0xE7, 0xE7, 0xE7, + 0xE7, 0xE7, 0x01, 0x1A, + 0xE7, 0xE7 +}; + +static u16 lbl_8013119C[] = { + 0x0051, 0x0053, + 0x0057, 0x0101, + 0x0059, 0x0068, + 0x0055 +}; + +static s8 lbl_801311AA[] = { + 0x04, 0x11, 0xE7, 0xE7, + 0xE7, 0xE7, 0xE7, 0xE7, + 0xE7, 0xE7, 0x01, 0x10, + 0xE7, 0xE7 +}; + +static u16 lbl_801311B8[] = { + 0x0052, 0x0054, + 0x0058, 0x0101, + 0x005A, 0x0067, + 0x0056 +}; + +static s8 lbl_801311C6[] = { + 0x01, 0x17, 0xE7, 0xE7, + 0xE7, 0xE7, 0xE7, 0xE7, + 0xE7, 0xE7, 0xE7, 0xE7, + 0xE7, 0xE7 +}; + +static u16 lbl_801311D4[] = { + 0x0051, 0x0053, + 0x0057, 0x0101, + 0x0059, 0x005B, + 0x0055 +}; + +static void UpdateNpcEffect(void) { + Vec sp2C; + ModelData *temp_r30; + s16 *temp_r27; + s16 temp_r25; + s16 temp_r26; + s16 temp_r28; + s16 i; + + temp_r27 = HuPrcCurrentGet()->user_data; + temp_r25 = temp_r27[0]; + temp_r26 = 0; + temp_r30 = &Hu3DData[temp_r27[0]]; + temp_r28 = temp_r27[3] - 8; + while (1) { + HuPrcVSleep(); + if (temp_r27[1] != Hu3DMotionIDGet(temp_r25)) { + continue; + } + if (temp_r30->attr & 1) { + continue; + } + temp_r26 = Hu3DMotionTimeGet(temp_r25); + switch (temp_r27[2]) { + case 0: + if (!(temp_r26 & 0xF) && !(lbl_801975B0[temp_r28] & 0x10)) { + effectDustParam.unk0C.x = 2.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); + effectDustParam.unk0C.z = 2.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + sp2C.x = temp_r30->pos.x + (frandmod(50) - 25); + sp2C.y = temp_r30->pos.y; + sp2C.z = temp_r30->pos.z + (frandmod(50) - 25); + CreateEffectDust(temp_r25, sp2C.x, sp2C.y, sp2C.z, frandmod(10) + 30, &effectDustParam); + } + if (temp_r27[3] != -1) { + for (i = 0; i < 2; i++) { + if (lbl_80131146[temp_r28 * 2 + i] == temp_r26 * 2) { + HuAudFXPlay(lbl_80131158[temp_r28]); + break; + } + } + } + break; + case 1: + if (!(temp_r26 & 3) && !(lbl_801975B0[temp_r28] & 0x10)) { + effectDustParam.unk0C.x = 4.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.y = 2.0 + 0.1 * frandmod(10); + effectDustParam.unk0C.z = 4.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + sp2C.x = temp_r30->pos.x + (frandmod(50) - 25); + sp2C.y = temp_r30->pos.y; + sp2C.z = temp_r30->pos.z + (frandmod(50) - 25); + CreateEffectDust(temp_r25, sp2C.x, sp2C.y, sp2C.z, frandmod(10) + 30, &effectDustParam); + } + if (temp_r27[3] != -1) { + for (i = 0; i < 2; i++) { + if (lbl_80131146[temp_r28 * 2 + i] == temp_r26 * 2) { + HuAudFXPlay(lbl_8013117C[temp_r28]); + break; + } + } + } + break; + case 2: + if (temp_r28 != -1) { + if (!(temp_r26 & 0x1F) && !(lbl_801975B0[temp_r28] & 0x10)) { + effectDustParam.unk0C.x = 2.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); + effectDustParam.unk0C.z = 2.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + sp2C.x = temp_r30->pos.x + (frandmod(50) - 25); + sp2C.y = temp_r30->pos.y; + sp2C.z = temp_r30->pos.z + (frandmod(50) - 25); + CreateEffectDust(temp_r25, sp2C.x, sp2C.y, sp2C.z, frandmod(10) + 30, &effectDustParam); + } + for (i = 0; i < 2; i++) { + if (lbl_8013118E[temp_r28 * 2 + i] == temp_r26 * 2) { + HuAudFXPlay(lbl_8013119C[temp_r28]); + break; + } + } + } + break; + case 3: + if (temp_r28 != -1) { + if (!(temp_r26 & 3) && !(lbl_801975B0[temp_r28] & 0x10)) { + effectDustParam.unk0C.x = 2.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); + effectDustParam.unk0C.z = 2.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + sp2C.x = temp_r30->pos.x + (frandmod(50) - 25); + sp2C.y = temp_r30->pos.y; + sp2C.z = temp_r30->pos.z + (frandmod(50) - 25); + CreateEffectDust(temp_r25, sp2C.x, sp2C.y, sp2C.z, frandmod(10) + 30, &effectDustParam); + } + for (i = 0; i < 2; i++) { + if (lbl_801311AA[temp_r28 * 2 + i] == temp_r26 * 2) { + HuAudFXPlay(lbl_801311B8[temp_r28]); + break; + } + } + } + break; + case 4: + if (temp_r28 != -1) { + if (!(temp_r26 & 7) && !(lbl_801975B0[temp_r28] & 0x10)) { + effectDustParam.unk0C.x = 2.0 * -sin(temp_r30->rot.y * M_PI / 180.0); + effectDustParam.unk0C.y = 1.0 + 0.1 * frandmod(10); + effectDustParam.unk0C.z = 2.0 * -cos(temp_r30->rot.y * M_PI / 180.0); + sp2C.x = temp_r30->pos.x + (frandmod(50) - 25); + sp2C.y = temp_r30->pos.y; + sp2C.z = temp_r30->pos.z + (frandmod(50) - 25); + CreateEffectDust(temp_r25, sp2C.x, sp2C.y, sp2C.z, frandmod(10) + 30, &effectDustParam); + } + for (i = 0; i < 2; i++) { + if (lbl_801311C6[temp_r28 * 2 + i] == temp_r26 * 2) { + HuAudFXPlay(lbl_801311D4[temp_r28]); + break; + } + } + } + break; + case 5: + if (temp_r26 != 0) { + break; + } + if (lbl_801975B0[temp_r28] & 0x10) { + break; + } + for (i = 0; i < 8; i++) { + effectStarParam.unk0C.x = 10.0 * sin(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + effectStarParam.unk0C.y = 0.0f; + effectStarParam.unk0C.z = 10.0 * cos(45.0f * i * M_PI / 180.0) * temp_r30->scale.x; + CreateEffectStar(temp_r25, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 40.0f, &effectStarParam); + } + for (i = 0; i < 8; i++) { + effectDustParam.unk0C.x = 4.0 * sin((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + effectDustParam.unk0C.y = 0.0f; + effectDustParam.unk0C.z = 4.0 * cos((45.0f * i + 22.5) * M_PI / 180.0) * temp_r30->scale.x; + CreateEffectDust(temp_r25, temp_r30->pos.x, temp_r30->pos.y + 10.0f * temp_r30->scale.x, temp_r30->pos.z, 20.0f, &effectDustParam); + } + if (temp_r28 != -1) { + HuAudFXPlay(0x61); + } + break; + } + } +} + +void CharModelStepTypeSet(s16 character, s32 arg1) { + UnkCharInstanceStruct *temp_r31 = &charInstance[character]; + + temp_r31->unkB0 = arg1; +} + +static s32 PlayStepFX(s16 character, s16 arg1, u8 arg2) { + UnkCharInstanceStruct *temp_r31; + ModelData *var_r28; + + temp_r31 = &charInstance[character]; + var_r28 = &Hu3DData[temp_r31->unk00]; + if (arg2 & 1) { + return; + } + if (temp_r31->unkB0 == 4) { + arg1 = 0x109; + } else if (temp_r31->unkB0 == 5) { + arg1 = 0x10B; + } else { + arg1 += temp_r31->unkB0; + } + if (temp_r31->unkAC & 8) { + return HuAudCharVoicePlayPos(character, arg1, &var_r28->pos); + } else { + return HuAudCharVoicePlay(character, arg1); + } +} diff --git a/src/game/objmain.c b/src/game/objmain.c index 4cd4a998..88ab203a 100644 --- a/src/game/objmain.c +++ b/src/game/objmain.c @@ -1,4 +1,5 @@ #include "game/audio.h" +#include "game/chrman.h" #include "game/esprite.h" #include "game/hsfdraw.h" #include "game/hsfman.h" From b699b48c3f91dde4d72d7eb1be4cd29201dfe501 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 19 Feb 2024 22:06:24 -0600 Subject: [PATCH 031/106] Match more of musyx --- configure.py | 18 +++++++++--------- include/math.h | 1 + tools/project.py | 4 +++- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/configure.py b/configure.py index a7d06e7f..042bbe88 100644 --- a/configure.py +++ b/configure.py @@ -271,7 +271,7 @@ def DolphinLib(lib_name, objects): "objects": objects, } -def MusyX(objects, mw_version="GC/2.6", debug=False, major=2, minor=0, patch=0): +def MusyX(objects, mw_version="GC/1.3.2", debug=False, major=1, minor=5, patch=4): cflags = cflags_musyx if not debug else cflags_musyx_debug return { "lib": "musyx", @@ -665,34 +665,34 @@ config.libs = [ MusyX( objects={ Object(Matching, "musyx/runtime/seq.c"), - Object(NonMatching, "musyx/runtime/synth.c"), + Object(Matching, "musyx/runtime/synth.c"), Object(Matching, "musyx/runtime/seq_api.c"), Object(Matching, "musyx/runtime/snd_synthapi.c"), Object(NonMatching, "musyx/runtime/stream.c"), Object(Matching, "musyx/runtime/synthdata.c"), Object(NonMatching, "musyx/runtime/synthmacros.c"), - Object(NonMatching, "musyx/runtime/synthvoice.c"), + Object(Matching, "musyx/runtime/synthvoice.c"), Object(Matching, "musyx/runtime/synth_ac.c"), Object(Matching, "musyx/runtime/synth_dbtab.c"), - Object(NonMatching, "musyx/runtime/synth_adsr.c"), + Object(Matching, "musyx/runtime/synth_adsr.c"), Object(NonMatching, "musyx/runtime/synth_vsamples.c"), - Object(NonMatching, "musyx/runtime/s_data.c"), + Object(Matching, "musyx/runtime/s_data.c"), Object(NonMatching, "musyx/runtime/hw_dspctrl.c"), Object(Matching, "musyx/runtime/hw_volconv.c"), Object(Matching, "musyx/runtime/snd3d.c"), Object(Matching, "musyx/runtime/snd_init.c"), - Object(NonMatching, "musyx/runtime/snd_math.c"), + Object(Matching, "musyx/runtime/snd_math.c"), Object(NonMatching, "musyx/runtime/snd_midictrl.c"), - Object(NonMatching, "musyx/runtime/snd_service.c"), + Object(Matching, "musyx/runtime/snd_service.c"), Object(Matching, "musyx/runtime/hardware.c"), Object(Matching, "musyx/runtime/dsp_import.c"), Object(Matching, "musyx/runtime/hw_aramdma.c"), Object(Matching, "musyx/runtime/hw_dolphin.c"), Object(Matching, "musyx/runtime/hw_memory.c"), Object(Matching, "musyx/runtime/CheapReverb/creverb_fx.c"), - Object(NonMatching, "musyx/runtime/CheapReverb/creverb.c"), + Object(Matching, "musyx/runtime/CheapReverb/creverb.c"), Object(Matching, "musyx/runtime/StdReverb/reverb_fx.c"), - Object(NonMatching, "musyx/runtime/StdReverb/reverb.c"), + Object(Matching, "musyx/runtime/StdReverb/reverb.c"), Object(Matching, "musyx/runtime/Delay/delay_fx.c"), Object(Matching, "musyx/runtime/Chorus/chorus_fx.c"), } diff --git a/include/math.h b/include/math.h index db5ce270..3a508d50 100644 --- a/include/math.h +++ b/include/math.h @@ -36,6 +36,7 @@ double asin(double x); double atan2(double y, double x); double fmod(double x, double y); double log(double x); +double pow(double x, double y); float tanf(float x); float sinf(float x); float cosf(float x); diff --git a/tools/project.py b/tools/project.py index 0cc9e4c0..0f5ad89b 100644 --- a/tools/project.py +++ b/tools/project.py @@ -886,7 +886,9 @@ def generate_objdiff_config(config, build_config): return lib, obj = result - unit_src_path = config.src_dir / obj.options["source"] + src_dir = Path(lib.get("src_dir", config.src_dir)) + + unit_src_path = src_dir / obj.options["source"] if not unit_src_path.exists(): objdiff_config["units"].append(unit_config) return From 89341bcba68889b00fbdb9b733c3ae6f4d3283d3 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Tue, 20 Feb 2024 22:28:50 -0800 Subject: [PATCH 032/106] Matched game/mapspace --- config/GMPE01_00/splits.txt | 2 +- config/GMPE01_00/symbols.txt | 2 +- configure.py | 2 +- include/game/hsfformat.h | 2 +- include/game/mapspace.h | 17 + src/game/hsfload.c | 4 +- src/game/mapspace.c | 911 +++++++++++++++++++++++++++++++++++ 7 files changed, 934 insertions(+), 6 deletions(-) create mode 100755 include/game/mapspace.h create mode 100755 src/game/mapspace.c diff --git a/config/GMPE01_00/splits.txt b/config/GMPE01_00/splits.txt index bcebe4b5..94bf7283 100644 --- a/config/GMPE01_00/splits.txt +++ b/config/GMPE01_00/splits.txt @@ -266,7 +266,7 @@ game/chrman.c: game/mapspace.c: .text start:0x80050C5C end:0x80054A00 - .bss start:0x80197650 end:0x80197AB8 + .bss start:0x80197650 end:0x80197AC0 .sbss start:0x801D3E18 end:0x801D3E38 .sdata2 start:0x801D50D0 end:0x801D5100 diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 695c1325..b4c32041 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5560,7 +5560,7 @@ ColisionIdx = .bss:0x80197708; // type:object size:0x78 HitFaceVec = .bss:0x80197780; // type:object size:0x180 OldXYZ = .bss:0x80197900; // type:object size:0xC scope:local HitFace = .bss:0x8019790C; // type:object size:0x180 -CharObject = .bss:0x80197A8C; // type:object size:0x28 +CharObject = .bss:0x80197A8C; // type:object size:0x30 SimpleControl = .bss:0x80197AC0; // type:object size:0x19C SoundBuffer = .bss:0x80197C60; // type:object size:0x500 scope:local align:32 WorkBuffer = .bss:0x80198160; // type:object size:0x40 scope:local align:32 diff --git a/configure.py b/configure.py index 042bbe88..4511667e 100644 --- a/configure.py +++ b/configure.py @@ -351,7 +351,7 @@ config.libs = [ Object(Matching, "game/card.c"), Object(Matching, "game/armem.c"), Object(Matching, "game/chrman.c"), - Object(NonMatching, "game/mapspace.c"), + Object(Matching, "game/mapspace.c"), Object(Matching, "game/THPSimple.c"), Object(Matching, "game/THPDraw.c"), Object(Matching, "game/thpmain.c"), diff --git a/include/game/hsfformat.h b/include/game/hsfformat.h index 3a291ab1..7d1e4f79 100644 --- a/include/game/hsfformat.h +++ b/include/game/hsfformat.h @@ -374,7 +374,7 @@ typedef struct hsf_map_attr { float minZ; float maxX; float maxZ; - s16 *data; + u16 *data; u32 dataLen; } HsfMapAttr; diff --git a/include/game/mapspace.h b/include/game/mapspace.h new file mode 100755 index 00000000..d1e3fc59 --- /dev/null +++ b/include/game/mapspace.h @@ -0,0 +1,17 @@ +#ifndef _GAME_MAPSPACE_H +#define _GAME_MAPSPACE_H + +#include "game/hsfformat.h" +#include "game/object.h" + +#include "dolphin.h" + +void MapWall(float arg0, float arg1, float arg2, float arg3); +void MapWallCheck(float *arg0, float *arg1, HsfMapAttr *arg2); +float MapPos(float arg0, float arg1, float arg2, float arg3, Vec *arg4); +BOOL Hitcheck_Triangle_with_Sphere(Vec *arg0, Vec *arg1, float arg2, Vec *arg3); +BOOL Hitcheck_Quadrangle_with_Sphere(Vec *arg0, Vec *arg1, float arg2, Vec *arg3); +void AppendAddXZ(float arg0, float arg1, float arg2); +void CharRotInv(Mtx arg0, Mtx arg1, Vec *arg2, omObjData *arg3); + +#endif diff --git a/src/game/hsfload.c b/src/game/hsfload.c index f9f448cc..1fe557d7 100644 --- a/src/game/hsfload.c +++ b/src/game/hsfload.c @@ -894,14 +894,14 @@ static void MapAttrLoad(void) HsfMapAttr *mapattr_base; HsfMapAttr *mapattr_file; HsfMapAttr *mapattr_new; - s16 *data; + u16 *data; if(head.mapAttr.count) { mapattr_file = mapattr_base = (HsfMapAttr *)((u32)fileptr+head.mapAttr.ofs); mapattr_new = mapattr_base; Model.mapAttrCnt = head.mapAttr.count; Model.mapAttr = mapattr_base; - data = (s16 *)&mapattr_base[head.mapAttr.count]; + data = (u16 *)&mapattr_base[head.mapAttr.count]; for(i=0; idata = &data[(u32)mapattr_file->data]; } diff --git a/src/game/mapspace.c b/src/game/mapspace.c new file mode 100755 index 00000000..47c9293b --- /dev/null +++ b/src/game/mapspace.c @@ -0,0 +1,911 @@ +#include "game/mapspace.h" +#include "game/hsfman.h" + +#include "math.h" + +extern void HuSetVecF(Vec*, double, double, double); + +static BOOL PolygonRangeCheck(HsfMapAttr *arg0, float arg1, float arg2, float *arg3, float arg4); +static s32 DefIfnnerMapCircle(Vec *arg0, s16 *arg1, Vec *arg2, Vec *arg3); +static s32 CalcPPLength(float *arg0, s16 *arg1, Vec *arg2); +static float MapIflnnerCalc(float arg0, float arg1, float arg2, Vec *arg3, Vec *arg4, Vec *arg5); +static float MapCalcPoint(float arg0, float arg1, float arg2, Vec *arg3, u16 *arg4); +static BOOL AreaCheck(float arg0, float arg1, u16 *arg2, Vec *arg3); +static s32 MapIflnnerTriangle(float arg0, float arg1, u16 *arg2, Vec *arg3); +static s32 MapIflnnerQuadrangle(float arg0, float arg1, u16 *arg2, Vec *arg3); +static BOOL GetPolygonCircleMtx(s16 *arg0, Vec *arg1, float *arg2, float *arg3); +static s32 PrecalcPntToTriangle(Vec *arg0, Vec *arg1, Vec *arg2, Vec* arg3, Vec *arg4, Vec *arg5); +static void DefSetHitFace(float arg0, float arg1, float arg2); + +omObjData *MapObject[16]; +Mtx MapMT; +Mtx MapMTR; +static Vec MTRAdd; +static Vec FieldVec; +s32 ColisionIdx[10][3]; +Vec HitFaceVec[32]; +static Vec OldXYZ; +Vec HitFace[32]; +u8 CharObject[0x30]; + +float AddX; +float AddZ; +s32 nMap; +s32 nChar; +s32 HitFaceCount; +static HsfData *AttrHsf; +static Vec *topvtx; +s32 ColisionCount; + +void MapWall(float arg0, float arg1, float arg2, float arg3) { + float sp28[4]; + float sp18[4]; + float var_f31; + float var_f30; + float var_f29; + omObjData *var_r25; + ModelData *var_r26; + HsfData *temp_r29; + HsfMapAttr *sp14; + HsfMapAttr *var_r31; + s32 temp_r24; + s32 i; + s32 j; + + for (i = 0; i < nMap; i++) { + var_r25 = MapObject[i]; + temp_r24 = MapObject[i]->model[0]; + sp18[0] = sp28[0] = arg1; + sp18[1] = sp28[1] = arg2; + sp18[2] = sp28[2] = arg3; + sp18[3] = sp28[3] = arg0; + var_f31 = sp28[3]; + CharRotInv(MapMT, MapMTR, (Vec*) sp18, var_r25); + ColisionCount = 0; + HitFaceCount = 0; + var_r26 = &Hu3DData[temp_r24]; + temp_r29 = var_r26->hsfData; + AttrHsf = temp_r29; + sp14 = AttrHsf->mapAttr; + var_r31 = temp_r29->mapAttr; + for (j = 0; j < temp_r29->mapAttrCnt; j++, var_r31++) { + var_f30 = sp18[0]; + var_f29 = sp18[2]; + sp18[3] = arg0; + if (var_r31->minX <= var_f30 + var_f31 && var_r31->maxX > var_f30 - var_f31 + && var_r31->minZ <= var_f29 + var_f31 && var_r31->maxZ > var_f29 - var_f31) { + MapWallCheck(sp28, sp18, var_r31); + } + } + } +} + +void MapWallCheck(float *arg0, float *arg1, HsfMapAttr *arg2) { + u32 var_r30; + u16 temp_r29; + u16 *var_r31; + s32 var_r28; + Mtx sp10; + + var_r28 = 0; + var_r28 = 0; + topvtx = AttrHsf->vertex->data; + var_r31 = arg2->data; + MTRAdd.x = AddX; + MTRAdd.z = AddZ; + MTRAdd.y = 0.0f; + PSMTXInvXpose(MapMT, sp10); + PSMTXMultVec(sp10, &MTRAdd, &MTRAdd); + for (var_r30 = 0; var_r30 < arg2->dataLen;) { + temp_r29 = *var_r31; + if (temp_r29 & 0x8000) { + GetPolygonCircleMtx((s16*) var_r31, topvtx, arg0, arg1); + var_r28++; + } + var_r30 += (temp_r29 & 0xFF) + 1; + var_r31 += (temp_r29 & 0xFF) + 1; + } +} + +float MapPos(float arg0, float arg1, float arg2, float arg3, Vec *arg4) { + Vec sp14; + float var_f31; + float var_f29; + float sp10; + float var_f28; + HsfMapAttr *var_r29; + ModelData *var_r24; + omObjData *temp_r27; + s32 i; + s32 j; + HsfData *temp_r25; + Mtx sp20; + + var_f31 = -100000.0f; + ColisionCount = 0; + for (i = 0; i < nMap; i++) { + temp_r27 = MapObject[i]; + var_r24 = &Hu3DData[*temp_r27->model]; + temp_r25 = var_r24->hsfData; + sp14.x = arg0; + sp14.y = arg1; + sp14.z = arg2; + CharRotInv(MapMT, MapMTR, &sp14, temp_r27); + var_f29 = sp14.x; + var_f28 = sp14.z; + AttrHsf = temp_r25; + var_r29 = AttrHsf->mapAttr; + for (j = 0; j < temp_r25->mapAttrCnt; j++, var_r29++) { + if (var_r29->minX <= var_f29 && var_r29->maxX >= var_f29 + && var_r29->minZ <= var_f28 && var_r29->maxZ >= var_f28 + && PolygonRangeCheck(var_r29, var_f29, var_f28, &sp10, arg1 + arg3) == TRUE) { + sp14.x = var_f29; + sp14.y = sp10; + sp14.z = var_f28; + PSMTXMultVec(MapMT, &sp14, &sp14); + sp10 = sp14.y; + if (sp10 > arg1 + arg3 || fabs(arg1 - sp10) > fabs(arg1 - var_f31)) { + continue; + } + var_f31 = sp10; + arg4->x = FieldVec.x; + arg4->y = FieldVec.y; + arg4->z = FieldVec.z; + PSMTXInvXpose(MapMT, sp20); + PSMTXMultVec(sp20, arg4, arg4); + var_f31 = sp14.y; + } + } + } + if (var_f31 == -100000.0f) { + arg4->x = 0.0f; + arg4->y = 1.0f; + arg4->x = 0.0f; + return arg1; + } else { + return var_f31; + } +} + +BOOL PolygonRangeCheck(HsfMapAttr *arg0, float arg1, float arg2, float *arg3, float arg4) { + Vec sp20; + float temp_f29; + float var_f27; + u16 *var_r31; + u16 temp_r29; + s32 var_r28; + s32 var_r27; + s32 i; + + var_r28 = 0; + var_r27 = 0; + var_f27 = 100000.0f; + topvtx = AttrHsf->vertex->data; + var_r31 = arg0->data; + for (i = 0; i < arg0->dataLen;) { + temp_r29 = *var_r31; + if (temp_r29 & 0x8000) { + i += (temp_r29 & 0xFF) + 1; + var_r31 += (temp_r29 & 0xFF) + 1; + } else { + switch (temp_r29 & 0xFF) { + case 1: + i += 2; + var_r31 += 2; + break; + case 2: + i += 3; + var_r31 += 3; + break; + case 3: + if (AreaCheck(arg1, arg2, var_r31, topvtx) == TRUE) { + var_r28++; + if (MapIflnnerTriangle(arg1, arg2, var_r31, topvtx) == 1) { + temp_f29 = MapCalcPoint(arg1, 0.0f, arg2, topvtx, var_r31); + sp20.x = arg1; + sp20.y = temp_f29; + sp20.z = arg2; + PSMTXMultVec(MapMT, &sp20, &sp20); + if (arg4 > sp20.y && var_f27 > fabs(arg4 - sp20.y)) { + var_f27 = fabs(arg4 - sp20.y); + *arg3 = temp_f29; + var_r27 = 1; + } + } + } + i += 4; + var_r31 += 4; + break; + case 4: + if (AreaCheck(arg1, arg2, var_r31, topvtx) == TRUE) { + var_r28++; + if (MapIflnnerQuadrangle(arg1, arg2, var_r31, topvtx) == 1) { + temp_f29 = MapCalcPoint(arg1, 0.0f, arg2, topvtx, var_r31); + sp20.x = arg1; + sp20.y = temp_f29; + sp20.z = arg2; + PSMTXMultVec(MapMT, &sp20, &sp20); + if (arg4 > sp20.y) { + if (var_f27 > fabs(arg4 - sp20.y)) { + var_f27 = fabs(arg4 - sp20.y); + *arg3 = temp_f29; + var_r27 = 1; + } + } + } + } + i += 5; + var_r31 += 5; + break; + default: + i++; + var_r31++; + break; + } + } + } + if (var_r27 != 0) { + return TRUE; + } else { + return FALSE; + } +} + +static s32 DefIfnnerMapCircle(Vec *arg0, s16 *arg1, Vec *arg2, Vec *arg3) { + float temp_f30; + float temp_f29; + float temp_f28; + float var_f31; + s32 var_r28; + s32 var_r27; + s32 var_r25; + + temp_f30 = arg0->x; + temp_f29 = arg0->y; + temp_f28 = arg0->z; + var_r27 = *arg1 & 0xFF; + arg1++; + if (var_r27 == 3) { + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[0]], &arg2[arg1[1]], arg3); + if (var_f31 > 0.0f) { + for (var_r28 = 1; var_r28 < var_r27; var_r28++) { + var_r25 = (var_r28 + 1) % var_r27; + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[var_r28]], &arg2[arg1[var_r25]], arg3); + if (var_f31 < 0.0f) { + return 0; + } + } + return 1; + } else { + for (var_r28 = 1; var_r28 < var_r27; var_r28++) { + var_r25 = (var_r28 + 1) % var_r27; + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[var_r28]], &arg2[arg1[var_r25]], arg3); + if (var_f31 > 0.0f) { + return 0; + } + } + return 1; + } + } else if (var_r27 == 4) { + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[0]], &arg2[arg1[2]], arg3); + if (var_f31 > 0.0f) { + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[2]], &arg2[arg1[3]], arg3); + if (var_f31 < 0.0f) { + var_r27 = 1; + } else { + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[3]], &arg2[arg1[0]], arg3); + if (var_f31 < 0.0f) { + var_r27 = 1; + } + } + } else { + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[2]], &arg2[arg1[3]], arg3); + if (var_f31 > 0.0f) { + var_r27 = 1; + } else { + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[3]], &arg2[arg1[0]], arg3); + if (var_f31 > 0.0f) { + var_r27 = 1; + } + } + } + if (var_r27 != 0) { + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[0]], &arg2[arg1[3]], arg3); + if (var_f31 > 0.0f) { + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[3]], &arg2[arg1[1]], arg3); + if (var_f31 < 0.0f) { + return 0; + } + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[1]], &arg2[arg1[0]], arg3); + if (var_f31 < 0.0f) { + return 0; + } + } else { + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[3]], &arg2[arg1[1]], arg3); + if (var_f31 > 0.0f) { + return 0; + } + var_f31 = MapIflnnerCalc(temp_f30, temp_f29, temp_f28, &arg2[arg1[1]], &arg2[arg1[0]], arg3); + if (var_f31 > 0.0f) { + return 0; + } + } + } + } + return 0; +} + +static inline void MapspaceInlineFunc00(Vec *arg0) { + float sp24; + float sp28; + float sp2C; + float sp14; + + sp24 = arg0->x; + sp28 = arg0->y; + sp2C = arg0->z; + sp14 = sqrtf(sp24 * sp24 + sp28 * sp28 + sp2C * sp2C); + if (sp14 != 0.0f) { + arg0->x /= sp14; + arg0->y /= sp14; + arg0->z /= sp14; + } +} + +static inline void MapspaceInlineFunc01(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3) { + float sp48; + float sp4C; + float sp50; + float temp_f18; + float temp_f19; + float temp_f20; + + sp48 = arg2->x - arg1->x; + sp4C = arg2->y - arg1->y; + sp50 = arg2->z - arg1->z; + temp_f18 = arg3->x - arg1->x; + temp_f19 = arg3->y - arg1->y; + temp_f20 = arg3->z - arg1->z; + arg0->x = sp4C * temp_f20 - sp50 * temp_f19; + arg0->y = sp50 * temp_f18 - sp48 * temp_f20; + arg0->z = sp48 * temp_f19 - sp4C * temp_f18; + MapspaceInlineFunc00(arg0); +} + +static s32 CalcPPLength(float *arg0, s16 *arg1, Vec *arg2) { + Vec *temp_r29; + Vec sp68; + float temp_f25; + float temp_f24; + float temp_f23; + float temp_f22; + float temp_f21; + float sp5C; + float sp58; + float sp54; + s16 temp_r24; + s16 temp_r22; + s32 var_r23; + + var_r23 = -1; + temp_r24 = arg1[0]; + if (!(temp_r24 & 0x8000)) { + return 0; + } + if ((temp_r24 & 0xFF) == 4) { + MapspaceInlineFunc01(&sp68, &arg2[arg1[1]], &arg2[arg1[4]], &arg2[arg1[3]]); + } else { + MapspaceInlineFunc01(&sp68, &arg2[arg1[1]], &arg2[arg1[2]], &arg2[arg1[3]]); + } + temp_r22 = arg1[1]; + temp_r29 = &arg2[temp_r22]; + sp5C = temp_r29->x; + sp58 = temp_r29->y; + sp54 = temp_r29->z; + temp_f24 = sp5C - arg0[0]; + temp_f23 = sp58 - arg0[1]; + temp_f22 = sp54 - arg0[2]; + temp_f21 = sp68.x * temp_f24 + sp68.y * temp_f23 + sp68.z * temp_f22; + if (temp_f21 >= 0.0f) { + var_r23 = 1; + } + if (fabs(temp_f21) > arg0[3]) { + return 0; + } + temp_f25 = sp68.x * temp_f24 + sp68.y * temp_f23 + sp68.z * temp_f22; + arg0[0] += sp68.x * temp_f25; + arg0[1] += sp68.y * temp_f25; + arg0[2] += sp68.z * temp_f25; + return var_r23; +} + +static float MapIflnnerCalc(float arg0, float arg1, float arg2, Vec *arg3, Vec *arg4, Vec *arg5) { + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f27; + float temp_f26; + float temp_f25; + + temp_f31 = arg3->x - arg0; + temp_f30 = arg3->y - arg1; + temp_f29 = arg3->z - arg2; + temp_f28 = arg4->x - arg0; + temp_f27 = arg4->y - arg1; + temp_f26 = arg4->z - arg2; + temp_f25 = arg5->x * (temp_f30 * temp_f26 - temp_f29 * temp_f27) + + arg5->y * (temp_f29 * temp_f28 - temp_f31 * temp_f26) + + arg5->z * (temp_f31 * temp_f27 - temp_f30 * temp_f28); + return temp_f25; +} + +static float MapCalcPoint(float arg0, float arg1, float arg2, Vec *arg3, u16 *arg4) { + Vec sp40; + float sp3C; + float sp38; + float sp34; + float sp30; + float sp2C; + float sp28; + float var_f28; + float var_f26; + float var_f25; + float var_f27; + float var_f24; + s32 temp_r27; + Vec *temp_r30; + + temp_r27 = ColisionCount - 1; + temp_r30 = &arg3[ColisionIdx[temp_r27][0]]; + sp34 = temp_r30->x; + sp38 = temp_r30->y; + sp3C = temp_r30->z; + sp30 = arg0; + var_f26 = arg1; + sp2C = arg2; + sp28 = 1.0f; + MapspaceInlineFunc01(&sp40, &arg3[ColisionIdx[temp_r27][0]], &arg3[ColisionIdx[temp_r27][1]], &arg3[ColisionIdx[temp_r27][2]]); + var_f25 = sp40.x; + var_f27 = sp40.y; + var_f24 = sp40.z; + FieldVec.x = var_f25; + FieldVec.y = var_f27; + FieldVec.z = var_f24; + var_f28 = var_f25 * (sp34 - sp30) + var_f27 * (sp38 - var_f26) + var_f24 * (sp3C - sp2C); + var_f28 /= var_f27; + return var_f26 + sp28 * var_f28; +} + +static BOOL AreaCheck(float arg0, float arg1, u16 *arg2, Vec *arg3) { + float var_f31; + float var_f30; + float var_f29; + float var_f28; + s32 var_r29; + s32 temp_r31; + s32 i; + + var_f31 = var_f30 = -100000.0f; + var_f29 = var_f28 = 100000.0f; + var_r29 = *arg2 & 0xFF; + arg2++; + for (i = 0; i < var_r29; i++, arg2++) { + temp_r31 = *arg2; + if (var_f29 > arg3[temp_r31].x) { + var_f29 = arg3[temp_r31].x; + } + if (var_f31 < arg3[temp_r31].x) { + var_f31 = arg3[temp_r31].x; + } + if (var_f28 > arg3[temp_r31].z) { + var_f28 = arg3[temp_r31].z; + } + if (var_f30 < arg3[temp_r31].z) { + var_f30 = arg3[temp_r31].z; + } + } + if (var_f29 <= arg0 && var_f31 >= arg0 + && var_f28 <= arg1 && var_f30 >= arg1) { + return TRUE; + } else { + return FALSE; + } +} + +static inline float MapspaceInlineFunc02(float arg0, float arg1, Vec *arg2, Vec *arg3) { + float sp54; + float sp58; + float sp5C; + float sp60; + float sp64; + + sp54 = arg2->x - arg0; + sp58 = arg2->z - arg1; + sp5C = arg3->x - arg0; + sp60 = arg3->z - arg1; + sp64 = -(sp58 * sp5C - sp54 * sp60); + return sp64; +} + +static s32 MapIflnnerTriangle(float arg0, float arg1, u16 *arg2, Vec *arg3) { + Vec sp68; + float var_f29; + s32 var_r21; + s32 i; + + MapspaceInlineFunc01(&sp68, &arg3[arg2[1]], &arg3[arg2[2]], &arg3[arg2[3]]); + if (sp68.y == 0.0f) { + return 0; + } + arg2++; + var_f29 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[0]], &arg3[arg2[1]]); + if (var_f29 > 0.0f) { + for (i = 1; i < 3; i++) { + var_r21 = (i + 1) % 3; + var_f29 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[i]], &arg3[arg2[var_r21]]); + if (var_f29 < 0.0f) { + return 0; + } + } + } else { + for (i = 1; i < 3; i++) { + var_r21 = (i + 1) % 3; + var_f29 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[i]], &arg3[arg2[var_r21]]); + if (var_f29 > 0.0f) { + return 0; + } + } + } + ColisionIdx[ColisionCount][0] = arg2[0]; + ColisionIdx[ColisionCount][1] = arg2[1]; + ColisionIdx[ColisionCount][2] = arg2[2]; + ColisionCount++; + return 1; +} + +static s32 MapIflnnerQuadrangle(float arg0, float arg1, u16 *arg2, Vec *arg3) { + Vec sp158; + float var_f31; + s32 var_r28; + + MapspaceInlineFunc01(&sp158, &arg3[arg2[1]], &arg3[arg2[2]], &arg3[arg2[3]]); + if (sp158.y == 0.0f) { + return 0; + } + var_r28 = 0; + arg2++; + var_f31 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[0]], &arg3[arg2[3]]); + if (var_f31 > 0.0f) { + var_f31 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[3]], &arg3[arg2[2]]); + if (var_f31 < 0.0f) { + var_r28 = 1; + } else { + var_f31 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[2]], &arg3[arg2[0]]); + if (var_f31 < 0.0f) { + var_r28 = 1; + } + } + } else { + var_f31 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[3]], &arg3[arg2[2]]); + if (var_f31 > 0.0f) { + var_r28 = 1; + } else { + var_f31 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[2]], &arg3[arg2[0]]); + if (var_f31 > 0.0f) { + var_r28 = 1; + } + } + } + if (var_r28 == 0) { + ColisionIdx[ColisionCount][0] = arg2[0]; + ColisionIdx[ColisionCount][1] = arg2[3]; + ColisionIdx[ColisionCount][2] = arg2[2]; + ColisionCount++; + return 1; + } + var_f31 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[0]], &arg3[arg2[1]]); + if (var_f31 > 0.0f) { + var_f31 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[1]], &arg3[arg2[3]]); + if (var_f31 < 0.0f) { + return 0; + } + var_f31 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[3]], &arg3[arg2[0]]); + if (var_f31 < 0.0f) { + return 0; + } + } else { + var_f31 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[1]], &arg3[arg2[3]]); + if (var_f31 > 0.0f) { + return 0; + } + var_f31 = MapspaceInlineFunc02(arg0, arg1, &arg3[arg2[3]], &arg3[arg2[0]]); + if (var_f31 > 0.0f) { + return 0; + } + } + ColisionIdx[ColisionCount][0] = arg2[0]; + ColisionIdx[ColisionCount][1] = arg2[1]; + ColisionIdx[ColisionCount][2] = arg2[3]; + ColisionCount++; + return 1; +} + +static inline s32 MapspaceInlineFunc03(float *spE0, s16 *temp_r31, Vec *arg1) { + Vec spAC; + Vec *temp_r21; + float sp70; + float sp74; + float sp78; + float sp7C; + s16 sp8; + + MapspaceInlineFunc01(&spAC, &arg1[temp_r31[0]], &arg1[temp_r31[1]], &arg1[temp_r31[2]]); + sp8 = temp_r31[1]; + temp_r21 = &arg1[sp8]; + sp70 = temp_r21->x; + sp74 = temp_r21->y; + sp78 = temp_r21->z; + sp70 -= spE0[0]; + sp74 -= spE0[1]; + sp78 -= spE0[2]; + sp7C = spAC.x * sp70 + spAC.y * sp74 + spAC.z * sp78; + return (sp7C < 0.0f) ? -1 : 1; +} + +static BOOL GetPolygonCircleMtx(s16 *arg0, Vec *arg1, float *arg2, float *arg3) { + Vec sp144[4]; + Vec sp120[3]; + float spE0[4]; + float spD0[4]; + float temp_f31; + float temp_f30; + float var_f21; + Vec spC4; + Vec spB8; + s32 spA8; + float spA4; + s32 spA0; + BOOL var_r17; + s16 *temp_r31; + Vec *temp_r29; + Mtx spF0; + + spA8 = 0; + spD0[0] = spE0[0] = arg3[0] + MTRAdd.x; + spD0[1] = spE0[1] = arg3[1]; + spD0[2] = spE0[2] = arg3[2] + MTRAdd.z; + spD0[3] = spE0[3] = arg3[3]; + temp_r31 = arg0 + 1; + if ((spA0 = CalcPPLength(spE0, arg0, arg1)) == 0) { + return 0; + } + spC4.x = spC4.y = spC4.z = 0.0f; + if ((arg0[0] & 0xFF) == 4) { + sp144[0].x = arg1[temp_r31[0]].x; + sp144[0].y = arg1[temp_r31[0]].y; + sp144[0].z = arg1[temp_r31[0]].z; + sp144[1].x = arg1[temp_r31[1]].x; + sp144[1].y = arg1[temp_r31[1]].y; + sp144[1].z = arg1[temp_r31[1]].z; + sp144[2].x = arg1[temp_r31[2]].x; + sp144[2].y = arg1[temp_r31[2]].y; + sp144[2].z = arg1[temp_r31[2]].z; + sp144[3].x = arg1[temp_r31[3]].x; + sp144[3].y = arg1[temp_r31[3]].y; + sp144[3].z = arg1[temp_r31[3]].z; + var_r17 = Hitcheck_Quadrangle_with_Sphere(sp144, (Vec*) spD0, spE0[3], &spC4); + } else { + sp120[0].x = arg1[temp_r31[0]].x; + sp120[0].y = arg1[temp_r31[0]].y; + sp120[0].z = arg1[temp_r31[0]].z; + sp120[1].x = arg1[temp_r31[1]].x; + sp120[1].y = arg1[temp_r31[1]].y; + sp120[1].z = arg1[temp_r31[1]].z; + sp120[2].x = arg1[temp_r31[2]].x; + sp120[2].y = arg1[temp_r31[2]].y; + sp120[2].z = arg1[temp_r31[2]].z; + var_r17 = Hitcheck_Triangle_with_Sphere(sp120, (Vec*) spD0, spE0[3], &spC4); + } + if (var_r17 == TRUE) { + spD0[0] = arg2[0] + AddX; + spD0[1] = arg2[1]; + spD0[2] = arg2[2] + AddZ; + PSMTXMultVec(MapMT, &spC4, &spC4); + DefSetHitFace(spC4.x, spC4.y, spC4.z); + temp_r29 = &HitFaceVec[HitFaceCount]; + MapspaceInlineFunc01(temp_r29, &arg1[arg0[0]], &arg1[arg0[1]], &arg1[arg0[2]]); + temp_f31 = spC4.x - spD0[0]; + spA4 = spC4.y - spD0[1]; + temp_f30 = spC4.z - spD0[2]; + var_f21 = spE0[3] - sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30); + HitFaceCount++; + if (spA0 > 0) { + spE0[0] = OldXYZ.x; + spE0[1] = OldXYZ.y; + spE0[2] = OldXYZ.z; + PSMTXMultVec(MapMTR, (Vec*) &spE0, (Vec*) &spE0); + if (MapspaceInlineFunc03(spE0, temp_r31, arg1) < 0) { + spB8.x = spE0[0] - spD0[0]; + spB8.y = spE0[1] - spD0[1]; + spB8.z = spE0[2] - spD0[2]; + MapspaceInlineFunc00(&spB8); + if (DefIfnnerMapCircle((Vec*) spD0, arg0 - 1, arg1, &spB8) == 1) { + var_f21 = spE0[3] + sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30); + } + } else { + var_f21 = 0.0f; + } + } + if (var_f21 > 0.0f) { + AppendAddXZ(-temp_f31, -temp_f30, var_f21); + MTRAdd.x = AddX; + MTRAdd.z = AddZ; + MTRAdd.y = 0.0f; + PSMTXInvXpose(MapMT, spF0); + PSMTXMultVec(spF0, &MTRAdd, &MTRAdd); + } + } + return var_r17; +} + +static s32 PrecalcPntToTriangle(Vec *arg0, Vec *arg1, Vec *arg2, Vec* arg3, Vec *arg4, Vec *arg5) { + Vec sp14; + Vec sp8; + float temp_f28; + float temp_f30; + float temp_f29; + float temp_f31; + + HuSetVecF(&sp14, -arg4->x, -arg4->y, -arg4->z); + temp_f28 = 1.0f / (-(arg1->z * arg2->y * arg3->x) + arg1->y * arg2->z * arg3->x + arg1->z * arg2->x * arg3->y - arg1->x * arg2->z * arg3->y - arg1->y * arg2->x * arg3->z + arg1->x * arg2->y * arg3->z); + temp_f30 = temp_f28 * (arg2->z * (arg3->y * sp14.x - arg3->x * sp14.y) + arg2->y * (arg3->x * sp14.z - arg3->z * sp14.x) + arg2->x * (arg3->z * sp14.y - arg3->y * sp14.z)); + temp_f29 = temp_f28 * (arg1->z * (arg3->x * sp14.y - arg3->y * sp14.x) + arg1->y * (arg3->z * sp14.x - arg3->x * sp14.z) + arg1->x * (arg3->y * sp14.z - arg3->z * sp14.y)); + if (temp_f30 > 0.0f && temp_f29 > 0.0f && temp_f30 + temp_f29 > 1.0f) { + PSVECSubtract(arg2, arg1, &sp14); + PSVECSubtract(arg4, arg1, &sp8); + temp_f31 = PSVECDotProduct(&sp14, &sp8) / PSVECDotProduct(&sp14, &sp14); + if (temp_f31 <= 0.0f) { + arg5 = arg1; + } else { + if (temp_f31 >= 1.0f) { + arg5 = arg2; + } else { + PSVECScale(&sp14, &sp8, temp_f31); + PSVECAdd(arg1, &sp8, arg5); + } + } + } else if (temp_f29 < 0.0f) { + temp_f31 = PSVECDotProduct(arg1, arg4) / PSVECDotProduct(arg1, arg1); + if (temp_f31 <= 0.0f) { + HuSetVecF(arg5, 0.0, 0.0, 0.0); + } else { + if (temp_f31 >= 1.0f) { + arg5 = arg1; + } else { + PSVECScale(arg1, arg5, temp_f31); + } + } + } else if (temp_f30 < 0.0f) { + temp_f31 = PSVECDotProduct(arg2, arg4) / PSVECDotProduct(arg2, arg2); + if (temp_f31 <= 0.0f) { + HuSetVecF(arg5, 0.0, 0.0, 0.0); + } else { + if (temp_f31 >= 1.0f) { + arg5 = arg2; + } else { + PSVECScale(arg2, arg5, temp_f31); + } + } + } else { + HuSetVecF(arg5, temp_f30 * arg1->x + temp_f29 * arg2->x, temp_f30 * arg1->y + temp_f29 * arg2->y, temp_f30 * arg1->z + temp_f29 * arg2->z); + } + return 1; +} + +BOOL Hitcheck_Triangle_with_Sphere(Vec *arg0, Vec *arg1, float arg2, Vec *arg3) { + Vec sp48; + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + Vec spC; + float var_f31; + + sp48.x = arg0[0].x; + sp48.y = arg0[0].y; + sp48.z = arg0[0].z; + PSVECSubtract(&arg0[1], &arg0[0], &sp3C); + PSVECSubtract(&arg0[2], &arg0[0], &sp30); + PSVECCrossProduct(&sp3C, &sp30, &sp24); + PSVECSubtract(arg1, &arg0[0], &sp18); + PrecalcPntToTriangle(&sp48, &sp3C, &sp30, &sp24, &sp18, &spC); + PSVECAdd(&spC, &sp48, arg3); + var_f31 = PSVECDistance(arg3, arg1); + if (var_f31 > arg2) { + return FALSE; + } else { + return TRUE; + } +} + +BOOL Hitcheck_Quadrangle_with_Sphere(Vec *arg0, Vec *arg1, float arg2, Vec *arg3) { + Vec sp6C; + Vec sp60; + Vec sp54; + Vec sp48; + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + Vec spC; + float temp_f30; + float var_f31; + + sp6C.x = arg0->x; + sp6C.y = arg0->y; + sp6C.z = arg0->z; + PSVECSubtract(&arg0[2], &arg0[0], &sp60); + PSVECSubtract(&arg0[3], &arg0[0], &sp54); + PSVECSubtract(&arg0[1], &arg0[0], &sp48); + PSVECCrossProduct(&sp60, &sp54, &sp3C); + PSVECSubtract(arg1, &arg0[0], &sp30); + PrecalcPntToTriangle(&sp6C, &sp60, &sp54, &sp3C, &sp30, &sp24); + PSVECAdd(&sp24, &sp6C, &sp18); + PrecalcPntToTriangle(&sp6C, &sp54, &sp48, &sp3C, &sp30, &sp24); + PSVECAdd(&sp24, &sp6C, &spC); + var_f31 = PSVECDistance(&sp18, arg1); + temp_f30 = PSVECDistance(&spC, arg1); + if (temp_f30 > var_f31) { + arg3->x = sp18.x; + arg3->y = sp18.y; + arg3->z = sp18.z; + } else { + var_f31 = temp_f30; + arg3->x = spC.x; + arg3->y = spC.y; + arg3->z = spC.z; + } + if (var_f31 > arg2) { + return FALSE; + } else { + return TRUE; + } +} + +static void DefSetHitFace(float arg0, float arg1, float arg2) { + HitFace[HitFaceCount].x = arg0; + HitFace[HitFaceCount].y = arg1; + HitFace[HitFaceCount].z = arg2; +} + +void AppendAddXZ(float arg0, float arg1, float arg2) { + Vec spC; + + spC.x = arg0; + spC.y = 0.0f; + spC.z = arg1; + MapspaceInlineFunc00(&spC); + AddX += spC.x * arg2; + AddZ += spC.z * arg2; +} + +void CharRotInv(Mtx arg0, Mtx arg1, Vec *arg2, omObjData *arg3) { + Mtx sp8; + + PSMTXTrans(arg0, arg3->trans.x, arg3->trans.y, arg3->trans.z); + if (arg3->rot.z) { + PSMTXRotRad(sp8, 'z', MTXDegToRad(arg3->rot.z)); + PSMTXConcat(arg0, sp8, arg0); + } + if (arg3->rot.y) { + PSMTXRotRad(sp8, 'y', MTXDegToRad(arg3->rot.y)); + PSMTXConcat(arg0, sp8, arg0); + } + if (arg3->rot.x) { + PSMTXRotRad(sp8, 'x', MTXDegToRad(arg3->rot.x)); + PSMTXConcat(arg0, sp8, arg0); + } + PSMTXInverse(arg0, arg1); + PSMTXMultVec(arg1, arg2, arg2); +} From 27f79091cd41c90cd702d8746ee2a9d81941b881 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Thu, 22 Feb 2024 04:18:33 -0800 Subject: [PATCH 033/106] Matched game/board/star --- configure.py | 2 +- include/board_unsplit.h | 12 - include/game/board/main.h | 2 + include/game/board/model.h | 1 + include/game/board/space.h | 2 + include/game/board/star.h | 14 + include/game/board/ui.h | 1 + src/REL/w03Dll/main.c | 1 + src/REL/w03Dll/mg_item.c | 1 + src/REL/w03Dll/statue.c | 1 + src/REL/w10Dll/host.c | 1 + src/REL/w10Dll/main.c | 2 + src/REL/w10Dll/scene.c | 4 + src/REL/w10Dll/tutorial.c | 1 + src/game/board/block.c | 1 + src/game/board/main.c | 5 +- src/game/board/pause.c | 3 +- src/game/board/player.c | 10 +- src/game/board/space.c | 2 +- src/game/board/star.c | 821 +++++++++++++++++++++++++++++++++++++ 20 files changed, 861 insertions(+), 26 deletions(-) create mode 100755 include/game/board/star.h create mode 100755 src/game/board/star.c diff --git a/configure.py b/configure.py index 4511667e..42a02138 100644 --- a/configure.py +++ b/configure.py @@ -373,7 +373,7 @@ config.libs = [ Object(Matching, "game/board/warp.c"), Object(NonMatching, "game/board/char_wheel.c"), Object(NonMatching, "game/board/mushroom.c"), - Object(NonMatching, "game/board/star.c"), + Object(Matching, "game/board/star.c"), Object(Matching, "game/board/roll.c"), Object(Matching, "game/board/ui.c"), Object(Matching, "game/board/block.c"), diff --git a/include/board_unsplit.h b/include/board_unsplit.h index 9bbef96f..4115581c 100644 --- a/include/board_unsplit.h +++ b/include/board_unsplit.h @@ -12,25 +12,16 @@ typedef s32 (*BoardSpaceEventFunc)(void); typedef void (*BoardLightHook)(void); #endif -void BoardCameraTargetModelSet(s16 model); -void BoardCameraMotionStartEx(s16, Vec *, Vec *, f32, f32, s16); -void BoardCameraMotionWait(void); s32 BoardSpacePosGet(s32, s32, Vec*); void BoardShopTutorialExec(s32); void BoardLotteryTutorialExec(void); -s16 BoardStarHostMdlGet(void); -void BoardStatusShowSetAll(s32); void BoardMGSetupTutorialExec(void); void BoardBooHouseTutorialExec(void); -void BoardStatusItemSet(s32); -void BoardTutorialItemSet(s8); void BoardCharWheelSetTarget(s32); -void BoardTutorialDirInputSet(s8, s8, s16); void BoardSpaceStarSetIndex(s32); s32 BoardModelRotYSet(s16, f32); f32 BoardModelRotYGet(s16); s32 BoardModelLayerSet(s16, u8); -void BoardTutorialHostSet(s16); s16 BoardModelIDGet(s16); s32 BoardModelScaleSetV(s16, Vec*); void BoardLightHookSet(BoardLightHook set, BoardLightHook reset); @@ -51,10 +42,7 @@ void BoardSpaceInit(s32); void BoardSpaceDestroy(void); void BoardShopHostSet(s16); void BoardLotteryHostSet(s16); -void BoardStarHostSet(s16); void BoardBooHouseHostSet(s16); -void BoardTutorialHookSet(void*); -void BoardTutorialBlockSetPos(s32, s8); s32 BoardCameraRotGet(Vec*); s32 BoardModelScaleSet(s16, f32, f32, f32); s32 BoardIsKill(void); diff --git a/include/game/board/main.h b/include/game/board/main.h index 4377de77..b58a40d1 100644 --- a/include/game/board/main.h +++ b/include/game/board/main.h @@ -77,6 +77,8 @@ typedef void (*BoardCameraPosCalcFunc)(BoardCameraData *camera); typedef void (*BoardTurnStartHook)(s32 player, s32 space); extern BoardTurnStartHook boardTurnStartFunc; +extern void (*boardStarShowNextHook)(void); +extern void (*boardStarGiveHook)(void); extern BoardFunc boardTurnFunc; extern BoardLightHook boardLightResetHook; extern BoardLightHook boardLightSetHook; diff --git a/include/game/board/model.h b/include/game/board/model.h index d9f16496..479194e6 100644 --- a/include/game/board/model.h +++ b/include/game/board/model.h @@ -35,6 +35,7 @@ s32 BoardModelExistCheck(s16 model, s32 arg1); s32 BoardModelExistDupe(s16 model, s32 arg1); s32 fn_8006DDE8(s16 model, float arg1); s32 BoardModelMotionCreate(s16 model, s32 data_num); +s32 BoardModelMotionKill(s16 model, s32 motion); s32 BoardModelMotionStartEndSet(s16 model, s16 start, s16 end); s32 BoardModelMotionStart(s16 model, s32 slot, u32 attr); s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr); diff --git a/include/game/board/space.h b/include/game/board/space.h index a4e68b27..44dc791f 100644 --- a/include/game/board/space.h +++ b/include/game/board/space.h @@ -53,4 +53,6 @@ s32 BoardSpaceStarCheck(s32 index); void BoardSpaceLandExec(s32 player, s32 space); void BoardSpaceBlockPosSet(void); +extern s16 boardSpaceStarTbl[8]; + #endif diff --git a/include/game/board/star.h b/include/game/board/star.h new file mode 100755 index 00000000..5adc2211 --- /dev/null +++ b/include/game/board/star.h @@ -0,0 +1,14 @@ +#ifndef _BOARD_START_H +#define _BOARD_START_H + +#include "game/board/space.h" + +#include "dolphin.h" + +void BoardStarHostSet(s16 arg0); +s16 BoardStarHostMdlGet(void); +void BoardStarExec(s32 arg0, BoardSpace *arg1); +void BoardStarGive(s32 arg0, Vec *arg1); +void BoardStarShowNext(s32 arg0); + +#endif diff --git a/include/game/board/ui.h b/include/game/board/ui.h index b2ba74dd..ccf6d01f 100755 --- a/include/game/board/ui.h +++ b/include/game/board/ui.h @@ -28,6 +28,7 @@ void BoardPickerBackFlagSet(s32 arg0); BOOL BoardPickerDoneCheck(void); s32 BoardPickerPosGet(Vec *arg0); s32 BoardPickerChoiceGet(void); +void BoardYourTurnExec(s32 arg0); s32 BoardItemUseExec(s32 arg0); void BoardMakeRandomItem(void); void BoardItemGetDestPos(s32 arg0, Vec *arg1); diff --git a/src/REL/w03Dll/main.c b/src/REL/w03Dll/main.c index 78665f8c..732301f8 100644 --- a/src/REL/w03Dll/main.c +++ b/src/REL/w03Dll/main.c @@ -5,6 +5,7 @@ #include "game/gamework_data.h" #include "REL/w03Dll.h" #include "game/board/space.h" +#include "game/board/star.h" #include "game/object.h" #include "game/board/player.h" #include "math.h" diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index 7143ac03..d9bfc3be 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -4,6 +4,7 @@ #include "game/data.h" #include "game/gamework_data.h" #include "REL/w03Dll.h" +#include "game/board/main.h" #include "game/board/space.h" #include "game/object.h" #include "game/objsub.h" diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index 40d5ad42..38273508 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -7,6 +7,7 @@ #include "game/audio.h" #include "game/board/space.h" #include "game/board/player.h" +#include "game/board/ui.h" #include "board_unsplit.h" #include "game/hsfman.h" #include "game/board/main.h" diff --git a/src/REL/w10Dll/host.c b/src/REL/w10Dll/host.c index 9d8ef0bc..ce7465a1 100644 --- a/src/REL/w10Dll/host.c +++ b/src/REL/w10Dll/host.c @@ -1,5 +1,6 @@ #include "REL/w10Dll.h" #include "game/data.h" +#include "game/board/tutorial.h" #include "game/board/window.h" s32 lbl_1_data_78[2] = { diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index 1a1a87fe..9bd9f796 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -1,6 +1,8 @@ #include "include/REL/w10Dll.h" #include "game/data.h" #include "game/hsfman.h" +#include "game/board/star.h" +#include "game/board/tutorial.h" #include "math.h" diff --git a/src/REL/w10Dll/scene.c b/src/REL/w10Dll/scene.c index 420a5450..881ea98b 100644 --- a/src/REL/w10Dll/scene.c +++ b/src/REL/w10Dll/scene.c @@ -1,4 +1,8 @@ #include "include/REL/w10Dll.h" +#include "game/board/main.h" +#include "game/board/star.h" +#include "game/board/tutorial.h" +#include "game/board/ui.h" void fn_1_D2C(void) { fn_1_BA0(0x2E0001); diff --git a/src/REL/w10Dll/tutorial.c b/src/REL/w10Dll/tutorial.c index a9886915..eb85426e 100644 --- a/src/REL/w10Dll/tutorial.c +++ b/src/REL/w10Dll/tutorial.c @@ -3,6 +3,7 @@ #include "game/pad.h" #include "game/data.h" #include "game/wipe.h" +#include "game/board/ui.h" char lbl_1_data_98[] = "@@@@@@@@@@@@@@ Tutorial Exit @@@@@@@@@@@@@@\n\000"; diff --git a/src/game/board/block.c b/src/game/board/block.c index 6f043eb8..f7836acc 100644 --- a/src/game/board/block.c +++ b/src/game/board/block.c @@ -4,6 +4,7 @@ #include "game/board/main.h" #include "game/board/player.h" #include "game/board/model.h" +#include "game/board/star.h" #include "game/board/window.h" #include "math.h" diff --git a/src/game/board/main.c b/src/game/board/main.c index a5bfeab9..900c5738 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -12,6 +12,7 @@ #include "game/board/pause.h" #include "game/board/player.h" #include "game/board/tutorial.h" +#include "game/board/ui.h" #include "game/pad.h" #include "game/msm.h" @@ -29,8 +30,8 @@ static omObjData *confettiObj; static omObjData *filterObj; BoardTurnStartHook boardTurnStartFunc; void *boardBowserHook; -void *boardStarShowNextHook; -void *boardStarGiveHook; +void (*boardStarShowNextHook)(void); +void (*boardStarGiveHook)(void); BoardFunc boardTurnFunc; BoardLightHook boardLightResetHook; BoardLightHook boardLightSetHook; diff --git a/src/game/board/pause.c b/src/game/board/pause.c index c5e0e6fd..ed26e8a7 100755 --- a/src/game/board/pause.c +++ b/src/game/board/pause.c @@ -14,6 +14,7 @@ #include "game/board/model.h" #include "game/board/player.h" #include "game/board/roll.h" +#include "game/board/star.h" #include "game/board/ui.h" typedef struct { @@ -38,8 +39,6 @@ typedef struct { } ConfigWork; extern void omSysPauseCtrl(s32); -extern s16 BoardStarHostMdlGet(void); -extern void BoardStarHostSet(s16); static void PauseExit(void); static void PauseProcess(void); diff --git a/src/game/board/player.c b/src/game/board/player.c index a96f7e46..9a7ea61e 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -2,16 +2,12 @@ #include "game/chrman.h" #include "game/objsub.h" #include "game/board/com.h" +#include "game/board/main.h" #include "game/board/roll.h" #include "game/board/tutorial.h" +#include "game/board/ui.h" #include "game/board/view.h" -//// #include "game/board/ui.h" -extern void BoardStatusHammerShowSet(s32, s32); -extern void BoardYourTurnExec(s32); -extern s32 BoardItemUseExec(s32); -//// #include "game/board/main.h" -extern f32 BoardDAngleCalc(f32); //// #include "game/board/model.h" extern s16 BoardModelCreateCharacter(s32, s32, s32*, s32); extern void BoardModelExistCheck(s16, s32); @@ -34,14 +30,12 @@ extern f32 BoardModelMotionMaxTimeGet(s16); extern void BoardModelMotionTimeRangeSet(s16, s32, s32); extern void BoardModelAttrSet(s16, s32); extern void BoardModelAttrReset(s16, s32); -//// #include "game/board/com.h" //// #include "game/board/overhead.h" //// #include "game/board/pad.h" extern s8 HuPadStkX[4]; extern s8 HuPadStkY[4]; extern u16 HuPadBtnDown[4]; extern u8 HuPadDStk[4]; -//// #include "game/board/view.h" //// typedef struct bitcopy { diff --git a/src/game/board/space.c b/src/game/board/space.c index 4ee4583a..e117bf18 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -3,6 +3,7 @@ #include "game/board/main.h" #include "game/board/player.h" #include "game/board/space.h" +#include "game/board/star.h" #include "game/board/tutorial.h" #include "game/hsfman.h" #include "game/data.h" @@ -13,7 +14,6 @@ #include "string.h" -extern s16 BoardStarHostMdlGet(void); extern s16 BoardModelCreate(s32 file, s32 *data, s32 arg3); extern s16 BoardModelIDGet(s16 model); diff --git a/src/game/board/star.c b/src/game/board/star.c new file mode 100755 index 00000000..59815c40 --- /dev/null +++ b/src/game/board/star.c @@ -0,0 +1,821 @@ +#include "game/board/star.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/flag.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfman.h" +#include "game/msm.h" +#include "game/objsub.h" +#include "game/wipe.h" +#include "game/board/audio.h" +#include "game/board/com.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/tutorial.h" +#include "game/board/ui.h" +#include "game/board/window.h" + +#include "math.h" + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 1; + u8 unk00_field2 : 1; + u8 unk00_field3 : 2; + u8 unk00_field4 : 1; + }; + s8 unk01; + s8 unk02; + char unk03[1]; + s16 unk04; + s16 unk06; + s16 unk08; + s16 unk0A; + s16 unk0C; +} GiveStarWork; + +typedef struct { + struct { + u8 unk00_field0 : 1; + }; + s8 unk01; +} ShowNextWork; + +static void ExecStar(void); +static void DestroyStar(void); +static void GiveStarMain(omObjData *arg0); +static void UpdateStarAngle(GiveStarWork *arg0, omObjData *arg1); +static void InitGiveStar(GiveStarWork *arg0, omObjData *arg1); +static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1); +static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1); +static void StopGiveStar(void); +static void InitGiveStarEffect(void); +static void KillGiveStarEffect(void); +static void ShowNextUpdate(omObjData *arg0); +static void HideNextHost(s32 arg0); + +static Vec starCharPos; + +static s16 hostMot[2]; +static omObjData *showNextObj; +static s16 starDoneF; +static AnimData *starEffAnim; +static omObjData *giveStarObj; +static Process *starProc; + +static s16 starParman = -1; +static s16 hostMdl = -1; + +const s32 lbl_8011E040[9] = { + 0x000C0000, + 0x000C0009, + 0x000C0012, + 0x000C001B, + 0x000C0024, + 0x000C002D, + 0x000C0000, + 0x000C0000, + 0x000C0000 +}; + +const s32 lbl_8011E064[9][2] = { + { 0x00150022, 0x00150028 }, + { 0x00150023, 0x00150029 }, + { 0x00150024, 0x0015002A }, + { 0x00150025, 0x0015002B }, + { 0x00150026, 0x0015002C }, + { 0x00150027, 0x0015002D }, + { 0x00150022, 0x00150028 }, + { 0x00150022, 0x00150028 }, + { 0x00150022, 0x00150028 } +}; + +s32 boardStarSndTbl[] = { + 0x00000120, + 0x00000160, + 0x000001A0, + 0x000001E0, + 0x00000220, + 0x00000260, + 0x000002A0, + 0x000002E0 +}; + +static s32 hostMotTbl[][2] = { + { 0x00750021, 0x0007009D }, + { 0x00760007, 0x0007009E }, + { 0x0077001F, 0x0007009F }, + { 0x0078000B, 0x000700A0 }, + { 0x00790009, 0x000700A1 }, + { 0x007A0015, 0x000700A2 }, + { 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000 }, + { 0x00000000, 0x00000000 } +}; + +static HsfanimStruct00 starEffParam = { + 0x001E, + { 0x00, 0x00 }, // padding? + 3.3f, + 70.0f, + 7.0f, + { 0.0f, -0.05f, 0.0f }, + 2.0f, + 1.0f, + 20.0f, + 0.98f, + 0x0002, + { + 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x40, 0xFF, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + }, + { + 0xFF, 0x80, 0x80, 0x00, + 0xFF, 0x40, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + } +}; + +void BoardStarHostSet(s16 arg0) { + hostMdl = arg0; + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + return; + } + if (_CheckFlag(0x10001)) { + BoardSpaceHostSet(boardSpaceStarTbl[GWSystem.star_pos]); + } +} + +s16 BoardStarHostMdlGet(void) { + return hostMdl; +} + +void BoardStarExec(s32 arg0, BoardSpace *arg1) { + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + return; + } + if (BoardPlayerSizeGet(arg0) != 2) { + BoardDiceDigit2DShowSet(0); + starProc = HuPrcChildCreate(ExecStar, 0x2003, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(starProc, DestroyStar); + while (starProc != NULL) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); + } +} + +static void ExecStar(void) { + Vec sp24; + Vec sp18; + Vec spC; + float temp_f27; + float temp_f29; + float temp_f30; + float var_f28; + float var_f31; + s16 temp_r30; + u32 sp8; + s32 temp_r24; + s32 temp_r29; + s32 var_r26; + s32 var_r25; + s32 i; + s32 temp_r27; + s32 temp_r31; + s32 var_r22; + BoardSpace *var_r23; + + temp_r31 = GWSystem.player_curr; + temp_r27 = GWBoardGet(); + temp_r30 = BoardStarHostMdlGet(); + HuAudFXPlay(0x33A); + for (i = 0; i < 2; i++) { + hostMot[i] = BoardModelMotionCreate(temp_r30, hostMotTbl[temp_r27][i]); + } + BoardPlayerPosGet(temp_r31, &sp24); + temp_r24 = GWPlayer[temp_r31].space_curr; + var_r23 = BoardSpaceGet(0, temp_r24); + sp8 = (var_r23->flag & 0x70000) >> 16; + starDoneF = 0; + var_r22 = BoardSpaceLinkFlagSearch(0, temp_r24, 0x04000000); + BoardSpacePosGet(0, var_r22, &sp18); + PSVECSubtract(&sp18, &sp24, &spC); + temp_f30 = 90.0 - 180.0 * (atan2(spC.z, spC.x) / M_PI); + temp_f30 = 90.0f * ((temp_f30 + 3.0f) / 90.0f); + temp_f29 = BoardPlayerRotYGet(temp_r31); + BoardRotateDiceNumbers(temp_r31); + if (BoardDAngleCalc(temp_f30 - temp_f29) < 0.0f) { + var_f28 = -BoardDAngleCalc(temp_f30 - temp_f29); + } else { + var_f28 = BoardDAngleCalc(temp_f30 - temp_f29); + } + if (var_f28 > 90.0f) { + var_r25 = 0x1E; + } else { + var_r25 = 0xF; + } + BoardPlayerMotBlendSet(temp_r31, temp_f30, var_r25); + temp_f27 = BoardModelRotYGet(temp_r30); + var_f31 = BoardDAngleCalc(temp_f30 + 180.0f) - temp_f27; + if ((var_f31 <= 4.0f && var_f31 >= 0.0f) + || (var_f31 <= 360.0f && var_f31 >= 355.0f) + || (var_f31 <= 0.0f && var_f31 >= -4.0f)) { + var_r26 = 0; + } else { + var_r26 = 1; + } + if (var_r26 != 0) { + var_f31 /= var_r25; + BoardModelMotionShiftSet(temp_r30, hostMot[1], 0.0f, 10.0f, 0x40000001); + BoardModelMotionSpeedSet(temp_r30, 2.0f); + } + while (!BoardPlayerMotBlendCheck(temp_r31)) { + if (var_r26 != 0) { + temp_f30 = var_f31 + BoardModelRotYGet(temp_r30); + BoardModelRotYSet(temp_r30, temp_f30); + } + HuPrcVSleep(); + } + BoardModelMotionShiftSet(temp_r30, 1, 0.0f, 10.0f, 0x40000001); + BoardCameraViewSet(3); + BoardCameraMotionWait(); + if (GWStarsGet(temp_r31) >= 999) { + temp_r29 = lbl_8011E040[temp_r27] + 5; + BoardWinCreate(0, temp_r29, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardWinKill(); + } else if (BoardPlayerCoinsGet(temp_r31) < 20 && GWSystem.last5_effect != 4) { + temp_r29 = lbl_8011E040[temp_r27] + 2; + BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardWinKill(); + } else { + BoardStatusShowSetAll(0); + while (!BoardStatusStopCheck(0) || !BoardStatusStopCheck(1) || !BoardStatusStopCheck(2) || !BoardStatusStopCheck(3)) { + HuPrcVSleep(); + } + temp_r29 = lbl_8011E040[temp_r27]; + BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar()); + BoardWinInsertMesSet(BoardPlayerGetCharMess(temp_r31), 0); + BoardWinWait(); + BoardWinKill(); + while (1) { + BoardStatusShowSetForce(temp_r31); + BoardStatusShowSet(temp_r31, 1); + while (!BoardStatusStopCheck(temp_r31)) { + HuPrcVSleep(); + } + if (GWSystem.last5_effect == 4) { + temp_r29 = lbl_8011E040[temp_r27] + 8; + BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar()); + BoardWinWait(); + break; + } + temp_r29 = lbl_8011E040[temp_r27] + 1; + BoardWinCreateChoice(1, temp_r29, BoardWinPortraitGetStar(), 0); + BoardWinAttrSet(0x10); + if (GWPlayer[temp_r31].com) { + if (BoardPlayerCoinsGet(temp_r31) >= 20) { + BoardComKeySetUp(); + } else { + BoardComKeySetDown(); + } + } + BoardWinWait(); + switch (BoardWinChoiceGet()) { + case 0: + if (BoardPlayerCoinsGet(temp_r31) < 20) { + temp_r29 = lbl_8011E040[temp_r27] + 2; + BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardStatusShowSet(temp_r31, 0); + while (!BoardStatusStopCheck(temp_r31)) { + HuPrcVSleep(); + } + BoardStatusShowSetAll(1); + goto block_B; + } + goto block_A; + case 1: + temp_r29 = lbl_8011E040[temp_r27] + 4; + BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardStatusShowSet(temp_r31, 0); + while (!BoardStatusStopCheck(temp_r31)) { + HuPrcVSleep(); + } + BoardStatusShowSetAll(1); + goto block_B; + default: + BoardStatusShowSet(temp_r31, 0); + while (!BoardStatusStopCheck(temp_r31)) { + HuPrcVSleep(); + } + BoardWinKill(); + BoardViewMapExec(temp_r31); + break; + } + } +block_A: + temp_r29 = lbl_8011E040[temp_r27] + 3; + BoardWinCreate(2, temp_r29, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardWinKill(); + if (GWSystem.last5_effect != 4) { + for (i = 0; i < 20; i++) { + BoardPlayerCoinsAdd(temp_r31, -1); + HuAudFXPlay(0xE); + HuPrcSleep(3); + } + HuAudFXPlay(0xF); + } + _SetFlag(0x10017); + BoardModelMotionShiftSet(temp_r30, hostMot[0], 0.0f, 10.0f, 0); + HuPrcSleep(0x1E); + starDoneF = 1; + BoardAudSeqFadeOut(0, 0x3E8); + BoardModelPosGet(temp_r30, &sp24); + sp24.y += 130.0f; + BoardStarGive(temp_r31, &sp24); + BoardStatusShowSet(temp_r31, 0); + while (!BoardStatusStopCheck(temp_r31)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(temp_r30, 1, 0.0f, 10.0f, 0x40000001); + BoardStarShowNext(temp_r31); + BoardMusStartBoard(); + BoardModelRotYSet(temp_r30, 0.0f); + } +block_B: + BoardWinKill(); + var_f31 = -BoardModelRotYGet(temp_r30); + if (var_r26 != 0) { + var_f31 /= var_r25; + BoardModelMotionShiftSet(temp_r30, hostMot[1], 0.0f, 10.0f, 0x40000001); + BoardModelMotionSpeedSet(temp_r30, 3.0f); + } + BoardPlayerMotBlendSet(temp_r31, 0, var_r25); + while (!BoardPlayerMotBlendCheck(temp_r31)) { + if (var_r26 != 0) { + temp_f30 = var_f31 + BoardModelRotYGet(temp_r30); + BoardModelRotYSet(temp_r30, temp_f30); + } + HuPrcVSleep(); + } + BoardModelRotYSet(temp_r30, 0.0f); + BoardModelMotionShiftSet(temp_r30, 1, 0.0f, 10.0f, 0x40000001); + if (!_CheckFlag(0x10016)) { + BoardCameraViewSet(1); + BoardCameraTargetPlayerSet(temp_r31); + BoardCameraMotionWait(); + } + HuPrcEnd(); +} + +static void DestroyStar(void) { + s32 i; + + _ClearFlag(0x10017); + for (i = 0; i < 2; i++) { + BoardModelMotionKill(BoardStarHostMdlGet(), hostMot[i]); + hostMot[i] = -1; + } + StopGiveStar(); + KillGiveStarEffect(); + starProc = NULL; +} + +static void GiveStarMain(omObjData *arg0) { + GiveStarWork *temp_r30; + + temp_r30 = OM_GET_WORK_PTR(arg0, GiveStarWork); + if (temp_r30->unk00_field0 != 0 || BoardIsKill()) { + KillGiveStarEffect(); + BoardModelKill(temp_r30->unk0C); + giveStarObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r30->unk04 != 0) { + temp_r30->unk04--; + } else { + switch (temp_r30->unk01) { + case 4: + break; + case 0: + InitGiveStar(temp_r30, arg0); + break; + case 1: + MoveGiveStar(temp_r30, arg0); + break; + case 2: + ShrinkGiveStar(temp_r30, arg0); + break; + } + UpdateStarAngle(temp_r30, arg0); + } + BoardModelPosSet(temp_r30->unk0C, arg0->trans.x, arg0->trans.y, arg0->trans.z); + BoardModelRotSet(temp_r30->unk0C, 0.0f, arg0->rot.y, 0.0f); + BoardModelScaleSet(temp_r30->unk0C, arg0->scale.x, arg0->scale.y, arg0->scale.z); + if (starParman != -1) { + Hu3DParManPosSet(starParman, arg0->trans.x, -70.0f + arg0->trans.y, arg0->trans.z); + } +} + +static void UpdateStarAngle(GiveStarWork *arg0, omObjData *arg1) { + float var_f31; + + if (arg0->unk00_field1 != 0) { + if (arg0->unk02 < 16.0f) { + arg0->unk02 += 2.0f; + if (arg0->unk02 > 16.0f) { + arg0->unk02 = 0x10; + } + } + OSs8tof32(&arg0->unk02, &var_f31); + arg1->rot.y = BoardDAngleCalc(arg1->rot.y + var_f31); + } +} + +static void InitGiveStar(GiveStarWork *arg0, omObjData *arg1) { + Vec sp8; + + BoardPlayerPosGet(arg0->unk00_field3, &sp8); + BoardModelVisibilitySet(arg0->unk0C, 1); + BoardModelMotionStart(arg0->unk0C, 0, 0x40000001); + BoardModelMotionTimeSet(arg0->unk0C, 2.0f); + arg0->unk01 = 1; + arg0->unk0A = 0; + arg1->trans.x = starCharPos.x; + arg1->trans.y = starCharPos.y; + arg1->trans.z = starCharPos.z; + arg1->rot.x = (sp8.x - starCharPos.x) / 10.0f; + arg1->rot.z = (sp8.z - starCharPos.z) / 10.0f; + arg1->rot.y = 0.0f; + arg1->scale.x = arg1->scale.y = arg1->scale.z = 1.0f; + InitGiveStarEffect(); +} + +static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1) { + Vec sp8; + float temp_f31; + + BoardPlayerPosGet(arg0->unk00_field3, &sp8); + if (arg0->unk00_field2 == 0) { + if (BoardModelMotionTimeGet(arg0->unk0C) >= 50.0f) { + BoardModelMotionStartEndSet(arg0->unk0C, 0x32, 0x96); + arg0->unk00_field2 = 1; + } + } + if (arg0->unk0A < 10) { + OSs16tof32(&arg0->unk0A, &temp_f31); + arg1->trans.x += arg1->rot.x; + arg1->trans.z += arg1->rot.z; + arg1->trans.y += -0.08166667f * temp_f31 * temp_f31 * 0.97f + 50.0f; + arg0->unk0A++; + } else { + arg1->trans.y += -4.0f; + if (arg1->trans.y <= sp8.y + 300.0f) { + arg1->trans.y = sp8.y + 300.0f; + arg0->unk01 = 4; + } + } +} + +static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) { + Vec sp8; + float var_f30; + + if (arg0->unk00_field4 == 0) { + HuAudFXPlay(0x339); + arg0->unk00_field4 = 1; + } + BoardPlayerPosGet(arg0->unk00_field3, &sp8); + arg1->trans.y += -4.0f; + if (arg1->trans.y > sp8.y + 80.0f) { + if (arg0->unk08 < 90) { + if (BoardPlayerSizeGet(arg0->unk00_field3) != 1) { + arg0->unk08 += 2; + } else { + arg0->unk08 += 1.4f; + } + if (arg0->unk08 > 90) { + arg0->unk08 = 90; + } + } + OSs16tof32(&arg0->unk08, &var_f30); + arg1->scale.x = sin((var_f30 + 90.0f) * M_PI / 180.0); + if (arg1->scale.x <= 0.0f) { + arg1->scale.x = 0.001f; + } + arg1->scale.y = arg1->scale.x; + arg1->scale.z = arg1->scale.x; + } else { + omVibrate(arg0->unk00_field3, 0xC, 0xC, 0); + arg0->unk00_field0 = 1; + arg0->unk01 = 4; + arg1->scale.x = arg1->scale.y = arg1->scale.z = 0.001f; + KillGiveStarEffect(); + BoardModelVisibilitySet(arg0->unk0C, 0); + } +} + +static void StopGiveStar(void) { + GiveStarWork *temp_r31; + + if (giveStarObj) { + temp_r31 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork); + temp_r31->unk00_field0 = 1; + } +} + +static void InitGiveStarEffect(void) { + s16 temp_r3; + void *var_r30; + + var_r30 = HuDataSelHeapReadNum(0x120001, MEMORY_DEFAULT_NUM, HEAP_DATA); + starEffAnim = HuSprAnimRead(var_r30); + starParman = Hu3DParManCreate(starEffAnim, 0x64, &starEffParam); + Hu3DParManAttrSet(starParman, 0x64); + Hu3DParManRotSet(starParman, 90.0f, 0.0f, 0.0f); + temp_r3 = Hu3DParManModelIDGet(starParman); + Hu3DParticleBlendModeSet(temp_r3, 1); + Hu3DModelLayerSet(temp_r3, 2); + HuDataDirClose(0x120000); +} + +static void KillGiveStarEffect(void) { + if (starParman != -1) { + Hu3DParManKill(starParman); + starParman = -1; + starEffAnim = NULL; + } +} + +static inline void StarInlineFunc00(void) { + GiveStarWork *temp_r28 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork); + + temp_r28->unk01 = 0; +} + +static inline void StarInlineFunc01(void) { + GiveStarWork *temp_r27 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork); + + while (temp_r27->unk01 != 4) { + HuPrcVSleep(); + } +} + +static inline void StarInlineFunc02(void) { + GiveStarWork *temp_r29 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork); + + temp_r29->unk00_field1 = 1; + temp_r29->unk04 = 0x2D; + temp_r29->unk08 = 0; + temp_r29->unk01 = 2; +} + +void BoardStarGive(s32 arg0, Vec *arg1) { + Vec sp8; + s32 temp_r25; + GiveStarWork *temp_r31; + + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + return; + } + starCharPos = *arg1; + giveStarObj = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, GiveStarMain); + BoardCameraRotGet(&sp8); + temp_r31 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork); + temp_r31->unk00_field0 = 0; + temp_r31->unk00_field1 = 0; + temp_r31->unk00_field2 = 0; + temp_r31->unk00_field4 = 0; + temp_r31->unk01 = 4; + temp_r31->unk00_field3 = arg0; + temp_r31->unk06 = 0; + temp_r31->unk02 = 0; + temp_r31->unk08 = 0; + temp_r31->unk0C = BoardModelCreate(0x7000B, NULL, 0); + BoardModelVisibilitySet(temp_r31->unk0C, 0); + BoardModelPassSet(temp_r31->unk0C, 0); + BoardModelMotionSpeedSet(temp_r31->unk0C, 0.0f); + BoardModelLayerSet(temp_r31->unk0C, 2); + StarInlineFunc00(); + HuAudFXPlay(0x338); + HuAudFXPlay(0x353); + StarInlineFunc01(); + if (_CheckFlag(0x1000B)) { + BoardTutorialHookExec(0x15, 0); + } + BoardPlayerMotBlendSet(arg0, 0, 0xF); + while (!BoardPlayerMotBlendCheck(arg0)) { + HuPrcVSleep(); + } + StarInlineFunc02(); + StarInlineFunc01(); + BoardPlayerVoiceEnableSet(arg0, 7, 0); + BoardPlayerMotionShiftSet(arg0, 7, 0.0f, 8.0f, 0); + HuAudFXPlay(boardStarSndTbl[GWPlayer[arg0].character]); + BoardPlayerStarsAdd(arg0, 1); + HuAudFXPlay(8); + HuPrcSleep(0xA); + if (_CheckFlag(0x1000B)) { + BoardPlayerMotionEndWait(arg0); + } else { + temp_r25 = HuAudSStreamPlay(6); + BoardPlayerMotionEndWait(arg0); + while (msmStreamGetStatus(temp_r25) != 0) { + HuPrcVSleep(); + } + } + BoardPlayerVoiceEnableSet(arg0, 7, 1); +} + +void BoardStarShowNext(s32 arg0) { + Mtx spBC; + Mtx sp8C; + Mtx sp5C; + Vec sp50; + Vec sp44; + Vec sp38; + Vec sp2C; + Vec sp20; + float temp_f31; + WipeState *var_r26; + s32 var_r28; + s32 var_r30; + s16 var_r27; + s16 var_r29; + + var_r28 = 0; + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + return; + } + _SetFlag(0x1001C); + var_r26 = &wipeData; + if (var_r26->mode == 0) { + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, 0x15); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + } else { + HuPrcSleep(0x12); + } + BoardStatusItemSet(0); + if (GWBoardGet() == 5 && BoardRollTypeGet() != 9 && boardStarGiveHook) { + boardStarGiveHook(); + } + BoardSpaceStarMove(); + if (arg0 == -1) { + var_r28 = 1; + arg0 = 0; + for (var_r29 = 0; var_r29 < 4; var_r29++) { + BoardPlayerCornerPosSet(var_r29); + } + BoardSpacePosGet(0, GWPlayer[arg0].space_curr, &sp38); + BoardPlayerPosSetV(arg0, &sp38); + } + if (!_CheckFlag(0x10017)) { + BoardAudSeqFadeOut(0, 1000); + } + showNextObj = omAddObjEx(boardObjMan, 0x7E03, 0, 0, -1, ShowNextUpdate); + BoardRotateDiceNumbers(arg0); + BoardModelMotionStart(BoardStarHostMdlGet(), 1, 0x40000001); + BoardModelPosGet(BoardStarHostMdlGet(), &sp50); + showNextObj->scale.x = sp50.x; + showNextObj->scale.y = sp50.y; + showNextObj->scale.z = sp50.z; + BoardPlayerPosGet(arg0, &sp38); + sp50.y = sp38.y; + PSVECSubtract(&sp50, &sp38, &sp20); + sp20.y = 0.0f; + temp_f31 = PSVECMag(&sp20); + if (temp_f31 > 3000.0f) { + var_r27 = 0xF0; + } else if (temp_f31 > 1500.0f) { + var_r27 = 0x78; + } else { + var_r27 = 0x78; + } + BoardViewMoveStart(&sp38, &sp50, var_r27); + showNextObj->trans.x = 68.0f; + showNextObj->trans.y = 430.0f; + showNextObj->trans.z = 100.0f; + sp44.x = showNextObj->trans.x; + sp44.y = showNextObj->trans.y; + sp44.z = showNextObj->trans.z; + Hu3D2Dto3D(&sp44, 1, &sp44); + BoardModelPosSetV(BoardStarHostMdlGet(), &sp44); + BoardCameraRotGet(&sp2C); + PSMTXRotRad(sp5C, 'y', 0.17453292f); + PSMTXRotRad(sp8C, 'x', 0.017453292f * sp2C.x); + PSMTXConcat(sp8C, sp5C, spBC); + BoardModelMtxSet(BoardStarHostMdlGet(), &spBC); + BoardModelRotSet(BoardStarHostMdlGet(), 0.0f, 0.0f, 0.0f); + BoardModelScaleSet(BoardStarHostMdlGet(), 0.09f, 0.09f, 0.09f); + BoardMusStart(1, 7, 0x7F, 0); + BoardCameraMoveSet(0); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + HuPrcSleep(1); + WipeCreate(1, 0, 0x15); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + if (var_r28 == 0) { + var_r30 = lbl_8011E040[GWBoardGet()] + 6; + } else { + var_r30 = lbl_8011E064[GWBoardGet()][0]; + } + BoardWinCreate(3, var_r30, -1); + BoardWinPause(); + BoardViewMoveEnd(); + while (!BoardViewMoveCheck()) { + HuPrcVSleep(); + } + HuPrcSleep(0x1E); + BoardWinKill(); + HuPrcSleep(3); + if (var_r28 == 0) { + var_r30 = lbl_8011E040[GWBoardGet()] + 7; + } else { + var_r30 = lbl_8011E064[GWBoardGet()][1]; + } + BoardWinCreate(3, var_r30, -1); + BoardWinWait(); + BoardWinKill(); + if (GWBoardGet() == 5 && BoardRollTypeGet() != 9 && boardStarShowNextHook) { + boardStarShowNextHook(); + } + BoardAudSeqFadeOut(1, 0x3E8); + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, 0x15); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardViewWait(); + PSMTXIdentity(spBC); + BoardModelMtxSet(BoardStarHostMdlGet(), &spBC); + HideNextHost(1); + while (showNextObj) { + HuPrcVSleep(); + } + BoardCameraMoveSet(0); + BoardCameraTargetPlayerSet(arg0); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + BoardStatusItemSet(1); + WipeCreate(1, 0, 0x15); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + if (!_CheckFlag(0x10017)) { + BoardMusStartBoard(); + } + _ClearFlag(0x1001C); +} + +static void ShowNextUpdate(omObjData *arg0) { + ShowNextWork *temp_r30 = OM_GET_WORK_PTR(arg0, ShowNextWork); + Vec sp8; + + if (temp_r30->unk00_field0 != 0 || BoardIsKill()) { + showNextObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + switch (temp_r30->unk01) { + case 0: + sp8.x = arg0->trans.x; + sp8.y = arg0->trans.y; + sp8.z = arg0->trans.z; + Hu3D2Dto3D(&sp8, 1, &sp8); + break; + case 1: + sp8.x = arg0->scale.x; + sp8.y = arg0->scale.y; + sp8.z = arg0->scale.z; + BoardModelLayerSet(BoardStarHostMdlGet(), 0); + BoardModelRotSet(BoardStarHostMdlGet(), 0.0f, 0.0f, 0.0f); + BoardModelScaleSet(BoardStarHostMdlGet(), 1.0f, 1.0f, 1.0f); + temp_r30->unk00_field0 = 1; + break; + } + BoardModelPosSetV(BoardStarHostMdlGet(), &sp8); +} + +static void HideNextHost(s32 arg0) { + ShowNextWork *temp_r31 = OM_GET_WORK_PTR(showNextObj, ShowNextWork); + + temp_r31->unk01 = arg0; +} From 2257e6b63d877f6f02c466cbb7dc621752f7888a Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 24 Feb 2024 20:10:37 -0500 Subject: [PATCH 034/106] small player update --- include/game/board/player.h | 2 +- src/game/board/player.c | 27 ++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/include/game/board/player.h b/include/game/board/player.h index 6e4d7678..4d75f4e4 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -149,7 +149,7 @@ void BoardDiceDigit2DShowSet(s32); s32 DoSparkSpace(s32, s16*); s32 MegaPlayerPassFunc(s32, s16); s32 BoardPlayerMotBlendCheck(s32); -void BoardPlayerMoveAwayStartCurr(s16, s32); +void BoardPlayerMoveAwayStartCurr(s32, s32); void BoardBowserSuitMotionSetWalk(void); s16 BoardBowserSuitModelGet(void); void UpdateDiceDigit2D(omObjData*); diff --git a/src/game/board/player.c b/src/game/board/player.c index 15b17ece..1ffdb54c 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -2139,7 +2139,7 @@ s32 BoardPlayerAutoSizeGet(s32 arg0) { } u32 BoardPlayerMoveAwayIsDone(void) { - if (!moveAwayObj) { + if (moveAwayObj) { return 0; } return 1; @@ -2190,6 +2190,31 @@ void BoardPlayerMoveAwayStart(s32 arg0, s32 arg1, s32 arg2) { } } +void BoardPlayerMoveAwayStartCurr(s32 arg0, s32 arg1) { + BoardPlayerMoveAwayStart(GWSystem.player_curr, arg0, arg1); +} + +static void MoveAwayObjFunc(omObjData* arg0) { + s32 var_r31; + bitcopy3* temp_r30; + + temp_r30 = (bitcopy3*) arg0->work; + if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { + moveAwayObj = 0; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (moveAwayPlayer[var_r31] != -1) { + if (GWPlayer[moveAwayPlayer[var_r31]].moving != 0) return; + BoardPlayerMotBlendSet(moveAwayPlayer[var_r31], 0, 15); + moveAwayPlayer[var_r31] = -1; + } + } + temp_r30->field00_bit0 = 1; +} + // ... void BoardPlayerCopyMat(s32 arg0) { From c47d2d5c1ecd7c9d209bacb44bc9197b6f9f126c Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 24 Feb 2024 21:09:19 -0500 Subject: [PATCH 035/106] another small player update --- include/game/board/player.h | 1 + src/game/board/player.c | 72 +++++++++++++++++++++++++++++++++++-- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/include/game/board/player.h b/include/game/board/player.h index 0bf9e1d8..66df59c1 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -155,5 +155,6 @@ void BoardBowserSuitMotionSetWalk(void); s16 BoardBowserSuitModelGet(void); void UpdateDiceDigit2D(omObjData*); void MoveAwayObjFunc(omObjData*); +void UpdateBowserSuit(omObjData*); #endif diff --git a/src/game/board/player.c b/src/game/board/player.c index fc8420ce..acaa3a31 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -65,6 +65,7 @@ static omObjData* moveAwayObj; static omObjData* diceDigit2DObj; static omObjData* junctionObj; static s32 junctionMask; +static omObjData* bowserSuitObj; static s32 rollResized; static s16 suitMdl = -1; @@ -1023,8 +1024,8 @@ static void InitJunction(s32 arg0, s32 arg1, f32 arg8) { temp_r29->unk_01 = 0; var_r28->scale.x = var_r28->scale.y = var_r28->scale.z = 3.0f; HuWinMesMaxSizeGet(1, &sp3C, 0x90003); - var_f27 = 304.0f; - var_f28 = -10000.0f; + var_f27 = -10000.0f; + var_f28 = 304.0f; temp_r29->unk_04 = HuWinCreate(var_f27, var_f28, sp3C, sp40, 0); HuWinBGTPLvlSet(temp_r29->unk_04, 0.0f); HuWinMesSpeedSet(temp_r29->unk_04, 0); @@ -1743,7 +1744,7 @@ static void DiceJumpFunc(omObjData* arg0) { temp_f31 = BoardPlayerMotionTimeGet(temp_r31->field00_bit1); if (BoardPlayerSizeGet(temp_r31->field00_bit1) == 1) { BoardPlayerPosGet(temp_r31->field00_bit1, &sp38); - sp38.y += 10.0f + (-(49.0f/2400.0f) * temp_r31->unk_08 * temp_r31->unk_08); + sp38.y += 10.0f + (-0.020416668f * temp_r31->unk_08 * temp_r31->unk_08); temp_r31->unk_08 += 1.0f; if (sp38.y < temp_r31->unk_0C) { sp38.y = temp_r31->unk_0C; @@ -2204,3 +2205,68 @@ void BoardPlayerCopyMat(s32 arg0) { memcpy(temp_r3, temp_r31->material, temp_r31->materialCnt * 0x3C); playerMatCopy[arg0] = temp_r3; } + +void BoardBowserSuitInit(s32 arg0) { + omObjData* temp_r3; + s32 temp_r27; + s32 var_r29; + s32 temp; + bitcopy3* temp_r31; + + + for (var_r29 = 0; var_r29 < 4; var_r29++) { + } + temp_r27 = GWPlayer[arg0].character; + temp = BoardDataDirReadAsync(0x40000); + BoardDataAsyncWait(temp); + suitMdl = BoardModelCreate(0x40018, NULL, 0); + BoardModelScaleSet(suitMdl, 1.2f, 1.2f, 1.2f); + suitPlayerMdl = BoardModelCreate(bowserSuitCharMdlTbl[temp_r27], NULL, 0); + GWPlayer[arg0].bowser_suit = 1; + temp_r3 = omAddObjEx(boardObjMan, 0x100, 0U, 0U, -1, &UpdateBowserSuit); + bowserSuitObj = temp_r3; + temp_r31 = (bitcopy3 *) temp_r3->work; + temp_r31->field00_bit0 = 0; + temp_r31->unk_01 = arg0; + temp_r31->unk_02 = 0; + BoardModelVoiceEnableSet(BoardPlayerModelGet(arg0), 3, 0); + BoardModelVoiceEnableSet(BoardPlayerModelGet(arg0), 4, 0); +} + +void BoardBowserSuitKill(s32 arg0) { + bitcopy3* temp; + + if (bowserSuitObj != 0) { + ((bitcopy3*) bowserSuitObj->work)->field00_bit0 = 1; + } + GWPlayer[arg0].bowser_suit = 0; + BoardModelVoiceEnableSet(BoardPlayerModelGet(arg0), 3, 1); + BoardModelVoiceEnableSet(BoardPlayerModelGet(arg0), 4, 1); + if (suitMdl != -1) { + BoardModelKill(suitMdl); + suitMdl = -1; + } + if (suitPlayerMdl != -1) { + BoardModelKill(suitPlayerMdl); + suitPlayerMdl = -1; + } + HuDataDirClose(0x40000); +} + +s16 BoardBowserSuitModelGet(void) { + return suitMdl; +} + +s16 BoardBowserSuitPlayerModelGet(void) { + return suitPlayerMdl; +} + +void BoardBowserSuitMotionCreate(void) { + s32 var_r31; + + + for (var_r31 = 0; var_r31 < 5; var_r31++) { + bowserSuitMot[var_r31] = (s16) BoardModelMotionCreate(suitMdl, bowserSuitMotTbl[var_r31]); + } + suitCurrMot = -1; +} From 063ab58382ae4ac7551ed6d5e22926ce92457090 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 24 Feb 2024 22:00:15 -0500 Subject: [PATCH 036/106] another small player update --- include/game/board/player.h | 12 +++++- src/game/board/player.c | 85 ++++++++++++++++++++++++++++++------- 2 files changed, 80 insertions(+), 17 deletions(-) diff --git a/include/game/board/player.h b/include/game/board/player.h index 66df59c1..2cbabee4 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -131,7 +131,17 @@ s32 BoardPlayerDiceJumpCheck(s32); static void DiceJumpFunc(omObjData*); void BoardRotateDiceNumbers(s32); void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2); -void UpdateDiceDigitSprite(omObjData*); +static void UpdateDiceDigitSprite(omObjData*); +static void UpdateDiceDigit2D(omObjData*); +void BoardPlayerBtnDownWait(s32, u32); +void BoardPlayerAutoSizeSet(s32, s32); +s32 BoardPlayerAutoSizeGet(s32); +u32 BoardPlayerMoveAwayIsDone(void); +void BoardPlayerMoveAwayStart(s32, s32, s32); +void BoardPlayerMoveAwayStartCurr(s32, s32); +static void MoveAwayObjFunc(omObjData*); +void BoardPlayerCopyMat(s32); +void BoardBowserSuitMotionSetJump(void); //... void BoardPlayerMotBlendExec(omObjData*); s32 BoardPlayerAutoSizeGet(s32); diff --git a/src/game/board/player.c b/src/game/board/player.c index acaa3a31..49e45eed 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -2190,22 +2190,6 @@ static void MoveAwayObjFunc(omObjData* arg0) { temp_r30->field00_bit0 = 1; } -// ... - -void BoardPlayerCopyMat(s32 arg0) { - s16 modelID; - ModelData *model; - void* temp_r3; - HsfData* temp_r31; - - modelID = BoardModelIDGet(GetBoardPlayer(arg0)); - model = &Hu3DData[modelID]; - temp_r31 = model->hsfData; - temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, temp_r31->materialCnt * 0x3C, 0x10000000U); - memcpy(temp_r3, temp_r31->material, temp_r31->materialCnt * 0x3C); - playerMatCopy[arg0] = temp_r3; -} - void BoardBowserSuitInit(s32 arg0) { omObjData* temp_r3; s32 temp_r27; @@ -2270,3 +2254,72 @@ void BoardBowserSuitMotionCreate(void) { } suitCurrMot = -1; } + +void BoardBowserSuitMotionSetWait(void) { + if (suitCurrMot != 0) { + BoardModelMotionShiftSet(suitMdl, bowserSuitMot[0], 0.0f, 4.0f, 0x40000001); + suitCurrMot = 0; + } +} + +void BoardBowserSuitMotionSetWalk(void) { + if (suitCurrMot != 1) { + BoardModelMotionStart(suitMdl, bowserSuitMot[1], 0x40000001); + suitCurrMot = 1; + } +} + +void BoardBowserSuitMotionSetWin(void) { + BoardModelMotionShiftSet(suitMdl, bowserSuitMot[3], 0.0f, 4.0f, 0); + suitCurrMot = 3; +} + +void BoardBowserSuitMotionSetJump(void) { + BoardModelMotionShiftSet(suitMdl, bowserSuitMot[2], 0.0f, 4.0f, 0); + suitCurrMot = 2; +} + +void BoardBowserSuitPlayerModelKill(void) { + if (suitPlayerMdl != -1) { + BoardModelMotionStart(suitPlayerMdl, 1, 0); + BoardModelMotionSpeedSet(suitPlayerMdl, 0.0f); + } +} + +void UpdateBowserSuit(omObjData* arg0) { + s16 temp_r30; + bitcopy3* temp_r31; + + temp_r31 = (bitcopy3*) arg0->work; + if ((temp_r31->field00_bit0 != 0) || (BoardIsKill() != 0)) { + bowserSuitObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if ((suitMdl != -1) && (suitCurrMot == 1)) { + temp_r30 = BoardModelMotionTimeGet(suitMdl); + if ((temp_r31->unk_02 == 0) && (((temp_r30 < 15.0f) && (temp_r30 >= 13.0f)) || ((temp_r30 < 40.0f) && (temp_r30 >= 38.0f)))) { + HuAudFXPlay(0x328); + temp_r31->unk_02 = 1; + } + if ((temp_r31->unk_02 != 0) && ((temp_r30 >= 20.0f) || (temp_r30 >= 49.0f))) { + temp_r31->unk_02 = 0; + } + } +} + +// ... + +void BoardPlayerCopyMat(s32 arg0) { + s16 modelID; + ModelData *model; + void* temp_r3; + HsfData* temp_r31; + + modelID = BoardModelIDGet(GetBoardPlayer(arg0)); + model = &Hu3DData[modelID]; + temp_r31 = model->hsfData; + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, temp_r31->materialCnt * 0x3C, 0x10000000U); + memcpy(temp_r3, temp_r31->material, temp_r31->materialCnt * 0x3C); + playerMatCopy[arg0] = temp_r3; +} From 08e6ce1a455c53b85998d8cd2baa5182e2629fa5 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Wed, 28 Feb 2024 06:16:45 -0800 Subject: [PATCH 037/106] Matched game/board/lottery + some unsplit cleanup --- config/GMPE01_00/symbols.txt | 8 +- configure.py | 2 +- include/board_unsplit.h | 18 - include/game/audio.h | 2 +- include/game/board/lottery.h | 13 + include/game/board/model.h | 7 +- include/game/gamework_data.h | 1 + include/game/msm.h | 2 +- src/REL/w03Dll/main.c | 19 +- src/REL/w03Dll/mg_coin.c | 22 +- src/REL/w03Dll/mg_item.c | 15 +- src/REL/w03Dll/river.c | 9 +- src/REL/w03Dll/smoke.c | 2 +- src/REL/w03Dll/statue.c | 8 +- src/REL/w10Dll/host.c | 1 + src/REL/w10Dll/main.c | 2 + src/REL/w10Dll/scene.c | 4 +- src/game/audio.c | 2 +- src/game/board/basic_space.c | 2 +- src/game/board/lottery.c | 2013 ++++++++++++++++++++++++++++++++++ src/game/board/main.c | 3 +- src/game/board/space.c | 7 +- src/game/board/star.c | 4 +- src/game/board/view.c | 4 +- src/game/board/warp.c | 5 +- 25 files changed, 2080 insertions(+), 95 deletions(-) create mode 100755 include/game/board/lottery.h create mode 100755 src/game/board/lottery.c diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index b4c32041..46f0f314 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5212,9 +5212,9 @@ lbl_80139DA8 = .data:0x80139DA8; // type:object size:0xA data:string itemPrioTbl = .data:0x80139DB2; // type:object size:0x8C scope:local rankItemGroupTbl = .data:0x80139E3E; // type:object size:0x18 scope:local cursorPosTbl = .data:0x80139E58; // type:object size:0x30 scope:local data:float -comInputDraw1 = .data:0x80139E88; // type:object size:0xEE scope:local -comInputDraw2 = .data:0x80139F76; // type:object size:0xBA scope:local -comInputBall = .data:0x8013A030; // type:object size:0xCE scope:local +comInputDraw1 = .data:0x80139E88; // type:object size:0xEE scope:local data:2byte +comInputDraw2 = .data:0x80139F76; // type:object size:0xBA scope:local data:2byte +comInputBall = .data:0x8013A030; // type:object size:0xCE scope:local data:2byte lbl_8013A0FE = .data:0x8013A0FE; // type:object size:0xC data:string lbl_8013A10A = .data:0x8013A10A; // type:object size:0xA data:string lbl_8013A114 = .data:0x8013A114; // type:object size:0x9 data:string @@ -5903,7 +5903,7 @@ lotterySpr = .sdata:0x801D3732; // type:object size:0x2 scope:local data:2byte lotteryInstWin = .sdata:0x801D3734; // type:object size:0x2 scope:local data:2byte gripMdl = .sdata:0x801D3736; // type:object size:0x4 scope:local data:2byte turnMot = .sdata:0x801D373A; // type:object size:0x2 scope:local data:2byte -ballMdl = .sdata:0x801D373C; // type:object size:0x8 scope:local +ballMdl = .sdata:0x801D373C; // type:object size:0x8 scope:local data:2byte loseMot = .sdata:0x801D3744; // type:object size:0x2 scope:local data:2byte ticketSprGrp = .sdata:0x801D3746; // type:object size:0x2 scope:local data:2byte warpSpringMdl = .sdata:0x801D3748; // type:object size:0x2 scope:local data:2byte diff --git a/configure.py b/configure.py index 42a02138..dd61dd7c 100644 --- a/configure.py +++ b/configure.py @@ -368,7 +368,7 @@ config.libs = [ Object(Matching, "game/board/view.c"), Object(NonMatching, "game/board/space.c"), Object(NonMatching, "game/board/shop.c"), - Object(NonMatching, "game/board/lottery.c"), + Object(Matching, "game/board/lottery.c"), Object(Matching, "game/board/basic_space.c"), Object(Matching, "game/board/warp.c"), Object(NonMatching, "game/board/char_wheel.c"), diff --git a/include/board_unsplit.h b/include/board_unsplit.h index 4115581c..2c7dcf01 100644 --- a/include/board_unsplit.h +++ b/include/board_unsplit.h @@ -14,26 +14,12 @@ typedef void (*BoardLightHook)(void); s32 BoardSpacePosGet(s32, s32, Vec*); void BoardShopTutorialExec(s32); -void BoardLotteryTutorialExec(void); void BoardMGSetupTutorialExec(void); void BoardBooHouseTutorialExec(void); void BoardCharWheelSetTarget(s32); void BoardSpaceStarSetIndex(s32); -s32 BoardModelRotYSet(s16, f32); -f32 BoardModelRotYGet(s16); -s32 BoardModelLayerSet(s16, u8); -s16 BoardModelIDGet(s16); -s32 BoardModelScaleSetV(s16, Vec*); void BoardLightHookSet(BoardLightHook set, BoardLightHook reset); -s16 BoardModelCreate(s32, s32*, s32); -void BoardModelKill(s16); s32 fn_8006DDE8(s16, f32); -s32 BoardModelMotionStart(s16, s32, u32); -s32 BoardModelMotionSpeedSet(s16, f32); -s32 BoardModelPosSetV(s16, Vec*); -s32 BoardModelPosSet(s16, f32, f32, f32); -s32 BoardModelRotSetV(s16 arg0, Vec* arg1); -s32 BoardModelVisibilitySet(s16, s32); void BoardSpaceWalkEventFuncSet(BoardSpaceEventFunc func); void BoardSpaceWalkMiniEventFuncSet(BoardSpaceEventFunc func); void BoardSpaceLandEventFuncSet(BoardSpaceEventFunc func); @@ -41,13 +27,9 @@ s32 BoardSpaceFlagSearch(s32, u32); void BoardSpaceInit(s32); void BoardSpaceDestroy(void); void BoardShopHostSet(s16); -void BoardLotteryHostSet(s16); void BoardBooHouseHostSet(s16); s32 BoardCameraRotGet(Vec*); -s32 BoardModelScaleSet(s16, f32, f32, f32); s32 BoardIsKill(void); -void BoardModelMtxSet(s16, Mtx*); -s32 BoardModelRotSet(s16, f32, f32, f32); void BoardBowserExec(s32 player, s32 space); void BoardBattleExec(s32 player, s32 space); diff --git a/include/game/audio.h b/include/game/audio.h index 09fd50cf..58a9f20d 100644 --- a/include/game/audio.h +++ b/include/game/audio.h @@ -20,7 +20,7 @@ void HuAudFXFadeOut(s32 arg0, s32 arg1); void HuAudFXPanning(s32 arg0, s16 arg1); void HuAudFXListnerSet(Vec* arg0, Vec* arg1, float arg2, float arg3); void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6); -void HuAudFXListnerUpdate(s32 arg0, s32 arg1); +void HuAudFXListnerUpdate(Vec *arg0, Vec *arg1); s32 HuAudFXEmiterPlay(s32 arg0, Vec *arg1); void HuAudFXEmiterUpDate(s32 arg0, Vec *arg1); void HuAudFXListnerKill(void); diff --git a/include/game/board/lottery.h b/include/game/board/lottery.h new file mode 100755 index 00000000..d292db5f --- /dev/null +++ b/include/game/board/lottery.h @@ -0,0 +1,13 @@ +#ifndef _BOARD_LOTTERY_H +#define _BOARD_LOTTERY_H + +#include "dolphin/types.h" + +void BoardLotteryHostSet(s16 arg0); +s16 BoardLotteryHostGet(void); +void BoardLotteryExec(void); +void BoardLotteryInit(void); +void BoardLotteryKill(void); +void BoardLotteryTutorialExec(void); + +#endif diff --git a/include/game/board/model.h b/include/game/board/model.h index 479194e6..8fa317bd 100644 --- a/include/game/board/model.h +++ b/include/game/board/model.h @@ -1,5 +1,5 @@ -#ifndef _BOARD_WARP_H -#define _BOARD_WARP_H +#ifndef _BOARD_MODEL_H +#define _BOARD_MODEL_H #include "game/hsfman.h" #include "game/data.h" @@ -40,13 +40,16 @@ s32 BoardModelMotionStartEndSet(s16 model, s16 start, s16 end); s32 BoardModelMotionStart(s16 model, s32 slot, u32 attr); s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr); s32 BoardModelAttrSet(s16 model, u32 attr); +s32 BoardModelAttrReset(s16 model, u32 attr); s32 BoardModelMotionTimeSet(s16 model, float time); float BoardModelMotionTimeGet(s16 model); float BoardModelMotionMaxTimeGet(s16 model); s32 BoardModelMotionSpeedSet(s16 model, float speed); s32 BoardModelMotionEndCheck(s16 model); s32 BoardModelAlphaSet(s16 model, u8 alpha); +s32 BoardModelMtxSet(s16 model, Mtx *src); s32 BoardModelRotYSet(s16 model, float rot); +float BoardModelRotYGet(s16 model); s32 BoardModelPosSet(s16 model, float x, float y, float z); s32 BoardModelPosSetV(s16 model, Vec *pos); s32 BoardModelRotSet(s16 model, float x, float y, float z); diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index c0333d13..874b1e71 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -58,6 +58,7 @@ typedef struct player_state { u16 character : 4; u16 auto_size : 2; u16 field00_bit9 : 1; + u16 field00_bitA : 6; }; /* 0x02 */ struct { u8 team : 1; diff --git a/include/game/msm.h b/include/game/msm.h index 75f35f19..1885d41e 100644 --- a/include/game/msm.h +++ b/include/game/msm.h @@ -69,7 +69,7 @@ void msmMusStopAll(s32 arg0, s32 arg1); void msmMusStop(s32 arg0, s32 arg1); s32 msmMusPlay(s32 arg0, UnkMsmStruct_03 *arg1); void msmSeDelListener(void); -void msmSeUpdataListener(s32 arg0, s32 arg1); +void msmSeUpdataListener(Vec *arg0, Vec *arg1); void msmSeSetListener(Vec* arg0, Vec* arg1, float arg2, float arg3, UnkMsmStruct_02 *arg4); s32 msmSeGetEntryID(s32 arg0, void *arg1); s32 msmSeGetNumPlay(s32 arg0); diff --git a/src/REL/w03Dll/main.c b/src/REL/w03Dll/main.c index 732301f8..8671684d 100644 --- a/src/REL/w03Dll/main.c +++ b/src/REL/w03Dll/main.c @@ -1,9 +1,13 @@ #include "dolphin.h" #include "REL/executor.h" -#include "game/process.h" +#include "game/audio.h" #include "game/data.h" #include "game/gamework_data.h" +#include "game/process.h" +#include "game/wipe.h" #include "REL/w03Dll.h" +#include "game/board/lottery.h" +#include "game/board/model.h" #include "game/board/space.h" #include "game/board/star.h" #include "game/object.h" @@ -12,9 +16,6 @@ #include "board_unsplit.h" #include "game/hsfman.h" -s32 BoardModelPosSet(s16, f32, f32, f32); -s32 BoardModelMotionStart(s16, s32, u32); - void fn_8005B150(void*, void*); void fn_1_740(void); void fn_1_E0(void); @@ -35,14 +36,6 @@ extern const VoidFunc _ctors[]; extern const VoidFunc _dtors[]; -f32 BoardModelMotionTimeGet(s16); -s16 BoardModelCreate(s32, s32*, s32); -void BoardModelKill(s16); -void BoardModelMotionStartEndSet(s16, s32, s32); -void Hu3DFogSet(f32, f32, u8, u8, u8); -void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, float arg4, float arg5, float arg6); -u8 WipeStatGet(void); - //DATA w03StructUnk0 lbl_1_data_0[] = { {{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0004)}, @@ -328,7 +321,7 @@ void fn_1_B5C(s32 arg0) { } BoardModelAttrSet(lbl_1_bss_C[0], 0x40000001); BoardModelMotionTimeSet(lbl_1_bss_C[0], var_f31); - BoardModelMotionStartEndSet(lbl_1_bss_C[0], (s32) var_f31, (s32) var_f28); + BoardModelMotionStartEndSet(lbl_1_bss_C[0], var_f31, var_f28); } void fn_1_CF4(void) { diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index e76ce248..c73112fd 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -4,6 +4,7 @@ #include "REL/w03Dll.h" #include "board_unsplit.h" #include "game/board/main.h" +#include "game/board/model.h" #include "game/board/player.h" extern u16 HuPadBtnDown[4]; @@ -67,9 +68,6 @@ double cos(double x); double atan2(double y, double x); extern s16 MGSeqCreate(s32, ...); u8 MGSeqStatGet(s16); -float BoardModelMotionTimeGet(s16 model); -float BoardModelMotionMaxTimeGet(s16 model); -s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr); void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); //DATA @@ -206,7 +204,7 @@ s32 fn_1_7D18(s32 arg0) { BoardSpacePosGet(0, temp_r28, &sp38); PSVECSubtract(&sp38, &sp2C, &sp20); PSVECNormalize(&sp20, &sp20); - BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / 3.141592653589793)); + BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI)); HuPrcSleep(0x1E); model = BoardModelIDGet(lbl_1_bss_C[7]); Hu3DModelObjPosGet(model, phei_str, &sp38); @@ -215,15 +213,15 @@ s32 fn_1_7D18(s32 arg0) { } else { var_f31 = 39.0f; } - sp38.x = sp38.x + (var_f31 * sin((3.141592653589793 * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0)); - sp38.z = sp38.z + (var_f31 * cos((3.141592653589793 * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0)); + sp38.x = sp38.x + (var_f31 * sin((M_PI * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0)); + sp38.z = sp38.z + (var_f31 * cos((M_PI * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0)); BoardPlayerPosGet(arg0, &sp2C); BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x14); while (GWPlayer[arg0].moving != 0) { BoardModelPosGet(lbl_1_bss_C[10], &sp2C); BoardPlayerPosGet(arg0, &sp38); PSVECSubtract(&sp38, &sp2C, &sp20); - arctan = atan2(sp20.x, sp20.z) / 3.141592653589793 * 180.0; + arctan = atan2(sp20.x, sp20.z) / M_PI * 180.0; BoardModelRotYSet(lbl_1_bss_C[10], arctan); HuPrcVSleep(); } @@ -482,7 +480,7 @@ void fn_1_8C08(omObjData* arg0, someBits3* arg1) { BoardPlayerMotionSpeedSet(arg1->unk00_bit5, 0.0f); BoardModelAttrSet(lbl_1_bss_C[7], 0x40000002); BoardModelAttrSet(lbl_1_data_456, 0x40000002); - arg1->unk00_bit1 = 2; + arg1->unk00_bit1 = 2; arg1->unk1 = 0x3C; arg1->unk2 = 0; } @@ -549,7 +547,7 @@ void fn_1_9044(omObjData* arg0, someBits3* arg1) { } } } - sp8.z = arg0->trans.x * sin((3.141592653589793 * arg0->trans.y) / 180.0); + sp8.z = arg0->trans.x * sin((M_PI * arg0->trans.y) / 180.0); BoardModelRotSetV(lbl_1_data_456, &sp8); } @@ -580,7 +578,7 @@ void fn_1_9230(s32 arg0) { BoardModelPosGet(lbl_1_bss_C[10], &sp20); BoardPlayerPosGet(arg0, &sp14); PSVECSubtract(&sp14, &sp20, &sp8); - rotY = atan2(sp8.x, sp8.z) / 3.141592653589793 * 180.0; + rotY = atan2(sp8.x, sp8.z) / M_PI * 180.0; BoardModelRotYSet(lbl_1_bss_C[10], rotY); HuPrcVSleep(); } @@ -712,8 +710,8 @@ void fn_1_97F8(s32 arg0) { } temp_r31 = &temp_r30->unk_0C[i]; temp_r31->unk0 = 1; - temp_r31->unk8.x = sp8.x + (50.0f * sin((3.141592653589793 * var_f31) / 180.0)); - temp_r31->unk8.z = sp8.z + (50.0f * cos((3.141592653589793 * var_f31) / 180.0)); + temp_r31->unk8.x = sp8.x + (50.0f * sin((M_PI * var_f31) / 180.0)); + temp_r31->unk8.z = sp8.z + (50.0f * cos((M_PI * var_f31) / 180.0)); temp_r31->unk8.y = 600.0f + sp8.y + (500.0f * BoardRandFloat()); temp_r31->unk1 = 0; temp_r31->unk4 = BoardRandFloat() * 360.0f; diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index d9bfc3be..6740b263 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -5,6 +5,7 @@ #include "game/gamework_data.h" #include "REL/w03Dll.h" #include "game/board/main.h" +#include "game/board/model.h" #include "game/board/space.h" #include "game/object.h" #include "game/objsub.h" @@ -54,7 +55,7 @@ typedef struct w03UnkMG { /* 0x10 */ s16 unk_10; /* 0x12 */ s16 unk_12; /* 0x14 */ s16 unk_14; - /* 0x16 */ s16 unk_16; + /* 0x16 */ s16 unk_16; } w03UnkMG; //external symbols @@ -64,23 +65,13 @@ extern Process *boardObjMan; extern u16 HuPadBtnDown[4]; //function signatures -s32 BoardModelMotionShiftSet(s16, s32, f32, f32, u32); s32 BoardVecDAngleCalcRange(float *value, float min, float range); void BoardCameraQuakeSet(s32 duration, float strength); s16 MGSeqCreate(s32, ...); u8 MGSeqStatGet(s16); -f32 BoardPlayerRotYGet(s32); -f32 BoardModelMotionTimeGet(s16); s32 BoardVecMinDistCheck(Vec *vec1, Vec *vec2, float min_dist); -s32 BoardModelScaleGet(s16 model, Vec *dst); -s32 BoardModelMotionTimeSet(s16 model, float time); -s32 BoardDAngleCalcRange(float *value, float min, float range); -u32 BoardRandMod(u32 value); -void BoardModelMotionStartEndSet(s16, s32, s32); void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); -s32 BoardModelPosGet(s16 model, Vec *dst); s16 Hu3DMotionShiftIDGet(s16 arg0); -f32 BoardPlayerMotionTimeGet(s32); s32 frand(void); void fn_1_BE30(s32 arg0, ParticleData* arg1); @@ -654,7 +645,7 @@ void fn_1_B0A4(s32 arg0) { temp_r30->unk00_bit4 = arg0; for (i = 0; i < 3;) { - spC[i] = BoardRandMod(14); + spC[i] = BoardRandMod(14); if ((spC[i] != 10) && (spC[i] != 13)) { for (j = 0; j < i; j++) { if (spC[i] == spC[j]) { diff --git a/src/REL/w03Dll/river.c b/src/REL/w03Dll/river.c index 64b99a24..b77ebef2 100644 --- a/src/REL/w03Dll/river.c +++ b/src/REL/w03Dll/river.c @@ -3,6 +3,7 @@ #include "REL/w03Dll.h" #include "board_unsplit.h" #include "game/board/main.h" +#include "game/board/model.h" #include "game/board/player.h" double sin(double x); @@ -10,14 +11,8 @@ double cos(double x); double atan2(double y, double x); s16 BoardModelIDGet(s16 model); void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); -float BoardModelMotionTimeGet(s16 model); -s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr); -void BoardPlayerPosSet(s32, f32, f32, f32); -s32 BoardModelHookSet(s16 model, char *name, s16 hook); -#define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0]))) - extern s16 lbl_1_bss_C[14]; extern s16 boardPlayerMdl[4]; @@ -244,9 +239,7 @@ s32 fn_1_6898(s32 arg0) { return 1; } -float BoardModelRotYGet(s16 model); s32 BoardDAngleCalcRange(float *value, float min, float range); -float BoardModelRotYGet(s16 model); void fn_1_6B98(s32 arg0) { Vec sp30; diff --git a/src/REL/w03Dll/smoke.c b/src/REL/w03Dll/smoke.c index 65a1088e..c9731903 100644 --- a/src/REL/w03Dll/smoke.c +++ b/src/REL/w03Dll/smoke.c @@ -3,6 +3,7 @@ #include "REL/w03Dll.h" #include "board_unsplit.h" #include "game/board/main.h" +#include "game/board/model.h" typedef struct w03UnkWorkStruct { s16 unk_00[5]; @@ -16,7 +17,6 @@ extern Process *boardObjMan; extern s16 lbl_1_data_1E0; void fn_1_79E0(omObjData* arg0); -f32 BoardModelMotionMaxTimeGet(s16); char kemuri1[] = "kemuri1"; char kemuri2[] = "kemuri2"; diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index 38273508..f5b5fd67 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -5,8 +5,9 @@ #include "game/gamework_data.h" #include "REL/w03Dll.h" #include "game/audio.h" -#include "game/board/space.h" +#include "game/board/model.h" #include "game/board/player.h" +#include "game/board/space.h" #include "game/board/ui.h" #include "board_unsplit.h" #include "game/hsfman.h" @@ -26,12 +27,7 @@ void fn_1_2AC0(void); void fn_1_2818(void); void fn_1_2A40(void); void fn_1_2B44(void); -s32 BoardDAngleCalcRange(f32*, f32, f32); -s32 BoardPlayerMotBlendCheck(s32); -f32 BoardPlayerRotYGet(s32); -void BoardConfettiCreate(Point3d*, s16, f32); double atan2(double y, double x); -f32 BoardModelMotionTimeGet(s16); //DATA s16 lbl_1_data_280 = -1; diff --git a/src/REL/w10Dll/host.c b/src/REL/w10Dll/host.c index ce7465a1..275264d2 100644 --- a/src/REL/w10Dll/host.c +++ b/src/REL/w10Dll/host.c @@ -1,5 +1,6 @@ #include "REL/w10Dll.h" #include "game/data.h" +#include "game/board/model.h" #include "game/board/tutorial.h" #include "game/board/window.h" diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index 9bd9f796..c38b242f 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -1,6 +1,8 @@ #include "include/REL/w10Dll.h" #include "game/data.h" #include "game/hsfman.h" +#include "game/board/lottery.h" +#include "game/board/model.h" #include "game/board/star.h" #include "game/board/tutorial.h" diff --git a/src/REL/w10Dll/scene.c b/src/REL/w10Dll/scene.c index 881ea98b..0570fce7 100644 --- a/src/REL/w10Dll/scene.c +++ b/src/REL/w10Dll/scene.c @@ -1,5 +1,7 @@ #include "include/REL/w10Dll.h" +#include "game/board/lottery.h" #include "game/board/main.h" +#include "game/board/model.h" #include "game/board/star.h" #include "game/board/tutorial.h" #include "game/board/ui.h" @@ -185,7 +187,7 @@ void fn_1_13A4(void) { fn_1_C10(0); fn_1_BA0(0x2E002B); sp8.x = -33.0f; - sp8.y = sp8.z = 0.0f; + sp8.y = sp8.z = 0.0f; temp_r3_2 = BoardSpaceFlagSearch(0, 0x80000); BoardSpacePosGet(0, temp_r3_2, &sp14); BoardModelPosSetV(lbl_1_bss_0->unk8, &sp14); diff --git a/src/game/audio.c b/src/game/audio.c index ca9ddb0a..2a1e1dd5 100644 --- a/src/game/audio.c +++ b/src/game/audio.c @@ -190,7 +190,7 @@ void HuAudFXListnerSetEX(Vec* arg0, Vec* arg1, float sndDist, float sndSpeed, fl } } -void HuAudFXListnerUpdate(s32 arg0, s32 arg1) { +void HuAudFXListnerUpdate(Vec *arg0, Vec *arg1) { if (omSysExitReq == 0) { msmSeUpdataListener(arg0, arg1); } diff --git a/src/game/board/basic_space.c b/src/game/board/basic_space.c index 894f5e31..7dc7f24b 100644 --- a/src/game/board/basic_space.c +++ b/src/game/board/basic_space.c @@ -1,5 +1,6 @@ #include "game/board/basic_space.h" #include "game/board/main.h" +#include "game/board/model.h" #include "game/board/player.h" #include "game/board/tutorial.h" #include "game/data.h" @@ -37,7 +38,6 @@ static void CoinChgDisappear(omObjData*, coinChg*); extern void BoardCameraViewSet(s32); extern void BoardPlayerPosGet(s32, Vec*); -extern void BoardModelPosGet(s16, Vec*); extern void BoardPlayerMotionEndWait(s32); extern void BoardPlayerCoinsAdd(s32, s32); extern void BoardRotateDiceNumbers(s32); diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c new file mode 100755 index 00000000..e08f6781 --- /dev/null +++ b/src/game/board/lottery.c @@ -0,0 +1,2013 @@ +#include "game/board/lottery.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/esprite.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/hsfex.h" +#include "game/hsfman.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/sprite.h" +#include "game/board/audio.h" +#include "game/board/com.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/tutorial.h" +#include "game/board/ui.h" +#include "game/board/window.h" + +#include "math.h" + +#define ABS(x) (((x) < 0) ? -(x) : (x)) + +typedef struct { + struct { + u8 unk00_field0 : 1; + s8 unk00_field1 : 1; + u8 unk00_field2 : 4; + }; + u8 unk01; + s16 unk02; + s16 unk04; + char unk06[2]; + AnimData *unk08; +} TicketWork; + +typedef struct { + struct { + u8 unk00_field0 : 1; + }; + s8 unk01; + s8 unk02; + s8 unk03; + u8 unk04; + char unk05[1]; + s16 unk06; + s16 unk08; +} LotteryTicketPickWork; + +extern s32 BoardShopHostGet(void); + +static void CreateModel(void); +static void KillModel(void); +static void DestroyLottery(void); +static void ExecLottery(void); +static void DoMiniJumpUp(s32 arg0); +static void DoMiniJumpDown(s32 arg0); +static void PayEnterFee(s32 arg0); +static void ShowTicket(void); +static void SetupTicket(s32 arg0); +static void ExecBallGame(void); +static void SetBallPrize(void); +static void ExecBallPrize(void); +static void ExecScratchTicket(s32 arg0); +static void ExecScratch(void); +static void KillScratch(void); +static void ExecScratchSpr(omObjData *arg0); +static void HideScratchSpr(void); +static void InitScratchSpr(void); +static void ExecScratchPick(omObjData *arg0); +static void InitScratchPick(void); +static void InitTicketPrizes(void); +static void ExecTicketFocus(s32 arg0); +static BOOL ScratchTicketCheckDone(AnimBmpData *arg0); +static u16 TicketGetPixel(u16 arg0, u16 arg1, u16 arg2); +static s32 TicketUpdate(AnimBmpData *arg0, Vec *arg1, s32 arg2); +static void ExecCoinPrize(void); +static void ExecItemPrize(void); +static void KillCoin(void); +static void ExecPrize(void); +static void ExecLose(s32 arg0); +static void CreateLotteryWin(s32 arg0); +static void KillLotteryWin(void); + +static s16 lotteryMdl[6]; +static s8 coinF[12]; +static s16 coinMdl[10]; + +static s32 lotteryMessBase; +static s16 lotterySpace; +static s8 currPrize; +s8 lbl_801D401B; +static s8 comLotteryType; +static s8 comLotteryWinType; +static u8 comInputPos; +static s32 handUpdateF; +// ... +static omObjData *lotteryTicketPickObj; +static s8 (*comInputDrawP)[2]; +Process *lotteryProc; + +static s16 hostMdl = -1; +static s16 lotteryMot[4] = { -1, -1, -1, -1 }; +static s16 lotterySpr = -1; +static s16 lotteryInstWin = -1; +static s16 gripMdl[2] = { 0, 0 }; +static s16 turnMot = -1; +static s16 ballMdl[4] = { -1, -1, -1, -1 }; +static s16 loseMot = -1; +static s16 ticketSprGrp = -1; + +static s8 comInputDraw1[][2] = { + { 0x0B, 0xF8 }, { 0x2B, 0xDD }, { 0x2A, 0xDC }, { 0x2B, 0xDC }, + { 0x2B, 0xDC }, { 0x29, 0xDB }, { 0x24, 0xD6 }, { 0x02, 0xE8 }, + { 0x00, 0x00 }, { 0xFC, 0x02 }, { 0xD8, 0x27 }, { 0xD8, 0x28 }, + { 0xD8, 0x28 }, { 0xD8, 0x27 }, { 0xDA, 0x29 }, { 0xDE, 0x2C }, + { 0xE4, 0x31 }, { 0xF0, 0x3A }, { 0x00, 0x3C }, { 0x06, 0x3A }, + { 0x1B, 0x32 }, { 0x23, 0x2B }, { 0x24, 0x2A }, { 0x25, 0x29 }, + { 0x26, 0x29 }, { 0x28, 0x27 }, { 0x28, 0x27 }, { 0x28, 0x26 }, + { 0x28, 0x26 }, { 0x2E, 0x20 }, { 0x39, 0x11 }, { 0x48, 0x00 }, + { 0x48, 0x00 }, { 0x35, 0xEA }, { 0x29, 0xDB }, { 0x24, 0xD5 }, + { 0x17, 0xCB }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, + { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0xEB, 0xCA }, { 0xD6, 0xDB }, + { 0xD6, 0xDB }, { 0xD4, 0xDE }, { 0xD1, 0xE2 }, { 0xC4, 0xF2 }, + { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, + { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xC1, 0x0B }, + { 0xC6, 0x10 }, { 0xC9, 0x14 }, { 0xCB, 0x16 }, { 0xCB, 0x17 }, + { 0xCE, 0x1A }, { 0xD1, 0x1E }, { 0xD5, 0x23 }, { 0xD4, 0x22 }, + { 0xDB, 0x29 }, { 0xF5, 0x3E }, { 0x00, 0x48 }, { 0x00, 0x42 }, + { 0x0D, 0x3D }, { 0x24, 0x2A }, { 0x29, 0x26 }, { 0x29, 0x26 }, + { 0x29, 0x25 }, { 0x2D, 0x21 }, { 0x34, 0x18 }, { 0x40, 0x09 }, + { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x43, 0xFA }, { 0x33, 0xE6 }, + { 0x29, 0xDB }, { 0x1B, 0xCF }, { 0x05, 0xBD }, { 0x00, 0xB8 }, + { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0xFB, 0xBD }, { 0xDD, 0xD5 }, + { 0xD6, 0xDC }, { 0xD6, 0xDC }, { 0xD4, 0xDE }, { 0xCB, 0xE9 }, + { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xC5, 0x0F }, + { 0xD0, 0x1D }, { 0xD5, 0x23 }, { 0xDC, 0x2A }, { 0xF0, 0x3B }, + { 0x00, 0x3D }, { 0x08, 0x3F }, { 0x15, 0x36 }, { 0x24, 0x2A }, + { 0x29, 0x26 }, { 0x2A, 0x24 }, { 0x30, 0x1C }, { 0x3B, 0x0F }, + { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x3E, 0xF4 }, { 0x2D, 0xE0 }, + { 0x22, 0xD4 }, { 0x02, 0xBB }, { 0x00, 0xB8 }, { 0xFB, 0xBD }, + { 0xD9, 0xD8 }, { 0xD4, 0xDE }, { 0x7F, 0x7F } +}; + +static s8 comInputDraw2[][2] = { + { 0x07, 0x00 }, { 0x1F, 0x00 }, { 0x3A, 0x00 }, { 0x48, 0x00 }, + { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x48, 0x00 }, + { 0x43, 0xFA }, { 0x35, 0xEA }, { 0x2A, 0xDB }, { 0x1A, 0xCE }, + { 0x00, 0xB9 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, + { 0x00, 0xBA }, { 0xE9, 0xCC }, { 0xD5, 0xDD }, { 0xD4, 0xDE }, + { 0xD4, 0xDE }, { 0xD0, 0xE3 }, { 0xBD, 0xFB }, { 0xB8, 0x00 }, + { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, + { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xBC, 0x03 }, { 0xC2, 0x0C }, + { 0xCB, 0x17 }, { 0xD5, 0x23 }, { 0xD8, 0x27 }, { 0xF0, 0x3A }, + { 0x00, 0x43 }, { 0x18, 0x34 }, { 0x29, 0x26 }, { 0x29, 0x26 }, + { 0x29, 0x26 }, { 0x29, 0x25 }, { 0x29, 0x26 }, { 0x29, 0x25 }, + { 0x29, 0x25 }, { 0x2C, 0x22 }, { 0x31, 0x1B }, { 0x39, 0x12 }, + { 0x47, 0x00 }, { 0x48, 0x00 }, { 0x48, 0x00 }, { 0x37, 0xEC }, + { 0x26, 0xD7 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, + { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, { 0xFB, 0xBD }, + { 0xE5, 0xCE }, { 0xD6, 0xDC }, { 0xD6, 0xDC }, { 0xD6, 0xDC }, + { 0xD5, 0xDD }, { 0xD2, 0xE0 }, { 0xCC, 0xE8 }, { 0xC4, 0xF2 }, + { 0xBE, 0xFA }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, + { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, + { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xB8, 0x00 }, + { 0xC7, 0x12 }, { 0xD8, 0x27 }, { 0xF6, 0x3E }, { 0x00, 0x47 }, + { 0x00, 0x44 }, { 0x05, 0x42 }, { 0x16, 0x35 }, { 0x28, 0x27 }, + { 0x29, 0x26 }, { 0x29, 0x26 }, { 0x29, 0x26 }, { 0x29, 0x26 }, + { 0x7F, 0x7F } +}; + +static s8 comInputBall[][2] = { + { 0xE5, 0x00 }, { 0xC0, 0x03 }, { 0xBC, 0x04 }, { 0xBC, 0x03 }, + { 0xBF, 0x07 }, { 0xC3, 0x0C }, { 0xCB, 0x17 }, { 0xD5, 0x24 }, + { 0xDE, 0x2C }, { 0xF9, 0x3E }, { 0x00, 0x48 }, { 0x00, 0x45 }, + { 0x06, 0x40 }, { 0x21, 0x2C }, { 0x28, 0x27 }, { 0x28, 0x26 }, + { 0x29, 0x25 }, { 0x30, 0x1D }, { 0x43, 0x05 }, { 0x48, 0x00 }, + { 0x33, 0xE7 }, { 0x24, 0xD6 }, { 0x07, 0xBF }, { 0x00, 0xB8 }, + { 0x00, 0xB8 }, { 0xE4, 0xCF }, { 0xD4, 0xDE }, { 0xC6, 0xF0 }, + { 0xB8, 0x00 }, { 0xC7, 0x11 }, { 0xD2, 0x20 }, { 0xD5, 0x24 }, + { 0xD6, 0x25 }, { 0xD8, 0x27 }, { 0xE1, 0x2E }, { 0x00, 0x43 }, + { 0x00, 0x48 }, { 0x00, 0x44 }, { 0x1D, 0x30 }, { 0x28, 0x27 }, + { 0x28, 0x27 }, { 0x2C, 0x22 }, { 0x39, 0x12 }, { 0x48, 0x00 }, + { 0x34, 0xE8 }, { 0x23, 0xD5 }, { 0x0A, 0xC1 }, { 0x00, 0xB8 }, + { 0x00, 0xB8 }, { 0xF4, 0xC3 }, { 0xD4, 0xDE }, { 0xC3, 0xF4 }, + { 0xB8, 0x00 }, { 0xC6, 0x10 }, { 0xD3, 0x21 }, { 0xD6, 0x25 }, + { 0xD8, 0x27 }, { 0xDF, 0x2D }, { 0xEA, 0x36 }, { 0x00, 0x48 }, + { 0x00, 0x48 }, { 0x00, 0x48 }, { 0x17, 0x35 }, { 0x28, 0x27 }, + { 0x29, 0x25 }, { 0x33, 0x19 }, { 0x48, 0x00 }, { 0x48, 0x00 }, + { 0x34, 0xE8 }, { 0x23, 0xD5 }, { 0x00, 0xB9 }, { 0x00, 0xB8 }, + { 0x00, 0xB8 }, { 0xFA, 0xBE }, { 0xD4, 0xDE }, { 0xC8, 0xED }, + { 0xB8, 0x00 }, { 0xB8, 0x00 }, { 0xC0, 0x09 }, { 0xD0, 0x1C }, + { 0xD6, 0x24 }, { 0xDC, 0x2A }, { 0xED, 0x38 }, { 0x00, 0x48 }, + { 0x00, 0x48 }, { 0x00, 0x48 }, { 0x1B, 0x31 }, { 0x28, 0x27 }, + { 0x29, 0x26 }, { 0x2D, 0x21 }, { 0x3D, 0x0C }, { 0x48, 0x00 }, + { 0x33, 0xE7 }, { 0x20, 0xD3 }, { 0x00, 0xB8 }, { 0x00, 0xB8 }, + { 0x00, 0xBB }, { 0xDB, 0xD7 }, { 0xD4, 0xDE }, { 0xD3, 0xDF }, + { 0xBB, 0xFD }, { 0xB8, 0x00 }, { 0x7F, 0x7F } +}; + +void BoardLotteryHostSet(s16 arg0) { + hostMdl = arg0; +} + +s16 BoardLotteryHostGet(void) { + return hostMdl; +} + +void BoardLotteryExec(void) { + if (BoardPlayerSizeGet(GWSystem.player_curr) == 2) { + return; + } + BoardDiceDigit2DShowSet(0); + lotteryProc = HuPrcChildCreate(ExecLottery, 0x2003, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(lotteryProc, DestroyLottery); + while (lotteryProc) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); +} + +void BoardLotteryInit(void) { + Vec sp14; + Vec sp8; + s32 i; + + for (i = 0; i < 5; i++) { + lotteryMdl[i] = -1; + } + for (i = 0; i < 4; i++) { + lotteryMot[i] = -1; + } + for (i = 0; i < 4; i++) { + ballMdl[i] = -1; + } + turnMot = -1; + loseMot = -1; + if (GWBoardGet() != 8) { + BoardModelVisibilitySet(BoardLotteryHostGet(), 0); + BoardSpaceLinkTransformGet(0x10000000, &sp14, &sp8, NULL); + lotteryMdl[0] = BoardModelCreate(0x50000, NULL, 0); + BoardModelMotionStart(lotteryMdl[0], 0, 0); + BoardModelMotionSpeedSet(lotteryMdl[0], 0.0f); + BoardModelPosSetV(lotteryMdl[0], &sp14); + BoardModelRotSetV(lotteryMdl[0], &sp8); + HuDataDirClose(0x50000); + } +} + +static void CreateModel(void) { + s32 i; + s32 sp10[4] = { 0x00050005, 0x00050006, 0x00050007, 0x00050008 }; + s32 sp8[2] = { 0x00050003, 0x00050004 }; + s32 sp20[9][4] = { + { 0x00020001, 0x00020002, 0x00020003, 0x00020004 }, + { 0x00020009, 0x0002000A, 0x0002000B, 0x0002000C }, + { 0x0002000E, 0x0002000F, 0x00020010, 0x00020011 }, + { 0x00020018, 0x00020019, 0x0002001A, 0x0002001B }, + { 0x0002001D, 0x0002001E, 0x0002001F, 0x00020020 }, + { 0x00020022, 0x00020023, 0x00020024, 0x00020025 }, + { 0x0002000E, 0x0002000F, 0x00020010, 0x00020011 }, + { 0x0002002A, 0x0002002B, 0x0002002C, 0x0002002D }, + { 0x0002002A, 0x0002002B, 0x0002002C, 0x0002002D } + }; + + lotteryMdl[1] = BoardModelCreate(0x50001, NULL, 0); + fn_8006DDE8(lotteryMdl[1], -1.0f); + BoardModelMotionSpeedSet(lotteryMdl[1], 0.0f); + lotteryMdl[2] = BoardModelCreate(0x50002, NULL, 0); + BoardModelVisibilitySet(lotteryMdl[2], 0); + fn_8006DDE8(lotteryMdl[2], -1.0f); + BoardModelMotionStart(lotteryMdl[2], 0, 0); + BoardModelMotionSpeedSet(lotteryMdl[2], 0.0f); + for (i = 0; i < 4; i++) { + ballMdl[i] = BoardModelCreate(sp10[i], NULL, 0); + BoardModelVisibilitySet(ballMdl[i], 0); + fn_8006DDE8(ballMdl[i], -1.0f); + } + for (i = 0; i < 2; i++) { + gripMdl[i] = BoardModelCreate(sp8[i], NULL, 0); + BoardModelVisibilitySet(gripMdl[i], 0); + fn_8006DDE8(gripMdl[i], -1.0f); + BoardModelMotionSpeedSet(gripMdl[i], 0.0f); + } + lotteryMdl[3] = BoardModelCreate(0x50011, NULL, 0); + BoardModelVisibilitySet(lotteryMdl[3], 0); + fn_8006DDE8(lotteryMdl[3], -1.0f); + BoardModelPosSet(BoardLotteryHostGet(), 0.0f, 0.0f, 0.0f); + BoardModelVisibilitySet(BoardLotteryHostGet(), 1); + for (i = 0; i < 4; i++) { + lotteryMot[i] = BoardModelMotionCreate(BoardLotteryHostGet(), sp20[GWBoardGet()][i]); + } + BoardModelMotionStart(BoardLotteryHostGet(), lotteryMot[0], 0x40000001); + BoardModelHookSet(lotteryMdl[0], "toto_heyhoo", BoardLotteryHostGet()); + BoardModelHookSet(lotteryMdl[0], "toto_gara", lotteryMdl[1]); + BoardModelHookSet(lotteryMdl[0], "toto_efe", lotteryMdl[2]); + BoardModelHookSet(lotteryMdl[0], "toto_chibidai", lotteryMdl[3]); + BoardModelHookSet(lotteryMdl[1], "toto_grip", gripMdl[0]); + BoardModelHookSet(lotteryMdl[1], "toto_grip1", gripMdl[1]); +} + +static void KillModel(void) { + s32 i; + + if (lotteryMdl[1] != -1) { + BoardModelHookReset(lotteryMdl[0]); + } + BoardModelMotionStart(BoardLotteryHostGet(), 1, 0x40000001); + if (turnMot != -1) { + BoardPlayerMotionKill(GWSystem.player_curr, turnMot); + turnMot = -1; + } + for (i = 0; i < 4; i++) { + if (lotteryMot[i] != -1) { + BoardModelMotionKill(BoardLotteryHostGet(), lotteryMot[i]); + lotteryMot[i] = -1; + } + } + for (i = 0; i < 4; i++) { + if (ballMdl[i] != -1) { + BoardModelKill(ballMdl[i]); + ballMdl[i] = -1; + } + } + for (i = 0; i < 2; i++) { + if (gripMdl[i] != -1) { + BoardModelKill(gripMdl[i]); + gripMdl[i] = -1; + } + } + for (i = 0; i < 5; i++) { + if (i != 0 && lotteryMdl[i] != -1) { + BoardModelKill(lotteryMdl[i]); + lotteryMdl[i] = -1; + } + } + BoardModelVisibilitySet(BoardLotteryHostGet(), 0); +} + +void BoardLotteryKill(void) { + if (lotteryProc) { + HuPrcKill(lotteryProc); + } + if (lotteryMdl[0] != -1) { + BoardModelKill(lotteryMdl[0]); + lotteryMdl[0] = -1; + } +} + +static void DestroyLottery(void) { + s32 i; + + for (i = 0; i < 4; i++) { + if (i != GWSystem.player_curr) { + BoardPlayerMotBlendSet(i, 0, 7); + } + } + if (loseMot != -1) { + BoardPlayerMotionKill(GWSystem.player_curr, loseMot); + loseMot = -1; + } + KillLotteryWin(); + BoardConfettiKill(); + BoardWinKill(); + KillScratch(); + KillCoin(); + HuDataDirClose(0x50000); + lotteryProc = NULL; +} + +static void ExecLottery(void) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + s16 temp_r26; + s16 temp_r28; + u32 var_r25; + s32 var_r27; + s32 temp_r31; + s32 i; + s32 temp_r29; + + switch (GWBoardGet()) { + case 0: + lotteryMessBase = 0x60002; + break; + case 1: + lotteryMessBase = 0x6000F; + break; + case 2: + lotteryMessBase = 0x6001C; + break; + case 3: + lotteryMessBase = 0x60029; + break; + case 4: + lotteryMessBase = 0x60036; + break; + case 5: + lotteryMessBase = 0x60043; + break; + case 6: + lotteryMessBase = 0x60002; + break; + case 7: + lotteryMessBase = 0x60052; + break; + case 8: + lotteryMessBase = 0x60052; + break; + } + temp_r29 = BoardDataDirReadAsync(0x50000); + temp_r31 = GWSystem.player_curr; + temp_r28 = GWPlayer[temp_r31].space_curr; + BoardRotateDiceNumbers(temp_r31); + BoardWinCreateChoice(0, 0x60000, -1, 0); + if (GWPlayer[temp_r31].com) { + if (BoardPlayerCoinsGet(temp_r31) >= 5) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + if (BoardWinChoiceGet() != 0) { + if (temp_r29 != -1) { + BoardDataAsyncWait(temp_r29); + } + HuPrcEnd(); + } + if (BoardPlayerCoinsGet(temp_r31) < 5) { + BoardWinCreate(0, 0x60001, -1); + BoardWinWait(); + BoardWinKill(); + if (temp_r29 != -1) { + BoardDataAsyncWait(temp_r29); + } + HuPrcEnd(); + } + BoardWinKill(); + if (temp_r29 != -1) { + BoardDataAsyncWait(temp_r29); + } + BoardModelMotionStart(BoardLotteryHostGet(), 1, 0x40000001); + BoardAudSeqPause(0, 1, 1000); + CreateModel(); + BoardStatusShowSetAll(0); + lotterySpace = BoardSpaceLinkFlagSearch(0, temp_r28, 0x02000000); + BoardSpacePosGet(0, temp_r28, &sp38); + BoardSpacePosGet(0, lotterySpace, &sp2C); + PSVECSubtract(&sp2C, &sp38, &sp20); + if (GWBoardGet() == 2 || GWBoardGet() == 3) { + PSVECScale(&sp20, &sp20, 0.95f); + PSVECAdd(&sp20, &sp38, &sp2C); + } + temp_r26 = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + if (BoardPlayerSizeGet(temp_r31) == 1) { + BoardModelVisibilitySet(gripMdl[0], 0); + BoardModelVisibilitySet(gripMdl[1], 1); + } else { + BoardModelVisibilitySet(gripMdl[0], 1); + BoardModelVisibilitySet(gripMdl[1], 0); + } + sp14.x = -3.0f; + sp14.y = temp_r26; + sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 200.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lotteryMdl[0], &sp14, &sp8, 1300.0f, -1.0f, 0x1B); + if (BoardPlayerSizeGet(temp_r31) == 1) { + BoardModelVisibilitySet(lotteryMdl[3], 1); + } + omVibrate(temp_r31, 0xC, 6, 6); + HuAudFXPlay(0x331); + HuAudFXPlay(0x344); + BoardModelMotionStart(lotteryMdl[0], 0, 0); + while (!BoardModelMotionEndCheck(lotteryMdl[0])) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(BoardLotteryHostGet(), lotteryMot[3], 0.0f, 10.0f, 0); + BoardPlayerRotSet(temp_r31, 0.0f, temp_r26, 0.0f); + BoardPlayerPosLerpStart(temp_r31, &sp38, &sp2C, 0x14); + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + if (BoardPlayerSizeGet(temp_r31) == 1) { + DoMiniJumpUp(temp_r31); + } + BoardPlayerPosGet(temp_r31, &sp2C); + for (i = 0; i < 4; i++) { + if (i != temp_r31) { + BoardPlayerPosGet(i, &sp38); + PSVECSubtract(&sp2C, &sp38, &sp20); + PSVECNormalize(&sp20, &sp20); + BoardPlayerMotBlendSet(i, 180.0 * (atan2(sp20.x, sp20.z) / M_PI), 7); + } + } + BoardMusStart(1, 2, 0x7F, 0); + BoardRotateDiceNumbers(temp_r31); + while (!BoardStatusStopCheck(temp_r31)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(BoardLotteryHostGet(), lotteryMot[0], 0.0f, 10.0f, 0x40000001); + if (GWPlayer[temp_r31].field00_bit9 == 0 && GWSystem.max_turn - GWSystem.turn >= 5) { + SetupTicket(temp_r31); + ShowTicket(); + var_r27 = 1; + } else { + var_r27 = 0; + } + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + var_r27 = 0; + } + PayEnterFee(var_r27); + var_r25 = BoardRandMod(100) & 0xFF; + if (var_r25 < 50) { + ExecBallGame(); + } else { + ExecScratch(); + } + ExecPrize(); + if (BoardPlayerSizeGet(temp_r31) == 1) { + DoMiniJumpDown(temp_r31); + } + BoardPlayerMoveBetween(temp_r31, lotterySpace, temp_r28); + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + BoardRotateDiceNumbers(temp_r31); + BoardModelVisibilitySet(ballMdl[currPrize & 3], 0); + BoardAudSeqFadeOut(1, 1000); + BoardCameraTargetPlayerSet(temp_r31); + BoardCameraViewSet(1); + BoardStatusShowSet(temp_r31, 0); + BoardModelMotionStart(lotteryMdl[0], 0, 0x40000004); + while (!BoardModelMotionEndCheck(lotteryMdl[0])) { + HuPrcVSleep(); + } + BoardModelMotionSpeedSet(lotteryMdl[0], 0.0f); + BoardModelAttrReset(lotteryMdl[0], 0x40000004); + HuAudFXPlay(0x32F); + KillModel(); + BoardStatusShowSetAll(1); + BoardAudSeqPause(0, 0, 1000); + HuPrcEnd(); +} + +static void DoMiniJumpUp(s32 arg0) { + Mtx sp34; + Vec sp28; + Vec sp1C; + Vec sp10; + float temp_f29; + float temp_f30; + float var_f27; + s16 var_r27; + s16 temp_r26; + s16 i; + + var_r27 = BoardModelIDGet(lotteryMdl[0]); + Hu3DModelObjMtxGet(var_r27, "toto_chibidai", sp34); + Hu3DMtxTransGet(sp34, &sp28); + BoardPlayerMotionStart(arg0, 4, 0); + temp_f29 = BoardPlayerMotionMaxTimeGet(arg0); + BoardPlayerPosGet(arg0, &sp1C); + sp28.y += 52.5308f; + PSVECSubtract(&sp28, &sp1C, &sp10); + sp10.x /= temp_f29; + sp10.z /= temp_f29; + sp10.y /= temp_f29; + OSf32tos16(&temp_f29, &temp_r26); + for (i = 0; i < temp_r26; i++) { + OSs16tof32(&i, &temp_f30); + if (i < 4) { + var_f27 = 5.0f; + } else { + var_f27 = 0.0f; + } + sp1C.x += sp10.x; + sp1C.y += sp10.y + var_f27 - 0.016666668f * temp_f30 * temp_f30; + sp1C.z += sp10.z; + BoardPlayerPosSetV(arg0, &sp1C); + HuPrcVSleep(); + } + sp1C.y = sp28.y; + BoardPlayerPosSetV(arg0, &sp1C); + BoardRotateDiceNumbers(arg0); +} + +static void DoMiniJumpDown(s32 arg0) { + Vec sp24; + Vec sp18; + Vec spC; + float temp_f31; + float var_f29; + s16 i; + + BoardPlayerPosGet(arg0, &sp18); + BoardSpacePosGet(0, lotterySpace, &sp24); + PSVECSubtract(&sp24, &sp18, &spC); + BoardPlayerMotionStart(arg0, 4, 0); + spC.x /= 30.0f; + spC.z /= 30.0f; + for (i = 0; i < 30; i++) { + OSs16tof32(&i, &temp_f31); + if (i < 3) { + var_f29 = 10.0f; + } else { + var_f29 = 0.0f; + } + sp18.x += spC.x; + sp18.y += var_f29 + -0.016666668f * temp_f31 * temp_f31 * 0.75f; + sp18.z += spC.z; + if (sp24.y > sp18.y) { + sp18.y = sp24.y; + break; + } + BoardPlayerPosSetV(arg0, &sp18); + HuPrcVSleep(); + } + BoardPlayerMotionStart(arg0, 5, 0); + BoardPlayerPosSetV(arg0, &sp24); + while (!BoardPlayerMotionEndCheck(arg0)) { + HuPrcVSleep(); + } +} + +static void PayEnterFee(s32 arg0) { + s32 var_r29; + s32 temp_r31; + s32 i; + + temp_r31 = GWSystem.player_curr; + BoardStatusShowSetForce(temp_r31); + BoardStatusShowSet(temp_r31, 1); + if (arg0 != 0) { + var_r29 = lotteryMessBase + 0xC; + } else { + var_r29 = lotteryMessBase; + } + BoardWinCreate(2, var_r29, BoardWinPortraitGet()); + BoardWinWait(); + BoardWinKill(); + while (!BoardStatusStopCheck(temp_r31)) { + HuPrcVSleep(); + } + for (i = 0; i < 5; i++) { + BoardPlayerCoinsAdd(temp_r31, -1); + HuAudFXPlay(0xE); + HuPrcSleep(6); + } + HuAudFXPlay(0xF); + BoardStatusShowSet(temp_r31, 0); +} + +static void ShowTicket(void) { + s16 sp10; + s16 spE; + s16 spC; + s16 spA; + s8 sp8; + float var_f31; + s16 temp_r31; + s32 var_r29; + s32 i; + u8 *var_r28; + s32 sp14[] = { + 0x00050015, + 0x00050016, + 0x00050017, + 0x00050018, + 0x00050019, + 0x0005001A, + 0x0005001B, + 0x0005001C + }; + + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + return; + } + sp8 = GWPlayer[GWSystem.player_curr].field00_bitA; + var_r28 = (u8*) &sp8; + temp_r31 = HuSprGrpCreate(4); + BoardSpriteCreate(0x50014, 0x7531, 0, &spA); + HuSprGrpMemberSet(temp_r31, 0, spA); + HuSprAttrSet(temp_r31, 0, 9); + HuSprPosSet(temp_r31, 0, 288.0f, 240.0f); + HuSprTPLvlSet(temp_r31, 0, 0.0f); + var_r29 = GWPlayer[(*var_r28 >> 4) & 3].character; + BoardSpriteCreate(sp14[var_r29], 0x7530, 0, &spC); + HuSprGrpMemberSet(temp_r31, 1, spC); + HuSprAttrSet(temp_r31, 1, 9); + HuSprPosSet(temp_r31, 1, 200.0f, 237.0f); + HuSprTPLvlSet(temp_r31, 1, 0.0f); + var_r29 = GWPlayer[(*var_r28 >> 2) & 3].character; + BoardSpriteCreate(sp14[var_r29], 0x7530, 0, &spE); + HuSprGrpMemberSet(temp_r31, 2, spE); + HuSprAttrSet(temp_r31, 2, 9); + HuSprPosSet(temp_r31, 2, 294.0f, 237.0f); + HuSprTPLvlSet(temp_r31, 2, 0.0f); + var_r29 = GWPlayer[*var_r28 & 3].character; + BoardSpriteCreate(sp14[var_r29], 0x7530, 0, &sp10); + HuSprGrpMemberSet(temp_r31, 3, sp10); + HuSprAttrSet(temp_r31, 3, 9); + HuSprPosSet(temp_r31, 3, 388.0f, 237.0f); + HuSprTPLvlSet(temp_r31, 3, 0.0f); + BoardWinCreate(2, lotteryMessBase + 10, BoardWinPortraitGet()); + BoardWinWait(); + for (var_f31 = 0.0f; var_f31 <= 1.0f; var_f31 += 0.15f) { + if (var_f31 >= 1.0f) { + var_f31 = 1.0f; + } + for (i = 0; i < 4; i++) { + HuSprTPLvlSet(temp_r31, i, var_f31); + } + HuPrcVSleep(); + } + BoardWinCreate(2, lotteryMessBase + 11, BoardWinPortraitGet()); + BoardWinWait(); + BoardWinKill(); + for (var_f31 = 1.0f; var_f31 > 0.0f; var_f31 -= 0.15f) { + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } + for (i = 0; i < 4; i++) { + HuSprTPLvlSet(temp_r31, i, var_f31); + } + HuPrcVSleep(); + } + HuSprGrpKill(temp_r31); + (void) var_r29; // Required to match +} + +static void SetupTicket(s32 arg0) { + u8 sp8[4]; + u8 var_r29; + s32 var_r28; + s32 var_r30; + s32 var_r31; + + for (var_r30 = var_r31 = 0; var_r31 < 4; var_r31++) { + if (arg0 != var_r31 && GWPlayer[var_r31].field00_bit9 != 0) { + sp8[var_r30] = GWPlayer[var_r31].field00_bitA; + var_r30++; + } + } + for (var_r28 = 0; var_r28 < 1000; var_r28++) { + var_r29 = BoardRandMod(0x40) & 0x3F; + for (var_r31 = 0; var_r30 != 0 && var_r31 < var_r30; var_r31++) { + if (sp8[var_r31] == var_r29) { + var_r29 = 0x80; + break; + } + } + if (var_r29 != 0x80) { + break; + } + } + GWPlayer[arg0].field00_bitA = var_r29; + GWPlayer[arg0].field00_bit9 = 1; +} + +static void LotteryInlineFunc00(s32 arg0, s32 arg1) { + s32 sp20[2] = { 0x00050012, 0x00050013 }; + s16 sp10[2] = { 0x0098, 0x0078 }; + s16 sp14[2] = { 0x0078, 0x0078 }; + Vec sp34; + float temp_f30; + s16 var_r30; + + sp34.x = (sp14[arg0] / 2) + 32; + if (arg1 == 0) { + sp34.y = -sp10[arg0] / 2; + temp_f30 = 4.0f; + if (lotterySpr == -1) { + lotterySpr = espEntry(sp20[arg0], 0x7531, 0); + espAttrSet(lotterySpr, 1); + } + } else { + sp34.y = (sp10[arg0] / 2) + 40; + temp_f30 = -4.0f; + } + for (var_r30 = sp10[arg0] + 40; var_r30 > 0; var_r30 -= 4) { + sp34.y += temp_f30; + espPosSet(lotterySpr, sp34.x, sp34.y); + HuPrcVSleep(); + } + if (arg1 != 0 && lotterySpr >= 0) { + espKill(lotterySpr); + lotterySpr = -1; + } +} + +static void ExecBallGame(void) { + Vec sp4C; + float temp_f24; + float var_f23; + float var_f25; + float var_f26; + float var_f27; + float var_f19; + float var_f28; + s32 var_r22; + s32 var_r21; + s32 var_r20 = 0; + s32 temp_r25; + s32 var_r24; + s32 temp_r27; + u8 var_r26; + s8 var_r17; + s8 spB; + s8 spA; + s8 sp9; + s8 *temp_r23; + s32 sp58[] = { + 0x005F001D, + 0x001A001D, + 0x006D001D, + 0x008A001D, + 0x0085001D, + 0x0011001D, + 0x000D001D, + 0x0081001D + }; + + temp_r27 = GWSystem.player_curr; + currPrize = -1; + sp4C.x = 0.0f; + sp4C.y = 210.0f; + sp4C.z = 0.0f; + BoardCameraMotionStartEx(lotteryMdl[0], NULL, &sp4C, 980.0f, -1.0f, 0x15); + LotteryInlineFunc00(0, 0); + BoardCameraMotionWait(); + BoardWinCreate(2, lotteryMessBase + 1, BoardWinPortraitGet()); + BoardWinWait(); + BoardWinKill(); + HuPrcSleep(0x12); + CreateLotteryWin(0); + turnMot = BoardPlayerMotionCreate(temp_r27, sp58[GWPlayer[temp_r27].character]); + BoardPlayerMotionSpeedSet(temp_r27, 0.0f); + BoardModelAttrSet(lotteryMdl[1], 0x40000001); + BoardModelMotionSpeedSet(lotteryMdl[1], 0.0f); + BoardModelMotionTimeSet(lotteryMdl[1], 0.0f); + BoardModelAttrSet(gripMdl[0], 0x40000001); + BoardModelAttrSet(gripMdl[1], 0x40000001); + BoardPlayerMotionShiftSet(temp_r27, turnMot, 0.0f, 8.0f, 0x40000001); + BoardPlayerMotionSpeedSet(temp_r27, 0.0f); + temp_f24 = BoardModelMotionMaxTimeGet(lotteryMdl[1]); + temp_f24 -= 4.0f; + comInputPos = 0; + var_r20 = 0; + spB = spA = sp9 = var_r17 = 0; + var_r26 = var_f28 = var_f27 = var_f25 = var_f23 = var_r21 = 0; + HuPrcSleep(0x18); + var_r24 = var_r22 = 0; + while (1) { + HuPrcVSleep(); + BoardModelMotionSpeedSet(lotteryMdl[1], var_f28); + BoardModelMotionSpeedSet(gripMdl[0], var_f28); + BoardModelMotionSpeedSet(gripMdl[1], var_f28); + BoardPlayerMotionSpeedSet(temp_r27, var_f28); + if (var_r22 != 0 && var_f28 <= 0.1f) { + BoardModelMotionSpeedSet(lotteryMdl[1], 0.0f); + BoardModelMotionSpeedSet(gripMdl[0], 0.0f); + BoardModelMotionSpeedSet(gripMdl[1], 0.0f); + BoardPlayerMotionSpeedSet(temp_r27, 0.0f); + break; + } + if (var_r24 == 0) { + if (BoardModelMotionTimeGet(lotteryMdl[1]) >= temp_f24) { + var_r21++; + if ((var_r26++) != 0 || var_r21 >= 1 || var_r20 != 0) { + var_r22 = 1; + if (currPrize == -1) { + var_f27 *= 128.0f; + OSf32tos8(&var_f27, &lbl_801D401B); + SetBallPrize(); + } + } + var_r24 = 1; + } + } + if (var_r24 != 0 && BoardModelMotionTimeGet(lotteryMdl[1]) < 2.0f) { + var_r24 = 0; + } + if (var_r22 == 0) { + var_r17 = spB; + sp9 = spA; + if (!GWPlayer[temp_r27].com) { + temp_r25 = GWPlayer[temp_r27].port; + spB = HuPadStkX[temp_r25]; + spA = HuPadStkY[temp_r25]; + } else { + temp_r23 = comInputBall[comInputPos++]; + spB = temp_r23[0]; + spA = temp_r23[1]; + } + } else { + spB = spA = 0; + } + if (spB == 0x7F || spA == 0x7F) { + var_r20 = 1; + } else { + if ((abs(spB) < 57.600002f && abs(spA) < 57.600002f) || (var_r17 == spB && sp9 == spA) || (spB == 0 && spA == 0)) { + var_f28 *= 0.93f; + var_f27 *= 0.8f; + if (var_f27 < 0.01f && var_r26 != 0) { + var_r26--; + } + } else { + OSs8tof32(&spB, &var_f26); + OSs8tof32(&spA, &var_f19); + var_f25 = 180.0 * (atan2(var_f26, var_f19) / M_PI); + if (var_f25 < 0.0f) { + var_f25 += 360.0f; + } + if (var_f25 < 20.0f) { + HuAudFXPlay(0x333); + } + var_f26 = var_f25 - var_f23; + if (!(var_f26 < 0.0f)) { + if (ABS(var_f26) > 30.0f) { + var_f26 = 10.0f; + } + var_f27 += 0.01f * var_f26; + if (var_f28 + var_f27 < 2.0f) { + var_f28 += var_f27; + } else { + var_f28 = 2.0f; + } + } + } + } + var_f23 = var_f25; + } + KillLotteryWin(); + LotteryInlineFunc00(0, 1); +} + +static void SetBallPrize(void) { + Process *sp8; + s32 temp_r31; + + while (1) { + temp_r31 = BoardRandMod(100); + if (temp_r31 > 97) { + currPrize = 0; + } else if (temp_r31 > 87) { + currPrize = 1; + } else if (temp_r31 > 67) { + currPrize = 2; + } else { + currPrize = 3; + } + if (GWSystem.max_turn - GWSystem.turn != 0 || currPrize != 2) { + break; + } + } + sp8 = HuPrcChildCreate(ExecBallPrize, 0x2004, 0x3800, 0, lotteryProc); +} + +static void ExecBallPrize(void) { + Vec sp30; + Vec sp24; + Vec sp18; + Vec spC; + float var_f25; + float temp_f28; + float temp_f27; + float temp_f26; + float var_f29; + float var_f30; + s32 var_r28; + s16 temp_r29; + s16 var_r27; + s16 sp8; + HsfObject *temp_r3; + Mtx sp6C; + Mtx sp3C; + + var_r28 = 0; + HuAudFXPlay(0x34C); + temp_r29 = ballMdl[currPrize & 3]; + BoardModelPosGet(lotteryMdl[0], &sp30); + BoardModelRotGet(lotteryMdl[0], &sp18); + PSMTXRotRad(sp6C, 'Y', MTXDegToRad(sp18.y)); + var_r27 = BoardModelIDGet(lotteryMdl[0]); + temp_r3 = Hu3DModelObjPtrGet(var_r27, "toto_gara"); + temp_f28 = sp30.y + temp_r3->data.curr.pos.y + 100.0f; + PSMTXTrans(sp3C, temp_r3->data.curr.pos.x, temp_r3->data.curr.pos.y + 210.0f, temp_r3->data.curr.pos.z + -40.0f); + PSMTXConcat(sp6C, sp3C, sp3C); + Hu3DMtxTransGet(sp3C, &spC); + PSVECAdd(&spC, &sp30, &sp30); + BoardModelVisibilitySet(temp_r29, 1); + sp24.x = 10.5f; + sp24.y = -3.0f; + sp24.z = 0.0f; + PSMTXMultVec(sp6C, &sp24, &sp24); + var_f29 = 0.0f; + var_f30 = 1.8f; + temp_f27 = 0.016666668f; + sp8 = 0; + while (1) { + OSs16tof32(&sp8, &var_f25); + temp_f26 = 4.9f * (2.0f * var_f25 - temp_f27) * temp_f27; + sp24.y -= temp_f26; + sp24.x *= 0.92f; + sp24.z *= 0.92f; + PSVECAdd(&sp24, &sp30, &sp30); + var_f29 += sp24.z; + if (sp30.y - 25.0f < temp_f28) { + if (var_r28 == 0) { + HuAudFXPlay(0x334); + var_r28 = 1; + } + sp30.y = 25.0f + temp_f28 + temp_f26 * var_f30; + if (var_f30 > 0.0f) { + var_f30 -= 0.1f; + } + } + BoardModelPosSetV(temp_r29, &sp30); + BoardModelRotSet(temp_r29, 0.0f, var_f29, 0.0f); + HuPrcVSleep(); + sp8++; + } +} + +const s32 lbl_8011DFD0[] = { + 0x0007001E, + 0x0007001F, + 0x00070020, + 0x00070021, + 0x00070022, + 0x00070023, + 0x00070024, + 0x00070025 +}; + +const s32 lbl_8011DFF0[] = { + 0x00050009, + 0x0005000A, + 0x0005000B, + 0x0005000C, + 0x0005000D, + 0x0005000E, + 0x0005000F, + 0x00050010 +}; + +const s32 lbl_8011E010[] = { + 0x0005001D, + 0x0005001E, + 0x0005001F, + 0x00050020 +}; + +static omObjData *ticketObj[12] = { NULL }; +static s8 ticketPrize[12] = { 0 }; +static Vec handLastPos = { 0.0f, 0.0f, 0.0f }; + +static s32 loseSoundTbl[] = { + 0x0000012E, + 0x0000016E, + 0x000001AE, + 0x000001EE, + 0x0000022E, + 0x0000026E, + 0x000002AE, + 0x000002EE +}; + +static s32 loseMotTbl[] = { + 0x005F0033, + 0x001A0033, + 0x006D0033, + 0x008A0033, + 0x00850033, + 0x00110033, + 0x000D0033, + 0x00810033 +}; + +static void ExecScratchTicket(s32 arg0) { + Vec sp24; + Vec sp18; + Vec spC; + u16 var_r29; + u16 var_r28; + s16 *temp_r25; + s32 var_r24; + s32 temp_r27; + u16 var_r23; + omObjData *var_r22; + TicketWork *temp_r30; + AnimBmpData *temp_r31; + + var_r24 = GWPlayer[GWSystem.player_curr].character; + var_r22 = ticketObj[arg0]; + temp_r30 = OM_GET_WORK_PTR(var_r22, TicketWork); + lotteryMdl[4] = BoardModelCreate(lbl_8011DFF0[var_r24], NULL, 0); + BoardModelLayerSet(lotteryMdl[4], 6); + BoardModelPassSet(lotteryMdl[4], 0); + BoardCameraDirGet(&spC); + BoardModelRotYSet(lotteryMdl[4], 180.0 * (atan2(-spC.x, -spC.z) / M_PI)); + BoardModelScaleSet(lotteryMdl[4], 3.0f, 3.0f, 3.0f); + sp24.x = 320.0f; + sp24.y = 480.0f; + sp24.z = 500.0f; + CreateLotteryWin(1); + while (1) { + HuPrcVSleep(); + if (sp24.y <= 240.0f) { + break; + } + sp24.y -= 4.0f; + Hu3D2Dto3D(&sp24, 1, &sp18); + BoardModelPosSetV(lotteryMdl[4], &sp18); + } + comInputPos = 0; + if (BoardRandMod(100) < 50) { + comInputDrawP = comInputDraw1; + } else { + comInputDrawP = comInputDraw2; + } + temp_r27 = HuAudFXPlay(0x335); + HuAudFXVolSet(temp_r27, 0); + while (1) { + HuPrcVSleep(); + if (TicketUpdate(temp_r30->unk08->bmp, &sp24, temp_r27) != 0) { + break; + } + if (ScratchTicketCheckDone(temp_r30->unk08->bmp)) { + break; + } + } + HuAudFXStop(temp_r27); + while (1) { + HuPrcVSleep(); + if (sp24.y >= 480.0f) { + break; + } + sp24.y += 4.0f; + Hu3D2Dto3D(&sp24, 1, &sp18); + BoardModelPosSetV(lotteryMdl[4], &sp18); + } + BoardModelVisibilitySet(lotteryMdl[4], 0); + temp_r31 = temp_r30->unk08->bmp; + temp_r25 = temp_r31->data; + for (var_r28 = 0; var_r28 < temp_r31->sizeY; var_r28++) { + for (var_r29 = 0; var_r29 < temp_r31->sizeX; var_r29++) { + var_r23 = TicketGetPixel(temp_r31->sizeX, var_r29, var_r28); + temp_r25[var_r23] = 0; + } + HuPrcVSleep(); + } + KillLotteryWin(); + BoardModelKill(lotteryMdl[4]); + lotteryMdl[4] = -1; +} + +static void ExecScratch(void) { + TicketWork *temp_r28; + float var_f31; + s32 temp_curr; + s32 temp_r31; + + currPrize = -1; + BoardFilterFadeInit(0x1E, 0xA0); + InitTicketPrizes(); + InitScratchSpr(); + temp_curr = GWSystem.player_curr; + if (GWPlayer[temp_curr].com) { + comLotteryType = BoardRandMod(4); + comLotteryWinType = BoardRandMod(3); + } + BoardWinCreate(2, lotteryMessBase + 9, BoardWinPortraitGet()); + BoardWinWait(); + BoardWinKill(); + CreateLotteryWin(2); + InitScratchPick(); + while (currPrize == -1) { + HuPrcVSleep(); + } + temp_r31 = currPrize; + currPrize = ticketPrize[temp_r31]; + ExecTicketFocus(temp_r31); + KillLotteryWin(); + LotteryInlineFunc00(1, 0); + ExecScratchTicket(temp_r31); + LotteryInlineFunc00(1, 1); + temp_r28 = OM_GET_WORK_PTR(ticketObj[temp_r31], TicketWork); + for (var_f31 = 1.0f; var_f31 > 0.0f; var_f31 -= 0.078125f) { + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + } + HuSprTPLvlSet(ticketSprGrp, temp_r28->unk00_field2, var_f31); + HuPrcVSleep(); + } + HideScratchSpr(); + BoardFilterFadeOut(30); +} + +static void KillScratch(void) { + if (ticketSprGrp != -1) { + HuSprGrpKill(ticketSprGrp); + ticketSprGrp = -1; + } + if (lotteryTicketPickObj) { + OM_GET_WORK_PTR(lotteryTicketPickObj, LotteryTicketPickWork)->unk00_field0 = 1; + } + memset(ticketObj, 0, sizeof(ticketObj)); +} + +static void ExecScratchSpr(omObjData *arg0) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 temp_r29; + TicketWork *temp_r30; + + temp_r30 = OM_GET_WORK_PTR(arg0, TicketWork); + if (temp_r30->unk00_field0 != 0 || BoardIsKill()) { + temp_r29 = temp_r30->unk00_field2; + HuSprAttrSet(ticketSprGrp, temp_r29, 4); + HuSprAttrSet(ticketSprGrp, temp_r29 + 12, 4); + ticketObj[temp_r29] = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r30->unk01 != 0) { + temp_r30->unk01--; + return; + } + sp14.x = arg0->trans.x; + sp14.y = arg0->trans.y; + sp20.x = arg0->rot.x; + sp20.y = arg0->rot.y; + PSVECSubtract(&sp14, &sp20, &sp8); + if (ABS(sp8.x) < 1.0f && ABS(sp8.y) < 1.0f) { + sp8 = sp14; + temp_r30->unk00_field1 = 1; + } else { + PSVECScale(&sp8, &sp8, 0.2f); + PSVECAdd(&sp20, &sp8, &sp8); + temp_r30->unk00_field1 = 0; + } + HuSprPosSet(ticketSprGrp, temp_r30->unk00_field2, sp8.x, sp8.y); + HuSprPosSet(ticketSprGrp, temp_r30->unk00_field2 + 12, sp8.x, sp8.y); + arg0->rot.x = sp8.x; + arg0->rot.y = sp8.y; +} + +static void HideScratchSpr(void) { + s32 i; + + for (i = 0; i < 12; i++) { + if (ticketObj[i]) { + OM_GET_WORK_PTR(ticketObj[i], TicketWork)->unk00_field0 = 1; + } + } +} + +static void InitScratchSpr(void) { + Vec sp18; + Vec spC; + omObjData *temp_r31; + TicketWork *temp_r29; + s32 temp_curr; + s16 temp_r28; + s16 sp8; + s16 i; + + temp_curr = GWSystem.player_curr; + BoardPlayerRotGet(temp_curr, &sp18); + memset(ticketObj, 0, sizeof(ticketObj)); + BoardCameraRotGet(&spC); + temp_r28 = HuSprGrpCreate(0x18); + ticketSprGrp = temp_r28; + for (i = 0; i < 12; i++) { + temp_r31 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, ExecScratchSpr); + ticketObj[i] = temp_r31; + temp_r29 = OM_GET_WORK_PTR(temp_r31, TicketWork); + temp_r29->unk00_field0 = 0; + temp_r29->unk00_field2 = i; + temp_r29->unk01 = (i / 4) * 2; + temp_r29->unk02 = temp_r29->unk04 = -1; + temp_r31->trans.x = 107.0f + 110.0f * (i % 4); + temp_r31->trans.y = 98.0f + 110.0f * (i / 4); + temp_r31->rot.x = -56.0f; + temp_r31->rot.y = temp_r31->trans.y; + BoardSpriteCreate(lbl_8011E010[ticketPrize[i]], 0x157C, NULL, &sp8); + HuSprGrpMemberSet(temp_r28, i, sp8); + HuSprPosSet(temp_r28, i, temp_r31->rot.x, temp_r31->rot.y); + HuSprAttrSet(temp_r28, i, 8); + temp_r29->unk02 = sp8; + BoardSpriteCreate(0x50021, 0x1388, &temp_r29->unk08, &sp8); + HuSprGrpMemberSet(temp_r28, i + 12, sp8); + HuSprPosSet(temp_r28, i + 12, temp_r31->rot.x, temp_r31->rot.y); + HuSprAttrSet(temp_r28, i + 12, 8); + temp_r29->unk04 = sp8; + } + HuSprGrpDrawNoSet(temp_r28, 0x40); +} + +static inline u32 ExecStratchPickInlineFunc(LotteryTicketPickWork *temp_r29) { + s32 var_r21; + s32 temp_r23; + u32 var_r26; + + var_r21 = GWSystem.player_curr; + var_r26 = 0; + if (!GWPlayer[var_r21].com) { + temp_r23 = GWPlayer[GWSystem.player_curr].port; + var_r26 = HuPadDStkRep[temp_r23] | HuPadBtnDown[temp_r23]; + } else if (comLotteryType != temp_r29->unk02) { + var_r26 = 2; + } else if (comLotteryWinType != temp_r29->unk03) { + var_r26 = 4; + } else if (comLotteryType == temp_r29->unk02 && comLotteryWinType == temp_r29->unk03) { + var_r26 = 0x100; + } + return var_r26; +} + +static void ExecScratchPick(omObjData *arg0) { + float var_f29; + float var_f28; + s8 var_r28; + s8 var_r25; + s8 var_r24; + u32 var_r26; + LotteryTicketPickWork *temp_r29; + + temp_r29 = OM_GET_WORK_PTR(arg0, LotteryTicketPickWork); + if (temp_r29->unk00_field0 || BoardIsKill()) { + HuSprGrpKill(temp_r29->unk08); + lotteryTicketPickObj = 0; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r29->unk04 != 0) { + temp_r29->unk04--; + return; + } + var_r25 = var_r24 = 0; + var_r26 = ExecStratchPickInlineFunc(temp_r29); + if (var_r26 == 0x100) { + currPrize = (temp_r29->unk02 + (temp_r29->unk03 * 4)); + temp_r29->unk00_field0 = 1; + HuAudFXPlay(2); + return; + } + var_r28 = 0; + if (var_r26 == 8) { + var_r24 = -1; + var_r28 = 1; + } + if (var_r26 == 4) { + var_r24 = 1; + var_r28 = 1; + } + if (var_r26 == 1) { + var_r25 = -1; + var_r28 = 1; + } + if (var_r26 == 2) { + var_r25 = 1; + var_r28 = 1; + } + if ((var_r25 != 0 || var_r24 != 0) && GWPlayer[GWSystem.player_curr].com) { + temp_r29->unk04 = 0x14; + } + temp_r29->unk02 += var_r25; + temp_r29->unk03 += var_r24; + if (temp_r29->unk02 < 0) { + temp_r29->unk02 = 0; + var_r28 = 0; + } else if (temp_r29->unk03 < 0) { + temp_r29->unk03 = 0; + var_r28 = 0; + } + if (temp_r29->unk02 >= 4) { + temp_r29->unk02 = 3; + var_r28 = 0; + } else if (temp_r29->unk03 >= 3) { + temp_r29->unk03 = 2; + var_r28 = 0; + } + if (var_r28 != 0) { + HuAudFXPlay(0); + } + OSs8tof32(&temp_r29->unk02, &var_f29); + OSs8tof32(&temp_r29->unk03, &var_f28); + var_f29 = 107.0f + 110.0f * var_f29 - 32.0f + 16.0f; + var_f28 = 98.0f + 110.0f * var_f28 + 32.0f - 24.0f; + HuSprPosSet(temp_r29->unk08, 0, var_f29, var_f28); +} + +static void InitScratchPick(void) { + float temp_f31 = 91.0f; + float temp_f30 = 106.0f; + omObjData *temp_r30; + LotteryTicketPickWork *var_r31; + + temp_r30 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, ExecScratchPick); + lotteryTicketPickObj = temp_r30; + var_r31 = OM_GET_WORK_PTR(temp_r30, LotteryTicketPickWork); + var_r31->unk02 = var_r31->unk03 = 0; + var_r31->unk04 = 6; + var_r31->unk00_field0 = 0; + var_r31->unk01 = GWPlayer[GWSystem.player_curr].character; + var_r31->unk08 = HuSprGrpCreate(1); + BoardSpriteCreate(lbl_8011DFD0[var_r31->unk01], 0x1388, 0, &var_r31->unk06); + HuSprGrpMemberSet(var_r31->unk08, 0, var_r31->unk06); + HuSprAttrSet(var_r31->unk08, 0, 8); + HuSprPosSet(var_r31->unk08, 0, temp_f31, temp_f30); + HuSprGrpDrawNoSet(var_r31->unk08, 0x40); +} + +static void InitTicketPrizes(void) { + s32 temp_r31; + s32 i; + + memset(ticketPrize, 3, sizeof(ticketPrize)); + for (i = 0; i < 3; i++) { + do { + temp_r31 = BoardRandMod(12); + } while (ticketPrize[temp_r31] != 3); + ticketPrize[temp_r31] = i; + if (GWSystem.max_turn - GWSystem.turn == 0 && i == 2) { + ticketPrize[temp_r31] = 3; + } + } +} + +static void ExecTicketFocus(s32 arg0) { + float var_f31; + float temp_f30; + omObjData *var_r30; + TicketWork *temp_r29; + s32 i; + + var_r30 = ticketObj[arg0]; + var_r30->trans.x = 288.0f; + var_r30->trans.y = 240.0f; + for (i = 0; i < 12; i++) { + if (i != arg0) { + OM_GET_WORK_PTR(ticketObj[i], TicketWork)->unk00_field0 = 1; + } + } + temp_r29 = OM_GET_WORK_PTR(ticketObj[arg0], TicketWork); + for (var_f31 = 0.0f; var_f31 < 90.0f; var_f31 += 2.0f) { + temp_f30 = 1.0 + 1.2999999523162842 * sin(var_f31 * M_PI / 180.0); + HuSprScaleSet(ticketSprGrp, temp_r29->unk00_field2, temp_f30, temp_f30); + HuSprScaleSet(ticketSprGrp, temp_r29->unk00_field2 + 12, temp_f30, temp_f30); + HuPrcVSleep(); + } +} + +static BOOL ScratchTicketCheckDone(AnimBmpData *arg0) { + s32 var_r29; + s32 var_r31; + s32 var_r30; + u16 *var_r28; + + var_r28 = arg0->data; + for (var_r29 = var_r30 = 0; var_r30 < arg0->sizeY; var_r30++) { + for (var_r31 = 0; var_r31 < arg0->sizeX; var_r31++) { + if (var_r28[var_r31 + var_r30 * arg0->sizeX] == 0) { + var_r29++; + } + } + } + if (var_r29 >= arg0->sizeX * arg0->sizeY - 300) { + return TRUE; + } else { + return FALSE; + } +} + +static u16 TicketGetPixel(u16 arg0, u16 arg1, u16 arg2) { + u16 var_r31; + u16 var_r30; + u16 var_r29; + u16 var_r28; + + var_r29 = (arg1 & 3); + var_r28 = (arg2 & 3); + var_r31 = (arg1 >> 2); + var_r30 = (arg2 >> 2); + return var_r29 + (var_r28 << 2) + ((var_r31 + var_r30 * (arg0 >> 2)) << 4); +} + +static s32 TicketUpdate(AnimBmpData *arg0, Vec *arg1, s32 arg2) { + Vec sp48; + Vec sp3C; + float temp_f25; + float temp_f20; + s32 var_r18; + s16 var_r17; + s32 var_r21; + s32 var_r20; + s8 *temp_r19; + s16 *sp38; + s32 sp34; + s16 sp26; + s16 sp24; + s16 sp22; + s8 spD; + + if (GWPlayer[GWSystem.player_curr].com) { + temp_r19 = comInputDrawP[comInputPos++]; + if (temp_r19[0] == 0x7F && temp_r19[1] == 0x7F) { + return -1; + } + OSs8tof32(&temp_r19[0], &sp48.x); + OSs8tof32(&temp_r19[1], &sp48.y); + } else { + sp34 = GWPlayer[GWSystem.player_curr].port; + sp48.x = HuPadStkX[sp34]; + sp48.y = HuPadStkY[sp34]; + } + sp48.z = 0.0f; + if (sp48.x == 0.0f && sp48.y == 0.0f) { + handLastPos = *arg1; + handUpdateF = 0; + HuAudFXVolSet(arg2, 0); + return 0; + } + if (handUpdateF == 0) { + handUpdateF = 1; + } + PSVECNormalize(&sp48, &sp48); + temp_f20 = atan2f(sp48.x, -sp48.y); + sp48.x = sin(temp_f20); + sp48.y = cos(temp_f20); + temp_f25 = 127.0f * PSVECMag(&sp48); + OSf32tos8(&temp_f25, &spD); + HuAudFXVolSet(arg2, spD); + sp48.x *= 8.0f; + sp48.y *= 8.0f; + PSVECAdd(&sp48, arg1, &sp3C); + var_r18 = 0; + if (sp3C.x < 192.0f) { + sp3C.x = 192.0f; + var_r18 = 1; + } + if (sp3C.y < 192.0f) { + sp3C.y = 192.0f; + var_r18 = 1; + } + if (sp3C.x >= 384.0f) { + sp3C.x = 384.0f; + var_r18 = 1; + } + if (sp3C.y >= 288.0f) { + sp3C.y = 288.0f; + var_r18 = 1; + } + if (var_r18 != 0) { + HuAudFXVolSet(arg2, 0); + } + *arg1 = sp3C; + Hu3D2Dto3D(&sp3C, 1, &sp3C); + BoardModelPosSetV(lotteryMdl[4], &sp3C); + sp3C = *arg1; + sp3C.x -= 192.0f; + sp3C.y -= 192.0f; + sp3C.x *= arg0->sizeX / 192.0f; + sp3C.y *= arg0->sizeY / 96.0f; + sp24 = arg0->sizeX; + sp38 = arg0->data; + for (var_r20 = -8; var_r20 < 9; var_r20++) { + for (var_r21 = -8; var_r21 < 9; var_r21++) { + OSf32tos16(&sp3C.x, &var_r17); + OSf32tos16(&sp3C.y, &sp26); + if (var_r17 + var_r21 < arg0->sizeX && sp26 + var_r20 < arg0->sizeY && var_r17 + var_r21 >= 0 && sp26 + var_r20 >= 0) { + var_r17 += var_r21; + sp26 += var_r20; + sp22 = TicketGetPixel(sp24, var_r17, sp26); + if (sp22 < arg0->sizeX * arg0->sizeY) { + sp38[sp22] = 0; + } + } + } + } + DCFlushRange(arg0->data, (u32) (arg0->sizeX * arg0->sizeY * 2) >> 3); + handLastPos = *arg1; + return 0; +} + +static s32 ExecCoinPrizeInlineFunc(void) { + s32 i; + + for (i = 0; i < 10; i++) { + if (coinF[i] == 0) { + return i; + } + } + return -1; +} + +static void ExecCoinPrize(void) { + Vec sp64[10]; + Vec sp8; + float sp3C[10]; + float sp14[10]; + float var_f31; + s32 var_r26; + s32 var_r28; + s32 temp_r27; + s32 var_r30; + s32 i; + + temp_r27 = GWSystem.player_curr; + if (currPrize == 0) { + var_r28 = 100; + } else { + var_r28 = 30; + } + memset(coinMdl, 0, sizeof(coinMdl)); + memset(coinF, 0, 10); + BoardPlayerPosGet(temp_r27, &sp8); + var_f31 = 150.0f + sp8.y; + if (BoardPlayerSizeGet(temp_r27) == 1) { + var_f31 = 110.0f + (52.5308f + (0.3f * var_f31)); + } + for (i = 0; i < 10; i++) { + coinMdl[i] = BoardModelCreate(0x7000A, NULL, 0); + BoardModelVisibilitySet(coinMdl[i], 0); + } + while (1) { + HuPrcVSleep(); + if (var_r28 > 0) { + var_r30 = ExecCoinPrizeInlineFunc(); + if (var_r30 != -1) { + coinF[var_r30] = 1; + sp64[var_r30].x = sp8.x + 100.0f * (BoardRandFloat() - 0.5f); + sp64[var_r30].y = sp8.y + 700.0f; + sp64[var_r30].z = sp8.z + 100.0f * (BoardRandFloat() - 0.5f); + sp14[var_r30] = -20.0f + -10.0f * BoardRandFloat(); + sp3C[var_r30] = BoardRandMod(360); + BoardModelVisibilitySet(coinMdl[var_r30], 1); + BoardModelScaleSet(coinMdl[var_r30], 0.5f, 0.5f, 0.5f); + var_r28--; + } + } else { + var_r26 = 0; + for (i = 0; i < 10; i++) { + if (coinF[i] != 0) { + var_r26 = 1; + } + } + if (var_r26 == 0) { + return; + } + } + for (i = 0; i < 10; i++) { + if (coinF[i] != 0) { + if (sp64[i].y < var_f31) { + sp64[i].y = var_f31; + CharModelLayerSetAll(2); + CharModelCoinEffectCreate(1, &sp64[i]); + BoardModelVisibilitySet(coinMdl[i], 0); + coinF[i] = 0; + BoardPlayerCoinsAdd(temp_r27, 1); + HuAudFXPlay(7); + omVibrate(temp_r27, 0xC, 6, 6); + } else { + BoardModelPosSetV(coinMdl[i], &sp64[i]); + BoardModelRotSet(coinMdl[i], 0.0f, sp3C[i], 0.0f); + sp3C[i] = BoardDAngleCalc(45.0f + sp3C[i]); + sp64[i].y += sp14[i]; + } + } + } + } +} + +static void ExecItemPrize(void) { + Vec sp20; + Vec sp14; + float temp_f29; + float var_f28; + float var_f30; + float var_f31; + s32 temp_r26; + s32 var_r28; + s32 temp_r29; + s16 *var_r31; + s16 i; + s32 spC[2] = { + 0x0007006F, + 0x00070070 + }; + s8 sp8[2] = { + 0x02, 0x03 + }; + + temp_r29 = GWSystem.player_curr; + var_r28 = (BoardRandFloat() < 0.5f) ? 1 : 0; + memset(coinMdl, 0, sizeof(coinMdl)); + var_r31 = &coinMdl[0]; + *var_r31 = BoardModelCreate(spC[var_r28], NULL, 0); + var_f30 = BoardPlayerRotYGet(temp_r29); + BoardModelRotYSet(*var_r31, var_f30); + BoardModelScaleSet(*var_r31, 1.0f, 1.0f, 1.0f); + BoardSpacePosGet(0, GWPlayer[temp_r29].space_curr, &sp20); + BoardPlayerPosGet(temp_r29, &sp14); + sp14.y = sp20.y; + sp20 = sp14; + sp14.y += 700.0f; + sp20.y += 280.0f; + temp_f29 = (sp20.y - sp14.y) / 60.0f; + temp_r26 = HuAudFXPlay(0x35F); + for (i = 0; i < 60; i++) { + sp14.y += temp_f29; + BoardModelPosSetV(*var_r31, &sp14); + HuPrcVSleep(); + } + HuPrcSleep(30); + BoardPlayerPosGet(temp_r29, &sp20); + if (BoardPlayerSizeGet(temp_r29) == 0) { + sp20.y += 100.0f; + } else { + sp20.y += 30.000002f; + } + temp_f29 = (sp20.y - sp14.y) / 30.0f; + var_f28 = 0.0f; + HuAudFXPlay(0x30D); + for (i = 0; i < 30; i++) { + sp14.y += temp_f29; + var_f30 = BoardDAngleCalc(15.0f + var_f30); + var_f31 = cos(var_f28 * M_PI / 180.0); + if (var_f31 <= 0.0f) { + var_f31 = 0.01f; + } + var_f28 += 3.3333333f; + BoardModelPosSetV(*var_r31, &sp14); + BoardModelRotYSet(*var_r31, var_f30); + BoardModelScaleSet(*var_r31, var_f31, var_f31, var_f31); + HuPrcVSleep(); + } + HuAudFXStop(temp_r26); + BoardModelKill(*var_r31); + *var_r31 = -1; + BoardPlayerItemAdd(GWSystem.player_curr, sp8[var_r28]); + omVibrate(GWSystem.player_curr, 0xC, 6, 6); +} + +static void KillCoin(void) { + s32 i; + + for (i = 0; i < 10; i++) { + BoardModelKill(coinMdl[i]); + coinMdl[i] = -1; + } +} + +static void ExecPrize(void) { + Vec sp14; + Vec sp8; + s16 var_r29; + s16 var_r23; + s32 var_r26; + s32 var_r28; + s32 var_r27; + s32 temp_r30; + s32 var_r31; + s32 i; + s32 var_r24; + + var_r28 = -1; + var_r29 = 0; + var_r27 = -1; + sp14.x = 0.0f; + sp14.y = 200.0f; + sp14.z = 0.0f; + BoardCameraMotionStartEx(lotteryMdl[0], 0, &sp14, 1300.0f, -1.0f, 0x15); + temp_r30 = GWSystem.player_curr; + BoardStatusShowSetForce(temp_r30); + BoardStatusShowSet(temp_r30, 1); + for (var_r24 = i = 0; i < 3; i++) { + if (GWPlayer[GWSystem.player_curr].items[i] != -1) { + var_r24++; + } + } + var_r31 = currPrize; + if (var_r31 == 0) { + BoardModelVisibilitySet(lotteryMdl[2], 1); + BoardModelMotionStart(lotteryMdl[2], 0, 0x40000001); + BoardModelMotionSpeedSet(lotteryMdl[2], 2.0f); + } + var_r26 = 0; + switch (var_r31) { + case 0: + var_r28 = lotteryMessBase + 2; + var_r29 = 7; + var_r26 = 0x64; + break; + case 1: + var_r28 = lotteryMessBase + 4; + var_r29 = 7; + var_r26 = 0x50; + break; + case 2: + var_r28 = lotteryMessBase + 5; + if (var_r24 < 3) { + var_r29 = 7; + var_r26 = 0x50; + } else { + var_r29 = 8; + } + break; + case 3: + var_r28 = lotteryMessBase + 7; + var_r29 = 8; + break; + } + if (var_r31 != 3) { + HuAudFXPlay(0x332); + } + if (var_r29 == 7) { + BoardModelMotionShiftSet(BoardLotteryHostGet(), lotteryMot[1], 0.0f, 10.0f, 0x40000001); + } + if (var_r26 != 0) { + BoardPlayerPosGet(temp_r30, &sp8); + sp8.y = 700.0f; + BoardConfettiCreate(&sp8, var_r26, 150.0f); + } + if (var_r31 == 0 || var_r31 == 1) { + BoardAudSeqPause(1, 1, 0x1F4); + HuPrcSleep(0x14); + if (var_r31 == 0) { + var_r27 = HuAudSStreamPlay(0xA); + } else { + var_r27 = HuAudSStreamPlay(9); + } + } + var_r23 = (s32) BoardPlayerRotYGet(temp_r30) + 180; + BoardPlayerMotBlendSet(temp_r30, var_r23, 0xF); + while (!BoardPlayerMotBlendCheck(temp_r30)) { + HuPrcVSleep(); + } + if (var_r31 == 0 || var_r31 == 1) { + while (HuAudSStreamStatGet(var_r27) != 0) { + HuPrcVSleep(); + } + var_r27 = -1; + BoardAudSeqPause(1, 0, 1000); + } + BoardWinCreate(2, var_r28, BoardWinPortraitGet()); + BoardWinWait(); + if (var_r31 == 2) { + if (var_r24 == 3) { + BoardWinCreate(2, lotteryMessBase + 6, BoardWinPortraitGet()); + BoardWinWait(); + } else { + BoardAudSeqPause(1, 1, 1000); + HuPrcSleep(0x30); + var_r27 = HuAudSStreamPlay(2); + } + } + if (var_r29 == 8) { + HuAudFXPlay(loseSoundTbl[GWPlayer[temp_r30].character]); + BoardPlayerVoiceEnableSet(temp_r30, var_r29, 0); + } + BoardPlayerMotionShiftSet(temp_r30, var_r29, 0.0f, 8.0f, 0); + switch (var_r31) { + case 0: + case 1: + ExecCoinPrize(); + break; + case 2: + if (var_r24 < 3) { + ExecItemPrize(); + } else { + var_r31 = 3; + } + break; + } + if (var_r27 != -1) { + while (HuAudSStreamStatGet(var_r27) != 0) { + HuPrcVSleep(); + } + var_r27 = -1; + BoardAudSeqPause(1, 0, 1000); + } + while (!BoardPlayerMotionEndCheck(temp_r30)) { + HuPrcVSleep(); + } + if (var_r31 != 3) { + var_r28 = lotteryMessBase + 3; + } else { + var_r28 = lotteryMessBase + 8; + } + BoardModelMotionShiftSet(BoardLotteryHostGet(), lotteryMot[2], 0.0f, 10.0f, 0x40000001); + BoardWinCreate(2, var_r28, BoardWinPortraitGet()); + BoardWinWait(); + BoardWinKill(); + if (var_r26 != 0) { + BoardConfettiStop(); + } + if (var_r31 == 3) { + ExecLose(temp_r30); + } +} + +static void ExecLose(s32 arg0) { + s32 temp_r30; + + temp_r30 = GWPlayer[arg0].character; + loseMot = BoardPlayerMotionCreate(arg0, loseMotTbl[temp_r30]); + BoardPlayerMotionShiftSet(arg0, loseMot, 0.0f, 10.0f, 0); + HuPrcSleep(10); + while (!BoardPlayerMotionEndCheck(arg0)) { + HuPrcVSleep(); + } +} + +static void CreateLotteryWin(s32 arg0) { + float sp8[2]; + float temp_f30; + float var_f31; + s32 var_r31; + + temp_f30 = -10000.0f; + if (arg0 == 0) { + var_r31 = 0x60050; + var_f31 = 352.0f; + } else if (arg0 == 1) { + var_f31 = 352.0f; + var_r31 = 0x60051; + } else { + var_f31 = 364.0f; + var_r31 = 0x200016; + } + HuWinMesMaxSizeGet(1, sp8, var_r31); + lotteryInstWin = HuWinCreate(temp_f30, var_f31, sp8[0], sp8[1], 0); + HuWinBGTPLvlSet(lotteryInstWin, 0.0f); + HuWinMesSpeedSet(lotteryInstWin, 0); + HuWinMesSet(lotteryInstWin, var_r31); +} + +static void KillLotteryWin(void) { + if (lotteryInstWin != -1) { + HuWinKill(lotteryInstWin); + lotteryInstWin = -1; + } +} + +void BoardLotteryTutorialExec(void) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + s16 temp_r29; + s16 temp_r28; + s16 temp_r31; + s32 temp_r30; + + temp_r30 = BoardDataDirReadAsync(0x50000); + temp_r31 = BoardSpaceFlagSearch(0, 0x10000000); + if (temp_r30 != -1) { + BoardDataAsyncWait(temp_r30); + } + BoardModelMotionStart(BoardLotteryHostGet(), 1, 0x40000001); + CreateModel(); + temp_r29 = BoardSpaceLinkFlagSearch(0, temp_r31, 0x02000000); + BoardSpacePosGet(0, temp_r31, &sp38); + BoardSpacePosGet(0, temp_r29, &sp2C); + PSVECSubtract(&sp2C, &sp38, &sp20); + PSVECNormalize(&sp20, &sp20); + temp_r28 = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + sp14.x = -3.0f; + sp14.y = temp_r28; + sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 200.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lotteryMdl[0], &sp14, &sp8, 1300.0f, -1.0f, 0x15); + HuAudFXPlay(0x331); + HuAudFXPlay(0x344); + BoardModelMotionStart(lotteryMdl[0], 0, 0); + while (!BoardModelMotionEndCheck(lotteryMdl[0])) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(BoardLotteryHostGet(), lotteryMot[3], 0.0f, 10.0f, 0); + HuPrcSleep(10); + while (!BoardModelMotionEndCheck(BoardShopHostGet())) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(BoardLotteryHostGet(), lotteryMot[0], 0.0f, 10.0f, 0x40000001); + BoardTutorialHookExec(0x1C, 0); + BoardModelMotionShiftSet(BoardLotteryHostGet(), lotteryMot[2], 0.0f, 10.0f, 0x40000001); + HuPrcSleep(30); + BoardModelMotionStart(lotteryMdl[0], 0, 0x40000004); + while (!BoardModelMotionEndCheck(lotteryMdl[0])) { + HuPrcVSleep(); + } + BoardModelMotionSpeedSet(lotteryMdl[0], 0.0f); + BoardModelAttrReset(lotteryMdl[0], 0x40000004); + HuAudFXPlay(0x32F); + KillModel(); +} diff --git a/src/game/board/main.c b/src/game/board/main.c index 900c5738..41990f14 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -8,7 +8,9 @@ #include "string.h" #include "game/hsfman.h" #include "game/hsfdraw.h" +#include "game/board/lottery.h" #include "game/board/main.h" +#include "game/board/model.h" #include "game/board/pause.h" #include "game/board/player.h" #include "game/board/tutorial.h" @@ -58,7 +60,6 @@ static CameraView camViewTbl[] = { }; -extern void BoardModelPosGet(s16 model, Vec *pos); extern s32 BoardSpacePosGet(s32 layer, s32 space, Vec *pos); extern void BoardMGSetupPlayClear(void); diff --git a/src/game/board/space.c b/src/game/board/space.c index e117bf18..25a278ec 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -1,6 +1,8 @@ #include "game/gamework_data.h" #include "game/flag.h" +#include "game/board/lottery.h" #include "game/board/main.h" +#include "game/board/model.h" #include "game/board/player.h" #include "game/board/space.h" #include "game/board/star.h" @@ -14,9 +16,6 @@ #include "string.h" -extern s16 BoardModelCreate(s32 file, s32 *data, s32 arg3); -extern s16 BoardModelIDGet(s16 model); - static BoardSpace spaceData[2][256]; s16 boardSpaceStarTbl[8]; static GXTexObj spaceHiliteTex; @@ -834,7 +833,7 @@ static void DrawSpaces(ModelData *model, Mtx matrix) if(player_pos.y-space_curr->pos.y < 0.0f) { y_dist = -(player_pos.y-space_curr->pos.y); } else { - y_dist = player_pos.y-space_curr->pos.y; + y_dist = player_pos.y-space_curr->pos.y; } if(y_dist < 10.0f) { space_hilite = space_curr; diff --git a/src/game/board/star.c b/src/game/board/star.c index 59815c40..ed98fcb8 100755 --- a/src/game/board/star.c +++ b/src/game/board/star.c @@ -717,8 +717,8 @@ void BoardStarShowNext(s32 arg0) { Hu3D2Dto3D(&sp44, 1, &sp44); BoardModelPosSetV(BoardStarHostMdlGet(), &sp44); BoardCameraRotGet(&sp2C); - PSMTXRotRad(sp5C, 'y', 0.17453292f); - PSMTXRotRad(sp8C, 'x', 0.017453292f * sp2C.x); + PSMTXRotRad(sp5C, 'y', MTXDegToRad(10.0f)); + PSMTXRotRad(sp8C, 'x', MTXDegToRad(sp2C.x)); PSMTXConcat(sp8C, sp5C, spBC); BoardModelMtxSet(BoardStarHostMdlGet(), &spBC); BoardModelRotSet(BoardStarHostMdlGet(), 0.0f, 0.0f, 0.0f); diff --git a/src/game/board/view.c b/src/game/board/view.c index 46dc6f6d..1d11d83c 100755 --- a/src/game/board/view.c +++ b/src/game/board/view.c @@ -578,8 +578,8 @@ static void UpdateOverheadView(omObjData *arg0) { sp20.y = var_r29[1]; sp20.z = 1000.0f; BoardCameraRotGet(&sp8); - PSMTXRotRad(sp5C, 0x78, sp8.x * 0.017453292f); - PSMTXRotRad(sp2C, 0x79, sp8.y * 0.017453292f); + PSMTXRotRad(sp5C, 'x', MTXDegToRad(sp8.x)); + PSMTXRotRad(sp2C, 'y', MTXDegToRad(sp8.y)); PSMTXConcat(sp2C, sp5C, sp2C); BoardModelMtxSet(temp_r31->unk04, &sp2C); Hu3D2Dto3D(&sp20, 1, &sp20); diff --git a/src/game/board/warp.c b/src/game/board/warp.c index e623e207..f5b45068 100644 --- a/src/game/board/warp.c +++ b/src/game/board/warp.c @@ -1,5 +1,6 @@ #include "game/board/warp.h" #include "game/board/main.h" +#include "game/board/model.h" #include "game/board/player.h" #include "game/board/tutorial.h" #include "game/wipe.h" @@ -21,10 +22,6 @@ extern void BoardCharWheelInit(s32, s32); extern void BoardCharWheelSpeedSet(f32); extern void BoardCharWheelWait(void); extern s32 BoardCharWheelResultGet(void); -extern f32 BoardModelMotionTimeGet(s16); -extern void BoardModelHookReset(s16); -extern s32 BoardModelHookSet(s16, char*, s16); -extern s32 BoardModelMotionEndCheck(s16); static Vec warpPos; From e57cd433f123620b954e03ac6ab37ffa98463142 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 28 Feb 2024 19:42:08 -0600 Subject: [PATCH 038/106] Finish matching board/item.c --- configure.py | 2 +- include/game/board/player.h | 3 +- include/game/board/star.h | 2 + src/game/board/item.c | 1055 ++++++++++++++++++++++++++++++++--- src/game/board/player.c | 6 +- 5 files changed, 994 insertions(+), 74 deletions(-) diff --git a/configure.py b/configure.py index dd61dd7c..499dadde 100644 --- a/configure.py +++ b/configure.py @@ -377,7 +377,7 @@ config.libs = [ Object(Matching, "game/board/roll.c"), Object(Matching, "game/board/ui.c"), Object(Matching, "game/board/block.c"), - Object(NonMatching, "game/board/item.c"), + Object(Matching, "game/board/item.c"), Object(NonMatching, "game/board/bowser.c"), Object(NonMatching, "game/board/battle.c"), Object(NonMatching, "game/board/fortune.c"), diff --git a/include/game/board/player.h b/include/game/board/player.h index 2cbabee4..3b58f72e 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -82,7 +82,7 @@ void BoardPlayerScaleSetV(s32, Vec*); void BoardPlayerScaleSet(s32, f32, f32, f32); s16 BoardPlayerCurrMotionGet(s32); s32 BoardPlayerMotionCreate(s32, s32); -void BoardPlayerMotionKill(s32, s32); +s32 BoardPlayerMotionKill(s32, s32); s32 BoardPlayerMotionEndCheck(s32); void BoardPlayerMotionEndWait(s32); void BoardPlayerMotionStart(s32, s32, s32); @@ -114,6 +114,7 @@ void BoardPlayerZoomRestore(s32); void BoardJunctionMaskSet(s32); void BoardJunctionMaskReset(s32); void BoardJunctionMaskZero(void); +void BoardPlayerVoiceEnableSet(s32, s32, s32); void InitJunction(s32, s32, f32); static void UpdateJunctionGfx(omObjData*); static void StopJunctionPlayer(s32); diff --git a/include/game/board/star.h b/include/game/board/star.h index 5adc2211..5920cb78 100755 --- a/include/game/board/star.h +++ b/include/game/board/star.h @@ -11,4 +11,6 @@ void BoardStarExec(s32 arg0, BoardSpace *arg1); void BoardStarGive(s32 arg0, Vec *arg1); void BoardStarShowNext(s32 arg0); +extern s32 boardStarSndTbl[]; + #endif diff --git a/src/game/board/item.c b/src/game/board/item.c index 59176efc..5a330494 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -18,6 +18,12 @@ #include "game/board/space.h" #include "game/board/ui.h" #include "game/board/window.h" +#include "game/board/view.h" + +#include "game/board/star.h" +#include "game/board/boo.h" + +void BoardCharWheelWait(void); typedef struct { /* 0x00 */ s16 unk00; @@ -47,10 +53,8 @@ typedef struct { } UnkGenieCameraStruct; // Size 0x1C u32 frandmod(u32); -void CharModelCreateParticle(s32, Vec*); void BoardBowserSuitInit(s32); s16 BoardBowserSuitPlayerModelGet(void); -void fn_8004F578(s16, s32); static void ItemProcess(void); static void RestoreProcess(void); @@ -103,6 +107,9 @@ static s8 currItem; static s16 suitMdl; static s32 suitMot[2]; static s32 suitCommonMot[2]; +static s16 booBallMdl; +static float booBallAlpha; +static char booCoinStr[8]; // ... static float genieFov; static AnimData *genieParticleAnim; @@ -439,8 +446,9 @@ static void BoardUiInlineFunc02(void) { static inline void BoardUiInlineFunc03(s32 arg0) { Vec sp8; Vec sp14; - - BoardSpacePosGet(0, GWPlayerSpaceCurrGet(arg0), &sp14); + s32 space = GWPlayer[arg0].space_curr; + + BoardSpacePosGet(0, space, &sp14); BoardPlayerPosGet(arg0, &sp8); BoardPlayerPosLerpStart(arg0, &sp8, &sp14, 0x14); while (GWPlayer[arg0].moving) { @@ -499,7 +507,7 @@ static Process *ItemShowProc(UnkItemShowProcStruct *arg0, Vec *arg1) { sp20.y += 35.0f; sp20.z += 50.0 * cos(sp14.y * M_PI / 180.0); sp20.x += 50.0 * sin(sp14.y * M_PI / 180.0); - CharModelCreateParticle(1, &sp20); + CharModelEffectCreate(1, &sp20); HuPrcSleep(0xA); } if (suitMdl >= 0) { @@ -765,35 +773,448 @@ static void ExecItemHammer(void) { } } -// https://decomp.me/scratch/QqVh2 static void ExecItemPipe(void) { + Vec spE4[2]; + Vec spCC[2]; + Vec spB4[2]; + Vec spA8; + Vec sp9C; + Vec sp90; + Vec sp84; + Vec sp78; + Vec sp6C; + Vec sp60; + s32 sp58[2]; + float sp50[2]; + float sp48[2]; + s16 sp30[2]; + s16 sp2C[2]; + float temp_f28; + float var_f30; + float var_f29; + float var_f31; + s16 temp_r26; + s16 temp_r28; + s32 temp_r25; + s32 temp_r29; + s32 temp_r19; + s32 temp_r18; + s16 var_r27; + s32 var_r30; + s32 var_r31; + + HuAudFXPlay(0x350); + ItemShowProc(NULL, NULL); + for (var_r31 = 0; var_r31 < 2; var_r31++) { + sp30[var_r31] = BoardModelCreate(itemMdlTbl[currItem], NULL, 1); + BoardModelLayerSet(sp30[var_r31], 2); + sp9C.x = sp9C.z = 2.0f; + sp9C.y = 0.0f; + BoardModelScaleSetV(sp30[var_r31], &sp9C); + BoardModelVisibilitySet(sp30[var_r31], 0); + } + BoardCharWheelInit(currItemRestore, 3); + BoardCharWheelWait(); + temp_r26 = BoardCharWheelResultGet(); + sp2C[0] = currItemRestore; + sp2C[1] = temp_r26; + for (var_r31 = 0; var_r31 < 2; var_r31++) { + sp58[var_r31] = GWPlayer[sp2C[var_r31]].space_curr; + BoardSpacePosGet(0, sp58[var_r31], &spE4[var_r31]); + BoardModelPosSetV(sp30[var_r31], &spE4[var_r31]); + } + if (sp58[0] == sp58[1]) { + HuWinMesMaxSizeGet(1, sp48, 0x120012); + temp_r28 = HuWinCreate(-10000.0f, -10000.0f, sp48[0], sp48[1], 0); + HuWinMesSet(temp_r28, 0x120012); + HuWinMesWait(temp_r28); + HuPrcSleep(0xB4); + HuWinKill(temp_r28); + } else { + BoardUiInlineFunc03(sp2C[1]); + HuAudFXPlay(0x318); + for (var_r31 = 0; var_r31 < 2; var_r31++) { + BoardModelVisibilitySet(sp30[var_r31], 1); + BoardPlayerPosGet(sp2C[var_r31], &spCC[var_r31]); + } + for (var_r31 = 0; var_r31 < 0x3C; var_r31++) { + sp9C.y += 0.033333335f; + for (var_r30 = 0; var_r30 < 2; var_r30++) { + BoardModelScaleSetV(sp30[var_r30], &sp9C); + spCC[var_r30].y += 3.3333333f; + BoardPlayerPosSetV(sp2C[var_r30], &spCC[var_r30]); + } + HuPrcVSleep(); + } + sp9C.y = 2.0f; + for (var_r31 = 0; var_r31 < 2; var_r31++) { + BoardModelScaleSetV(sp30[var_r31], &sp9C); + } + HuPrcSleep(0xA); + HuAudFXPlay(0x35A); + omVibrate(sp2C[0], 0xC, 4, 2); + var_f30 = 5.0f; + sp50[0] = spCC[0].y; + sp50[1] = spCC[1].y; + var_f31 = 1.0f; + while (1) { + for (var_r31 = 0; var_r31 < 2; var_r31++) { + spCC[var_r31].y -= var_f30; + BoardPlayerPosSetV(sp2C[var_r31], &spCC[var_r31]); + if (GWPlayer[sp2C[var_r31]].character == 5) { + var_f31 -= 0.05f; + if (var_f31 < 0.65f) { + var_f31 = 0.65f; + } + sp90.x = sp90.y = sp90.z = var_f31; + BoardPlayerScaleSetV(sp2C[var_r31], &sp90); + } + } + var_f30 *= 1.08f; + if (sp50[0] - spCC[0].y >= 300.0f && sp50[1] - spCC[1].y >= 300.0f) { + break; + } + HuPrcVSleep(); + } + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, 0x1E); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardCameraMoveSet(0); + spA8 = spCC[0]; + spCC[0] = spCC[1]; + spCC[1] = spA8; + var_r31 = sp58[0]; + sp58[0] = sp58[1]; + sp58[1] = var_r31; + for (var_r31 = 0; var_r31 < 2; var_r31++) { + GWPlayer[sp2C[var_r31]].space_curr = sp58[var_r31]; + } + for (var_r31 = 0; var_r31 < 2; var_r31++) { + BoardPlayerMoveAwayStartCurr(sp58[var_r31], 1); + BoardPlayerPosGet(sp2C[var_r31], &spE4[var_r31]); + BoardPlayerPosSetV(sp2C[var_r31], &spCC[var_r31]); + } + HuPrcVSleep(); + BoardCameraMoveSet(1); + for (var_r31 = 0; var_r31 < 2; var_r31++) { + BoardPlayerMotionStart(sp2C[var_r31], 4, 0); + BoardPlayerVoiceEnableSet(sp2C[var_r31], 4, 0); + BoardModelVisibilitySet(BoardPlayerModelGet(sp2C[var_r31]), 0); + } + WipeCreate(1, 0, 0x1E); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + temp_f28 = 19.0f; + var_f29 = 0.0f; + for (var_r31 = 0; var_r31 < 2; var_r31++) { + PSVECSubtract(&spE4[var_r31], &spCC[var_r31], &spB4[var_r31]); + PSVECScale(&spB4[var_r31], &spB4[var_r31], 0.03f); + BoardModelVisibilitySet(BoardPlayerModelGet(sp2C[var_r31]), 1); + } + HuAudPlayerVoicePlay(currItemRestore, 0x122); + var_f31 = 0.65f; + var_r27 = 5; + while (1) { + var_f30 = temp_f28 - 0.06666667f * (var_f29 * var_f29 * 0.25f); + var_r30 = 0; + for (var_r31 = 0; var_r31 < 2; var_r31++) { + if (GWPlayer[sp2C[var_r31]].character == 5) { + if (var_r27 != 0) { + var_r27--; + } else { + var_f31 += 0.05f; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + sp90.x = sp90.y = sp90.z = var_f31; + BoardPlayerScaleSetV(sp2C[var_r31], &sp90); + } + } + spCC[var_r31].y += var_f30; + if (fabs(spCC[var_r31].x - spE4[var_r31].x) <= fabs(spB4[var_r31].x)) { + spCC[var_r31].x = spE4[var_r31].x; + var_r30++; + } else { + spCC[var_r31].x += spB4[var_r31].x; + } + if (fabs(spCC[var_r31].z - spE4[var_r31].z) <= fabs(spB4[var_r31].z)) { + spCC[var_r31].z = spE4[var_r31].z; + var_r30++; + } else { + spCC[var_r31].z += spB4[var_r31].z; + } + if (spCC[var_r31].y < spE4[var_r31].y) { + spCC[var_r31].y = spE4[var_r31].y; + var_r30++; + } + BoardPlayerPosSetV(sp2C[var_r31], &spCC[var_r31]); + } + var_f29 += 1.0f; + if (var_r30 == 6) { + break; + } + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(sp2C[1], 6, 0.0f, 8.0f, 0x40000001); + BoardModelVoiceEnableSet(BoardPlayerModelGet(sp2C[1]), 6, 0); + CharModelLayerSetAll(2); + BoardRotateDiceNumbers(sp2C[0]); + for (var_r31 = 0; var_r31 < 0x2D; var_r31++) { + sp9C.y -= 0.044444446f; + for (var_r30 = 0; var_r30 < 2; var_r30++) { + BoardModelScaleSetV(sp30[var_r30], &sp9C); + } + HuPrcVSleep(); + } + for (var_r31 = 0; var_r31 < 2; var_r31++) { + BoardModelVisibilitySet(sp30[var_r31], 0); + } + BoardUiInlineFunc03(sp2C[0]); + BoardWinCreate(2, 0x12001D, -1); + BoardWinInsertMesSet(GWPlayerCfg[sp2C[0]].character, 0); + BoardWinInsertMesSet(GWPlayerCfg[sp2C[1]].character, 1); + BoardWinWait(); + BoardWinKill(); + BoardRotateDiceNumbers(sp2C[1]); + HuPrcSleep(8); + BoardModelVoiceEnableSet(BoardPlayerModelGet(sp2C[1]), 6, 1); + } + BoardPlayerVoiceEnableSet(sp2C[0], 4, 1); + BoardPlayerVoiceEnableSet(sp2C[1], 4, 1); + for (var_r31 = 0; var_r31 < 2; var_r31++) { + BoardModelKill(sp30[var_r31]); + } + HuPrcKill(NULL); + while (1) { + HuPrcVSleep(); + } } -// https://decomp.me/scratch/r8MWA static void ExecItemSwap(void) { - (void) 0.033333335f; - (void) 3.3333333f; - (void) 5.0f; - (void) 0.05f; - (void) 0.65f; - (void) 1.08f; - (void) 19.0f; - (void) 0.06666667f; - (void) 0.25f; - (void) 8.0f; - (void) 0.044444446f; - (void) 45.0f; - (void) 0.94f; - (void) 6.0f; - (void) 0.6f; - (void) 255.0f; - (void) 1.02f; - (void) 5.6666665f; - (void) 4503601774854144.0; - (void) 106.0; + Vec sp1A4[3]; + Vec sp180[3]; + Vec sp15C[3]; + Vec sp138[3]; + s32 spC0[6]; + Vec spB4; + Vec spA8; + Vec sp9C; + Vec sp90; + Vec sp84; + Vec sp78; + Vec sp6C; + Vec sp60; + s16 sp54[6]; + Vec sp48; + Vec sp3C; + float temp_f29; + float var_f30; + s16 temp_r29; + s32 var_r23; + s32 var_r22; + s32 var_r28; + s32 var_r27; + s32 var_r26; + s32 var_r30; + s32 var_r31; + s32 temp_r24; + s8 var_r21; + Mtx sp108; + Mtx spD8; + + HuAudFXPlay(0x350); + ItemShowProc(NULL, NULL); + BoardCharWheelInit(currItemRestore, 3); + BoardCharWheelWait(); + temp_r24 = BoardCharWheelResultGet(); + suitMdl = BoardModelCreate(itemMdlTbl[currItem], NULL, 0); + BoardModelLayerSet(suitMdl, 7); + BoardModelAttrSet(suitMdl, 0x400000); + sp9C.x = sp9C.y = sp9C.z = 0.0f; + sp9C.y = 45.0f; + HuAudFXPlay(0x364); + BoardUiInlineFunc01(&sp9C); + BoardModelPosGet(suitMdl, &spB4); + BoardPlayerRotGet(currItemRestore, &sp90); + for (var_r27 = 0; var_r27 < 3; var_r27++) { + if (((float*) &sp90)[var_r27] < 0.0f) { + ((float*) &sp90)[var_r27] += 360.0f; + } + if (((float*) &sp90)[var_r27] >= 360.0f) { + ((float*) &sp90)[var_r27] -= 360.0f; + } + } + BoardModelRotGet(suitMdl, &spA8); + while (1) { + PSVECAdd(&spA8, &sp9C, &spA8); + for (var_r26 = 0; var_r26 < 3; var_r26++) { + if (((float*) &spA8)[var_r26] < 0.0f) { + ((float*) &spA8)[var_r26] += 360.0f; + } + if (((float*) &spA8)[var_r26] >= 360.0f) { + ((float*) &spA8)[var_r26] -= 360.0f; + } + } + sp9C.y *= 0.94f; + if (sp9C.y <= 6.0f) { + sp9C.y = 6.0f; + if (fabs(sp90.y - spA8.y) <= sp9C.y) { + spA8.y = sp90.y; + break; + } + } + BoardModelRotSetV(suitMdl, &spA8); + HuPrcVSleep(); + } + BoardModelRotSetV(suitMdl, &spA8); + var_r23 = var_r22 = 0; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + if (GWPlayer[currItemRestore].items[var_r31] != -1) { + var_r23++; + } + if (GWPlayer[temp_r24].items[var_r31] != -1) { + var_r22++; + } + } + if (var_r23 >= var_r22) { + var_r28 = var_r23 * 2; + } else { + var_r28 = var_r22 * 2; + } + BoardModelRotGet(suitMdl, &sp3C); + Hu3DCameraSet(0, sp108); + PSMTXInverse(sp108, spD8); + Hu3DMtxRotGet(spD8, &sp48); + sp3C.x = sp48.x; + for (var_r31 = 0; var_r31 < var_r28 / 2; var_r31++) { + temp_r29 = sp54[var_r31] = BoardModelCreate(itemMdlTbl[currItem], NULL, 1); + BoardModelLayerSet(temp_r29, 6); + BoardModelPassSet(temp_r29, 0); + BoardModelRotSetV(temp_r29, &sp3C); + BoardModelVisibilitySet(temp_r29, 0); + BoardModelAttrSet(temp_r29, 0x400000); + temp_r29 = sp54[var_r31 + 3] = BoardModelCreate(itemMdlTbl[currItem], NULL, 1); + BoardModelLayerSet(temp_r29, 6); + BoardModelPassSet(temp_r29, 0); + BoardModelRotSetV(temp_r29, &sp3C); + BoardModelVisibilitySet(temp_r29, 0); + BoardModelAttrSet(temp_r29, 0x400000); + } + BoardItemGetDestPos(currItemRestore, &sp15C[0]); + BoardItemGetDestPos(temp_r24, &sp138[0]); + BoardModelPosGet(suitMdl, &sp90); + PSVECSubtract(&sp90, &Hu3DCamera->pos, &sp90); + temp_f29 = PSVECMag(&sp90); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + sp15C[var_r31].z = temp_f29; + sp138[var_r31].z = temp_f29; + } + for (var_r31 = 0; var_r31 < var_r28 / 2; var_r31++) { + HuAudFXPlay(0x319); + BoardModelVisibilitySet(sp54[var_r31], 1); + BoardModelVisibilitySet(sp54[var_r31 + 3], 1); + sp1A4[var_r31] = sp180[var_r31] = spB4; + Hu3D2Dto3D(&sp15C[var_r31], 1, &sp84); + Hu3D2Dto3D(&sp138[var_r31], 1, &sp78); + PSVECSubtract(&sp84, &sp1A4[var_r31], &sp6C); + PSVECScale(&sp6C, &sp6C, 0.033333335f); + PSVECSubtract(&sp78, &sp180[var_r31], &sp60); + PSVECScale(&sp60, &sp60, 0.033333335f); + for (var_r30 = 0; var_r30 < 0x1E; var_r30++) { + BoardModelPosSetV(sp54[var_r31], &sp1A4[var_r31]); + BoardModelPosSetV(sp54[var_r31 + 3], &sp180[var_r31]); + PSVECAdd(&sp1A4[var_r31], &sp6C, &sp1A4[var_r31]); + PSVECAdd(&sp180[var_r31], &sp60, &sp180[var_r31]); + HuPrcVSleep(); + } + sp1A4[var_r31] = sp84; + sp180[var_r31] = sp78; + BoardModelPosSetV(sp54[var_r31], &sp1A4[var_r31]); + BoardModelPosSetV(sp54[var_r31 + 3], &sp180[var_r31]); + } + omVibrate(currItemRestore, 0xB4, 6, 6); + omVibrate(temp_r24, 0xB4, 6, 6); + for (var_r31 = 0; var_r31 < 0x3C; var_r31++) { + for (var_r30 = 0; var_r30 < var_r28 / 2; var_r30++) { + sp6C = sp1A4[var_r30]; + sp6C.x += 3.0 * sin((M_PI * (frand() % 360)) / 180.0); + sp6C.y += 3.0 * sin((M_PI * (frand() % 360)) / 180.0); + BoardModelPosSetV(sp54[var_r30], &sp6C); + sp6C = sp180[var_r30]; + sp6C.x += 3.0 * sin((M_PI * (frand() % 360)) / 180.0); + sp6C.y += 3.0 * sin((M_PI * (frand() % 360)) / 180.0); + BoardModelPosSetV(sp54[var_r30 + 3], &sp6C); + } + HuPrcSleep(2); + } + for (var_r31 = 0; var_r31 < var_r28 / 2; var_r31++) { + BoardModelPosSetV(sp54[var_r31], &sp1A4[var_r31]); + BoardModelPosSetV(sp54[var_r31 + 3], &sp180[var_r31]); + } + for (var_r31 = 0; var_r31 < 3; var_r31++) { + spC0[var_r31] = BoardPlayerItemRemove(currItemRestore, 0); + spC0[var_r31 + 3] = BoardPlayerItemRemove(temp_r24, 0); + } + for (var_r31 = 0; var_r31 < 3; var_r31++) { + if (spC0[var_r31 + 3] != -1) { + BoardPlayerItemAdd(currItemRestore, spC0[var_r31 + 3]); + } + if (spC0[var_r31] != -1) { + BoardPlayerItemAdd(temp_r24, spC0[var_r31]); + } + } + for (var_r31 = (var_r28 / 2) - 1; var_r31 >= 0; var_r31--) { + HuAudFXPlay(0x32C); + PSVECSubtract(&spB4, &sp1A4[var_r31], &sp6C); + PSVECScale(&sp6C, &sp6C, 0.033333335f); + PSVECSubtract(&spB4, &sp180[var_r31], &sp60); + PSVECScale(&sp60, &sp60, 0.033333335f); + for (var_r30 = 0; var_r30 < 0x1E; var_r30++) { + BoardModelPosSetV(sp54[var_r31], &sp1A4[var_r31]); + BoardModelPosSetV(sp54[var_r31 + 3], &sp180[var_r31]); + PSVECAdd(&sp1A4[var_r31], &sp6C, &sp1A4[var_r31]); + PSVECAdd(&sp180[var_r31], &sp60, &sp180[var_r31]); + HuPrcVSleep(); + } + BoardModelVisibilitySet(sp54[var_r31], 0); + BoardModelVisibilitySet(sp54[var_r31 + 3], 0); + } + sp9C.y = 0.6f; + var_f30 = 255.0f; + var_r21 = 0; + while (1) { + BoardModelRotSetV(suitMdl, &spA8); + BoardModelAlphaSet(suitMdl, var_f30); + PSVECAdd(&spA8, &sp9C, &spA8); + sp9C.y *= 1.02f; + if (sp9C.y >= 35.0f) { + if (var_r21 == 0) { + HuAudFXPlay(0x365); + var_r21 = 1; + } + sp9C.y = 45.0f; + var_f30 -= 5.6666665f; + if (var_f30 <= 0.0f) { + break; + } + } + HuPrcVSleep(); + } + BoardModelKill(suitMdl); + for (var_r31 = 0; var_r31 < var_r28 / 2; var_r31++) { + BoardModelKill(sp54[var_r31]); + BoardModelKill(sp54[var_r31 + 3]); + } + HuPrcKill(NULL); + while (1) { + HuPrcVSleep(); + } } -void ExecItemSpark(void) { +static void ExecItemSpark(void) { Vec sp68; Vec sp5C; Vec sp50; @@ -806,7 +1227,8 @@ void ExecItemSpark(void) { s32 temp_r28; s16 temp_r30; s32 i; - + + (void)106.0; temp_r30 = BoardModelCreate(0x70067, NULL, 0); BoardModelLayerSet(temp_r30, 3); BoardModelVisibilitySet(temp_r30, 0); @@ -915,28 +1337,246 @@ static void ExecItemLight(void) { // https://decomp.me/scratch/gbgTk static void ExecItemWhistle(void) { - (void) 0.003921569f; - (void) 0.5f; - (void) 120.0f; - (void) 120.0; - (void) 100.0f; - (void) 90.0f; - (void) 200.0f; - (void) 0.03448276f; - (void) 30.0f; - (void) 95.0f; - (void) 185.0f; - (void) 275.0f; - (void) -1.0f; - (void) -35.0f; - (void) 0.16f; - (void) 1.0; - (void) 4.0f; - (void) 4.5f; - (void) 1.7f; - (void) 0.083333336f; - (void) 0.945f; - (void) 500.0f; + Vec spF0[4]; + Vec spC0[4]; + Vec spB4; + Vec spA8; + Vec sp9C; + Vec sp90; + Vec sp84; + Vec sp78; + float sp68[4]; + float sp58[4]; + float sp48[4]; + float sp38[4]; + float sp28[4]; + s16 sp20[4]; + s16 sp8; + float var_f30; + float var_f31; + s32 temp_r23; + char *temp_r22; + s32 temp_r18; + s16 temp_r17; + s16 temp_r21; + s16 temp_r20; + s32 temp_r31; + s16 temp_r28; + s16 temp_r19; + s32 var_r26; + s16 var_r25; + s16 var_r27; + s32 var_r29; + s32 var_r31; + + + var_r31 = GWPlayerCfg[currItemRestore].character; + temp_r23 = BoardPlayerMotionCreate(currItemRestore, callMotTbl[var_r31]); + temp_r22 = callHookTbl[var_r31]; + temp_r28 = BoardStarHostMdlGet(); + BoardModelPosGet(temp_r28, &spB4); + sp9C = spB4; + temp_r19 = GWBoardGet(); + temp_r21 = BoardModelMotionCreate(temp_r28, callAttackMotTbl[temp_r19]); + temp_r20 = BoardModelMotionCreate(temp_r28, callAttackMotTbl2[temp_r19]); + var_f31 = 360.0f * (0.003921569f * (s32)((u8) frand())); + spA8.x = spA8.y = spA8.z = 0.5f; + for (var_r31 = 0; var_r31 < 4; var_r31++) { + sp20[var_r31] = BoardModelCreate(0x20027, NULL, 1); + BoardModelLayerSet(sp20[var_r31], 2); + temp_r17 = BoardModelMotionCreate(sp20[var_r31], 0x20028); + BoardModelMotionStart(sp20[var_r31], temp_r17, 0x40000001); + sp28[var_r31] = 120.0f; + spF0[var_r31].x = spB4.x + 120.0 * sin(M_PI * var_f31 / 180.0); + spF0[var_r31].y = 1000.0f + spB4.y + 100.0f * var_r31; + spF0[var_r31].z = spB4.z + 120.0 * cos(M_PI * var_f31 / 180.0); + spC0[var_r31].x = spC0[var_r31].z = 0.0f; + spC0[var_r31].y = var_f31 + 90.0f; + if (spC0[var_r31].y >= 360.0f) { + spC0[var_r31].y -= 360.0f; + } + BoardModelRotSetV(sp20[var_r31], &spC0[var_r31]); + BoardModelPosSetV(sp20[var_r31], &spF0[var_r31]); + BoardModelScaleSetV(sp20[var_r31], &spA8); + var_f31 += 90.0f; + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + sp38[var_r31] = var_f31; + BoardModelVisibilitySet(sp20[var_r31], 0); + } + HuAudFXPlay(0x350); + suitMdl = BoardModelCreate(itemMdlTbl[currItem], NULL, 0); + BoardModelLayerSet(suitMdl, 2); + ItemShowProc(NULL, NULL); + BoardModelPosGet(suitMdl, &sp90); + BoardPlayerPosGet(currItemRestore, &sp84); + sp84.y += 200.0f; + sp84.z += 100.0f; + PSVECSubtract(&sp84, &sp90, &sp78); + PSVECScale(&sp78, &sp78, 0.03448276f); + BoardPlayerMotionStart(currItemRestore, temp_r23, 0); + BoardPlayerMotionTimeSet(currItemRestore, 1.0f); + for (var_r31 = 0; var_r31 < 0x1D; var_r31++) { + sp90.y += sp78.y; + sp90.z += sp78.z; + BoardModelPosSetV(suitMdl, &sp90); + HuPrcVSleep(); + } + while (BoardPlayerMotionTimeGet(currItemRestore) < 30.0f) { + HuPrcVSleep(); + } + sp8 = BoardPlayerModelGet(currItemRestore); + BoardModelPosSetV(suitMdl, &sp84); + BoardModelHookSet(sp8, temp_r22, suitMdl); + while (BoardPlayerMotionTimeGet(currItemRestore) < BoardPlayerMotionMaxTimeGet(currItemRestore)) { + if (BoardPlayerMotionTimeGet(currItemRestore) == 95.0f + || BoardPlayerMotionTimeGet(currItemRestore) == 185.0f + || BoardPlayerMotionTimeGet(currItemRestore) == 275.0f) { + HuAudFXPlay(0x31F); + } + HuPrcVSleep(); + } + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, 0x3C); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardModelHookObjReset(sp8, temp_r22); + BoardRotateDiceNumbers(currItemRestore); + BoardModelKill(suitMdl); + BoardCameraMoveSet(0); + temp_r18 = BoardSpaceStarGetCurr(); + BoardCameraTargetSpaceSet(temp_r18); + HuPrcVSleep(); + BoardCameraMoveSet(1); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardModelVisibilitySet(sp20[var_r31], 1); + } + WipeCreate(1, 0, 0x3C); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + HuAudFXPlay(0x320); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + sp58[var_r31] = 0.0f; + sp48[var_r31] = 1.0f; + } + var_r27 = 0; + for (var_r25 = 0; var_r25 < 4;) { + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (sp48[var_r31] != -1.0f) { + sp68[var_r31] = sp58[var_r31] - 0.06666667f * (sp48[var_r31] * sp48[var_r31] * 0.25f); + if (sp68[var_r31] < -35.0f) { + sp68[var_r31] = -35.0f; + } + if (sp68[var_r31] > 35.0f) { + sp68[var_r31] = 35.0f; + } + sp48[var_r31] += 1.0f; + spF0[var_r31].y += sp68[var_r31]; + if (spF0[var_r31].y <= spB4.y) { + if (var_r27 == 0) { + var_r27 = 1; + for (var_r29 = 0; var_r29 < 4; var_r29++) { + omVibrate(var_r29, 0xC, 6, 6); + } + HuAudFXPlay(0x321); + } + spF0[var_r31].y = spB4.y; + sp58[var_r31] = 0.16f * -sp68[var_r31]; + if (fabs(sp58[var_r31]) <= 1.0) { + sp48[var_r31] = -1.0f; + var_r25++; + } + sp48[var_r31] = 1.0f; + } + BoardModelPosSetV(sp20[var_r31], &spF0[var_r31]); + } + } + HuPrcVSleep(); + } + BoardModelMotionShiftSet(temp_r28, temp_r20, 0.0f, 5.0f, 0x40000001); + HuAudFXPlay(0x322); + for (var_r29 = 0; var_r29 < 0xB4; var_r29++) { + for (var_r31 = 0; var_r31 < 4; var_r31++) { + sp38[var_r31] += 4.0f; + if (sp38[var_r31] >= 360.0f) { + sp38[var_r31] -= 360.0f; + } + spC0[var_r31].y = 90.0f + sp38[var_r31]; + if (spC0[var_r31].y >= 360.0f) { + spC0[var_r31].y -= 360.0f; + } + spF0[var_r31].x = spB4.x + 120.0 * sin(M_PI * sp38[var_r31] / 180.0); + spF0[var_r31].z = spB4.z + 120.0 * cos(M_PI * sp38[var_r31] / 180.0); + BoardModelPosSetV(sp20[var_r31], &spF0[var_r31]); + BoardModelRotSetV(sp20[var_r31], &spC0[var_r31]); + } + HuPrcVSleep(); + } + for (var_r29 = 0; var_r29 < 0x14; var_r29++) { + for (var_r31 = 0; var_r31 < 4; var_r31++) { + spC0[var_r31].y += 4.5f; + BoardModelRotSetV(sp20[var_r31], &spC0[var_r31]); + } + HuPrcVSleep(); + } + HuPrcSleep(0x1E); + var_f30 = 35.0f; + var_r26 = 0; + for (var_r31 = 0; var_r31 < 4; var_r31++) { + sp58[var_r31] = 8.0f; + sp48[var_r31] = 1.0f; + } + var_r27 = 0; + while (1) { + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (sp48[var_r31] != -1.0f) { + sp28[var_r31] -= 1.7f; + sp68[var_r31] = sp58[var_r31] - 0.083333336f * (sp48[var_r31] * sp48[var_r31] * 0.25f); + sp48[var_r31] += 1.0f; + spF0[var_r31].y += sp68[var_r31]; + if (spF0[var_r31].y <= spB4.y) { + spF0[var_r31].y = spB4.y; + sp48[var_r31] = -1.0f; + } + spF0[var_r31].x = spB4.x + sp28[var_r31] * sin(M_PI * sp38[var_r31] / 180.0); + spF0[var_r31].z = spB4.z + sp28[var_r31] * cos(M_PI * sp38[var_r31] / 180.0); + BoardModelPosSetV(sp20[var_r31], &spF0[var_r31]); + } + } + if (sp28[0] < 100.0f) { + if (var_r27 == 0) { + var_r27 = 1; + BoardModelMotionShiftSet(temp_r28, temp_r21, 0.0f, 3.0f, 0x40000001); + HuAudFXPlay(forceMoveSfxTbl[GWBoardGet()]); + } + sp9C.y += var_f30; + BoardModelPosSetV(temp_r28, &sp9C); + var_f30 *= 0.945f; + if (sp9C.y >= 500.0f && var_r26 == 0) { + WipeCreate(2, 0, 0x2D); + BoardAudSeqFadeOut(0, 0x3E8); + var_r26 = 1; + } + } + if (var_r26 != 0 && WipeStatGet() == 0) { + break; + } + HuPrcVSleep(); + } + BoardPlayerMotionKill(currItemRestore, temp_r23); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardModelKill(sp20[var_r31]); + } + BoardModelMotionKill(temp_r28, temp_r21); + BoardModelMotionKill(temp_r28, temp_r20); + BoardStarShowNext(currItemRestore); + HuPrcKill(NULL); + while (1) { + HuPrcVSleep(); + } } static void ExecItemBowser(void) { @@ -1013,23 +1653,300 @@ static void ExecItemBowser(void) { } } -// DATA + 0x218 -// ... -static u8 data_offset_temp[0xC] = { 0 }; +static s32 booMotTbl[3] = { + 0x00020018, + 0x00020016, + -1 +}; + +static inline void ExecItemBooBallInlineFunc01(s32 speed) { + Vec sp20; + s32 var_r20; + + sp20 = booBallPos; + booBallScale.x = booBallScale.y = booBallScale.z = 1.0f; + booBallAlpha = 255.0f; + BoardModelPosSetV(booBallMdl, &booBallPos); + BoardModelScaleSetV(booBallMdl, &booBallScale); + BoardModelAlphaSet(booBallMdl, booBallAlpha); + BoardModelVisibilitySet(booBallMdl, 1); + for (var_r20 = 0; var_r20 < speed; var_r20++) { + booBallAlpha -= (255.0f/speed); + if (booBallAlpha < 0.0f) { + booBallAlpha = 0.0f; + } + booBallScale.x -= (1.0f/speed); + booBallScale.y -= (1.0f/speed); + booBallScale.z -= (1.0f/speed); + booBallPos.y -= (20.0f/speed); + BoardModelAlphaSet(booBallMdl, booBallAlpha); + BoardModelScaleSetV(booBallMdl, &booBallScale); + BoardModelPosSetV(booBallMdl, &booBallPos); + HuPrcVSleep(); + } + booBallScale.x = booBallScale.y = booBallScale.z = 0.0f; + booBallAlpha = 0.0f; + BoardModelScaleSetV(booBallMdl, &booBallScale); + BoardModelAlphaSet(booBallMdl, booBallAlpha); +} + +static inline void ExecItemBooBallInlineFunc02(s32 speed) { + Vec sp20; + s32 var_r20; + + sp20 = booBallPos; + booBallScale.x = booBallScale.y = booBallScale.z = 0.0f; + booBallAlpha = 0.0f; + BoardModelPosSetV(booBallMdl, &booBallPos); + BoardModelScaleSetV(booBallMdl, &booBallScale); + BoardModelAlphaSet(booBallMdl, booBallAlpha); + BoardModelVisibilitySet(booBallMdl, 1); + for (var_r20 = 0; var_r20 < speed; var_r20++) { + booBallAlpha += (255.0f/speed); + if (booBallAlpha > 255.0f) { + booBallAlpha = 255.0f; + } + booBallScale.x += (1.0f/speed); + booBallScale.y += (1.0f/speed); + booBallScale.z += (1.0f/speed); + booBallPos.y += (20.0f/speed); + BoardModelAlphaSet(booBallMdl, booBallAlpha); + BoardModelScaleSetV(booBallMdl, &booBallScale); + BoardModelPosSetV(booBallMdl, &booBallPos); + HuPrcVSleep(); + } + booBallPos.y = sp20.y + 20.0f; + booBallScale.x = booBallScale.y = booBallScale.z = 1.0f; + booBallAlpha = 255.0f; + BoardModelPosSetV(booBallMdl, &booBallPos); + BoardModelScaleSetV(booBallMdl, &booBallScale); + BoardModelAlphaSet(booBallMdl, booBallAlpha); +} // https://decomp.me/scratch/0M6lm static void ExecItemBooBall(void) { - (void) 4.25f; - (void) 0.016666668f; - (void) 0.33333334f; - (void) 8.5f; - (void) 0.6666667f; - (void) 325.0f; - (void) -0.5f; - (void) 40.0f; - (void) 125.0f; - (void) booBallPos; - (void) booBallScale; + UnkItemShowProcStruct spA0; + UnkItemShowProcStruct sp80; + Vec sp74; + Vec sp68; + Process *temp_r17; + Process *sp1C; + s16 spC; + s16 spA; + s32 sp18; + s32 var_r26; + s32 var_r28; + s32 var_r29; + s32 var_r30; + s32 var_r31; + + BoardAudSeqPause(0, 1, 0x3E8); + suitMdl = BoardBooCreate(currItemRestore, &sp74); + booBallMdl = BoardModelCreate(0x20012, booMotTbl, 0); + BoardModelMotionStart(booBallMdl, 1, 0x40000001); + BoardModelLayerSet(booBallMdl, 2); + BoardModelAttrSet(booBallMdl, 2); + BoardModelVisibilitySet(booBallMdl, 0); + // Inline? (same pattern in ExecItemGenie) + spA0.unk02 = suitMdl; + spA0.unk04 = 4.0f; + spA0.unk08 = 3.0f; + spA0.unk10 = spA0.unk14 = spA0.unk18 = 0.0f; + spA0.unk1C = 1; + HuAudFXPlay(0x350); + temp_r17 = ItemShowProc(&spA0, NULL); + // ====================================== + BoardModelPosGet(suitMdl, &booBallPos); + ExecItemBooBallInlineFunc02(60); + // Inline? ================================= + sp80.unk02 = booBallMdl; + sp80.unk04 = 4.0f; + sp80.unk08 = 4.0f; + sp80.unk10 = sp80.unk14 = sp80.unk18 = 0.0f; + sp80.unk1C = 1; + sp1C = BoardUiInlineFunc05(&sp80); + // ====================================== + BoardMusStart(1, 1, 0x7F, 0); + HuAudFXPlay(0x4C); + BoardWinCreate(2, 0x120015, 3); + BoardWinWait(); + BoardWinKill(); + if (BoardPlayerCoinsGet(currItemRestore) < 5) { + BoardWinCreate(2, 0x120016, 3); + BoardWinWait(); + BoardWinKill(); + } else { + var_r28 = 0; + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (var_r31 != currItemRestore) { + var_r28 += GWStarsGet(var_r31); + } + } + var_r26 = 0; + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (var_r31 != currItemRestore) { + var_r26 += BoardPlayerCoinsGet(var_r31); + } + } + do { + BoardWinCreateChoice(4, 0x120018, 3, 0); + BoardWinAttrSet(0x10); + if (BoardPlayerCoinsGet(currItemRestore) < 0x32 || var_r28 == 0) { + BoardWinChoiceDisable(1); + } + if (var_r26 == 0) { + BoardWinChoiceDisable(0); + } + if (GWPlayer[currItemRestore].com) { + if (var_r28 != 0 && BoardPlayerCoinsGet(currItemRestore) >= 0x32) { + BoardComKeySetDown(); + } else { + BoardComKeySetUp(); + } + } + BoardWinWait(); + BoardWinKill(); + var_r29 = BoardWinChoiceGet(); + switch (var_r29) { + case 0: + for (var_r31 = 0; var_r31 < 5; var_r31++) { + BoardPlayerCoinsAdd(currItemRestore, -1); + HuAudFXPlay(0xE); + HuPrcSleep(6); + } + HuAudFXPlay(0xF); + BoardBooStealTypeSet(0); + BoardStatusShowSetAll(0); + HuAudFXPlay(0x34F); + ExecItemBooBallInlineFunc01(30); + sp68.x = 0.0f; + sp68.y = 0.0f; + sp68.z = 0.0f; + BoardCameraMotionStartEx(suitMdl, 0, &sp68, 325.0f, -1.0f, 0x15); + BoardBooStealMain(); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + ExecItemBooBallInlineFunc02(30); + var_r29 = BoardBooStealValueGet(&spC, &spA); + if (var_r29 == 0) { + var_r30 = 0x7000B; + } else if (spA == 0) { + var_r30 = 0x70009; + } else if (spA >= 1 && spA <= 3) { + var_r30 = 0x70008; + } else if (spA >= 4 && spA <= 6) { + var_r30 = 0x70007; + } else if (spA >= 7 && spA <= 8) { + var_r30 = 0x70006; + } else { + var_r30 = 0x70005; + } + sprintf(booCoinStr, "%d", spC); + HuAudFXPlay(0x4C); + BoardWinCreate(2, var_r30, 3); + BoardWinInsertMesSet((u32) (booCoinStr), 0); + BoardWinWait(); + BoardWinKill(); + BoardStatusShowSetAll(1); + if (var_r29 != 0) { + BoardPlayerMotionShiftSet(currItemRestore, 7, 0.0f, 8.0f, 0); + HuPrcSleep(0x1E); + for (var_r31 = 0; var_r31 < spC; var_r31++) { + BoardPlayerCoinsAdd(currItemRestore, 1); + HuAudFXPlay(7); + HuPrcVSleep(); + } + BoardPlayerMotionEndWait(currItemRestore); + HuPrcSleep(0xA); + BoardPlayerMotionShiftSet(currItemRestore, 1, 0.0f, 8.0f, 0x40000001); + } + break; + case 1: + for (var_r31 = 0; var_r31 < 0x32; var_r31++) { + BoardPlayerCoinsAdd(currItemRestore, -1); + HuAudFXPlay(0xE); + HuPrcSleep(1); + } + HuAudFXPlay(0xF); + BoardBooStealTypeSet(1); + BoardStatusShowSetAll(0); + ExecItemBooBallInlineFunc01(30); + sp68.x = 0.0f; + sp68.y = 0.0f; + sp68.z = 0.0f; + BoardCameraMotionStartEx(suitMdl, 0, &sp68, 325.0f, -1.0f, 0x15); + BoardBooStealMain(); + var_r29 = BoardBooStealLightCheck(); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + ExecItemBooBallInlineFunc02(30); + if (var_r29 != 0) { + var_r30 = 0x7000A; + } else { + var_r30 = 0x7000B; + } + HuAudFXPlay(0x4C); + BoardWinCreate(2, var_r30, 3); + BoardWinWait(); + BoardWinKill(); + BoardStatusShowSetAll(1); + BoardAudSeqFadeOut(1, 0x3E8); + HuPrcSleep(0x17); + if (var_r29 != 0) { + BoardPlayerVoiceEnableSet(currItemRestore, 7, 0); + sp18 = HuAudSStreamPlay(6); + BoardPlayerMotionShiftSet(currItemRestore, 7, 0.0f, 8.0f, 0); + HuAudFXPlay(boardStarSndTbl[GWPlayer[currItemRestore].character]); + BoardPlayerStarsAdd(currItemRestore, 1); + HuAudFXPlay(8); + HuPrcVSleep(); + BoardPlayerMotionEndWait(currItemRestore); + BoardPlayerVoiceEnableSet(currItemRestore, 7, 1); + while (msmStreamGetStatus(sp18) != 0) { + HuPrcVSleep(); + } + } + BoardPlayerMotionShiftSet(currItemRestore, 1, 0.0f, 8.0f, 0x40000001); + break; + case 3: + BoardViewMapExec(currItemRestore); + break; + case 2: + case -1: + HuAudFXPlay(0x4C); + BoardWinCreate(2, 0x120017, 3); + BoardWinWait(); + BoardWinKill(); + break; + } + } while (var_r29 == 3); + } + BoardAudSeqFadeOut(1, 0x3E8); + HuPrcKill(sp1C); + BoardModelPosGet(booBallMdl, &booBallPos); + HuAudFXPlay(0x34F); + ExecItemBooBallInlineFunc01(60); + HuPrcKill(temp_r17); + BoardAudSeqPause(0, 0, 0x3E8); + CharModelLayerSetAll(3); + BoardModelPosGet(suitMdl, &sp74); + CharModelEffectCreate(1, &sp74); + HuAudFXPlay(0x351); + HuPrcSleep(0xA); + BoardModelKill(suitMdl); + BoardModelKill(booBallMdl); + HuPrcSleep(0xF); + HuPrcKill(NULL); + while (1) { + HuPrcVSleep(); + } +} + +static void ForceConsts(void) +{ + (void)-0.5f; + (void)40.0f; + (void)125.0f; } static void LampParticleUpdate(s32 arg0, ParticleData *arg1) { @@ -1565,7 +2482,7 @@ static void ExecItemGenie(void) { HuPrcVSleep(); } HuAudFXPlay(0x35E); - fn_8004F578(GWPlayer[currItemRestore].character, 0); + CharModelEffectEnableSet(GWPlayer[currItemRestore].character, 0); BoardPlayerMotionStart(currItemRestore, 6, 0x40000001); var_f29 = 0.0f; var_f31 = 1.0f; @@ -1597,7 +2514,7 @@ static void ExecItemGenie(void) { HuPrcVSleep(); } BoardRotateDiceNumbers(currItemRestore); - fn_8004F578(GWPlayer[currItemRestore].character, 1); + CharModelEffectEnableSet(GWPlayer[currItemRestore].character, 1); HuSprAnimKill(genieParticleAnim); BoardPlayerMotionKill(currItemRestore, geniePlayerMot[0]); BoardPlayerMotionKill(currItemRestore, geniePlayerMot[1]); @@ -1650,7 +2567,7 @@ static void ExecItemBagJump(void) { HuPrcVSleep(); } CharModelLayerSetAll(3); - CharModelCreateParticle(1, &sp14); + CharModelEffectCreate(1, &sp14); BoardModelVisibilitySet(temp_r31, 0); HuAudFXPlay(0x30D); HuPrcKill(NULL); @@ -1786,7 +2703,7 @@ static void ExecItemBag(void) { HuWinKill(temp_r28); BoardModelPosGet(suitMdl, &sp30); CharModelLayerSetAll(3); - CharModelCreateParticle(1, &sp30); + CharModelEffectCreate(1, &sp30); HuAudFXPlay(0x351); HuPrcSleep(0xA); HuPrcKill(temp_r24); diff --git a/src/game/board/player.c b/src/game/board/player.c index 49e45eed..b4fc788a 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -21,7 +21,7 @@ extern f32 BoardModelRotYGet(s16); extern void BoardModelScaleGet(s16, s32*); extern void BoardModelVoiceEnableSet(s16, s32, s32); extern s32 BoardModelMotionCreate(s16, s32); -extern void BoardModelMotionKill(s16, s32); +extern s32 BoardModelMotionKill(s16, s32); extern s32 BoardModelMotionEndCheck(s16); extern s32 BoardModelMotionShiftSet(s16, s32, f32, f32, u32); extern void BoardModelMotionTimeSet(s16, f32); @@ -514,8 +514,8 @@ s32 BoardPlayerMotionCreate(s32 arg0, s32 arg1) { return BoardModelMotionCreate(BoardPlayerModelGet(arg0), arg1); } -void BoardPlayerMotionKill(s32 arg0, s32 arg1) { - BoardModelMotionKill(BoardPlayerModelGet(arg0), arg1); +s32 BoardPlayerMotionKill(s32 arg0, s32 arg1) { + return BoardModelMotionKill(BoardPlayerModelGet(arg0), arg1); } s32 BoardPlayerMotionEndCheck(s32 arg0) { From 3017018b26ba8fd04f67a22e15a6b50a7ac53738 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Fri, 1 Mar 2024 15:01:39 -0600 Subject: [PATCH 039/106] Match board/space.c --- configure.py | 2 +- include/game/board/star.h | 2 +- src/game/board/space.c | 56 +++++++++++++++++++++------------------ src/game/board/star.c | 2 +- 4 files changed, 33 insertions(+), 29 deletions(-) diff --git a/configure.py b/configure.py index 499dadde..7fd2f1ea 100644 --- a/configure.py +++ b/configure.py @@ -366,7 +366,7 @@ config.libs = [ Object(Matching, "game/board/audio.c"), Object(Matching, "game/board/com.c"), Object(Matching, "game/board/view.c"), - Object(NonMatching, "game/board/space.c"), + Object(Matching, "game/board/space.c"), Object(NonMatching, "game/board/shop.c"), Object(Matching, "game/board/lottery.c"), Object(Matching, "game/board/basic_space.c"), diff --git a/include/game/board/star.h b/include/game/board/star.h index 5920cb78..04a87558 100755 --- a/include/game/board/star.h +++ b/include/game/board/star.h @@ -7,7 +7,7 @@ void BoardStarHostSet(s16 arg0); s16 BoardStarHostMdlGet(void); -void BoardStarExec(s32 arg0, BoardSpace *arg1); +void BoardStarExec(s32 arg0, s32 arg1); void BoardStarGive(s32 arg0, Vec *arg1); void BoardStarShowNext(s32 arg0); diff --git a/src/game/board/space.c b/src/game/board/space.c index 25a278ec..cd504e5f 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -636,7 +636,7 @@ s32 BoardSpaceWalkExec(s32 player, s32 space) return 1; } if(space_ptr->flag & 0x600000) { - u16 mg_param = GWSystem.unk_38; + s32 mg_param = GWSystem.unk_38; if(BoardPlayerSizeGet(player) == 1) { BoardRotateDiceNumbers(player); BoardMGCreate(mg_param); @@ -755,6 +755,32 @@ void BoardSpaceHide(s32 value) } } +static inline void InitGXSpace() +{ + GXColor color = {0xFF, 0xFF, 0xFF, 0xFF}; + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXInvalidateTexAll(); + GXLoadTexObj(&spaceTex, GX_TEXMAP0); + GXSetNumTexGens(1); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, color); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE); + GXSetNumChans(1); + GXSetChanAmbColor(GX_COLOR0A0, color); + GXSetChanMatColor(GX_COLOR0A0, color); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_SPOT); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetCullMode(GX_CULL_BACK); +} + //Some stack allocation issues. code around BoardPlayerGetCurr is incorrect too static void DrawSpaces(ModelData *model, Mtx matrix) { @@ -780,41 +806,19 @@ static void DrawSpaces(ModelData *model, Mtx matrix) GXSetViewport(camera->viewport_x, camera->viewport_y, camera->viewport_w, camera->viewport_h, camera->viewport_near, camera->viewport_far); GXSetScissor(camera->viewport_x, camera->viewport_y, camera->viewport_w, camera->viewport_h); { - GXColor color = { 0xFF, 0xFF, 0xFF, 0xFF }; BoardSpace *space_curr; BoardSpace *space_hilite; PlayerState *player; - PlayerState *player_temp; s16 player_mdl; float y_dist; s32 space_img; u16 space_type; float uv_x, uv_y, uv_size; + InitGXSpace(); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_DIRECT); - GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); - GXInvalidateTexAll(); - GXLoadTexObj(&spaceTex, GX_TEXMAP0); - GXSetNumTexGens(1); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, color); - GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); - GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE); - GXSetNumChans(1); - GXSetChanAmbColor(GX_COLOR0A0, color); - GXSetChanMatColor(GX_COLOR0A0, color); - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); - GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_SPOT); - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); - GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); - GXSetCullMode(GX_CULL_BACK); - player = player_temp = BoardPlayerGetCurr(); + player = BoardPlayerGet(GWSystem.player_curr); BoardPlayerPosGet(GWSystem.player_curr, &player_pos); - player_mdl = BoardModelIDGet(BoardPlayerModelGetCurr()); + player_mdl = BoardModelIDGet(BoardPlayerModelGet(GWSystem.player_curr)); space_curr = &spaceData[0][0]; space_hilite = NULL; GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); diff --git a/src/game/board/star.c b/src/game/board/star.c index ed98fcb8..c761b559 100755 --- a/src/game/board/star.c +++ b/src/game/board/star.c @@ -157,7 +157,7 @@ s16 BoardStarHostMdlGet(void) { return hostMdl; } -void BoardStarExec(s32 arg0, BoardSpace *arg1) { +void BoardStarExec(s32 arg0, s32 arg1) { if (GWBoardGet() == 7 || GWBoardGet() == 8) { return; } From d0025a638b13fabf9b5b83b04394b3c03edc0a10 Mon Sep 17 00:00:00 2001 From: Luke Street Date: Sun, 3 Mar 2024 22:35:05 -0700 Subject: [PATCH 040/106] Update dtk-template --- .flake8 | 4 + configure.py | 5 +- tools/decompctx.py | 107 ++++-- tools/download_tool.py | 45 ++- tools/ninja_syntax.py | 139 +++++--- tools/project.py | 733 +++++++++++++++++++++++++-------------- tools/transform_dep.py | 6 +- tools/upload_progress.py | 15 +- 8 files changed, 679 insertions(+), 375 deletions(-) create mode 100644 .flake8 diff --git a/.flake8 b/.flake8 new file mode 100644 index 00000000..3dd31e6e --- /dev/null +++ b/.flake8 @@ -0,0 +1,4 @@ +[flake8] +# E203: whitespace before ':' +# E501: line too long +extend-ignore = E203,E501 diff --git a/configure.py b/configure.py index 7fd2f1ea..11791df0 100644 --- a/configure.py +++ b/configure.py @@ -117,10 +117,11 @@ if not is_windows(): config.wrapper = args.wrapper # Tool versions +config.binutils_tag = "2.42-1" config.compilers_tag = "20231018" -config.dtk_tag = "v0.6.3" +config.dtk_tag = "v0.7.4" config.sjiswrap_tag = "v1.1.1" -config.wibo_tag = "0.6.3" +config.wibo_tag = "0.6.11" # Project config.config_path = Path("config") / config.version / "config.yml" diff --git a/tools/decompctx.py b/tools/decompctx.py index c42b1828..e86d5ef3 100644 --- a/tools/decompctx.py +++ b/tools/decompctx.py @@ -13,60 +13,74 @@ import argparse import os import re +from typing import List script_dir = os.path.dirname(os.path.realpath(__file__)) root_dir = os.path.abspath(os.path.join(script_dir, "..")) src_dir = os.path.join(root_dir, "src") -include_dir = os.path.join(root_dir, "include") +include_dirs = [ + os.path.join(root_dir, "include"), + # Add additional include directories here +] include_pattern = re.compile(r'^#include\s*[<"](.+?)[>"]$') -guard_pattern = re.compile(r'^#ifndef\s+(.*)$') +guard_pattern = re.compile(r"^#ifndef\s+(.*)$") defines = set() -def import_h_file(in_file: str, r_path: str) -> str: - rel_path = os.path.join(root_dir, r_path, in_file) - inc_path = os.path.join(include_dir, in_file) - if os.path.exists(rel_path): - return import_c_file(rel_path) - elif os.path.exists(inc_path): - return import_c_file(inc_path) - else: - print("Failed to locate", in_file) - exit(1) -def import_c_file(in_file) -> str: +def import_h_file(in_file: str, r_path: str, deps: List[str]) -> str: + rel_path = os.path.join(root_dir, r_path, in_file) + if os.path.exists(rel_path): + return import_c_file(rel_path, deps) + for include_dir in include_dirs: + inc_path = os.path.join(include_dir, in_file) + if os.path.exists(inc_path): + return import_c_file(inc_path, deps) + else: + print("Failed to locate", in_file) + return "" + + +def import_c_file(in_file: str, deps: List[str]) -> str: in_file = os.path.relpath(in_file, root_dir) - out_text = '' + deps.append(in_file) + out_text = "" try: - with open(in_file, encoding="utf-8") as file: - out_text += process_file(in_file, list(file)) + with open(in_file, encoding="utf-8") as file: + out_text += process_file(in_file, list(file), deps) except Exception: - with open(in_file) as file: - out_text += process_file(in_file, list(file)) + with open(in_file) as file: + out_text += process_file(in_file, list(file), deps) return out_text -def process_file(in_file: str, lines) -> str: - out_text = '' + +def process_file(in_file: str, lines: List[str], deps: List[str]) -> str: + out_text = "" for idx, line in enumerate(lines): - guard_match = guard_pattern.match(line.strip()) - if idx == 0: - if guard_match: - if guard_match[1] in defines: - break - defines.add(guard_match[1]) - print("Processing file", in_file) - include_match = include_pattern.match(line.strip()) - if include_match and not include_match[1].endswith(".s"): - out_text += f"/* \"{in_file}\" line {idx} \"{include_match[1]}\" */\n" - out_text += import_h_file(include_match[1], os.path.dirname(in_file)) - out_text += f"/* end \"{include_match[1]}\" */\n" - else: - out_text += line + guard_match = guard_pattern.match(line.strip()) + if idx == 0: + if guard_match: + if guard_match[1] in defines: + break + defines.add(guard_match[1]) + print("Processing file", in_file) + include_match = include_pattern.match(line.strip()) + if include_match and not include_match[1].endswith(".s"): + out_text += f'/* "{in_file}" line {idx} "{include_match[1]}" */\n' + out_text += import_h_file(include_match[1], os.path.dirname(in_file), deps) + out_text += f'/* end "{include_match[1]}" */\n' + else: + out_text += line return out_text + +def sanitize_path(path: str) -> str: + return path.replace("\\", "/").replace(" ", "\\ ") + + def main(): parser = argparse.ArgumentParser( description="""Create a context file which can be used for decomp.me""" @@ -75,13 +89,32 @@ def main(): "c_file", help="""File from which to create context""", ) + parser.add_argument( + "-o", + "--output", + help="""Output file""", + default="ctx.c", + ) + parser.add_argument( + "-d", + "--depfile", + help="""Dependency file""", + ) args = parser.parse_args() - output = import_c_file(args.c_file) + deps = [] + output = import_c_file(args.c_file, deps) - with open(os.path.join(root_dir, "ctx.c"), "w", encoding="utf-8") as f: + with open(os.path.join(root_dir, args.output), "w", encoding="utf-8") as f: f.write(output) + if args.depfile: + with open(os.path.join(root_dir, args.depfile), "w", encoding="utf-8") as f: + f.write(sanitize_path(args.output) + ":") + for dep in deps: + path = sanitize_path(dep) + f.write(f" \\\n\t{path}") + if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/tools/download_tool.py b/tools/download_tool.py index 681c65b5..7b386a4b 100644 --- a/tools/download_tool.py +++ b/tools/download_tool.py @@ -16,14 +16,31 @@ import os import platform import shutil import stat -import sys import urllib.request import zipfile - +from typing import Callable, Dict from pathlib import Path -def dtk_url(tag): +def binutils_url(tag): + uname = platform.uname() + system = uname.system.lower() + arch = uname.machine.lower() + if system == "darwin": + system = "macos" + arch = "universal" + elif arch == "amd64": + arch = "x86_64" + + repo = "https://github.com/encounter/gc-wii-binutils" + return f"{repo}/releases/download/{tag}/{system}-{arch}.zip" + + +def compilers_url(tag: str) -> str: + return f"https://files.decomp.dev/compilers_{tag}.zip" + + +def dtk_url(tag: str) -> str: uname = platform.uname() suffix = "" system = uname.system.lower() @@ -39,28 +56,26 @@ def dtk_url(tag): return f"{repo}/releases/download/{tag}/dtk-{system}-{arch}{suffix}" -def sjiswrap_url(tag): +def sjiswrap_url(tag: str) -> str: repo = "https://github.com/encounter/sjiswrap" return f"{repo}/releases/download/{tag}/sjiswrap-windows-x86.exe" -def wibo_url(tag): +def wibo_url(tag: str) -> str: repo = "https://github.com/decompals/wibo" return f"{repo}/releases/download/{tag}/wibo" -def compilers_url(tag): - return f"https://files.decomp.dev/compilers_{tag}.zip" - -TOOLS = { +TOOLS: Dict[str, Callable[[str], str]] = { + "binutils": binutils_url, + "compilers": compilers_url, "dtk": dtk_url, "sjiswrap": sjiswrap_url, "wibo": wibo_url, - "compilers": compilers_url, } -def main(): +def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("tool", help="Tool name") parser.add_argument("output", type=Path, help="output file path") @@ -77,7 +92,11 @@ def main(): data = io.BytesIO(response.read()) with zipfile.ZipFile(data) as f: f.extractall(output) - output.touch(mode=0o755) + # Make all files executable + for root, _, files in os.walk(output): + for name in files: + os.chmod(os.path.join(root, name), 0o755) + output.touch(mode=0o755) # Update dir modtime else: with open(output, "wb") as f: shutil.copyfileobj(response, f) @@ -86,4 +105,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/tools/ninja_syntax.py b/tools/ninja_syntax.py index ffd88a01..97e71f26 100644 --- a/tools/ninja_syntax.py +++ b/tools/ninja_syntax.py @@ -21,50 +21,66 @@ use Python. import re import textwrap +from io import StringIO +from pathlib import Path +from typing import Dict, List, Match, Optional, Tuple, Union + +NinjaPath = Union[str, Path] +NinjaPaths = Union[ + List[str], + List[Path], + List[NinjaPath], + List[Optional[str]], + List[Optional[Path]], + List[Optional[NinjaPath]], +] +NinjaPathOrPaths = Union[NinjaPath, NinjaPaths] -def escape_path(word): +def escape_path(word: str) -> str: return word.replace("$ ", "$$ ").replace(" ", "$ ").replace(":", "$:") class Writer(object): - def __init__(self, output, width=78): + def __init__(self, output: StringIO, width: int = 78) -> None: self.output = output self.width = width - def newline(self): + def newline(self) -> None: self.output.write("\n") - def comment(self, text): + def comment(self, text: str) -> None: for line in textwrap.wrap( text, self.width - 2, break_long_words=False, break_on_hyphens=False ): self.output.write("# " + line + "\n") - def variable(self, key, value, indent=0): - if value is None: - return - if isinstance(value, list): - value = " ".join(filter(None, value)) # Filter out empty strings. + def variable( + self, + key: str, + value: Optional[NinjaPathOrPaths], + indent: int = 0, + ) -> None: + value = " ".join(serialize_paths(value)) self._line("%s = %s" % (key, value), indent) - def pool(self, name, depth): + def pool(self, name: str, depth: int) -> None: self._line("pool %s" % name) - self.variable("depth", depth, indent=1) + self.variable("depth", str(depth), indent=1) def rule( self, - name, - command, - description=None, - depfile=None, - generator=False, - pool=None, - restat=False, - rspfile=None, - rspfile_content=None, - deps=None, - ): + name: str, + command: str, + description: Optional[str] = None, + depfile: Optional[NinjaPath] = None, + generator: bool = False, + pool: Optional[str] = None, + restat: bool = False, + rspfile: Optional[NinjaPath] = None, + rspfile_content: Optional[NinjaPath] = None, + deps: Optional[NinjaPathOrPaths] = None, + ) -> None: self._line("rule %s" % name) self.variable("command", command, indent=1) if description: @@ -86,32 +102,39 @@ class Writer(object): def build( self, - outputs, - rule, - inputs=None, - implicit=None, - order_only=None, - variables=None, - implicit_outputs=None, - pool=None, - dyndep=None, - ): - outputs = as_list(outputs) + outputs: NinjaPathOrPaths, + rule: str, + inputs: Optional[NinjaPathOrPaths] = None, + implicit: Optional[NinjaPathOrPaths] = None, + order_only: Optional[NinjaPathOrPaths] = None, + variables: Optional[ + Union[ + List[Tuple[str, Optional[NinjaPathOrPaths]]], + Dict[str, Optional[NinjaPathOrPaths]], + ] + ] = None, + implicit_outputs: Optional[NinjaPathOrPaths] = None, + pool: Optional[str] = None, + dyndep: Optional[NinjaPath] = None, + ) -> List[str]: + outputs = serialize_paths(outputs) out_outputs = [escape_path(x) for x in outputs] - all_inputs = [escape_path(x) for x in as_list(inputs)] + all_inputs = [escape_path(x) for x in serialize_paths(inputs)] if implicit: - implicit = [escape_path(x) for x in as_list(implicit)] + implicit = [escape_path(x) for x in serialize_paths(implicit)] all_inputs.append("|") - all_inputs.extend(implicit) + all_inputs.extend(map(str, implicit)) if order_only: - order_only = [escape_path(x) for x in as_list(order_only)] + order_only = [escape_path(x) for x in serialize_paths(order_only)] all_inputs.append("||") - all_inputs.extend(order_only) + all_inputs.extend(map(str, order_only)) if implicit_outputs: - implicit_outputs = [escape_path(x) for x in as_list(implicit_outputs)] + implicit_outputs = [ + escape_path(x) for x in serialize_paths(implicit_outputs) + ] out_outputs.append("|") - out_outputs.extend(implicit_outputs) + out_outputs.extend(map(str, implicit_outputs)) self._line( "build %s: %s" % (" ".join(out_outputs), " ".join([rule] + all_inputs)) @@ -119,7 +142,7 @@ class Writer(object): if pool is not None: self._line(" pool = %s" % pool) if dyndep is not None: - self._line(" dyndep = %s" % dyndep) + self._line(" dyndep = %s" % serialize_path(dyndep)) if variables: if isinstance(variables, dict): @@ -132,16 +155,16 @@ class Writer(object): return outputs - def include(self, path): + def include(self, path: str) -> None: self._line("include %s" % path) - def subninja(self, path): + def subninja(self, path: str) -> None: self._line("subninja %s" % path) - def default(self, paths): - self._line("default %s" % " ".join(as_list(paths))) + def default(self, paths: NinjaPathOrPaths) -> None: + self._line("default %s" % " ".join(serialize_paths(paths))) - def _count_dollars_before_index(self, s, i): + def _count_dollars_before_index(self, s: str, i: int) -> int: """Returns the number of '$' characters right in front of s[i].""" dollar_count = 0 dollar_index = i - 1 @@ -150,7 +173,7 @@ class Writer(object): dollar_index -= 1 return dollar_count - def _line(self, text, indent=0): + def _line(self, text: str, indent: int = 0) -> None: """Write 'text' word-wrapped at self.width characters.""" leading_space = " " * indent while len(leading_space) + len(text) > self.width: @@ -187,19 +210,21 @@ class Writer(object): self.output.write(leading_space + text + "\n") - def close(self): + def close(self) -> None: self.output.close() -def as_list(input): - if input is None: - return [] +def serialize_path(input: Optional[NinjaPath]) -> str: + return str(input).replace("\\", "/") if input else "" + + +def serialize_paths(input: Optional[NinjaPathOrPaths]) -> List[str]: if isinstance(input, list): - return input - return [input] + return [serialize_path(path) for path in input if path] + return [serialize_path(input)] if input else [] -def escape(string): +def escape(string: str) -> str: """Escape a string such that it can be embedded into a Ninja file without further interpretation.""" assert "\n" not in string, "Ninja syntax does not allow newlines" @@ -207,17 +232,17 @@ def escape(string): return string.replace("$", "$$") -def expand(string, vars, local_vars={}): +def expand(string: str, vars: Dict[str, str], local_vars: Dict[str, str] = {}) -> str: """Expand a string containing $vars as Ninja would. Note: doesn't handle the full Ninja variable syntax, but it's enough to make configure.py's use of it work. """ - def exp(m): + def exp(m: Match[str]) -> str: var = m.group(1) if var == "$": return "$" return local_vars.get(var, vars.get(var, "")) - return re.sub(r"\$(\$|\w*)", exp, string) \ No newline at end of file + return re.sub(r"\$(\$|\w*)", exp, string) diff --git a/tools/project.py b/tools/project.py index 0f5ad89b..991b94a9 100644 --- a/tools/project.py +++ b/tools/project.py @@ -12,11 +12,13 @@ import io import json +import math import os import platform import sys - from pathlib import Path +from typing import Any, Dict, List, Optional, Set, Tuple, Union + from . import ninja_syntax if sys.platform == "cygwin": @@ -27,46 +29,85 @@ if sys.platform == "cygwin": ) +class Object: + def __init__(self, completed: bool, name: str, **options: Any) -> None: + self.name = name + self.base_name = Path(name).with_suffix("") + self.completed = completed + self.options: Dict[str, Any] = { + "add_to_all": True, + "asflags": None, + "extra_asflags": None, + "cflags": None, + "extra_cflags": None, + "mw_version": None, + "shift_jis": None, + "source": name, + } + self.options.update(options) + + +PathLike = Union[str, os.PathLike] + + class ProjectConfig: - def __init__(self): + def __init__(self) -> None: # Paths - self.build_dir = Path("build") - self.src_dir = Path("src") - self.tools_dir = Path("tools") + self.build_dir: PathLike = Path("build") # Output build files + self.src_dir: PathLike = Path("src") # C/C++/asm source files + self.tools_dir: PathLike = Path("tools") # Python scripts + self.asm_dir: PathLike = Path( + "asm" + ) # Override incomplete objects (for modding) # Tooling - self.dtk_tag = None # Git tag - self.build_dtk_path = None # If None, download - self.compilers_tag = None # 1 - self.compilers_path = None # If None, download - self.wibo_tag = None # Git tag - self.wrapper = None # If None, download wibo on Linux - self.sjiswrap_tag = None # Git tag - self.sjiswrap_path = None # If None, download + self.binutils_tag: Optional[str] = None # Git tag + self.binutils_path: Optional[PathLike] = None # If None, download + self.dtk_tag: Optional[str] = None # Git tag + self.build_dtk_path: Optional[PathLike] = None # If None, download + self.compilers_tag: Optional[str] = None # 1 + self.compilers_path: Optional[PathLike] = None # If None, download + self.wibo_tag: Optional[str] = None # Git tag + self.wrapper: Optional[PathLike] = None # If None, download wibo on Linux + self.sjiswrap_tag: Optional[str] = None # Git tag + self.sjiswrap_path: Optional[PathLike] = None # If None, download # Project config - self.build_rels = True # Build REL files - self.check_sha_path = None # Path to version.sha1 - self.config_path = None # Path to config.yml - self.debug = False # Build with debug info - self.generate_map = False # Generate map file(s) - self.ldflags = None # Linker flags - self.libs = None # List of libraries - self.linker_version = None # mwld version - self.version = None # Version name - self.warn_missing_config = False # Warn on missing unit configuration - self.warn_missing_source = False # Warn on missing source file - self.rel_strip_partial = True # Generate PLFs with -strip_partial - self.rel_empty_file = None # Path to empty.c for generating empty RELs + self.build_rels: bool = True # Build REL files + self.check_sha_path: Optional[PathLike] = None # Path to version.sha1 + self.config_path: Optional[PathLike] = None # Path to config.yml + self.debug: bool = False # Build with debug info + self.generate_map: bool = False # Generate map file(s) + self.asflags: Optional[List[str]] = None # Assembler flags + self.ldflags: Optional[List[str]] = None # Linker flags + self.libs: Optional[List[Dict[str, Any]]] = None # List of libraries + self.linker_version: Optional[str] = None # mwld version + self.version: Optional[str] = None # Version name + self.warn_missing_config: bool = False # Warn on missing unit configuration + self.warn_missing_source: bool = False # Warn on missing source file + self.rel_strip_partial: bool = True # Generate PLFs with -strip_partial + self.rel_empty_file: Optional[PathLike] = ( + None # Path to empty.c for generating empty RELs + ) + self.shift_jis = ( + True # Convert source files from UTF-8 to Shift JIS automatically + ) # Progress output and progress.json config - self.progress_all = True # Include combined "all" category - self.progress_modules = True # Include combined "modules" category - self.progress_each_module = ( + self.progress_all: bool = True # Include combined "all" category + self.progress_modules: bool = True # Include combined "modules" category + self.progress_each_module: bool = ( True # Include individual modules, disable for large numbers of modules ) - def validate(self): + # Progress fancy printing + self.progress_use_fancy: bool = False + self.progress_code_fancy_frac: int = 0 + self.progress_code_fancy_item: str = "" + self.progress_data_fancy_frac: int = 0 + self.progress_data_fancy_item: str = "" + + def validate(self) -> None: required_attrs = [ "build_dir", "src_dir", @@ -82,33 +123,18 @@ class ProjectConfig: if getattr(self, attr) is None: sys.exit(f"ProjectConfig.{attr} missing") - def find_object(self, name): - for lib in self.libs: + def find_object(self, name: str) -> Optional[Tuple[Dict[str, Any], Object]]: + for lib in self.libs or {}: for obj in lib["objects"]: if obj.name == name: - return [lib, obj] + return lib, obj return None - def out_path(self): - return self.build_dir / self.version + def out_path(self) -> Path: + return self.build_dir / str(self.version) -class Object: - def __init__(self, completed, name, **options): - self.name = name - self.completed = completed - self.options = { - "add_to_all": True, - "cflags": None, - "extra_cflags": None, - "mw_version": None, - "shiftjis": True, - "source": name, - } - self.options.update(options) - - -def is_windows(): +def is_windows() -> bool: return os.name == "nt" @@ -118,36 +144,25 @@ CHAIN = "cmd /c " if is_windows() else "" EXE = ".exe" if is_windows() else "" -# Replace forward slashes with backslashes on Windows -def os_str(value): - return str(value).replace("/", os.sep) - - -# Replace backslashes with forward slashes on Windows -def unix_str(value): - return str(value).replace(os.sep, "/") - - -# Stringify paths for ninja_syntax -def path(value): - if value is None: - return None - elif isinstance(value, list): - return list(map(os_str, filter(lambda x: x is not None, value))) +def make_flags_str(cflags: Union[str, List[str]]) -> str: + if isinstance(cflags, list): + return " ".join(cflags) else: - return [os_str(value)] + return cflags # Load decomp-toolkit generated config.json -def load_build_config(config, build_config_path): +def load_build_config( + config: ProjectConfig, build_config_path: Path +) -> Optional[Dict[str, Any]]: if not build_config_path.is_file(): return None - def versiontuple(v): + def versiontuple(v: str) -> Tuple[int, ...]: return tuple(map(int, (v.split(".")))) f = open(build_config_path, "r", encoding="utf-8") - build_config = json.load(f) + build_config: Dict[str, Any] = json.load(f) config_version = build_config.get("version") if not config_version: # Invalid config.json @@ -155,7 +170,7 @@ def load_build_config(config, build_config_path): os.remove(build_config_path) return None - dtk_version = config.dtk_tag[1:] # Strip v + dtk_version = str(config.dtk_tag)[1:] # Strip v if versiontuple(config_version) < versiontuple(dtk_version): # Outdated config.json f.close() @@ -167,14 +182,16 @@ def load_build_config(config, build_config_path): # Generate build.ninja and objdiff.json -def generate_build(config): +def generate_build(config: ProjectConfig) -> None: build_config = load_build_config(config, config.out_path() / "config.json") generate_build_ninja(config, build_config) generate_objdiff_config(config, build_config) # Generate build.ninja -def generate_build_ninja(config, build_config): +def generate_build_ninja( + config: ProjectConfig, build_config: Optional[Dict[str, Any]] +) -> None: config.validate() out = io.StringIO() @@ -182,9 +199,9 @@ def generate_build_ninja(config, build_config): n.variable("ninja_required_version", "1.3") n.newline() - configure_script = os.path.relpath(os.path.abspath(sys.argv[0])) - python_lib = os.path.relpath(__file__) - python_lib_dir = os.path.dirname(python_lib) + configure_script = Path(os.path.relpath(os.path.abspath(sys.argv[0]))) + python_lib = Path(os.path.relpath(__file__)) + python_lib_dir = python_lib.parent n.comment("The arguments passed to configure.py, for rerunning it.") n.variable("configure_args", sys.argv[1:]) n.variable("python", f'"{sys.executable}"') @@ -194,7 +211,7 @@ def generate_build_ninja(config, build_config): # Variables ### n.comment("Variables") - ldflags = " ".join(config.ldflags) + ldflags = " ".join(config.ldflags or []) if config.generate_map: ldflags += " -mapunused" if config.debug: @@ -209,6 +226,7 @@ def generate_build_ninja(config, build_config): n.comment("Tooling") build_path = config.out_path() + progress_path = build_path / "progress.json" build_tools_path = config.build_dir / "tools" download_tool = config.tools_dir / "download_tool.py" n.rule( @@ -217,20 +235,29 @@ def generate_build_ninja(config, build_config): description="TOOL $out", ) + decompctx = config.tools_dir / "decompctx.py" + n.rule( + name="decompctx", + command=f"$python {decompctx} $in -o $out -d $out.d", + description="CTX $in", + depfile="$out.d", + deps="gcc", + ) + if config.build_dtk_path: dtk = build_tools_path / "release" / f"dtk{EXE}" n.rule( name="cargo", command="cargo build --release --manifest-path $in --bin $bin --target-dir $target", description="CARGO $bin", - depfile=path(Path("$target") / "release" / "$bin.d"), + depfile=Path("$target") / "release" / "$bin.d", deps="gcc", ) n.build( - outputs=path(dtk), + outputs=dtk, rule="cargo", - inputs=path(config.build_dtk_path / "Cargo.toml"), - implicit=path(config.build_dtk_path / "Cargo.lock"), + inputs=config.build_dtk_path / "Cargo.toml", + implicit=config.build_dtk_path / "Cargo.lock", variables={ "bin": "dtk", "target": build_tools_path, @@ -239,9 +266,9 @@ def generate_build_ninja(config, build_config): elif config.dtk_tag: dtk = build_tools_path / f"dtk{EXE}" n.build( - outputs=path(dtk), + outputs=dtk, rule="download_tool", - implicit=path(download_tool), + implicit=download_tool, variables={ "tool": "dtk", "tag": config.dtk_tag, @@ -255,9 +282,9 @@ def generate_build_ninja(config, build_config): elif config.sjiswrap_tag: sjiswrap = build_tools_path / "sjiswrap.exe" n.build( - outputs=path(sjiswrap), + outputs=sjiswrap, rule="download_tool", - implicit=path(download_tool), + implicit=download_tool, variables={ "tool": "sjiswrap", "tag": config.sjiswrap_tag, @@ -268,7 +295,7 @@ def generate_build_ninja(config, build_config): # Only add an implicit dependency on wibo if we download it wrapper = config.wrapper - wrapper_implicit = None + wrapper_implicit: Optional[Path] = None if ( config.wibo_tag is not None and sys.platform == "linux" @@ -278,33 +305,53 @@ def generate_build_ninja(config, build_config): wrapper = build_tools_path / "wibo" wrapper_implicit = wrapper n.build( - outputs=path(wrapper), + outputs=wrapper, rule="download_tool", - implicit=path(download_tool), + implicit=download_tool, variables={ "tool": "wibo", "tag": config.wibo_tag, }, ) if not is_windows() and wrapper is None: - wrapper = "wine" + wrapper = Path("wine") wrapper_cmd = f"{wrapper} " if wrapper else "" - compilers_implicit = None + compilers_implicit: Optional[Path] = None if config.compilers_path: compilers = config.compilers_path elif config.compilers_tag: compilers = config.build_dir / "compilers" compilers_implicit = compilers n.build( - outputs=path(compilers), + outputs=compilers, rule="download_tool", - implicit=path(download_tool), + implicit=download_tool, variables={ "tool": "compilers", "tag": config.compilers_tag, }, ) + else: + sys.exit("ProjectConfig.compilers_tag missing") + + binutils_implicit = None + if config.binutils_path: + binutils = config.binutils_path + elif config.binutils_tag: + binutils = config.build_dir / "binutils" + binutils_implicit = binutils + n.build( + outputs=binutils, + rule="download_tool", + implicit=download_tool, + variables={ + "tool": "binutils", + "tag": config.binutils_tag, + }, + ) + else: + sys.exit("ProjectConfig.binutils_tag missing") n.newline() @@ -316,16 +363,24 @@ def generate_build_ninja(config, build_config): # MWCC mwcc = compiler_path / "mwcceppc.exe" mwcc_cmd = f"{wrapper_cmd}{mwcc} $cflags -MMD -c $in -o $basedir" - mwcc_implicit = [compilers_implicit or mwcc, wrapper_implicit] + mwcc_implicit: List[Optional[Path]] = [compilers_implicit or mwcc, wrapper_implicit] # MWCC with UTF-8 to Shift JIS wrapper mwcc_sjis_cmd = f"{wrapper_cmd}{sjiswrap} {mwcc} $cflags -MMD -c $in -o $basedir" - mwcc_sjis_implicit = [*mwcc_implicit, sjiswrap] + mwcc_sjis_implicit: List[Optional[Path]] = [*mwcc_implicit, sjiswrap] # MWLD mwld = compiler_path / "mwldeppc.exe" mwld_cmd = f"{wrapper_cmd}{mwld} $ldflags -o $out @$out.rsp" - mwld_implicit = [compilers_implicit or mwld, wrapper_implicit] + mwld_implicit: List[Optional[Path]] = [compilers_implicit or mwld, wrapper_implicit] + + # GNU as + gnu_as = binutils / f"powerpc-eabi-as{EXE}" + gnu_as_cmd = ( + f"{CHAIN}{gnu_as} $asflags -o $out $in -MD $out.d" + + f" && {dtk} elf fixup $out $out" + ) + gnu_as_implicit = [binutils_implicit or gnu_as, dtk] if os.name != "nt": transform_dep = config.tools_dir / "transform_dep.py" @@ -372,6 +427,16 @@ def generate_build_ninja(config, build_config): ) n.newline() + n.comment("Assemble asm") + n.rule( + name="as", + command=gnu_as_cmd, + description="AS $out", + depfile="$out.d", + deps="gcc", + ) + n.newline() + n.comment("Host build") n.variable("host_cflags", "-I include -Wno-trigraphs") n.variable( @@ -394,37 +459,38 @@ def generate_build_ninja(config, build_config): # Source files ### n.comment("Source files") + build_asm_path = build_path / "mod" build_src_path = build_path / "src" build_host_path = build_path / "host" build_config_path = build_path / "config.json" - def map_path(path): + def map_path(path: Path) -> Path: return path.parent / (path.name + ".MAP") class LinkStep: - def __init__(self, config): - self.name = config["name"] - self.module_id = config["module_id"] - self.ldscript = config["ldscript"] + def __init__(self, config: Dict[str, Any]) -> None: + self.name: str = config["name"] + self.module_id: int = config["module_id"] + self.ldscript: Optional[Path] = config["ldscript"] self.entry = config["entry"] - self.inputs = [] + self.inputs: List[str] = [] - def add(self, obj): - self.inputs.append(obj) + def add(self, obj: os.PathLike) -> None: + self.inputs.append(str(obj)) - def output(self): + def output(self) -> Path: if self.module_id == 0: return build_path / f"{self.name}.dol" else: return build_path / self.name / f"{self.name}.rel" - def partial_output(self): + def partial_output(self) -> Path: if self.module_id == 0: return build_path / f"{self.name}.elf" else: return build_path / self.name / f"{self.name}.plf" - def write(self, n): + def write(self, n: ninja_syntax.Writer) -> None: n.comment(f"Link {self.name}") if self.module_id == 0: elf_path = build_path / f"{self.name}.elf" @@ -436,23 +502,23 @@ def generate_build_ninja(config, build_config): else: elf_map = None n.build( - outputs=path(elf_path), + outputs=elf_path, rule="link", - inputs=path(self.inputs), - implicit=path([self.ldscript, *mwld_implicit]), - implicit_outputs=path(elf_map), + inputs=self.inputs, + implicit=[self.ldscript, *mwld_implicit], + implicit_outputs=elf_map, variables={"ldflags": elf_ldflags}, ) n.build( - outputs=path(dol_path), + outputs=dol_path, rule="elf2dol", - inputs=path(elf_path), - implicit=path(dtk), + inputs=elf_path, + implicit=dtk, ) else: preplf_path = build_path / self.name / f"{self.name}.preplf" plf_path = build_path / self.name / f"{self.name}.plf" - preplf_ldflags = f"$ldflags -sdata 0 -sdata2 0 -r" + preplf_ldflags = "$ldflags -sdata 0 -sdata2 0 -r" plf_ldflags = f"$ldflags -sdata 0 -sdata2 0 -r1 -lcf {self.ldscript}" if self.entry: plf_ldflags += f" -m {self.entry}" @@ -468,37 +534,133 @@ def generate_build_ninja(config, build_config): preplf_map = None plf_map = None n.build( - outputs=path(preplf_path), + outputs=preplf_path, rule="link", - inputs=path(self.inputs), - implicit=path(mwld_implicit), - implicit_outputs=path(preplf_map), + inputs=self.inputs, + implicit=mwld_implicit, + implicit_outputs=preplf_map, variables={"ldflags": preplf_ldflags}, ) n.build( - outputs=path(plf_path), + outputs=plf_path, rule="link", - inputs=path(self.inputs), - implicit=path([self.ldscript, preplf_path, *mwld_implicit]), - implicit_outputs=path(plf_map), + inputs=self.inputs, + implicit=[self.ldscript, preplf_path, *mwld_implicit], + implicit_outputs=plf_map, variables={"ldflags": plf_ldflags}, ) n.newline() if build_config: - link_steps = [] - used_compiler_versions = set() - source_inputs = [] - host_source_inputs = [] - source_added = set() + link_steps: List[LinkStep] = [] + used_compiler_versions: Set[str] = set() + source_inputs: List[Path] = [] + host_source_inputs: List[Path] = [] + source_added: Set[Path] = set() - def make_cflags_str(cflags): - if isinstance(cflags, list): - return " ".join(cflags) - else: - return cflags + def c_build( + obj: Object, options: Dict[str, Any], lib_name: str, src_path: Path + ) -> Optional[Path]: - def add_unit(build_obj, link_step): + cflags_str = make_flags_str(options["cflags"]) + if options["extra_cflags"] is not None: + extra_cflags_str = make_flags_str(options["extra_cflags"]) + cflags_str += " " + extra_cflags_str + used_compiler_versions.add(options["mw_version"]) + + src_obj_path = build_src_path / f"{obj.base_name}.o" + src_base_path = build_src_path / obj.base_name + + # Avoid creating duplicate build rules + if src_obj_path in source_added: + return src_obj_path + source_added.add(src_obj_path) + + shift_jis = options["shift_jis"] + if shift_jis is None: + shift_jis = config.shift_jis + + # Add MWCC build rule + n.comment(f"{obj.name}: {lib_name} (linked {obj.completed})") + n.build( + outputs=src_obj_path, + rule="mwcc_sjis" if shift_jis else "mwcc", + inputs=src_path, + variables={ + "mw_version": Path(options["mw_version"]), + "cflags": cflags_str, + "basedir": os.path.dirname(src_base_path), + "basefile": src_base_path, + }, + implicit=mwcc_sjis_implicit if shift_jis else mwcc_implicit, + ) + + # Add ctx build rule + ctx_path = build_src_path / f"{obj.base_name}.ctx" + n.build( + outputs=ctx_path, + rule="decompctx", + inputs=src_path, + implicit=decompctx, + ) + + # Add host build rule + if options.get("host", False): + host_obj_path = build_host_path / f"{obj.base_name}.o" + host_base_path = build_host_path / obj.base_name + n.build( + outputs=host_obj_path, + rule="host_cc" if src_path.suffix == ".c" else "host_cpp", + inputs=src_path, + variables={ + "basedir": os.path.dirname(host_base_path), + "basefile": host_base_path, + }, + ) + if options["add_to_all"]: + host_source_inputs.append(host_obj_path) + n.newline() + + if options["add_to_all"]: + source_inputs.append(src_obj_path) + + return src_obj_path + + def asm_build( + obj: Object, options: Dict[str, Any], lib_name: str, src_path: Path + ) -> Optional[Path]: + asflags = options["asflags"] or config.asflags + if asflags is None: + sys.exit("ProjectConfig.asflags missing") + asflags_str = make_flags_str(asflags) + if options["extra_asflags"] is not None: + extra_asflags_str = make_flags_str(options["extra_asflags"]) + asflags_str += " " + extra_asflags_str + + asm_obj_path = build_asm_path / f"{obj.base_name}.o" + + # Avoid creating duplicate build rules + if asm_obj_path in source_added: + return asm_obj_path + source_added.add(asm_obj_path) + + # Add assembler build rule + n.comment(f"{obj.name}: {lib_name} (linked {obj.completed})") + n.build( + outputs=asm_obj_path, + rule="as", + inputs=src_path, + variables={"asflags": asflags_str}, + implicit=gnu_as_implicit, + ) + n.newline() + + if options["add_to_all"]: + source_inputs.append(asm_obj_path) + + return asm_obj_path + + def add_unit(build_obj, link_step: LinkStep): obj_path, obj_name = build_obj["object"], build_obj["name"] result = config.find_object(obj_name) if not result: @@ -509,70 +671,47 @@ def generate_build_ninja(config, build_config): lib, obj = result lib_name = lib["lib"] - src_dir = Path(lib.get("src_dir", config.src_dir)) - options = obj.options - completed = obj.completed + # Use object options, then library options + options = lib.copy() + for key, value in obj.options.items(): + if value is not None or key not in options: + options[key] = value - unit_src_path = src_dir / options["source"] - if not unit_src_path.exists(): - if config.warn_missing_source or completed: + unit_src_path = Path(lib.get("src_dir", config.src_dir)) / options["source"] + if config.asm_dir is not None: + unit_asm_path = ( + Path(lib.get("asm_dir", config.asm_dir)) / options["source"] + ).with_suffix(".s") + + link_built_obj = obj.completed + if unit_src_path.exists(): + if unit_src_path.suffix in (".c", ".cp", ".cpp"): + # Add MWCC & host build rules + built_obj_path = c_build(obj, options, lib_name, unit_src_path) + elif unit_src_path.suffix == ".s": + # Add assembler build rule + built_obj_path = asm_build(obj, options, lib_name, unit_src_path) + else: + sys.exit(f"Unknown source file type {unit_src_path}") + else: + if config.warn_missing_source or obj.completed: print(f"Missing source file {unit_src_path}") + link_built_obj = False + + # Assembly overrides + if unit_asm_path is not None and unit_asm_path.exists(): + link_built_obj = True + built_obj_path = asm_build(obj, options, lib_name, unit_asm_path) + + if link_built_obj and built_obj_path is not None: + # Use the source-built object + link_step.add(built_obj_path) + elif obj_path is not None: + # Use the original (extracted) object link_step.add(obj_path) - return - - mw_version = options["mw_version"] or lib["mw_version"] - cflags_str = make_cflags_str(options["cflags"] or lib["cflags"]) - if options["extra_cflags"] is not None: - extra_cflags_str = make_cflags_str(options["extra_cflags"]) - cflags_str += " " + extra_cflags_str - used_compiler_versions.add(mw_version) - - base_object = Path(obj.name).with_suffix("") - src_obj_path = build_src_path / f"{base_object}.o" - src_base_path = build_src_path / base_object - - if src_obj_path not in source_added: - source_added.add(src_obj_path) - - n.comment(f"{obj_name}: {lib_name} (linked {completed})") - n.build( - outputs=path(src_obj_path), - rule="mwcc_sjis" if options["shiftjis"] else "mwcc", - inputs=path(unit_src_path), - variables={ - "mw_version": path(Path(mw_version)), - "cflags": cflags_str, - "basedir": os.path.dirname(src_base_path), - "basefile": path(src_base_path), - }, - implicit=path( - mwcc_sjis_implicit if options["shiftjis"] else mwcc_implicit - ), - ) - - if lib["host"]: - host_obj_path = build_host_path / f"{base_object}.o" - host_base_path = build_host_path / base_object - n.build( - outputs=path(host_obj_path), - rule="host_cc" if unit_src_path.suffix == ".c" else "host_cpp", - inputs=path(unit_src_path), - variables={ - "basedir": os.path.dirname(host_base_path), - "basefile": path(host_base_path), - }, - ) - if options["add_to_all"]: - host_source_inputs.append(host_obj_path) - n.newline() - - if options["add_to_all"]: - source_inputs.append(src_obj_path) - - if completed: - obj_path = src_obj_path - link_step.add(obj_path) + else: + sys.exit(f"Missing object for {obj_name}: {unit_src_path} {lib} {obj}") # Add DOL link step link_step = LinkStep(build_config) @@ -608,7 +747,7 @@ def generate_build_ninja(config, build_config): sys.exit(f"Compiler {mw_path} does not exist") # Check if linker exists - mw_path = compilers / config.linker_version / "mwldeppc.exe" + mw_path = compilers / str(config.linker_version) / "mwldeppc.exe" if config.compilers_path and not os.path.exists(mw_path): sys.exit(f"Linker {mw_path} does not exist") @@ -648,7 +787,7 @@ def generate_build_ninja(config, build_config): rels_to_generate = list( filter( lambda step: step.module_id != 0 - and not step.name in generated_rels, + and step.name not in generated_rels, link_steps_local, ) ) @@ -669,15 +808,13 @@ def generate_build_ninja(config, build_config): ) rel_names_arg = " ".join(map(lambda name: f"-n {name}", rel_names)) n.build( - outputs=path(rel_outputs), + outputs=rel_outputs, rule="makerel", - inputs=path( - list(map(lambda step: step.partial_output(), link_steps_local)) - ), - implicit=path([dtk, config.config_path]), + inputs=list(map(lambda step: step.partial_output(), link_steps_local)), + implicit=[dtk, config.config_path], variables={ - "config": path(config.config_path), - "rspfile": path(config.out_path() / f"rel{idx}.rsp"), + "config": config.config_path, + "rspfile": config.out_path() / f"rel{idx}.rsp", "names": rel_names_arg, }, ) @@ -690,7 +827,7 @@ def generate_build_ninja(config, build_config): n.build( outputs="all_source", rule="phony", - inputs=path(source_inputs), + inputs=source_inputs, ) n.newline() @@ -701,7 +838,7 @@ def generate_build_ninja(config, build_config): n.build( outputs="all_source_host", rule="phony", - inputs=path(host_source_inputs), + inputs=host_source_inputs, ) n.newline() @@ -717,10 +854,10 @@ def generate_build_ninja(config, build_config): description="CHECK $in", ) n.build( - outputs=path(ok_path), + outputs=ok_path, rule="check", - inputs=path(config.check_sha_path), - implicit=path([dtk, *map(lambda step: step.output(), link_steps)]), + inputs=config.check_sha_path, + implicit=[dtk, *map(lambda step: step.output(), link_steps)], ) n.newline() @@ -728,16 +865,15 @@ def generate_build_ninja(config, build_config): # Calculate progress ### n.comment("Calculate progress") - progress_path = build_path / "progress.json" n.rule( name="progress", command=f"$python {configure_script} $configure_args progress", description="PROGRESS", ) n.build( - outputs=path(progress_path), + outputs=progress_path, rule="progress", - implicit=path([ok_path, configure_script, python_lib, config.config_path]), + implicit=[ok_path, configure_script, python_lib, config.config_path], ) ### @@ -753,7 +889,7 @@ def generate_build_ninja(config, build_config): description=f"DIFF {dol_elf_path}", ) n.build( - inputs=path([config.config_path, dol_elf_path]), + inputs=[config.config_path, dol_elf_path], outputs="dol_diff", rule="dol_diff", ) @@ -771,10 +907,10 @@ def generate_build_ninja(config, build_config): description=f"APPLY {dol_elf_path}", ) n.build( - inputs=path([config.config_path, dol_elf_path]), + inputs=[config.config_path, dol_elf_path], outputs="dol_apply", rule="dol_apply", - implicit=path([ok_path]), + implicit=[ok_path], ) n.build( outputs="apply", @@ -795,11 +931,11 @@ def generate_build_ninja(config, build_config): deps="gcc", ) n.build( - inputs=path(config.config_path), - outputs=path(build_config_path), + inputs=config.config_path, + outputs=build_config_path, rule="split", - implicit=path(dtk), - variables={"out_dir": path(build_path)}, + implicit=dtk, + variables={"out_dir": build_path}, ) n.newline() @@ -816,14 +952,12 @@ def generate_build_ninja(config, build_config): n.build( outputs="build.ninja", rule="configure", - implicit=path( - [ - build_config_path, - configure_script, - python_lib, - Path(python_lib_dir) / "ninja_syntax.py", - ] - ), + implicit=[ + build_config_path, + configure_script, + python_lib, + python_lib_dir / "ninja_syntax.py", + ], ) n.newline() @@ -832,9 +966,9 @@ def generate_build_ninja(config, build_config): ### n.comment("Default rule") if build_config: - n.default(path(progress_path)) + n.default(progress_path) else: - n.default(path(build_config_path)) + n.default(build_config_path) # Write build.ninja with open("build.ninja", "w", encoding="utf-8") as f: @@ -843,12 +977,14 @@ def generate_build_ninja(config, build_config): # Generate objdiff.json -def generate_objdiff_config(config, build_config): +def generate_objdiff_config( + config: ProjectConfig, build_config: Optional[Dict[str, Any]] +) -> None: if not build_config: return - objdiff_config = { - "min_version": "0.4.3", + objdiff_config: Dict[str, Any] = { + "min_version": "1.0.0", "custom_make": "ninja", "build_target": False, "watch_patterns": [ @@ -866,18 +1002,50 @@ def generate_objdiff_config(config, build_config): "units": [], } + # decomp.me compiler name mapping + # Commented out versions have not been added to decomp.me yet + COMPILER_MAP = { + "GC/1.0": "mwcc_233_144", + "GC/1.1": "mwcc_233_159", + "GC/1.2.5": "mwcc_233_163", + "GC/1.2.5e": "mwcc_233_163e", + "GC/1.2.5n": "mwcc_233_163n", + "GC/1.3.2": "mwcc_242_81", + "GC/1.3.2r": "mwcc_242_81r", + "GC/2.0": "mwcc_247_92", + "GC/2.5": "mwcc_247_105", + "GC/2.6": "mwcc_247_107", + "GC/2.7": "mwcc_247_108", + "GC/3.0": "mwcc_41_60831", + # "GC/3.0a3": "mwcc_41_51213", + "GC/3.0a3.2": "mwcc_41_60126", + # "GC/3.0a3.3": "mwcc_41_60209", + # "GC/3.0a3.4": "mwcc_42_60308", + # "GC/3.0a5": "mwcc_42_60422", + "GC/3.0a5.2": "mwcc_41_60831", + "Wii/0x4201_127": "mwcc_42_142", + # "Wii/1.0": "mwcc_43_145", + # "Wii/1.0RC1": "mwcc_42_140", + "Wii/1.0a": "mwcc_42_142", + "Wii/1.1": "mwcc_43_151", + "Wii/1.3": "mwcc_43_172", + # "Wii/1.5": "mwcc_43_188", + "Wii/1.6": "mwcc_43_202", + "Wii/1.7": "mwcc_43_213", + } + build_path = config.out_path() - def add_unit(build_obj, module_name): + def add_unit(build_obj: Dict[str, Any], module_name: str) -> None: if build_obj["autogenerated"]: # Skip autogenerated objects return obj_path, obj_name = build_obj["object"], build_obj["name"] base_object = Path(obj_name).with_suffix("") - unit_config = { - "name": unix_str(Path(module_name) / base_object), - "target_path": unix_str(obj_path), + unit_config: Dict[str, Any] = { + "name": Path(module_name) / base_object, + "target_path": obj_path, } result = config.find_object(obj_name) @@ -888,13 +1056,21 @@ def generate_objdiff_config(config, build_config): lib, obj = result src_dir = Path(lib.get("src_dir", config.src_dir)) - unit_src_path = src_dir / obj.options["source"] + # Use object options, then library options + options = lib.copy() + for key, value in obj.options.items(): + if value is not None or key not in options: + options[key] = value + + unit_src_path = src_dir / str(options["source"]) + if not unit_src_path.exists(): objdiff_config["units"].append(unit_config) return - cflags = obj.options["cflags"] or lib["cflags"] - src_obj_path = build_path / "src" / f"{base_object}.o" + cflags = options["cflags"] + src_obj_path = build_path / "src" / f"{obj.base_name}.o" + src_ctx_path = build_path / "src" / f"{obj.base_name}.ctx" reverse_fn_order = False if type(cflags) is list: @@ -907,9 +1083,32 @@ def generate_objdiff_config(config, build_config): elif value == "nodeferred": reverse_fn_order = False - unit_config["base_path"] = unix_str(src_obj_path) + # Filter out include directories + def keep_flag(flag): + return not flag.startswith("-i ") and not flag.startswith("-I ") + + cflags = list(filter(keep_flag, cflags)) + + # Add appropriate lang flag + if unit_src_path.suffix in (".cp", ".cpp"): + cflags.insert(0, "-lang=c++") + else: + cflags.insert(0, "-lang=c") + + unit_config["base_path"] = src_obj_path unit_config["reverse_fn_order"] = reverse_fn_order unit_config["complete"] = obj.completed + compiler_version = COMPILER_MAP.get(options["mw_version"]) + if compiler_version is None: + print(f"Missing scratch compiler mapping for {options['mw_version']}") + else: + unit_config["scratch"] = { + "platform": "gc_wii", + "compiler": compiler_version, + "c_flags": make_flags_str(cflags), + "ctx_path": src_ctx_path, + "build_ctx": True, + } objdiff_config["units"].append(unit_config) # Add DOL units @@ -923,28 +1122,34 @@ def generate_objdiff_config(config, build_config): # Write objdiff.json with open("objdiff.json", "w", encoding="utf-8") as w: - json.dump(objdiff_config, w, indent=4) + from .ninja_syntax import serialize_path + + json.dump(objdiff_config, w, indent=4, default=serialize_path) # Calculate, print and write progress to progress.json -def calculate_progress(config): +def calculate_progress(config: ProjectConfig) -> None: out_path = config.out_path() build_config = load_build_config(config, out_path / "config.json") if not build_config: return class ProgressUnit: - def __init__(self, name): - self.name = name - self.code_total = 0 - self.code_progress = 0 - self.data_total = 0 - self.data_progress = 0 - self.objects_progress = 0 - self.objects_total = 0 - self.objects = set() + def __init__(self, name: str) -> None: + self.name: str = name + self.code_total: int = 0 + self.code_fancy_frac: int = config.progress_code_fancy_frac + self.code_fancy_item: str = config.progress_code_fancy_item + self.code_progress: int = 0 + self.data_total: int = 0 + self.data_fancy_frac: int = config.progress_data_fancy_frac + self.data_fancy_item: str = config.progress_data_fancy_item + self.data_progress: int = 0 + self.objects_progress: int = 0 + self.objects_total: int = 0 + self.objects: Set[Object] = set() - def add(self, build_obj): + def add(self, build_obj: Dict[str, Any]) -> None: self.code_total += build_obj["code_size"] self.data_total += build_obj["data_size"] @@ -971,10 +1176,10 @@ def calculate_progress(config): if include_object: self.objects_progress += 1 - def code_frac(self): + def code_frac(self) -> float: return self.code_progress / self.code_total - def data_frac(self): + def data_frac(self) -> float: return self.data_progress / self.data_total # Add DOL units @@ -987,7 +1192,7 @@ def calculate_progress(config): # Add REL units rels_progress = ProgressUnit("Modules") if config.progress_modules else None - modules_progress = [] + modules_progress: List[ProgressUnit] = [] for module in build_config["modules"]: progress = ProgressUnit(module["name"]) modules_progress.append(progress) @@ -1001,7 +1206,10 @@ def calculate_progress(config): # Print human-readable progress print("Progress:") - def print_category(unit): + def print_category(unit: Optional[ProgressUnit]) -> None: + if unit is None: + return + code_frac = unit.code_frac() data_frac = unit.data_frac() print( @@ -1009,6 +1217,17 @@ def calculate_progress(config): ) print(f" Code: {unit.code_progress} / {unit.code_total} bytes") print(f" Data: {unit.data_progress} / {unit.data_total} bytes") + if config.progress_use_fancy: + print( + "\nYou have {} out of {} {} and collected {} out of {} {}.".format( + math.floor(code_frac * unit.code_fancy_frac), + unit.code_fancy_frac, + unit.code_fancy_item, + math.floor(data_frac * unit.data_fancy_frac), + unit.data_fancy_frac, + unit.data_fancy_item, + ) + ) if all_progress: print_category(all_progress) @@ -1021,9 +1240,9 @@ def calculate_progress(config): print_category(progress) # Generate and write progress.json - progress_json = {} + progress_json: Dict[str, Any] = {} - def add_category(category, unit): + def add_category(category: str, unit: ProgressUnit) -> None: progress_json[category] = { "code": unit.code_progress, "code/total": unit.code_total, diff --git a/tools/transform_dep.py b/tools/transform_dep.py index 86bd2ecb..124de04b 100644 --- a/tools/transform_dep.py +++ b/tools/transform_dep.py @@ -25,7 +25,7 @@ def in_wsl() -> bool: return "microsoft-standard" in uname().release -def import_d_file(in_file) -> str: +def import_d_file(in_file: str) -> str: out_text = "" with open(in_file) as file: @@ -60,7 +60,7 @@ def import_d_file(in_file) -> str: return out_text -def main(): +def main() -> None: parser = argparse.ArgumentParser( description="""Transform a .d file from Wine paths to normal paths""" ) @@ -81,4 +81,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/tools/upload_progress.py b/tools/upload_progress.py index 673bb3d5..dc61d156 100644 --- a/tools/upload_progress.py +++ b/tools/upload_progress.py @@ -51,7 +51,7 @@ if __name__ == "__main__": args = parser.parse_args() api_key = args.api_key or os.environ.get("PROGRESS_API_KEY") if not api_key: - raise "API key required" + raise KeyError("API key required") url = generate_url(args) entries = [] @@ -68,9 +68,12 @@ if __name__ == "__main__": print("Publishing entry to", url) json.dump(entries[0], sys.stdout, indent=4) print() - r = requests.post(url, json={ - "api_key": api_key, - "entries": entries, - }) + r = requests.post( + url, + json={ + "api_key": api_key, + "entries": entries, + }, + ) r.raise_for_status() - print("Done!") \ No newline at end of file + print("Done!") From 8950d9c77dafe25b30727e5bb8c3eb8a4386709b Mon Sep 17 00:00:00 2001 From: Luke Street Date: Mon, 4 Mar 2024 08:20:58 -0700 Subject: [PATCH 041/106] Fix Windows path handling --- configure.py | 7 ++++++ tools/ninja_syntax.py | 8 +++++- tools/project.py | 58 +++++++++++++++++++++---------------------- 3 files changed, 43 insertions(+), 30 deletions(-) diff --git a/configure.py b/configure.py index 11791df0..dc40d895 100644 --- a/configure.py +++ b/configure.py @@ -126,6 +126,13 @@ config.wibo_tag = "0.6.11" # Project config.config_path = Path("config") / config.version / "config.yml" config.check_sha_path = Path("config") / config.version / "build.sha1" +config.asflags = [ + "-mgekko", + "--strip-local-absolute", + "-I include", + f"-I build/{config.version}/include", + f"--defsym version={version_num}", +] config.ldflags = [ "-fp hardware", "-nodefaults", diff --git a/tools/ninja_syntax.py b/tools/ninja_syntax.py index 97e71f26..7306ee1d 100644 --- a/tools/ninja_syntax.py +++ b/tools/ninja_syntax.py @@ -21,6 +21,7 @@ use Python. import re import textwrap +import os from io import StringIO from pathlib import Path from typing import Dict, List, Match, Optional, Tuple, Union @@ -215,7 +216,12 @@ class Writer(object): def serialize_path(input: Optional[NinjaPath]) -> str: - return str(input).replace("\\", "/") if input else "" + if not input: + return "" + if isinstance(input, Path): + return str(input).replace("/", os.sep) + else: + return str(input) def serialize_paths(input: Optional[NinjaPathOrPaths]) -> List[str]: diff --git a/tools/project.py b/tools/project.py index 991b94a9..8f8c6e07 100644 --- a/tools/project.py +++ b/tools/project.py @@ -20,6 +20,7 @@ from pathlib import Path from typing import Any, Dict, List, Optional, Set, Tuple, Union from . import ninja_syntax +from .ninja_syntax import serialize_path if sys.platform == "cygwin": sys.exit( @@ -47,35 +48,30 @@ class Object: self.options.update(options) -PathLike = Union[str, os.PathLike] - - class ProjectConfig: def __init__(self) -> None: # Paths - self.build_dir: PathLike = Path("build") # Output build files - self.src_dir: PathLike = Path("src") # C/C++/asm source files - self.tools_dir: PathLike = Path("tools") # Python scripts - self.asm_dir: PathLike = Path( - "asm" - ) # Override incomplete objects (for modding) + self.build_dir: Path = Path("build") # Output build files + self.src_dir: Path = Path("src") # C/C++/asm source files + self.tools_dir: Path = Path("tools") # Python scripts + self.asm_dir: Path = Path("asm") # Override incomplete objects (for modding) # Tooling self.binutils_tag: Optional[str] = None # Git tag - self.binutils_path: Optional[PathLike] = None # If None, download + self.binutils_path: Optional[Path] = None # If None, download self.dtk_tag: Optional[str] = None # Git tag - self.build_dtk_path: Optional[PathLike] = None # If None, download + self.build_dtk_path: Optional[Path] = None # If None, download self.compilers_tag: Optional[str] = None # 1 - self.compilers_path: Optional[PathLike] = None # If None, download + self.compilers_path: Optional[Path] = None # If None, download self.wibo_tag: Optional[str] = None # Git tag - self.wrapper: Optional[PathLike] = None # If None, download wibo on Linux + self.wrapper: Optional[Path] = None # If None, download wibo on Linux self.sjiswrap_tag: Optional[str] = None # Git tag - self.sjiswrap_path: Optional[PathLike] = None # If None, download + self.sjiswrap_path: Optional[Path] = None # If None, download # Project config self.build_rels: bool = True # Build REL files - self.check_sha_path: Optional[PathLike] = None # Path to version.sha1 - self.config_path: Optional[PathLike] = None # Path to config.yml + self.check_sha_path: Optional[Path] = None # Path to version.sha1 + self.config_path: Optional[Path] = None # Path to config.yml self.debug: bool = False # Build with debug info self.generate_map: bool = False # Generate map file(s) self.asflags: Optional[List[str]] = None # Assembler flags @@ -86,8 +82,8 @@ class ProjectConfig: self.warn_missing_config: bool = False # Warn on missing unit configuration self.warn_missing_source: bool = False # Warn on missing source file self.rel_strip_partial: bool = True # Generate PLFs with -strip_partial - self.rel_empty_file: Optional[PathLike] = ( - None # Path to empty.c for generating empty RELs + self.rel_empty_file: Optional[str] = ( + None # Object name for generating empty RELs ) self.shift_jis = ( True # Convert source files from UTF-8 to Shift JIS automatically @@ -217,7 +213,9 @@ def generate_build_ninja( if config.debug: ldflags += " -g" n.variable("ldflags", ldflags) - n.variable("mw_version", config.linker_version) + if not config.linker_version: + sys.exit("ProjectConfig.linker_version missing") + n.variable("mw_version", Path(config.linker_version)) n.newline() ### @@ -471,12 +469,12 @@ def generate_build_ninja( def __init__(self, config: Dict[str, Any]) -> None: self.name: str = config["name"] self.module_id: int = config["module_id"] - self.ldscript: Optional[Path] = config["ldscript"] + self.ldscript: Optional[Path] = Path(config["ldscript"]) self.entry = config["entry"] self.inputs: List[str] = [] - def add(self, obj: os.PathLike) -> None: - self.inputs.append(str(obj)) + def add(self, obj: Path) -> None: + self.inputs.append(serialize_path(obj)) def output(self) -> Path: if self.module_id == 0: @@ -495,10 +493,10 @@ def generate_build_ninja( if self.module_id == 0: elf_path = build_path / f"{self.name}.elf" dol_path = build_path / f"{self.name}.dol" - elf_ldflags = f"$ldflags -lcf {self.ldscript}" + elf_ldflags = f"$ldflags -lcf {serialize_path(self.ldscript)}" if config.generate_map: elf_map = map_path(elf_path) - elf_ldflags += f" -map {elf_map}" + elf_ldflags += f" -map {serialize_path(elf_map)}" else: elf_map = None n.build( @@ -519,7 +517,7 @@ def generate_build_ninja( preplf_path = build_path / self.name / f"{self.name}.preplf" plf_path = build_path / self.name / f"{self.name}.plf" preplf_ldflags = "$ldflags -sdata 0 -sdata2 0 -r" - plf_ldflags = f"$ldflags -sdata 0 -sdata2 0 -r1 -lcf {self.ldscript}" + plf_ldflags = f"$ldflags -sdata 0 -sdata2 0 -r1 -lcf {serialize_path(self.ldscript)}" if self.entry: plf_ldflags += f" -m {self.entry}" # -strip_partial is only valid with -m @@ -527,9 +525,9 @@ def generate_build_ninja( plf_ldflags += " -strip_partial" if config.generate_map: preplf_map = map_path(preplf_path) - preplf_ldflags += f" -map {preplf_map}" + preplf_ldflags += f" -map {serialize_path(preplf_map)}" plf_map = map_path(plf_path) - plf_ldflags += f" -map {plf_map}" + plf_ldflags += f" -map {serialize_path(plf_map)}" else: preplf_map = None plf_map = None @@ -1122,9 +1120,11 @@ def generate_objdiff_config( # Write objdiff.json with open("objdiff.json", "w", encoding="utf-8") as w: - from .ninja_syntax import serialize_path - json.dump(objdiff_config, w, indent=4, default=serialize_path) + def unix_path(input: Any) -> str: + return str(input).replace(os.sep, "/") if input else "" + + json.dump(objdiff_config, w, indent=4, default=unix_path) # Calculate, print and write progress to progress.json From 380336c17eedc45e50ade40795a585fa036b7709 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 5 Mar 2024 20:42:14 -0600 Subject: [PATCH 042/106] Fix safDll --- config/GMPE01_00/rels/safDll/symbols.txt | 22 ++++---- configure.py | 2 +- src/REL/bootDll/main.c | 2 - src/REL/safDll/main.c | 65 +++++++++++++++++++++--- 4 files changed, 71 insertions(+), 20 deletions(-) diff --git a/config/GMPE01_00/rels/safDll/symbols.txt b/config/GMPE01_00/rels/safDll/symbols.txt index 11ae3d8d..44b3c3c7 100644 --- a/config/GMPE01_00/rels/safDll/symbols.txt +++ b/config/GMPE01_00/rels/safDll/symbols.txt @@ -1,13 +1,15 @@ fn_1_0 = .text:0x00000000; // type:function size:0x4 -fn_1_4 = .text:0x00000004; // type:function size:0x284 -fn_1_288 = .text:0x00000288; // type:function size:0x124 +safMarioEyeDim = .text:0x00000004; // type:function size:0x284 +safSaveTest = .text:0x00000288; // type:function size:0x124 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 data:double -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_data_4 = .data:0x00000004; // type:object size:0xE data:string -lbl_1_data_12 = .data:0x00000012; // type:object size:0xB data:string -lbl_1_data_1D = .data:0x0000001D; // type:object size:0xE data:string -lbl_1_data_2B = .data:0x0000002B; // type:object size:0xE data:string +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:double +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_data_0 = .data:0x00000000; // type:object size:0x4 +lbl_1_data_4 = .data:0x00000004; // type:object size:0xE scope:local data:string +lbl_1_data_12 = .data:0x00000012; // type:object size:0xB scope:local data:string +lbl_1_data_1D = .data:0x0000001D; // type:object size:0xE scope:local data:string +lbl_1_data_2B = .data:0x0000002B; // type:object size:0xE scope:local data:string +lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x300 diff --git a/configure.py b/configure.py index dc40d895..4246d6ed 100644 --- a/configure.py +++ b/configure.py @@ -1000,7 +1000,7 @@ config.libs = [ ), Rel('safDll', objects = { - Object(NonMatching, "REL/safDll/main.c"), + Object(Matching, "REL/safDll/main.c"), } ), Rel('selmenuDll', diff --git a/src/REL/bootDll/main.c b/src/REL/bootDll/main.c index 4741b7ba..2282e16c 100644 --- a/src/REL/bootDll/main.c +++ b/src/REL/bootDll/main.c @@ -46,8 +46,6 @@ static BOOL TitleProc(void); void *logoReadNintendo(void); -#define M_PI 3.141592653589793 - void ModuleProlog(void) { omOvlHisData *history; diff --git a/src/REL/safDll/main.c b/src/REL/safDll/main.c index 860ad928..6b58f683 100644 --- a/src/REL/safDll/main.c +++ b/src/REL/safDll/main.c @@ -1,12 +1,63 @@ -#include "common.h" -#include "REL/executor.h" +#include "dolphin.h" +#include "game/hsfman.h" +#include "game/gamework_data.h" +#include "game/printfunc.h" +#include "game/pad.h" +#include "rel_sqrt_consts.h" -void fn_1_0(void) { +s32 lbl_1_data_0 = 100; +s32 lbl_1_bss_0[192]; + +void fn_1_0(void) +{ } -//fn_1_4 -// https://decomp.me/scratch/Ii0sV +void safMarioEyeDim(s16 id) +{ + ModelData *model = &Hu3DData[id]; + HsfData *hsf = model->hsfData; + HsfMaterial *material = hsf->material; + s16 i, j; + for(i=0; imaterialCnt; i++, material++) { + for(j=0; jnumAttrs; j++) { + HsfAttribute *attr = &hsf->attribute[material->attrs[j]]; + if(strcmp(attr->bitmap->name, "s3c000m1_eyes") == 0 || strcmp(attr->bitmap->name, "mario_eyes") == 0) { + break; + } + } + if(j == material->numAttrs) { + material->color[0] *= 0.6f; + material->color[1] *= 0.3f; + material->color[2] *= 0.3f; + material->litColor[0] *= 0.6f; + material->litColor[1] *= 0.3f; + material->litColor[2] *= 0.3f; + } + } +} -// fn_1_288 -// https://decomp.me/scratch/VQ3CT \ No newline at end of file +void safSaveTest(void) +{ + OSTick time_write; + OSTick time_read; + s16 character = GWPlayerCfg[0].character; + SLLoad(); + time_write = time_read = 0; + while(1) { + print8(16, 420, 1.5f, "READ TIME %d", OSTicksToMilliseconds(time_read)); + print8(16, 430, 1.5f, "WRITE TIME %d", OSTicksToMilliseconds(time_write)); + HuPrcVSleep(); + if(HuPadBtnDown[0] & PAD_BUTTON_Y) { + HuAudCharVoicePlayEntry(character, 282); + time_write = OSGetTick(); + SLSave(); + time_write = OSGetTick()-time_write; + } + if(HuPadBtnDown[0] & PAD_BUTTON_X) { + time_read = OSGetTick(); + SLLoad(); + time_read = OSGetTick()-time_read; + } + } +} \ No newline at end of file From 6f46d026ca5cfea835a20a539b4b5a37cc873a86 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 6 Mar 2024 17:51:38 -0600 Subject: [PATCH 043/106] Clean up player code --- config/GMPE01_00/symbols.txt | 6 +- include/game/board/model.h | 2 + src/game/board/player.c | 182 +++++++++++------------------------ 3 files changed, 61 insertions(+), 129 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 46f0f314..c1a3fc7e 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -1143,7 +1143,7 @@ BoardPlayerMotionSpeedSet = .text:0x80063AFC; // type:function size:0x80 BoardPlayerMotionTimeSet = .text:0x80063B7C; // type:function size:0x80 BoardPlayerMotionTimeGet = .text:0x80063BFC; // type:function size:0x78 BoardPlayerMotionMaxTimeGet = .text:0x80063C74; // type:function size:0x78 -BoardPlayerMotionTimeRangeSet = .text:0x80063CEC; // type:function size:0xA0 +BoardPlayerMotionStartEndSet = .text:0x80063CEC; // type:function size:0xA0 BoardPlayerModelAttrSet = .text:0x80063D8C; // type:function size:0x80 BoardPlayerModelAttrReset = .text:0x80063E0C; // type:function size:0x80 BoardPlayerCoinsSet = .text:0x80063E8C; // type:function size:0x34 @@ -1798,8 +1798,8 @@ ExecComFortuneWin = .text:0x8009DA78; // type:function size:0x18C scope:local ConfigComFortune = .text:0x8009DC04; // type:function size:0x20C scope:local ComFortuneAddStar = .text:0x8009DE10; // type:function size:0x78 scope:local ComFortuneAddCoin = .text:0x8009DE88; // type:function size:0x78 scope:local -ComFortuneSwapCoin = .text:0x8009DF00; // type:function size:0x68 -ComFortuneSwapStar = .text:0x8009DF68; // type:function size:0x68 +ComFortuneSwapCoin = .text:0x8009DF00; // type:function size:0x68 scope:local +ComFortuneSwapStar = .text:0x8009DF68; // type:function size:0x68 scope:local BoardBooCreate = .text:0x8009DFD0; // type:function size:0x11C BoardBooKill = .text:0x8009E0EC; // type:function size:0x2C BoardBooStealTypeSet = .text:0x8009E118; // type:function size:0x2A8 diff --git a/include/game/board/model.h b/include/game/board/model.h index 8fa317bd..6945ef9c 100644 --- a/include/game/board/model.h +++ b/include/game/board/model.h @@ -37,6 +37,8 @@ s32 fn_8006DDE8(s16 model, float arg1); s32 BoardModelMotionCreate(s16 model, s32 data_num); s32 BoardModelMotionKill(s16 model, s32 motion); s32 BoardModelMotionStartEndSet(s16 model, s16 start, s16 end); +s32 BoardModelMotionUpdateSet(s16 model, s32 flag); +s32 BoardModelVoiceEnableSet(s16 model, s32 motion, s32 flag); s32 BoardModelMotionStart(s16 model, s32 slot, u32 attr); s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr); s32 BoardModelAttrSet(s16 model, u32 attr); diff --git a/src/game/board/player.c b/src/game/board/player.c index b4fc788a..b8235a3c 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -7,37 +7,10 @@ #include "game/board/tutorial.h" #include "game/board/ui.h" #include "game/board/view.h" +#include "game/board/model.h" +#include "game/pad.h" -//// #include "game/board/model.h" -extern s16 BoardModelCreateCharacter(s32, s32, s32*, s32); -extern void BoardModelExistCheck(s16, s32); -extern void BoardModelExistDupe(s16, s32); -extern void BoardModelCameraSet(s16, u16); -extern void BoardItemStatusKill(s32); -extern void BoardModelAmbSet(s16, f32, f32, f32); -extern s32 BoardModelPosGet(s16, Vec*); -extern s32 BoardModelRotGet(s16, Vec*); -extern f32 BoardModelRotYGet(s16); -extern void BoardModelScaleGet(s16, s32*); -extern void BoardModelVoiceEnableSet(s16, s32, s32); -extern s32 BoardModelMotionCreate(s16, s32); -extern s32 BoardModelMotionKill(s16, s32); -extern s32 BoardModelMotionEndCheck(s16); -extern s32 BoardModelMotionShiftSet(s16, s32, f32, f32, u32); -extern void BoardModelMotionTimeSet(s16, f32); -extern f32 BoardModelMotionTimeGet(s16); -extern f32 BoardModelMotionMaxTimeGet(s16); -extern void BoardModelMotionTimeRangeSet(s16, s32, s32); -extern void BoardModelAttrSet(s16, s32); -extern void BoardModelAttrReset(s16, s32); -//// #include "game/board/overhead.h" -//// #include "game/board/pad.h" -extern s8 HuPadStkX[4]; -extern s8 HuPadStkY[4]; -extern u16 HuPadBtnDown[4]; -extern u8 HuPadDStk[4]; -//// - +//TODO: Give better name typedef struct bitcopy { struct { u8 field00_bit0 : 1; @@ -394,7 +367,7 @@ void BoardPlayerCornerPosSet(s32 arg0) { BoardPlayerPosSetV(arg0, &sp8); } -void BoardPlayerCornerPosGet(s32 arg0, Point3d* arg1) { +void BoardPlayerCornerPosGet(s32 arg0, Vec* arg1) { s32 var_r31; s32 var_r30; s32 var_r29; @@ -496,7 +469,7 @@ void BoardPlayerScaleSet(s32 arg0, f32 arg8, f32 arg9, f32 argA) { BoardModelScaleSet(BoardPlayerModelGet(arg0), arg8, arg9, argA); } -void BoardPlayerScaleGet(s32 arg0, s32 *arg1) { +void BoardPlayerScaleGet(s32 arg0, Vec *arg1) { BoardModelScaleGet(BoardPlayerModelGet(arg0), arg1); } @@ -574,8 +547,8 @@ f32 BoardPlayerMotionMaxTimeGet(s32 arg0) { return BoardModelMotionMaxTimeGet(BoardPlayerModelGet(arg0)); } -void BoardPlayerMotionTimeRangeSet(s32 arg0, f32 arg8, f32 arg9) { - BoardModelMotionTimeRangeSet(BoardPlayerModelGet(arg0), arg8, arg9); +void BoardPlayerMotionStartEndSet(s32 arg0, f32 arg8, f32 arg9) { + BoardModelMotionStartEndSet(BoardPlayerModelGet(arg0), arg8, arg9); } void BoardPlayerModelAttrSet(s32 arg0, s32 arg1) { @@ -878,21 +851,8 @@ void BoardPlayerPostTurnHookExec(s32 arg0) { } void BoardPlayerSizeRestore(s32 arg0) { - PlayerState* temp_r24; - PlayerState* temp_r23; - s32 var_r28; - s32 var_r27; - - temp_r24 = BoardPlayerGet(arg0); - if (temp_r24 != 0) { - var_r28 = temp_r24->size; - } - if (var_r28 != 0) { - temp_r23 = BoardPlayerGet(arg0); - if (temp_r23 != 0) { - var_r27 = temp_r23->size; - } - if (var_r27 == 1) { + if (BoardPlayerSizeGet(arg0) != 0) { + if (BoardPlayerSizeGet(arg0) == 1) { HuAudFXPlay(0x313); } else { HuAudFXPlay(0x311); @@ -916,19 +876,18 @@ void BoardPlayerZoomRestore(s32 arg0) { Vec spC; sp8 = BoardPlayerGet(arg0); - BoardModelPosGet(BoardPlayerModelGet(arg0), &spC); + BoardPlayerPosGet(arg0, &spC); temp_r27 = GWPlayer[arg0].space_curr; var_r31 = GWSystem.player_curr; if (var_r31 == -1) { var_r31 = 0; } - for (var_r28 = 0, var_r29 = var_r28; var_r28 < 4; var_r28++) { + for (var_r29 = var_r28 = 0; var_r28 < 4; var_r28++) { if (var_r31 == arg0) break; if (temp_r27 == GWPlayer[var_r31].space_curr) { var_r29++; } var_r31 = (var_r31 + 1) & 3; - (void)var_r29; // hack } BoardSpaceCornerPosGet(temp_r27, var_r29, &sp18); BoardPlayerMotBlendSet(arg0, 0, 0xF); @@ -978,17 +937,17 @@ static inline GetLinkCount(s32 playerIdx, s32 boardIdx) { || ((boardSpaceFlag->flag & 0x04000000) != 0) || ((boardSpaceFlag->flag & BoardJunctionMaskGet()) != 0)) { - linkCount -= 1; + linkCount--; } } return linkCount; } static void InitJunction(s32 arg0, s32 arg1, f32 arg8) { - Point3d sp68; - Point3d sp5C; - Point3d sp50; - Point3d sp44; + Vec sp68; + Vec sp5C; + Vec sp50; + Vec sp44; f32 sp40; f32 sp3C; s32 sp38; @@ -1015,7 +974,7 @@ static void InitJunction(s32 arg0, s32 arg1, f32 arg8) { if (sp38 > 1) { var_r28 = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, UpdateJunctionGfx); junctionObj = var_r28; - temp_r29 = (bitcopy*) var_r28->work; + temp_r29 = OM_GET_WORK_PTR(var_r28, bitcopy); temp_r29->field00_bit0 = 0; temp_r29->field00_bit7 = 0; temp_r29->field00_bit1 = arg0; @@ -1089,7 +1048,7 @@ static void UpdateJunctionGfx(omObjData* arg0) { s32 var_r28; bitcopy* temp_r30; - temp_r30 = (bitcopy*)arg0->work; + temp_r30 = OM_GET_WORK_PTR(arg0, bitcopy); if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { for (var_r28 = 0; var_r28 < temp_r30->field00_bit3; var_r28++) { BoardModelKill(temp_r30->unk_06[var_r28]); @@ -1119,7 +1078,7 @@ static void StopJunctionPlayer(s32 arg0) { bitcopy* temp_r31; if (junctionObj != 0) { - temp_r31 = (bitcopy*)junctionObj->work; + temp_r31 = OM_GET_WORK_PTR(junctionObj, bitcopy); temp_r31->field00_bit7 = 1; temp_r31->unk_01 = 0; if (arg0 != 0) { @@ -1130,14 +1089,14 @@ static void StopJunctionPlayer(s32 arg0) { } static void RestoreJunction(f32 arg8, s32 arg0) { - Point3d sp1C; + Vec sp1C; f32 spC[4]; s16 var_r30; s16 temp_r29; bitcopy* temp_r31; if (junctionObj != 0) { - temp_r31 = (bitcopy*) junctionObj->work; + temp_r31 = OM_GET_WORK_PTR(junctionObj, bitcopy); if (temp_r31->unk_01 == 0) { arg8 = 90.0f * (((90.0f + arg8) - 1.0f) / 90.0f); @@ -1331,7 +1290,7 @@ static inline f32 JunctionArrowRotGetCurr(void) { if (!junctionObj) { return 0.0f; } else { - juncObj = (bitcopy*) junctionObj->work; + juncObj = OM_GET_WORK_PTR(junctionObj, bitcopy); OSs16tof32(&(junctionArrowRot[juncObj->field00_bit5]), &ret); return ret; } @@ -1345,7 +1304,7 @@ static inline s32 CheckArrowRot(float value) if (!junctionObj) { return 0; } else { - sp5C = (bitcopy*) junctionObj->work; + sp5C = OM_GET_WORK_PTR(junctionObj, bitcopy); OSf32tos16(&value, &spE); if (spE > 0x15E) { spE = 0; @@ -1614,6 +1573,7 @@ void BoardPlayerPosLerpStart(s32 arg0, Vec* arg1, Vec* arg2, s16 arg3) { if (GWPlayer[arg0].bowser_suit != 0) { BoardModelPosSetV(suitMdl, arg1); } + //TODO: Make work struct for this temp_r3->work[0] = arg0; *(f32 *)(&temp_r3->work[1]) = var_f27; temp_r3->work[2] = arg3; @@ -1651,6 +1611,7 @@ static void PlayerPosLerpFunc(omObjData* arg0) { BoardPlayerPosSet(temp_r30, temp_f31, temp_f30, temp_f29); } +//TODO: Make this 2 structs and give better names typedef struct bitcopy2 { struct { u8 field00_bit0 : 1; @@ -1680,7 +1641,7 @@ typedef struct bitcopy2 { } bitcopy2; void BoardPlayerDiceJumpStart(s32 arg0) { - Point3d sp8; + Vec sp8; PlayerState* temp_r25; bitcopy2* temp_r31; s32 var_r28; @@ -1697,7 +1658,7 @@ void BoardPlayerDiceJumpStart(s32 arg0) { } diceJumpObj[arg0] = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, DiceJumpFunc); BoardModelPosGet(BoardPlayerModelGet(arg0), &sp8); - temp_r31 = (bitcopy2*) diceJumpObj[arg0]->work; + temp_r31 = OM_GET_WORK_PTR(diceJumpObj[arg0], bitcopy2); temp_r31->field00_bit0 = 0; temp_r31->field00_bit1 = arg0; temp_r31->unk_04 = 0; @@ -1711,7 +1672,7 @@ s32 BoardPlayerDiceJumpCheck(s32 arg0) { if (!diceJumpObj[arg0]) { return 0; } - if (diceJumpObj[arg0]->work[1] == 0) { + if (OM_GET_WORK_PTR(diceJumpObj[arg0], bitcopy2)->unk_04 == 0) { return 0; } return 1; @@ -1726,7 +1687,7 @@ static void DiceJumpFunc(omObjData* arg0) { s32 var_r23; s32 var_r17; - temp_r31 = (bitcopy2*) arg0->work; + temp_r31 = OM_GET_WORK_PTR(arg0, bitcopy2); if ((temp_r31->field00_bit0 != 0) || (BoardIsKill() != 0)) { GWPlayer[temp_r31->field00_bit1].field08_bit3 = 0; BoardRotateDiceNumbers(temp_r31->field00_bit1); @@ -1806,7 +1767,7 @@ void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2) { var_r20 = 0; if (motDoneF[arg0] != 0) { temp_r3 = motDoneF[arg0]; - temp_r26 = (bitcopy2*) temp_r3->work; + temp_r26 = OM_GET_WORK_PTR(temp_r3, bitcopy2); temp_r26->field00_bit0 = 1; for (var_r19 = 0; var_r19 < 0xB4U; var_r19++) { @@ -1818,7 +1779,7 @@ void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2) { if (arg2 > 0) { var_r18 = GWPlayer[arg0].character; temp_r3 = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, &BoardPlayerMotBlendExec); - temp_r26 = (bitcopy2*) temp_r3->work; + temp_r26 = OM_GET_WORK_PTR(temp_r3, bitcopy2); temp_r26->field00_bit0 = 0; temp_r26->unk_02 = arg2; temp_r26->unk_01 = arg0; @@ -1873,7 +1834,7 @@ void BoardPlayerMotBlendExec(omObjData* arg0) { f32 var_f27; bitcopy2* temp_r30; - temp_r30 = (bitcopy2*) arg0->work; + temp_r30 = OM_GET_WORK_PTR(arg0, bitcopy2); if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { if (temp_r30->unk_04h > 0) { BoardPlayerMotionKill(temp_r30->unk_01, temp_r30->unk_04h); @@ -1907,6 +1868,8 @@ s32 BoardPlayerMotBlendCheck(s32 arg0) { return 1; } +//TODO: Make this 3 structs and give better names + typedef struct bitcopy3 { struct { u8 field00_bit0 : 1; @@ -1929,7 +1892,7 @@ void BoardDiceDigit2DInit(s32 arg0, s32 arg1) { bitcopy3* temp_r31; temp_r3 = omAddObjEx(boardObjMan, 0x105, 0, 0, -1, &UpdateDiceDigit2D); - temp_r31 = (bitcopy3*) temp_r3->work; + temp_r31 = OM_GET_WORK_PTR(temp_r3, bitcopy3);; temp_r31->field00_bit0 = 0; temp_r31->field00_bit1 = 1; temp_r31->unk_01 = 0; @@ -1954,7 +1917,7 @@ void BoardDiceDigit2DUpdateEnable(s32 arg0) { bitcopy3* temp_r31; if (diceDigit2DObj != 0) { - temp_r31 = (bitcopy3*) diceDigit2DObj->work; + temp_r31 = OM_GET_WORK_PTR(diceDigit2DObj, bitcopy3); temp_r31->field00_bit0 = 1; } } @@ -1964,7 +1927,7 @@ void BoardDiceDigit2DShowSet(s32 arg0) { bitcopy3* temp_r31; if (diceDigit2DObj != 0) { - temp_r31 = (bitcopy3*) diceDigit2DObj->work; + temp_r31 = OM_GET_WORK_PTR(diceDigit2DObj, bitcopy3); for (var_r30 = 0; var_r30 < 2; var_r30++) { if (arg0 != 0) { @@ -1984,14 +1947,14 @@ void BoardDiceDigit2DShowSet(s32 arg0) { } static void UpdateDiceDigitSprite(omObjData* arg0) { - f32 sp1C[2]; + Vec sp1C; s32 sp14[2]; f32 spC[2] = { 320.0f, 256.0f }; s32 var_r30; s32 temp_r29; bitcopy3* temp_r31; - temp_r31 = (bitcopy3*) arg0->work; + temp_r31 = OM_GET_WORK_PTR(arg0, bitcopy3); temp_r29 = GWPlayer[temp_r31->unk_02].roll; if (temp_r29 != 0) { sp14[0] = temp_r29 % 10; @@ -2005,14 +1968,14 @@ static void UpdateDiceDigitSprite(omObjData* arg0) { HuSprAttrSet(temp_r31->unk_04, var_r30, 4); } else { if ((sp14[1] == 0) && (var_r30 == 0)) { - sp1C[0] = 288.0f; + sp1C.x = 288.0f; } else { - sp1C[0] = spC[var_r30]; + sp1C.x = spC[var_r30]; } - sp1C[1] = 176.0f; + sp1C.y = 176.0f; HuSprAttrReset(temp_r31->unk_04, var_r30, 4); HuSprBankSet(temp_r31->unk_04, var_r30, sp14[var_r30]); - HuSprPosSet(temp_r31->unk_04, var_r30, sp1C[0], sp1C[1]); + HuSprPosSet(temp_r31->unk_04, var_r30, sp1C.x, sp1C.y); } } } @@ -2021,7 +1984,7 @@ static void UpdateDiceDigit2D(omObjData* arg0) { f32 var_f30; bitcopy3* temp_r30; - temp_r30 = (bitcopy3*) diceDigit2DObj->work; + temp_r30 = OM_GET_WORK_PTR(diceDigit2DObj, bitcopy3); if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { if (temp_r30->unk_04 != -1) { HuSprGrpKill(temp_r30->unk_04); @@ -2043,40 +2006,7 @@ static void UpdateDiceDigit2D(omObjData* arg0) { var_f30 -= 90.0f; } } - - { // hack until the compiler does what we want - f32 sp1C[2]; - f32 spC[2] = { 320.0f, 256.0f }; - s32 sp14[2]; - s32 var_r30; - s32 temp_r29; - bitcopy3* temp_r31; - - temp_r31 = (bitcopy3*) arg0->work; - temp_r29 = GWPlayer[temp_r31->unk_02].roll; - if (temp_r29 != 0) { - sp14[0] = temp_r29 % 10; - sp14[1] = temp_r29 / 10; - } else { - temp_r31->field00_bit0 = 1; - } - - for (var_r30 = 0; var_r30 < 2; var_r30++) { - if (((var_r30 == 1) && (sp14[1] == 0)) || (temp_r31->field00_bit1 == 0)) { - HuSprAttrSet(temp_r31->unk_04, var_r30, 4); - } else { - if ((sp14[1] == 0) && (var_r30 == 0)) { - sp1C[0] = 288.0f; - } else { - sp1C[0] = spC[var_r30]; - } - sp1C[1] = 176.0f; - HuSprAttrReset(temp_r31->unk_04, var_r30, 4); - HuSprBankSet(temp_r31->unk_04, var_r30, sp14[var_r30]); - HuSprPosSet(temp_r31->unk_04, var_r30, sp1C[0], sp1C[1]); - } - } - } + UpdateDiceDigitSprite(arg0); } void BoardPlayerBtnDownWait(s32 arg0, u32 arg1) { @@ -2122,9 +2052,9 @@ u32 BoardPlayerMoveAwayIsDone(void) { void BoardPlayerMoveAwayStart(s32 arg0, s32 arg1, s32 arg2) { bitcopy3* temp_r25; - Point3d sp28; - Point3d sp1C; - Point3d sp10; + Vec sp28; + Vec sp1C; + Vec sp10; s32 temp_r29; s32 var_r30; s32 var_r31; @@ -2160,7 +2090,7 @@ void BoardPlayerMoveAwayStart(s32 arg0, s32 arg1, s32 arg2) { } if (arg2 == 0) { moveAwayObj = omAddObjEx(boardObjMan, 0x100, 0U, 0U, -1, &MoveAwayObjFunc); - temp_r25 = (bitcopy3*) moveAwayObj->work; + temp_r25 = OM_GET_WORK_PTR(moveAwayObj, bitcopy3); temp_r25->field00_bit0 = 0; } } @@ -2173,9 +2103,9 @@ static void MoveAwayObjFunc(omObjData* arg0) { s32 var_r31; bitcopy3* temp_r30; - temp_r30 = (bitcopy3*) arg0->work; + temp_r30 = OM_GET_WORK_PTR(arg0, bitcopy3); if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { - moveAwayObj = 0; + moveAwayObj = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); return; } @@ -2209,19 +2139,19 @@ void BoardBowserSuitInit(s32 arg0) { GWPlayer[arg0].bowser_suit = 1; temp_r3 = omAddObjEx(boardObjMan, 0x100, 0U, 0U, -1, &UpdateBowserSuit); bowserSuitObj = temp_r3; - temp_r31 = (bitcopy3 *) temp_r3->work; + temp_r31 = OM_GET_WORK_PTR(temp_r3, bitcopy3); temp_r31->field00_bit0 = 0; temp_r31->unk_01 = arg0; temp_r31->unk_02 = 0; - BoardModelVoiceEnableSet(BoardPlayerModelGet(arg0), 3, 0); - BoardModelVoiceEnableSet(BoardPlayerModelGet(arg0), 4, 0); + BoardPlayerVoiceEnableSet(arg0, 3, 0); + BoardPlayerVoiceEnableSet(arg0, 4, 0); } void BoardBowserSuitKill(s32 arg0) { bitcopy3* temp; if (bowserSuitObj != 0) { - ((bitcopy3*) bowserSuitObj->work)->field00_bit0 = 1; + OM_GET_WORK_PTR(bowserSuitObj, bitcopy3)->field00_bit0 = 1; } GWPlayer[arg0].bowser_suit = 0; BoardModelVoiceEnableSet(BoardPlayerModelGet(arg0), 3, 1); @@ -2290,7 +2220,7 @@ void UpdateBowserSuit(omObjData* arg0) { s16 temp_r30; bitcopy3* temp_r31; - temp_r31 = (bitcopy3*) arg0->work; + temp_r31 = OM_GET_WORK_PTR(arg0, bitcopy3); if ((temp_r31->field00_bit0 != 0) || (BoardIsKill() != 0)) { bowserSuitObj = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); From e18a2ac5702e82d7f7a76b0b793b07ae5b8bc3a5 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Wed, 6 Mar 2024 18:59:14 -0500 Subject: [PATCH 044/106] DoSparkSpace update --- include/game/board/player.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/include/game/board/player.h b/include/game/board/player.h index 2cbabee4..12b4cb49 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -151,13 +151,12 @@ void BoardBowserSuitKill(s32); void SetRollPlayerSize(s32); void BoardDiceDigit2DInit(s32, s32); void BoardDiceDigit2DUpdateEnable(s32); -s32 DoSparkSpace(s32, s16*); +s32 DoSparkSpace(s32, s32); s32 MegaPlayerPassFunc(s32, s16); s32 BoardPlayerAnimBlendCheck(s32); void BoardBowserSuitMotionSetWait(void); void BoardBowserSuitPlayerModelKill(void); void BoardDiceDigit2DShowSet(s32); -s32 DoSparkSpace(s32, s16*); s32 MegaPlayerPassFunc(s32, s16); s32 BoardPlayerMotBlendCheck(s32); void BoardPlayerMoveAwayStartCurr(s32, s32); From 83000dbb16f075ecd174b4f8a42efa84208d0438 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 6 Mar 2024 20:22:54 -0600 Subject: [PATCH 045/106] Document board/com files Also did various cleanups --- config/GMPE01_00/symbols.txt | 16 +- include/board_unsplit.h | 2 +- include/game/board/com.h | 2 +- include/game/board/com_path.h | 8 +- include/game/gamework_data.h | 14 + src/REL/w10Dll/main.c | 5 +- src/REL/w10Dll/scene.c | 2 +- src/game/board/com.c | 655 +++++++++++++++++----------------- src/game/board/com_path.c | 547 ++++++++++++++-------------- src/game/board/main.c | 7 - src/game/board/pause.c | 39 +- src/game/board/ui.c | 2 +- src/game/board/window.c | 19 +- 13 files changed, 645 insertions(+), 673 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index c1a3fc7e..2f787f26 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -1339,7 +1339,7 @@ ExecComKey = .text:0x80071410; // type:function size:0xE8 scope:local BoardComPreferItemGet = .text:0x800714F8; // type:function size:0x100 BoardComPreferItemCheck = .text:0x800715F8; // type:function size:0x120 BoardComItemWeightGet = .text:0x80071718; // type:function size:0x74 -BoardComTutorialItemGet = .text:0x8007178C; // type:function size:0xD0 +BoardComUseItemSlotGet = .text:0x8007178C; // type:function size:0xD0 BoardComUseItemSet = .text:0x8007185C; // type:function size:0x6C BoardComUseItemCheck = .text:0x800718C8; // type:function size:0x68 ChooseUseItem = .text:0x80071930; // type:function size:0x16C scope:local @@ -1351,7 +1351,7 @@ CheckSwapUse = .text:0x80072370; // type:function size:0x198 scope:local CheckBooUse = .text:0x80072508; // type:function size:0x7C scope:local CheckLampUse = .text:0x80072584; // type:function size:0x74 scope:local BoardComJunctionInputGet = .text:0x800725F8; // type:function size:0x304 -BoardComBestPlayerFind = .text:0x800728FC; // type:function size:0xA8 +BoardComFarPlayerFind = .text:0x800728FC; // type:function size:0xA8 BoardViewOverheadExec = .text:0x800729A4; // type:function size:0x134 BoardViewFocusGetPos = .text:0x80072AD8; // type:function size:0x3C BoardViewFocusSet = .text:0x80072B14; // type:function size:0xF0 @@ -1517,7 +1517,7 @@ ShrinkCharWheel = .text:0x80082688; // type:function size:0x10C scope:local KillCharWheelSpr = .text:0x80082794; // type:function size:0x38 scope:local SetCharWheelChars = .text:0x800827CC; // type:function size:0xBC scope:local GetInput = .text:0x80082888; // type:function size:0x224 scope:local -BoardCharWheelSetTarget = .text:0x80082AAC; // type:function size:0x10 +BoardCharWheelTargetSet = .text:0x80082AAC; // type:function size:0x10 GetComDelay = .text:0x80082ABC; // type:function size:0x148 scope:local GetComInput = .text:0x80082C04; // type:function size:0x8C scope:local BoardMushroomExec = .text:0x80082C90; // type:function size:0xA4 @@ -1915,7 +1915,7 @@ BoardLast5Exec = .text:0x800A9708; // type:function size:0x84 DestroyLast5 = .text:0x800A978C; // type:function size:0x30 scope:local ExecLast5 = .text:0x800A97BC; // type:function size:0x1D4 scope:local CreateLast5 = .text:0x800A9990; // type:function size:0x184 scope:local -DestroyLast5 = .text:0x800A9B14; // type:function size:0x48 scope:local +KillLast5 = .text:0x800A9B14; // type:function size:0x48 scope:local InitHost = .text:0x800A9B5C; // type:function size:0x10C scope:local KillHost = .text:0x800A9C68; // type:function size:0xA4 scope:local Last5Main = .text:0x800A9D0C; // type:function size:0xCC0 scope:local @@ -1991,12 +1991,12 @@ AddValidLinks = .text:0x800B1CEC; // type:function size:0xD0 scope:local CheckPathSpace = .text:0x800B1DBC; // type:function size:0x30 scope:local FindValidLink = .text:0x800B1DEC; // type:function size:0xAC scope:local CheckEndSpace = .text:0x800B1E98; // type:function size:0xF0 scope:local -BoardComPathReachCheck = .text:0x800B1F88; // type:function size:0x74C +BoardComPathShortcutLenGet = .text:0x800B1F88; // type:function size:0x74C BoardComPathBestGet = .text:0x800B26D4; // type:function size:0x3E4 BoardComPathLenGet = .text:0x800B2AB8; // type:function size:0x65C CheckPath = .text:0x800B3114; // type:function size:0x488 scope:local -BoardComPathW20BestGet = .text:0x800B359C; // type:function size:0x45C -CheckW20Path = .text:0x800B39F8; // type:function size:0x4E0 scope:local +BoardComPathBestGetFlag = .text:0x800B359C; // type:function size:0x45C +CheckPathFlag = .text:0x800B39F8; // type:function size:0x4E0 scope:local TutorialProcFunc = .text:0x800B3ED8; // type:function size:0x34 scope:local BoardTutorialInit = .text:0x800B3F0C; // type:function size:0x80 BoardTutorialKill = .text:0x800B3F8C; // type:function size:0x4C @@ -5192,7 +5192,7 @@ megaSquishSfxTbl = .data:0x80139A80; // type:object size:0x20 scope:local PortraitTbl = .data:0x80139AA0; // type:object size:0x24 scope:local StarPortraitTbl = .data:0x80139AC4; // type:object size:0x24 scope:local boardMusTbl = .data:0x80139AE8; // type:object size:0x12 scope:local -comItemWeightTbl = .data:0x80139B00; // type:object size:0x60 scope:local +comItemPreferTbl = .data:0x80139B00; // type:object size:0x60 scope:local comItemUseCheckFuncTbl = .data:0x80139B60; // type:object size:0x38 scope:local comJunctionDirTbl = .data:0x80139B98; // type:object size:0x30 scope:local overhead2DPos = .data:0x80139BC8; // type:object size:0x28 scope:local diff --git a/include/board_unsplit.h b/include/board_unsplit.h index 2c7dcf01..8e005d90 100644 --- a/include/board_unsplit.h +++ b/include/board_unsplit.h @@ -16,7 +16,7 @@ s32 BoardSpacePosGet(s32, s32, Vec*); void BoardShopTutorialExec(s32); void BoardMGSetupTutorialExec(void); void BoardBooHouseTutorialExec(void); -void BoardCharWheelSetTarget(s32); +void BoardCharWheelTargetSet(s32); void BoardSpaceStarSetIndex(s32); void BoardLightHookSet(BoardLightHook set, BoardLightHook reset); s32 fn_8006DDE8(s16, f32); diff --git a/include/game/board/com.h b/include/game/board/com.h index a75d35ab..d0db30fa 100755 --- a/include/game/board/com.h +++ b/include/game/board/com.h @@ -10,7 +10,7 @@ void BoardComKeySetDown(void); s8 BoardComPreferItemGet(s32 arg0, s8 *arg1, s8 arg2); s8 BoardComPreferItemCheck(s32 arg0, s8 arg1, s8 arg2, s8 arg3); s32 BoardComItemWeightGet(s32 arg0, s32 arg1); -s32 BoardComTutorialItemGet(s32 arg0); +s32 BoardComUseItemSlotGet(s32 arg0); s32 BoardComUseItemSet(s32 arg0, s32 arg1); BOOL BoardComUseItemCheck(s32 arg0); s32 BoardComJunctionInputGet(s32 arg0, Vec *arg1, s32 arg2, float *arg3); diff --git a/include/game/board/com_path.h b/include/game/board/com_path.h index 2fa6e313..869d3b48 100755 --- a/include/game/board/com_path.h +++ b/include/game/board/com_path.h @@ -3,9 +3,9 @@ #include "dolphin/types.h" -s16 BoardComPathReachCheck(s16 arg0, u32 arg1, s32 arg2); -s16 BoardComPathBestGet(s16 arg0); -s16 BoardComPathLenGet(s16 arg0, s16 arg1); -s16 BoardComPathW20BestGet(s16 arg0, u32 arg1, s16 arg2); +s16 BoardComPathShortcutLenGet(s16 space, u32 type, s32 block_pipe); +s16 BoardComPathBestGet(s16 space); +s16 BoardComPathLenGet(s16 space, s16 space_other); +s16 BoardComPathBestGetFlag(s16 space, u32 flag, s16 len); #endif diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index 874b1e71..1ab6b00d 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -180,14 +180,28 @@ static inline s32 GWMGShowComGet(void) static inline s32 GWMGListGet(void) { + if (GWSystem.mg_list == 3) { + GWSystem.mg_list = 0; + } return GWSystem.mg_list; } static inline s32 GWMessSpeedGet(void) { + if (GWSystem.mess_speed == 3) { + GWSystem.mess_speed = 1; + } return GWSystem.mess_speed; } +static inline s32 GWSaveModeGet(void) +{ + if (GWSystem.save_mode == 3) { + GWSystem.save_mode = 1; + } + return GWSystem.save_mode; +} + static inline s32 GWTurnGet(void) { return GWSystem.turn; diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index c38b242f..00e96288 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -5,6 +5,7 @@ #include "game/board/model.h" #include "game/board/star.h" #include "game/board/tutorial.h" +#include "game/board/main.h" #include "math.h" @@ -78,9 +79,9 @@ void BoardCreate(void) { s32 i; unkw10Dll* temp_r30; s32 temp; - s32 temp2; + s32 board; - temp2 = get_current_board(); + board = BoardCurrGet(); lbl_1_bss_0 = (W10State *)&GWSystem.board_data; lbl_1_bss_0->unk0 = 0; lbl_1_bss_0->unk4 = 0; diff --git a/src/REL/w10Dll/scene.c b/src/REL/w10Dll/scene.c index 0570fce7..52909d78 100644 --- a/src/REL/w10Dll/scene.c +++ b/src/REL/w10Dll/scene.c @@ -113,7 +113,7 @@ void fn_1_1134(void) { fn_1_1E3C(7, 0x122, 0x8C); fn_1_BA0(0x2E0017); fn_1_1FB0(); - BoardCharWheelSetTarget(1); + BoardCharWheelTargetSet(1); } void fn_1_1178(void) { diff --git a/src/game/board/com.c b/src/game/board/com.c index fae9cae0..9540d290 100755 --- a/src/game/board/com.c +++ b/src/game/board/com.c @@ -7,28 +7,29 @@ #include "game/board/space.h" #include "game/board/tutorial.h" #include "game/board/window.h" +#include "game/board/boo.h" #include "math.h" -s32 BoardBooComUseCheck(s32); +typedef BOOL (*UseCheckFunc)(s32 player, s32 item); static void ExecComKeyLeft(void); static void ExecComKeyRight(void); static void ExecComKeyUp(void); static void ExecComKeyDown(void); -static void ExecComKey(s32 arg0, s32 arg1, s32 arg2); -static s32 ChooseUseItem(s32 arg0); -static BOOL CheckMiniUse(s32 arg0, s32 arg1); -static BOOL CheckMegaUse(s32 arg0, s32 arg1); -static BOOL CheckSparkUse(s32 arg0, s32 arg1); -static BOOL CheckBoardChangeUse(s32 arg0, s32 arg1); -static BOOL CheckSwapUse(s32 arg0, s32 arg1); -static BOOL CheckBooUse(s32 arg0, s32 arg1); -static BOOL CheckLampUse(s32 arg0, s32 arg1); +static void ExecComKey(s32 player, s32 move, s32 vertical); +static s32 ChooseUseItem(s32 player); +static BOOL CheckMiniUse(s32 player, s32 item); +static BOOL CheckMegaUse(s32 player, s32 item); +static BOOL CheckSparkUse(s32 player, s32 item); +static BOOL CheckBoardChangeUse(s32 player, s32 item); +static BOOL CheckSwapUse(s32 player, s32 item); +static BOOL CheckBooUse(s32 player, s32 item); +static BOOL CheckLampUse(s32 player, s32 item); static s8 itemUse = -1; -static s8 comItemWeightTbl[8][12] = { +static s8 comItemPreferTbl[8][12] = { { 0x0C, 0x0B, 0x05, 0x03, 0x01, 0x02, 0x06, 0x04, 0x00, 0x07, 0x09, 0x0A }, { 0x0C, 0x0B, 0x05, 0x0A, 0x03, 0x01, 0x02, 0x00, 0x06, 0x04, 0x07, 0x09 }, { 0x0C, 0x0B, 0x05, 0x06, 0x03, 0x01, 0x02, 0x0A, 0x07, 0x09, 0x00, 0x04 }, @@ -39,7 +40,7 @@ static s8 comItemWeightTbl[8][12] = { { 0x0C, 0x05, 0x07, 0x0B, 0x0A, 0x09, 0x04, 0x06, 0x03, 0x01, 0x02, 0x00 } }; -static BOOL (*comItemUseCheckFuncTbl[])(s32, s32) = { +static UseCheckFunc comItemUseCheckFuncTbl[] = { CheckMiniUse, CheckMegaUse, CheckMiniUse, @@ -95,322 +96,322 @@ void BoardComKeySetDown(void) { BoardWinComKeyFuncSet(ExecComKeyDown); } -static void ExecComKey(s32 arg0, s32 arg1, s32 arg2) { - s32 sp14[4]; - s32 temp_r31; - s16 temp_r30; - s32 var_r29; +static void ExecComKey(s32 player, s32 move, s32 vertical) { + s32 comkey[4]; + s32 port; + s16 delay; + s32 dpad; - sp14[0] = sp14[1] = sp14[2] = sp14[3] = 0; - temp_r31 = GWPlayer[arg0].port; - temp_r30 = GWMessDelayGet(); - if (arg2 == 0) { - var_r29 = 4; + comkey[0] = comkey[1] = comkey[2] = comkey[3] = 0; + port = GWPlayer[player].port; + delay = GWMessDelayGet(); + if (vertical == 0) { + dpad = PAD_BUTTON_DOWN; } else { - var_r29 = 2; + dpad = PAD_BUTTON_RIGHT; } - if (arg1 == 1) { - sp14[temp_r31] = var_r29; - HuWinComKeyWait(sp14[0], sp14[1], sp14[2], sp14[3], temp_r30); + if (move == 1) { + comkey[port] = dpad; + HuWinComKeyWait(comkey[0], comkey[1], comkey[2], comkey[3], delay); } - sp14[temp_r31] = 0x100; - HuWinComKeyWait(sp14[0], sp14[1], sp14[2], sp14[3], temp_r30); + comkey[port] = 0x100; + HuWinComKeyWait(comkey[0], comkey[1], comkey[2], comkey[3], delay); } -s8 BoardComPreferItemGet(s32 arg0, s8 *arg1, s8 arg2) { - s32 temp_r26; - s32 var_r28; - s32 temp_r29; - s32 var_r27; +s8 BoardComPreferItemGet(s32 player, s8 *items, s8 num_items) { + s32 character; + s32 weight; + s32 item; + s32 prefer; s32 i; s32 j; - temp_r26 = GWPlayer[arg0].character; - var_r27 = -1; - var_r28 = 0x64; - for (i = 0; i < arg2; i++) { - temp_r29 = arg1[i]; - for (j = 0; j < 0xC; j++) { - if (temp_r29 == comItemWeightTbl[temp_r26][j]) { - if (j < var_r28 && (BoardPlayerItemFind(arg0, temp_r29) == -1 || temp_r29 == 0xC || temp_r29 == 0xB)) { - var_r28 = j; - var_r27 = i; + character = GWPlayer[player].character; + prefer = -1; + weight = 100; + for (i = 0; i < num_items; i++) { + item = items[i]; + for (j = 0; j < 12; j++) { + if (item == comItemPreferTbl[character][j]) { + if (j < weight && (BoardPlayerItemFind(player, item) == -1 || item == 0xC || item == 0xB)) { + weight = j; + prefer = i; } break; } } } - if (var_r28 == 0x64) { + if (weight == 100) { return -1; } - return var_r27; + return prefer; } -s8 BoardComPreferItemCheck(s32 arg0, s8 arg1, s8 arg2, s8 arg3) { - s8 spB[3]; - s8 temp_r25; +s8 BoardComPreferItemCheck(s32 player, s8 item1, s8 item2, s8 item3) { + s8 items[3]; + s8 prefer; - spB[0] = arg1; - spB[1] = arg2; - spB[2] = arg3; - temp_r25 = BoardComPreferItemGet(arg0, spB, 3); - return temp_r25; + items[0] = item1; + items[1] = item2; + items[2] = item3; + prefer = BoardComPreferItemGet(player, items, 3); + return prefer; } -s32 BoardComItemWeightGet(s32 arg0, s32 arg1) { - s32 var_r30; +s32 BoardComItemWeightGet(s32 player, s32 item) { + s32 weight; s32 i; - for (i = 0; i < 0xC; i++) { - if (arg1 == comItemWeightTbl[GWPlayer[arg0].character][i]) { + for (i = 0; i < 12; i++) { + if (item == comItemPreferTbl[GWPlayer[player].character][i]) { break; } } - var_r30 = 0xB - i; - return var_r30; + weight = 12-1-i; + return weight; } -s32 BoardComTutorialItemGet(s32 arg0) { - s32 var_r30; - s32 var_r31; +s32 BoardComUseItemSlotGet(s32 player) { + s32 slot; + s32 item; - if (!GWPlayer[arg0].com) { + if (!GWPlayer[player].com) { return -1; } if (itemUse != -1) { - var_r31 = itemUse; + item = itemUse; } - if (boardTutorialUseItem >= 0 && boardTutorialUseItem <= 0xD) { - var_r31 = boardTutorialUseItem; + if (boardTutorialUseItem >= 0 && boardTutorialUseItem <= 13) { + item = boardTutorialUseItem; boardTutorialUseItem = -1; } - if (var_r31 != -1) { - var_r30 = BoardPlayerItemFind(arg0, var_r31); + if (item != -1) { + slot = BoardPlayerItemFind(player, item); } else { - var_r30 = -1; + slot = -1; } - return var_r30; + return slot; } -s32 BoardComUseItemSet(s32 arg0, s32 arg1) { - if (arg1 == -1) { +s32 BoardComUseItemSet(s32 player, s32 item) { + if (item == -1) { itemUse = -1; return 1; } - if (BoardPlayerItemFind(arg0, arg1) != -1) { - itemUse = arg1; + if (BoardPlayerItemFind(player, item) != -1) { + itemUse = item; return 1; } return 0; } -BOOL BoardComUseItemCheck(s32 arg0) { - s32 var_r31; +BOOL BoardComUseItemCheck(s32 player) { + s32 count; - var_r31 = BoardPlayerItemCount(arg0); - if (var_r31 <= 0) { + count = BoardPlayerItemCount(player); + if (count <= 0) { return FALSE; } - if (ChooseUseItem(arg0) != -1) { + if (ChooseUseItem(player) != -1) { return TRUE; } return FALSE; } -static s32 ChooseUseItem(s32 arg0) { +static s32 ChooseUseItem(s32 player) { s32 i; s32 j; - s32 temp_r29; - s32 var_r28; - s32 temp_r27; - s32 temp_r25; - BOOL (*temp_r24)(s32, s32); - s8 temp_r23; + s32 useItem; + s32 weight; + s32 item; + s32 character; + UseCheckFunc func; + s8 result; - temp_r29 = -1; - temp_r25 = GWPlayer[arg0].character; - var_r28 = 0x64; + useItem = -1; + character = GWPlayer[player].character; + weight = 0x64; for (i = 0; i < 3; i++) { - temp_r27 = GWPlayer[arg0].items[i]; - if (temp_r27 == -1) { + item = GWPlayer[player].items[i]; + if (item == -1) { continue; } - temp_r24 = comItemUseCheckFuncTbl[temp_r27]; - if (!temp_r24) { + func = comItemUseCheckFuncTbl[item]; + if (!func) { continue; } - temp_r23 = temp_r24(arg0, temp_r27); - if (temp_r23) { + result = func(player, item); + if (result) { for (j = 0; j < 0xC; j++) { - if (temp_r27 == comItemWeightTbl[temp_r25][j]) { - if (j < var_r28) { - var_r28 = j; + if (item == comItemPreferTbl[character][j]) { + if (j < weight) { + weight = j; } break; } } } } - if (var_r28 == 0x64) { + if (weight == 0x64) { return -1; } - temp_r29 = comItemWeightTbl[temp_r25][var_r28]; - if (temp_r29 == -1) { + useItem = comItemPreferTbl[character][weight]; + if (useItem == -1) { itemUse = -1; - } else if (BoardPlayerItemFind(arg0, temp_r29) != -1) { - itemUse = temp_r29; + } else if (BoardPlayerItemFind(player, useItem) != -1) { + itemUse = useItem; } - return temp_r29; + return useItem; } -static BOOL CheckMiniUse(s32 arg0, s32 arg1) { - s32 temp_r29; - s32 var_r26; - s32 var_r25; - s32 temp_r28; - s32 temp_r23; - s32 var_r24; - s32 var_r31; - s32 var_r30; +static BOOL CheckMiniUse(s32 player, s32 item) { + s32 space; + s32 star_dist_pipe; + s32 star_dist_no_pipe; + s32 diff; + s32 character; + s32 force_use_mini; + s32 max_dist; + s32 chance; - var_r24 = 0; - temp_r29 = GWPlayer[arg0].space_curr; - temp_r28 = GWPlayer[arg0].diff; - temp_r23 = GWPlayer[arg0].character; - switch (temp_r28) { + force_use_mini = 0; + space = GWPlayer[player].space_curr; + diff = GWPlayer[player].diff; + character = GWPlayer[player].character; + switch (diff) { case 0: - var_r30 = 0x32; + chance = 50; break; case 1: - var_r30 = 0x19; + chance = 25; break; case 2: - var_r30 = 5; + chance = 5; break; case 3: - var_r30 = 0; + chance = 0; break; } - if ((temp_r28 == 0 || temp_r28 == 1) && temp_r23 == 1) { - var_r30 = 7; + if ((diff == 0 || diff == 1) && character == 1) { + chance = 7; } if (GWBoardGet() != 7 && GWBoardGet() != 8) { - var_r26 = BoardComPathReachCheck(temp_r29, 8, 0); - var_r25 = BoardComPathReachCheck(temp_r29, 8, 1); + star_dist_pipe = BoardComPathShortcutLenGet(space, 8, 0); + star_dist_no_pipe = BoardComPathShortcutLenGet(space, 8, 1); } else { - var_r26 = 0x3E7; - var_r25 = BoardComPathW20BestGet(temp_r29, 0x10000000, 0xA); + star_dist_pipe = 0x3E7; + star_dist_no_pipe = BoardComPathBestGetFlag(space, 0x10000000, 10); if ((GWBoardGet() == 8 || GWBoardGet() == 7) && BoardRandMod(0x64) < 0x3C) { - var_r24 = 1; + force_use_mini = 1; } } - switch (GWPlayer[arg0].diff) { + switch (GWPlayer[player].diff) { case 0: - var_r31 = 5; + max_dist = 5; break; case 1: - var_r31 = 7; + max_dist = 7; break; case 2: - var_r31 = 9; + max_dist = 9; break; case 3: - var_r31 = 0xA; + max_dist = 10; break; } - if ((var_r25 < var_r31 || var_r26 < var_r31 || var_r24 != 0) && BoardRandMod(0x64) >= var_r30) { + if ((star_dist_no_pipe < max_dist || star_dist_pipe < max_dist || force_use_mini != 0) && BoardRandMod(0x64) >= chance) { return TRUE; } return FALSE; } -static BOOL CheckMegaUse(s32 arg0, s32 arg1) { - s32 temp_r27; - s32 temp_r26; - s32 temp_r24; - s32 temp_r29; - s16 temp_r25; - s16 var_r28; - s16 temp_r23; - s16 temp_r22; +static BOOL CheckMegaUse(s32 player, s32 item) { + s32 short_len; + s32 character; + s32 space; + s32 diff; + s16 path_len; + s16 max_len; + s16 space_search; + s16 space_other; s16 i; - temp_r29 = GWPlayer[arg0].diff; - temp_r26 = GWPlayer[arg0].character; - switch (temp_r29) { + diff = GWPlayer[player].diff; + character = GWPlayer[player].character; + switch (diff) { case 0: - var_r28 = 5; + max_len = 5; break; case 1: - var_r28 = 7; + max_len = 7; break; case 2: - var_r28 = 9; + max_len = 9; break; case 3: - var_r28 = 0xA; + max_len = 10; break; } - if (((temp_r29 == 0 || temp_r29 == 1) && temp_r26 == 0) || ((temp_r29 == 0 || temp_r29 == 1) && temp_r26 == 5)) { - var_r28 = 8; + if (((diff == 0 || diff == 1) && character == 0) || ((diff == 0 || diff == 1) && character == 5)) { + max_len = 8; } - if (GWBoardGet() != 7 || BoardRandMod(0x64) >= 0x3C) { - temp_r24 = GWPlayer[arg0].space_curr; - temp_r27 = BoardComPathReachCheck(temp_r24, 8, 0); - temp_r23 = GWPlayer[arg0].space_curr; + if (GWBoardGet() != 7 || BoardRandMod(0x64) >= 60) { + space = GWPlayer[player].space_curr; + short_len = BoardComPathShortcutLenGet(space, 8, 0); + space_search = GWPlayer[player].space_curr; for (i = 0; i < 4; i++) { - if (i != arg0) { - temp_r22 = GWPlayer[i].space_curr; - temp_r25 = BoardComPathLenGet(temp_r23, temp_r22); - if (temp_r25 < var_r28 + 0x14 && temp_r25 > 0 && GWTeamGet() && i == BoardPlayerSameTeamFind(arg0)) { + if (i != player) { + space_other = GWPlayer[i].space_curr; + path_len = BoardComPathLenGet(space_search, space_other); + if (path_len < max_len + 20 && path_len > 0 && GWTeamGet() && i == BoardPlayerSameTeamFind(player)) { return FALSE; } } } - if (GWBoardGet() != 7 && GWBoardGet() != 8 && temp_r27 < 0xA && temp_r27 > 0) { + if (GWBoardGet() != 7 && GWBoardGet() != 8 && short_len < 10 && short_len > 0) { return FALSE; } } - if (BoardPlayerItemFind(arg0, arg1) != -1) { + if (BoardPlayerItemFind(player, item) != -1) { return TRUE; } return FALSE; } -static BOOL CheckSparkUse(s32 arg0, s32 arg1) { - s32 temp_r27; - s32 temp_r28; - s32 temp_r26; - s32 temp_r25; - s32 temp_r24; +static BOOL CheckSparkUse(s32 player, s32 item) { + s32 length; + s32 diff; + s32 space_other; + s32 space; + s32 character; s32 i; - s32 var_r30; + s32 chance; - temp_r25 = GWPlayer[arg0].space_curr; - temp_r28 = GWPlayer[arg0].diff; - temp_r24 = GWPlayer[arg0].character; - switch (temp_r28) { + space = GWPlayer[player].space_curr; + diff = GWPlayer[player].diff; + character = GWPlayer[player].character; + switch (diff) { case 0: - var_r30 = 0x32; + chance = 50; break; case 1: - var_r30 = 0x19; + chance = 25; break; case 2: - var_r30 = 5; + chance = 5; break; case 3: - var_r30 = 0; + chance = 0; break; } - if ((temp_r28 == 0 || temp_r28 == 1) && temp_r24 == 7) { - var_r30 = 7; + if ((diff == 0 || diff == 1) && character == 7) { + chance = 7; } for (i = 0; i < 4; i++) { - if (i != arg0) { - temp_r26 = GWPlayer[i].space_curr; - temp_r27 = BoardComPathLenGet(temp_r26, temp_r25); - if (temp_r27 > 0 && temp_r27 <= 0xF && BoardPlayerItemFind(arg0, arg1) != -1 && BoardRandMod(0x64) >= var_r30) { + if (i != player) { + space_other = GWPlayer[i].space_curr; + length = BoardComPathLenGet(space_other, space); + if (length > 0 && length <= 15 && BoardPlayerItemFind(player, item) != -1 && BoardRandMod(0x64) >= chance) { return TRUE; } } @@ -418,260 +419,260 @@ static BOOL CheckSparkUse(s32 arg0, s32 arg1) { return FALSE; } -static BOOL CheckBoardChangeUse(s32 arg0, s32 arg1) { - s32 temp_r25; - s32 temp_r24; - s32 temp_r23; - s32 temp_r22; - s32 temp_r21; - s32 temp_r26; - s32 var_r30; - s32 var_r29; - s32 var_r27; +static BOOL CheckBoardChangeUse(s32 player, s32 item) { + s32 diff; + s32 character; + s32 mini_len; + s32 non_mini_len; + s32 search_space; + s32 space; + s32 length_min; + s32 length; + s32 chance; s32 i; - temp_r25 = GWPlayer[arg0].diff; - temp_r24 = GWPlayer[arg0].character; - switch (temp_r25) { + diff = GWPlayer[player].diff; + character = GWPlayer[player].character; + switch (diff) { case 0: - var_r27 = 0x32; + chance = 0x32; break; case 1: - var_r27 = 0x19; + chance = 0x19; break; case 2: - var_r27 = 5; + chance = 5; break; case 3: - var_r27 = 0; + chance = 0; break; } - if (((arg1 == 4 && temp_r24 == 4) || (arg1 == 5 && (temp_r24 == 6 || temp_r24 == 3))) && (temp_r25 == 0 || temp_r25 == 1)) { - var_r27 = 7; + if (((item == 4 && character == 4) || (item == 5 && (character == 6 || character == 3))) && (diff == 0 || diff == 1)) { + chance = 7; } - var_r30 = 0x3E7; + length_min = 999; for (i = 0; i < 4; i++) { - if (arg0 == i) { + if (player == i) { continue; } - temp_r21 = GWPlayer[i].space_curr; - if (!GWTeamGet() || i != BoardPlayerSameTeamFind(arg0)) { - temp_r26 = GWPlayer[i].space_curr; + search_space = GWPlayer[i].space_curr; + if (!GWTeamGet() || i != BoardPlayerSameTeamFind(player)) { + space = GWPlayer[i].space_curr; if (GWBoardGet() == 7) { - if (BoardComPathW20BestGet(temp_r21, 0x10000000, 0xA) != -1) { - var_r29 = 0xA; + if (BoardComPathBestGetFlag(search_space, 0x10000000, 10) != -1) { + length = 10; } else { - var_r29 = 0; + length = 0; } } else if (GWBoardGet() == 8) { - if (BoardComPathW20BestGet(temp_r21, 0x200000, 0xA) != -1 || BoardComPathW20BestGet(temp_r21, 0x400000, 0xA) != -1) { - var_r29 = 0xA; + if (BoardComPathBestGetFlag(search_space, 0x200000, 10) != -1 || BoardComPathBestGetFlag(search_space, 0x400000, 10) != -1) { + length = 10; } else { - var_r29 = 0; + length = 0; } } else { - var_r29 = BoardComPathReachCheck(temp_r26, 8, 0); + length = BoardComPathShortcutLenGet(space, 8, 0); } - if (var_r29 != 0 && var_r29 < var_r30) { - var_r30 = var_r29; + if (length != 0 && length < length_min) { + length_min = length; } } } - if ((var_r30 > 0xF && var_r30 != 0x3E7) || (GWTeamGet() && i == BoardPlayerSameTeamFind(arg0))) { + if ((length_min > 0xF && length_min != 999) || (GWTeamGet() && i == BoardPlayerSameTeamFind(player))) { return FALSE; } - temp_r26 = GWPlayer[arg0].space_curr; - temp_r23 = BoardComPathReachCheck(temp_r26, 8, 0); - temp_r22 = BoardComPathReachCheck(temp_r26, 8, 1); - if (BoardPlayerItemFind(arg0, arg1) != -1 && BoardRandMod(0x64) >= var_r27) { - if ((temp_r23 == 0 || temp_r22 == 0) && var_r30 == 0x3E7) { + space = GWPlayer[player].space_curr; + mini_len = BoardComPathShortcutLenGet(space, 8, 0); + non_mini_len = BoardComPathShortcutLenGet(space, 8, 1); + if (BoardPlayerItemFind(player, item) != -1 && BoardRandMod(0x64) >= chance) { + if ((mini_len == 0 || non_mini_len == 0) && length_min == 999) { return TRUE; } - if (temp_r23 > var_r30 || temp_r22 > var_r30) { + if (mini_len > length_min || non_mini_len > length_min) { return TRUE; } - if (temp_r23 > 0xA || temp_r22 > 0xA) { + if (mini_len > 10 || non_mini_len > 10) { return TRUE; } } return FALSE; } -BOOL CheckSwapUse(s32 arg0, s32 arg1) { - s32 temp_r27; - s32 temp_r26; - s32 temp_r25; - s32 var_r30; - s32 var_r29; +static BOOL CheckSwapUse(s32 player, s32 item) { + s32 diff; + s32 team_player; + s32 character; + s32 item_count; + s32 chance; s32 i; - temp_r27 = GWPlayer[arg0].diff; - temp_r25 = GWPlayer[arg0].character; - switch (temp_r27) { + diff = GWPlayer[player].diff; + character = GWPlayer[player].character; + switch (diff) { case 0: - var_r29 = 0x32; + chance = 0x32; break; case 1: - var_r29 = 0x19; + chance = 0x19; break; case 2: - var_r29 = 5; + chance = 5; break; case 3: - var_r29 = 0; + chance = 0; break; } - if ((temp_r27 == 0 || temp_r27 == 1) && temp_r25 == 2) { - var_r29 = 7; + if ((diff == 0 || diff == 1) && character == 2) { + chance = 7; } - for (var_r30 = i = 0; i < 4; i++) { - if (i != arg0) { - var_r30 += BoardPlayerItemCount(i); + for (item_count = i = 0; i < 4; i++) { + if (i != player) { + item_count += BoardPlayerItemCount(i); } } - if (var_r30 == 0) { + if (item_count == 0) { return FALSE; } if (GWTeamGet()) { - temp_r26 = BoardPlayerSameTeamFind(arg0); - for (var_r30 = i = 0; i < 4; i++) { - if (temp_r26 != i && i != arg0) { - var_r30 += BoardPlayerItemCount(i); + team_player = BoardPlayerSameTeamFind(player); + for (item_count = i = 0; i < 4; i++) { + if (team_player != i && i != player) { + item_count += BoardPlayerItemCount(i); } } - if (var_r30 == 0) { + if (item_count == 0) { return FALSE; } } - if (BoardPlayerItemFind(arg0, arg1) != -1 && BoardRandMod(0x64) >= var_r29) { + if (BoardPlayerItemFind(player, item) != -1 && BoardRandMod(0x64) >= chance) { return TRUE; } return FALSE; } -static BOOL CheckBooUse(s32 arg0, s32 arg1) { - if (BoardPlayerCoinsGet(arg0) < 5) { +static BOOL CheckBooUse(s32 player, s32 item) { + if (BoardPlayerCoinsGet(player) < 5) { return FALSE; } - if (BoardBooComUseCheck(arg0) == 0) { + if (BoardBooComUseCheck(player) == 0) { return FALSE; } - if (BoardPlayerItemFind(arg0, arg1) == -1) { + if (BoardPlayerItemFind(player, item) == -1) { return FALSE; } return TRUE; } -static BOOL CheckLampUse(s32 arg0, s32 arg1) { - if ((BoardPlayerCoinsGet(arg0) >= 0x14 || GWSystem.last5_effect == 4) && BoardPlayerItemFind(arg0, arg1) != -1) { +static BOOL CheckLampUse(s32 player, s32 item) { + if ((BoardPlayerCoinsGet(player) >= 0x14 || GWSystem.last5_effect == 4) && BoardPlayerItemFind(player, item) != -1) { return TRUE; } return FALSE; } -s32 BoardComJunctionInputGet(s32 arg0, Vec *arg1, s32 arg2, float *arg3) { - Vec sp28; - Vec sp1C; - Vec sp10; - float var_f30; - float var_f29; - float var_f31; - s32 var_r29; - s32 var_r27; - s32 temp_r26; - s32 var_r24; - s32 var_r23; - s32 var_r21; +s32 BoardComJunctionInputGet(s32 item, Vec *input, s32 num_dirs, float *dirs) { + Vec pos_next; + Vec pos_junction; + Vec dir; + float dist_min; + float dist; + float angle; + s32 chance_random; + s32 best_dir; + s32 board; + s32 path_unknown; + s32 choose_path; + s32 dir_random; s32 i; - s16 var_r28; - s16 temp_r25; - s16 spC; + s16 space_next; + s16 space; + s16 roll; - temp_r26 = GWBoardGet(); - var_r24 = 0; - temp_r25 = GWPlayer[arg0].space_curr; - var_r28 = -1; - spC = GWPlayer[arg0].roll; - switch (GWPlayer[arg0].diff) { + board = GWBoardGet(); + path_unknown = 0; + space = GWPlayer[item].space_curr; + space_next = -1; + roll = GWPlayer[item].roll; + switch (GWPlayer[item].diff) { case 3: - var_r29 = 0; + chance_random = 0; break; case 2: - var_r29 = 0; + chance_random = 0; break; case 1: - var_r29 = 0xA; + chance_random = 10; break; default: case 0: - var_r29 = 0x1E; + chance_random = 0x1E; break; } - if (BoardRandMod(0x64) >= var_r29) { - var_r23 = 1; + if (BoardRandMod(0x64) >= chance_random) { + choose_path = 1; } else { - var_r23 = 0; + choose_path = 0; } - if (var_r23 != 0) { - if (temp_r26 >= 0 && temp_r26 <= 5) { - var_r28 = BoardComPathBestGet(temp_r25); - } else if (temp_r26 == 7) { - var_r28 = BoardComPathW20BestGet(temp_r25, 0x10000000, 0xA); + if (choose_path != 0) { + if (board >= 0 && board <= 5) { + space_next = BoardComPathBestGet(space); + } else if (board == 7) { + space_next = BoardComPathBestGetFlag(space, 0x10000000, 10); } - if (var_r28 == -1) { - var_r24 = 1; + if (space_next == -1) { + path_unknown = 1; } else { - BoardSpacePosGet(0, temp_r25, &sp1C); - BoardSpacePosGet(0, var_r28, &sp28); - PSVECSubtract(&sp28, &sp1C, &sp10); - var_f31 = BoardDAngleCalc(90.0 - 180.0 * (atan2(sp10.z, sp10.x) / M_PI)); - if (var_f31 < 0.0f) { - var_f31 += 360.0f; + BoardSpacePosGet(0, space, &pos_junction); + BoardSpacePosGet(0, space_next, &pos_next); + PSVECSubtract(&pos_next, &pos_junction, &dir); + angle = BoardDAngleCalc(90.0 - 180.0 * (atan2(dir.z, dir.x) / M_PI)); + if (angle < 0.0f) { + angle += 360.0f; } - if (var_f31 > 360.0f) { - var_f31 -= 360.0f; + if (angle > 360.0f) { + angle -= 360.0f; } } } - if (var_r24 != 0) { - var_r21 = BoardRandMod(arg2); - var_f31 = arg3[var_r21]; + if (path_unknown != 0) { + dir_random = BoardRandMod(num_dirs); + angle = dirs[dir_random]; } - var_f30 = 999.0f; - for (var_r27 = i = 0; i < 4; i++) { - var_f29 = (comJunctionDirTbl[i].x - var_f31 < 0.0f) - ? -(comJunctionDirTbl[i].x - var_f31) - : (comJunctionDirTbl[i].x - var_f31); - if (var_f29 < var_f30) { - var_r27 = i; - var_f30 = var_f29; + dist_min = 999.0f; + for (best_dir = i = 0; i < 4; i++) { + dist = (comJunctionDirTbl[i].x - angle < 0.0f) + ? -(comJunctionDirTbl[i].x - angle) + : (comJunctionDirTbl[i].x - angle); + if (dist < dist_min) { + best_dir = i; + dist_min = dist; } } - arg1->x = comJunctionDirTbl[var_r27].y; - arg1->z = comJunctionDirTbl[var_r27].z; - arg1->y = 0.0f; + input->x = comJunctionDirTbl[best_dir].y; + input->z = comJunctionDirTbl[best_dir].z; + input->y = 0.0f; return 0; } -s32 BoardComBestPlayerFind(void) { - s32 temp_r30; - s32 var_r29; - s32 var_r28; - s32 var_r27; +s32 BoardComFarPlayerFind(void) { + s32 len; + s32 max_len; + s32 far_player; + s32 space; s32 i; if (_CheckFlag(0x1000B) != 0) { return -1; } - var_r28 = -1; - var_r29 = -1; + far_player = -1; + max_len = -1; for (i = 0; i < 4; i++) { - var_r27 = GWPlayer[i].space_curr; - temp_r30 = BoardComPathReachCheck(var_r27, 8, 0); - if (temp_r30 > 0 && temp_r30 > var_r29) { - var_r29 = temp_r30; - var_r28 = i; + space = GWPlayer[i].space_curr; + len = BoardComPathShortcutLenGet(space, 8, 0); + if (len > 0 && len > max_len) { + max_len = len; + far_player = i; } } - return var_r28; + return far_player; } diff --git a/src/game/board/com_path.c b/src/game/board/com_path.c index c6b480a1..c4917348 100755 --- a/src/game/board/com_path.c +++ b/src/game/board/com_path.c @@ -5,20 +5,19 @@ typedef struct { /* 0x00 */ struct { - u8 unk00_field0 : 1; - u8 unk00_field1 : 1; - s8 unk00_field2 : 1; - s8 unk00_field3 : 1; - u8 unk00_field4 : 1; - u8 unk00_field5 : 1; + u8 used : 1; + u8 star : 1; + u8 pipe : 1; + u8 shop : 1; + u8 boo : 1; + u8 lottery : 1; }; - /* 0x01 */ s8 unk01; - /* 0x02 */ s8 unk02; - /* 0x03 */ s8 unk03; - /* 0x04 */ s16 unk04; - /* 0x06 */ s16 unk06[2]; // array size unknown - /* 0x0A */ char unk0A[0x3C]; - /* 0x46 */ s16 unk46[5]; + /* 0x01 */ s8 num_links; + /* 0x02 */ s8 num_children; + /* 0x03 */ s8 max_len; + /* 0x04 */ s16 start; + /* 0x06 */ s16 children[32]; + /* 0x46 */ s16 links[BOARD_SPACE_LINKMAX+1]; } PathNode; // Size 0x50 static PathNode *SearchPathNodeSpace(s16 arg0); @@ -30,7 +29,7 @@ static BOOL CheckPathSpace(BoardSpace *arg0); static s16 FindValidLink(BoardSpace *arg0); static BOOL CheckEndSpace(BoardSpace *arg0, PathNode *arg1); static BOOL CheckPath(PathNode *arg0); -static BOOL CheckW20Path(PathNode *arg0, u32 arg1); +static BOOL CheckPathFlag(PathNode *arg0, u32 arg1); static PathNode pathNodeData[16]; static PathNode *candidateNodes[16]; @@ -40,89 +39,89 @@ static s16 startPathSpace[16]; static s16 numCandidates; static s16 childNodeCnt; -static PathNode *SearchPathNodeSpace(s16 arg0) { - PathNode *var_r31; +static PathNode *SearchPathNodeSpace(s16 space) { + PathNode *node; s32 i; - for (var_r31 = pathNodeData, i = 0; i < 16; i++, var_r31++) { - if (var_r31->unk04 == arg0) { + for (node = pathNodeData, i = 0; i < 16; i++, node++) { + if (node->start == space) { break; } } if (i == 16) { - var_r31 = NULL; + node = NULL; } - return var_r31; + return node; } -static s16 InitPathNode(PathNode *arg0) { - BoardSpace *temp_r30; - PathNode *var_r23; - s32 var_r29; +static s16 InitPathNode(PathNode *node) { + BoardSpace *space_ptr; + PathNode *child; + s32 done; s16 i; - s16 var_r27; - s16 var_r26; - s16 var_r25; - s16 var_r24; + s16 space; + s16 num_links; + s16 path_len; + s16 space_link; - var_r24 = arg0->unk04; - var_r29 = 0; - arg0->unk02 = var_r25 = 0; + space_link = node->start; + done = 0; + node->num_children = path_len = 0; do { - var_r27 = var_r24; - temp_r30 = BoardSpaceGet(0, var_r27); - arg0->unk06[arg0->unk02] = var_r27; - var_r23 = FindChildNode(var_r27, arg0); - if (var_r23) { - AddValidLinks(temp_r30, arg0); - arg0->unk01 = 1; - arg0->unk46[0] = var_r27; + space = space_link; + space_ptr = BoardSpaceGet(0, space); + node->children[node->num_children] = space; + child = FindChildNode(space, node); + if (child) { + AddValidLinks(space_ptr, node); + node->num_links = 1; + node->links[0] = space; for (i = 1; i < 5; i++) { - arg0->unk46[i] = 0; + node->links[i] = 0; } return 0; } - if (temp_r30->link_cnt == 0) { - var_r26 = 0; - var_r29 = 1; + if (space_ptr->link_cnt == 0) { + num_links = 0; + done = 1; } else { - var_r26 = GetNumValidLinks(temp_r30, arg0); - if (var_r26 == 1) { - var_r24 = FindValidLink(temp_r30); + num_links = GetNumValidLinks(space_ptr, node); + if (num_links == 1) { + space_link = FindValidLink(space_ptr); } else { - var_r29 = 1; + done = 1; } } - if (CheckEndSpace(temp_r30, arg0)) { - var_r25++; - if (var_r25 >= arg0->unk03) { - var_r26 = 0; - var_r29 = 1; + if (CheckEndSpace(space_ptr, node)) { + path_len++; + if (path_len >= node->max_len) { + num_links = 0; + done = 1; } } - arg0->unk02++; - } while (var_r29 == 0); - AddValidLinks(temp_r30, arg0); - arg0->unk01 = var_r26; - return arg0->unk03 - var_r25; + node->num_children++; + } while (done == 0); + AddValidLinks(space_ptr, node); + node->num_links = num_links; + return node->max_len - path_len; } static PathNode *FindChildNode(s16 arg0, PathNode *arg1) { - PathNode *temp_r31; - s32 var_r28; + PathNode *node; + s32 node_idx; s32 i; s32 j; - var_r28 = NODE_INDEX(arg1); - if (var_r28 == -1) { + node_idx = NODE_INDEX(arg1); + if (node_idx == -1) { return NULL; } for (i = 0; i < childNodeCnt; i++) { - temp_r31 = &pathNodeData[i]; - if (temp_r31 != arg1) { - for (j = 0; j < temp_r31->unk02; j++) { - if (arg0 == temp_r31->unk06[j]) { - return temp_r31; + node = &pathNodeData[i]; + if (node != arg1) { + for (j = 0; j < node->num_children; j++) { + if (arg0 == node->children[j]) { + return node; } } } @@ -130,85 +129,85 @@ static PathNode *FindChildNode(s16 arg0, PathNode *arg1) { return NULL; } -static s32 GetNumValidLinks(BoardSpace *arg0, PathNode *arg1) { - BoardSpace *var_r28; +static s32 GetNumValidLinks(BoardSpace *space, PathNode *node) { + BoardSpace *link_space; s16 i; - s16 var_r29; + s16 invalid_links; - for (var_r29 = i = 0; i < arg0->link_cnt; i++) { - var_r28 = BoardSpaceGet(0, arg0->link[i]); - if (!CheckPathSpace(var_r28)) { - var_r29++; + for (invalid_links = i = 0; i < space->link_cnt; i++) { + link_space = BoardSpaceGet(0, space->link[i]); + if (!CheckPathSpace(link_space)) { + invalid_links++; } } - if (var_r29 >= arg0->link_cnt) { + if (invalid_links >= space->link_cnt) { return 0; } - return arg0->link_cnt - var_r29; + return space->link_cnt - invalid_links; } -static void AddValidLinks(BoardSpace *arg0, PathNode *arg1) { - BoardSpace *var_r27; - s16 var_r30; - s16 var_r31; +static void AddValidLinks(BoardSpace *space, PathNode *node) { + BoardSpace *link_space; + s16 i; + s16 link; - for (var_r31 = var_r30 = 0; var_r30 < arg0->link_cnt; var_r30++) { - var_r27 = BoardSpaceGet(0, arg0->link[var_r30]); - if (CheckPathSpace(var_r27)) { - arg1->unk46[var_r31] = arg0->link[var_r30]; - var_r31++; + for (link = i = 0; i < space->link_cnt; i++) { + link_space = BoardSpaceGet(0, space->link[i]); + if (CheckPathSpace(link_space)) { + node->links[link] = space->link[i]; + link++; } } - for (; var_r31 < 5; var_r31++) { - arg1->unk46[var_r31] = 0; + for (; link < BOARD_SPACE_LINKMAX+1; link++) { + node->links[link] = 0; } } -static BOOL CheckPathSpace(BoardSpace *arg0) { - if ((arg0->flag & 0x02000000) || (arg0->flag & 0x04000000)) { +static BOOL CheckPathSpace(BoardSpace *space) { + if ((space->flag & 0x02000000) || (space->flag & 0x04000000)) { return FALSE; } else { return TRUE; } } -static s16 FindValidLink(BoardSpace *arg0) { - s16 var_r29; +static s16 FindValidLink(BoardSpace *space) { + s16 space_link; s16 i; - BoardSpace *temp_r30; + BoardSpace *space_ptr; - for (var_r29 = i = 0; i < arg0->link_cnt; i++) { - var_r29 = arg0->link[i]; - temp_r30 = BoardSpaceGet(0, var_r29); - if (CheckPathSpace(temp_r30)) { + for (space_link = i = 0; i < space->link_cnt; i++) { + space_link = space->link[i]; + space_ptr = BoardSpaceGet(0, space_link); + if (CheckPathSpace(space_ptr)) { break; } } - return var_r29; + return space_link; } -static BOOL CheckEndSpace(BoardSpace *arg0, PathNode *arg1) { - if (arg0->flag & 0x80000000) { +static BOOL CheckEndSpace(BoardSpace *space, PathNode *node) { + if (space->flag & 0x80000000) { } - if (arg0->flag & 0x4000000) { + if (space->flag & 0x4000000) { } - if (arg0->flag & 0x2000000) { + if (space->flag & 0x2000000) { } - if (arg0->flag & 0x180000) { - arg1->unk00_field3 = 1; + if (space->flag & 0x180000) { + node->shop = 1; } - if (arg0->flag & 0x48000000) { - arg1->unk00_field4 = 1; + if (space->flag & 0x48000000) { + node->boo = 1; } - if (arg0->flag & 0x20000000) { - arg1->unk00_field2 = 1; + if (space->flag & 0x20000000) { + node->pipe = 1; } - if (arg0->flag & 0x10000000) { - arg1->unk00_field5 = 1; + if (space->flag & 0x10000000) { + node->lottery = 1; } - switch (arg0->type) { + switch (space->type) { case 8: - arg1->unk00_field1 = 1; + node->star = 1; return FALSE; case 10: return FALSE; @@ -218,151 +217,151 @@ static BOOL CheckEndSpace(BoardSpace *arg0, PathNode *arg1) { return TRUE; } -static inline void ComPathInlineFunc02(PathNode *arg0) { +static inline void PushCandidate(PathNode *node) { if (numCandidates < 16) { - candidateNodes[numCandidates] = arg0; + candidateNodes[numCandidates] = node; numCandidates++; } } -static inline PathNode *ComPathInlineFunc03(void) { - PathNode *ret; +static inline PathNode *PopCandidate(void) { + PathNode *node; numCandidates--; if (numCandidates < 0) { return NULL; } else { - ret = candidateNodes[numCandidates]; + node = candidateNodes[numCandidates]; candidateNodes[numCandidates] = NULL; - return ret; + return node; } } -static inline PathNode *ComPathInlineFunc04(s16 arg0, s16 arg1) { - PathNode *var_r26; +static inline PathNode *CreateNode(s16 start, s16 len) { + PathNode *node; s32 i; - var_r26 = pathNodeData; - for (i = 0; i < 16; i++, var_r26++) { - if (var_r26->unk00_field0 == 0) { + node = pathNodeData; + for (i = 0; i < 16; i++, node++) { + if (node->used == 0) { break; } } if (i == 16) { return NULL; } else { - var_r26->unk00_field0 = 1; - var_r26->unk04 = arg0; - var_r26->unk03 = arg1; + node->used = 1; + node->start = start; + node->max_len = len; childNodeCnt++; - return var_r26; + return node; } } -static inline void ComPathInlineFunc05(s16 arg0, s16 arg1) { - PathNode *var_r28; - s32 var_r24; - s32 temp_r17; +static inline void PopulateCandidates(s16 start, s16 len) { + PathNode *node; + s32 num_paths; + s32 lookahead; s32 i; - PathNode *var_r23; + PathNode *new_node; memset(pathNodeData, 0, sizeof(pathNodeData)); memset(candidateNodes, 0, sizeof(candidateNodes)); numCandidates = 0; childNodeCnt = 0; - var_r23 = ComPathInlineFunc04(arg0, arg1); - ComPathInlineFunc02(var_r23); - var_r24 = 1; - temp_r17 = arg1; + new_node = CreateNode(start, len); + PushCandidate(new_node); + num_paths = 1; + lookahead = len; while (1) { - if (var_r24 <= 0) { + if (num_paths <= 0) { break; } - var_r28 = ComPathInlineFunc03(); - if (!var_r28) { + node = PopCandidate(); + if (!node) { break; } - var_r24--; - temp_r17 = InitPathNode(var_r28); - if (temp_r17 != 0) { - if (var_r28->unk01 <= 1) { + num_paths--; + lookahead = InitPathNode(node); + if (lookahead != 0) { + if (node->num_links <= 1) { break; } - for (i = 0; i < var_r28->unk01; var_r24++, i++) { - var_r23 = ComPathInlineFunc04(var_r28->unk46[i], temp_r17); - if (!var_r23) { + for (i = 0; i < node->num_links; num_paths++, i++) { + new_node = CreateNode(node->links[i], lookahead); + if (!new_node) { break; } - ComPathInlineFunc02(var_r23); + PushCandidate(new_node); } } } } -s16 BoardComPathReachCheck(s16 arg0, u32 arg1, s32 arg2) { - s16 sp80[10]; - s16 sp6C[10]; - PathNode *sp68; - PathNode *var_r29; - s16 sp1C; - s16 sp1A; - s16 temp_r20; - s16 var_r22; - s16 var_r28; +s16 BoardComPathShortcutLenGet(s16 space, u32 type, s32 block_pipe) { + s16 len_tbl[10]; + s16 node_tbl[10]; + PathNode *node_link; + PathNode *node; + s16 node_idx; + s16 node_start_idx; + s16 node_idx_link; + s16 num_nodes; + s16 len; s16 i; - s32 var_r19; + s32 search_child; if (_CheckFlag(0x1000B)) { return 0; } - ComPathInlineFunc05(arg0, 0x1E); + PopulateCandidates(space, 30); memset(startPathSpaceSearch, 0, sizeof(startPathSpaceSearch)); - memset(sp80, 0, sizeof(sp80)); + memset(len_tbl, 0, sizeof(len_tbl)); memset(candidateNodes, 0, sizeof(candidateNodes)); numCandidates = 0; - var_r29 = SearchPathNodeSpace(arg0); - sp1A = NODE_INDEX(var_r29); - ComPathInlineFunc02(var_r29); - var_r28 = 0; - var_r22 = 0; - startPathSpaceSearch[sp1A] = var_r28; - var_r19 = 0; + node = SearchPathNodeSpace(space); + node_start_idx = NODE_INDEX(node); + PushCandidate(node); + len = 0; + num_nodes = 0; + startPathSpaceSearch[node_start_idx] = len; + search_child = 0; while (1) { - var_r29 = ComPathInlineFunc03(); - sp1C = NODE_INDEX(var_r29); - if (sp1C == -1) { - if (var_r22 != 0) { + node = PopCandidate(); + node_idx = NODE_INDEX(node); + if (node_idx == -1) { + if (num_nodes != 0) { break; } } else { - var_r19 = 0; - var_r28 = startPathSpaceSearch[sp1C]; - for (i = 0; i < var_r29->unk02; i++) { - if (arg2 == 0 && (BoardSpaceFlagGet(0, var_r29->unk06[i]) & 0x20000000)) { + search_child = 0; + len = startPathSpaceSearch[node_idx]; + for (i = 0; i < node->num_children; i++) { + if (block_pipe == 0 && (BoardSpaceFlagGet(0, node->children[i]) & 0x20000000)) { break; } - if (arg1 == BoardSpaceTypeGet(0, var_r29->unk06[i])) { - sp80[var_r22] = var_r28; - sp6C[var_r22] = sp1C; - if (++var_r22 < 0xA) { - var_r19 = 1; + if (type == BoardSpaceTypeGet(0, node->children[i])) { + len_tbl[num_nodes] = len; + node_tbl[num_nodes] = node_idx; + if (++num_nodes < 10) { + search_child = 1; break; } else { - goto return_r28; + goto done; } } - if (var_r28++ >= 0x1E) { - var_r19 = 1; + if (len++ >= 30) { + search_child = 1; break; } } - if (var_r19 == 0) { - for (i = 0; i < var_r29->unk01; i++) { - sp68 = SearchPathNodeSpace(var_r29->unk46[i]); - temp_r20 = NODE_INDEX(sp68); - if (temp_r20 != -1 && temp_r20 >= 0 && temp_r20 < 16) { - startPathSpaceSearch[temp_r20] = var_r28; - ComPathInlineFunc02(sp68); + if (search_child == 0) { + for (i = 0; i < node->num_links; i++) { + node_link = SearchPathNodeSpace(node->links[i]); + node_idx_link = NODE_INDEX(node_link); + if (node_idx_link != -1 && node_idx_link >= 0 && node_idx_link < 16) { + startPathSpaceSearch[node_idx_link] = len; + PushCandidate(node_link); } } } @@ -370,89 +369,89 @@ s16 BoardComPathReachCheck(s16 arg0, u32 arg1, s32 arg2) { } return 0; } -return_r28: - var_r28 = 10000; +done: + len = 10000; for (i = 0; i < 10; i++) { - if (var_r28 > sp80[i] && sp80[i] != 0) { - var_r28 = sp80[i]; + if (len > len_tbl[i] && len_tbl[i] != 0) { + len = len_tbl[i]; } } - return var_r28; + return len; } -s16 BoardComPathBestGet(s16 arg0) { - PathNode *sp30; - PathNode *sp2C; +s16 BoardComPathBestGet(s16 space) { + PathNode *link_node; + PathNode *node; s32 i; - ComPathInlineFunc05(arg0, 0x1E); - sp2C = SearchPathNodeSpace(arg0); - if (sp2C->unk00_field1 != 0) { + PopulateCandidates(space, 30); + node = SearchPathNodeSpace(space); + if (node->star != 0) { return -1; } - if (sp2C->unk01 <= 1) { + if (node->num_links <= 1) { return -1; } - for (i = 0; i < sp2C->unk01; i++) { - sp30 = SearchPathNodeSpace(sp2C->unk46[i]); - if (sp30 && CheckPath(sp30)) { - return sp2C->unk46[i]; + for (i = 0; i < node->num_links; i++) { + link_node = SearchPathNodeSpace(node->links[i]); + if (link_node && CheckPath(link_node)) { + return node->links[i]; } } return -1; } -s16 BoardComPathLenGet(s16 arg0, s16 arg1) { - PathNode *var_r30; - s16 temp_r21; - s16 var_r25; +s16 BoardComPathLenGet(s16 space, s16 space_other) { + PathNode *node; + s16 link_node_idx; + s16 len; s16 sp16; - s16 sp14; - s16 sp12; + s16 node_idx; + s16 node_start_idx; s16 i; - s32 sp5C; - PathNode *sp58; + s32 search_child; + PathNode *link_node; - ComPathInlineFunc05(arg0, 0x1E); + PopulateCandidates(space, 30); memset(startPathSpace, 0, sizeof(startPathSpace)); memset(candidateNodes, 0, sizeof(candidateNodes)); numCandidates = 0; - var_r30 = SearchPathNodeSpace(arg0); - sp12 = NODE_INDEX(var_r30); - ComPathInlineFunc02(var_r30); - var_r25 = 0; + node = SearchPathNodeSpace(space); + node_start_idx = NODE_INDEX(node); + PushCandidate(node); + len = 0; sp16 = 0; - startPathSpace[sp12] = var_r25; - sp5C = 0; + startPathSpace[node_start_idx] = len; + search_child = 0; while (1) { - var_r30 = ComPathInlineFunc03(); - sp14 = NODE_INDEX(var_r30); - if (sp14 == -1) { + node = PopCandidate(); + node_idx = NODE_INDEX(node); + if (node_idx == -1) { if (sp16 != 0) { break; } } else { - sp5C = 0; - var_r25 = startPathSpace[sp14]; - for (i = 0; i < var_r30->unk02; i++) { - if (BoardSpaceFlagGet(0, var_r30->unk06[i]) & 0x20000000) { + search_child = 0; + len = startPathSpace[node_idx]; + for (i = 0; i < node->num_children; i++) { + if (BoardSpaceFlagGet(0, node->children[i]) & 0x20000000) { break; } - if (var_r30->unk06[i] == arg1) { - goto return_r25; + if (node->children[i] == space_other) { + goto done; } - if (var_r25++ >= 0x1E) { - sp5C = 1; + if (len++ >= 30) { + search_child = 1; break; } } - if (sp5C == 0) { - for (i = 0; i < var_r30->unk01; i++) { - sp58 = SearchPathNodeSpace(var_r30->unk46[i]); - temp_r21 = NODE_INDEX(sp58); - if (temp_r21 != -1 && temp_r21 >= 0 && temp_r21 < 16) { - startPathSpace[temp_r21] = var_r25; - ComPathInlineFunc02(sp58); + if (search_child == 0) { + for (i = 0; i < node->num_links; i++) { + link_node = SearchPathNodeSpace(node->links[i]); + link_node_idx = NODE_INDEX(link_node); + if (link_node_idx != -1 && link_node_idx >= 0 && link_node_idx < 16) { + startPathSpace[link_node_idx] = len; + PushCandidate(link_node); } } } @@ -460,84 +459,84 @@ s16 BoardComPathLenGet(s16 arg0, s16 arg1) { } return 0; } -return_r25: - return var_r25; +done: + return len; } -static BOOL CheckPath(PathNode *arg0) { +static BOOL CheckPath(PathNode *node) { s32 i; - PathNode *sp1C; + PathNode *link; - if (arg0->unk00_field1 != 0) { + if (node->star != 0) { return TRUE; } - if (arg0->unk01 <= 1) { + if (node->num_links <= 1) { return FALSE; } - for (i = 0; i < arg0->unk01; i++) { - sp1C = SearchPathNodeSpace(arg0->unk46[i]); - if (sp1C && CheckPath(sp1C)) { + for (i = 0; i < node->num_links; i++) { + link = SearchPathNodeSpace(node->links[i]); + if (link && CheckPath(link)) { return TRUE; } } return FALSE; } -s16 BoardComPathW20BestGet(s16 arg0, u32 arg1, s16 arg2) { - PathNode *var_r31; - PathNode *sp38; +s16 BoardComPathBestGetFlag(s16 space, u32 flag, s16 len) { + PathNode *node; + PathNode *node_link; s32 i; - ComPathInlineFunc05(arg0, arg2); - var_r31 = SearchPathNodeSpace(arg0); - if (arg1 & 0x180000) { - if (var_r31->unk00_field1 != 0) { + PopulateCandidates(space, len); + node = SearchPathNodeSpace(space); + if (flag & 0x180000) { + if (node->star != 0) { return -1; } - } else if (arg1 & 0x08000000) { - if (var_r31->unk00_field4 != 0) { + } else if (flag & 0x08000000) { + if (node->boo != 0) { return -1; } - } else if (arg1 & 0x10000000) { - if (var_r31->unk00_field5 != 0) { + } else if (flag & 0x10000000) { + if (node->lottery != 0) { return -1; } } - if (var_r31->unk01 <= 1) { + if (node->num_links <= 1) { return -1; } - for (i = 0; i < var_r31->unk01; i++) { - sp38 = SearchPathNodeSpace(var_r31->unk46[i]); - if (sp38 && CheckW20Path(sp38, arg1)) { - return var_r31->unk46[i]; + for (i = 0; i < node->num_links; i++) { + node_link = SearchPathNodeSpace(node->links[i]); + if (node_link && CheckPathFlag(node_link, flag)) { + return node->links[i]; } } return -1; } -static BOOL CheckW20Path(PathNode *arg0, u32 arg1) { +static BOOL CheckPathFlag(PathNode *node, u32 flag) { s32 i; - PathNode *sp1C; + PathNode *link_node; - if (arg1 & 0x180000) { - if (arg0->unk00_field1 != 0) { + if (flag & 0x180000) { + if (node->star != 0) { return TRUE; } - } else if (arg1 & 0x08000000) { - if (arg0->unk00_field4 != 0) { + } else if (flag & 0x08000000) { + if (node->boo != 0) { return TRUE; } - } else if (arg1 & 0x10000000) { - if (arg0->unk00_field5 != 0) { + } else if (flag & 0x10000000) { + if (node->lottery != 0) { return TRUE; } } - if (arg0->unk01 <= 1) { + if (node->num_links <= 1) { return FALSE; } - for (i = 0; i < arg0->unk01; i++) { - sp1C = SearchPathNodeSpace(arg0->unk46[i]); - if (sp1C && CheckW20Path(sp1C, arg1)) { + for (i = 0; i < node->num_links; i++) { + link_node = SearchPathNodeSpace(node->links[i]); + if (link_node && CheckPathFlag(link_node, flag)) { return TRUE; } } diff --git a/src/game/board/main.c b/src/game/board/main.c index 41990f14..013dc2f5 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -24,7 +24,6 @@ typedef struct camera_view { s16 fov; } CameraView; - omObjData *boardMainObj; u32 boardRandSeed; static omObjData *last5GfxObj; @@ -619,16 +618,10 @@ static void CreateBoard(void) GWSystem.mg_next = -1; if(!GWGameStat.field10E_bit5) { s32 type_temp; - if(GWSystem.mg_list == 3) { - GWSystem.mg_list = 0; - } if(GWMGListGet() == 2) { GWSystem.mg_list = 0; } } - if(GWSystem.mess_speed == 3) { - GWSystem.mess_speed = 1; - } mess_speed = GWMessSpeedGet(); GWSystem.mess_speed = mess_speed; switch(mess_speed) { diff --git a/src/game/board/pause.c b/src/game/board/pause.c index ed26e8a7..17e379e2 100755 --- a/src/game/board/pause.c +++ b/src/game/board/pause.c @@ -151,27 +151,6 @@ void BoardPauseStart(void) { HuPrcDestructorSet2(mainProcess, PauseExit); } -static inline s32 PauseExitInlineFunc01(void) { - if (GWSystem.mg_list == 3) { - GWSystem.mg_list = 0; - } - return GWSystem.mg_list; -} - -static inline s32 PauseExitInlineFunc02(void) { - if (GWSystem.mess_speed == 3) { - GWSystem.mess_speed = 1; - } - return GWSystem.mess_speed; -} - -static inline s32 PauseExitInlineFunc03(void) { - if (GWSystem.save_mode == 3) { - GWSystem.save_mode = 1; - } - return GWSystem.save_mode; -} - static void PauseExit(void) { if (pauseQuitF == 0) { BoardRollWinDispSet(1); @@ -200,15 +179,15 @@ static void PauseExit(void) { if (GWPartyGet() == 0) { GWGameStat.field10F_bit0 = GWMGExplainGet(); GWGameStat.field10F_bit1 = GWMGShowComGet(); - GWGameStat.field10F_bit2 = PauseExitInlineFunc01(); - GWGameStat.field10F_bit4 = PauseExitInlineFunc02(); - GWGameStat.field10F_bit6 = PauseExitInlineFunc03(); + GWGameStat.field10F_bit2 = GWMGListGet(); + GWGameStat.field10F_bit4 = GWMessSpeedGet(); + GWGameStat.field10F_bit6 = GWSaveModeGet(); } else { GWGameStat.field110_bit0 = GWMGExplainGet(); GWGameStat.field110_bit1 = GWMGShowComGet(); - GWGameStat.field110_bit2 = PauseExitInlineFunc01(); - GWGameStat.field110_bit4 = PauseExitInlineFunc02(); - GWGameStat.field110_bit6 = PauseExitInlineFunc03(); + GWGameStat.field110_bit2 = GWMGListGet(); + GWGameStat.field110_bit4 = GWMessSpeedGet(); + GWGameStat.field110_bit6 = GWSaveModeGet(); } mainProcess = NULL; } @@ -390,7 +369,7 @@ void CreatePauseScreen(void) { var_f31 = (var_r28 != 0) ? 0.0f : -90.0f; break; case 3: - var_r28 = PauseExitInlineFunc01(); + var_r28 = GWMGListGet(); switch (var_r28) { case 1: var_r28 = 0; @@ -411,7 +390,7 @@ void CreatePauseScreen(void) { var_f31 = (var_r28 != 0) ? 0.0f : -90.0f; break; case 5: - var_r28 = PauseExitInlineFunc02(); + var_r28 = GWMessSpeedGet(); switch (var_r28) { case 2: var_r28 = 0; @@ -431,7 +410,7 @@ void CreatePauseScreen(void) { if (temp_r29->unk00_field4 != 0) { GWSystem.save_mode = 1; } - var_r28 = PauseExitInlineFunc03(); + var_r28 = GWSaveModeGet(); switch (var_r28) { case 1: var_r28 = 0; diff --git a/src/game/board/ui.c b/src/game/board/ui.c index 1087afd6..7b271d71 100755 --- a/src/game/board/ui.c +++ b/src/game/board/ui.c @@ -1339,7 +1339,7 @@ static void ExecItemPick(void) { itemPosTemp[j].x -= 8.0f; itemPosTemp[j].y += 16.0f; } - sp18 = BoardComTutorialItemGet(itemPlayer); + sp18 = BoardComUseItemSlotGet(itemPlayer); ExecItemPickInlineFunc02(itemPlayer, var_r23, sp18); } diff --git a/src/game/board/window.c b/src/game/board/window.c index 7dbd1780..54ad9195 100644 --- a/src/game/board/window.c +++ b/src/game/board/window.c @@ -182,7 +182,6 @@ void BoardWinPause(void) { void BoardWinCreateChoice(s32 pos, u32 mess, s32 portrait, s32 choice) { s32 i; - winPosIdx = pos; winChoice = 0; @@ -209,9 +208,6 @@ void BoardWinCreateChoice(s32 pos, u32 mess, s32 portrait, s32 choice) { HuPrcDestructorSet2(winProc, &BoardWinDestroy); } winMess = mess; - if (GWSystem.mess_speed == 3) { - GWSystem.mess_speed = 1; - } BoardWinSpeedSet(GWMessSpeedGet()); BoardWinPlayerSet(GWSystem.player_curr); } @@ -244,9 +240,6 @@ void BoardWinCreate(s32 pos, u32 mess, s32 portrait) { HuPrcDestructorSet2(winProc, &BoardWinDestroy); } winMess = mess; - if (GWSystem.mess_speed == 3) { - GWSystem.mess_speed = 1; - } BoardWinSpeedSet(GWMessSpeedGet()); BoardWinPlayerSet(GWSystem.player_curr); autoPickF = 0; @@ -300,13 +293,7 @@ void BoardWinKeyWait(void) { } int BoardWinSpeedGet(void) { - s32 speed; - - if (GWSystem.mess_speed == 3) { - GWSystem.mess_speed = 1; - } - speed = GWSystem.mess_speed; - return winSpeedTbl[speed]; + return winSpeedTbl[GWMessSpeedGet()]; } void BoardWinSpeedSet(s32 value) { @@ -348,12 +335,10 @@ s32 BoardWinPortraitGetStar(void) { } void BoardWinPlayerSet(s32 player) { - s32 temp; s32 i; if (player == -1) { - temp = GWSystem.party; - if (temp != 1) { + if (GWPartyGet() != 1) { for (i = 0, disablePlayer = i; i < 4; i++) { if (GWPlayer[i].com != 0) { disablePlayer |= 1 << GWPlayer[i].port; From 88ae9e2e45cac31c71fec4dbdd935d18f4b3639f Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 6 Mar 2024 20:24:37 -0600 Subject: [PATCH 046/106] Label var_50 and var_18 in board/window.c --- src/game/board/window.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/game/board/window.c b/src/game/board/window.c index 54ad9195..6a5e2e0f 100644 --- a/src/game/board/window.c +++ b/src/game/board/window.c @@ -75,13 +75,13 @@ static void ExecBoardWindow(void) { f32 *size_win; WindowData *win_curr = NULL; - f32 var_50[7][2] = { + f32 size_all[7][2] = { {384.0f, 64.0f}, {432.0f, 192.0f}, {504.0f, 96.0f}, {432.0f, 128.0f}, {288.0f, 192.0f}, {432.0f, 96.0f}, {432.0f, 96.0f}, }; - f32 var_18[7][2] = { + f32 pos_all[7][2] = { {96.0f, 328.0f}, {72.0f, 128.0f}, {36.0f, 344.0f}, {128.0f, 312.0f}, {144.0f, 144.0f}, {128.0f, 264.0f}, @@ -89,8 +89,8 @@ static void ExecBoardWindow(void) { }; if (windowID < 0) { - size_win = var_50[winPosIdx]; - pos_win = var_18[winPosIdx]; + size_win = size_all[winPosIdx]; + pos_win = pos_all[winPosIdx]; HuWinMesMaxSizeGet(1, size, winMess); if (size[0] <= size_win[0]) { size[0] = size_win[0]; From 9c5b9da5921c3915d0b1c06fc89c4c931810f19f Mon Sep 17 00:00:00 2001 From: mrshigure Date: Thu, 7 Mar 2024 07:00:04 -0800 Subject: [PATCH 047/106] Matched game/board/battle --- configure.py | 2 +- include/board_unsplit.h | 1 - include/game/board/battle.h | 8 + src/game/board/battle.c | 832 ++++++++++++++++++++++++++++++++++++ src/game/board/com.c | 2 +- src/game/board/item.c | 125 ++---- src/game/board/main.c | 1 + src/game/board/space.c | 1 + 8 files changed, 891 insertions(+), 81 deletions(-) create mode 100755 include/game/board/battle.h create mode 100755 src/game/board/battle.c diff --git a/configure.py b/configure.py index 4246d6ed..c9bf7bd4 100644 --- a/configure.py +++ b/configure.py @@ -387,7 +387,7 @@ config.libs = [ Object(Matching, "game/board/block.c"), Object(Matching, "game/board/item.c"), Object(NonMatching, "game/board/bowser.c"), - Object(NonMatching, "game/board/battle.c"), + Object(Matching, "game/board/battle.c"), Object(NonMatching, "game/board/fortune.c"), Object(Matching, "game/board/boo.c"), Object(NonMatching, "game/board/mg_setup.c"), diff --git a/include/board_unsplit.h b/include/board_unsplit.h index 8e005d90..d3a3e53c 100644 --- a/include/board_unsplit.h +++ b/include/board_unsplit.h @@ -32,7 +32,6 @@ s32 BoardCameraRotGet(Vec*); s32 BoardIsKill(void); void BoardBowserExec(s32 player, s32 space); -void BoardBattleExec(s32 player, s32 space); void BoardFortuneExec(s32 player, s32 space); #endif diff --git a/include/game/board/battle.h b/include/game/board/battle.h new file mode 100755 index 00000000..7434761d --- /dev/null +++ b/include/game/board/battle.h @@ -0,0 +1,8 @@ +#ifndef _BOARD_BATTLE_H +#define _BOARD_BATTLE_H + +#include "dolphin/types.h" + +void BoardBattleExec(s32 player, s32 space); + +#endif diff --git a/src/game/board/battle.c b/src/game/board/battle.c new file mode 100755 index 00000000..3dcddeee --- /dev/null +++ b/src/game/board/battle.c @@ -0,0 +1,832 @@ +#include "game/board/battle.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/gamework.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/process.h" +#include "game/wipe.h" +#include "game/board/audio.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/tutorial.h" +#include "game/board/ui.h" +#include "game/board/window.h" + +#define ABS(x) ((x) < 0 ? -(x) : (x)) + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 2; + }; + s8 unk01; + s16 unk02; + s16 unk04[4]; +} ExplodeWork; + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 4; + u8 unk00_field2 : 1; + u8 unk00_field3 : 1; + }; + u8 unk01; + s8 unk02; + s8 unk03; + s8 unk04; + char unk05[3]; + s16 unk08; +} BattleWork; + +extern s32 BoardMGSetupPlayPush(s32, s16); +extern void BoardMGSetupPlayPop(s32, s16); + +static void DestroyBattle(void); +static void ExecBattle(void); +static void TakeCoins(void); +static void InitExplode(void); +static s32 CheckExplode(void); +static void UpdateExplode(omObjData *arg0); +static void CreateBattleMain(void); +static void UpdateBattleMain(omObjData *arg0); +static void DescendBattleBomb(BattleWork *arg0, omObjData *arg1); +static void EndBattle(BattleWork *arg0, omObjData *arg1); +static void ShowBattleGame(BattleWork *arg0, omObjData *arg1); +static void RaiseBattleGame(BattleWork *arg0, omObjData *arg1); +static void UpdateBattleCoin(BattleWork *arg0, omObjData *arg1); +static void ShowBattleCoin(BattleWork *arg0, omObjData *arg1); +static void InitBattleGameSpr(BattleWork *arg0, omObjData *arg1); +static void HideBattleSpr(void); +static void VibratePad(BattleWork *arg0, omObjData *arg1); +static void StopBattleBomb(void); +static s32 GetBattleBombState(void); +static void SetBattleBombState(s32 arg0); +static void SetBattleCoinValue(void); + +static s16 battleMGList[8]; + +static s8 currPlayer; +static s8 coinTakeMax; +static u8 mgChoice; +static s16 currSpace; +static s8 battleCoinIdx; +static s8 battleMGIdx[2]; +static char totalCoinStr[8]; +static float battleCoinSpeed; +static float battleCoinPosF; +static omObjData *explodeObj; +static omObjData *battleObj; +static Process *battleProc; + +static const s8 battleCoinTbl[] = { + 0x05, 0x0A, 0x14, 0x1E, 0x32 +}; + +static float battleCursorPosTbl[] = { + 144.0f, 330.0f, 0.0f, + 432.0f, 330.0f, 0.0f +}; + +static s32 bombFXTbl[] = { + 0x00000123, + 0x00000163, + 0x000001A3, + 0x000001E3, + 0x00000223, + 0x00000263, + 0x000002A3, + 0x000002E3 +}; + +static s16 battleSprPrioTbl[] = { + 1000, 990, 1000, 980, + 980, 970, 970, 970, + 970, 970, 970 +}; + +void BoardBattleExec(s32 player, s32 space) { + if (_CheckFlag(0x1000B)) { + HuAudFXPlay(0x34A); + BoardCameraViewSet(2); + BoardPlayerMotBlendSet(player, 0, 0xF); + while (!BoardPlayerMotBlendCheck(player)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + BoardTutorialHookExec(0xF, 0); + GWPlayer[player].color = 3; + return; + } + currPlayer = player; + currSpace = space; + battleProc = HuPrcChildCreate(ExecBattle, 0x2004, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(battleProc, DestroyBattle); + while (battleProc) { + HuPrcVSleep(); + } + GWPlayer[player].color = 3; +} + +static void DestroyBattle(void) { + HuDataDirClose(0x10000); + battleProc = NULL; +} + +static void ExecBattle(void) { + s16 temp_r28; + s16 var_r26; + s32 temp_r22; + s32 var_r21; + s32 var_r30; + s32 var_r31; + s32 var_r25; + s32 var_r24; + s32 var_r23; + MgInfo *var_r29; + s32 var_r27 = 0; + s32 sp8[] = { + 0x00750000, + 0x00760000, + 0x00770000, + 0x00780000, + 0x00790000, + 0x007A0000, + 0x007B0000, + 0x007C0000, + 0x007D0000 + }; + + var_r29 = mgInfoTbl; + for (var_r31 = var_r30 = 0; var_r29->ovl != (u16) OVL_INVALID; var_r29++, var_r31++) { + if (var_r29->type == 4) { + battleMGList[var_r30] = var_r31 + 401; + var_r30++; + } + } + for (var_r30 = 0; var_r30 < 2; var_r30++) { + while (1) { + var_r31 = BoardRandMod(6); + temp_r28 = battleMGList[var_r31]; + if (GWMGListGet() == 2) { + if (GWMGCustomGet(temp_r28) == 0) { + continue; + } + } else { + if (GWMGListGet() == 1) { + var_r29 = &mgInfoTbl[temp_r28 - 401]; + if (!(var_r29->flag & 1)) { + continue; + } + } else if (BoardMGSetupPlayPush(4, temp_r28) != 0) { + continue; + } + } + if (var_r30 == 1 && var_r31 == battleMGIdx[var_r30 - 1]) { + continue; + } + break; + } + battleMGIdx[var_r30] = var_r31; + BoardMGSetupPlayPop(4, temp_r28); + } + if (_CheckFlag(0x10004)) { + BoardStatusItemSet(1); + WipeCreate(1, 0, -1); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + _ClearFlag(0x1001C); + HuPrcSleep(0x3C); + HuPrcEnd(); + } + HuAudFXPlay(0x34A); + omVibrate(GWSystem.player_curr, 0xC, 6, 6); + BoardAudSeqPause(0, 1, 0x1F4); + temp_r22 = BoardDataDirReadAsync(0x10000); + BoardCameraViewSet(3); + BoardCameraMotionWait(); + BoardPlayerMotBlendSet(currPlayer, 0, 0xF); + while (!BoardPlayerMotBlendCheck(currPlayer)) { + HuPrcVSleep(); + } + BoardDataAsyncWait(temp_r22); + SetBattleCoinValue(); + BoardMusStart(1, 4, 0x7F, 0); + omVibrate(GWSystem.player_curr, 0xC, 6, 6); + InitExplode(); + while (CheckExplode() == 0) { + HuPrcVSleep(); + } + HuPrcSleep(30); + CreateBattleMain(); + while (GetBattleBombState() != 8) { + HuPrcVSleep(); + } + var_r26 = 0; + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (BoardPlayerCoinsGet(var_r31) >= 10) { + var_r26 = 1; + break; + } + } + if (var_r26 == 0) { + BoardWinCreate(2, 0x20001, 1); + BoardWinWait(); + BoardWinKill(); + var_r27 = 1; + } else { + HuAudFXPlay(0x4F); + BoardWinCreate(2, 0x20000, 1); + BoardWinWait(); + BoardWinKill(); + SetBattleBombState(3); + while (GetBattleBombState() != 8) { + HuPrcVSleep(); + } + SetBattleBombState(4); + while (GetBattleBombState() != 8) { + HuPrcVSleep(); + } + TakeCoins(); + if (GWPlayer[currPlayer].com) { + if (BoardRandFloat() < 0.5f) { + var_r23 = 0; + } else { + var_r23 = 1; + } + var_r25 = var_r23; + HuPrcSleep(0x3C); + } else { + var_r25 = -1; + } + SetBattleBombState(5); + BoardPickerCreate(currPlayer, 2, battleCursorPosTbl, var_r25); + BoardPickerBackFlagSet(0); + while (!BoardPickerDoneCheck()) { + HuPrcVSleep(); + } + mgChoice = BoardPickerChoiceGet(); + SetBattleBombState(6); + while (GetBattleBombState() != 8) { + HuPrcVSleep(); + } + BoardAudSeqFadeOut(1, 1000); + BoardMusVolPanSet(0, 0, 1); + BoardAudSeqPause(0, 0, 1); + if (var_r27 == 0) { + HuDataDirClose(0x70000); + HuDataDirClose(0x20000); + HuDataDirClose(sp8[GWBoardGet()]); + HuPrcSleep(2); + temp_r28 = battleMGList[battleMGIdx[mgChoice]]; + GWMGAvailSet(temp_r28); + GWSystem.mg_next = temp_r28 - 401; + if (_CheckFlag(0xB)) { + var_r24 = 0x140000; + } else { + var_r24 = mgInfoTbl[temp_r28 - 401].data_dir; + } + var_r21 = BoardDataDirReadAsync(var_r24); + } + _SetFlag(0x1000E); + WipeColorSet(0xFF, 0xFF, 0xFF); + WipeCreate(2, 0, -1); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + HuAudFXAllStop(); + _SetFlag(0x1001C); + HideBattleSpr(); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardPlayerMotionStart(var_r31, 1, 0x40000001); + } + BoardDataAsyncWait(var_r21); + if (var_r27 == 0) { + _SetFlag(0x10004); + BoardNextOvlSet(OVL_INST); + BoardFilterFadeOut(30); + StopBattleBomb(); + HuPrcEnd(); + } + } + BoardAudSeqFadeOut(1, 1000); + SetBattleBombState(1); + while (GetBattleBombState() != 8) { + HuPrcVSleep(); + } + StopBattleBomb(); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardRotateDiceNumbers(var_r31); + BoardPlayerVoiceEnableSet(var_r31, 6, 1); + } + BoardAudSeqPause(0, 0, 1000); + HuPrcEnd(); +} + +static void TakeCoins(void) { + u16 var_r30; + s32 temp_r26; + s32 var_r25; + s32 var_r24; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 i; + + for (var_r30 = i = 0; i < 4; i++) { + temp_r26 = BoardPlayerCoinsGet(i); + if (temp_r26 >= coinTakeMax) { + var_r30 += coinTakeMax; + } else { + var_r30 += temp_r26; + } + } + if (coinTakeMax >= 50) { + var_r27 = 1; + } else if (coinTakeMax >= 20) { + var_r27 = 3; + } else { + var_r27 = 6; + } + for (i = 0; i < 4; i++) { + if (BoardPlayerCoinsGet(i) < coinTakeMax) { + var_r25 = BoardPlayerCoinsGet(i); + } else { + var_r25 = coinTakeMax; + } + GWPlayer[i].coins_battle = var_r25; + } + for (var_r29 = 0; var_r29 < coinTakeMax; var_r29++) { + for (var_r28 = i = 0; i < 4; i++) { + BoardPlayerCoinsAdd(i, -1); + var_r28 += BoardPlayerCoinsGet(i); + } + if (var_r28 <= 0) { + break; + } + HuAudFXPlay(0xE); + HuPrcSleep(var_r27); + } + HuAudFXPlay(0xF); + sprintf(totalCoinStr, "%d", var_r30); + if (var_r30 != coinTakeMax * 4) { + var_r24 = 0x20003; + } else { + var_r24 = 0x20002; + } + BoardWinCreate(2, var_r24, 1); + BoardWinInsertMesSet((u32) totalCoinStr, 0); + BoardWinWait(); + BoardWinKill(); +} + +static void InitExplode(void) { + Vec sp14; + Vec sp8; + s32 i; + ExplodeWork *temp_r31; + float sp20[4][2] = { + { -50.0f, -50.0f }, + { 50.0f, -50.0f }, + { -50.0f, 50.0f }, + { 50.0f, 50.0f } + }; + + BoardPlayerPosGet(currPlayer, &sp14); + explodeObj = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, UpdateExplode); + temp_r31 = OM_GET_WORK_PTR(explodeObj, ExplodeWork); + temp_r31->unk00_field0 = 0; + temp_r31->unk00_field1 = 0; + temp_r31->unk01 = 0x10; + temp_r31->unk02 = BoardModelCreate(0x20026, NULL, 0); + BoardModelLayerSet(temp_r31->unk02, 2); + explodeObj->trans.x = sp14.x; + explodeObj->trans.y = sp14.y - 100.0f; + explodeObj->trans.z = sp14.z; + BoardModelPosSet(temp_r31->unk02, explodeObj->trans.x, explodeObj->trans.y, explodeObj->trans.z); + BoardModelMotionStart(temp_r31->unk02, 0, 0x40000001); + for (i = 0; i < 4; i++) { + temp_r31->unk04[i] = BoardModelCreate(0x70066, NULL, 0); + sp8.x = sp14.x + sp20[i][0]; + sp8.y = sp14.y; + sp8.z = sp14.z + sp20[i][1]; + BoardModelPosSetV(temp_r31->unk04[i], &sp8); + BoardModelLayerSet(temp_r31->unk04[i], 2); + } + HuAudFXPlay(0x33C); +} + +static s32 CheckExplode(void) { + ExplodeWork *temp_r31 = OM_GET_WORK_PTR(explodeObj, ExplodeWork); + + return temp_r31->unk00_field1; +} + +static void UpdateExplode(omObjData *arg0) { + Vec sp14; + Vec sp8; + float temp_f31; + ExplodeWork *temp_r30; + Mtx sp20; + s32 i; + + (void) 1000.0f; // TODO: 1000.0f needs to appear right before 20.0f in sdata2 to match. + temp_r30 = OM_GET_WORK_PTR(arg0, ExplodeWork); + if (temp_r30->unk00_field0 != 0 || BoardIsKill()) { + BoardModelKill(temp_r30->unk02); + for (i = 0; i < 4; i++) { + BoardModelKill(temp_r30->unk04[i]); + } + explodeObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + switch (temp_r30->unk00_field1) { + case 0: + if (temp_r30->unk01 == 0) { + for (i = 0; i < 4; i++) { + if (currSpace == GWPlayer[i].space_curr) { + temp_f31 = 20.0f * BoardRandFloat(); + HuAudFXPlay(bombFXTbl[GWPlayer[i].character]); + BoardPlayerMotionShiftSet(i, 6, temp_f31, 8.0f, 0x40000001); + } + } + CharModelLayerSetAll(2); + } + if (temp_r30->unk01-- <= 0) { + arg0->trans.y += 50.0f; + if (arg0->trans.y >= 800.0f) { + arg0->scale.x = 288.0f; + arg0->scale.y = -128.0f; + arg0->scale.z = 1000.0f; + for (i = 0; i < 4; i++) { + BoardModelVisibilitySet(temp_r30->unk04[i], 0); + } + temp_r30->unk00_field1 = 2; + } + } + break; + case 3: + BoardModelVisibilitySet(temp_r30->unk02, 0); + temp_r30->unk00_field0 = 1; + break; + case 2: + BoardCameraRotGet(&sp8); + PSMTXRotRad(sp20, 'x', MTXDegToRad(sp8.x + 10.0f)); + BoardModelMtxSet(temp_r30->unk02, &sp20); + BoardModelRotSet(temp_r30->unk02, 0.0f, 0.0f, 0.0f); + sp14.x = arg0->scale.x; + sp14.y = arg0->scale.y; + sp14.z = arg0->scale.z; + Hu3D2Dto3D(&sp14, 1, &sp14); + arg0->trans.x = sp14.x; + arg0->trans.y = sp14.y; + arg0->trans.z = sp14.z; + break; + } + BoardModelPosSet(temp_r30->unk02, arg0->trans.x, arg0->trans.y, arg0->trans.z); +} + +static void CreateBattleMain(void) { + s16 sp8; + s32 var_r29; + s32 i; + BattleWork *temp_r31; + s32 spC[] = { + 0x00010000, + 0x00010001, + 0x00010002, + 0x00010003, + 0x00010003, + 0x00010004, + 0x00010005, + 0x00010006, + 0x00010007, + 0x00010008, + 0x00010009 + }; + + battleObj = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, UpdateBattleMain); + temp_r31 = OM_GET_WORK_PTR(battleObj, BattleWork); + temp_r31->unk00_field0 = 0; + temp_r31->unk00_field2 = 0; + temp_r31->unk01 = 0; + temp_r31->unk02 = 2; + temp_r31->unk03 = 2; + temp_r31->unk04 = 0; + temp_r31->unk00_field3 = 0; + temp_r31->unk00_field1 = 0; + battleCoinSpeed = 1.0f; + battleCoinPosF = 5.0f * BoardRandFloat(); + coinTakeMax = 0; + temp_r31->unk08 = HuSprGrpCreate(11); + for (i = 0; i < 11; i++) { + var_r29 = spC[i]; + BoardSpriteCreate(var_r29, battleSprPrioTbl[i], 0, &sp8); + HuSprGrpMemberSet(temp_r31->unk08, i, sp8); + HuSprAttrSet(temp_r31->unk08, i, 9); + HuSprAttrSet(temp_r31->unk08, i, 4); + } + HuSprGrpPosSet(temp_r31->unk08, 288.0f, 240.0f); + battleObj->trans.x = -308.0f; + BoardFilterFadeInit(0x1E, 0xA0); +} + +static void UpdateBattleMain(omObjData *arg0) { + BattleWork *temp_r30; + ExplodeWork *temp_r29; + float var_f31; + + temp_r30 = OM_GET_WORK_PTR(arg0, BattleWork); + if (temp_r30->unk00_field0 != 0 || BoardIsKill()) { + HuSprGrpKill(temp_r30->unk08); + battleObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + switch (temp_r30->unk00_field1) { + case 0: + DescendBattleBomb(temp_r30, arg0); + break; + case 1: + EndBattle(temp_r30, arg0); + break; + case 2: + ShowBattleGame(temp_r30, arg0); + break; + case 3: + RaiseBattleGame(temp_r30, arg0); + break; + case 4: + UpdateBattleCoin(temp_r30, arg0); + break; + case 5: + InitBattleGameSpr(temp_r30, arg0); + break; + case 6: + VibratePad(temp_r30, arg0); + break; + case 7: + ShowBattleCoin(temp_r30, arg0); + break; + case 8: + break; + } + var_f31 = arg0->trans.x + 240.0f; + temp_r29 = OM_GET_WORK_PTR(explodeObj, ExplodeWork); + if (temp_r29->unk00_field1 == 2) { + explodeObj->scale.x = 288.0f; + explodeObj->scale.y = var_f31; + explodeObj->scale.z = 1000.0f; + } + HuSprPosSet(temp_r30->unk08, 0, 0.0f, arg0->trans.y); + HuSprScaleSet(temp_r30->unk08, 0, arg0->trans.z, arg0->trans.z); +} + +static void DescendBattleBomb(BattleWork *arg0, omObjData *arg1) { + float temp_f31 = -132.0f - arg1->trans.x; + + if (temp_f31 < 0.1f) { + arg1->trans.x = -132.0f; + arg0->unk00_field1 = 2; + } else { + arg1->trans.x += 0.3f * temp_f31; + } +} + +static void EndBattle(BattleWork *arg0, omObjData *arg1) { + float temp_f31 = 548.0f - arg1->trans.x; + + if (temp_f31 < 0.1f) { + BoardFilterFadeOut(30); + arg0->unk00_field1 = 8; + } else { + arg1->trans.x += 0.3f * temp_f31; + } +} + +static void ShowBattleGame(BattleWork *arg0, omObjData *arg1) { + float var_r29; + + if (arg0->unk01 == 0) { + if (BoardFilterFadePauseCheck() != 0) { + arg0->unk01 = 1; + arg1->trans.z = 0.01f; + arg1->trans.y = 0.0f; + HuSprAttrReset(arg0->unk08, 0, 4); + HuSprPosSet(arg0->unk08, 0, 0.0f, 0.0f); + } else { + return; + } + } + if (arg0->unk01 >= 90) { + arg0->unk00_field1 = 8; + arg0->unk01 = 90; + } + OSs8tof32((s8*) &arg0->unk01, &var_r29); + arg1->trans.z = sin(var_r29 * M_PI / 180.0); + arg0->unk01 += 4; +} + +static void RaiseBattleGame(BattleWork *arg0, omObjData *arg1) { + float temp_f31 = -60.0f - arg1->trans.y; + + if (ABS(temp_f31) < 0.1f) { + arg1->trans.y = -60.0f; + arg0->unk00_field1 = 8; + } else { + arg1->trans.y += 0.2f * temp_f31; + } +} + +static void UpdateBattleCoin(BattleWork *arg0, omObjData *arg1) { + s8 temp_r28; + + if (arg0->unk00_field2 != 0) { + if (arg0->unk03++ < arg0->unk02) { + arg0->unk04++; + if (arg0->unk04 > 20) { + arg0->unk04 = 20; + } + return; + } + if (arg0->unk00_field3 == 0 && arg0->unk04 >= 20 && BoardRandMod(100) > 50) { + arg0->unk00_field3 = 1; + } + arg0->unk03 = 0; + if (arg0->unk00_field3 != 0) { + arg0->unk02 += 4; + if (arg0->unk02 > 30) { + arg0->unk02 = 30; + } + } + OSf32tos8(&battleCoinPosF, &temp_r28); + if (arg0->unk02 >= 30 && temp_r28 == battleCoinIdx) { + arg0->unk00_field1 = 7; + arg0->unk01 = 0; + coinTakeMax = battleCoinTbl[temp_r28]; + HuAudFXPlay(0x305); + } else { + battleCoinPosF += 1.0f; + HuAudFXPlay(0x304); + if (battleCoinPosF >= 5.0f) { + battleCoinPosF = 0.0f; + } + } + HuSprBankSet(arg0->unk08, 1, temp_r28); + return; + } + HuSprAttrReset(arg0->unk08, 2, 4); + HuSprAttrReset(arg0->unk08, 1, 5); + HuSprPosSet(arg0->unk08, 2, 0.0f, 40.0f); + HuSprPosSet(arg0->unk08, 1, 34.0f, 40.0f); + HuSprScaleSet(arg0->unk08, 1, 0.9f, 0.9f); + arg0->unk00_field2 = 1; + arg0->unk01 = 0; + arg1->rot.x = 50.0f; +} + +static void ShowBattleCoin(BattleWork *arg0, omObjData *arg1) { + float temp_f29; + float var_f30; + + if (arg0->unk01 >= 90) { + arg0->unk01 = 0; + arg0->unk00_field1 = 8; + var_f30 = 90.0f; + } else { + arg0->unk01++; + OSu8tof32(&arg0->unk01, &var_f30); + } + if (coinTakeMax != 50) { + var_f30 *= 6.0f; + } else { + var_f30 *= 10.0f; + } + while (var_f30 > 180.0f) { + var_f30 -= 180.0f; + } + temp_f29 = 0.8999999761581421 + sin(var_f30 * M_PI / 180.0); + HuSprScaleSet(arg0->unk08, 1, temp_f29, temp_f29); +} + +static void InitBattleGameSpr(BattleWork *arg0, omObjData *arg1) { + s8 temp_r30; + s8 temp_r29; + float sp8[2][2] = { + { -130.0f, 30.0f }, + { 130.0f, 30.0f } + }; + + temp_r30 = battleMGIdx[0]; + temp_r29 = battleMGIdx[1]; + HuSprAttrReset(arg0->unk08, 3, 4); + HuSprAttrReset(arg0->unk08, 4, 4); + HuSprAttrReset(arg0->unk08, temp_r30 + 5, 4); + HuSprAttrReset(arg0->unk08, temp_r29 + 5, 4); + HuSprPosSet(arg0->unk08, 3, sp8[0][0], sp8[0][1]); + HuSprPosSet(arg0->unk08, 4, sp8[1][0], sp8[1][1]); + HuSprPosSet(arg0->unk08, temp_r30 + 5, sp8[0][0], sp8[0][1]); + HuSprPosSet(arg0->unk08, temp_r29 + 5, sp8[1][0], sp8[1][1]); + arg0->unk00_field1 = 8; +} + +static void HideBattleSpr(void) { + BattleWork *temp_r30 = OM_GET_WORK_PTR(battleObj, BattleWork); + s32 i; + + for (i = 0; i < 11; i++) { + HuSprAttrSet(temp_r30->unk08, i, 4); + } +} + + +static void VibratePad(BattleWork *arg0, omObjData *arg1) { + s32 i; + + for (i = 0; i < 4; i++) { + omVibrate(i, 0xC, 0xC, 0); + } + arg0->unk00_field1 = 8; +} + +static void StopBattleBomb(void) { + if (battleObj) { + OM_GET_WORK_PTR(battleObj, BattleWork)->unk00_field0 = 1; + } +} + +static s32 GetBattleBombState(void) { + return OM_GET_WORK_PTR(battleObj, BattleWork)->unk00_field1; +} + +static void SetBattleBombState(s32 arg0) { + BattleWork *var_r31 = OM_GET_WORK_PTR(battleObj, BattleWork); + + var_r31->unk00_field1 = arg0; + var_r31->unk01 = 0; +} + +static s8 battleChanceTbl[][3][5] = { + { + { 0x0A, 0x55, 0x05, 0x00, 0x00 }, + { 0x0A, 0x4B, 0x0F, 0x00, 0x00 }, + { 0x0A, 0x41, 0x19, 0x00, 0x00 }, + }, + { + { 0x05, 0x46, 0x14, 0x05, 0x00 }, + { 0x05, 0x3C, 0x19, 0x0A, 0x00 }, + { 0x05, 0x32, 0x1E, 0x0A, 0x00 }, + }, + { + { 0x05, 0x3C, 0x14, 0x0A, 0x05 }, + { 0x05, 0x2D, 0x1E, 0x0F, 0x05 }, + { 0x05, 0x23, 0x1E, 0x14, 0x0A }, + }, + { + { 0x05, 0x2D, 0x1E, 0x0F, 0x05 }, + { 0x05, 0x1E, 0x23, 0x14, 0x0A }, + { 0x05, 0x14, 0x23, 0x19, 0x0F } + } +}; + +static void SetBattleCoinValue(void) { + s32 temp_r26; + s32 temp_r25; + s32 var_r28; + s32 var_r29; + s32 var_r30; + s32 var_r27; + s32 i; + + var_r30 = -1; + for (i = 0; i < 4; i++) { + if (BoardPlayerCoinsGet(i) > var_r30) { + var_r30 = BoardPlayerCoinsGet(i); + } + } + if (var_r30 >= 50) { + var_r29 = 3; + } else if (var_r30 >= 30) { + var_r29 = 2; + } else if (var_r30 >= 20) { + var_r29 = 1; + } else { + var_r29 = 0; + } + temp_r25 = 3.0f * ((float) GWSystem.turn / GWSystem.max_turn); + temp_r26 = BoardRandMod(100); + var_r27 = var_r28 = 0; + for (i = 4; i >= 0; i--) { + var_r28 += battleChanceTbl[var_r29][temp_r25][i]; + if (temp_r26 < var_r28) { + var_r27 = i; + break; + } + } + battleCoinIdx = var_r27; +} diff --git a/src/game/board/com.c b/src/game/board/com.c index 9540d290..3f6cc4bf 100755 --- a/src/game/board/com.c +++ b/src/game/board/com.c @@ -510,7 +510,7 @@ static BOOL CheckSwapUse(s32 player, s32 item) { character = GWPlayer[player].character; switch (diff) { case 0: - chance = 0x32; + chance = 0x32; break; case 1: chance = 0x19; diff --git a/src/game/board/item.c b/src/game/board/item.c index 5a330494..b020d72b 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -11,20 +11,17 @@ #include "game/window.h" #include "game/wipe.h" #include "game/board/audio.h" +#include "game/board/boo.h" #include "game/board/com.h" #include "game/board/main.h" #include "game/board/model.h" #include "game/board/player.h" #include "game/board/space.h" +#include "game/board/star.h" #include "game/board/ui.h" #include "game/board/window.h" #include "game/board/view.h" -#include "game/board/star.h" -#include "game/board/boo.h" - -void BoardCharWheelWait(void); - typedef struct { /* 0x00 */ s16 unk00; /* 0x02 */ s16 unk02; @@ -52,9 +49,10 @@ typedef struct { /* 0x04 */ Vec unk10; } UnkGenieCameraStruct; // Size 0x1C -u32 frandmod(u32); -void BoardBowserSuitInit(s32); -s16 BoardBowserSuitPlayerModelGet(void); +extern u32 frandmod(u32); +extern void BoardBowserSuitInit(s32); +extern s16 BoardBowserSuitPlayerModelGet(void); +extern void BoardCharWheelWait(void); static void ItemProcess(void); static void RestoreProcess(void); @@ -93,14 +91,12 @@ static void RestoreItemMiniSuper(void); static void RestoreItemMegaSuper(void); static void RestoreItemBowser(void); -// BSS static Vec booBallScale; static Vec booBallPos; static Vec booCamUp; static Vec booCamTarget; static Vec booCamPos; -// SBSS static s16 itemBagItems[3]; static s8 currItemRestore; static s8 currItem; @@ -110,16 +106,13 @@ static s32 suitCommonMot[2]; static s16 booBallMdl; static float booBallAlpha; static char booCoinStr[8]; -// ... static float genieFov; static AnimData *genieParticleAnim; static s16 geniePlayerMot[3]; static Process *itemProc; -// SDATA s32 lbl_801D37A0[2] = { 0x00070075, -1 }; -// DATA static void (*itemFuncTbl[])(void) = { ExecItemMini, ExecItemMega, @@ -137,7 +130,6 @@ static void (*itemFuncTbl[])(void) = { ExecItemBag }; -// DATA + 0x38 static void (*itemRestoreFuncTbl[])(void) = { RestoreItemMini, RestoreItemMega, @@ -155,7 +147,6 @@ static void (*itemRestoreFuncTbl[])(void) = { RestoreItemNull }; -// DATA + 0x70 static s32 itemMdlTbl[] = { 0x0007006D, 0x0007006E, @@ -173,12 +164,10 @@ static s32 itemMdlTbl[] = { 0x0007007B }; -// DATA + 0xA8 static s32 forceMoveSfxTbl[] = { 0x38, 0x45, 0x42, 0x4D, 0x48, 0x3F }; -// DATA + 0xC0 static s32 callMotTbl[] = { 0x005F0052, 0x001A0052, @@ -190,10 +179,6 @@ static s32 callMotTbl[] = { 0x00810052 }; -// DATA + 0xE0 -// callHookTbl items - -// DATA + 0x178 static char *callHookTbl[] = { "c000m01-itemhook-r", "c001m01-itemhook-r", @@ -205,7 +190,6 @@ static char *callHookTbl[] = { "c007m01-itemhook-r" }; -// DATA + 0x198 static s32 callAttackMotTbl[] = { 0x0075001F, 0x00760005, @@ -215,7 +199,6 @@ static s32 callAttackMotTbl[] = { 0x007A0013 }; -// DATA + 0x1B0 static s32 callAttackMotTbl2[] = { 0x00750020, 0x00760006, @@ -225,7 +208,6 @@ static s32 callAttackMotTbl2[] = { 0x007A0014 }; -// DATA + 0x1C8 static s32 suitMotTbl[][2] = { { 0x00040001, 0x00040002 }, { 0x00040004, 0x00040005 }, @@ -301,7 +283,7 @@ static void ItemSizeShowAnim(void) { BoardModelRotSetV(suitMdl, &spC); BoardModelPosSetV(suitMdl, &sp24); for (i = 0; i < 120; i++) { - sp24.y += 3.0 * sin(M_PI * var_f31 / 180.0); + sp24.y += 3.0 * sin(var_f31 * M_PI / 180.0); BoardModelPosSetV(suitMdl, &sp24); var_f31 += 9.0f; if (var_f31 >= 360.0f) { @@ -334,7 +316,7 @@ static void ItemRotProc(void) { while (1) { if (temp_r31->unk00 == 0) { sp14 = sp20; - sp14.y += temp_r31->unk04 * sin(M_PI * temp_r31->unk0C / 180.0); + sp14.y += temp_r31->unk04 * sin(temp_r31->unk0C * M_PI / 180.0); BoardModelPosSetV(temp_r31->unk02, &sp14); temp_r31->unk0C += temp_r31->unk08; if (temp_r31->unk0C >= 360.0f) { @@ -446,8 +428,8 @@ static void BoardUiInlineFunc02(void) { static inline void BoardUiInlineFunc03(s32 arg0) { Vec sp8; Vec sp14; - s32 space = GWPlayer[arg0].space_curr; - + s32 space = GWPlayer[arg0].space_curr; + BoardSpacePosGet(0, space, &sp14); BoardPlayerPosGet(arg0, &sp8); BoardPlayerPosLerpStart(arg0, &sp8, &sp14, 0x14); @@ -774,7 +756,7 @@ static void ExecItemHammer(void) { } static void ExecItemPipe(void) { - Vec spE4[2]; + Vec spE4[2]; Vec spCC[2]; Vec spB4[2]; Vec spA8; @@ -987,10 +969,10 @@ static void ExecItemPipe(void) { for (var_r31 = 0; var_r31 < 2; var_r31++) { BoardModelKill(sp30[var_r31]); } - HuPrcKill(NULL); - while (1) { - HuPrcVSleep(); - } + HuPrcKill(NULL); + while (1) { + HuPrcVSleep(); + } } static void ExecItemSwap(void) { @@ -1140,12 +1122,12 @@ static void ExecItemSwap(void) { for (var_r31 = 0; var_r31 < 0x3C; var_r31++) { for (var_r30 = 0; var_r30 < var_r28 / 2; var_r30++) { sp6C = sp1A4[var_r30]; - sp6C.x += 3.0 * sin((M_PI * (frand() % 360)) / 180.0); - sp6C.y += 3.0 * sin((M_PI * (frand() % 360)) / 180.0); + sp6C.x += 3.0 * sin((frand() % 360) * M_PI / 180.0); + sp6C.y += 3.0 * sin((frand() % 360) * M_PI / 180.0); BoardModelPosSetV(sp54[var_r30], &sp6C); sp6C = sp180[var_r30]; - sp6C.x += 3.0 * sin((M_PI * (frand() % 360)) / 180.0); - sp6C.y += 3.0 * sin((M_PI * (frand() % 360)) / 180.0); + sp6C.x += 3.0 * sin((frand() % 360) * M_PI / 180.0); + sp6C.y += 3.0 * sin((frand() % 360) * M_PI / 180.0); BoardModelPosSetV(sp54[var_r30 + 3], &sp6C); } HuPrcSleep(2); @@ -1227,8 +1209,8 @@ static void ExecItemSpark(void) { s32 temp_r28; s16 temp_r30; s32 i; - - (void)106.0; + + (void)106.0; temp_r30 = BoardModelCreate(0x70067, NULL, 0); BoardModelLayerSet(temp_r30, 3); BoardModelVisibilitySet(temp_r30, 0); @@ -1279,8 +1261,8 @@ static void ExecItemSpark(void) { BoardSpaceRotGet(0, GWPlayer[currItemRestore].space_curr, &sp20); BoardModelRotSetV(suitMdl, &sp20); BoardModelPosGet(suitMdl, &sp2C); - sp2C.z += 106.0 * sin(M_PI * sp20.x / 180.0); - sp2C.x -= 106.0 * sin(M_PI * sp20.z / 180.0); + sp2C.z += 106.0 * sin(sp20.x * M_PI / 180.0); + sp2C.x -= 106.0 * sin(sp20.z * M_PI / 180.0); BoardModelPosSetV(suitMdl, &sp2C); HuAudFXPlay(0x31B); BoardModelMotionStart(suitMdl, 1, 0); @@ -1335,7 +1317,6 @@ static void ExecItemLight(void) { } } -// https://decomp.me/scratch/gbgTk static void ExecItemWhistle(void) { Vec spF0[4]; Vec spC0[4]; @@ -1354,22 +1335,21 @@ static void ExecItemWhistle(void) { s16 sp8; float var_f30; float var_f31; - s32 temp_r23; - char *temp_r22; + s32 temp_r23; + char *temp_r22; s32 temp_r18; - s16 temp_r17; + s16 temp_r17; s16 temp_r21; s16 temp_r20; s32 temp_r31; s16 temp_r28; - s16 temp_r19; - s32 var_r26; + s16 temp_r19; + s32 var_r26; s16 var_r25; s16 var_r27; s32 var_r29; s32 var_r31; - - + var_r31 = GWPlayerCfg[currItemRestore].character; temp_r23 = BoardPlayerMotionCreate(currItemRestore, callMotTbl[var_r31]); temp_r22 = callHookTbl[var_r31]; @@ -1379,7 +1359,7 @@ static void ExecItemWhistle(void) { temp_r19 = GWBoardGet(); temp_r21 = BoardModelMotionCreate(temp_r28, callAttackMotTbl[temp_r19]); temp_r20 = BoardModelMotionCreate(temp_r28, callAttackMotTbl2[temp_r19]); - var_f31 = 360.0f * (0.003921569f * (s32)((u8) frand())); + var_f31 = 0.003921569f * (frand() & 0xFF) * 360.0f; spA8.x = spA8.y = spA8.z = 0.5f; for (var_r31 = 0; var_r31 < 4; var_r31++) { sp20[var_r31] = BoardModelCreate(0x20027, NULL, 1); @@ -1387,9 +1367,9 @@ static void ExecItemWhistle(void) { temp_r17 = BoardModelMotionCreate(sp20[var_r31], 0x20028); BoardModelMotionStart(sp20[var_r31], temp_r17, 0x40000001); sp28[var_r31] = 120.0f; - spF0[var_r31].x = spB4.x + 120.0 * sin(M_PI * var_f31 / 180.0); + spF0[var_r31].x = spB4.x + 120.0 * sin(var_f31 * M_PI / 180.0); spF0[var_r31].y = 1000.0f + spB4.y + 100.0f * var_r31; - spF0[var_r31].z = spB4.z + 120.0 * cos(M_PI * var_f31 / 180.0); + spF0[var_r31].z = spB4.z + 120.0 * cos(var_f31 * M_PI / 180.0); spC0[var_r31].x = spC0[var_r31].z = 0.0f; spC0[var_r31].y = var_f31 + 90.0f; if (spC0[var_r31].y >= 360.0f) { @@ -1508,8 +1488,8 @@ static void ExecItemWhistle(void) { if (spC0[var_r31].y >= 360.0f) { spC0[var_r31].y -= 360.0f; } - spF0[var_r31].x = spB4.x + 120.0 * sin(M_PI * sp38[var_r31] / 180.0); - spF0[var_r31].z = spB4.z + 120.0 * cos(M_PI * sp38[var_r31] / 180.0); + spF0[var_r31].x = spB4.x + 120.0 * sin(sp38[var_r31] * M_PI / 180.0); + spF0[var_r31].z = spB4.z + 120.0 * cos(sp38[var_r31] * M_PI / 180.0); BoardModelPosSetV(sp20[var_r31], &spF0[var_r31]); BoardModelRotSetV(sp20[var_r31], &spC0[var_r31]); } @@ -1541,8 +1521,8 @@ static void ExecItemWhistle(void) { spF0[var_r31].y = spB4.y; sp48[var_r31] = -1.0f; } - spF0[var_r31].x = spB4.x + sp28[var_r31] * sin(M_PI * sp38[var_r31] / 180.0); - spF0[var_r31].z = spB4.z + sp28[var_r31] * cos(M_PI * sp38[var_r31] / 180.0); + spF0[var_r31].x = spB4.x + sp28[var_r31] * sin(sp38[var_r31] * M_PI / 180.0); + spF0[var_r31].z = spB4.z + sp28[var_r31] * cos(sp38[var_r31] * M_PI / 180.0); BoardModelPosSetV(sp20[var_r31], &spF0[var_r31]); } } @@ -1571,7 +1551,7 @@ static void ExecItemWhistle(void) { BoardModelKill(sp20[var_r31]); } BoardModelMotionKill(temp_r28, temp_r21); - BoardModelMotionKill(temp_r28, temp_r20); + BoardModelMotionKill(temp_r28, temp_r20); BoardStarShowNext(currItemRestore); HuPrcKill(NULL); while (1) { @@ -1654,9 +1634,9 @@ static void ExecItemBowser(void) { } static s32 booMotTbl[3] = { - 0x00020018, - 0x00020016, - -1 + 0x00020018, + 0x00020016, + -1 }; static inline void ExecItemBooBallInlineFunc01(s32 speed) { @@ -1715,7 +1695,7 @@ static inline void ExecItemBooBallInlineFunc02(s32 speed) { BoardModelPosSetV(booBallMdl, &booBallPos); HuPrcVSleep(); } - booBallPos.y = sp20.y + 20.0f; + booBallPos.y = sp20.y + 20.0f; booBallScale.x = booBallScale.y = booBallScale.z = 1.0f; booBallAlpha = 255.0f; BoardModelPosSetV(booBallMdl, &booBallPos); @@ -1723,7 +1703,6 @@ static inline void ExecItemBooBallInlineFunc02(s32 speed) { BoardModelAlphaSet(booBallMdl, booBallAlpha); } -// https://decomp.me/scratch/0M6lm static void ExecItemBooBall(void) { UnkItemShowProcStruct spA0; UnkItemShowProcStruct sp80; @@ -1747,7 +1726,6 @@ static void ExecItemBooBall(void) { BoardModelLayerSet(booBallMdl, 2); BoardModelAttrSet(booBallMdl, 2); BoardModelVisibilitySet(booBallMdl, 0); - // Inline? (same pattern in ExecItemGenie) spA0.unk02 = suitMdl; spA0.unk04 = 4.0f; spA0.unk08 = 3.0f; @@ -1755,17 +1733,14 @@ static void ExecItemBooBall(void) { spA0.unk1C = 1; HuAudFXPlay(0x350); temp_r17 = ItemShowProc(&spA0, NULL); - // ====================================== BoardModelPosGet(suitMdl, &booBallPos); ExecItemBooBallInlineFunc02(60); - // Inline? ================================= sp80.unk02 = booBallMdl; sp80.unk04 = 4.0f; sp80.unk08 = 4.0f; sp80.unk10 = sp80.unk14 = sp80.unk18 = 0.0f; sp80.unk1C = 1; sp1C = BoardUiInlineFunc05(&sp80); - // ====================================== BoardMusStart(1, 1, 0x7F, 0); HuAudFXPlay(0x4C); BoardWinCreate(2, 0x120015, 3); @@ -1791,14 +1766,14 @@ static void ExecItemBooBall(void) { do { BoardWinCreateChoice(4, 0x120018, 3, 0); BoardWinAttrSet(0x10); - if (BoardPlayerCoinsGet(currItemRestore) < 0x32 || var_r28 == 0) { + if (BoardPlayerCoinsGet(currItemRestore) < 50 || var_r28 == 0) { BoardWinChoiceDisable(1); } if (var_r26 == 0) { BoardWinChoiceDisable(0); } if (GWPlayer[currItemRestore].com) { - if (var_r28 != 0 && BoardPlayerCoinsGet(currItemRestore) >= 0x32) { + if (var_r28 != 0 && BoardPlayerCoinsGet(currItemRestore) >= 50) { BoardComKeySetDown(); } else { BoardComKeySetUp(); @@ -1944,9 +1919,9 @@ static void ExecItemBooBall(void) { static void ForceConsts(void) { - (void)-0.5f; - (void)40.0f; - (void)125.0f; + (void)-0.5f; + (void)40.0f; + (void)125.0f; } static void LampParticleUpdate(s32 arg0, ParticleData *arg1) { @@ -2071,7 +2046,6 @@ static void GenieParticleUpdate(s32 arg0, ParticleData *arg1) { } } -// DATA + 0x224 static Vec shadowPos = { 0.0f, 4500.0f, 500.0f }; static Vec shadowTarget = { 0.0f, 0.9f, -0.1f }; static Vec shadowUp = { 0.0f, 0.0f, 500.0f }; @@ -2136,7 +2110,6 @@ static void GenieCameraCalc(UnkGenieCameraStruct *arg0, s32 arg1, float arg2, Ve } } -// DATA + 0x248 static s32 armUpMotTbl[] = { 0x005F005C, 0x001A005C, @@ -2148,7 +2121,6 @@ static s32 armUpMotTbl[] = { 0x0081005C }; -// DATA + 0x268 static s32 scareMotTbl[] = { 0x005F001C, 0x001A001C, @@ -2160,7 +2132,6 @@ static s32 scareMotTbl[] = { 0x0081001C }; -// DATA + 0x288 static s32 impactMotTbl[] = { 0x005F005E, 0x001A005E, @@ -2172,7 +2143,6 @@ static s32 impactMotTbl[] = { 0x0081005E }; -// DATA + 0x2A8 static UnkGenieCameraStruct cameraDataTbl[] = { 60.0f, { 0.0f, 100.0f, 950.0f }, { 0.0f, 100.0f, 600.0f }, 60.0f, { -353.0f, 100.0f, 662.5f }, { 0.0f, 100.0f, 600.0f }, @@ -2187,7 +2157,6 @@ static UnkGenieCameraStruct cameraDataTbl[] = { 5.0f, { 0.0f, 100.0f, -200.0f }, { 0.0f, 500.0f, 600.0f } }; -// DATA + 0x3DC static s32 genieMotTbl[] = { 0x0007007D, 0x0007007E, @@ -2594,7 +2563,7 @@ static void ExecItemBagShow(void) { break; } sp8 = sp14; - sp8.y += 15.0 * sin(M_PI * var_f31 / 180.0); + sp8.y += 15.0 * sin(var_f31 * M_PI / 180.0); BoardModelPosSetV(suitMdl, &sp8); var_f31 += 36.0f; HuPrcVSleep(); diff --git a/src/game/board/main.c b/src/game/board/main.c index 013dc2f5..ba00341f 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -8,6 +8,7 @@ #include "string.h" #include "game/hsfman.h" #include "game/hsfdraw.h" +#include "game/board/battle.h" #include "game/board/lottery.h" #include "game/board/main.h" #include "game/board/model.h" diff --git a/src/game/board/space.c b/src/game/board/space.c index cd504e5f..cf0118d0 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -1,5 +1,6 @@ #include "game/gamework_data.h" #include "game/flag.h" +#include "game/board/battle.h" #include "game/board/lottery.h" #include "game/board/main.h" #include "game/board/model.h" From fe775d4e2ee4cd1ad2cb1a5f671f2cd6156bb408 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 7 Mar 2024 14:21:12 -0600 Subject: [PATCH 048/106] Decompile board/fortune.c --- config/GMPE01_00/symbols.txt | 16 +- configure.py | 2 +- src/game/board/fortune.c | 409 +++++++++++++++++++++++++++++++++++ src/game/board/lottery.c | 14 +- 4 files changed, 425 insertions(+), 16 deletions(-) create mode 100644 src/game/board/fortune.c diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 2f787f26..8a4b938c 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -4621,9 +4621,9 @@ lbl_8011DEF0 = .rodata:0x8011DEF0; // type:object size:0x10 data:4byte lbl_8011DF00 = .rodata:0x8011DF00; // type:object size:0x90 data:4byte lbl_8011DF90 = .rodata:0x8011DF90; // type:object size:0x20 data:4byte lbl_8011DFB0 = .rodata:0x8011DFB0; // type:object size:0x20 data:4byte -lbl_8011DFD0 = .rodata:0x8011DFD0; // type:object size:0x20 -lbl_8011DFF0 = .rodata:0x8011DFF0; // type:object size:0x20 -lbl_8011E010 = .rodata:0x8011E010; // type:object size:0x10 +pickSpr = .rodata:0x8011DFD0; // type:object size:0x20 scope:local +handMdl = .rodata:0x8011DFF0; // type:object size:0x20 scope:local +ticketSpr = .rodata:0x8011E010; // type:object size:0x10 scope:local lbl_8011E020 = .rodata:0x8011E020; // type:object size:0x20 data:4byte lbl_8011E040 = .rodata:0x8011E040; // type:object size:0x24 lbl_8011E064 = .rodata:0x8011E064; // type:object size:0x4C @@ -4649,7 +4649,7 @@ lbl_8011E300 = .rodata:0x8011E300; // type:object size:0x24 data:4byte lbl_8011E324 = .rodata:0x8011E324; // type:object size:0x20 data:4byte lbl_8011E344 = .rodata:0x8011E344; // type:object size:0x2C data:4byte lbl_8011E370 = .rodata:0x8011E370; // type:object size:0x10 data:4byte -lbl_8011E380 = .rodata:0x8011E380; // type:object size:0x28 data:4byte +lbl_8011E380 = .rodata:0x8011E380; // type:object size:0x24 data:4byte lbl_8011E3A8 = .rodata:0x8011E3A8; // type:object size:0x24 data:4byte lbl_8011E3D0 = .rodata:0x8011E3D0; // type:object size:0x20 data:4byte lbl_8011E3F0 = .rodata:0x8011E3F0; // type:object size:0x20 data:4byte @@ -5289,7 +5289,7 @@ bombFXTbl = .data:0x8013AA78; // type:object size:0x20 scope:local battleSprPrioTbl = .data:0x8013AA98; // type:object size:0x16 scope:local jumptable_8013AAB0 = .data:0x8013AAB0; // type:object size:0x24 scope:local battleChanceTbl = .data:0x8013AAD4; // type:object size:0x3C scope:local -comFortuneMessTbl = .data:0x8013AB10; // type:object size:0x18 scope:local +comPrizeMessTbl = .data:0x8013AB10; // type:object size:0x18 scope:local booPlayerMotTbl = .data:0x8013AB28; // type:object size:0xC0 scope:local booSfxTbl = .data:0x8013ABE8; // type:object size:0x80 scope:local hostMess = .data:0x8013AC68; // type:object size:0x18 scope:local @@ -6417,7 +6417,7 @@ angleVal = .sbss:0x801D3FFC; // type:object size:0x2 scope:local data:2byte shopPlayer = .sbss:0x801D3FFE; // type:object size:0x1 scope:local data:byte shopMdlPtr = .sbss:0x801D4000; // type:object size:0x4 scope:local data:4byte shopMdlIdx = .sbss:0x801D4004; // type:object size:0x4 scope:local -lotteryProc = .sbss:0x801D4008; // type:object size:0x4 data:4byte +lotteryProc = .sbss:0x801D4008; // type:object size:0x4 scope:local data:4byte comInputDrawP = .sbss:0x801D400C; // type:object size:0x4 scope:local data:4byte lotteryTicketPickObj = .sbss:0x801D4010; // type:object size:0x4 scope:local data:4byte handUpdateF = .sbss:0x801D4014; // type:object size:0x4 scope:local data:4byte @@ -6521,7 +6521,7 @@ explodeObj = .sbss:0x801D4180; // type:object size:0x4 scope:local data:4byte battleCoinPosF = .sbss:0x801D4184; // type:object size:0x4 scope:local data:float battleCoinSpeed = .sbss:0x801D4188; // type:object size:0x4 scope:local data:float totalCoinStr = .sbss:0x801D418C; // type:object size:0x8 scope:local -battleMGIdx = .sbss:0x801D4194; // type:object size:0x1 scope:local data:byte +battleMGIdx = .sbss:0x801D4194; // type:object size:0x2 scope:local data:byte battleCoinIdx = .sbss:0x801D4196; // type:object size:0x1 scope:local data:byte currSpace = .sbss:0x801D4198; // type:object size:0x2 scope:local data:2byte mgChoice = .sbss:0x801D419A; // type:object size:0x1 scope:local data:byte @@ -6531,7 +6531,7 @@ fortuneProc = .sbss:0x801D41A0; // type:object size:0x4 scope:local data:4byte fortunePlatformObj = .sbss:0x801D41A4; // type:object size:0x4 scope:local data:4byte comStar = .sbss:0x801D41A8; // type:object size:0x1 scope:local data:byte comCoin = .sbss:0x801D41A9; // type:object size:0x1 scope:local data:byte -comType = .sbss:0x801D41AA; // type:object size:0x1 scope:local data:byte +comPrize = .sbss:0x801D41AA; // type:object size:0x1 scope:local data:byte comPlayer1 = .sbss:0x801D41AB; // type:object size:0x1 scope:local data:byte comPlayer2 = .sbss:0x801D41AC; // type:object size:0x1 scope:local data:byte currPlayer = .sbss:0x801D41AD; // type:object size:0x1 scope:local data:byte diff --git a/configure.py b/configure.py index c9bf7bd4..09847e08 100644 --- a/configure.py +++ b/configure.py @@ -388,7 +388,7 @@ config.libs = [ Object(Matching, "game/board/item.c"), Object(NonMatching, "game/board/bowser.c"), Object(Matching, "game/board/battle.c"), - Object(NonMatching, "game/board/fortune.c"), + Object(Matching, "game/board/fortune.c"), Object(Matching, "game/board/boo.c"), Object(NonMatching, "game/board/mg_setup.c"), Object(NonMatching, "game/board/boo_house.c"), diff --git a/src/game/board/fortune.c b/src/game/board/fortune.c new file mode 100644 index 00000000..97b3fae0 --- /dev/null +++ b/src/game/board/fortune.c @@ -0,0 +1,409 @@ +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/tutorial.h" +#include "game/board/audio.h" +#include "game/board/ui.h" +#include "game/board/space.h" + +#include "game/wipe.h" + +static Vec camTargetFortune; +static Vec camPosFortune; + +typedef struct platform_work { + struct { + u8 kill : 1; + u8 state : 2; + }; + s16 unk02; + s16 model; +} PlatformWork; + +static u32 comPrizeMessTbl[] = { + 0x1C0009, + 0x1C000A, + 0x1C000B, + 0x1C000D, + 0x1C000C, + 0x1C000E +}; + +static s8 currPlayer; +static s8 comPlayer2; +static s8 comPlayer1; +static s8 comPrize; +static s8 comCoin; +static s8 comStar; +static omObjData *fortunePlatformObj; +static Process *fortuneProc; + +static void FortuneExec(void); +static void DestroyFortune(void); +static void FortuneMain(void); +static void FortunePostMG(void); + +static void CreateFortunePlatform(void); +static void ExecFortunePlatform(omObjData *object); + +static void CameraCalcFortune(BoardCameraData *camera); + +static void ExecComFortuneWin(void); + +static void ConfigComFortune(void); + +static void ComFortuneAddStar(s32 player1, s32 player2, s32 max_stars); +static void ComFortuneAddCoin(s32 player1, s32 player2, s32 max_coins); +static void ComFortuneSwapCoin(s32 player1, s32 player2); +static void ComFortuneSwapStar(s32 player1, s32 player2); + +void BoardFortuneExec(s32 player, s32 space) +{ + if(_CheckFlag(0x1000B)) { + HuAudFXPlay(842); + BoardCameraViewSet(2); + BoardPlayerMotBlendSet(player, 0, 15); + while(!BoardPlayerMotBlendCheck(player)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + BoardTutorialHookExec(17, 0); + GWPlayer[player].color = 3; + return; + } + if(BoardPlayerSizeGet(player) == 2) { + return; + } + fortuneProc = HuPrcChildCreate(FortuneExec, 8195, 14336, 0, boardMainProc); + HuPrcDestructorSet2(fortuneProc, DestroyFortune); + currPlayer = player; + while(fortuneProc) { + HuPrcVSleep(); + } + GWPlayer[player].color = 3; +} + +static void FortuneExec(void) +{ + BoardAudSeqFadeOut(0, 1000); + if(!_CheckFlag(0x10005)) { + GWPlayer[currPlayer].show_next = 0; + FortuneMain(); + } else { + FortunePostMG(); + } + HuPrcEnd(); +} + +static void DestroyFortune(void) +{ + fortuneProc = NULL; +} + +static void FortuneMain(void) +{ + s32 i; + s32 sp8 = -1; + s32 dir_table[] = { + DATADIR_W01, + DATADIR_W02, + DATADIR_W03, + DATADIR_W04, + DATADIR_W05, + DATADIR_W06, + DATADIR_W10, + DATADIR_W20, + DATADIR_W21 + }; + HuAudFXPlay(842); + BoardPlayerMotBlendSet(currPlayer, 0, 15); + while(!BoardPlayerMotBlendCheck(currPlayer)) { + HuPrcVSleep(); + } + for(i=0; i<4; i++) { + if((int)(GWPlayer[i].team) != 0) { + GWPlayer[i].field08_bit11 = 1; + } else { + GWPlayer[i].field08_bit11 = 0; + } + if(i == currPlayer) { + GWPlayerCfg[i].group = 0; + } else { + GWPlayerCfg[i].group = 1; + } + } + BoardCameraViewSet(3); + BoardCameraMotionWait(); + CreateFortunePlatform(); + omVibrate(currPlayer, 60, 6, 6); + BoardCameraPosCalcFuncSet(CameraCalcFortune); + HuPrcSleep(60); + _SetFlag(0x1001C); + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuAudFXAllStop(); + BoardAudSeqFadeOutAll(); + _SetFlag(0x1000E); + BoardCameraPosCalcFuncSet(NULL); + if(fortunePlatformObj) { + OM_GET_WORK_PTR(fortunePlatformObj, PlatformWork)->kill = 1; + } + while(fortunePlatformObj) { + HuPrcVSleep(); + } + if(GWPlayer[GWSystem.player_curr].com) { + if((int)GWSystem.show_com_mg == 0) { + HuPrcSleep(60); + for(i=0; i<4; i++) { + s32 bit11 = GWPlayer[i].field08_bit11; + GWPlayer[i].team = bit11; + GWPlayerCfg[i].group = bit11; + } + ConfigComFortune(); + FortunePostMG(); + BoardMusStartBoard(); + ExecComFortuneWin(); + return; + } + } + GWMGAvailSet(444); + GWSystem.mg_next = 43; + _SetFlag(0x10005); + BoardNextOvlSet(OVL_M444); +} + +static void FortunePostMG(void) +{ + s16 space; + Vec pos; + BoardStatusItemSet(1); + space = GWPlayer[GWSystem.player_curr].space_curr; + BoardSpacePosGet(0, space, &pos); + BoardPlayerPosSetV(GWSystem.player_curr, &pos); + BoardCameraMoveSet(0); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + GWPlayer[currPlayer].show_next = 1; + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); + while(WipeStatGet()) { + HuPrcVSleep(); + } + _ClearFlag(0x1001C); + HuPrcSleep(12); +} + +static void CreateFortunePlatform(void) +{ + PlayerState *player; + Vec pos, rot; + PlatformWork *work; + fortunePlatformObj = omAddObjEx(boardObjMan, 257, 0, 0, -1, ExecFortunePlatform); + work = OM_GET_WORK_PTR(fortunePlatformObj, PlatformWork); + work->kill = 0; + work->unk02 = 0; + work->model = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 3), NULL, 0); + BoardSpacePosGet(0, GWPlayer[currPlayer].space_curr, &pos); + BoardSpaceRotGet(0, GWPlayer[currPlayer].space_curr, &rot); + BoardModelPosSetV(work->model, &pos); + BoardCameraTargetModelSet(work->model); + BoardModelHookSet(work->model, "player", BoardPlayerModelGet(currPlayer)); + BoardModelMotionStart(work->model, 0, 0); + BoardCameraPosGet(&camPosFortune); + BoardCameraTargetGet(&camTargetFortune); + HuAudFXPlay(834); +} + +static void CameraCalcFortune(BoardCameraData *camera) +{ + camera->pos = camPosFortune; + camera->up.x = 0; + camera->up.y = 1; + camera->up.z = 0; + camera->target = camTargetFortune; +} + +static void ExecFortunePlatform(omObjData *object) +{ + PlatformWork *work = OM_GET_WORK_PTR(object, PlatformWork); + if(work->kill || BoardIsKill()) { + Vec pos; + fortunePlatformObj = NULL; + BoardModelHookReset(work->model); + BoardSpacePosGet(0, GWPlayer[currPlayer].space_curr, &pos); + BoardPlayerPosSetV(currPlayer, &pos); + BoardModelKill(work->model); + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + switch(work->state) { + case 0: + { + s16 model; + ModelData *model_ptr; + HsfObject *focus_obj; + if(BoardModelMotionEndCheck(work->model)) { + work->state = 1; + } + model = BoardModelIDGet(work->model); + model_ptr = &Hu3DData[model]; + Hu3DMotionExec(model, model_ptr->unk_08, model_ptr->unk_64, 0); + focus_obj = Hu3DModelObjPtrGet(model, "player"); + BoardModelPosGet(work->model, &camTargetFortune); + camTargetFortune.x += focus_obj->data.curr.pos.x; + camTargetFortune.y += focus_obj->data.curr.pos.y; + camTargetFortune.z += focus_obj->data.curr.pos.z; + } + + break; + + case 1: + break; + + default: + break; + } +} + +static void ExecComFortuneWin(void) +{ + s32 player_curr = GWSystem.player_curr; + u32 mess_player1; + u32 mess_player2; + u32 mess_main; + u32 mess_prize; + + GWSystem.player_curr = -1; + mess_player1 = BoardPlayerGetCharMess(comPlayer1); + mess_player2 = BoardPlayerGetCharMess(comPlayer2); + mess_prize = comPrizeMessTbl[comPrize]; + if(comPrize == 0 || comPrize == 5 || comPrize == 3) { + mess_main = 0x1C0012; + } else { + if(comPrize == 2) { + if(comCoin == 0) { + mess_main = 0x1C0013; + } else { + mess_main = 0x1C0011; + } + } else { + if(comPrize == 1 || comPrize == 4) { + if(comStar == 0) { + mess_main = 0x1C0014; + } else { + mess_main = 0x1C0011; + } + } + } + } + BoardWinCreate(2, mess_main, -1); + BoardWinInsertMesSet(mess_player1, 0); + BoardWinInsertMesSet(mess_prize, 1); + BoardWinInsertMesSet(mess_player2, 2); + BoardWinWait(); + BoardWinKill(); + GWSystem.player_curr = player_curr; +} + +static void ConfigComFortune(void) +{ + s32 type; + s32 random; + s8 prizeTbl[] = { 5, 3, 0, 1, 4 }; + random = BoardRandMod(100); + if(random > 95) { + type = 0; + } else if(random > 60) { + type = 1; + } else { + type = 2; + } + switch(type) { + case 0: + comPrize = prizeTbl[BoardRandMod(2)]; + break; + + case 1: + comPrize = prizeTbl[BoardRandMod(3)+2]; + break; + + case 2: + comPrize = 2; + break; + + default: + break; + } + comPlayer1 = BoardRandMod(4); + comPlayer2 = comPlayer1; + while(comPlayer2 == comPlayer1) { + comPlayer2 = BoardRandMod(4); + } + switch(comPrize) { + case 4: + ComFortuneAddStar(comPlayer1, comPlayer2, 2); + break; + + case 1: + ComFortuneAddStar(comPlayer1, comPlayer2, 1); + break; + + case 2: + ComFortuneAddCoin(comPlayer1, comPlayer2, 20); + break; + + case 3: + ComFortuneSwapCoin(comPlayer1, comPlayer2); + ComFortuneSwapStar(comPlayer1, comPlayer2); + break; + + case 0: + ComFortuneSwapCoin(comPlayer1, comPlayer2); + break; + + case 5: + ComFortuneSwapStar(comPlayer1, comPlayer2); + break; + } +} + +static void ComFortuneAddStar(s32 player1, s32 player2, s32 max_stars) +{ + s32 stars = GWStarsGet(player1); + comStar = stars; + if(stars > max_stars) { + stars = max_stars; + } + BoardPlayerStarsAdd(player1, -stars); + BoardPlayerStarsAdd(player2, stars); +} + +static void ComFortuneAddCoin(s32 player1, s32 player2, s32 max_stars) +{ + s32 stars = BoardPlayerCoinsGet(player1); + comCoin = stars; + if(stars > max_stars) { + stars = max_stars; + } + BoardPlayerCoinsAdd(player1, -stars); + BoardPlayerCoinsAdd(player2, stars); +} + +static void ComFortuneSwapCoin(s32 player1, s32 player2) +{ + s32 temp; + temp = BoardPlayerCoinsGet(player1); + BoardPlayerCoinsSet(player1, BoardPlayerCoinsGet(player2)); + BoardPlayerCoinsSet(player2, temp); +} + +static void ComFortuneSwapStar(s32 player1, s32 player2) +{ + s32 temp; + temp = GWStarsGet(player1); + GWStarsSet(player1, GWStarsGet(player2)); + GWStarsSet(player2, temp); +} \ No newline at end of file diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c index e08f6781..745fd903 100755 --- a/src/game/board/lottery.c +++ b/src/game/board/lottery.c @@ -101,7 +101,7 @@ static s32 handUpdateF; // ... static omObjData *lotteryTicketPickObj; static s8 (*comInputDrawP)[2]; -Process *lotteryProc; +static Process *lotteryProc; static s16 hostMdl = -1; static s16 lotteryMot[4] = { -1, -1, -1, -1 }; @@ -1032,7 +1032,7 @@ static void ExecBallPrize(void) { } } -const s32 lbl_8011DFD0[] = { +static const s32 pickSpr[] = { 0x0007001E, 0x0007001F, 0x00070020, @@ -1043,7 +1043,7 @@ const s32 lbl_8011DFD0[] = { 0x00070025 }; -const s32 lbl_8011DFF0[] = { +static const s32 handMdl[] = { 0x00050009, 0x0005000A, 0x0005000B, @@ -1054,7 +1054,7 @@ const s32 lbl_8011DFF0[] = { 0x00050010 }; -const s32 lbl_8011E010[] = { +static const s32 ticketSpr[] = { 0x0005001D, 0x0005001E, 0x0005001F, @@ -1104,7 +1104,7 @@ static void ExecScratchTicket(s32 arg0) { var_r24 = GWPlayer[GWSystem.player_curr].character; var_r22 = ticketObj[arg0]; temp_r30 = OM_GET_WORK_PTR(var_r22, TicketWork); - lotteryMdl[4] = BoardModelCreate(lbl_8011DFF0[var_r24], NULL, 0); + lotteryMdl[4] = BoardModelCreate(handMdl[var_r24], NULL, 0); BoardModelLayerSet(lotteryMdl[4], 6); BoardModelPassSet(lotteryMdl[4], 0); BoardCameraDirGet(&spC); @@ -1295,7 +1295,7 @@ static void InitScratchSpr(void) { temp_r31->trans.y = 98.0f + 110.0f * (i / 4); temp_r31->rot.x = -56.0f; temp_r31->rot.y = temp_r31->trans.y; - BoardSpriteCreate(lbl_8011E010[ticketPrize[i]], 0x157C, NULL, &sp8); + BoardSpriteCreate(ticketSpr[ticketPrize[i]], 0x157C, NULL, &sp8); HuSprGrpMemberSet(temp_r28, i, sp8); HuSprPosSet(temp_r28, i, temp_r31->rot.x, temp_r31->rot.y); HuSprAttrSet(temp_r28, i, 8); @@ -1417,7 +1417,7 @@ static void InitScratchPick(void) { var_r31->unk00_field0 = 0; var_r31->unk01 = GWPlayer[GWSystem.player_curr].character; var_r31->unk08 = HuSprGrpCreate(1); - BoardSpriteCreate(lbl_8011DFD0[var_r31->unk01], 0x1388, 0, &var_r31->unk06); + BoardSpriteCreate(pickSpr[var_r31->unk01], 0x1388, 0, &var_r31->unk06); HuSprGrpMemberSet(var_r31->unk08, 0, var_r31->unk06); HuSprAttrSet(var_r31->unk08, 0, 8); HuSprPosSet(var_r31->unk08, 0, temp_f31, temp_f30); From a985df3fd1b2fc92d74dffa121fb0ac6466b6449 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Fri, 8 Mar 2024 19:26:37 -0500 Subject: [PATCH 049/106] BoardPlayerCopyEyeMat --- src/game/board/player.c | 85 ++++++++++++++++++++++++++++++++--------- 1 file changed, 68 insertions(+), 17 deletions(-) diff --git a/src/game/board/player.c b/src/game/board/player.c index b8235a3c..f7d23fc0 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -1,6 +1,8 @@ #include "game/board/player.h" + #include "game/chrman.h" #include "game/objsub.h" +#include "game/hsfman.h" #include "game/board/com.h" #include "game/board/main.h" #include "game/board/roll.h" @@ -48,23 +50,15 @@ static s16 suitCurrMot = -1; static omObjData* diceJumpObj[4] = {0, 0, 0, 0}; static omObjData* motDoneF[4] = {0, 0, 0, 0}; static s16 bowserSuitMot[5] = {-1, -1, -1, -1, -1}; -char* lbl_8013993C[] = { - "eye1", - "eye2", - "eye1", - "eye2", - "mat14", - "mat16", - "eye1", - "eye2", - "Clswario_eye_l1_AUTO14", - "Clswario_eye_l1_AUTO15", - "m_donkey_eye4", - "m_donkey_eye5", - "mat65", - "mat66", - "Clswaluigi_eye_l1_AUTO1", - "Clswaluigi_eye_l1_AUTO2", +char* lbl_8013993C[8][2] = { + { "eye1", "eye2" }, + { "eye1", "eye2" }, + { "mat14", "mat16" }, + { "eye1", "eye2" }, + { "Clswario_eye_l1_AUTO14", "Clswario_eye_l1_AUTO15" }, + { "m_donkey_eye4", "m_donkey_eye5" }, + { "mat65", "mat66" }, + { "Clswaluigi_eye_l1_AUTO1", "Clswaluigi_eye_l1_AUTO2" } }; s32 lbl_8013997C[] = { @@ -2238,8 +2232,65 @@ void UpdateBowserSuit(omObjData* arg0) { } } +void BoardPlayerSparkSet(s32 arg0) { + s16 currSpace = GWPlayer[arg0].space_curr; + + GWPlayer[arg0].field02_bit1 = 1; + GWPlayer[arg0].space_shock = currSpace; +} + // ... +static inline s32 test(s32 arg0) { + return BoardModelIDGet(BoardPlayerModelGet(arg0)); +} + +void BoardPlayerCopyEyeMat(s32 arg0, s32 arg1) { + HsfMaterial* var_r29; + s32 var_r24; + s32 var_r25; + u32 var_r27; + HsfAttribute* temp_r26; + char** temp_r28; + HsfData* hsfData; + HsfMaterial* material; + ModelData *model; + s16 modelId = BoardModelIDGet(BoardPlayerModelGet(arg0)); + model = &Hu3DData[modelId]; + hsfData = model->hsfData; + material = hsfData->material; + var_r29 = playerMatCopy[arg0]; + if (arg1 != 0) { + temp_r28 = &lbl_8013993C[GWPlayer[arg0].character][0]; + for (var_r25 = 0; var_r25 < hsfData->materialCnt; var_r25++, material++, var_r29++) { + var_r24 = 1; + + for (var_r27 = 0; var_r27 < material->numAttrs; var_r27++) { + temp_r26 = &hsfData->attribute[(s32) material->attrs[var_r27]]; + if ((strcmp(temp_r28[0], temp_r26->bitmap->name) == 0) || (strcmp(temp_r28[1], temp_r26->bitmap->name) == 0)) { + var_r24 = 0; + } + } + if (var_r24) { + if (arg1 != 0) { + material->color[0] *= 0.0f; + material->color[1] *= 0.0f; + material->color[2] *= 0.0f; + } else { + material->color[0] = var_r29->color[0]; + material->color[1] = var_r29->color[1]; + material->color[2] = var_r29->color[2]; + } + } + } + } else { + memcpy(hsfData->material, var_r29, hsfData->materialCnt * 0x3C); + (void)temp_r28; + } + DCStoreRange(hsfData->material, hsfData->materialCnt * 0x3C); +} + + void BoardPlayerCopyMat(s32 arg0) { s16 modelID; ModelData *model; From aad7618269bca772756fceb73064cde9143bf08a Mon Sep 17 00:00:00 2001 From: CreateSource Date: Fri, 8 Mar 2024 21:42:43 -0500 Subject: [PATCH 050/106] mg_setup beginnings --- src/game/board/mg_setup.c | 230 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 src/game/board/mg_setup.c diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c new file mode 100644 index 00000000..a12388e1 --- /dev/null +++ b/src/game/board/mg_setup.c @@ -0,0 +1,230 @@ +#include "unsplit.h" +#include "game/audio.h" +#include "game/objsub.h" +#include "game/wipe.h" +#include "game/flag.h" +#include "game/board/main.h" +#include "game/board/audio.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/ui.h" + +// structs +typedef struct structActiveMG { + s16 unk_00; + s16 unk_02; + s32 unk_04; +} structActiveMG; + +typedef struct bitcopy { + struct { + u8 field00_bit0 : 1; + u8 field00_bit1 : 3; + u8 field00_bit4 : 2; + u8 field00_bit6 : 1; + u8 field00_bit7 : 1; + }; + s8 unk_01; + s8 unk_02; + s8 unk_03; + s16 unk_04; +} bitcopy; + +// bss +static structActiveMG activeMG[4]; + +// data +static s32 luckyMessTbl[9] = { + 0x00140000, 0x00140005, 0x0014000A, 0x0014000F, + 0x00140014, 0x00140019, 0x00140000, 0x00140000, + 0x00140000 +}; + +// sbss +static u8 mgType; +static s32 luckyF; +static s16 mgNext; +static omObjData* mgSetupObj; +static Process* mgSetupProc; + +// sdata + +// sdata2 + +// determined functions +void BoardMGSetupExec(void); +void DestroyMGSetup(void); +void ExecMGSetup(void); +void CreateMGSetup(void); +void HideLuckyValue(void); +void BoardMGSetupPlayPop(s32, s16); + +// FUNCTIONS // + +void BoardMGSetupExec(void) { + mgSetupProc = HuPrcChildCreate(&ExecMGSetup, 0x2006, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(mgSetupProc, &DestroyMGSetup); + while (mgSetupProc != 0) { + HuPrcVSleep(); + } +} + +void DestroyMGSetup(void) { + GWSystem.player_curr = 0; + mgSetupProc = NULL; +} + +static inline s32 setupObjGet(void) { + bitcopy* work = (bitcopy*) mgSetupObj->work; + return work->field00_bit1; +} + +void ExecMGSetup(void) { + s32 sp60[9] = { + 0x750000, 0x760000, 0x770000, + 0x780000, 0x790000, 0x7A0000, + 0x7B0000, 0x7C0000, 0x7D0000 + }; + Vec sp54; + u16 var_r24; + s32 var_r22; + s32 var_r23; + s32 var_r31; + u32 var_r30; + bitcopy* temp_r29; + bitcopy* temp_r28; + bitcopy* temp_r27; + bitcopy* temp_r26; + bitcopy* temp_r25; + + luckyF = 0; + mgNext = 0; + GWSystem.player_curr = -1; + GWSystem.unk_32 = 1; + for (var_r31 = 0; var_r31 < 4; var_r31++) { + activeMG[var_r31].unk_00 = -1; + activeMG[var_r31].unk_04 = 0; + } + BoardPlayerMoveAwayStartCurr(GWPlayer[GWSystem.player_curr].space_curr, 1); + BoardCameraMoveSet(0); + BoardCameraTargetSpaceSet(BoardSpaceStarGetCurr()); + sp54.x = 0.0f; + sp54.y = 150.0f; + sp54.z = 0.0f; + BoardCameraMotionStartEx(-1, NULL, &sp54, 1300.0f, -1.0f, 0x15); + BoardCameraMotionWait(); + WipeCreate(1, 0, 0x15); + + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardFilterFadeInit(0x1E, 0xA0U); + CreateMGSetup(); + while (setupObjGet() != 7) { + HuPrcVSleep(); + } + if (BoardRandMod(0x64U) < 5U) { + HuPrcSleep(0x1E); + luckyF = 1; + temp_r29 = (bitcopy*) mgSetupObj->work; + temp_r29->field00_bit1 = 4; + temp_r29->unk_02 = 0; + temp_r29->unk_03 = 0; + temp_r29->unk_04 = 0; + HuAudFXPlay(0x35C); + while (setupObjGet() != 7) { + HuPrcVSleep(); + } + temp_r28 = (bitcopy*) mgSetupObj->work; + temp_r28->field00_bit1 = 1; + temp_r28->unk_02 = 0; + temp_r28->unk_03 = 0; + temp_r28->unk_04 = 0; + while (setupObjGet() != 7) { + HuPrcVSleep(); + } + var_r30 = luckyMessTbl[GWBoardGet()]; + BoardWinCreate(2, var_r30, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardWinKill(); + temp_r27 = (bitcopy*) mgSetupObj->work; + temp_r27->field00_bit1 = 5; + temp_r27->unk_02 = 0; + temp_r27->unk_03 = 0; + temp_r27->unk_04 = 0; + while (setupObjGet() != 7) { + HuPrcVSleep(); + } + switch (GWSystem.unk_32) { + case 1: + var_r30 = luckyMessTbl[GWBoardGet()] + 1; + break; + case 2: + var_r30 = luckyMessTbl[GWBoardGet()] + 2; + break; + case 3: + var_r30 = luckyMessTbl[GWBoardGet()] + 3; + break; + } + BoardWinCreate(2, var_r30, BoardWinPortraitGetStar()); + BoardWinWait(); + var_r30 = luckyMessTbl[GWBoardGet()] + 4; + BoardWinCreate(2, var_r30, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardWinKill(); + HideLuckyValue(); + } else { + temp_r26 = (bitcopy*) mgSetupObj->work; + temp_r26->field00_bit1 = 1; + temp_r26->unk_02 = 0; + temp_r26->unk_03 = 0; + temp_r26->unk_04 = 0; + while (setupObjGet() != 7) { + HuPrcVSleep(); + } + } + temp_r25 = (bitcopy*) mgSetupObj->work; + temp_r25->field00_bit1 = 6; + temp_r25->unk_02 = 0; + temp_r25->unk_03 = 0; + temp_r25->unk_04 = 0; + while (setupObjGet() != 7) { + HuPrcVSleep(); + } + HuDataDirClose(0x70000); + HuDataDirClose(0x20000); + HuDataDirClose(sp60[GWBoardGet()]); + HuPrcSleep(2); + if (_CheckFlag(0xBU) != 0) { + var_r23 = 0x140000; + } else { + var_r23 = mgInfoTbl[mgNext].data_dir; + } + var_r22 = BoardDataDirReadAsync(var_r23); + BoardAudSeqFadeOut(0, 0x3E8U); + _SetFlag(0x1000EU); + WipeColorSet(0xFFU, 0xFFU, 0xFFU); + WipeCreate(2, 0, -1); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + HuAudFXAllStop(); + _SetFlag(0x1001CU); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardStatusItemHideSet(var_r31, 1); + } + ((bitcopy*) (mgSetupObj->work))->field00_bit0 = 1; + BoardDataAsyncWait(var_r22); + var_r24 = mgNext + 0x191; + BoardMGSetupPlayPop(mgType, var_r24); + GWSystem.mg_next_type = -1; + GWMGAvailSet(var_r24); + GWSystem.mg_next = var_r24 - 0x191; + _SetFlag(0x10002U); + if (GWSystem.turn == GWSystem.max_turn) { + _SetFlag(0xAU); + } + BoardNextOvlSet(3); + HuPrcEnd(); +} From 620c6766570a88184ba49e4908e382f1b693e309 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Fri, 8 Mar 2024 22:56:12 -0600 Subject: [PATCH 051/106] Decompile more of board/player.c DoSparkSpace incomplete --- config/GMPE01_00/symbols.txt | 3 +- include/game/board/player.h | 21 +-- include/game/chrman.h | 2 +- src/game/board/player.c | 321 +++++++++++++++++++++++++++++++---- src/game/chrman.c | 2 +- 5 files changed, 295 insertions(+), 54 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 8a4b938c..bcb359ee 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5184,7 +5184,8 @@ lbl_8013997C = .data:0x8013997C; // type:object size:0x20 boardMotTbl = .data:0x8013999C; // type:object size:0x20 scope:local boardMotRevTbl = .data:0x801399BC; // type:object size:0x20 scope:local bowserSuitCharMdlTbl = .data:0x801399DC; // type:object size:0x20 scope:local -bowserSuitMotTbl = .data:0x801399FC; // type:object size:0x34 scope:local +bowserSuitMotTbl = .data:0x801399FC; // type:object size:0x14 scope:local +sparkMotTbl = .data:0x80139A10; // type:object size:0x20 scope:local boardSparkSfxTbl = .data:0x80139A30; // type:object size:0x20 scope:local boardSparkSfxTblAlt = .data:0x80139A50; // type:object size:0x20 scope:local megaSquishObj = .data:0x80139A70; // type:object size:0x10 scope:local diff --git a/include/game/board/player.h b/include/game/board/player.h index 3956df8b..3f47a342 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -115,32 +115,23 @@ void BoardJunctionMaskSet(s32); void BoardJunctionMaskReset(s32); void BoardJunctionMaskZero(void); void BoardPlayerVoiceEnableSet(s32, s32, s32); -void InitJunction(s32, s32, f32); -static void UpdateJunctionGfx(omObjData*); -static void StopJunctionPlayer(s32); -static void RestoreJunction(f32, s32); -static s32 GetDefaultDirection(f32, f32*, s32); -static s32 DoDebugMove(s32, s16*); -static s32 ExecJunction(s32, s16*); + + void BoardPlayerMoveTo(s32, s32); void BoardPlayerMoveBetween(s32, s32, s32); void BoardPlayerMoveToAsync(s32, s32); void BoardPlayerPosLerpStart(s32, Vec*, Vec*, s16); -static void PlayerPosLerpFunc(omObjData*); void BoardPlayerDiceJumpStart(s32); s32 BoardPlayerDiceJumpCheck(s32); -static void DiceJumpFunc(omObjData*); void BoardRotateDiceNumbers(s32); void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2); -static void UpdateDiceDigitSprite(omObjData*); -static void UpdateDiceDigit2D(omObjData*); + void BoardPlayerBtnDownWait(s32, u32); void BoardPlayerAutoSizeSet(s32, s32); s32 BoardPlayerAutoSizeGet(s32); u32 BoardPlayerMoveAwayIsDone(void); void BoardPlayerMoveAwayStart(s32, s32, s32); void BoardPlayerMoveAwayStartCurr(s32, s32); -static void MoveAwayObjFunc(omObjData*); void BoardPlayerCopyMat(s32); void BoardBowserSuitMotionSetJump(void); //... @@ -149,21 +140,17 @@ s32 BoardPlayerAutoSizeGet(s32); void BoardPlayerAutoSizeSet(s32, s32); void BoardPlayerCopyMat(s32); void BoardBowserSuitKill(s32); -void SetRollPlayerSize(s32); void BoardDiceDigit2DInit(s32, s32); void BoardDiceDigit2DUpdateEnable(s32); -s32 DoSparkSpace(s32, s32); -s32 MegaPlayerPassFunc(s32, s16); +void BoardPlayerResizeAnimExec(s32 player, s32 size); s32 BoardPlayerAnimBlendCheck(s32); void BoardBowserSuitMotionSetWait(void); void BoardBowserSuitPlayerModelKill(void); void BoardDiceDigit2DShowSet(s32); -s32 MegaPlayerPassFunc(s32, s16); s32 BoardPlayerMotBlendCheck(s32); void BoardPlayerMoveAwayStartCurr(s32, s32); void BoardBowserSuitMotionSetWalk(void); s16 BoardBowserSuitModelGet(void); -void UpdateDiceDigit2D(omObjData*); void MoveAwayObjFunc(omObjData*); void UpdateBowserSuit(omObjData*); diff --git a/include/game/chrman.h b/include/game/chrman.h index 05f5033d..0dd38dc2 100755 --- a/include/game/chrman.h +++ b/include/game/chrman.h @@ -42,6 +42,6 @@ void fn_8004F52C(s16 character, s32 arg1); void CharModelEffectEnableSet(s16 character, s32 arg1); s32 CharModelEffectNpcInit(s16 arg0, s16 arg1, s16 arg2, s16 arg3); s32 CharModelEffectNpcInitSilent(s16 arg0, s16 arg1, s16 arg2); -void CharModelStepTypeSet(s16 character, s32 arg1); +s32 CharModelStepTypeSet(s16 character, s32 arg1); #endif diff --git a/src/game/board/player.c b/src/game/board/player.c index f7d23fc0..11904f3d 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -10,8 +10,35 @@ #include "game/board/ui.h" #include "game/board/view.h" #include "game/board/model.h" +#include "game/board/item.h" +#include "game/board/basic_space.h" +#include "game/board/audio.h" #include "game/pad.h" +static void InitJunction(s32, s32, f32); +static void UpdateJunctionGfx(omObjData*); +static void StopJunctionPlayer(s32); +static void RestoreJunction(f32, s32); + +static s32 GetDefaultDirection(f32, f32*, s32); +static s32 DoDebugMove(s32, s16*); +static s32 ExecJunction(s32, s16*); + +static void PlayerPosLerpFunc(omObjData*); +static void DiceJumpFunc(omObjData*); + +static void UpdateDiceDigitSprite(omObjData*); +static void UpdateDiceDigit2D(omObjData*); +static void MoveAwayObjFunc(omObjData*); + +static void MoveAwayObjFunc(omObjData*); +static void UpdateBowserSuit(omObjData*); + +static s32 DoSparkSpace(s32 player, s32 pause_cam); +static void RemoveSparkSpace(s32 player); +static void SetRollPlayerSize(s32 player); +static s32 MegaPlayerPassFunc(s32, s16); + //TODO: Give better name typedef struct bitcopy { struct { @@ -89,9 +116,12 @@ static s32 bowserSuitCharMdlTbl[] = { static s32 bowserSuitMotTbl[] = { 0x40019, 0x4001A, 0x4001B, 0x4001E, - 0x4001F, 0x70095, 0x70096, 0x70097, - 0x70098, 0x70099, 0x7009A, 0x7009B, - 0x7009C, + 0x4001F +}; + +static s32 sparkMotTbl[] = { + 0x70095, 0x70096, 0x70097, 0x70098, + 0x70099, 0x7009A, 0x7009B, 0x7009C, }; static s32 boardSparkSfxTbl[] = { @@ -113,15 +143,6 @@ static s32 megaSquishSfxTbl[] = { 0x228, 0x268, 0x2A8, 0x2E8, }; -inline PlayerState* GetPlayer(s32 index) { - return &GWPlayer[index]; -} - -inline s16 GetBoardPlayer(s32 index) { - PlayerState *player = GetPlayer(index); - return boardPlayerMdl[player->player_idx]; -} - s32 BoardRollTypeGet(void) { return rollType; } @@ -511,8 +532,9 @@ void BoardPlayerMotionStart(s32 arg0, s32 arg1, s32 arg2) { } void BoardPlayerMotionShiftSet(s32 arg0, s32 arg1, f32 arg8, f32 arg9, u32 arg2) { + s32 temp_r29; PlayerState* player; - s32 temp_r29; + player = BoardPlayerGet(arg0); if (arg1 == 0) { @@ -592,7 +614,7 @@ void BoardPlayerSizeSet(s32 arg0, s32 arg1) { } else { CharModelStepTypeSet(GWPlayer[arg0].character, 0); } - BoardModelScaleSetV(BoardPlayerModelGet(arg0), &temp_r4[arg1]); + BoardPlayerScaleSetV(arg0, &temp_r4[arg1]); } s32 BoardPlayerSizeGet(s32 idx) { @@ -1725,21 +1747,14 @@ static void DiceJumpFunc(omObjData* arg0) { } } -void BoardRotateDiceNumbers(s32 arg0) { - PlayerState* temp_r27; - s32 var_r29; - if (GWPlayer[arg0].bowser_suit != 0) { +void BoardRotateDiceNumbers(s32 arg0) +{ + if (GWPlayer[arg0].bowser_suit) { BoardBowserSuitMotionSetWait(); BoardBowserSuitPlayerModelKill(); } - temp_r27 = BoardPlayerGet(arg0); - if (playerMot[temp_r27->player_idx] != 1) { - var_r29 = BoardModelMotionShiftSet(BoardPlayerModelGet(arg0), 1, 0.0f, 8.0f, 0x40000001); - if (var_r29 == 0) { - playerMot[temp_r27->player_idx] = 1; - } - } + BoardPlayerMotionShiftSet(arg0, 1, 0.0f, 8.0f, 0x40000001); } void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2) { @@ -2029,12 +2044,13 @@ void BoardPlayerAutoSizeSet(s32 player, s32 value) { } s32 BoardPlayerAutoSizeGet(s32 arg0) { - PlayerState* temp_r30 = BoardPlayerGet(arg0); - - if (temp_r30 != 0 ) { - arg0 = temp_r30->auto_size; + PlayerState* player; + + player = BoardPlayerGet(arg0); + if(!player) { + return; } - return arg0; + return player->auto_size; } u32 BoardPlayerMoveAwayIsDone(void) { @@ -2239,10 +2255,247 @@ void BoardPlayerSparkSet(s32 arg0) { GWPlayer[arg0].space_shock = currSpace; } -// ... +static s32 DoSparkSpace(s32 player, s32 pause_cam) +{ + s32 i; + s16 temp_r28; + s32 coin; + s32 temp_r17; + Vec pos, rot; + Vec coin_pos; + s16 sp15C[4] = { -1, -1, -1, -1 }; + s32 sp138; + s32 sp134; + s32 sp130; + s32 sp12C; + s32 sp128; + s8 sp124[4] = { -1, -1, -1, -1 }; + s8 sp120[4] = { -1, -1, -1, -1 }; + s16 sp34; + s16 sp32; + s16 sp30; + s16 sp2E; + s16 sp2C; + sp30 = GWSystem.player_curr; + sp138 = 0; + sp34 = GWPlayer[player].space_curr; + + BoardSpacePosGet(0, sp34, &pos); + BoardSpaceRotGet(0, sp34, &rot); + for(i=0; i<4; i++) { + if(GWPlayer[i].space_shock == sp34) { + sp32 = i; + sp138 = 1; + } + } + if(!sp138) { + return 0; + } + BoardDiceDigit2DShowSet(0); + if(pause_cam) { + BoardCameraMoveSet(0); + } else { + BoardCameraMoveSet(1); + } + BoardCameraMotionWait(); + BoardCameraTargetPlayerSet(player); + BoardRotateDiceNumbers(player); + temp_r28 = BoardModelCreate(0x70074, NULL, 0); + BoardModelMotionStart(temp_r28, 0, 0x40000002); + BoardModelMotionTimeSet(temp_r28, 30.0f); + BoardModelAttrSet(temp_r28, 0x40000002); + BoardModelRotSet(temp_r28, rot.x-90.0f, rot.y, rot.z); + BoardModelScaleSet(temp_r28, 2.0f, 2.0f, 2.0f); + BoardModelVisibilitySet(temp_r28, 0); + BoardModelLayerSet(temp_r28, 1); + sp2E = BoardModelCreate(0x70067, NULL, 0); + BoardModelLayerSet(sp2E, 1); + BoardModelMotionStart(sp2E, 0, 0); + HuAudFXPlay(796); + HuPrcSleep(2); + BoardModelAttrReset(temp_r28, 0x40000002); + BoardModelVisibilitySet(temp_r28, 1); + BoardModelPosSet(temp_r28, pos.x, 8.0f+pos.y, pos.z); + BoardModelPosSetV(sp2E, &pos); + sp128 = -1; + for(sp134=i=0; i<4; i++) { + if(GWPlayer[i].space_curr == sp34) { + sp124[sp134++] = i; + sp15C[i] = BoardPlayerMotionCreate(i, sparkMotTbl[GWPlayer[i].character]); + BoardPlayerMotionShiftSet(i, sp15C[i], 0, 8, 0); + HuAudFXPlay(boardSparkSfxTblAlt[GWPlayer[i].character]); + if(GWPlayer[i].bowser_suit) { + BoardModelMotionShiftSet(suitMdl, bowserSuitMot[4], 0.0f, 4.0f, 0); + sp128 = i; + } + } + } + sp130 = sp134; + HuPrcSleep(60); + while(!BoardModelMotionEndCheck(sp2E)) { + HuPrcVSleep(); + } + sp2C = 255; + for(i=0; i<45; i++) { + sp2C -= 5; + if(sp2C < 0) { + sp2C = 0; + } + BoardModelAlphaSet(temp_r28, sp2C); + BoardModelAlphaSet(sp2E, sp2C); + HuPrcVSleep(); + } + temp_r17 = BoardRollTypeGet(); + if(temp_r17 == 0 || temp_r17 == 1 || temp_r17 == 2 || temp_r17 == 3 || temp_r17 == 10) { + BoardCameraTargetPlayerSet(player); + BoardRotateDiceNumbers(player); + HuPrcSleep(12); + BoardItemPlayerRestore(player, temp_r17); + while(!BoardItemDoneCheck()) { + HuPrcVSleep(); + } + rollType = -1; + } + if(rollResized) { + BoardPlayerSizeRestore(player); + rollResized = 0; + } + if(sp128 != -1) { + HuAudFXPlay(boardSparkSfxTbl[GWPlayer[sp128].character]); + } + for(i=0; i 10) { + coin = 10; + } + if(coin > 0) { + + BoardPlayerPosGet(sp124[i], &coin_pos); + coin_pos.y += 250.0f; + sp120[i] = BoardCoinChgCreate(&coin_pos, -coin); + } + } + for(sp12C=i=0; ihsfData; temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, temp_r31->materialCnt * 0x3C, 0x10000000U); diff --git a/src/game/chrman.c b/src/game/chrman.c index ba9bd32e..676c6793 100755 --- a/src/game/chrman.c +++ b/src/game/chrman.c @@ -2050,7 +2050,7 @@ static void UpdateNpcEffect(void) { } } -void CharModelStepTypeSet(s16 character, s32 arg1) { +s32 CharModelStepTypeSet(s16 character, s32 arg1) { UnkCharInstanceStruct *temp_r31 = &charInstance[character]; temp_r31->unkB0 = arg1; From 953448f664b364b3b6cb4fd65558375268ea830c Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 9 Mar 2024 12:38:25 -0500 Subject: [PATCH 052/106] static --- src/game/board/mg_setup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index a12388e1..44a5791e 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -69,7 +69,7 @@ void BoardMGSetupExec(void) { } } -void DestroyMGSetup(void) { +static void DestroyMGSetup(void) { GWSystem.player_curr = 0; mgSetupProc = NULL; } @@ -79,7 +79,7 @@ static inline s32 setupObjGet(void) { return work->field00_bit1; } -void ExecMGSetup(void) { +static void ExecMGSetup(void) { s32 sp60[9] = { 0x750000, 0x760000, 0x770000, 0x780000, 0x790000, 0x7A0000, From 3f28d6aafa87a95168c519197413397d412ce0a4 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 9 Mar 2024 13:05:09 -0500 Subject: [PATCH 053/106] fix function pre-definitions --- src/game/board/mg_setup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index 44a5791e..108e67e3 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -53,8 +53,8 @@ static Process* mgSetupProc; // determined functions void BoardMGSetupExec(void); -void DestroyMGSetup(void); -void ExecMGSetup(void); +static void DestroyMGSetup(void); +static void ExecMGSetup(void); void CreateMGSetup(void); void HideLuckyValue(void); void BoardMGSetupPlayPop(s32, s16); From 7a42fa782d09f10c3f89f00b62a7995d4618c2d8 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 9 Mar 2024 21:20:03 -0500 Subject: [PATCH 054/106] halfway through mg_setup also fixed up m401 --- src/REL/m401Dll/m401Dll.c | 38 +-- src/REL/m401Dll/m401Dll.h | 47 ++-- src/game/board/mg_setup.c | 579 +++++++++++++++++++++++++++++++++++++- 3 files changed, 617 insertions(+), 47 deletions(-) diff --git a/src/REL/m401Dll/m401Dll.c b/src/REL/m401Dll/m401Dll.c index 020305ca..3c19e79f 100644 --- a/src/REL/m401Dll/m401Dll.c +++ b/src/REL/m401Dll/m401Dll.c @@ -220,8 +220,8 @@ void fn_2_C1C(unkStructBSS114* arg0) { void fn_2_11D0(unkStructBSS114* arg0) { unkStructBSS114* sp1C; - Vec3f sp18; - Vec3f spC; + Vec sp18; + Vec spC; unkSubstructBSS114* sp8; unkSubstructBSS114* temp_r31; s32 i; @@ -341,9 +341,9 @@ void fn_2_1858(s16 arg0, s16 arg1) { } // void fn_2_1A38(unkStructBSS114* arg0) { -// Vec3f sp20; -// Vec3f sp14; -// Vec3f sp8; +// Vec sp20; +// Vec sp14; +// Vec sp8; // unkStructBSS114 *temp; // unkStructBSS114 *temp2; @@ -364,8 +364,8 @@ void fn_2_1858(s16 arg0, s16 arg1) { // } // void fn_2_1B80(unkStructBSS114* arg0) { -// Vec3f sp14; -// Vec3f sp8; +// Vec sp14; +// Vec sp8; // unkStructBSS114* temp; // unkStructBSS114* temp2; @@ -384,9 +384,9 @@ void fn_2_1858(s16 arg0, s16 arg1) { // } // void fn_2_1CF0(unkStructBSS114* arg0) { -// Vec3f sp20; -// Vec3f sp14; -// Vec3f sp8; +// Vec sp20; +// Vec sp14; +// Vec sp8; // unkStructBSS114 *temp; // temp = Hu3DModelObjPtrGet(arg0->unk_40->unk_00[0], lbl_2_data_124[2]); @@ -404,10 +404,10 @@ void fn_2_1858(s16 arg0, s16 arg1) { // } // void fn_2_1DE8(unkStructBSS114* arg0) { -// Vec3f sp2C; -// Vec3f sp20; -// Vec3f sp14; -// Vec3f sp8; +// Vec sp2C; +// Vec sp20; +// Vec sp14; +// Vec sp8; // unkStructBSS114 *temp2; // unkStructBSS114 *temp; @@ -440,7 +440,7 @@ void fn_2_1858(s16 arg0, s16 arg1) { // } // void fn_2_20B0(omObjData* arg0) { -// Vec3f sp8; +// Vec sp8; // omObjData* temp; // temp = Hu3DModelObjPtrGet(arg0->model[0], lbl_2_data_124[4]); @@ -461,10 +461,10 @@ void fn_2_1858(s16 arg0, s16 arg1) { // } // void fn_2_21F8(omObjData* arg0) { -// Vec3f sp2C; -// Vec3f sp20; -// Vec3f sp14; -// Vec3f sp8; +// Vec sp2C; +// Vec sp20; +// Vec sp14; +// Vec sp8; // s32 i; // s32 var_r30_2; // unkStructBSS114* temp; diff --git a/src/REL/m401Dll/m401Dll.h b/src/REL/m401Dll/m401Dll.h index 76adade8..0bf29f61 100644 --- a/src/REL/m401Dll/m401Dll.h +++ b/src/REL/m401Dll/m401Dll.h @@ -1,7 +1,8 @@ -#include "common.h" +#include "unsplit.h" #include "REL/executor.h" #include #include "game/objsub.h" +#include "game/object.h" // global data // typedef struct unkStruct18FC10 { @@ -35,7 +36,7 @@ typedef struct unkStructBSS114 { s32 unk_04; char unk_08[0xC]; void *unk_14; - Vec3f unk_18; + Vec unk_18; char unk_24[0x1C]; unkSubstructBSS114 *unk_40; char unk_44[0x8]; @@ -46,7 +47,7 @@ typedef struct unkStructBSS114 { } unkStructBSS114; typedef struct unkStruct18BFC0 { char unk_00[0x14]; - Vec3f unk_14; + Vec unk_14; } unkStruct18BFC0; typedef struct unkStruct18C8FC { s16 unk_00; @@ -61,12 +62,12 @@ extern s16 lbl_801D3CC2; extern void Hu3DModelAttrSet(s16, s32); extern void Hu3DModelAttrReset(s16, s32); extern omObjData* Hu3DModelObjPtrGet(s16, s32); -extern void Hu3DCameraPosSetV(s32, Vec3f*, Vec3f*, Vec3f*); -extern s16 Hu3DGLightCreateV(Vec3f*, Vec3f*, s32*); +extern void Hu3DCameraPosSetV(s32, Vec*, Vec*, Vec*); +extern s16 Hu3DGLightCreateV(Vec*, Vec*, s32*); extern void Hu3DGLightInfinitytSet(s16); extern void Hu3DReflectNoSet(s16); extern void Hu3DShadowCreate(f32, f32, f32); -extern void Hu3DShadowPosSet(Vec3f*, Vec3f*, Vec3f*); +extern void Hu3DShadowPosSet(Vec*, Vec*, Vec*); extern void Hu3DShadowTPLvlSet(f32); extern void Hu3DFogSet(f32, f32, u8, u8, u8); extern void omOvlReturnEx(s16, s16); @@ -80,7 +81,7 @@ extern void omSetSca(omObjData*, f32, f32, f32); extern u8 frand(void); extern s32 HuAudFXPlay(s32); extern void HuAudFXStop(s32); -extern s32 HuAudFXEmiterPlay(s32, Vec3f*); +extern s32 HuAudFXEmiterPlay(s32, Vec*); extern void HuAudFXListnerKill(void); extern void HuAudSeqFadeOut(s32, s32); extern s16 MGSeqCreate(s32, ...); @@ -95,11 +96,11 @@ extern void espBankSet(s16, s16); extern void espDrawNoSet(s16, s16); extern void WipeCreate(s16, s16, s16); extern u8 WipeStatGet(void); -extern f32 PSVECNormalize(Vec3f*, Vec3f*); +extern f32 PSVECNormalize(Vec*, Vec*); // local data // typedef struct unkStructBSS54 { - Vec3f unk_00; + Vec unk_00; } unkStructBSS54; typedef struct unkStructBSS100 { void *unk_00; @@ -108,12 +109,12 @@ typedef struct unkStructBSS100 { extern f32 lbl_2_data_0 = -7.1875f; extern s16 lbl_2_data_4[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; -extern Vec3f lbl_2_data_14 = { 1500.0f, 2500.0f, 1500.0f }; -extern Vec3f lbl_2_data_20 = { 0.0f, -1.0f, 0.0f }; +extern Vec lbl_2_data_14 = { 1500.0f, 2500.0f, 1500.0f }; +extern Vec lbl_2_data_20 = { 0.0f, -1.0f, 0.0f }; extern s32 lbl_2_data_2C = -1; -extern Vec3f lbl_2_data_30 = { 0.0f, 2500.0f, 0.0f }; -extern Vec3f lbl_2_data_3C = { 0.0f, 1.0f, -1.0f }; -extern Vec3f lbl_2_data_48 = { 0.0f, 0.0f, 0.0f }; +extern Vec lbl_2_data_30 = { 0.0f, 2500.0f, 0.0f }; +extern Vec lbl_2_data_3C = { 0.0f, 1.0f, -1.0f }; +extern Vec lbl_2_data_48 = { 0.0f, 0.0f, 0.0f }; extern char lbl_2_data_6F[] = "winnercnt:%d"; extern s32 lbl_2_data_80[8] = { 0x610000, 0x610001, 0x610002, 0x610003, 0x610004, 0x610005, 0x610006, 0x610007 }; extern s32 lbl_2_data_124[5]; @@ -121,13 +122,13 @@ extern s32 lbl_2_data_124[5]; extern s32 lbl_2_bss_8; extern f32 lbl_2_bss_10; extern unkStruct18FC10* lbl_2_bss_1C; -extern Vec3f lbl_2_bss_2C; -extern Vec3f lbl_2_bss_38; -extern Vec3f lbl_2_bss_44; +extern Vec lbl_2_bss_2C; +extern Vec lbl_2_bss_38; +extern Vec lbl_2_bss_44; extern f32 lbl_2_bss_50; extern unkStructBSS54 lbl_2_bss_54; -extern Vec3f lbl_2_bss_60; -extern Vec3f lbl_2_bss_6C; +extern Vec lbl_2_bss_60; +extern Vec lbl_2_bss_6C; extern f32 lbl_2_bss_84; extern f32 lbl_2_bss_88; extern s32 lbl_2_bss_90[4]; @@ -180,7 +181,7 @@ void fn_2_48A0(void*); void fn_2_7CB4(void*); void fn_2_8E74(void*); void fn_2_95E4(void*); -void fn_2_91AC(void*, Vec3f*); +void fn_2_91AC(void*, Vec*); void fn_2_9D00(void*); void fn_2_BD90(void*); void fn_2_C6DC(void*); @@ -188,10 +189,10 @@ void fn_2_C130(void); void fn_2_D088(void*); void fn_2_DBCC(s16); void fn_2_E6BC(s32, f32, f32, f32, f32, f32); -unkStructBSS114* fn_2_FC40(s32, Vec3f*, Vec3f*, Vec3f*); -void fn_2_10240(Vec3f*, Vec3f*); +unkStructBSS114* fn_2_FC40(s32, Vec*, Vec*, Vec*); +void fn_2_10240(Vec*, Vec*); void fn_2_1041C(void); s32 fn_2_14640(void*); void fn_2_10710(void); s16 fn_2_1079C(void); -s32 fn_2_10A88(Vec3f*, s16); +s32 fn_2_10A88(Vec*, s16); diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index 108e67e3..c021ac6a 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -8,14 +8,22 @@ #include "game/board/player.h" #include "game/board/space.h" #include "game/board/ui.h" +#include "game/board/tutorial.h" // structs typedef struct structActiveMG { s16 unk_00; - s16 unk_02; + s8 unk_02; + s8 unk_03; s32 unk_04; } structActiveMG; +typedef struct unkSubstructR31 { + s16 unk_00[4]; + char unk_08[0x14]; + Vec unk_1C[13][13]; +} unkSubstructR31; + typedef struct bitcopy { struct { u8 field00_bit0 : 1; @@ -24,16 +32,46 @@ typedef struct bitcopy { u8 field00_bit6 : 1; u8 field00_bit7 : 1; }; - s8 unk_01; - s8 unk_02; + struct { + u8 field01_bit0 : 4; + }; + u8 unk_02; s8 unk_03; s16 unk_04; + u8 unk_06; + s32 unk_08; + unkSubstructR31* unk_0C; } bitcopy; // bss static structActiveMG activeMG[4]; +static s16 mgListAll[0x20]; // data +static s32 mgSetupSprTbl[13] = { + 0x0007004B, 0x0007004C, 0x0007004D, 0x0007004E, + 0x0007004F, 0x00070052, 0x00070050, 0x00070051, + 0x00070053, 0x00070054, 0x00070055, 0x00070068, + 0x00070056 +}; +static Vec statusLayout4P[4] = { + { 170.0f, 244.0f, 0.0f }, + { 406.0f, 244.0f, 0.0f }, + { 170.0f, 364.0f, 0.0f }, + { 406.0f, 364.0f, 0.0f }, +}; +static Vec statusLayout1Vs3[4] = { + { 170.0f, 304.0f, 0.0f }, + { 406.0f, 224.0f, 0.0f }, + { 406.0f, 304.0f, 0.0f }, + { 406.0f, 384.0f, 0.0f }, +}; +static Vec statusLayout2Vs2[4] = { + { 170.0f, 260.0f, 0.0f }, + { 170.0f, 348.0f, 0.0f }, + { 406.0f, 260.0f, 0.0f }, + { 406.0f, 348.0f, 0.0f }, +}; static s32 luckyMessTbl[9] = { 0x00140000, 0x00140005, 0x0014000A, 0x0014000F, 0x00140014, 0x00140019, 0x00140000, 0x00140000, @@ -55,8 +93,22 @@ static Process* mgSetupProc; void BoardMGSetupExec(void); static void DestroyMGSetup(void); static void ExecMGSetup(void); -void CreateMGSetup(void); -void HideLuckyValue(void); +static void DetermineMGList(bitcopy*); +static void SetupStatusLayout(void); +static s32 GetMGType(void); +static s32 GetMGTypeTeam(void); +static void CreateMGSetup(void); +static void UpdateMGSetup(omObjData*); +static void CenterStatus(bitcopy*, omObjData*); +static void SeparateStatus(bitcopy*, omObjData*); +static void PopupVS(bitcopy*, omObjData*); +// ... +static void FallMGType(bitcopy*, omObjData*); +static void LuckyMGFall(bitcopy*, omObjData*); +static void UpdateLuckyValue(bitcopy*, omObjData*); +static void UpdateMGList(bitcopy*, omObjData*); +static void HideLuckyValue(void); +s32 BoardMGSetupPlayPush(s32, s16); void BoardMGSetupPlayPop(s32, s16); // FUNCTIONS // @@ -228,3 +280,520 @@ static void ExecMGSetup(void) { BoardNextOvlSet(3); HuPrcEnd(); } + +static void DetermineMGList(bitcopy* arg0) { + MgInfo* var_r31; + s32 temp_r23; + s32 var_r30; + s16* var_r28; + s32 var_r22; + s32 var_r21; + s32 var_r24; + s32 var_r27; + u32 temp_r20; + s32 var_r29; + u32 var_r19; + s32 temp_r18; + u32* temp_r26; + s16* temp_r25; + + var_r24 = 0; + var_r31 = mgInfoTbl; + + for (var_r27 = 0; var_r31->ovl != 0xFFFF; var_r31++, var_r27++) { + if ((var_r31->flag & 1) == 0) { + mgListAll[var_r24] = (var_r31 - mgInfoTbl) + 0x191; + var_r24++; + } + } + mgListAll[var_r24] = -1; + temp_r26 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r27 * 4, 0x10000000U); + temp_r25 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r27 * 2, 0x10000000U); + var_r31 = mgInfoTbl; + + for (var_r29 = var_r30 = 0; var_r30 < var_r27; var_r30++, var_r31++) { + if ((mgType == var_r31->type) && (var_r31->ovl != 0x29)) { + if ((GWMGListGet() != 2) || (GWMGCustomGet(var_r30 + 0x191) != 0)) { + if (GWMGListGet() == 1) { + var_r21 = 0; + var_r28 = &mgListAll[0]; + while (*var_r28 != -1) { + if (var_r30 + 0x191 == *var_r28) { + var_r21 = 1; + break; + } + var_r28++; + } + if (var_r21 != 0) continue; + } + temp_r26[var_r29] = var_r31->name_mess; + temp_r25[var_r29] = var_r30; + var_r29++; + } + } + } + + var_r19 = var_r29; + var_r30 = 0; + while (var_r30 < arg0->field01_bit0) { + var_r29 = BoardRandMod(var_r19); + temp_r20 = temp_r26[var_r29]; + temp_r23 = temp_r25[var_r29]; + temp_r18 = temp_r23 + 0x191; + + if (GWMGListGet() == 2 || BoardMGSetupPlayPush(mgType, temp_r18) == 0) { + var_r22 = 0; + for (var_r29 = 0; var_r29 < var_r30; var_r29++) { + if (temp_r20 == activeMG[var_r29].unk_04) { + var_r22 = 1; + break; + } + } + if (var_r22 == 0) { + if (GWMGAvailGet(temp_r23 + 0x191) == 0) { + activeMG[var_r30].unk_03 = 0; + } else { + activeMG[var_r30].unk_03 = 1; + } + activeMG[var_r30].unk_04 = temp_r20; + activeMG[var_r30].unk_02 = temp_r23; + var_r30++; + } + } + } + HuMemDirectFree(temp_r26); + HuMemDirectFree(temp_r25); +} + +static void SetupStatusLayout(void) { + s32 var_r27; + s32 var_r26; + s32 var_r28; + s32 var_r30; + s32 var_r29; + s32 var_r31; + + if (mgType != 0) { + if (mgType == 1) { + for (var_r28 = var_r31 = 0; var_r31 < 4; var_r31++) { + if (GWPlayer[var_r31].color == 2) { + var_r27 = var_r31; + GWPlayer[var_r31].field08_bit11 = GWPlayerTeamGet(var_r31); + GWPlayerCfg[var_r31].group = 0; + var_r28++; + } else { + GWPlayer[var_r31].field08_bit11 = GWPlayerTeamGet(var_r31); + GWPlayerCfg[var_r31].group = 1; + var_r26 = var_r31; + } + } + if (var_r28 == 1) { + BoardStatusTargetPosSet(var_r27, statusLayout1Vs3); + var_r30 = 1; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (var_r31 != var_r27) { + BoardStatusTargetPosSet(var_r31, &statusLayout1Vs3[var_r30++]); + } + } + return; + } + BoardStatusTargetPosSet(var_r26, statusLayout1Vs3); + var_r29 = 1; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (var_r31 == var_r26) { + GWPlayer[var_r31].field08_bit11 = GWPlayerTeamGet(var_r31); + GWPlayerCfg[var_r31].group = 0; + } else { + BoardStatusTargetPosSet(var_r31, &statusLayout1Vs3[var_r29++]); + GWPlayer[var_r31].field08_bit11 = GWPlayerTeamGet(var_r31); + GWPlayerCfg[var_r31].group = 1; + } + } + return; + } + var_r30 = 2; + for (var_r29 = var_r31 = 0; var_r31 < 4; var_r31++) { + if (GWPlayer[var_r31].color == 2) { + BoardStatusTargetPosSet(var_r31, &statusLayout2Vs2[var_r29++]); + GWPlayer[var_r31].field08_bit11 = GWPlayerTeamGet(var_r31); + GWPlayerCfg[var_r31].group = 0; + } else { + BoardStatusTargetPosSet(var_r31, &statusLayout2Vs2[var_r30++]); + GWPlayer[var_r31].field08_bit11 = GWPlayerTeamGet(var_r31); + GWPlayerCfg[var_r31].group = 1; + } + } + } +} + +static s32 GetMGType(void) { + s32 var_r27; + s32 var_r28; + s32 var_r30; + s32 var_r31; + s32 var_r25; + s32 var_r26; + s8 var_r29; + + for (var_r28 = var_r30 = var_r27 = var_r31 = 0; var_r31 < 4; var_r31++) { + if (GWPlayer[var_r31].color == 2) { + var_r30++; + } else if (GWPlayer[var_r31].color == 1) { + var_r28++; + } else { + var_r27++; + } + } + if ((var_r30 != 2) || (var_r28 != 2)) { + if (var_r27 == 4) { + var_r31 = BoardRandMod(4); + GWPlayer[var_r31].color = 1; + var_r27 = 3; + var_r28 = 1; + var_r30 = 0; + } + var_r26 = var_r25 = -1; + if (var_r30 == 3) { + var_r26 = 2; + var_r25 = 1; + } else if (var_r28 == 3) { + var_r26 = 1; + var_r25 = 2; + } + if (((var_r27 >= 3) || ((var_r27 == 2) && (var_r28 == 1) && (var_r30 == 1))) && (BoardRandMod(0x64U) > 0x28U)) { + if (var_r30 == 1) { + var_r29 = 2; + } else { + var_r29 = 1; + } + do { + var_r31 = BoardRandMod(4); + } while (GWPlayer[var_r31].color != 3); + GWPlayer[var_r31].color = var_r29; + if (var_r29 == 1) { + var_r29 = 2; + } else { + var_r29 = 1; + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (GWPlayer[var_r31].color == 3) { + GWPlayer[var_r31].color = var_r29; + } + } + } else { + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if ((GWPlayer[var_r31].color == 3) || (GWPlayer[var_r31].color == 0)) { + if (var_r26 == -1) { + if (BoardRandMod(0x64) < 0x32) { + var_r29 = 2; + } else { + var_r29 = 1; + } + } else if (BoardRandMod(0x64) < 0x5A) { + var_r29 = var_r26; + } else { + var_r29 = var_r25; + } + GWPlayer[var_r31].color = var_r29; + } + } + } + } + + + for (var_r30 = var_r28 = var_r31 = 0; var_r31 < 4; var_r31++) { + if (GWPlayer[var_r31].color == 2) { + var_r30++; + } else if (GWPlayer[var_r31].color == 1) { + var_r28++; + } + } + + if (var_r30 == 1 || var_r30 == 3) { + return 1; + } else if (var_r30 == 2) { + return 2; + } else { + return 0; + } +} + +static s32 GetMGTypeTeam(void) { + s8 sp12[4]; + s8 spE[4]; + s8 spA[4]; + s8 sp8[2] = { 2, 1 }; + s32 var_r30; + s32 var_r31; + s32 temp_r25; + s8 var_r27; + s8 var_r26; + s8 var_r28; + s8* var_r29; + + spA[0] = spA[1] = spA[2] = spA[3] = -1; + spE[0] = spE[1] = spE[2] = spE[3] = -1; + sp12[0] = sp12[1] = sp12[2] = sp12[3] = -1; + + for (var_r28 = var_r27 = var_r26 = var_r31 = 0; var_r31 < 4; var_r31++) { + switch (GWPlayer[var_r31].color) { + case 2: + sp12[var_r28] = var_r31; + var_r28++; + break; + case 1: + spE[var_r26] = var_r31; + var_r26++; + break; + default: + spA[var_r27] = var_r31; + var_r27++; + break; + } + } + if (var_r27 != 0) { + + for (var_r31 = 0; var_r31 < var_r27; var_r31++) { + GWPlayer[spA[var_r31]].color = sp8[BoardRandMod(2)]; + } + return GetMGTypeTeam(); + } + if ((var_r28 == 4) || (var_r26 == 4)) { + return 0; + } + if ((var_r28 == 1) || (var_r26 == 1)) { + if (var_r28 == 1) { + var_r29 = sp12; + } else { + var_r29 = spE; + } + if (BoardRandMod(0x64U) < 0x46U) { + var_r30 = BoardPlayerSameTeamFind(*var_r29); + GWPlayer[*var_r29].color = GWPlayer[var_r30].color; + return 0; + } + var_r30 = BoardPlayerSameTeamFind(*var_r29); + GWPlayer[var_r30].color = GWPlayer[*var_r29].color; + return 2; + } + var_r30 = BoardPlayerSameTeamFind(sp12[0]); + if (GWPlayer[sp12[0]].color != GWPlayer[var_r30].color) { + temp_r25 = GWPlayer[var_r30].color; + GWPlayer[var_r30].color = GWPlayer[sp12[0]].color; + + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if ((var_r31 != sp12[0]) && (var_r31 != var_r30)) { + break; + } + } + GWPlayer[var_r31].color = temp_r25; + var_r30 = BoardPlayerSameTeamFind(var_r31); + GWPlayer[var_r30].color = temp_r25; + } + return 2; +} + +static void CreateMGSetup(void) { + s32 var_r30; + unkSubstructR31* temp_r31; + bitcopy* temp_r28; + bitcopy* temp_r29; + + mgSetupObj = omAddObjEx(boardObjMan, 0x200, 0U, 0U, -1, UpdateMGSetup); + temp_r28 = (bitcopy*) mgSetupObj->work; + temp_r28->field00_bit0 = 0; + temp_r29 = (bitcopy*) mgSetupObj->work; + temp_r29->field00_bit1 = 0; + temp_r29->unk_02 = 0; + temp_r29->unk_03 = 0; + temp_r29->unk_04 = 0; + temp_r28->unk_0C = HuMemDirectMallocNum(HEAP_SYSTEM, 0x154, 0x10000000U); + temp_r31 = temp_r28->unk_0C; + temp_r31->unk_00[0] = HuSprGrpCreate(0xD); + + for (var_r30 = 0; var_r30 < 13; var_r30++) { + BoardSpriteCreate(mgSetupSprTbl[var_r30], 0x5DC, NULL, &temp_r31->unk_00[var_r30] + 1); + HuSprGrpMemberSet(*temp_r31->unk_00, var_r30, *(&temp_r31->unk_00[var_r30] + 1)); + HuSprAttrSet(*temp_r31->unk_00, var_r30, 4); + temp_r31->unk_1C[0][var_r30].x = temp_r31->unk_1C[0][var_r30].y = temp_r31->unk_1C[0][var_r30].z = 0.0f; + temp_r31->unk_1C[1][var_r30].x = temp_r31->unk_1C[1][var_r30].y = temp_r31->unk_1C[1][var_r30].z = 0.0f; + } + HuSprGrpPosSet(temp_r31->unk_00[0], 288.0f, 240.0f); +} + +void UpdateMGSetup(omObjData* arg0) { + bitcopy* var_r31; + s32 var_r29; + + var_r31 = (bitcopy*) arg0->work; + if (var_r31->field00_bit0 != 0 || BoardIsKill() != 0) { + for (var_r29 = 0; var_r29 < 4; var_r29++) { + if (activeMG[var_r29].unk_00 != -1) { + HuWinKill(activeMG[var_r29].unk_00); + activeMG[var_r29].unk_00 = -1; + } + } + HuSprGrpKill(var_r31->unk_0C->unk_00[0]); + HuMemDirectFree(var_r31->unk_0C); + mgSetupObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + } else if (var_r31->unk_06 != 0) { + var_r31->unk_06--; + } else { + switch (var_r31->field00_bit1) { + case 1: + CenterStatus(var_r31, arg0); + break; + case 2: + SeparateStatus(var_r31, arg0); + break; + case 3: + PopupVS(var_r31, arg0); + break; + case 4: + FallMGType(var_r31, arg0); + break; + case 5: + LuckyMGFall(var_r31, arg0); + break; + case 6: + UpdateLuckyValue(var_r31, arg0); + break; + case 7: + UpdateMGList(var_r31, arg0); + break; + } + } +} + +void CenterStatus(bitcopy* arg0, omObjData* arg1) { + s32 var_r31; + bitcopy* temp_r30; + + if (arg0->unk_02 == 0) { + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardStatusItemHideSet(var_r31, 0); + BoardStatusTargetPosSet(var_r31, &statusLayout4P[var_r31]); + } + arg0->unk_02 = 1; + HuAudFXPlay(0x354); + return; + } + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (!BoardStatusStopCheck(var_r31)) { + return; + } + } + if ((s32) GWSystem.team != 0) { + mgType = GetMGTypeTeam(); + } else { + mgType = GetMGType(); + } + if (mgType == 0) { + arg0->field01_bit0 = 4; + } else { + arg0->field01_bit0 = 3; + } + SetupStatusLayout(); + DetermineMGList(arg0); + if (_CheckFlag(0x1000BU) != 0) { + BoardTutorialHookExec(0x1A, 0); + } + temp_r30 = (bitcopy*) mgSetupObj->work; + temp_r30->field00_bit1 = 2; + temp_r30->unk_02 = 0; + temp_r30->unk_03 = 0; + temp_r30->unk_04 = 0; +} + +void SeparateStatus(bitcopy* arg0, omObjData* arg1) { + Vec sp8; + f32 temp_f30; + f32 temp_f29; + s32 var_r28; + bitcopy* temp_r29; + unkSubstructR31* temp_r27; + + temp_r27 = arg0->unk_0C; + switch (arg0->unk_02) { + case 0: + for (var_r28 = 0; var_r28 < 4; var_r28++) { + BoardStatusPosGet(var_r28, &sp8.x); + if (sp8.x < 288.0f) { + sp8.x = -98.0f; + } else { + sp8.x = 674.0f; + } + BoardStatusTargetPosSet(var_r28, &sp8); + } + arg0->unk_02 = 1; + arg0->unk_03 = 0; + return; + case 1: + if ((s8) arg0->unk_03 >= 0x5A) { + arg0->unk_03 = 0; + temp_r29 = (bitcopy*) mgSetupObj->work; + temp_r29->field00_bit1 = 7; + temp_r29->unk_02 = 0; + temp_r29->unk_03 = 0; + temp_r29->unk_04 = 0; + return; + } + OSu8tof32((u8*)&arg0->unk_03, &temp_f29); + temp_f30 = sin((temp_f29 * M_PI) / 180.0) * 4.0 + 1.0; + arg0->unk_03 += 6; + if (arg0->unk_03 > 0x5A) { + arg0->unk_03 = 0x5A; + } + HuSprScaleSet(temp_r27->unk_00[0], 0, temp_f30, temp_f30); + if (arg0->unk_03 > 0x3C) { + HuSprTPLvlSet(temp_r27->unk_00[0], 0, (90.0f - arg0->unk_03) / 30.0f); + } + } +} + +void PopupVS(bitcopy* arg0, omObjData* arg1) { + f32 var_f30; + f32 temp_f31; + bitcopy* temp_r28; + unkSubstructR31* temp_r29; + + temp_r29 = arg0->unk_0C; + if (arg0->unk_02 == 0) { + HuSprAttrReset(temp_r29->unk_00[0], 0, 4); + HuSprAttrSet(temp_r29->unk_00[0], 0, 8); + HuSprScaleSet(temp_r29->unk_00[0], 0, 0.001f, 0.001f); + HuSprPosSet(temp_r29->unk_00[0], 0, 0.0f, 64.0f); + arg0->unk_02 = 1; + HuAudFXPlay(0x355); + return; + } + OSs16tof32(&arg0->unk_04, &temp_f31); + if (arg0->unk_04 < 0x5A) { + var_f30 = 2.0 * sin((M_PI * temp_f31) / 180.0); + } else { + var_f30 = 1.0 + sin((M_PI * temp_f31) / 180.0); + if (arg0->unk_04 >= 0xB4) { + var_f30 = 1.0f; + temp_r28 = (bitcopy*) mgSetupObj->work; + temp_r28->field00_bit1 = 3; + temp_r28->unk_02 = 0; + temp_r28->unk_03 = 0; + temp_r28->unk_04 = 0; + arg0->unk_06 = 0x3C; + } + } + HuSprScaleSet(temp_r29->unk_00[0], 0, var_f30, var_f30); + arg0->unk_04 += 9; + if ((_CheckFlag(0x1000BU) != 0) && arg0->field00_bit1 == 3) { + BoardTutorialHookExec(0x1B, 0); + if (*boardTutorialData == 1) { + arg0->field00_bit1 = 0; + } + } +} From 6e19e957e42369d11af227c0f8c5f626bc1c837e Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 9 Mar 2024 21:21:03 -0500 Subject: [PATCH 055/106] statics aaaaa --- src/game/board/mg_setup.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index c021ac6a..5a2b0d81 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -625,7 +625,7 @@ static void CreateMGSetup(void) { HuSprGrpPosSet(temp_r31->unk_00[0], 288.0f, 240.0f); } -void UpdateMGSetup(omObjData* arg0) { +static void UpdateMGSetup(omObjData* arg0) { bitcopy* var_r31; s32 var_r29; @@ -670,7 +670,7 @@ void UpdateMGSetup(omObjData* arg0) { } } -void CenterStatus(bitcopy* arg0, omObjData* arg1) { +static void CenterStatus(bitcopy* arg0, omObjData* arg1) { s32 var_r31; bitcopy* temp_r30; @@ -711,7 +711,7 @@ void CenterStatus(bitcopy* arg0, omObjData* arg1) { temp_r30->unk_04 = 0; } -void SeparateStatus(bitcopy* arg0, omObjData* arg1) { +static void SeparateStatus(bitcopy* arg0, omObjData* arg1) { Vec sp8; f32 temp_f30; f32 temp_f29; @@ -757,7 +757,7 @@ void SeparateStatus(bitcopy* arg0, omObjData* arg1) { } } -void PopupVS(bitcopy* arg0, omObjData* arg1) { +static void PopupVS(bitcopy* arg0, omObjData* arg1) { f32 var_f30; f32 temp_f31; bitcopy* temp_r28; From 4334e6e361f5a42c9fbd448b21972cc94470141f Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 9 Mar 2024 21:21:12 -0600 Subject: [PATCH 056/106] Nearly match board/player.c All but DoSparkSpace matched. BoardRotateDiceNumbers renamed to BoardPlayerIdleSet --- config/GMPE01_00/symbols.txt | 2 +- include/game/board/player.h | 4 +- src/REL/w03Dll/mg_coin.c | 2 +- src/REL/w03Dll/mg_item.c | 4 +- src/REL/w03Dll/river.c | 6 +- src/REL/w03Dll/statue.c | 12 +- src/game/board/basic_space.c | 6 +- src/game/board/battle.c | 2 +- src/game/board/block.c | 6 +- src/game/board/item.c | 16 +- src/game/board/lottery.c | 8 +- src/game/board/player.c | 364 +++++++++++++++++++++++++++++++++-- src/game/board/space.c | 2 +- src/game/board/star.c | 4 +- src/game/board/ui.c | 2 +- src/game/board/warp.c | 6 +- 16 files changed, 389 insertions(+), 57 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index bcb359ee..cc2ddca6 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -1181,7 +1181,7 @@ PlayerPosLerpFunc = .text:0x80067374; // type:function size:0x218 scope:local BoardPlayerDiceJumpStart = .text:0x8006758C; // type:function size:0x1D4 BoardPlayerDiceJumpCheck = .text:0x80067760; // type:function size:0x54 DiceJumpFunc = .text:0x800677B4; // type:function size:0x3E4 scope:local -BoardRotateDiceNumbers = .text:0x80067B98; // type:function size:0xF8 +BoardPlayerIdleSet = .text:0x80067B98; // type:function size:0xF8 BoardPlayerMotBlendSet = .text:0x80067C90; // type:function size:0x5A0 BoardPlayerMotBlendExec = .text:0x80068230; // type:function size:0x51C BoardPlayerMotBlendCheck = .text:0x8006874C; // type:function size:0x2C diff --git a/include/game/board/player.h b/include/game/board/player.h index 3f47a342..229e5bdd 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -123,7 +123,7 @@ void BoardPlayerMoveToAsync(s32, s32); void BoardPlayerPosLerpStart(s32, Vec*, Vec*, s16); void BoardPlayerDiceJumpStart(s32); s32 BoardPlayerDiceJumpCheck(s32); -void BoardRotateDiceNumbers(s32); +void BoardPlayerIdleSet(s32); void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2); void BoardPlayerBtnDownWait(s32, u32); @@ -151,7 +151,5 @@ s32 BoardPlayerMotBlendCheck(s32); void BoardPlayerMoveAwayStartCurr(s32, s32); void BoardBowserSuitMotionSetWalk(void); s16 BoardBowserSuitModelGet(void); -void MoveAwayObjFunc(omObjData*); -void UpdateBowserSuit(omObjData*); #endif diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index c73112fd..29b3aad1 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -541,7 +541,7 @@ void fn_1_9044(omObjData* arg0, someBits3* arg1) { arg0->trans.x *= 0.5f; if (arg0->trans.x <= 1.0f) { arg0->trans.y = 0.0f; - BoardRotateDiceNumbers(arg1->unk00_bit5); + BoardPlayerIdleSet(arg1->unk00_bit5); BoardModelMotionShiftSet(lbl_1_bss_C[10], 1, 0.0f, 10.0f, 0x40000001U); arg1->unk00_bit0 = 1; } diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index 6740b263..6ef4f514 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -248,7 +248,7 @@ s32 fn_1_9CF4(s32 arg0) { while (GWPlayer[arg0].moving != 0) { HuPrcVSleep(); } - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); HuPrcSleep(0x3C); fn_1_B0A4(arg0); fn_1_9F78(); @@ -526,7 +526,7 @@ void fn_1_ACD8(s32 arg0) { temp_r31->unk00_bit1 = arg0; switch (arg0) { case 0: - BoardRotateDiceNumbers(temp_r31->unk00_bit4); + BoardPlayerIdleSet(temp_r31->unk00_bit4); return; case 2: temp_r31->unk00_bit6 = 1; diff --git a/src/REL/w03Dll/river.c b/src/REL/w03Dll/river.c index b77ebef2..fab310b1 100644 --- a/src/REL/w03Dll/river.c +++ b/src/REL/w03Dll/river.c @@ -168,7 +168,7 @@ s32 fn_1_6898(s32 arg0) { s32 i, j; s32 temp, temp2; - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); BoardCameraViewSet(2); BoardCameraMotionWait(); @@ -351,7 +351,7 @@ void fn_1_6F9C(s32 arg0) { BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0U); HuPrcSleep(10); - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); if (GWPlayer[arg0].bowser_suit != 0) { BoardModelHookSet(lbl_1_data_388, "chara01", BoardPlayerModelGet(arg0)); } else { @@ -410,7 +410,7 @@ void fn_1_735C(s32 arg0) { while (BoardPlayerMotBlendCheck(arg0) == 0) { HuPrcVSleep(); } - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); GWPlayer[arg0].space_curr = temp_r29; GWPlayer[arg0].space_prev = -1; BoardPlayerPostTurnHookSet(arg0, fn_1_6698); diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index f5b5fd67..0a41ab69 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -172,7 +172,7 @@ s32 fn_1_1650(s32 arg0) { f32 temp; s32 temp2; - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); if (lbl_1_bss_0->unk2) { BoardWinCreate(0, 0x160000, -1); @@ -207,7 +207,7 @@ s32 fn_1_1650(s32 arg0) { HuPrcVSleep(); } - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); BoardWinCreate(2, 0x160001, 2); BoardWinWait(); BoardWinCreateChoice(0, 0x160002, -1, 0); @@ -284,7 +284,7 @@ void fn_1_19DC(s32 arg0, s32 arg1) { HuPrcVSleep(); } } - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); HuPrcSleep(0x14); temp = (180.0f + BoardPlayerRotYGet(arg0)); BoardPlayerMotBlendSet(arg0, temp, 0xF); @@ -376,7 +376,7 @@ void fn_1_1ED4(s32 arg0) { while (BoardFilterFadePauseCheck() == 0) { HuPrcVSleep(); } - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); while (BoardMusStatusGet(1) != 0) { HuPrcVSleep(); @@ -448,7 +448,7 @@ void fn_1_20E0(s32 arg0) { BoardCameraMotionWait(); } - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); while (BoardMusStatusGet(1) != 0) { HuPrcVSleep(); } @@ -520,7 +520,7 @@ void fn_1_26E0(s32 arg0) { } BoardCameraMotionWait(); BoardModelMotionStart(lbl_1_bss_C[1], 0, 0); - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); } void fn_1_2818(void) { diff --git a/src/game/board/basic_space.c b/src/game/board/basic_space.c index 7dc7f24b..cdf3cb61 100644 --- a/src/game/board/basic_space.c +++ b/src/game/board/basic_space.c @@ -40,7 +40,7 @@ extern void BoardCameraViewSet(s32); extern void BoardPlayerPosGet(s32, Vec*); extern void BoardPlayerMotionEndWait(s32); extern void BoardPlayerCoinsAdd(s32, s32); -extern void BoardRotateDiceNumbers(s32); +extern void BoardPlayerIdleSet(s32); extern void BoardCameraMotBlendSet(s32, s16, s16); extern s32 BoardPlayerMotBlendCheck(s32); @@ -102,7 +102,7 @@ void BoardLandBlueExec(s32 player, s32 space) { } GWPlayer[player].color = 1; BoardPlayerMotionEndWait(player); - BoardRotateDiceNumbers(player); + BoardPlayerIdleSet(player); } void BoardLandRedExec(s32 player, s32 space) { @@ -143,7 +143,7 @@ void BoardLandRedExec(s32 player, s32 space) { } GWPlayer[player].color = 2; BoardPlayerMotionEndWait(player); - BoardRotateDiceNumbers(player); + BoardPlayerIdleSet(player); } s8 BoardCoinChgCreate(Vec *pos, s8 value) { diff --git a/src/game/board/battle.c b/src/game/board/battle.c index 3dcddeee..544ee051 100755 --- a/src/game/board/battle.c +++ b/src/game/board/battle.c @@ -320,7 +320,7 @@ static void ExecBattle(void) { } StopBattleBomb(); for (var_r31 = 0; var_r31 < 4; var_r31++) { - BoardRotateDiceNumbers(var_r31); + BoardPlayerIdleSet(var_r31); BoardPlayerVoiceEnableSet(var_r31, 6, 1); } BoardAudSeqPause(0, 0, 1000); diff --git a/src/game/board/block.c b/src/game/board/block.c index f7836acc..1c735ed9 100644 --- a/src/game/board/block.c +++ b/src/game/board/block.c @@ -97,7 +97,7 @@ static void BlockProc(void) { player_character = GWPlayer[player].character; jumpMot = BoardPlayerMotionCreate(player, sp14[player_character]); - BoardRotateDiceNumbers(player); + BoardPlayerIdleSet(player); BoardPlayerMotBlendSet(player, 0, 0xF); omVibrate(player, 12, 12, 0); CreateBlockObj(player); @@ -122,7 +122,7 @@ static void BlockProc(void) { while (BoardPlayerMotionEndCheck(player) == 0) { HuPrcVSleep(); } - BoardRotateDiceNumbers(player); + BoardPlayerIdleSet(player); if (work->contains_star != 0) { SetBlockStop(); @@ -162,7 +162,7 @@ static void BlockProc(void) { KillCoinMdl(); work->kill = 1; - BoardRotateDiceNumbers((s32) player); + BoardPlayerIdleSet((s32) player); HuPrcVSleep(); if ((_CheckFlag(0x1000B) != 0) && work->contains_star == 0) { diff --git a/src/game/board/item.c b/src/game/board/item.c index b020d72b..97aa67df 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -440,7 +440,7 @@ static inline void BoardUiInlineFunc03(s32 arg0) { while (!BoardPlayerMotBlendCheck(arg0)) { HuPrcVSleep(); } - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); } static inline void BoardUiInlineFunc04(Process *arg0, s32 arg1) { @@ -943,7 +943,7 @@ static void ExecItemPipe(void) { BoardPlayerMotionShiftSet(sp2C[1], 6, 0.0f, 8.0f, 0x40000001); BoardModelVoiceEnableSet(BoardPlayerModelGet(sp2C[1]), 6, 0); CharModelLayerSetAll(2); - BoardRotateDiceNumbers(sp2C[0]); + BoardPlayerIdleSet(sp2C[0]); for (var_r31 = 0; var_r31 < 0x2D; var_r31++) { sp9C.y -= 0.044444446f; for (var_r30 = 0; var_r30 < 2; var_r30++) { @@ -960,7 +960,7 @@ static void ExecItemPipe(void) { BoardWinInsertMesSet(GWPlayerCfg[sp2C[1]].character, 1); BoardWinWait(); BoardWinKill(); - BoardRotateDiceNumbers(sp2C[1]); + BoardPlayerIdleSet(sp2C[1]); HuPrcSleep(8); BoardModelVoiceEnableSet(BoardPlayerModelGet(sp2C[1]), 6, 1); } @@ -1240,7 +1240,7 @@ static void ExecItemSpark(void) { while (!BoardPlayerMotBlendCheck(currItemRestore)) { HuPrcVSleep(); } - BoardRotateDiceNumbers(currItemRestore); + BoardPlayerIdleSet(currItemRestore); BoardSpacePosGet(0, temp_r28, &sp5C); BoardModelPosSetV(temp_r30, &sp5C); sp5C.y += 106.0f; @@ -1423,7 +1423,7 @@ static void ExecItemWhistle(void) { HuPrcVSleep(); } BoardModelHookObjReset(sp8, temp_r22); - BoardRotateDiceNumbers(currItemRestore); + BoardPlayerIdleSet(currItemRestore); BoardModelKill(suitMdl); BoardCameraMoveSet(0); temp_r18 = BoardSpaceStarGetCurr(); @@ -2280,7 +2280,7 @@ static void GenieSceneExec(void) { } GenieCameraCalc(&cameraDataTbl[0], var_r26, 1.0f, &booCamPos, &booCamUp); HuPrcSleep(0x96); - BoardRotateDiceNumbers(currItemRestore); + BoardPlayerIdleSet(currItemRestore); sp2C = booCamPos; sp20 = booCamUp; booCamUp.x = sp38.x + (sp50.x - sp38.x) * 0.7f; @@ -2431,7 +2431,7 @@ static void ExecItemGenie(void) { Hu3DModelKill(temp_r31); BoardModelKill(suitMdl); HuPrcKill(temp_r27); - BoardRotateDiceNumbers(currItemRestore); + BoardPlayerIdleSet(currItemRestore); GenieSceneExec(); BoardCameraMoveSet(0); BoardCameraViewSet(2); @@ -2482,7 +2482,7 @@ static void ExecItemGenie(void) { BoardPlayerPosSetV(currItemRestore, &spC); HuPrcVSleep(); } - BoardRotateDiceNumbers(currItemRestore); + BoardPlayerIdleSet(currItemRestore); CharModelEffectEnableSet(GWPlayer[currItemRestore].character, 1); HuSprAnimKill(genieParticleAnim); BoardPlayerMotionKill(currItemRestore, geniePlayerMot[0]); diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c index 745fd903..9c57220a 100755 --- a/src/game/board/lottery.c +++ b/src/game/board/lottery.c @@ -418,7 +418,7 @@ static void ExecLottery(void) { temp_r29 = BoardDataDirReadAsync(0x50000); temp_r31 = GWSystem.player_curr; temp_r28 = GWPlayer[temp_r31].space_curr; - BoardRotateDiceNumbers(temp_r31); + BoardPlayerIdleSet(temp_r31); BoardWinCreateChoice(0, 0x60000, -1, 0); if (GWPlayer[temp_r31].com) { if (BoardPlayerCoinsGet(temp_r31) >= 5) { @@ -503,7 +503,7 @@ static void ExecLottery(void) { } } BoardMusStart(1, 2, 0x7F, 0); - BoardRotateDiceNumbers(temp_r31); + BoardPlayerIdleSet(temp_r31); while (!BoardStatusStopCheck(temp_r31)) { HuPrcVSleep(); } @@ -533,7 +533,7 @@ static void ExecLottery(void) { while (GWPlayer[temp_r31].moving) { HuPrcVSleep(); } - BoardRotateDiceNumbers(temp_r31); + BoardPlayerIdleSet(temp_r31); BoardModelVisibilitySet(ballMdl[currPrize & 3], 0); BoardAudSeqFadeOut(1, 1000); BoardCameraTargetPlayerSet(temp_r31); @@ -591,7 +591,7 @@ static void DoMiniJumpUp(s32 arg0) { } sp1C.y = sp28.y; BoardPlayerPosSetV(arg0, &sp1C); - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); } static void DoMiniJumpDown(s32 arg0) { diff --git a/src/game/board/player.c b/src/game/board/player.c index 11904f3d..b0212376 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -34,10 +34,14 @@ static void MoveAwayObjFunc(omObjData*); static void MoveAwayObjFunc(omObjData*); static void UpdateBowserSuit(omObjData*); +static void MegaSquishFunc(omObjData *object); + + static s32 DoSparkSpace(s32 player, s32 pause_cam); static void RemoveSparkSpace(s32 player); static void SetRollPlayerSize(s32 player); -static s32 MegaPlayerPassFunc(s32, s16); +static s32 MegaPlayerPassFunc(s32 player, s32 space); +static s32 MegaExecJump(s32 player, s32 space); //TODO: Give better name typedef struct bitcopy { @@ -134,7 +138,7 @@ static s32 boardSparkSfxTblAlt[] = { 0x223, 0x263, 0x2A3, 0x2E3, }; -static s32 megaSquishObj[] = { +static omObjData *megaSquishObj[] = { 0, 0, 0, 0, }; @@ -826,7 +830,7 @@ block_14: } while (1); BoardPauseDisableSet(1); BoardDiceDigit2DUpdateEnable(arg0); - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); if (GWPlayer[arg0].bowser_suit != 0) { BoardCameraTargetPlayerSet(arg0); } @@ -911,7 +915,7 @@ void BoardPlayerZoomRestore(s32 arg0) { while (BoardPlayerMotBlendCheck(arg0) == 0) { HuPrcVSleep(); } - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); } void BoardJunctionMaskSet(s32 arg0) { @@ -1243,7 +1247,7 @@ static s32 DoDebugMove(s32 arg0, s16* arg1) { } else { if (HuPadBtnDown[var_r20] == 0x10) { BoardDiceDigit2DShowSet(0); - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); StopJunctionPlayer(0); BoardViewMapExec(arg0); InitJunction(arg0, sp28->space_curr, -1.0f); @@ -1283,7 +1287,7 @@ static s32 DoDebugMove(s32 arg0, s16* arg1) { } } else { if (BoardPlayerMotGet(arg0) != 1) { - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); } if (GWPlayer[arg0].bowser_suit != 0) { BoardBowserSuitMotionSetWait(); @@ -1397,7 +1401,7 @@ static s32 ExecJunction(s32 arg0, s16* arg1) { var_f28 = -1.0f; sp8 = 0; InitJunction(arg0, sp30->space_curr, var_f28); - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); HuPrcSleep(10); while (1) { @@ -1440,7 +1444,7 @@ static s32 ExecJunction(s32 arg0, s16* arg1) { } else if (var_r20 == 0x20 || var_r20 == 0x10) { HuAudFXPlay(1); BoardDiceDigit2DShowSet(0); - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); StopJunctionPlayer(0); if (var_r20 == 0x10) { BoardViewMapExec(arg0); @@ -1475,7 +1479,7 @@ static s32 ExecJunction(s32 arg0, s16* arg1) { } } else { if (BoardPlayerMotGet(arg0) != 1) { - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); } if (GWPlayer[arg0].bowser_suit != 0) { BoardBowserSuitMotionSetWait(); @@ -1706,7 +1710,7 @@ static void DiceJumpFunc(omObjData* arg0) { temp_r31 = OM_GET_WORK_PTR(arg0, bitcopy2); if ((temp_r31->field00_bit0 != 0) || (BoardIsKill() != 0)) { GWPlayer[temp_r31->field00_bit1].field08_bit3 = 0; - BoardRotateDiceNumbers(temp_r31->field00_bit1); + BoardPlayerIdleSet(temp_r31->field00_bit1); diceJumpObj[temp_r31->field00_bit1] = 0; omDelObjEx(HuPrcCurrentGet(), arg0); return; @@ -1748,7 +1752,7 @@ static void DiceJumpFunc(omObjData* arg0) { } -void BoardRotateDiceNumbers(s32 arg0) +void BoardPlayerIdleSet(s32 arg0) { if (GWPlayer[arg0].bowser_suit) { BoardBowserSuitMotionSetWait(); @@ -2299,7 +2303,7 @@ static s32 DoSparkSpace(s32 player, s32 pause_cam) } BoardCameraMotionWait(); BoardCameraTargetPlayerSet(player); - BoardRotateDiceNumbers(player); + BoardPlayerIdleSet(player); temp_r28 = BoardModelCreate(0x70074, NULL, 0); BoardModelMotionStart(temp_r28, 0, 0x40000002); BoardModelMotionTimeSet(temp_r28, 30.0f); @@ -2348,7 +2352,7 @@ static s32 DoSparkSpace(s32 player, s32 pause_cam) temp_r17 = BoardRollTypeGet(); if(temp_r17 == 0 || temp_r17 == 1 || temp_r17 == 2 || temp_r17 == 3 || temp_r17 == 10) { BoardCameraTargetPlayerSet(player); - BoardRotateDiceNumbers(player); + BoardPlayerIdleSet(player); HuPrcSleep(12); BoardItemPlayerRestore(player, temp_r17); while(!BoardItemDoneCheck()) { @@ -2393,7 +2397,7 @@ static s32 DoSparkSpace(s32 player, s32 pause_cam) BoardModelKill(temp_r28); BoardModelKill(sp2E); for(i=0; i<4; i++) { - BoardRotateDiceNumbers(sp124[i]); + BoardPlayerIdleSet(sp124[i]); } HuPrcSleep(10); GWSystem.player_curr = -1; @@ -2498,6 +2502,337 @@ void BoardPlayerResizeAnimExec(s32 player, s32 size) BoardPlayerSizeSet(player, size); } +typedef struct mega_squish_work { + struct { + u8 kill : 1; + u8 no_coinchg : 1; + u8 played_snd : 1; + u8 gain_player : 2; + }; + s8 player; + s8 state; + s8 coinchg; + s8 loss; + s8 disappear_time; + s8 disappear_len; + u16 hide_time; +} MegaSquishWork; + +static void MegaSquishFunc(omObjData *object) +{ + MegaSquishWork *work = OM_GET_WORK_PTR(object, MegaSquishWork); + Vec pos; + if(work->kill || BoardIsKill()) { + if(work->coinchg != -1) { + BoardCoinChgHide(work->coinchg); + } + megaSquishObj[work->player] = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + if(work->hide_time != 0) { + work->hide_time--; + return; + } + switch(work->state) { + case 1: + if(!work->played_snd) { + HuAudFXPlay(798); + HuAudFXPlay(megaSquishSfxTbl[GWPlayer[work->player].character]); + work->played_snd = 1; + } + BoardPlayerMotionStart(work->player, 10, 0); + BoardPlayerMotionSpeedSet(work->player, 2.0f); + work->state = 2; + break; + + case 2: + { + if(!BoardModelMotionTimeGet(BoardPlayerModelGet(work->player) >= 50.0f)) { + return; + } + BoardPlayerMotionSpeedSet(work->player, 0.0f); + BoardPlayerPosGet(work->player, &pos); + pos.y += 10.0f; + BoardPlayerPosSetV(work->player, &pos); + work->hide_time = 20; + work->state = 3; + work->coinchg = -1; + work->disappear_time = 0; + } + + break; + + case 3: + if(work->coinchg == -1) { + BoardPlayerPosGet(work->player, &pos); + + pos.y += 250.0f; + if(!work->no_coinchg) { + work->coinchg = BoardCoinChgCreate(&pos, -work->loss); + } else { + work->state = 4; + work->hide_time = work->disappear_len; + } + } + if(work->disappear_time++ < work->disappear_len) { + return; + } + work->disappear_time = 0; + if(work->loss <= 0) { + work->state = 4; + HuAudFXPlay(15); + } else { + work->loss--; + BoardPlayerCoinsAdd(work->player, -1); + HuAudFXPlay(14); + BoardPlayerCoinsAdd(work->gain_player, 1); + } + break; + + case 4: + BoardPlayerMotionSpeedSet(work->player, 2.0f); + BoardPlayerPosGet(work->player, &pos); + pos.y -= 10.0f; + BoardPlayerPosSetV(work->player, &pos); + work->state = 5; + break; + + case 5: + if(!BoardPlayerMotionEndCheck(work->player)) { + return; + } + BoardPlayerIdleSet(work->player); + work->kill = 1; + break; + + case 0: + break; + + default: + break; + } +} + +static s32 MegaPlayerPassFunc(s32 player, s32 space) +{ + float temp_f30; + float temp_f29; + MegaSquishWork *temp_r31; + s32 temp_r29; + MegaSquishWork *temp_r28; + s32 temp_r27; + s32 temp_r26; + s32 temp_r24; + omObjData *temp_r23; + s32 spD0[4]; + Vec spC4; + Vec spB8; + Vec spAC; + Vec spA0; + float sp98[2]; + + + if(GWPlayer[player].bowser_suit) { + return MegaExecJump(player, space); + } + if(BoardPlayerSizeGet(player) != 2) { + return 0; + } + spD0[0] = spD0[1] = spD0[2] = -1; + for(temp_r26=temp_r29=0; temp_r29<4; temp_r29++) { + if(temp_r29 != player && GWPlayer[temp_r29].space_curr == space) { + spD0[temp_r26++] = temp_r29; + BoardPlayerPosGet(temp_r29, &spA0); + temp_r23 = omAddObjEx(boardObjMan, 256, 0, 0, -1, MegaSquishFunc); + megaSquishObj[temp_r29] = temp_r23; + temp_r31 = OM_GET_WORK_PTR(temp_r23, MegaSquishWork); + temp_r31->kill = 0; + temp_r31->player = temp_r29; + temp_r31->gain_player = player; + temp_r31->state = 0; + temp_r31->hide_time = 0; + temp_r31->loss = 0; + temp_r31->disappear_len = 3; + temp_r31->disappear_time = 0; + temp_r31->played_snd = 0; + if(BoardPlayerCoinsGet(temp_r31->player) <= 0) { + temp_r31->no_coinchg = 1; + } else { + temp_r31->no_coinchg = 0; + } + if(BoardPlayerCoinsGet(temp_r31->player) >= 10) { + temp_r31->loss = 10; + } else { + temp_r31->loss = BoardPlayerCoinsGet(temp_r31->player); + } + } + } + if(temp_r26 == 0) { + return 0; + } + if (_CheckFlag(0x1000BU) != 0) { + BoardTutorialHookExec(24, 0); + } + BoardPlayerPosGet(player, &spB8); + BoardSpacePosGet(0, space, &spC4); + sp98[0] = spB8.y; + if(spC4.y > spB8.y) { + spB8.y += 300.0f; + } else { + spB8.y += 200.0f; + } + VECSubtract(&spC4, &spB8, &spAC); + spAC.x /= 60.0f; + spAC.z /= 60.0f; + BoardPlayerRotYSet(player, 90.0-(180.0*(atan2(spAC.z, spAC.x)/M_PI))); + sp98[1] = BoardVecDistXZCalc(&spC4, &spB8); + BoardPlayerMotionShiftSet(player, 4, 0, 8, 0); + HuPrcSleep(8); + temp_r24 = 0; + for(temp_f30=0; temp_f30<60.0f; temp_f30++) { + temp_f29 = spB8.y; + spB8.x += spAC.x; + spB8.z += spAC.z; + spB8.y += 10.0f + (0.9f*(-0.020416668f * temp_f30 * temp_f30)); + if(temp_f29 > spB8.y) { + temp_r24 = 1; + } + if(spB8.y <= 200.0f+spC4.y && temp_r24) { + for(temp_r27=0; temp_r27<4; temp_r27++) { + if(megaSquishObj[temp_r27]) { + temp_r28 = OM_GET_WORK_PTR(megaSquishObj[temp_r27], MegaSquishWork); + if((s16)space == GWPlayer[temp_r28->player].space_curr && temp_r28->state != 1) { + temp_r28->state = 1; + } + } + } + } + if(spB8.y <= spC4.y) { + spB8.y = spC4.y; + BoardPlayerMotionShiftSet(player, 5, 0, 4, 0); + } + BoardPlayerPosSetV(player, &spB8); + HuPrcVSleep(); + } + BoardCameraQuakeSet(30, 500.0f); + omVibrate(0, 12, 4, 2); + omVibrate(1, 12, 4, 2); + omVibrate(2, 12, 4, 2); + omVibrate(3, 12, 4, 2); + BoardPlayerIdleSet(player); + HuPrcSleep(30); +} + +static s32 MegaExecJump(s32 player, s32 space) +{ + float temp_f30; + float temp_f29; + MegaSquishWork *temp_r31; + s32 temp_r29; + MegaSquishWork *temp_r28; + s32 temp_r27; + s32 temp_r26; + s32 temp_r25; + s32 temp_r24; + omObjData *temp_r23; + s32 spD0[4]; + Vec spC4; + Vec spB8; + Vec spAC; + Vec spA0; + float sp90[2]; + spD0[0] = spD0[1] = spD0[2] = -1; + for(temp_r26=temp_r29=0; temp_r29<4; temp_r29++) { + if(temp_r29 != player && GWPlayer[temp_r29].space_curr == space) { + spD0[temp_r26++] = temp_r29; + BoardPlayerPosGet(temp_r29, &spA0); + temp_r23 = omAddObjEx(boardObjMan, 256, 0, 0, -1, MegaSquishFunc); + megaSquishObj[temp_r29] = temp_r23; + temp_r31 = OM_GET_WORK_PTR(temp_r23, MegaSquishWork); + temp_r31->kill = 0; + temp_r31->player = temp_r29; + temp_r31->gain_player = player; + temp_r31->state = 0; + temp_r31->hide_time = 0; + temp_r31->loss = 0; + temp_r31->disappear_len = 3; + temp_r31->disappear_time = 0; + if(BoardPlayerCoinsGet(temp_r31->player) <= 0) { + temp_r31->no_coinchg = 1; + } else { + temp_r31->no_coinchg = 0; + } + if(BoardPlayerCoinsGet(temp_r31->player) >= 30) { + temp_r31->loss = 30; + } else { + temp_r31->loss = BoardPlayerCoinsGet(temp_r31->player); + } + } + } + if(temp_r26 == 0) { + return 0; + } + BoardPlayerPosGet(player, &spB8); + BoardSpacePosGet(0, space, &spC4); + sp90[0] = spB8.y; + if(spC4.y > spB8.y) { + spB8.y += 300.0f; + } else { + spB8.y += 200.0f; + } + VECSubtract(&spC4, &spB8, &spAC); + spAC.x /= 60.0f; + spAC.z /= 60.0f; + BoardPlayerRotYSet(player, 90.0-(180.0*(atan2(spAC.z, spAC.x)/M_PI))); + BoardPlayerIdleSet(player); + HuPrcSleep(10); + sp90[1] = BoardVecDistXZCalc(&spC4, &spB8); + BoardModelMotionShiftSet(suitMdl, bowserSuitMot[3], 0.0f, 8.0f, 0); + BoardModelMotionSpeedSet(suitMdl, 2.0f); + HuPrcSleep(8); + HuAudFXPlay(809); + temp_r24 = 0; + temp_r25 = 0; + for(temp_f30=0; temp_f30<60.0f; temp_f30++) { + temp_f29 = spB8.y; + spB8.x += spAC.x; + spB8.z += spAC.z; + spB8.y += 10.0f + (0.9f*(-0.020416668f * temp_f30 * temp_f30)); + if(temp_f29 > spB8.y) { + temp_r25 = 1; + } + if(spB8.y <= 200.0f+spC4.y && temp_r25) { + for(temp_r27=0; temp_r27<4; temp_r27++) { + if(megaSquishObj[temp_r27]) { + temp_r28 = OM_GET_WORK_PTR(megaSquishObj[temp_r27], MegaSquishWork); + if((s16)space == GWPlayer[temp_r28->player].space_curr && temp_r28->state != 1) { + temp_r28->state = 1; + } + } + } + } + if(spB8.y <= spC4.y) { + spB8.y = spC4.y; + if(!temp_r24) { + BoardPlayerIdleSet(player); + HuAudFXPlay(810); + temp_r24 = 1; + } + + } + BoardPlayerPosSetV(player, &spB8); + HuPrcVSleep(); + } + BoardCameraQuakeSet(30, 500.0f); + omVibrate(0, 12, 4, 2); + omVibrate(1, 12, 4, 2); + omVibrate(2, 12, 4, 2); + omVibrate(3, 12, 4, 2); + BoardPlayerIdleSet(player); + HuPrcSleep(30); +} + void BoardPlayerCopyEyeMat(s32 arg0, s32 arg1) { HsfMaterial* var_r29; s32 var_r24; @@ -2543,7 +2878,6 @@ void BoardPlayerCopyEyeMat(s32 arg0, s32 arg1) { DCStoreRange(hsfData->material, hsfData->materialCnt * 0x3C); } - void BoardPlayerCopyMat(s32 arg0) { s16 modelID; ModelData *model; diff --git a/src/game/board/space.c b/src/game/board/space.c index cf0118d0..5c8c0cf2 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -639,7 +639,7 @@ s32 BoardSpaceWalkExec(s32 player, s32 space) if(space_ptr->flag & 0x600000) { s32 mg_param = GWSystem.unk_38; if(BoardPlayerSizeGet(player) == 1) { - BoardRotateDiceNumbers(player); + BoardPlayerIdleSet(player); BoardMGCreate(mg_param); } return 1; diff --git a/src/game/board/star.c b/src/game/board/star.c index c761b559..99b05702 100755 --- a/src/game/board/star.c +++ b/src/game/board/star.c @@ -211,7 +211,7 @@ static void ExecStar(void) { temp_f30 = 90.0 - 180.0 * (atan2(spC.z, spC.x) / M_PI); temp_f30 = 90.0f * ((temp_f30 + 3.0f) / 90.0f); temp_f29 = BoardPlayerRotYGet(temp_r31); - BoardRotateDiceNumbers(temp_r31); + BoardPlayerIdleSet(temp_r31); if (BoardDAngleCalc(temp_f30 - temp_f29) < 0.0f) { var_f28 = -BoardDAngleCalc(temp_f30 - temp_f29); } else { @@ -689,7 +689,7 @@ void BoardStarShowNext(s32 arg0) { BoardAudSeqFadeOut(0, 1000); } showNextObj = omAddObjEx(boardObjMan, 0x7E03, 0, 0, -1, ShowNextUpdate); - BoardRotateDiceNumbers(arg0); + BoardPlayerIdleSet(arg0); BoardModelMotionStart(BoardStarHostMdlGet(), 1, 0x40000001); BoardModelPosGet(BoardStarHostMdlGet(), &sp50); showNextObj->scale.x = sp50.x; diff --git a/src/game/board/ui.c b/src/game/board/ui.c index 7b271d71..81ec4bed 100755 --- a/src/game/board/ui.c +++ b/src/game/board/ui.c @@ -1152,7 +1152,7 @@ static void FinishItemUse(s16 arg0, s32 arg1) { case 10: HuPrcSleep(2); BoardBowserSuitMotionCreate(); - BoardRotateDiceNumbers(itemPlayer); + BoardPlayerIdleSet(itemPlayer); BoardModelLayerSet(BoardBowserSuitModelGet(), 0); BoardModelLayerSet(BoardBowserSuitPlayerModelGet(), 0); break; diff --git a/src/game/board/warp.c b/src/game/board/warp.c index f5b45068..8505051a 100644 --- a/src/game/board/warp.c +++ b/src/game/board/warp.c @@ -66,7 +66,7 @@ void WarpProcess(void) { HuPrcVSleep(); } - BoardRotateDiceNumbers(curr_player); + BoardPlayerIdleSet(curr_player); if (_CheckFlag(0x1000B) != 0) { BoardTutorialHookExec(18, 0); boardTutorialData[0] = 0; @@ -144,7 +144,7 @@ static void WarpInit(s32 player) { HuAudFXPlay(835); BoardPlayerRotYSet(player, 0.0f); BoardPlayerPosSet(player, 0.0f, 0.0f, 0.0f); - BoardRotateDiceNumbers(player); + BoardPlayerIdleSet(player); } static void WarpLaunch(s32 player) { @@ -245,7 +245,7 @@ static void WarpImpact(s32 player) { HuPrcSleep(60); for (i = 0; i < warpImpactCnt; i++) { - BoardRotateDiceNumbers(warpImpactPlayer[i]); + BoardPlayerIdleSet(warpImpactPlayer[i]); } warpState = 6; } \ No newline at end of file From 16e5f3995430c2f994b894decedfb4f7a0aa01c4 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Sun, 10 Mar 2024 00:26:44 -0800 Subject: [PATCH 057/106] Matched game/board/char_wheel + some unsplit cleanup --- config/GMPE01_00/symbols.txt | 3 +- configure.py | 2 +- include/board_unsplit.h | 14 - include/game/board/char_wheel.h | 13 + include/game/board/com.h | 2 +- include/game/board/space.h | 3 - src/REL/w03Dll/mg_coin.c | 1 + src/REL/w10Dll/main.c | 1 + src/REL/w10Dll/scene.c | 2 + src/game/board/char_wheel.c | 532 ++++++++++++++++++++++++++++++++ src/game/board/item.c | 2 +- src/game/board/main.c | 3 +- src/game/board/player.c | 1 + src/game/board/star.c | 1 + src/game/board/warp.c | 8 +- 15 files changed, 558 insertions(+), 30 deletions(-) create mode 100755 include/game/board/char_wheel.h create mode 100755 src/game/board/char_wheel.c diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index cc2ddca6..6315e23d 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5232,8 +5232,7 @@ coinChgObj = .data:0x8013A1F0; // type:object size:0x10 scope:local coinDigitMdl = .data:0x8013A200; // type:object size:0x28 scope:local jumptable_8013A228 = .data:0x8013A228; // type:object size:0x1C scope:local wheelSprTbl = .data:0x8013A248; // type:object size:0x28 scope:local -wheelSprPrio = .data:0x8013A270; // type:object size:0xA scope:local -wheelCharIconPrioTbl = .data:0x8013A27A; // type:object size:0x4 scope:local data:byte +wheelSprPrio = .data:0x8013A270; // type:object size:0xE scope:local data:byte wheelCharIconTbl = .data:0x8013A280; // type:object size:0x20 scope:local lbl_8013A2A0 = .data:0x8013A2A0; // type:object size:0xF data:string boardStarSndTbl = .data:0x8013A2B0; // type:object size:0x20 diff --git a/configure.py b/configure.py index 09847e08..2296aa50 100644 --- a/configure.py +++ b/configure.py @@ -379,7 +379,7 @@ config.libs = [ Object(Matching, "game/board/lottery.c"), Object(Matching, "game/board/basic_space.c"), Object(Matching, "game/board/warp.c"), - Object(NonMatching, "game/board/char_wheel.c"), + Object(Matching, "game/board/char_wheel.c"), Object(NonMatching, "game/board/mushroom.c"), Object(Matching, "game/board/star.c"), Object(Matching, "game/board/roll.c"), diff --git a/include/board_unsplit.h b/include/board_unsplit.h index d3a3e53c..941d3d53 100644 --- a/include/board_unsplit.h +++ b/include/board_unsplit.h @@ -3,29 +3,15 @@ #include "dolphin.h" -#ifndef _BOARD_SPACE_EVENT_FUNC -#define _BOARD_SPACE_EVENT_FUNC -typedef s32 (*BoardSpaceEventFunc)(void); -#endif - #ifndef _BOARD_MAIN_H typedef void (*BoardLightHook)(void); #endif -s32 BoardSpacePosGet(s32, s32, Vec*); void BoardShopTutorialExec(s32); void BoardMGSetupTutorialExec(void); void BoardBooHouseTutorialExec(void); -void BoardCharWheelTargetSet(s32); -void BoardSpaceStarSetIndex(s32); void BoardLightHookSet(BoardLightHook set, BoardLightHook reset); s32 fn_8006DDE8(s16, f32); -void BoardSpaceWalkEventFuncSet(BoardSpaceEventFunc func); -void BoardSpaceWalkMiniEventFuncSet(BoardSpaceEventFunc func); -void BoardSpaceLandEventFuncSet(BoardSpaceEventFunc func); -s32 BoardSpaceFlagSearch(s32, u32); -void BoardSpaceInit(s32); -void BoardSpaceDestroy(void); void BoardShopHostSet(s16); void BoardBooHouseHostSet(s16); s32 BoardCameraRotGet(Vec*); diff --git a/include/game/board/char_wheel.h b/include/game/board/char_wheel.h new file mode 100755 index 00000000..ffbf333f --- /dev/null +++ b/include/game/board/char_wheel.h @@ -0,0 +1,13 @@ +#ifndef _BOARD_CHAR_WHEEL_H +#define _BOARD_CHAR_WHEEL_H + +#include "dolphin/types.h" + +s32 BoardCharWheelInit(s32 arg0, s32 arg1); +BOOL BoardCharWheelCheck(void); +void BoardCharWheelWait(void); +s32 BoardCharWheelResultGet(void); +void BoardCharWheelSpeedSet(float arg0); +void BoardCharWheelTargetSet(s16 arg0); + +#endif diff --git a/include/game/board/com.h b/include/game/board/com.h index d0db30fa..f15542ab 100755 --- a/include/game/board/com.h +++ b/include/game/board/com.h @@ -14,6 +14,6 @@ s32 BoardComUseItemSlotGet(s32 arg0); s32 BoardComUseItemSet(s32 arg0, s32 arg1); BOOL BoardComUseItemCheck(s32 arg0); s32 BoardComJunctionInputGet(s32 arg0, Vec *arg1, s32 arg2, float *arg3); -s32 BoardComBestPlayerFind(void); +s32 BoardComFarPlayerFind(void); #endif diff --git a/include/game/board/space.h b/include/game/board/space.h index 44dc791f..d361da39 100644 --- a/include/game/board/space.h +++ b/include/game/board/space.h @@ -5,10 +5,7 @@ #define BOARD_SPACE_LINKMAX 4 -#ifndef _BOARD_SPACE_EVENT_FUNC -#define _BOARD_SPACE_EVENT_FUNC typedef s32 (*BoardSpaceEventFunc)(void); -#endif typedef struct board_space { Vec pos; diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index 29b3aad1..b0fb110f 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -6,6 +6,7 @@ #include "game/board/main.h" #include "game/board/model.h" #include "game/board/player.h" +#include "game/board/space.h" extern u16 HuPadBtnDown[4]; extern s16 lbl_1_bss_C[14]; diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index 00e96288..0f3dd29d 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -3,6 +3,7 @@ #include "game/hsfman.h" #include "game/board/lottery.h" #include "game/board/model.h" +#include "game/board/space.h" #include "game/board/star.h" #include "game/board/tutorial.h" #include "game/board/main.h" diff --git a/src/REL/w10Dll/scene.c b/src/REL/w10Dll/scene.c index 52909d78..6d5b6783 100644 --- a/src/REL/w10Dll/scene.c +++ b/src/REL/w10Dll/scene.c @@ -1,7 +1,9 @@ #include "include/REL/w10Dll.h" +#include "game/board/char_wheel.h" #include "game/board/lottery.h" #include "game/board/main.h" #include "game/board/model.h" +#include "game/board/space.h" #include "game/board/star.h" #include "game/board/tutorial.h" #include "game/board/ui.h" diff --git a/src/game/board/char_wheel.c b/src/game/board/char_wheel.c new file mode 100755 index 00000000..75b8510f --- /dev/null +++ b/src/game/board/char_wheel.c @@ -0,0 +1,532 @@ +#include "game/board/char_wheel.h" +#include "game/audio.h" +#include "game/flag.h" +#include "game/gamework.h" +#include "game/object.h" +#include "game/pad.h" +#include "game/board/com.h" +#include "game/board/main.h" +#include "game/board/tutorial.h" +#include "game/board/ui.h" + +#include "math.h" + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 1; + u8 unk00_field2 : 1; + u8 unk00_field3 : 4; + }; + s8 unk01; + s8 unk02; + u8 unk03; + s16 unk04; + s16 unk06; + s16 unk08; +} CharWheelWork; + +static void ExecCharWheel(omObjData *arg0); +static void InitCharWheel(CharWheelWork *arg0); +static void UpdateCharWheel(CharWheelWork *arg0); +static void StopCharWheel(CharWheelWork *arg0); +static void GrowCharWheel(CharWheelWork *arg0); +static void ShrinkCharWheel(CharWheelWork *arg0); +static void KillCharWheelSpr(void); +static void SetCharWheelChars(s32 arg0, s32 arg1, s8 *arg2); +static s32 GetInput(CharWheelWork *arg0); +static s16 GetComDelay(s32 arg0, s32 arg1); +static s32 GetComInput(CharWheelWork *arg0); + +static s8 wheelChars[4]; +static s16 comDelay; +static s16 wheelTimer; +static float wheelSpeed; +static s16 targetVal; +static float angleOfs; +static s16 targetF; +static omObjData *charWheelObj; + +static s8 wheelPos = -1; +static s16 wheelSprGrp = -1; +static s32 wheelFXStat = -1; + +static s32 wheelSprTbl[] = { + 0x00070036, + 0x00070038, + 0x00070038, + 0x00070038, + 0x00070037, + 0x00070037, + 0x00070037, + 0x00070037, + 0x0007003A, + 0x00070039 +}; + +static s8 wheelSprPrio[] = { + 0x3C, 0x50, 0x50, 0x50, + 0x50, 0x50, 0x50, 0x50, + 0x14, 0x1E, + // wheelCharIconPrioTbl + 0x46, 0x46, 0x46, 0x46 +}; + +static s32 wheelCharIconTbl[] = { + 0x0007003B, + 0x0007003C, + 0x0007003D, + 0x0007003E, + 0x0007003F, + 0x00070040, + 0x00070041, + 0x00070042 +}; + +s32 BoardCharWheelInit(s32 arg0, s32 arg1) { + CharWheelWork *temp_r31; + + arg1 = 3; + charWheelObj = omAddObjEx(boardObjMan, 0x104, 0, 0, -1, ExecCharWheel); + temp_r31 = OM_GET_WORK_PTR(charWheelObj, CharWheelWork); + temp_r31->unk00_field0 = 0; + temp_r31->unk00_field2 = 0; + temp_r31->unk00_field1 = (arg1 == 3) ? 0 : 1; + temp_r31->unk01 = arg0; + temp_r31->unk02 = 0; + temp_r31->unk03 = 0; + temp_r31->unk06 = 0; + wheelSpeed = 18.0f; + if (GWPlayer[temp_r31->unk01].com) { + temp_r31->unk04 = 360; + } else { + temp_r31->unk04 = 3600; + } +} + +BOOL BoardCharWheelCheck(void) { + return (charWheelObj != NULL) ? FALSE : TRUE; +} + +void BoardCharWheelWait(void) { + while (!BoardCharWheelCheck()) { + HuPrcVSleep(); + } +} + +s32 BoardCharWheelResultGet(void) { + return wheelChars[wheelPos]; +} + +void BoardCharWheelSpeedSet(float arg0) { + if (arg0 <= 0.0f) { + arg0 = 18.0f; + } + wheelSpeed = arg0; +} + +static void ExecCharWheel(omObjData *arg0) { + CharWheelWork *temp_r31; + + temp_r31 = OM_GET_WORK_PTR(arg0, CharWheelWork);; + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + KillCharWheelSpr(); + charWheelObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (wheelTimer < temp_r31->unk04) { + wheelTimer++; + } + switch (temp_r31->unk00_field3) { + case 0: + InitCharWheel(temp_r31); + break; + case 1: + GrowCharWheel(temp_r31); + break; + case 2: + UpdateCharWheel(temp_r31); + break; + case 3: + StopCharWheel(temp_r31); + break; + case 4: + ShrinkCharWheel(temp_r31); + break; + } +} + +static void InitCharWheel(CharWheelWork *arg0) { + GXColor spE; + float temp_f29; + float temp_f28; + float temp_f27; + s32 var_r26; + s16 var_r27; + s16 var_r25; + s16 i; + s16 spA; + s16 sp8; + + wheelChars[0] = wheelChars[1] = wheelChars[2] = wheelChars[3] = -1; + wheelFXStat = -1; + wheelTimer = 0; + if (arg0->unk00_field1 != 0) { + spA = 4; + var_r26 = 4; + temp_f27 = 45.0f; + } else { + spA = 3; + var_r26 = 1; + temp_f27 = 60.0f; + } + wheelSprGrp = HuSprGrpCreate(spA + 14); + SetCharWheelChars(arg0->unk00_field1, arg0->unk01, wheelChars); + if (GWPlayer[arg0->unk01].com) { + comDelay = GetComDelay(arg0->unk01, arg0->unk00_field1); + switch (GWPlayer[arg0->unk01].diff) { + case 0: + var_r27 = BoardRandMod(120); + break; + case 1: + var_r27 = BoardRandMod(60); + break; + case 2: + var_r27 = BoardRandMod(30); + break; + case 3: + var_r27 = 0; + break; + } + comDelay += var_r27; + if (comDelay > 360.0f) { + comDelay -= 360.0f; + } + if (comDelay < 0) { + comDelay += 360.0f; + } + } else { + comDelay = 0; + } + for (i = 0; i <= 9; i++) { + BoardSpriteCreate(wheelSprTbl[i], wheelSprPrio[i], 0, &sp8); + HuSprGrpMemberSet(wheelSprGrp, i, sp8); + HuSprAttrSet(wheelSprGrp, i, 8); + } + if (arg0->unk00_field1 == 0) { + for (i = 0; i < 4; i++) { + HuSprAttrSet(wheelSprGrp, i + 4, 4); + } + } else { + for (i = 0; i < 3; i++) { + HuSprAttrSet(wheelSprGrp, i + 1, 4); + } + } + for (i = 0; i < spA; i++) { + var_r25 = GWPlayer[wheelChars[i]].character; + BoardSpriteCreate(wheelCharIconTbl[var_r25], wheelSprPrio[i + 10], 0, &sp8); + HuSprGrpMemberSet(wheelSprGrp, i + 10, sp8); + HuSprAttrSet(wheelSprGrp, i + 10, 8); + } + HuSprPosSet(wheelSprGrp, 9, 3.0f, 3.0f); + HuSprColorSet(wheelSprGrp, 9, 0x40, 0x40, 0x40); + HuSprGrpPosSet(wheelSprGrp, 288.0f, 240.0f); + HuSprGrpScaleSet(wheelSprGrp, 0.01f, 0.01f); + OSs16tof32(&spA, &temp_f29); + temp_f29 = 360.0f / temp_f29; + for (i = 0; i < spA; i++) { + if (arg0->unk00_field1 != 0) { + switch (i) { + case 0: + HuSprPosSet(wheelSprGrp, i + 10, 50.0f, -57.0f); + break; + case 1: + HuSprPosSet(wheelSprGrp, i + 10, -50.0f, -57.0f); + break; + case 2: + HuSprPosSet(wheelSprGrp, i + 10, 50.0f, 57.0f); + break; + case 3: + HuSprPosSet(wheelSprGrp, i + 10, -50.0f, 57.0f); + break; + } + } else { + switch (i) { + case 0: + HuSprPosSet(wheelSprGrp, i + 10, 50.0f, -35.0f); + break; + case 1: + HuSprPosSet(wheelSprGrp, i + 10, 0.0f, 57.0f); + break; + case 2: + HuSprPosSet(wheelSprGrp, i + 10, -50.0f, -35.0f); + break; + } + } + OSs16tof32(&i, &temp_f28); + HuSprZRotSet(wheelSprGrp, var_r26 + i, temp_f29 * temp_f28); + GWCharColorGet(GWPlayer[wheelChars[i]].character, &spE); + HuSprColorSet(wheelSprGrp, var_r26 + i, spE.r, spE.g, spE.b); + } + for (i = 0; i < 3; i++) { + if (wheelChars[i] == targetVal) { + break; + } + } + angleOfs = 120.0f * i; + if (angleOfs > 180.0f) { + angleOfs -= 360.0f; + } + arg0->unk00_field3 = 1; +} + +static void UpdateCharWheel(CharWheelWork *arg0) { + float var_f24; + float var_f25; + float var_f23; + u32 var_r18; + s16 temp_r20; + s16 var_r19; + s16 var_r17; + + OSs16tof32(&arg0->unk06, &var_f24); + OSs16tof32(&arg0->unk08, &var_f25); + var_f24 = var_f24 * 0.0625f; + var_f25 = var_f25 * 0.0625f; + if (arg0->unk00_field2 == 0) { + if (var_f25 < 18.0f) { + var_f25 += 0.7f; + if (var_f25 > wheelSpeed) { + var_f25 = wheelSpeed; + } + } else { + var_r18 = GetInput(arg0); + if (var_r18 & 0x100) { + arg0->unk00_field2 = 1; + } + } + } else { + OSf32tos16(&var_f24, &temp_r20); + if (arg0->unk00_field1 == 0) { + var_r19 = 120; + } else { + var_r19 = 90; + } + temp_r20 %= var_r19; + if (var_f25 < 0.5f && (temp_r20 < 2 || temp_r20 >= var_r19 - 2)) { + var_f25 += var_f25 / 2; + } + var_f25 *= 0.92f; + } + var_f23 = 8191.0f - 8191.0f * (var_f25 / wheelSpeed); + OSf32tos16(&var_f23, &var_r17); + HuAudFXPitchSet(wheelFXStat, -var_r17); + if (var_f25 > -0.0000001f && var_f25 < 0.0000001f) { + arg0->unk00_field3 = 3; + if (wheelFXStat != -1) { + HuAudFXStop(wheelFXStat); + wheelFXStat = -1; + } + HuAudFXPlay(0x30B); + } + var_f24 += var_f25; + if (var_f24 > 360.0f) { + var_f24 -= 360.0f; + } + HuSprZRotSet(wheelSprGrp, 8, var_f24); + HuSprZRotSet(wheelSprGrp, 9, var_f24); + var_f24 *= 16.0f; + var_f25 *= 16.0f; + OSf32tos16(&var_f24, &arg0->unk06); + OSf32tos16(&var_f25, &arg0->unk08); +} + +static void StopCharWheel(CharWheelWork *arg0) { + u8 var_r30; + + if (arg0->unk03 == 0) { + arg0->unk06 >>= 4; + if (arg0->unk00_field1 == 0) { + wheelPos = arg0->unk06 / 120; + } else { + wheelPos = arg0->unk06 / 90; + } + } + var_r30 = arg0->unk03 % 6; + if (var_r30 < 3) { + HuSprAttrSet(wheelSprGrp, wheelPos + 10, 4); + } else { + HuSprAttrReset(wheelSprGrp, wheelPos + 10, 4); + } + if (arg0->unk03 < 90) { + arg0->unk03++; + } else { + HuSprAttrReset(wheelSprGrp, wheelPos + 10, 4); + arg0->unk00_field3 = 4; + } +} + +static void GrowCharWheel(CharWheelWork *arg0) { + float temp_f30; + + if (arg0->unk02 < 90) { + arg0->unk02 += 3; + } else { + if (_CheckFlag(0x1000B)) { + BoardTutorialHookExec(0x14, 0); + } + arg0->unk02 = 90; + arg0->unk00_field3 = 2; + wheelFXStat = HuAudFXPlay(0x30A); + } + OSs8tof32(&arg0->unk02, &temp_f30); + HuSprGrpScaleSet(wheelSprGrp, sin(temp_f30 * M_PI / 180.0), sin(temp_f30 * M_PI / 180.0)); +} + +static void ShrinkCharWheel(CharWheelWork *arg0) { + float temp_f30; + + if (arg0->unk02 > 0) { + arg0->unk02 -= 3; + } else { + arg0->unk02 = 0; + arg0->unk00_field0 = 1; + arg0->unk00_field3 = -1; + targetF = 0; + } + OSs8tof32(&arg0->unk02, &temp_f30); + HuSprGrpScaleSet(wheelSprGrp, sin(temp_f30 * M_PI / 180.0), sin(temp_f30 * M_PI / 180.0)); +} + +static void KillCharWheelSpr(void) { + if (wheelSprGrp != -1) { + HuSprGrpKill(wheelSprGrp); + wheelSprGrp = -1; + } +} + +static void SetCharWheelChars(s32 arg0, s32 arg1, s8 *arg2) { + s32 var_r29; + s32 var_r28; + s32 var_r31; + s32 var_r30; + + for (var_r28 = var_r29 = 0; var_r29 < 4; var_r29++) { + if (var_r29 == arg1 && arg0 == 0) { + continue; + } + do { + do { + var_r30 = BoardRandMod(4); + } while (var_r30 == arg1 && arg0 == 0); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (var_r30 == arg2[var_r31]) { + var_r30 = -1; + break; + } + } + } while (var_r30 == -1); + arg2[var_r28] = var_r30; + var_r28++; + } +} + +static s32 GetInput(CharWheelWork *arg0) { + CharWheelWork *var_r27; + float temp_f26; + float temp_f27; + float var_f28; + float var_f29; + s32 var_r28; + + if (wheelTimer >= arg0->unk04) { + return 0x100; + } + if (!GWPlayer[arg0->unk01].com) { + var_r28 = HuPadBtnDown[GWPlayer[arg0->unk01].port]; + return var_r28; + } + var_r28 = GetComInput(arg0); + if (targetF != 0) { + var_r27 = OM_GET_WORK_PTR(charWheelObj, CharWheelWork); + OSs16tof32(&var_r27->unk06, &temp_f26); + OSs16tof32(&var_r27->unk08, &temp_f27); + temp_f26 = temp_f26 * 0.0625f; + temp_f27 = temp_f27 * 0.0625f; + var_f29 = temp_f26 + 46.0f * temp_f27; + var_f29 = fmod(var_f29, 360.0); + if (var_f29 > 180.0f) { + var_f29 -= 360.0f; + } + var_f28 = angleOfs - var_f29; + if (var_f28 >= 360.0f) { + var_f28 += 360.0f; + } + if (var_f28 >= 0.0f && var_f28 < 120.0f - 2.0f * temp_f27) { + var_r28 = 0x100; + } else { + var_r28 = 0; + } + OSReport("%f %f : %f %f\n", temp_f26, temp_f27, var_f29, var_f28); + } + return var_r28; +} + +void BoardCharWheelTargetSet(s16 arg0) { + targetF = 1; + targetVal = arg0; +} + +static s16 GetComDelay(s32 arg0, s32 arg1) { + float var_f30; + s16 var_r26; + s32 var_r27; + s32 var_r28; + s32 i; + + var_r28 = BoardComFarPlayerFind(); + if (var_r28 == -1 || var_r28 == arg0) { + do { + var_r28 = BoardRandMod(4); + } while (var_r28 == arg0); + } + if (arg1 != 0) { + var_r27 = 4; + } else { + var_r27 = 3; + } + for (var_r26 = i = 0; i < var_r27; i++) { + if (var_r28 == wheelChars[i]) { + var_f30 = i * (360 / var_r27); + var_f30 += 45.0f; + var_f30 -= 180.0f; + if (var_f30 < 0.0f) { + var_f30 += 360.0f; + } + if (var_f30 >= 360.0f) { + var_f30 -= 360.0f; + } + OSf32tos16(&var_f30, &var_r26); + break; + } + } + return var_r26; +} + +static s32 GetComInput(CharWheelWork *arg0) { + s16 temp_r31; + s32 var_r29; + s32 var_r28; + s32 var_r27; + + temp_r31 = (arg0->unk06 >> 4); + var_r27 = (arg0->unk00_field1 != 0) ? 90 : 120; + var_r28 = comDelay; + var_r29 = comDelay + var_r27; + if (temp_r31 >= var_r28 && temp_r31 < var_r29) { + return 0x100; + } else { + return 0; + } +} diff --git a/src/game/board/item.c b/src/game/board/item.c index 97aa67df..60d48ff8 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -12,6 +12,7 @@ #include "game/wipe.h" #include "game/board/audio.h" #include "game/board/boo.h" +#include "game/board/char_wheel.h" #include "game/board/com.h" #include "game/board/main.h" #include "game/board/model.h" @@ -52,7 +53,6 @@ typedef struct { extern u32 frandmod(u32); extern void BoardBowserSuitInit(s32); extern s16 BoardBowserSuitPlayerModelGet(void); -extern void BoardCharWheelWait(void); static void ItemProcess(void); static void RestoreProcess(void); diff --git a/src/game/board/main.c b/src/game/board/main.c index ba00341f..e446a4dc 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -14,6 +14,7 @@ #include "game/board/model.h" #include "game/board/pause.h" #include "game/board/player.h" +#include "game/board/space.h" #include "game/board/tutorial.h" #include "game/board/ui.h" #include "game/pad.h" @@ -60,8 +61,6 @@ static CameraView camViewTbl[] = { }; -extern s32 BoardSpacePosGet(s32 layer, s32 space, Vec *pos); - extern void BoardMGSetupPlayClear(void); extern void BoardStartExec(void); diff --git a/src/game/board/player.c b/src/game/board/player.c index b0212376..702924a7 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -6,6 +6,7 @@ #include "game/board/com.h" #include "game/board/main.h" #include "game/board/roll.h" +#include "game/board/space.h" #include "game/board/tutorial.h" #include "game/board/ui.h" #include "game/board/view.h" diff --git a/src/game/board/star.c b/src/game/board/star.c index 99b05702..aab8fa90 100755 --- a/src/game/board/star.c +++ b/src/game/board/star.c @@ -14,6 +14,7 @@ #include "game/board/main.h" #include "game/board/model.h" #include "game/board/player.h" +#include "game/board/space.h" #include "game/board/tutorial.h" #include "game/board/ui.h" #include "game/board/window.h" diff --git a/src/game/board/warp.c b/src/game/board/warp.c index 8505051a..dfd50ab9 100644 --- a/src/game/board/warp.c +++ b/src/game/board/warp.c @@ -1,7 +1,9 @@ #include "game/board/warp.h" +#include "game/board/char_wheel.h" #include "game/board/main.h" #include "game/board/model.h" #include "game/board/player.h" +#include "game/board/space.h" #include "game/board/tutorial.h" #include "game/wipe.h" #include "game/gamework_data.h" @@ -17,12 +19,6 @@ static void WarpStartImpact(s32); static void WarpFall(s32); static void WarpImpact(s32); - -extern void BoardCharWheelInit(s32, s32); -extern void BoardCharWheelSpeedSet(f32); -extern void BoardCharWheelWait(void); -extern s32 BoardCharWheelResultGet(void); - static Vec warpPos; static s8 warpState; From 504e565727f41e83720772c2eac3fcc0d8f1c518 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 10 Mar 2024 22:36:14 -0500 Subject: [PATCH 058/106] Clean Up Sprite Constant Labeling Also improved struct labeling. --- include/game/animdata.h | 85 +++++++++++ include/game/sprite.h | 221 +++++++++------------------ src/REL/bootDll/main.c | 48 +++--- src/game/board/main.c | 14 +- src/game/board/space.c | 12 +- src/game/minigame_seq.c | 84 +++++------ src/game/sprman.c | 327 ++++++++++++++++++++-------------------- src/game/sprput.c | 40 ++--- src/game/thpmain.c | 4 +- src/game/window.c | 24 +-- 10 files changed, 434 insertions(+), 425 deletions(-) create mode 100644 include/game/animdata.h diff --git a/include/game/animdata.h b/include/game/animdata.h new file mode 100644 index 00000000..815367f0 --- /dev/null +++ b/include/game/animdata.h @@ -0,0 +1,85 @@ +#ifndef _GAME_ANIMDATA_H +#define _GAME_ANIMDATA_H + +#include "dolphin.h" + +#define ANIM_BMP_RGBA8 0 +#define ANIM_BMP_RGB5A3 1 +#define ANIM_BMP_RGB5A3_DUPE 2 +#define ANIM_BMP_C8 3 +#define ANIM_BMP_C4 4 +#define ANIM_BMP_IA8 5 +#define ANIM_BMP_IA4 6 +#define ANIM_BMP_I8 7 +#define ANIM_BMP_I4 8 +#define ANIM_BMP_A8 9 +#define ANIM_BMP_CMPR 10 + +#define ANIM_BMP_FMTMASK 0xF +#define ANIM_BMP_ALLOC 0x8000 +#define ANIM_BMP_NUM_MASK 0x7FFF + +#define ANIM_LAYER_FLIPX 0x1 +#define ANIM_LAYER_FLIPY 0x2 + +typedef void (*SpriteFunc)(struct sprite_data *); + +typedef struct anim_frame_data { + s16 pat; + s16 time; + s16 shiftX; + s16 shiftY; + s16 flip; + s16 pad; +} AnimFrameData; + +typedef struct anim_bank_data { + s16 timeNum; + s16 unk; + AnimFrameData *frame; +} AnimBankData; + +typedef struct anim_layer_data { + u8 alpha; + u8 flip; + s16 bmpNo; + s16 startX; + s16 startY; + s16 sizeX; + s16 sizeY; + s16 shiftX; + s16 shiftY; + s16 vtx[8]; +} AnimLayerData; + +typedef struct anim_pat_data { + s16 layerNum; + s16 centerX; + s16 centerY; + s16 sizeX; + s16 sizeY; + AnimLayerData *layer; +} AnimPatData; + +typedef struct anim_bmp_data { + u8 pixSize; + u8 dataFmt; + s16 palNum; + s16 sizeX; + s16 sizeY; + u32 dataSize; + void *palData; + void *data; +} AnimBmpData; + +typedef struct anim_data { + s16 bankNum; + s16 patNum; + s16 bmpNum; + s16 useNum; + AnimBankData *bank; + AnimPatData *pat; + AnimBmpData *bmp; +} AnimData; + +#endif \ No newline at end of file diff --git a/include/game/sprite.h b/include/game/sprite.h index 946bf244..42dcba76 100644 --- a/include/game/sprite.h +++ b/include/game/sprite.h @@ -5,111 +5,36 @@ #include "game/data.h" #include "game/memory.h" -#define SPRITE_MAX 384 -#define SPRITE_GROUP_MAX 256 +#define HUSPR_MAX 384 +#define HUSPR_GRP_MAX 256 -#define SPRITE_INVALID -1 -#define SPRITE_GROUP_INVALID -1 +#define HUSPR_NONE -1 +#define HUSPR_GRP_NONE -1 -#define SPRITE_ATTR_PAUSED 0x1 -#define SPRITE_ATTR_LOOP 0x2 -#define SPRITE_ATTR_HIDDEN 0x4 -#define SPRITE_ATTR_BILINEAR 0x8 -#define SPRITE_ATTR_FUNC 0x10 -#define SPRITE_ATTR_NOPAUSE 0x20 -#define SPRITE_ATTR_REVERSE 0x40 -#define SPRITE_ATTR_ADDITIVE 0x80 -#define SPRITE_ATTR_INVERT 0x100 +#define HUSPR_ATTR_NOANIM 0x1 +#define HUSPR_ATTR_LOOP 0x2 +#define HUSPR_ATTR_DISPOFF 0x4 +#define HUSPR_ATTR_LINEAR 0x8 +#define HUSPR_ATTR_FUNC 0x10 +#define HUSPR_ATTR_NOPAUSE 0x20 +#define HUSPR_ATTR_REVERSE 0x40 +#define HUSPR_ATTR_ADDCOL 0x80 +#define HUSPR_ATTR_INVCOL 0x100 -#define SPRITE_BMP_RGBA8 0 -#define SPRITE_BMP_RGB5A3 1 -#define SPRITE_BMP_RGB5A3_DUPE 2 -#define SPRITE_BMP_C8 3 -#define SPRITE_BMP_C4 4 -#define SPRITE_BMP_IA8 5 -#define SPRITE_BMP_IA4 6 -#define SPRITE_BMP_I8 7 -#define SPRITE_BMP_I4 8 -#define SPRITE_BMP_A8 9 -#define SPRITE_BMP_CMPR 10 +#include "game/animdata.h" -#define SPRITE_BMP_FMTMASK 0xF -#define SPRITE_BMP_ALLOC 0x8000 -#define SPRITE_BMP_NUM_MASK 0x7FFF +typedef void (*HuSprFunc)(struct hu_sprite *); -#define SPRITE_LAYER_FLIPX 0x1 -#define SPRITE_LAYER_FLIPY 0x2 - -typedef void (*SpriteFunc)(struct sprite_data *); - -typedef struct anim_frame_data { - s16 pat; - s16 time; - s16 shiftX; - s16 shiftY; - s16 flip; - s16 pad; -} AnimFrameData; - -typedef struct anim_bank_data { - s16 timeNum; - s16 unk; - AnimFrameData *frame; -} AnimBankData; - -typedef struct anim_layer_data { - u8 alpha; - u8 flip; - s16 bmpNo; - s16 startX; - s16 startY; - s16 sizeX; - s16 sizeY; - s16 shiftX; - s16 shiftY; - s16 vtx[8]; -} AnimLayerData; - -typedef struct anim_pat_data { - s16 layerNum; - s16 centerX; - s16 centerY; - s16 sizeX; - s16 sizeY; - AnimLayerData *layer; -} AnimPatData; - -typedef struct anim_bmp_data { - u8 pixSize; - u8 dataFmt; - s16 palNum; - s16 sizeX; - s16 sizeY; - u32 dataSize; - void *palData; - void *data; -} AnimBmpData; - -typedef struct anim_data { - s16 bankNum; - s16 patNum; - s16 bmpNum; - s16 useNum; - AnimBankData *bank; - AnimPatData *pat; - AnimBmpData *bmp; -} AnimData; - -typedef struct sprite_data { +typedef struct hu_sprite { u8 r; u8 g; u8 b; - char draw_no; - short frame; - short bank; - short attr; - short dirty_flag; - short prio; + u8 draw_no; + s16 frame; + s16 bank; + s16 attr; + s16 dirty_flag; + s16 prio; float time; float x; float y; @@ -120,26 +45,26 @@ typedef struct sprite_data { float a; GXTexWrapMode wrap_s; GXTexWrapMode wrap_t; - short tex_scale_x; - short tex_scale_y; + s16 tex_scale_x; + s16 tex_scale_y; Mtx *group_mtx; union { AnimData *data; - SpriteFunc func; + HuSprFunc func; }; AnimPatData *pat_data; AnimFrameData *frame_data; - short work[4]; + s16 work[4]; AnimData *bg; - unsigned short bg_bank; - short scissor_x; - short scissor_y; - short scissor_w; - short scissor_h; -} SpriteData; + u16 bg_bank; + s16 scissor_x; + s16 scissor_y; + s16 scissor_w; + s16 scissor_h; +} HuSprite; -typedef struct sprite_group_data { - short capacity; +typedef struct hu_spr_grp { + s16 capacity; float x; float y; float z_rot; @@ -147,60 +72,60 @@ typedef struct sprite_group_data { float scale_y; float center_x; float center_y; - short *members; + s16 *members; Mtx mtx; -} SpriteGroupData; +} HuSprGrp; -extern SpriteData HuSprData[SPRITE_MAX]; -extern SpriteGroupData HuSprGrpData[SPRITE_GROUP_MAX]; +extern HuSprite HuSprData[HUSPR_MAX]; +extern HuSprGrp HuSprGrpData[HUSPR_GRP_MAX]; #define HuSprAnimReadFile(data_id) (HuSprAnimRead(HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) void HuSprInit(void); void HuSprClose(void); -void HuSprExec(short draw_no); +void HuSprExec(s16 draw_no); void HuSprBegin(void); -SpriteData *HuSprCall(void); +HuSprite *HuSprCall(void); void HuSprFinish(void); void HuSprPauseSet(BOOL value); AnimData *HuSprAnimRead(void *data); void HuSprAnimLock(AnimData *anim); -short HuSprCreate(AnimData *anim, short prio, short bank); -short HuSprFuncCreate(SpriteFunc func, short prio); -short HuSprGrpCreate(short capacity); -short HuSprGrpCopy(short group); -void HuSprGrpMemberSet(short group, short member, short sprite); -void HuSprGrpMemberKill(short group, short member); -void HuSprGrpKill(short group); -void HuSprKill(short sprite); +s16 HuSprCreate(AnimData *anim, s16 prio, s16 bank); +s16 HuSprFuncCreate(HuSprFunc func, s16 prio); +s16 HuSprGrpCreate(s16 capacity); +s16 HuSprGrpCopy(s16 group); +void HuSprGrpMemberSet(s16 group, s16 member, s16 sprite); +void HuSprGrpMemberKill(s16 group, s16 member); +void HuSprGrpKill(s16 group); +void HuSprKill(s16 sprite); void HuSprAnimKill(AnimData *anim); -void HuSprAttrSet(short group, short member, int attr); -void HuSprAttrReset(short group, short member, int attr); -void HuSprPosSet(short group, short member, float x, float y); -void HuSprZRotSet(short group, short member, float z_rot); -void HuSprScaleSet(short group, short member, float x, float y); -void HuSprTPLvlSet(short group, short member, float tp_lvl); -void HuSprColorSet(short group, short member, u8 r, u8 g, u8 b); -void HuSprSpeedSet(short group, short member, float speed); -void HuSprBankSet(short group, short member, short bank); -void HuSprGrpPosSet(short group, float x, float y); -void HuSprGrpCenterSet(short group, float x, float y); -void HuSprGrpZRotSet(short group, float z_rot); -void HuSprGrpScaleSet(short group, float x, float y); -void HuSprGrpTPLvlSet(short group, float tp_lvl); -s32 HuSprGrpDrawNoSet(short group, int draw_no); -void HuSprDrawNoSet(short group, short member, int draw_no); -void HuSprPriSet(short group, short member, short prio); -void HuSprGrpScissorSet(short group, short x, short y, short w, short h); -void HuSprScissorSet(short group, short member, short x, short y, short w, short h); -AnimData *HuSprAnimMake(short sizeX, short sizeY, short dataFmt); -void HuSprBGSet(short group, short member, AnimData *bg, short bg_bank); -void HuSprSprBGSet(short sprite, AnimData *bg, short bg_bank); +void HuSprAttrSet(s16 group, s16 member, s32 attr); +void HuSprAttrReset(s16 group, s16 member, s32 attr); +void HuSprPosSet(s16 group, s16 member, float x, float y); +void HuSprZRotSet(s16 group, s16 member, float z_rot); +void HuSprScaleSet(s16 group, s16 member, float x, float y); +void HuSprTPLvlSet(s16 group, s16 member, float tp_lvl); +void HuSprColorSet(s16 group, s16 member, u8 r, u8 g, u8 b); +void HuSprSpeedSet(s16 group, s16 member, float speed); +void HuSprBankSet(s16 group, s16 member, s16 bank); +void HuSprGrpPosSet(s16 group, float x, float y); +void HuSprGrpCenterSet(s16 group, float x, float y); +void HuSprGrpZRotSet(s16 group, float z_rot); +void HuSprGrpScaleSet(s16 group, float x, float y); +void HuSprGrpTPLvlSet(s16 group, float tp_lvl); +s32 HuSprGrpDrawNoSet(s16 group, s32 draw_no); +void HuSprDrawNoSet(s16 group, s16 member, s32 draw_no); +void HuSprPriSet(s16 group, s16 member, s16 prio); +void HuSprGrpScissorSet(s16 group, s16 x, s16 y, s16 w, s16 h); +void HuSprScissorSet(s16 group, s16 member, s16 x, s16 y, s16 w, s16 h); +AnimData *HuSprAnimMake(s16 sizeX, s16 sizeY, s16 dataFmt); +void HuSprBGSet(s16 group, s16 member, AnimData *bg, s16 bg_bank); +void HuSprSprBGSet(s16 sprite, AnimData *bg, s16 bg_bank); void AnimDebug(AnimData *anim); void HuSprDispInit(void); -void HuSprDisp(SpriteData *sprite); -void HuSprTexLoad(AnimData *anim, short bmp, short slot, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, GXTexFilter filter); -void HuSprExecLayerSet(short draw_no, short layer); +void HuSprDisp(HuSprite *sprite); +void HuSprTexLoad(AnimData *anim, s16 bmp, s16 slot, GXTexWrapMode wrap_s, GXTexWrapMode wrap_t, GXTexFilter filter); +void HuSprExecLayerSet(s16 draw_no, s16 layer); #endif \ No newline at end of file diff --git a/src/REL/bootDll/main.c b/src/REL/bootDll/main.c index 2282e16c..b5b6f749 100644 --- a/src/REL/bootDll/main.c +++ b/src/REL/bootDll/main.c @@ -84,14 +84,14 @@ static void BootProc(void) sprite_nintendo = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 0, sprite_nintendo); HuSprPosSet(group, 0, 288, 240); - HuSprAttrSet(group, 0, SPRITE_ATTR_HIDDEN); + 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, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); HuWinInit(1); TitleInit(); SystemInitF = 1; @@ -104,7 +104,7 @@ static void BootProc(void) GWPlayerCfg[i].pad_idx = i; } repeat: - HuSprAttrReset(group, 0, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(group, 0, HUSPR_ATTR_DISPOFF); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); while(WipeStatGet()) { HuPrcVSleep(); @@ -121,7 +121,7 @@ static void BootProc(void) sprite_hudson = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 1, sprite_hudson); HuSprPosSet(group, 1, 288, 240); - HuSprAttrSet(group, 1, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); while(OSTicksToMilliseconds(OSGetTick()-tick_prev) < 3000) { HuPrcVSleep(); } @@ -137,8 +137,8 @@ static void BootProc(void) while(WipeStatGet()) { HuPrcVSleep(); } - HuSprAttrSet(group, 0, SPRITE_ATTR_HIDDEN); - HuSprAttrReset(group, 1, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(group, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(group, 1, HUSPR_ATTR_DISPOFF); HuPrcSleep(60); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); while(WipeStatGet()) { @@ -173,8 +173,8 @@ static void BootProc(void) while(OSTicksToMilliseconds(OSGetTick()-tick_prev) < 1000) { HuPrcVSleep(); } - HuSprAttrSet(group, 0, SPRITE_ATTR_HIDDEN); - HuSprAttrSet(group, 1, SPRITE_ATTR_HIDDEN); + 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); @@ -300,7 +300,7 @@ static void ProgressiveProc(void) sprite = HuSprCreate(data, 0, 0); HuSprGrpMemberSet(group, 2, sprite); HuSprPosSet(group, 2, progressivePosTbl[option*2], progressivePosTbl[(option*2)+1]); - HuSprAttrSet(group, 2, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(group, 2, HUSPR_ATTR_DISPOFF); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); while(WipeStatGet()) { HuPrcVSleep(); @@ -312,9 +312,9 @@ static void ProgressiveProc(void) i=0; } if(HU_PAD_BTNDOWN_ALL & PAD_BUTTON_A) { - HuSprAttrSet(group, 1, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(group, 1, HUSPR_ATTR_DISPOFF); HuSprPosSet(group, 2, progressivePosTbl[option*2], progressivePosTbl[(option*2)+1]); - HuSprAttrReset(group, 2, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(group, 2, HUSPR_ATTR_DISPOFF); break; } HuPrcVSleep(); @@ -468,23 +468,23 @@ static void TitleInit(void) sprite_data = HuSprAnimReadFile(TITLE_BG_ANM); sprite = HuSprCreate(sprite_data, 0, 0); HuSprGrpMemberSet(titleGroup, 0, sprite); - HuSprAttrSet(titleGroup, 0, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(titleGroup, 0, HUSPR_ATTR_DISPOFF); HuSprDrawNoSet(titleGroup, 0, 127); HuSprPosSet(titleGroup, 0, 288, 240); sprite_data = HuSprAnimReadFile(TITLE_COPYRIGHT_ANM); sprite = HuSprCreate(sprite_data, 1, 0); HuSprGrpMemberSet(titleGroup, 1, sprite); - HuSprAttrSet(titleGroup, 1, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(titleGroup, 1, HUSPR_ATTR_DISPOFF); HuSprPosSet(titleGroup, 1, 288, 420); sprite_data = HuSprAnimReadFile(TITLE_PRESS_START_ANM); sprite = HuSprCreate(sprite_data, 2, 0); HuSprGrpMemberSet(titleGroup, 2, sprite); - HuSprAttrSet(titleGroup, 2, SPRITE_ATTR_HIDDEN|SPRITE_ATTR_BILINEAR); + HuSprAttrSet(titleGroup, 2, HUSPR_ATTR_DISPOFF|HUSPR_ATTR_LINEAR); HuSprPosSet(titleGroup, 2, 288, 380); sprite_data = HuSprAnimReadFile(TITLE_LOGO_ANM); sprite = HuSprCreate(sprite_data, 0, 0); HuSprGrpMemberSet(titleGroup, 3, sprite); - HuSprAttrSet(titleGroup, 3, SPRITE_ATTR_HIDDEN|SPRITE_ATTR_BILINEAR); + HuSprAttrSet(titleGroup, 3, HUSPR_ATTR_DISPOFF|HUSPR_ATTR_LINEAR); HuSprPosSet(titleGroup, 3, 288, 200); } @@ -496,8 +496,8 @@ static BOOL TitleProc(void) s16 i; Hu3DModelAttrReset(titleModel[0], 1); Hu3DModelAttrReset(titleModel[1], 1); - HuSprAttrReset(titleGroup, 0, SPRITE_ATTR_HIDDEN); - HuSprAttrReset(titleGroup, 1, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(titleGroup, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(titleGroup, 1, HUSPR_ATTR_DISPOFF); OSReport(">>>>>>>>MSM_SE_SEL_01 %d\n", msmSeGetEntryID(2092, y_offset)); OSReport(">>>>>>>>SE Num %d\n", msmSeGetNumPlay(0)); HuAudSStreamPlay(20); @@ -505,14 +505,14 @@ static BOOL TitleProc(void) while(WipeStatGet()) { HuPrcVSleep(); } - HuSprAttrReset(titleGroup, 3, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(titleGroup, 3, HUSPR_ATTR_DISPOFF); for(i=1; i<=50; i++) { scale = (cos((i*1.8)*M_PI/180.0)*10.0)+1.0; HuSprScaleSet(titleGroup, 3, scale, scale); HuSprTPLvlSet(titleGroup, 3, i/50.0); HuPrcVSleep(); } - HuSprAttrReset(titleGroup, 2, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(titleGroup, 2, HUSPR_ATTR_DISPOFF); for(i=scale_time=0; i<1800; i++) { if(i <= 10) { HuSprTPLvlSet(titleGroup, 2, i/10.0); @@ -522,7 +522,7 @@ static BOOL TitleProc(void) if(ret < 0) { OSReport(">>>>>Error %d\n", ret); } - HuSprAttrSet(titleGroup, 2, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(titleGroup, 2, HUSPR_ATTR_DISPOFF); return 1; } scale = (sin((i*scale_time)*M_PI/180.0)*0.1)+0.9; @@ -541,10 +541,10 @@ static BOOL TitleProc(void) Hu3DModelAttrSet(titleModel[0], 1); Hu3DModelAttrSet(titleModel[1], 1); Hu3DModelAttrSet(titleModel[2], 1); - HuSprAttrSet(titleGroup, 0, SPRITE_ATTR_HIDDEN); - HuSprAttrSet(titleGroup, 1, SPRITE_ATTR_HIDDEN); - HuSprAttrSet(titleGroup, 2, SPRITE_ATTR_HIDDEN); - HuSprAttrSet(titleGroup, 3, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(titleGroup, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(titleGroup, 1, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(titleGroup, 2, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(titleGroup, 3, HUSPR_ATTR_DISPOFF); return 0; } diff --git a/src/game/board/main.c b/src/game/board/main.c index e446a4dc..e6f6d717 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -2018,17 +2018,17 @@ void BoardLast5GfxInit(void) } BoardSpriteCreate(spr_file, prio, NULL, &work->sprites[i]); HuSprGrpMemberSet(work->group, i, work->sprites[i]); - HuSprAttrSet(work->group, i, SPRITE_ATTR_BILINEAR); + HuSprAttrSet(work->group, i, HUSPR_ATTR_LINEAR); HuSprPosSet(work->group, i, last5GfxPosTbl[lastF][i][0], last5GfxPosTbl[lastF][i][1]); } if(!work->is_last) { - SpriteData *sprite = &HuSprData[HuSprGrpData[work->group].members[1]]; + HuSprite *sprite = &HuSprData[HuSprGrpData[work->group].members[1]]; HuSprBankSet(work->group, 1, 0); sprite->frame = turn_remain; } else { - HuSprAttrSet(work->group, 1, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->group, 1, HUSPR_ATTR_DISPOFF); } - HuSprAttrSet(work->group, 1, SPRITE_ATTR_PAUSED); + HuSprAttrSet(work->group, 1, HUSPR_ATTR_NOANIM); object->trans.x = 0.0f; HuSprGrpTPLvlSet(work->group, object->trans.x); HuSprGrpPosSet(work->group, 288, 72); @@ -2105,12 +2105,12 @@ void BoardLast5GfxShowSet(s32 show) work = OM_GET_WORK_PTR(last5GfxObj, Last5GfxWork); for(i=0; i<3; i++) { if(show) { - HuSprAttrReset(work->group, i, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->group, i, HUSPR_ATTR_DISPOFF); } else { - HuSprAttrSet(work->group, i, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->group, i, HUSPR_ATTR_DISPOFF); } if(work->is_last) { - HuSprAttrSet(work->group, 1, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->group, 1, HUSPR_ATTR_DISPOFF); } } } diff --git a/src/game/board/space.c b/src/game/board/space.c index 5c8c0cf2..acd4ee9a 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -1000,15 +1000,15 @@ void BoardSpaceInit(s32 data_num) size = bmp->sizeX; spaceHiliteTexFmt = -1; switch(bmp->dataFmt) { - case SPRITE_BMP_RGBA8: + case ANIM_BMP_RGBA8: spaceHiliteTexFmt = GX_TF_RGBA8; break; - case SPRITE_BMP_RGB5A3_DUPE: + case ANIM_BMP_RGB5A3_DUPE: spaceHiliteTexFmt = GX_TF_RGB5A3; break; - case SPRITE_BMP_CMPR: + case ANIM_BMP_CMPR: spaceHiliteTexFmt = GX_TF_CMPR; break; } @@ -1032,15 +1032,15 @@ void BoardSpaceInit(s32 data_num) size = bmp->sizeX; spaceTexFmt = -1; switch(bmp->dataFmt) { - case SPRITE_BMP_RGBA8: + case ANIM_BMP_RGBA8: spaceTexFmt = GX_TF_RGBA8; break; - case SPRITE_BMP_RGB5A3_DUPE: + case ANIM_BMP_RGB5A3_DUPE: spaceTexFmt = GX_TF_RGB5A3; break; - case SPRITE_BMP_CMPR: + case ANIM_BMP_CMPR: spaceTexFmt = GX_TF_CMPR; break; } diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index dc8d41cd..fe87daa3 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -428,7 +428,7 @@ static int SeqInitTimer(SeqWork *work, va_list params) if(seqPauseF) { work->work_s16[1] = 1; for(i=0; i<2; i++) { - HuSprAttrSet(spr_grp, i, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(spr_grp, i, HUSPR_ATTR_DISPOFF); (void)i; //Hack for Matching } } @@ -497,7 +497,7 @@ static int SeqUpdateTimer(SeqWork *work) case 3: for(i=0; i<2; i++) { - HuSprAttrReset(spr_grp, i, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(spr_grp, i, HUSPR_ATTR_DISPOFF); } work->work_s16[1] = 3; work->param[0] = 0; @@ -684,7 +684,7 @@ static int SeqInitType2(SeqWork *work, va_list params) if(seqPauseF) { work->work_s16[1] = 1; for(i=0; iwork_s16[3]; i++) { - HuSprAttrSet(spr_grp, i, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(spr_grp, i, HUSPR_ATTR_DISPOFF); } } return 1; @@ -718,7 +718,7 @@ static int SeqUpdateType2(SeqWork *work) { s32 i; for(i=0; iwork_s16[3]; i++) { - HuSprAttrReset(spr_grp, i, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(spr_grp, i, HUSPR_ATTR_DISPOFF); (void)i; } work->work_s16[1] = 0; @@ -988,7 +988,7 @@ static int SeqInitMGBasic(SeqWork *work, va_list params) } if(seqPauseF) { work->type = 2; - HuSprAttrSet(word_grp, 0, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(word_grp, 0, HUSPR_ATTR_DISPOFF); } else { work->param[0] = 3; } @@ -1091,14 +1091,14 @@ static int SeqUpdateMGBasic(SeqWork *work) time = work->time; scale = work->scale_x+(0.5*sin(((time*9.0f)*M_PI)/180.0)); for(i=0; iwork_s16[3]; i++) { - HuSprAttrReset(work->spr_grp[0], i, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[0], i, HUSPR_ATTR_DISPOFF); pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(i*56)); HuSprPosSet(work->spr_grp[0], i, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], i, work->scale_x+sin(((time*9.0f)*M_PI)/180.0), work->scale_y+sin(((time*9.0f)*M_PI)/180.0)); } if(time == 20.0f) { for(i=0; iwork_s16[3]; i++) { - HuSprAttrReset(work->spr_grp[0], i, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[0], i, HUSPR_ATTR_DISPOFF); } } } else { @@ -1110,7 +1110,7 @@ static int SeqUpdateMGBasic(SeqWork *work) } pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(i*56); if(time == 20.0f) { - HuSprAttrSet(work->spr_grp[0], i, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[0], i, HUSPR_ATTR_DISPOFF); } else { HuSprPosSet(work->spr_grp[0], i, pos_x+((1.0-cos(((time*4.5f)*M_PI)/180.0f))*(work->work_s16[3]*56*2)), work->y); HuSprZRotSet(work->spr_grp[0], i, (time/20.0f)*390.0f); @@ -1215,7 +1215,7 @@ static int SeqInitMGCommon(SeqWork *work, va_list params) HuSprTPLvlSet(work->spr_grp[word_grp], j, tp_lvl); HuSprPosSet(work->spr_grp[word_grp], j, -100.0f, 240.0f); HuSprPriSet(work->spr_grp[word_grp], j, i+5); - HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR); + HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR); } if(i == 0) { tp_lvl -= 0.5; @@ -1225,7 +1225,7 @@ static int SeqInitMGCommon(SeqWork *work, va_list params) } if(seqPauseF) { work->type = 2; - HuSprAttrSet(word_grp, 0, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(word_grp, 0, HUSPR_ATTR_DISPOFF); } else { work->param[0] = 3; } @@ -1302,7 +1302,7 @@ static int SeqUpdateMGBattle(SeqWork *work) HuSprZRotSet(work->spr_grp[i], j, 0.0f); HuSprScaleSet(work->spr_grp[i], j, work->scale_x, work->scale_y); if(i != 0) { - HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } else { s16 discard_cnt; @@ -1383,20 +1383,20 @@ static int SeqUpdateMGBattle(SeqWork *work) if(work->time <= 20) { for(i=1; i<4; i++) { for(j=0; jwork_s16[3]; j++) { - HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } time = work->time; scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0)); for(j=0; jwork_s16[3]; j++) { - HuSprAttrReset(work->spr_grp[0], j, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[0], j, HUSPR_ATTR_DISPOFF); pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); } if(time == 20.0f) { for(j=0; jwork_s16[3]; j++) { - HuSprAttrReset(work->spr_grp[0], j, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[0], j, HUSPR_ATTR_DISPOFF); } } } else { @@ -1408,7 +1408,7 @@ static int SeqUpdateMGBattle(SeqWork *work) } if(time == 15.0f) { for(j=0; jwork_s16[3]; j++) { - HuSprAttrReset(work->spr_grp[1], j, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[1], j, HUSPR_ATTR_DISPOFF); HuSprPosSet(work->spr_grp[1], j, 288.0f, work->y); HuSprTPLvlSet(work->spr_grp[1], j, 1.0f); } @@ -1560,7 +1560,7 @@ static int SeqUpdateMG1vs3(SeqWork *work) if(work->time == 60) { for(i=1; i<4; i++) { for(j=0; jwork_s16[3]; j++) { - HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } } @@ -1600,13 +1600,13 @@ static int SeqUpdateMG1vs3(SeqWork *work) if(work->time <= 20) { for(i=1; i<4; i++) { for(j=0; jwork_s16[3]; j++) { - HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } time = work->time; scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0)); for(j=0; jwork_s16[3]; j++) { - HuSprAttrReset(work->spr_grp[0], j, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[0], j, HUSPR_ATTR_DISPOFF); pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); @@ -1614,7 +1614,7 @@ static int SeqUpdateMG1vs3(SeqWork *work) if(time == 20.0f) { for(i=1; i<4; i++) { for(j=0; jwork_s16[3]; j++) { - HuSprAttrReset(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } } @@ -1746,7 +1746,7 @@ static int SeqUpdateMGStory(SeqWork *work) } if(work->time == 30) { for(j=0; jwork_s16[3]; j++) { - HuSprAttrSet(work->spr_grp[1], j, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[1], j, HUSPR_ATTR_DISPOFF); } } } else { @@ -1792,13 +1792,13 @@ static int SeqUpdateMGStory(SeqWork *work) if(work->time <= 20) { for(i=1; i<4; i++) { for(j=0; jwork_s16[3]; j++) { - HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } time = work->time; scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0)); for(j=0; jwork_s16[3]; j++) { - HuSprAttrReset(work->spr_grp[0], j, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[0], j, HUSPR_ATTR_DISPOFF); pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); @@ -1806,7 +1806,7 @@ static int SeqUpdateMGStory(SeqWork *work) if(time == 20.0f){ for(i=1; i<4; i++) { for(j=0; jwork_s16[3]; j++) { - HuSprAttrReset(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } } @@ -1988,13 +1988,13 @@ static int SeqUpdateMG2vs2(SeqWork *work) if(work->time <= 20) { for(i=1; i<4; i++) { for(j=0; jwork_s16[3]; j++) { - HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } time = work->time; scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0)); for(j=0; jwork_s16[3]; j++) { - HuSprAttrReset(work->spr_grp[0], j, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[0], j, HUSPR_ATTR_DISPOFF); pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); @@ -2002,7 +2002,7 @@ static int SeqUpdateMG2vs2(SeqWork *work) if(time == 20.0f) { for(i=1; i<4; i++) { for(j=0; jwork_s16[3]; j++) { - HuSprAttrReset(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } } @@ -2102,8 +2102,8 @@ static int SeqInitFlip(SeqWork *work, va_list params) for(i=0; iwork_s16[3]; i++) { HuSprTPLvlSet(work->spr_grp[word_grp], i, 0.0f); HuSprPosSet(work->spr_grp[word_grp], i, (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(i*56), work->y); - HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR); - HuSprAttrReset(work->spr_grp[word_grp], i, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR); + HuSprAttrReset(work->spr_grp[word_grp], i, HUSPR_ATTR_DISPOFF); } work->work_s16[2] = work->work_s16[3]; { @@ -2133,12 +2133,12 @@ static int SeqInitFlip(SeqWork *work, va_list params) for(i=0; iwork_s16[3]; i++) { HuSprTPLvlSet(work->spr_grp[word_grp], i, 0.0f); HuSprPosSet(work->spr_grp[word_grp], i, (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(i*56), work->y); - HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR); - HuSprAttrReset(work->spr_grp[word_grp], i, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR); + HuSprAttrReset(work->spr_grp[word_grp], i, HUSPR_ATTR_DISPOFF); } if(seqPauseF) { work->type = 2; - HuSprAttrSet(word_grp, 0, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(word_grp, 0, HUSPR_ATTR_DISPOFF); } else { work->param[0] = 3; } @@ -2445,13 +2445,13 @@ static int SeqUpdateMGBowser(SeqWork *work) if(work->time <= 20) { for(j=1; j<4; j++) { for(i=0; iwork_s16[3]; i++) { - HuSprAttrSet(work->spr_grp[j], i, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[j], i, HUSPR_ATTR_DISPOFF); } } time = work->time; scale = work->scale_x+(0.5*sin(((time*9.0f)*M_PI)/180.0)); for(i=0; iwork_s16[3]; i++) { - HuSprAttrReset(work->spr_grp[0], i, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[0], i, HUSPR_ATTR_DISPOFF); pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(i*56)); HuSprPosSet(work->spr_grp[0], i, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], i, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); @@ -2459,7 +2459,7 @@ static int SeqUpdateMGBowser(SeqWork *work) if(time == 20.0f) { for(j=1; j<4; j++) { for(i=0; iwork_s16[3]; i++) { - HuSprAttrReset(work->spr_grp[j], i, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(work->spr_grp[j], i, HUSPR_ATTR_DISPOFF); } } } @@ -2754,7 +2754,7 @@ static int SeqInitWin(SeqWork *work, va_list params) winnerNameW[0] = work->work_s16[3]*50; for(i=0; iwork_s16[3]; i++) { HuSprPosSet(work->spr_grp[word_grp], i, 25.0f+((i*50)-(0.5f*(work->work_s16[3]*50))), 0.0f); - HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR); + HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR); } num_winners = 0; work->work_float[1] = 1.0f; @@ -2778,7 +2778,7 @@ static int SeqInitWin(SeqWork *work, va_list params) word_x = 0.0f; for(i=word_x; iwork_s16[3]; i++, name++) { HuSprPosSet(work->spr_grp[word_grp], i, 25.0+(word_x-(0.5*word_w)), 0.0f); - HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR); + HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR); if(*name == ' ') { word_x += 30.0f; } else { @@ -2795,7 +2795,7 @@ static int SeqInitWin(SeqWork *work, va_list params) if(winner == 7 || winner == 13) { for(i=0;iwork_s16[3]; i++) { HuSprPosSet(work->spr_grp[word_grp], i, 26.0f+((i*52)-(0.5f*(work->work_s16[3]*52))), 0.0f); - HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR); + HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR); } work->work_float[1] = 0.8f; winnerNameW[num_winners+1] = work->work_s16[3]*52; @@ -2844,7 +2844,7 @@ static int SeqInitWin(SeqWork *work, va_list params) work->type = 1; num_winners++; for(j=0; jspr_grp[j], 0, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(work->spr_grp[j], 0, HUSPR_ATTR_DISPOFF); } } else { work->param[0] = 3; @@ -3028,7 +3028,7 @@ static int SeqInitRecord(SeqWork *work, va_list params) HuSprBankSet(spr_grp, digit_idx+2, seqRecordVal); digit_idx++; for(i=digit_idx; i<8; i++) { - HuSprAttrSet(spr_grp, i+2, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(spr_grp, i+2, HUSPR_ATTR_DISPOFF); } HuSprPosSet(spr_grp, 1, (-((digit_idx*44)+48)/2)+24, 32.0f); for(i=0; idata = NULL; } - for(group = HuSprGrpData, i=0; icapacity = 0; } sprite = &HuSprData[0]; @@ -46,16 +45,16 @@ void HuSprInit(void) void HuSprClose(void) { - short i; - SpriteGroupData *group; - SpriteData *sprite; + s16 i; + HuSprGrp *group; + HuSprite *sprite; - for(group = HuSprGrpData, i=0; icapacity != 0) { HuSprGrpKill(i); } } - for(sprite = &HuSprData[1], i=1; idata) { HuSprKill(i); } @@ -63,11 +62,11 @@ void HuSprClose(void) HuSprPauseF = FALSE; } -void HuSprExec(short draw_no) +void HuSprExec(s16 draw_no) { - SpriteData *sprite; + HuSprite *sprite; while(sprite = HuSprCall()) { - if(!(sprite->attr & SPRITE_ATTR_HIDDEN) && sprite->draw_no == draw_no) { + if(!(sprite->attr & HUSPR_ATTR_DISPOFF) && sprite->draw_no == draw_no) { HuSprDisp(sprite); } } @@ -76,14 +75,14 @@ void HuSprExec(short draw_no) void HuSprBegin(void) { Mtx temp, rot; - short i, j; + s16 i, j; Vec axis = {0, 0, 1}; - SpriteGroupData *group; + HuSprGrp *group; group = HuSprGrpData; HuSprOrderNum = 1; HuSprOrder[0].next = 0; HuSprOrder[0].prio = -1; - for(i=0; icapacity != 0) { MTXTrans(temp, group->center_x*group->scale_x, group->center_y*group->scale_y, 0.0f); MTXRotAxisDeg(rot, &axis, group->z_rot); @@ -101,12 +100,12 @@ void HuSprBegin(void) HuSprOrderNo = 0; } -static void HuSprOrderEntry(short group, short sprite) +static void HuSprOrderEntry(s16 group, s16 sprite) { - SpriteOrderData *order = &HuSprOrder[HuSprOrderNum]; - short prio = HuSprData[sprite].prio; - short prev, next; - if(HuSprOrderNum >= SPRITE_MAX*2) { + SpriteOrder *order = &HuSprOrder[HuSprOrderNum]; + s16 prio = HuSprData[sprite].prio; + s16 prev, next; + if(HuSprOrderNum >= HUSPR_MAX*2) { OSReport("Order Max Over!\n"); return; } @@ -124,14 +123,14 @@ static void HuSprOrderEntry(short group, short sprite) HuSprOrderNum++; } -SpriteData *HuSprCall(void) +HuSprite *HuSprCall(void) { HuSprOrderNo = HuSprOrder[HuSprOrderNo].next; if(HuSprOrderNo != 0) { - SpriteOrderData *order = &HuSprOrder[HuSprOrderNo]; - SpriteData *sprite = &HuSprData[order->sprite]; + SpriteOrder *order = &HuSprOrder[HuSprOrderNo]; + HuSprite *sprite = &HuSprData[order->sprite]; sprite->group_mtx = &HuSprGrpData[order->group].mtx; - if(sprite->attr & SPRITE_ATTR_FUNC) { + if(sprite->attr & HUSPR_ATTR_FUNC) { return sprite; } sprite->frame_data = &sprite->data->bank[sprite->bank].frame[sprite->frame]; @@ -142,7 +141,7 @@ SpriteData *HuSprCall(void) } } -static inline void SpriteCalcFrame(SpriteData *sprite, AnimBankData *bank, AnimFrameData **frame, short loop) +static inline void SpriteCalcFrame(HuSprite *sprite, AnimBankData *bank, AnimFrameData **frame, s16 loop) { if(sprite->time >= (*frame)->time) { sprite->frame++; @@ -174,22 +173,22 @@ void HuSprFinish(void) AnimData *anim; AnimBankData *bank; AnimFrameData *frame; - SpriteData *sprite; - short i; - short j; - short loop; - short dir; + HuSprite *sprite; + s16 i; + s16 j; + s16 loop; + s16 dir; - for(sprite = &HuSprData[1], i=1; idata && !(sprite->attr & SPRITE_ATTR_FUNC)) { - if(!HuSprPauseF || (sprite->attr & SPRITE_ATTR_NOPAUSE)) { + for(sprite = &HuSprData[1], i=1; idata && !(sprite->attr & HUSPR_ATTR_FUNC)) { + if(!HuSprPauseF || (sprite->attr & HUSPR_ATTR_NOPAUSE)) { anim = sprite->data; bank = &anim->bank[sprite->bank]; frame = &bank->frame[sprite->frame]; - loop = (sprite->attr & SPRITE_ATTR_LOOP) ? 0 : 1; - if(!(sprite->attr & SPRITE_ATTR_PAUSED)) { - dir = (sprite->attr & SPRITE_ATTR_REVERSE) ? -1 : 1; - for(j=0; j<(int)sprite->speed*minimumVcount; j++) { + loop = (sprite->attr & HUSPR_ATTR_LOOP) ? 0 : 1; + if(!(sprite->attr & HUSPR_ATTR_NOANIM)) { + dir = (sprite->attr & HUSPR_ATTR_REVERSE) ? -1 : 1; + for(j=0; j<(s32)sprite->speed*minimumVcount; j++) { sprite->time += dir; SpriteCalcFrame(sprite, bank, &frame, loop); } @@ -209,7 +208,7 @@ void HuSprPauseSet(BOOL value) AnimData *HuSprAnimRead(void *data) { - short i; + s16 i; AnimBmpData *bmp; AnimBankData *bank; AnimPatData *pat; @@ -244,17 +243,17 @@ void HuSprAnimLock(AnimData *anim) anim->useNum++; } -short HuSprCreate(AnimData *anim, short prio, short bank) +s16 HuSprCreate(AnimData *anim, s16 prio, s16 bank) { - SpriteData *sprite; - short i; - for(sprite = &HuSprData[1], i=1; idata) { break; } } - if(i == SPRITE_MAX) { - return SPRITE_INVALID; + if(i == HUSPR_MAX) { + return HUSPR_NONE; } sprite->data = anim; sprite->speed = 1.0f; @@ -279,34 +278,34 @@ short HuSprCreate(AnimData *anim, short prio, short bank) return i; } -short HuSprFuncCreate(void (*func)(SpriteData *sprite), short prio) +s16 HuSprFuncCreate(HuSprFunc func, s16 prio) { - SpriteData *sprite; - short index = HuSprCreate(NULL, prio, 0); - if(index == SPRITE_INVALID) { - return SPRITE_INVALID; + HuSprite *sprite; + s16 index = HuSprCreate(NULL, prio, 0); + if(index == HUSPR_NONE) { + return HUSPR_NONE; } sprite = &HuSprData[index]; sprite->func = func; - sprite->attr |= SPRITE_ATTR_FUNC; + sprite->attr |= HUSPR_ATTR_FUNC; return index; } -short HuSprGrpCreate(short capacity) +s16 HuSprGrpCreate(s16 capacity) { - SpriteGroupData *group; - short i, j; - for(group = HuSprGrpData, i=0; icapacity == 0) { break; } } - if(i == SPRITE_GROUP_MAX) { - return SPRITE_GROUP_INVALID; + if(i == HUSPR_GRP_MAX) { + return HUSPR_GRP_NONE; } - group->members = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(short)*capacity); + group->members = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(s16)*capacity); for(j=0; jmembers[j] = SPRITE_INVALID; + group->members[j] = HUSPR_NONE; } group->capacity = capacity; group->x = group->y = group->z_rot = group->center_x = group->center_y = 0.0f; @@ -314,14 +313,14 @@ short HuSprGrpCreate(short capacity) return i; } -short HuSprGrpCopy(short group) +s16 HuSprGrpCopy(s16 group) { - SpriteGroupData *new_group_ptr; - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - short new_group = HuSprGrpCreate(group_ptr->capacity); - short i; - if(new_group == SPRITE_GROUP_INVALID) { - return SPRITE_GROUP_INVALID; + HuSprGrp *new_group_ptr; + HuSprGrp *group_ptr = &HuSprGrpData[group]; + s16 new_group = HuSprGrpCreate(group_ptr->capacity); + s16 i; + if(new_group == HUSPR_GRP_NONE) { + return HUSPR_GRP_NONE; } new_group_ptr = &HuSprGrpData[new_group]; new_group_ptr->x = group_ptr->x; @@ -332,9 +331,9 @@ short HuSprGrpCopy(short group) new_group_ptr->center_x = group_ptr->center_x; new_group_ptr->center_y = group_ptr->center_y; for(i=0; icapacity; i++) { - if(group_ptr->members[i] != SPRITE_INVALID) { - SpriteData *old_sprite = &HuSprData[group_ptr->members[i]]; - short new_sprite = HuSprCreate(old_sprite->data, old_sprite->prio, old_sprite->bank); + if(group_ptr->members[i] != HUSPR_NONE) { + HuSprite *old_sprite = &HuSprData[group_ptr->members[i]]; + s16 new_sprite = HuSprCreate(old_sprite->data, old_sprite->prio, old_sprite->bank); HuSprData[new_sprite] = *old_sprite; HuSprGrpMemberSet(new_group, i, new_sprite); } @@ -342,32 +341,32 @@ short HuSprGrpCopy(short group) return new_group; } -void HuSprGrpMemberSet(short group, short member, short sprite) +void HuSprGrpMemberSet(s16 group, s16 member, s16 sprite) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - SpriteData *sprite_ptr = &HuSprData[sprite]; - if(group_ptr->capacity == 0 || group_ptr->capacity <= member || group_ptr->members[member] != SPRITE_INVALID) { + HuSprGrp *group_ptr = &HuSprGrpData[group]; + HuSprite *sprite_ptr = &HuSprData[sprite]; + if(group_ptr->capacity == 0 || group_ptr->capacity <= member || group_ptr->members[member] != HUSPR_NONE) { return; } group_ptr->members[member] = sprite; } -void HuSprGrpMemberKill(short group, short member) +void HuSprGrpMemberKill(s16 group, s16 member) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - if(group_ptr->capacity == 0 || group_ptr->capacity <= member || group_ptr->members[member] == SPRITE_INVALID) { + HuSprGrp *group_ptr = &HuSprGrpData[group]; + if(group_ptr->capacity == 0 || group_ptr->capacity <= member || group_ptr->members[member] == HUSPR_NONE) { return; } HuSprKill(group_ptr->members[member]); - group_ptr->members[member] = SPRITE_INVALID; + group_ptr->members[member] = HUSPR_NONE; } -void HuSprGrpKill(short group) +void HuSprGrpKill(s16 group) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - short i; + HuSprGrp *group_ptr = &HuSprGrpData[group]; + s16 i; for(i=0; icapacity; i++) { - if(group_ptr->members[i] != SPRITE_INVALID) { + if(group_ptr->members[i] != HUSPR_NONE) { HuSprKill(group_ptr->members[i]); } } @@ -375,13 +374,13 @@ void HuSprGrpKill(short group) HuMemDirectFree(group_ptr->members); } -void HuSprKill(short sprite) +void HuSprKill(s16 sprite) { - SpriteData *sprite_ptr = &HuSprData[sprite]; + HuSprite *sprite_ptr = &HuSprData[sprite]; if(!sprite_ptr->data) { return; } - if(!(sprite_ptr->attr & SPRITE_ATTR_FUNC)) { + if(!(sprite_ptr->attr & HUSPR_ATTR_FUNC)) { HuSprAnimKill(sprite_ptr->data); if(sprite_ptr->bg) { HuSprAnimKill(sprite_ptr->bg); @@ -394,7 +393,7 @@ void HuSprKill(short sprite) void HuSprAnimKill(AnimData *anim) { if(--anim->useNum <= 0) { - if(anim->bmpNum & SPRITE_BMP_ALLOC) { + if(anim->bmpNum & ANIM_BMP_ALLOC) { if(anim->bmp->data) { HuMemDirectFree(anim->bmp->data); } @@ -406,11 +405,11 @@ void HuSprAnimKill(AnimData *anim) } } -void HuSprAttrSet(short group, short member, int attr) +void HuSprAttrSet(s16 group, s16 member, s32 attr) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - SpriteData *sprite_ptr; - if(group_ptr->capacity == 0 || group_ptr->capacity <= member || group_ptr->members[member] == SPRITE_INVALID) { + HuSprGrp *group_ptr = &HuSprGrpData[group]; + HuSprite *sprite_ptr; + if(group_ptr->capacity == 0 || group_ptr->capacity <= member || group_ptr->members[member] == HUSPR_NONE) { return; } sprite_ptr = &HuSprData[group_ptr->members[member]]; @@ -418,11 +417,11 @@ void HuSprAttrSet(short group, short member, int attr) sprite_ptr->dirty_flag |= SPRITE_DIRTY_ATTR; } -void HuSprAttrReset(short group, short member, int attr) +void HuSprAttrReset(s16 group, s16 member, s32 attr) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - SpriteData *sprite_ptr; - if(group_ptr->capacity == 0 || group_ptr->capacity <= member || group_ptr->members[member] == SPRITE_INVALID) { + HuSprGrp *group_ptr = &HuSprGrpData[group]; + HuSprite *sprite_ptr; + if(group_ptr->capacity == 0 || group_ptr->capacity <= member || group_ptr->members[member] == HUSPR_NONE) { return; } sprite_ptr = &HuSprData[group_ptr->members[member]]; @@ -430,59 +429,59 @@ void HuSprAttrReset(short group, short member, int attr) sprite_ptr->dirty_flag |= SPRITE_DIRTY_ATTR; } -void HuSprPosSet(short group, short member, float x, float y) +void HuSprPosSet(s16 group, s16 member, float x, float y) { - SpriteData *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; + HuSprite *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; sprite_ptr->x = x; sprite_ptr->y = y; sprite_ptr->dirty_flag |= SPRITE_DIRTY_XFORM; } -void HuSprZRotSet(short group, short member, float z_rot) +void HuSprZRotSet(s16 group, s16 member, float z_rot) { - SpriteData *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; + HuSprite *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; sprite_ptr->z_rot = z_rot; sprite_ptr->dirty_flag |= SPRITE_DIRTY_XFORM; } -void HuSprScaleSet(short group, short member, float x, float y) +void HuSprScaleSet(s16 group, s16 member, float x, float y) { - SpriteData *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; + HuSprite *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; sprite_ptr->scale_x = x; sprite_ptr->scale_y = y; sprite_ptr->dirty_flag |= SPRITE_DIRTY_XFORM; } -void HuSprTPLvlSet(short group, short member, float tp_lvl) +void HuSprTPLvlSet(s16 group, s16 member, float tp_lvl) { - SpriteData *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; + HuSprite *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; sprite_ptr->a = tp_lvl*255; sprite_ptr->dirty_flag |= SPRITE_DIRTY_COLOR; } -void HuSprColorSet(short group, short member, u8 r, u8 g, u8 b) +void HuSprColorSet(s16 group, s16 member, u8 r, u8 g, u8 b) { - SpriteData *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; + HuSprite *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; sprite_ptr->r = r; sprite_ptr->g = g; sprite_ptr->b = b; sprite_ptr->dirty_flag |= SPRITE_DIRTY_COLOR; } -void HuSprSpeedSet(short group, short member, float speed) +void HuSprSpeedSet(s16 group, s16 member, float speed) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; + HuSprGrp *group_ptr = &HuSprGrpData[group]; HuSprData[group_ptr->members[member]].speed = speed; } -void HuSprBankSet(short group, short member, short bank) +void HuSprBankSet(s16 group, s16 member, s16 bank) { - SpriteData *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; + HuSprite *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; AnimData *anim = sprite_ptr->data; AnimBankData *bank_ptr = &anim->bank[sprite_ptr->bank]; AnimFrameData *frame_ptr = &bank_ptr->frame[sprite_ptr->frame]; sprite_ptr->bank = bank; - if(sprite_ptr->attr & SPRITE_ATTR_REVERSE) { + if(sprite_ptr->attr & HUSPR_ATTR_REVERSE) { sprite_ptr->frame = bank_ptr->timeNum-1; frame_ptr = &bank_ptr->frame[sprite_ptr->frame]; sprite_ptr->time = frame_ptr->time; @@ -492,10 +491,10 @@ void HuSprBankSet(short group, short member, short bank) } } -void HuSprGrpPosSet(short group, float x, float y) +void HuSprGrpPosSet(s16 group, float x, float y) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - short i; + HuSprGrp *group_ptr = &HuSprGrpData[group]; + s16 i; group_ptr->x = x; group_ptr->y = y; for(i=0; icapacity; i++) { @@ -505,102 +504,102 @@ void HuSprGrpPosSet(short group, float x, float y) } } -void HuSprGrpCenterSet(short group, float x, float y) +void HuSprGrpCenterSet(s16 group, float x, float y) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - short i; + HuSprGrp *group_ptr = &HuSprGrpData[group]; + s16 i; group_ptr->center_x = x; group_ptr->center_y = y; for(i=0; icapacity; i++) { - if(group_ptr->members[i] != SPRITE_INVALID) { + if(group_ptr->members[i] != HUSPR_NONE) { HuSprData[group_ptr->members[i]].dirty_flag |= SPRITE_DIRTY_XFORM; } } } -void HuSprGrpZRotSet(short group, float z_rot) +void HuSprGrpZRotSet(s16 group, float z_rot) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - short i; + HuSprGrp *group_ptr = &HuSprGrpData[group]; + s16 i; group_ptr->z_rot = z_rot; for(i=0; icapacity; i++) { - if(group_ptr->members[i] != SPRITE_INVALID) { + if(group_ptr->members[i] != HUSPR_NONE) { HuSprData[group_ptr->members[i]].dirty_flag |= SPRITE_DIRTY_XFORM; } } } -void HuSprGrpScaleSet(short group, float x, float y) +void HuSprGrpScaleSet(s16 group, float x, float y) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - short i; + HuSprGrp *group_ptr = &HuSprGrpData[group]; + s16 i; group_ptr->scale_x = x; group_ptr->scale_y = y; for(i=0; icapacity; i++) { - if(group_ptr->members[i] != SPRITE_INVALID) { + if(group_ptr->members[i] != HUSPR_NONE) { HuSprData[group_ptr->members[i]].dirty_flag |= SPRITE_DIRTY_XFORM; } } } -void HuSprGrpTPLvlSet(short group, float tp_lvl) +void HuSprGrpTPLvlSet(s16 group, float tp_lvl) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - short i; + HuSprGrp *group_ptr = &HuSprGrpData[group]; + s16 i; for(i=0; icapacity; i++) { - if(group_ptr->members[i] != SPRITE_INVALID) { + if(group_ptr->members[i] != HUSPR_NONE) { HuSprData[group_ptr->members[i]].a = tp_lvl*255; HuSprData[group_ptr->members[i]].dirty_flag |= SPRITE_DIRTY_COLOR; } } } -s32 HuSprGrpDrawNoSet(short group, int draw_no) +s32 HuSprGrpDrawNoSet(s16 group, s32 draw_no) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - short i; + HuSprGrp *group_ptr = &HuSprGrpData[group]; + s16 i; for(i=0; icapacity; i++) { - if(group_ptr->members[i] != SPRITE_INVALID) { + if(group_ptr->members[i] != HUSPR_NONE) { HuSprData[group_ptr->members[i]].draw_no = draw_no; } } } -void HuSprDrawNoSet(short group, short member, int draw_no) +void HuSprDrawNoSet(s16 group, s16 member, s32 draw_no) { - SpriteData *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; + HuSprite *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; sprite_ptr->draw_no = draw_no; } -void HuSprPriSet(short group, short member, short prio) +void HuSprPriSet(s16 group, s16 member, s16 prio) { - SpriteData *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; + HuSprite *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; sprite_ptr->prio = prio; } -void HuSprGrpScissorSet(short group, short x, short y, short w, short h) +void HuSprGrpScissorSet(s16 group, s16 x, s16 y, s16 w, s16 h) { - SpriteGroupData *group_ptr = &HuSprGrpData[group]; - short i; + HuSprGrp *group_ptr = &HuSprGrpData[group]; + s16 i; for(i=0; icapacity; i++) { - if(group_ptr->members[i] != SPRITE_INVALID) { + if(group_ptr->members[i] != HUSPR_NONE) { HuSprScissorSet(group, i, x, y, w, h); } } } -void HuSprScissorSet(short group, short member, short x, short y, short w, short h) +void HuSprScissorSet(s16 group, s16 member, s16 x, s16 y, s16 w, s16 h) { - SpriteData *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; + HuSprite *sprite_ptr = &HuSprData[HuSprGrpData[group].members[member]]; sprite_ptr->scissor_x = x; sprite_ptr->scissor_y = y; sprite_ptr->scissor_w = w; sprite_ptr->scissor_h = h; } -static short bitSizeTbl[11] = { 32, 24, 16, 8, 4, 16, 8, 8, 4, 8, 4 }; +static s16 bitSizeTbl[11] = { 32, 24, 16, 8, 4, 16, 8, 8, 4, 8, 4 }; -AnimData *HuSprAnimMake(short sizeX, short sizeY, short dataFmt) +AnimData *HuSprAnimMake(s16 sizeX, s16 sizeY, s16 dataFmt) { AnimLayerData *layer; AnimBmpData *bmp; @@ -627,7 +626,7 @@ AnimData *HuSprAnimMake(short sizeX, short sizeY, short dataFmt) anim->useNum = 0; anim->bankNum = 1; anim->patNum = 1; - anim->bmpNum = (1|SPRITE_BMP_ALLOC); + anim->bmpNum = (1|ANIM_BMP_ALLOC); bank->timeNum = 1; bank->unk = 10; frame->pat = 0; @@ -663,19 +662,19 @@ AnimData *HuSprAnimMake(short sizeX, short sizeY, short dataFmt) return anim; } -void HuSprBGSet(short group, short member, AnimData *bg, short bg_bank) +void HuSprBGSet(s16 group, s16 member, AnimData *bg, s16 bg_bank) { - short sprite = HuSprGrpData[group].members[member]; + s16 sprite = HuSprGrpData[group].members[member]; HuSprSprBGSet(sprite, bg, bg_bank); } -void HuSprSprBGSet(short sprite, AnimData *bg, short bg_bank) +void HuSprSprBGSet(s16 sprite, AnimData *bg, s16 bg_bank) { - SpriteData *sprite_ptr = &HuSprData[sprite]; + HuSprite *sprite_ptr = &HuSprData[sprite]; sprite_ptr->bg = bg; sprite_ptr->bg_bank = bg_bank; sprite_ptr->wrap_t = sprite_ptr->wrap_s = GX_REPEAT; - sprite_ptr->attr &= ~SPRITE_ATTR_BILINEAR; + sprite_ptr->attr &= ~HUSPR_ATTR_LINEAR; } void AnimDebug(AnimData *anim) @@ -688,7 +687,7 @@ void AnimDebug(AnimData *anim) AnimBankData *bank; AnimBmpData *bmp; - OSReport("patNum %d,bankNum %d,bmpNum %d\n", anim->patNum, anim->bankNum, anim->bmpNum & SPRITE_BMP_NUM_MASK); + OSReport("patNum %d,bankNum %d,bmpNum %d\n", anim->patNum, anim->bankNum, anim->bmpNum & ANIM_BMP_NUM_MASK); pat = anim->pat; for(i=0; ipatNum; i++) { OSReport("PATTERN%d:\n", i); @@ -716,7 +715,7 @@ void AnimDebug(AnimData *anim) bank++; } bmp = anim->bmp; - for(i=0; ibmpNum & SPRITE_BMP_NUM_MASK; i++) { + for(i=0; ibmpNum & ANIM_BMP_NUM_MASK; i++) { OSReport("BMP%d:\n", i); OSReport("\tpixSize %d,palNum %d,size (%d,%d)\n", bmp->pixSize, bmp->palNum, bmp->sizeX, bmp->sizeY); bmp++; diff --git a/src/game/sprput.c b/src/game/sprput.c index 5e1a923f..c3e50f2b 100644 --- a/src/game/sprput.c +++ b/src/game/sprput.c @@ -40,7 +40,7 @@ void HuSprDispInit(void) GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE); } -void HuSprDisp(SpriteData *sprite) +void HuSprDisp(HuSprite *sprite) { short i; AnimData *anim = sprite->data; @@ -48,10 +48,10 @@ void HuSprDisp(SpriteData *sprite) Vec axis = {0, 0, 1}; Mtx modelview, rot; short color_sum; - SpriteFunc func; + HuSprFunc func; GXSetScissor(sprite->scissor_x, sprite->scissor_y, sprite->scissor_w, sprite->scissor_h); - if(sprite->attr & SPRITE_ATTR_FUNC) { + if(sprite->attr & HUSPR_ATTR_FUNC) { if(sprite->func) { func = sprite->func; func(sprite); @@ -80,9 +80,9 @@ void HuSprDisp(SpriteData *sprite) GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE); GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT0, GX_DF_CLAMP, GX_AF_SPOT); - if(sprite->attr & SPRITE_ATTR_ADDITIVE) { + if(sprite->attr & HUSPR_ATTR_ADDCOL) { GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP); - } else if(sprite->attr & SPRITE_ATTR_INVERT) { + } else if(sprite->attr & HUSPR_ATTR_INVCOL) { GXSetBlendMode(GX_BM_BLEND, GX_BL_ZERO, GX_BL_INVDSTCLR, GX_LO_NOOP); } else { GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); @@ -123,7 +123,7 @@ void HuSprDisp(SpriteData *sprite) continue; } GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); - HuSprTexLoad(anim, layer->bmpNo, 0, sprite->wrap_s, sprite->wrap_t, (sprite->attr & SPRITE_ATTR_BILINEAR) ? GX_LINEAR : GX_NEAR); + HuSprTexLoad(anim, layer->bmpNo, 0, sprite->wrap_s, sprite->wrap_t, (sprite->attr & HUSPR_ATTR_LINEAR) ? GX_LINEAR : GX_NEAR); if(layer->alpha != 255 || color_sum != 255*4) { color.a = (u16)(sprite->a*layer->alpha) >> 8; GXSetTevColor(GX_TEVSTAGE1, color); @@ -140,14 +140,14 @@ void HuSprDisp(SpriteData *sprite) pos[2][1] = layer->vtx[5]-pat->centerY; pos[3][0] = layer->vtx[6]-pat->centerX; pos[3][1] = layer->vtx[7]-pat->centerY; - if(layer->flip & SPRITE_LAYER_FLIPX) { + if(layer->flip & ANIM_LAYER_FLIPX) { texcoord_x2 = layer->startX/(float)bmp->sizeX; texcoord_x1 = (layer->startX+layer->sizeX)/(float)bmp->sizeX; } else { texcoord_x1 = layer->startX/(float)bmp->sizeX; texcoord_x2 = (layer->startX+layer->sizeX)/(float)bmp->sizeX; } - if(layer->flip & SPRITE_LAYER_FLIPY) { + if(layer->flip & ANIM_LAYER_FLIPY) { texcoord_y2 = layer->startY/(float)bmp->sizeY; texcoord_y1 = (layer->startY+layer->sizeY)/(float)bmp->sizeY; } else { @@ -188,49 +188,49 @@ void HuSprTexLoad(AnimData *anim, short bmp, short slot, GXTexWrapMode wrap_s, G AnimBmpData *bmp_ptr = &anim->bmp[bmp]; short sizeX = bmp_ptr->sizeX; short sizeY = bmp_ptr->sizeY; - switch(bmp_ptr->dataFmt & SPRITE_BMP_FMTMASK) { - case SPRITE_BMP_RGBA8: + switch(bmp_ptr->dataFmt & ANIM_BMP_FMTMASK) { + case ANIM_BMP_RGBA8: GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_RGBA8, wrap_s, wrap_t, GX_FALSE); break; - case SPRITE_BMP_RGB5A3: - case SPRITE_BMP_RGB5A3_DUPE: + case ANIM_BMP_RGB5A3: + case ANIM_BMP_RGB5A3_DUPE: GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_RGB5A3, wrap_s, wrap_t, GX_FALSE); break; - case SPRITE_BMP_C8: + case ANIM_BMP_C8: GXInitTlutObj(&tlut_obj, bmp_ptr->palData, GX_TL_RGB5A3, bmp_ptr->palNum); GXLoadTlut(&tlut_obj, slot); GXInitTexObjCI(&tex_obj,bmp_ptr->data, sizeX, sizeY, GX_TF_C8, wrap_s, wrap_t, GX_FALSE, slot); break; - case SPRITE_BMP_C4: + case ANIM_BMP_C4: GXInitTlutObj(&tlut_obj, bmp_ptr->palData, GX_TL_RGB5A3, bmp_ptr->palNum); GXLoadTlut(&tlut_obj, slot); GXInitTexObjCI(&tex_obj,bmp_ptr->data, sizeX, sizeY, GX_TF_C4, wrap_s, wrap_t, GX_FALSE, slot); break; - case SPRITE_BMP_IA8: + case ANIM_BMP_IA8: GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_IA8, wrap_s, wrap_t, GX_FALSE); break; - case SPRITE_BMP_IA4: + case ANIM_BMP_IA4: GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_IA4, wrap_s, wrap_t, GX_FALSE); break; - case SPRITE_BMP_I8: + case ANIM_BMP_I8: GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_I8, wrap_s, wrap_t, GX_FALSE); break; - case SPRITE_BMP_I4: + case ANIM_BMP_I4: GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_I4, wrap_s, wrap_t, GX_FALSE); break; - case SPRITE_BMP_A8: + case ANIM_BMP_A8: GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_CTF_A8, wrap_s, wrap_t, GX_FALSE); break; - case SPRITE_BMP_CMPR: + case ANIM_BMP_CMPR: GXInitTexObj(&tex_obj, bmp_ptr->data, sizeX, sizeY, GX_TF_CMPR, wrap_s, wrap_t, GX_FALSE); break; diff --git a/src/game/thpmain.c b/src/game/thpmain.c index 1f8a68a9..babf6433 100755 --- a/src/game/thpmain.c +++ b/src/game/thpmain.c @@ -10,7 +10,7 @@ static void THPTestProc(void); static void THPViewFunc(ModelData *arg0, Mtx arg1); -static void THPViewSprFunc(SpriteData *arg0); +static void THPViewSprFunc(HuSprite *arg0); static void THPDecodeFunc(void *param); static char THPFileName[64]; @@ -210,7 +210,7 @@ static void THPViewFunc(ModelData *arg0, Mtx arg1) { } } -static void THPViewSprFunc(SpriteData *arg0) { +static void THPViewSprFunc(HuSprite *arg0) { Vec spC = { 0.0f, 0.0f, 1.0f }; GXColor sp8; s32 temp_r30; diff --git a/src/game/window.c b/src/game/window.c index 30d28f20..3a357f77 100644 --- a/src/game/window.c +++ b/src/game/window.c @@ -30,7 +30,7 @@ typedef struct { /* 0x04 */ u32 player[4]; } keyBufData; // Size 0x14 -static void MesDispFunc(SpriteData *sprite); +static void MesDispFunc(HuSprite *sprite); static u8 winBGMake(AnimData *bg, AnimData *frame); static void HuWinProc(void); static void HuWinDrawMes(s16 window); @@ -252,7 +252,7 @@ void HuWinInit(s32 mess_data_no) { s16 HuWinCreate(float x, float y, s16 w, s16 h, s16 frame) { AnimData *bg_anim; WindowData *window; - SpriteData *sprite_ptr; + HuSprite *sprite_ptr; s16 group; s16 sprite; s16 window_id; @@ -407,9 +407,9 @@ void HuWinAllKill(void) { HuDataDirClose(DATADIR_WIN); } -static void MesDispFunc(SpriteData *sprite) { +static void MesDispFunc(HuSprite *sprite) { WindowData *window = &winData[sprite->work[0]]; - SpriteGroupData *group; + HuSprGrp *group; float uv_maxx; float uv_maxy; float uv_minx; @@ -608,7 +608,7 @@ static inline void charEntry(s16 window, s16 x, s16 y, s16 char_idx, s16 color) static void HuWinDrawMes(s16 window) { WindowData *window_ptr = &winData[window]; - SpriteGroupData *group = &HuSprGrpData[window_ptr->group]; + HuSprGrp *group = &HuSprGrpData[window_ptr->group]; s16 c; s16 i; s16 char_w; @@ -888,7 +888,7 @@ static void HuWinKeyWait(s16 window) { } static s16 HuWinSpcFontEntry(WindowData *window, s16 entry, s16 x, s16 y) { - SpriteGroupData *group = &HuSprGrpData[window->group]; + HuSprGrp *group = &HuSprGrpData[window->group]; s16 sprite; s16 i; AnimData *anim; @@ -906,7 +906,7 @@ static s16 HuWinSpcFontEntry(WindowData *window, s16 entry, s16 x, s16 y) { } static void HuWinSpcFontPosSet(WindowData *window, s16 index, s16 x, s16 y) { - SpriteGroupData *group = &HuSprGrpData[window->group]; + HuSprGrp *group = &HuSprGrpData[window->group]; HuSprPosSet(window->group, index, x - window->w / 2, y - window->h / 2); } @@ -1372,7 +1372,7 @@ void HuWinAnimSet(s16 window, AnimData *anim, s16 bank, float x, float y) { s16 HuWinSprSet(s16 window, s16 sprite, float x, float y) { WindowData *window_ptr = &winData[window]; - SpriteGroupData *group = &HuSprGrpData[window_ptr->group]; + HuSprGrp *group = &HuSprGrpData[window_ptr->group]; s16 i; for (i=2; i<=9; i++) { @@ -1388,14 +1388,14 @@ s16 HuWinSprSet(s16 window, s16 sprite, float x, float y) { void HuWinSprPosSet(s16 window, s16 index, float x, float y) { WindowData *window_ptr = &winData[window]; - SpriteGroupData *group = &HuSprGrpData[window_ptr->group]; + HuSprGrp *group = &HuSprGrpData[window_ptr->group]; HuSprPosSet(window_ptr->group, index, x - group->center_x, y - group->center_y); } void HuWinSprPriSet(s16 window, s16 index, s16 prio) { WindowData *window_ptr = &winData[window]; - SpriteGroupData *group = &HuSprGrpData[window_ptr->group]; + HuSprGrp *group = &HuSprGrpData[window_ptr->group]; HuSprPriSet(window_ptr->group, index, prio); } @@ -1419,7 +1419,7 @@ void HuWinDispOff(s16 window) { for(i=0; i<30; i++) { if (window_ptr->sprite_id[i] != -1) { - HuSprAttrSet(window_ptr->group, i, SPRITE_ATTR_HIDDEN); + HuSprAttrSet(window_ptr->group, i, HUSPR_ATTR_DISPOFF); } } window_ptr->attr |= 8; @@ -1431,7 +1431,7 @@ void HuWinDispOn(s16 window) { for (i=0; i<30; i++) { if (window_ptr->sprite_id[i] != -1) { - HuSprAttrReset(window_ptr->group, i, SPRITE_ATTR_HIDDEN); + HuSprAttrReset(window_ptr->group, i, HUSPR_ATTR_DISPOFF); } } window_ptr->attr = window_ptr->attr & ~8; From acb81924604f28292bf33431cefc2a67fc2993c5 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 10 Mar 2024 22:39:25 -0500 Subject: [PATCH 059/106] Remove Duplicate SpriteFunc --- include/game/animdata.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/game/animdata.h b/include/game/animdata.h index 815367f0..88b42cc4 100644 --- a/include/game/animdata.h +++ b/include/game/animdata.h @@ -22,8 +22,6 @@ #define ANIM_LAYER_FLIPX 0x1 #define ANIM_LAYER_FLIPY 0x2 -typedef void (*SpriteFunc)(struct sprite_data *); - typedef struct anim_frame_data { s16 pat; s16 time; From 31143de4ee106ec62971a328a1d0a81431a5600a Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 11 Mar 2024 10:50:14 -0500 Subject: [PATCH 060/106] Start decompiling board/last5.c --- config/GMPE01_00/symbols.txt | 4 +- include/game/board/player.h | 1 - include/game/board/window.h | 1 - include/game/process.h | 2 +- src/game/board/last5.c | 742 +++++++++++++++++++++++++++++++++++ 5 files changed, 745 insertions(+), 5 deletions(-) create mode 100644 src/game/board/last5.c diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 6315e23d..193d486e 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -1925,9 +1925,9 @@ CreateBlock = .text:0x800AAC6C; // type:function size:0xD4 scope:local UpdateLotteryDraw = .text:0x800AAD40; // type:function size:0x170 scope:local SetLotteryDrawState = .text:0x800AAEB0; // type:function size:0x88 scope:local GetLotteryDrawState = .text:0x800AAF38; // type:function size:0x20 scope:local -KillLotteryWheel = .text:0x800AAF58; // type:function size:0x24 scope:local +KillLotteryDrawWheel = .text:0x800AAF58; // type:function size:0x24 scope:local UpdateLotteryDrawWheel = .text:0x800AAF7C; // type:function size:0x2D0 scope:local -SetLotteryWheelState = .text:0x800AB24C; // type:function size:0x1D8 scope:local +SetLotteryDrawWheelState = .text:0x800AB24C; // type:function size:0x1D8 scope:local ExecLotteryDraw = .text:0x800AB424; // type:function size:0x950 scope:local KillLotteryTicket = .text:0x800ABD74; // type:function size:0x4C scope:local InitLotteryTicket = .text:0x800ABDC0; // type:function size:0x488 scope:local diff --git a/include/game/board/player.h b/include/game/board/player.h index 229e5bdd..b7f983e1 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -8,7 +8,6 @@ #include "game/gamework.h" #include "game/window.h" #include "game/object.h" -#include "game/process.h" #include "game/hsfman.h" #include "game/hsfmotion.h" #include "game/gamework_data.h" diff --git a/include/game/board/window.h b/include/game/board/window.h index 2792395a..bf594796 100644 --- a/include/game/board/window.h +++ b/include/game/board/window.h @@ -2,7 +2,6 @@ #define _BOARD_WINDOW_H #include "game/window.h" -#include "game/process.h" typedef void (*BoardWinComKeyFunc)(); diff --git a/include/game/process.h b/include/game/process.h index aad4d97a..c83b9cf2 100644 --- a/include/game/process.h +++ b/include/game/process.h @@ -38,7 +38,7 @@ Process *HuPrcCurrentGet(void); int HuPrcKill(Process *process); void HuPrcChildKill(Process *process); void HuPrcSleep(int time); -void HuPrcVSleep(void); +void HuPrcVSleep(); void HuPrcWakeup(Process *process); void HuPrcDestructorSet2(Process *process, void (*func)(void)); void HuPrcDestructorSet(void (*func)(void)); diff --git a/src/game/board/last5.c b/src/game/board/last5.c new file mode 100644 index 00000000..f1141878 --- /dev/null +++ b/src/game/board/last5.c @@ -0,0 +1,742 @@ +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/audio.h" +#include "game/board/window.h" +#include "game/board/ui.h" +#include "game/board/space.h" +#include "game/board/star.h" +#include "game/audio.h" +#include "game/objsub.h" +#include "game/pad.h" + +#include "game/data.h" +#include "game/wipe.h" + +static s16 stopWin = -1; +static s16 wheelMdl = -1; +s16 lbl_801D3854 = -1; +static s16 focusMdl = -1; +static s32 messBase = -1; + +static s32 hostMotTbl[][8] = { + { + DATA_MAKE_NUM(DATADIR_BLAST5, 23), + DATA_MAKE_NUM(DATADIR_BLAST5, 24), + DATA_MAKE_NUM(DATADIR_BLAST5, 25), + DATA_MAKE_NUM(DATADIR_BLAST5, 26), + DATA_MAKE_NUM(DATADIR_BLAST5, 27), + DATA_MAKE_NUM(DATADIR_BLAST5, 28), + DATA_MAKE_NUM(DATADIR_BLAST5, 29), + DATA_MAKE_NUM(DATADIR_BLAST5, 30) + }, + { + DATA_MAKE_NUM(DATADIR_BLAST5, 31), + DATA_MAKE_NUM(DATADIR_BLAST5, 32), + DATA_MAKE_NUM(DATADIR_BLAST5, 33), + DATA_MAKE_NUM(DATADIR_BLAST5, 34), + DATA_MAKE_NUM(DATADIR_BLAST5, 35), + DATA_MAKE_NUM(DATADIR_BLAST5, 36), + DATA_MAKE_NUM(DATADIR_BLAST5, 37), + DATA_MAKE_NUM(DATADIR_BLAST5, 38) + }, + { + DATA_MAKE_NUM(DATADIR_BLAST5, 39), + DATA_MAKE_NUM(DATADIR_BLAST5, 40), + DATA_MAKE_NUM(DATADIR_BLAST5, 41), + DATA_MAKE_NUM(DATADIR_BLAST5, 42), + DATA_MAKE_NUM(DATADIR_BLAST5, 43), + DATA_MAKE_NUM(DATADIR_BLAST5, 44), + DATA_MAKE_NUM(DATADIR_BLAST5, 45), + DATA_MAKE_NUM(DATADIR_BLAST5, 46) + }, + { + DATA_MAKE_NUM(DATADIR_BLAST5, 47), + DATA_MAKE_NUM(DATADIR_BLAST5, 48), + DATA_MAKE_NUM(DATADIR_BLAST5, 49), + DATA_MAKE_NUM(DATADIR_BLAST5, 50), + DATA_MAKE_NUM(DATADIR_BLAST5, 51), + DATA_MAKE_NUM(DATADIR_BLAST5, 52), + DATA_MAKE_NUM(DATADIR_BLAST5, 53), + DATA_MAKE_NUM(DATADIR_BLAST5, 54) + }, + { + DATA_MAKE_NUM(DATADIR_BLAST5, 55), + DATA_MAKE_NUM(DATADIR_BLAST5, 56), + DATA_MAKE_NUM(DATADIR_BLAST5, 57), + DATA_MAKE_NUM(DATADIR_BLAST5, 58), + DATA_MAKE_NUM(DATADIR_BLAST5, 59), + DATA_MAKE_NUM(DATADIR_BLAST5, 60), + DATA_MAKE_NUM(DATADIR_BLAST5, 61), + DATA_MAKE_NUM(DATADIR_BLAST5, 62) + }, + { + DATA_MAKE_NUM(DATADIR_BLAST5, 63), + DATA_MAKE_NUM(DATADIR_BLAST5, 64), + DATA_MAKE_NUM(DATADIR_BLAST5, 65), + DATA_MAKE_NUM(DATADIR_BLAST5, 66), + DATA_MAKE_NUM(DATADIR_BLAST5, 67), + DATA_MAKE_NUM(DATADIR_BLAST5, 68), + DATA_MAKE_NUM(DATADIR_BLAST5, 69), + DATA_MAKE_NUM(DATADIR_BLAST5, 70) + }, + { + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + }, + { + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + }, + { + -1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + }, +}; + +static s32 messBaseTbl[] = { + 0xE0000, + 0xE0018, + 0xE0030, + 0xE0048, + 0xE0060, + 0xE0078, + 0, + 0, + 0, +}; + +static float playerOfsTbl[][2] = { + { -94, 0 }, + { 0, 0 }, + { 94, 0 } +}; + +static char *plateObjNameTbl[] = { + "plate", + "plate1", + "plate2", + "plate3" +}; + +static char *hiliteObjNameTbl[] = { + "lite", + "lite1", + "lite2", + "lite3", + "kao", + "kao1", + "kao2", + "kao3", +}; + +static s32 resultRankFX12Tbl[] = { + 0x122, + 0x162, + 0x1A2, + 0x1E2, + 0x222, + 0x262, + 0x2A2, + 0x2E2 +}; + +static s32 resultRankFX3Tbl[] = { + 0x12A, + 0x16A, + 0x1AA, + 0x1EA, + 0x22A, + 0x26A, + 0x2AA, + 0x2EA +}; + +static s32 resultRankFX4Tbl[] = { + 0x12E, + 0x16E, + 0x1AE, + 0x1EE, + 0x22E, + 0x26E, + 0x2AE, + 0x2EE +}; + +static s32 impactFXTbl[] = { + 0x119, + 0x159, + 0x199, + 0x1D9, + 0x219, + 0x259, + 0x299, + 0x2D9 +}; + +static s32 lotteryWheelMdlTbl[] = { + DATA_MAKE_NUM(DATADIR_BLAST5, 13), + DATA_MAKE_NUM(DATADIR_BLAST5, 14), + DATA_MAKE_NUM(DATADIR_BLAST5, 15), + DATA_MAKE_NUM(DATADIR_BLAST5, 16), + DATA_MAKE_NUM(DATADIR_BLAST5, 17), + DATA_MAKE_NUM(DATADIR_BLAST5, 18), + DATA_MAKE_NUM(DATADIR_BLAST5, 19), + DATA_MAKE_NUM(DATADIR_BLAST5, 20), +}; + +static s16 lotterySprPrioTbl[] = { + 1520, + 1510, + 1500, + 1500, + 1500, + 1500, + 1500, + 1500, + 1500, + 1500, + 1500, + 1490, + 1490, + 1500, + 1500 +}; + +static s32 lotterySprTbl[] = { + DATA_MAKE_NUM(DATADIR_BOARD, 39), + DATA_MAKE_NUM(DATADIR_BOARD, 38), + DATA_MAKE_NUM(DATADIR_BOARD, 41), + DATA_MAKE_NUM(DATADIR_BOARD, 40), + DATA_MAKE_NUM(DATADIR_BOARD, 40), + DATA_MAKE_NUM(DATADIR_BOARD, 40), + DATA_MAKE_NUM(DATADIR_BOARD, 45), + DATA_MAKE_NUM(DATADIR_BOARD, 40), + DATA_MAKE_NUM(DATADIR_BOARD, 40), + DATA_MAKE_NUM(DATADIR_BOARD, 40), + DATA_MAKE_NUM(DATADIR_BOARD, 44), + DATA_MAKE_NUM(DATADIR_BOARD, 42), + DATA_MAKE_NUM(DATADIR_BOARD, 42), +}; + +static float lotterySprPosTbl[][2] = { + { 0, -35 }, + { 0, 0 }, + { -68, -38 }, + { 80, -22 }, + { 64, -22 }, + { 48, -22 }, + { 26, -22 }, + { 80, -48 }, + { 64, -48 }, + { 48, -48 }, + { 26, -48 }, + { -18, -40 }, + { -18, 32 }, + { -16, -72 }, + { -16, 0 } +}; + +static s32 teamCharSprTbl[] = { + DATA_MAKE_NUM(DATADIR_BOARD, 46), + DATA_MAKE_NUM(DATADIR_BOARD, 47), + DATA_MAKE_NUM(DATADIR_BOARD, 48), + DATA_MAKE_NUM(DATADIR_BOARD, 49), + DATA_MAKE_NUM(DATADIR_BOARD, 50), + DATA_MAKE_NUM(DATADIR_BOARD, 51), + DATA_MAKE_NUM(DATADIR_BOARD, 52), + DATA_MAKE_NUM(DATADIR_BOARD, 53), +}; + +static s8 currTicket; +static s8 numTickets; +static s8 last5Player; +static s16 last5Space; +static s16 hostMdl; +static omObjData *last5RouletteObj; +static Process *last5Proc; +static omObjData *teamResultObj; +static omObjData *hostMoveObj; +static omObjData *lotteryDrawObj; +static omObjData *lotteryDrawWheelObj; + +static Vec spacePos; +static Vec focusPos; +static Vec hostPos; +static s16 hostMot[8]; +static omObjData *lotteryTicketObj[4]; + +static void DestroyLast5(void); + +static void ExecLast5(void); +static void CreateLast5(void); +static void KillLast5(void); + +static void InitHost(void); +static void KillHost(void); + +static void Last5Main(void); + +static s32 CheckJump(s32 player); + +static void CreateBlock(Vec *pos); + +static void CreateLotteryDrawWheel(void); + +static void SetLotteryDrawState(s32 state); +static s32 GetLotteryDrawState(); + +static void KillLotteryDrawWheel(void); + +static void ExecLotteryDraw(void); + +static void InitLotteryTicket(void); +static void KillLotteryTicket(void); + +static void StartHostMove(Vec *from, Vec *to, s32 time); +static s32 CheckHostMove(void); + + +static void CreateStopWin(void); +static void CreateLast5Roulette(void); +static void SetLast5RouletteFade(s32 flag); +static void SetLast5RouletteState(s32 state); +static s32 GetLast5RouletteState(); +static s32 GetLast5RouletteResult(); + +static void CreateTeamResult(void); +static void GetTeamResultTaget(s32 team, Vec *pos); +static void SetTeamResultTaget(s32 team, Vec *pos); +static void KillTeamResult(void); + +void BoardLast5Exec() +{ + GWSystem.player_curr = -1; + last5Proc = HuPrcChildCreate(ExecLast5, 8200, 14336, 0, boardMainProc); + HuPrcDestructorSet2(last5Proc, DestroyLast5); + while(last5Proc != NULL) { + HuPrcVSleep(); + } + GWSystem.player_curr = 0; +} + +static void DestroyLast5(void) +{ + KillLast5(); + HuDataDirClose(DATADIR_BLAST5); + last5Proc = NULL; +} + +static void ExecLast5(void) +{ + s32 i; + messBase = messBaseTbl[GWBoardGet()]; + CreateLast5(); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); + while(WipeStatGet()) { + HuPrcVSleep(); + } + _ClearFlag(0x1001C); + BoardLast5GfxInit(); + BoardAudSeqFadeOut(0, 1000); + BoardMusStart(1, 8, 127, 0); + BoardWinCreate(2, messBase, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardWinKill(); + ExecLotteryDraw(); + Last5Main(); + BoardAudSeqFadeOut(1, 1000); + _SetFlag(0x1001C); + _SetFlag(0x1000E); + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); + while(WipeStatGet()) { + HuPrcVSleep(); + } + BoardModelMotionStart(hostMdl, 1, 0x40000001); + BoardCameraMoveSet(0); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + for(i=0; i<4; i++) { + BoardModelVisibilitySet(BoardPlayerModelGet(i), 1); + BoardPlayerCornerPosSet(i); + BoardPlayerRotYSet(i, 0.0f); + } + BoardStatusItemSet(0); + HuPrcSleep(60); + HuPrcEnd(); +} + +static void CreateLast5(void) +{ + Vec rot; + s32 i; + last5Space = BoardSpaceFlagPosGet(0, 0x80000000, &spacePos); + for(i=0; i<4; i++) { + BoardModelVisibilitySet(BoardPlayerModelGet(i), 0); + } + BoardStatusItemSet(0); + focusPos.x = 150.0f+spacePos.x; + focusPos.y = 100.0f+spacePos.y; + focusPos.z = -150.0f+spacePos.z; + focusMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 0); + BoardModelVisibilitySet(focusMdl, 0); + BoardModelPosSetV(focusMdl, &focusPos); + rot.x = -10.0f; + rot.y = 0.0f; + rot.z = 0.0f; + BoardCameraMoveSet(0); + BoardCameraMotionStartEx(focusMdl, &rot, NULL, 1480.0f, 25.0f, 1); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + InitHost(); + CreateLotteryDrawWheel(); + InitLotteryTicket(); +} + +static void KillLast5(void) +{ + if(stopWin != -1) { + HuWinKill(stopWin); + stopWin = -1; + } + BoardConfettiKill(); + KillHost(); + KillLotteryDrawWheel(); + KillLotteryTicket(); +} + +static void InitHost(void) +{ + Vec pos; + s32 i; + s32 board = GWBoardGet(); + hostMdl = BoardStarHostMdlGet(); + BoardModelPosGet(hostMdl, &hostPos); + for(i=0; i<8; i++) { + hostMot[i] = BoardModelMotionCreate(hostMdl, hostMotTbl[board][i]); + } + BoardModelMotionStart(hostMdl, 1, 0x40000001); + pos.x = 150.0f+spacePos.x; + pos.y = spacePos.y; + pos.z = (150.0f+spacePos.z)-50.0f; + BoardModelPosSetV(hostMdl, &pos); +} + +static void KillHost(void) +{ + s32 i; + for(i=0; i<8; i++) { + if(hostMot[i] != -1) { + BoardModelMotionKill(hostMdl, hostMot[i]); + hostMot[i] = -1; + } + } + BoardModelRotYSet(hostMdl, 0.0f); + BoardModelPosSetV(hostMdl, &hostPos); +} + +static void Last5Main(void) +{ + float temp_f31; + s32 temp_r31; + s32 temp_r30; + s32 temp_r29; + s32 temp_r27; + s32 temp_r26; + s32 temp_r25; + s32 temp_r24; + s32 temp_r23; + s32 temp_r22; + s32 temp_r21; + s32 temp_r20; + s32 temp_r19; + s32 temp_r18; + Vec sp6C[4]; + Vec sp60; + Vec sp54; + Vec sp48; + Vec sp3C; + float sp2C[4]; + s8 sp28[4]; + s8 sp24[4]; + s8 sp20[4]; + + + + temp_r18 = -1; + for(temp_r26=temp_r27=0; temp_r27<=3; temp_r27++) { + for(temp_r25=temp_r31=0; temp_r31<4; temp_r31++) { + if(GWPlayer[temp_r31].rank == temp_r27) { + sp28[temp_r26] = temp_r31; + sp24[temp_r26] = temp_r27; + temp_r26++; + if(temp_r27 > temp_r18) { + sp20[temp_r25] = temp_r31; + temp_r25++; + } + } + } + if(temp_r25 != 0) { + temp_r21 = temp_r25; + } + } + BoardWinCreate(2, messBase+10, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardModelMotionShiftSet(hostMdl, hostMot[5], 0.0f, 4.0f, 0); + HuPrcVSleep(8); + BoardModelMotionShiftSet(hostMdl, hostMot[6], 0.0f, 8.0f, 0x40000001); + for(temp_r31=0; temp_r31<4; temp_r31++) { + temp_r30 = sp28[temp_r31]; + temp_r27 = sp24[temp_r31]; + temp_r23 = GWPlayer[temp_r30].character; + sp6C[temp_r31].x = -122.0f; + sp6C[temp_r31].y = (temp_r31*74)+80; + sp6C[temp_r31].z = 0.0f; + BoardStatusPosSet(temp_r30, &sp6C[temp_r31]); + HuPrcVSleep(); + BoardStatusShowSet(temp_r30, 1); + sp2C[temp_r31] = (122.0f-sp6C[temp_r31].x)/15.0f; + for(temp_r29=0; temp_r29<15; temp_r29++) { + sp6C[temp_r31].x += sp2C[temp_r31]; + BoardStatusPosSet(temp_r30, &sp6C[temp_r31]); + HuPrcVSleep(); + } + switch(temp_r27) { + case 0: + case 1: + temp_r22 = resultRankFX12Tbl[temp_r23]; + break; + + case 2: + temp_r22 = resultRankFX3Tbl[temp_r23]; + break; + + case 3: + temp_r22 = resultRankFX4Tbl[temp_r23]; + break; + } + HuAudFXPlay(temp_r22); + temp_r24 = 11+messBase+temp_r27; + BoardWinCreate(2, temp_r24, BoardWinPortraitGetStar()); + BoardWinInsertMesSet(BoardPlayerGetCharMess(temp_r30), temp_r27); + BoardWinWait(); + } + if((s32)GWSystem.team != 0) { + CreateTeamResult(); + for(temp_r31=0; temp_r31<4; temp_r31++) { + sp2C[temp_r31] = (-122.0f-sp6C[temp_r31].x)/15.0f; + } + for(temp_r29=0; temp_r29<15; temp_r29++) { + for(temp_r31=0; temp_r31<4; temp_r31++) { + temp_r30 = sp28[temp_r31]; + sp6C[temp_r31].x += sp2C[temp_r31]; + BoardStatusPosSet(temp_r30, &sp6C[temp_r31]); + } + HuPrcVSleep(); + } + BoardStatusItemSet(0); + temp_r24 = 0xE0090+GWBoardGet(); + BoardWinCreate(2, temp_r24, BoardWinPortraitGetStar()); + BoardWinWait(); + for(temp_r31=0; temp_r31<2; temp_r31++) { + GetTeamResultTaget(temp_r31, &sp6C[temp_r31]); + sp2C[temp_r31] = (122.0f-sp6C[temp_r31].x)/15.0f; + for(temp_r29=0; temp_r29<15; temp_r29++) { + sp6C[temp_r31].x += sp2C[temp_r31]; + SetTeamResultTaget(temp_r31, &sp6C[temp_r31]); + HuPrcVSleep(); + } + } + } + BoardModelMotionStart(hostMdl, hostMot[5], 0x40000004); + HuPrcVSleep(8); + BoardModelMotionShiftSet(hostMdl, 1, 0.0f, 8.0f, 0x40000001); + BoardWinCreate(2, messBase+15, BoardWinPortraitGetStar()); + BoardWinWait(); + if((s32)GWSystem.team != 0) { + for(temp_r31=0; temp_r31<2; temp_r31++) { + sp2C[temp_r31] = (-122.0f-sp6C[temp_r31].x)/15.0f; + } + for(temp_r29=0; temp_r29<15; temp_r29++) { + for(temp_r31=0; temp_r31<2; temp_r31++) { + GetTeamResultTaget(temp_r31, &sp6C[temp_r31]); + sp6C[temp_r31].x += sp2C[temp_r31]; + SetTeamResultTaget(temp_r31, &sp6C[temp_r31]); + } + HuPrcVSleep(); + } + KillTeamResult(); + } else { + for(temp_r31=0; temp_r31<4; temp_r31++) { + sp2C[temp_r31] = (-122.0f-sp6C[temp_r31].x)/15.0f; + } + for(temp_r29=0; temp_r29<15; temp_r29++) { + for(temp_r31=0; temp_r31<4; temp_r31++) { + temp_r30 = sp28[temp_r31]; + sp6C[temp_r31].x += sp2C[temp_r31]; + BoardStatusPosSet(temp_r30, &sp6C[temp_r31]); + } + HuPrcVSleep(); + } + BoardStatusItemSet(0); + } + BoardModelPosGet(hostMdl, &sp60); + sp54.x = sp60.x+100.0f; + sp54.y = sp60.y; + sp54.z = sp60.z; + StartHostMove(&sp60, &sp54, 25); + while(!CheckHostMove()) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(hostMdl, 1, 0.0f, 8.0f, 0x40000001); + HuPrcSleep(8); + if((s32)GWSystem.team != 0) { + temp_r30 = last5Player; + } else { + if(temp_r21 == 1) { + temp_r30 = sp20[0]; + } else { + temp_r30 = sp20[BoardRandMod(temp_r21)]; + } + } + sp48.x = sp60.x-100.0f; + sp48.y = sp60.y; + sp48.z = sp60.z; + sp48.y += 700.0f; + BoardPlayerPosSetV(temp_r30, &sp48); + BoardPlayerMotionStart(temp_r30, 6, 0x40000001); + BoardPlayerVoiceEnableSet(temp_r30, 6, 0); + BoardPlayerRotYSet(temp_r30, 0); + BoardModelVisibilitySet(BoardPlayerModelGet(temp_r30), 1); + BoardWinCreate(2, messBase+16, BoardWinPortraitGetStar()); + BoardWinInsertMesSet(BoardPlayerGetCharMess(temp_r30), 3); + BoardWinWait(); + BoardModelMotionShiftSet(hostMdl, hostMot[5], 0.0f, 4.0f, 0); + HuPrcVSleep(8); + BoardModelMotionShiftSet(hostMdl, hostMot[6], 0.0f, 8.0f, 0x40000001); + temp_r19 = 0; + temp_r29 = 3; + for(temp_f31=0; temp_r29>0; temp_f31++) { + sp48.y += (float)(5.0+((9.8/120)*temp_f31*temp_f31)); + if(sp60.y > sp48.y) { + omVibrate(temp_r30, 12, 6, 6); + if(!temp_r19) { + HuAudFXPlay(impactFXTbl[GWPlayer[temp_r30].character]); + temp_r19 = 1; + } + sp48.y = sp60.y; + sp48.y += temp_r29*10; + temp_r29--; + temp_f31 = 0.0f; + } + BoardPlayerPosSetV(temp_r30, &sp48); + HuPrcVSleep(); + } + HuPrcSleep(20); + BoardPlayerIdleSet(temp_r30); + sp3C = sp48; + BoardModelMotionStart(hostMdl, hostMot[5], 0x40000004); + HuPrcVSleep(8); + BoardModelMotionShiftSet(hostMdl, 1, 0.0f, 8.0f, 0x40000001); + CreateLast5Roulette(); + SetLast5RouletteFade(1); + SetLast5RouletteState(2); + CreateStopWin(); + sp48.x = sp60.x-100.0f; + sp48.y = sp60.y; + sp48.z = sp60.z; + CreateBlock(&sp48); + SetLotteryDrawState(2); + while(GetLotteryDrawState() != 0) { + HuPrcVSleep(); + } + while(!CheckJump(temp_r30)) { + HuPrcVSleep(); + } + BoardPlayerDiceJumpStart(temp_r30); + while(!BoardPlayerDiceJumpCheck(temp_r30)) { + HuPrcVSleep(); + } + SetLotteryDrawState(1); + SetLast5RouletteState(3); + while(GWPlayer[temp_r30].field08_bit3) { + HuPrcVSleep(); + } + while(GetLast5RouletteState() != 0) { + HuPrcVSleep(); + } + HuWinDispOff(stopWin); + SetLotteryDrawState(3); + temp_r20 = GetLast5RouletteResult(); + GWSystem.last5_effect = temp_r20; + if(GWSystem.last5_effect == 2) { + BoardSpaceTypeForce(2, 3); + } + if(GWSystem.last5_effect == 3) { + BoardSpaceTypeForce(2, 7); + } + temp_r24 = 18+messBase+temp_r20; + BoardWinCreate(2, temp_r24, BoardWinPortraitGetStar()); + BoardWinWait(); + StartHostMove(&sp54, &sp60, 25); + BoardPlayerPosGet(temp_r30, &sp48); + sp48 = sp3C; + sp3C.x = sp48.x-300.0f; + sp3C.y = sp48.y; + sp3C.z = sp48.z; + BoardPlayerPosLerpStart(temp_r30, &sp48, &sp3C, 25); + while(GWPlayer[temp_r30].moving) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(temp_r30); + BoardModelVisibilitySet(BoardPlayerModelGet(temp_r30), 0); + SetLast5RouletteFade(0); + BoardModelMotionShiftSet(hostMdl, 1, 0.0f, 8.0f, 0x40000001); + BoardWinCreate(2, messBase+23, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardModelMotionShiftSet(hostMdl, hostMot[4], 0.0f, 8.0f, 0); + HuPrcSleep(8); + while(!BoardModelMotionEndCheck(hostMdl)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(hostMdl, hostMot[2], 0.0f, 8.0f, 0x40000001); + SetLotteryDrawState(4); +} + +static s32 CheckJump(s32 player) +{ + s32 sp8 = 0; + if(GWPlayer[player].com) { + if(BoardRandMod(100) >= 90) { + return 1; + } else { + goto return0; + } + } + if(HuPadBtnDown[GWPlayer[player].port] == PAD_BUTTON_A) { + return 1; + } else { + return0: + return 0; + } +} \ No newline at end of file From 5ab4952bc7382705b7b10d62c81cff7ce8641584 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 11 Mar 2024 17:11:48 -0500 Subject: [PATCH 061/106] Match board/last5.c --- config/GMPE01_00/symbols.txt | 13 +- configure.py | 2 +- src/game/board/last5.c | 1303 +++++++++++++++++++++++++++++++++- 3 files changed, 1283 insertions(+), 35 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 193d486e..d2efc523 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -1921,7 +1921,7 @@ KillHost = .text:0x800A9C68; // type:function size:0xA4 scope:local Last5Main = .text:0x800A9D0C; // type:function size:0xCC0 scope:local CheckJump = .text:0x800AA9CC; // type:function size:0xA4 scope:local CreateLotteryDrawWheel = .text:0x800AAA70; // type:function size:0x1FC scope:local -CreateBlock = .text:0x800AAC6C; // type:function size:0xD4 scope:local +CreateLotteryDraw = .text:0x800AAC6C; // type:function size:0xD4 scope:local UpdateLotteryDraw = .text:0x800AAD40; // type:function size:0x170 scope:local SetLotteryDrawState = .text:0x800AAEB0; // type:function size:0x88 scope:local GetLotteryDrawState = .text:0x800AAF38; // type:function size:0x20 scope:local @@ -1947,7 +1947,7 @@ SetLast5RouletteState = .text:0x800AD194; // type:function size:0x38 scope:local GetLast5RouletteState = .text:0x800AD1CC; // type:function size:0x38 scope:local GetLast5RouletteResult = .text:0x800AD204; // type:function size:0x44 scope:local CreateTeamResult = .text:0x800AD248; // type:function size:0x2B4 scope:local -CreateTeamResultSprite = .text:0x800AD4FC; // type:function size:0x340 scope:local +CreateTeamResultWork = .text:0x800AD4FC; // type:function size:0x340 scope:local SetTeamResultTarget = .text:0x800AD83C; // type:function size:0x58 scope:local GetTeamResultTarget = .text:0x800AD894; // type:function size:0x58 scope:local KillTeamResult = .text:0x800AD8EC; // type:function size:0x38 scope:local @@ -5322,15 +5322,16 @@ hostMotTbl = .data:0x8013B0D8; // type:object size:0x120 scope:local messBaseTbl = .data:0x8013B1F8; // type:object size:0x24 scope:local playerOfsTbl = .data:0x8013B21C; // type:object size:0x18 scope:local plateObjNameTbl = .data:0x8013B234; // type:object size:0x10 scope:local -hiliteObjNameTbl = .data:0x8013B244; // type:object size:0x20 scope:local +hiliteObjNameTbl = .data:0x8013B244; // type:object size:0x10 scope:local +faceObjNameTbl = .data:0x8013B254; // type:object size:0x10 scope:local resultRankFX12Tbl = .data:0x8013B264; // type:object size:0x20 scope:local resultRankFX3Tbl = .data:0x8013B284; // type:object size:0x20 scope:local resultRankFX4Tbl = .data:0x8013B2A4; // type:object size:0x20 scope:local impactFXTbl = .data:0x8013B2C4; // type:object size:0x20 scope:local lotteryWheelMdlTbl = .data:0x8013B2E4; // type:object size:0x20 scope:local -lotterySprPrioTbl = .data:0x8013B304; // type:object size:0x1E scope:local -lotterySprTbl = .data:0x8013B324; // type:object size:0x34 scope:local -lotterySprPosTbl = .data:0x8013B358; // type:object size:0x78 scope:local +teamSprPrioTbl = .data:0x8013B304; // type:object size:0x1E scope:local +teamSprTbl = .data:0x8013B324; // type:object size:0x34 scope:local +teamSprPosTbl = .data:0x8013B358; // type:object size:0x78 scope:local teamCharSprTbl = .data:0x8013B3D0; // type:object size:0x20 scope:local boxModelID = .data:0x8013B3F0; // type:object size:0x10 scope:local data:2byte boxPosTbl = .data:0x8013B400; // type:object size:0x40 scope:local data:float diff --git a/configure.py b/configure.py index 2296aa50..2f8e79c6 100644 --- a/configure.py +++ b/configure.py @@ -393,7 +393,7 @@ config.libs = [ Object(NonMatching, "game/board/mg_setup.c"), Object(NonMatching, "game/board/boo_house.c"), Object(NonMatching, "game/board/start.c"), - Object(NonMatching, "game/board/last5.c"), + Object(Matching, "game/board/last5.c"), Object(Matching, "game/board/pause.c"), Object(Matching, "game/board/com_path.c"), Object(Matching, "game/board/tutorial.c"), diff --git a/src/game/board/last5.c b/src/game/board/last5.c index f1141878..ccf070e6 100644 --- a/src/game/board/last5.c +++ b/src/game/board/last5.c @@ -141,11 +141,14 @@ static char *hiliteObjNameTbl[] = { "lite", "lite1", "lite2", - "lite3", + "lite3" +}; + +static char *faceObjNameTbl[] = { "kao", "kao1", "kao2", - "kao3", + "kao3" }; static s32 resultRankFX12Tbl[] = { @@ -203,7 +206,7 @@ static s32 lotteryWheelMdlTbl[] = { DATA_MAKE_NUM(DATADIR_BLAST5, 20), }; -static s16 lotterySprPrioTbl[] = { +static s16 teamSprPrioTbl[] = { 1520, 1510, 1500, @@ -221,7 +224,7 @@ static s16 lotterySprPrioTbl[] = { 1500 }; -static s32 lotterySprTbl[] = { +static s32 teamSprTbl[] = { DATA_MAKE_NUM(DATADIR_BOARD, 39), DATA_MAKE_NUM(DATADIR_BOARD, 38), DATA_MAKE_NUM(DATADIR_BOARD, 41), @@ -237,7 +240,7 @@ static s32 lotterySprTbl[] = { DATA_MAKE_NUM(DATADIR_BOARD, 42), }; -static float lotterySprPosTbl[][2] = { +static float teamSprPosTbl[][2] = { { 0, -35 }, { 0, 0 }, { -68, -38 }, @@ -297,35 +300,43 @@ static void Last5Main(void); static s32 CheckJump(s32 player); -static void CreateBlock(Vec *pos); - static void CreateLotteryDrawWheel(void); - +static void CreateLotteryDraw(Vec *pos); +static void UpdateLotteryDraw(omObjData *object); static void SetLotteryDrawState(s32 state); static s32 GetLotteryDrawState(); - static void KillLotteryDrawWheel(void); - +static void UpdateLotteryDrawWheel(omObjData *object); +static void SetLotteryDrawWheelState(s32 state); static void ExecLotteryDraw(void); -static void InitLotteryTicket(void); static void KillLotteryTicket(void); +static void InitLotteryTicket(void); +static void UpdateLotteryTicket(omObjData *object); +static void SetLotteryTicketState(s32 player, s32 state); +static s32 GetLotteryTicketPlayer(void); +static s32 CheckLotteryTicket(void); +static void UpdateLotteryTicketMatch(s32 progress, s32 character); -static void StartHostMove(Vec *from, Vec *to, s32 time); +static void StartHostMove(Vec *from, Vec *to, s16 time); +static void ExecHostMove(omObjData *object); static s32 CheckHostMove(void); - static void CreateStopWin(void); + static void CreateLast5Roulette(void); +static void UpdateLast5Roulette(omObjData *object); + static void SetLast5RouletteFade(s32 flag); static void SetLast5RouletteState(s32 state); -static s32 GetLast5RouletteState(); -static s32 GetLast5RouletteResult(); +static s32 GetLast5RouletteState(void); +static s32 GetLast5RouletteResult(void); static void CreateTeamResult(void); -static void GetTeamResultTaget(s32 team, Vec *pos); -static void SetTeamResultTaget(s32 team, Vec *pos); +static void GetTeamResultTarget(s32 team, Vec *pos); +static void SetTeamResultTarget(s32 team, Vec *pos); static void KillTeamResult(void); +static void UpdateTeamResult(omObjData *object); void BoardLast5Exec() { @@ -559,11 +570,11 @@ static void Last5Main(void) BoardWinCreate(2, temp_r24, BoardWinPortraitGetStar()); BoardWinWait(); for(temp_r31=0; temp_r31<2; temp_r31++) { - GetTeamResultTaget(temp_r31, &sp6C[temp_r31]); + GetTeamResultTarget(temp_r31, &sp6C[temp_r31]); sp2C[temp_r31] = (122.0f-sp6C[temp_r31].x)/15.0f; for(temp_r29=0; temp_r29<15; temp_r29++) { sp6C[temp_r31].x += sp2C[temp_r31]; - SetTeamResultTaget(temp_r31, &sp6C[temp_r31]); + SetTeamResultTarget(temp_r31, &sp6C[temp_r31]); HuPrcVSleep(); } } @@ -579,9 +590,9 @@ static void Last5Main(void) } for(temp_r29=0; temp_r29<15; temp_r29++) { for(temp_r31=0; temp_r31<2; temp_r31++) { - GetTeamResultTaget(temp_r31, &sp6C[temp_r31]); + GetTeamResultTarget(temp_r31, &sp6C[temp_r31]); sp6C[temp_r31].x += sp2C[temp_r31]; - SetTeamResultTaget(temp_r31, &sp6C[temp_r31]); + SetTeamResultTarget(temp_r31, &sp6C[temp_r31]); } HuPrcVSleep(); } @@ -637,7 +648,7 @@ static void Last5Main(void) temp_r19 = 0; temp_r29 = 3; for(temp_f31=0; temp_r29>0; temp_f31++) { - sp48.y += (float)(5.0+((9.8/120)*temp_f31*temp_f31)); + sp48.y += (float)(5.0+((-9.8/120)*temp_f31*temp_f31)); if(sp60.y > sp48.y) { omVibrate(temp_r30, 12, 6, 6); if(!temp_r19) { @@ -665,7 +676,7 @@ static void Last5Main(void) sp48.x = sp60.x-100.0f; sp48.y = sp60.y; sp48.z = sp60.z; - CreateBlock(&sp48); + CreateLotteryDraw(&sp48); SetLotteryDrawState(2); while(GetLotteryDrawState() != 0) { HuPrcVSleep(); @@ -729,14 +740,1250 @@ static s32 CheckJump(s32 player) if(GWPlayer[player].com) { if(BoardRandMod(100) >= 90) { return 1; + } + } else if(HuPadBtnDown[GWPlayer[player].port] == PAD_BUTTON_A) { + return 1; + } + return 0; +} + +typedef struct draw_wheel_mdl { + s16 plate[4]; + s16 face[4]; + s16 center; +} DrawWheelMdl; + +typedef struct draw_wheel_work { + struct { + u8 kill : 1; + }; + s8 state; + s8 hilite; + u16 timer; + u8 hilite_vel; + u8 hilite_accel; + DrawWheelMdl *mdl; +} DrawWheelWork; + +typedef struct lottery_draw_work { + struct { + u8 kill : 1; + }; + u8 state; + s16 block_mdl; + float min_y; +} LotteryDrawWork; + +static void CreateLotteryDrawWheel(void) +{ + omObjData *object; + DrawWheelWork *work; + DrawWheelMdl *mdl; + s32 i; + object = omAddObjEx(boardObjMan, 257, 0, 0, -1, UpdateLotteryDrawWheel); + lotteryDrawWheelObj = object; + work = OM_GET_WORK_PTR(object, DrawWheelWork); + work->kill = 0; + work->state = 0; + work->mdl = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(DrawWheelMdl), MEMORY_DEFAULT_NUM); + work->hilite = 0; + work->hilite_vel = 2; + work->hilite_accel = 5; + mdl = work->mdl; + object->trans.x = spacePos.x + -300.0f; + object->trans.y = spacePos.y; + object->trans.z = spacePos.z + -50.0f; + wheelMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BLAST5, 12), NULL, 0); + BoardModelPosSet(wheelMdl, object->trans.x, object->trans.y, object->trans.z); + mdl->center = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BLAST5, 22), NULL, 0); + BoardModelVisibilitySet(mdl->center, 0); + for(i=0; i<4; i++) { + s32 character = GWPlayer[i].character; + mdl->face[i] = BoardModelCreate(lotteryWheelMdlTbl[character], NULL, 0); + BoardModelPosSet(mdl->face[i], 0, 0, -10); + mdl->plate[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BLAST5, 21), NULL, 1); + BoardModelHookSet(wheelMdl, faceObjNameTbl[i], mdl->face[i]); + BoardModelHookSet(wheelMdl, plateObjNameTbl[i], mdl->plate[i]); + } +} + +static void CreateLotteryDraw(Vec *pos) +{ + omObjData *object; + LotteryDrawWork *work; + object = omAddObjEx(boardObjMan, 257, 0, 0, -1, UpdateLotteryDraw); + lotteryDrawObj = object; + work = OM_GET_WORK_PTR(object, LotteryDrawWork); + work->kill = 0; + work->state = 0; + work->block_mdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BLAST5, 11), NULL, 0); + work->min_y = pos->y+300.0f; + pos->y += 700.0f; + BoardModelPosSetV(work->block_mdl, pos); + object->trans.x = 1.0f; + BoardModelAlphaSet(work->block_mdl, 255); +} + +static void UpdateLotteryDraw(omObjData *object) +{ + LotteryDrawWork *work = OM_GET_WORK_PTR(object, LotteryDrawWork); + Vec pos; + if(work->kill || BoardIsKill()) { + BoardModelKill(work->block_mdl); + lotteryDrawObj = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + switch(work->state) { + case 1: + BoardModelPosGet(work->block_mdl, &pos); + pos.y += 50.0f; + BoardModelPosSetV(work->block_mdl, &pos); + SetLotteryDrawState(2); + break; + + case 2: + BoardModelPosGet(work->block_mdl, &pos); + if(pos.y < work->min_y) { + pos.y = work->min_y; + SetLotteryDrawState(0); + } + pos.y -= 20.0f; + BoardModelPosSetV(work->block_mdl, &pos); + break; + + case 3: + object->trans.x -= 0.1f; + if(object->trans.x < 0.0f) { + object->trans.x = 0; + SetLotteryDrawState(0); + } + BoardModelAlphaSet(work->block_mdl, 255.0f*object->trans.x); + break; + + case 0: + break; + + default: + break; + } +} + +static void SetLotteryDrawState(s32 state) +{ + LotteryDrawWork *work; + if(!lotteryDrawObj) { + return; + } + work = OM_GET_WORK_PTR(lotteryDrawObj, LotteryDrawWork); + work->state = state; + if(state == 4) { + work->kill = 1; + } + if(state == 3) { + lotteryDrawObj->trans.x = 1.0f; + } + if(state == 1) { + HuAudFXPlay(780); + } +} + +static s32 GetLotteryDrawState(void) +{ + LotteryDrawWork *work = OM_GET_WORK_PTR(lotteryDrawObj, LotteryDrawWork); + return work->state; +} + +static void KillLotteryDrawWheel(void) +{ + SetLotteryDrawWheelState(5); +} + +static void UpdateLotteryDrawWheel(omObjData *object) +{ + DrawWheelWork *work = OM_GET_WORK_PTR(object, DrawWheelWork); + DrawWheelMdl *mdl = work->mdl; + s32 i; + if(work->kill || BoardIsKill()) { + BoardModelHookReset(wheelMdl); + for(i=0; i<4; i++) { + if(mdl->face[i] != -1) { + BoardModelKill(mdl->face[i]); + } + if(mdl->plate[i] != -1) { + BoardModelKill(mdl->plate[i]); + } + } + if(wheelMdl != -1) { + BoardModelKill(wheelMdl); + wheelMdl = -1; + } + if(lbl_801D3854 != -1) { + BoardModelKill(lbl_801D3854); + lbl_801D3854 = -1; + } + if(mdl->center != -1) { + BoardModelKill(mdl->center); + } + HuMemDirectFree(work->mdl); + lotteryDrawWheelObj = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + switch(work->state) { + case 4: + if(work->timer == 0) { + work->hilite_vel += work->hilite_accel; + work->hilite_accel++; + if(work->hilite_vel > 60 || (work->hilite_vel > 40 && BoardRandMod(100) > 80)) { + BoardModelMotionStart(mdl->center, 0, 0x40000001); + HuAudFXPlay(870); + SetLotteryDrawWheelState(0); + break; + } + } + + case 3: + if(work->timer < work->hilite_vel) { + work->timer++; + } else { + BoardModelHookObjReset(wheelMdl, hiliteObjNameTbl[work->hilite]); + work->hilite = (work->hilite+1) & 0x3; + HuAudFXPlay(855); + BoardModelHookSet(wheelMdl, hiliteObjNameTbl[work->hilite], mdl->center); + work->timer = 0; + } + break; + + case 1: + case 2: + if(work->timer != 0) { + object->trans.x += object->rot.x; + object->trans.z += object->rot.z; + work->timer--; + } else { + BoardModelMotionSpeedSet(wheelMdl, 0); + work->state = 0; + } + break; + + case 0: + break; + + default: + break; + } + BoardModelPosSet(wheelMdl, object->trans.x, object->trans.y, object->trans.z); +} + +static void SetLotteryDrawWheelState(s32 state) +{ + DrawWheelWork *work; + DrawWheelMdl *mdl; + Vec pos_wheel, pos_space, dist; + if(!lotteryDrawWheelObj) { + return; + } + work = OM_GET_WORK_PTR(lotteryDrawWheelObj, DrawWheelWork); + + work->state = state; + mdl = work->mdl; + switch(state) { + case 5: + work->kill = 1; + break; + + case 3: + work->timer = 0; + work->hilite = 0; + work->hilite_vel = 2; + BoardModelVisibilitySet(mdl->center, 1); + BoardModelMotionStart(mdl->center, 0, 0); + BoardModelMotionSpeedSet(mdl->center, 0.0f); + BoardModelMotionTimeSet(mdl->center, 3.0f); + BoardModelHookSet(wheelMdl, hiliteObjNameTbl[work->hilite], mdl->center); + break; + + default: + if(state == 2 || state == 1) { + BoardModelPosGet(wheelMdl, &pos_wheel); + if(state == 2) { + pos_space = spacePos; + } else { + pos_space.x = -300.0f+pos_wheel.x; + pos_space.y = pos_wheel.y; + pos_space.z = -50.0f+pos_wheel.z; + } + VECSubtract(&pos_space, &pos_wheel, &dist); + lotteryDrawWheelObj->rot.x = dist.x/26.0f; + lotteryDrawWheelObj->rot.z = dist.z/26.0f; + BoardModelMotionStart(wheelMdl, 0, 0x40000001); + BoardModelMotionSpeedSet(wheelMdl, 3.0f); + work->timer = 26; + } + break; + } +} + +static s32 GetLotteryDrawWheelState() +{ + DrawWheelWork *work; + if(!lotteryDrawWheelObj) { + return -1; + } + work = OM_GET_WORK_PTR(lotteryDrawWheelObj, DrawWheelWork); + return work->state; +} + +static s32 GetLotteryDrawWheelResult() +{ + DrawWheelWork *work; + if(!lotteryDrawWheelObj) { + return -1; + } + work = OM_GET_WORK_PTR(lotteryDrawWheelObj, DrawWheelWork); + return GWPlayer[work->hilite].character; +} + +static void ExecLotteryDraw(void) +{ + s32 ticket; + s32 valid; + s32 character; + s32 stream; + s32 player; + Vec rot; + Vec offset; + Vec confetti_pos; + Vec pos; + Vec star_pos; + Vec host_end; + Vec host_start; + Vec player_end; + Vec player_start; + + if(GWPlayer[0].field00_bit9 || GWPlayer[1].field00_bit9 || GWPlayer[2].field00_bit9 || GWPlayer[3].field00_bit9) { + BoardWinCreate(2, messBase+1, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardModelPosGet(hostMdl, &host_end); + 250.0f+host_end.y; + CreateLotteryDraw(&host_end); + SetLotteryDrawState(2); + SetLotteryDrawWheelState(2); + for(ticket=0; ticket<4; ticket++) { + SetLotteryTicketState(ticket, 3); + } + HuPrcSleep(15); + while(GetLotteryDrawWheelState() != 0) { + HuPrcVSleep(); + } + offset.x = 50.0f; + offset.z = 0.0f; + offset.y = 100.0f; + valid = 0; + for(currTicket=ticket=0; ticket<3; ticket++, currTicket++) { + BoardCameraBackup(); + SetLotteryDrawWheelState(3); + BoardWinCreate(2, 2+messBase+ticket, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardModelMotionShiftSet(hostMdl, hostMot[7], 0, 8, 0); + HuPrcSleep(8); + while(BoardModelMotionTimeGet(hostMdl) < 26.0f) { + HuPrcVSleep(); + } + SetLotteryDrawState(1); + HuPrcSleep(BoardRandMod(20)); + SetLotteryDrawWheelState(4); + BoardCameraMotionStartEx(wheelMdl, NULL, &offset, 700, -1, 21); + while(!BoardModelMotionEndCheck(hostMdl)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(hostMdl, 1, 0, 8, 0x40000001); + while(GetLotteryDrawWheelState() != 0) { + HuPrcVSleep(); + } + character = GetLotteryDrawWheelResult(); + UpdateLotteryTicketMatch(ticket, character); + HuPrcSleep(120); + if(CheckLotteryTicket()) { + valid = 1; + break; + } + if(ticket == 2) { + player = GetLotteryTicketPlayer(); + BoardModelPosGet(hostMdl, &confetti_pos); + confetti_pos.y += 400.0f; + BoardConfettiCreate(&confetti_pos, 100, 200.0f); + break; + } + BoardCameraRestore(); + BoardCameraMotionWait(); + } + rot.x = -10.0f; + rot.y = 0.0f; + rot.z = 0.0f; + BoardCameraMotionStartEx(focusMdl, &rot, NULL, 1480.0f, 25.0f, 20); + if(valid) { + BoardWinCreate(2, 9+messBase, BoardWinPortraitGetStar()); + BoardWinWait(); + SetLotteryDrawState(3); + SetLotteryDrawWheelState(1); + for(ticket=0; ticket<4; ticket++) { + SetLotteryTicketState(ticket, 4); + } } else { - goto return0; + BoardAudSeqPause(1, 1, 1000); + BoardModelMotionShiftSet(hostMdl, hostMot[3], 0, 8, 0x40000001); + stream = HuAudSStreamPlay(10); + while(HuAudSStreamStatGet(stream)) { + HuPrcVSleep(); + } + BoardAudSeqPause(1, 0, 1000); + BoardWinCreate(2, 5+messBase, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardCameraRestore(); + BoardCameraMotionWait(); + SetLotteryDrawState(3); + SetLotteryDrawWheelState(1); + for(ticket=0; ticket<4; ticket++) { + SetLotteryTicketState(ticket, 4); + } + player_end.x = spacePos.x + -300.0f; + player_end.y = spacePos.y; + player_end.z = spacePos.z + -50.0f; + BoardPlayerPosSetV(player, &player_end); + BoardModelVisibilitySet(BoardPlayerModelGet(player), 1); + BoardModelPosGet(hostMdl, &host_end); + player_start = host_end; + host_start.x = host_end.x+200.0f; + host_start.y = host_end.y; + host_start.z = host_end.z; + StartHostMove(&host_end, &host_start, 25); + BoardPlayerPosLerpStart(player, &player_end, &player_start, 25); + while(GWPlayer[player].moving) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(player); + BoardModelMotionShiftSet(hostMdl, hostMot[0], 0, 8, 0x40000001); + while(!CheckHostMove()) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(hostMdl, 1, 0, 8, 0x40000001); + BoardStatusShowSetForce(player); + BoardStatusShowSet(player, 1); + BoardPlayerMotBlendSet(player, 0, 7); + while(!BoardPlayerMotBlendCheck(player)) { + HuPrcVSleep(); + } + BoardWinCreate(2, 6+messBase, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardAudSeqPause(1, 1, 1000); + BoardModelMotionShiftSet(hostMdl, hostMot[1], 0, 8, 0); + star_pos.x = host_start.x; + star_pos.y = 60.0f+host_start.y; + star_pos.z = host_start.z; + HuPrcSleep(30); + BoardStarGive(player, &star_pos); + BoardAudSeqPause(1, 0, 1000); + BoardStatusShowSet(player, 0); + StartHostMove(&host_start, &host_end, 25); + BoardPlayerPosLerpStart(player, &player_start, &player_end, 25); + BoardModelMotionShiftSet(hostMdl, hostMot[0], 0, 8, 0x40000001); + while(!CheckHostMove()) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(hostMdl, 1, 0, 8, 0x40000001); + while(GWPlayer[player].moving) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(player); + BoardModelVisibilitySet(BoardPlayerModelGet(player), 0); + BoardConfettiStop(); + BoardModelVisibilitySet(wheelMdl, 0); + } + SetLotteryDrawState(4); + BoardWinCreate(2, 7+messBase, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardWinKill(); + } +} + +static void KillLotteryTicket(void) +{ + s32 i; + for(i=0; ikill = 0; + work->player = i; + work->index = numTickets; + work->angle = 0; + work->unk02 = 0; + work->done = 0; + work->group = HuSprGrpCreate(6); + object->trans.x = 680.0f; + object->trans.y = 64.0f+(82.0f*numTickets); + object->rot.x = 0.0f; + object->rot.y = 0.0f; + HuSprGrpPosSet(work->group, object->trans.x, object->trans.y); + HuSprGrpScaleSet(work->group, 0.4f, 0.4f); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BLAST5, 9), 2000, NULL, &sprite); + HuSprGrpMemberSet(work->group, 0, sprite); + HuSprAttrSet(work->group, 0, HUSPR_ATTR_LINEAR); + HuSprScaleSet(work->group, 0, 2.5f, 2.5f); + character = GWPlayer[i].character; + BoardSpriteCreate(ownerSprTbl[character], 1200, NULL, &sprite); + HuSprGrpMemberSet(work->group, 5, sprite); + HuSprAttrSet(work->group, 5, HUSPR_ATTR_LINEAR); + HuSprScaleSet(work->group, 5, 2.5f, 2.5f); + HuSprPosSet(work->group, 5, -200, -32); + HuSprScaleSet(work->group, 5, 1.75f, 1.75f); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BLAST5, 8), 1200, NULL, &sprite); + HuSprGrpMemberSet(work->group, 4, sprite); + HuSprAttrSet(work->group, 4, HUSPR_ATTR_LINEAR); + HuSprAttrSet(work->group, 4, HUSPR_ATTR_DISPOFF); + HuSprAttrSet(work->group, 4, HUSPR_ATTR_ADDCOL); + HuSprScaleSet(work->group, 4, 1.3f, 1.3f); + ticket_mask = GWPlayer[i].field00_bitA; + j=3; + while(j>=0) { + s32 player_spr; + + j--; + work->character[j] = GWPlayer[ticket_mask & 0x3].character; + player_spr = playerSprTbl[work->character[j]]; + member = j+1; + BoardSpriteCreate(player_spr, 1500, NULL, &sprite); + HuSprGrpMemberSet(work->group, member, sprite); + HuSprAttrSet(work->group, member, HUSPR_ATTR_LINEAR); + HuSprPosSet(work->group, member, playerOfsTbl[j][0], playerOfsTbl[j][1]); + ticket_mask >>= 2; + } + numTickets++; + } +} + +static void UpdateLotteryTicket(omObjData *object) +{ + TicketWork *work = OM_GET_WORK_PTR(object, TicketWork); + if(work->kill || BoardIsKill()) { + HuSprGrpKill(work->group); + omDelObjEx(HuPrcCurrentGet(), object); + lotteryTicketObj[work->index] = NULL; + return; + } + switch(work->state) { + case 2: + if(work->angle < 540) { + float scale = 0.4f+(0.1f*sin(M_PI*(float)(work->angle%180)/180.0)); + HuSprGrpScaleSet(work->group, scale, scale); + work->angle += 9; + } else { + work->angle = 0; + work->state = 0; + HuSprGrpScaleSet(work->group, 0.4f, 0.4f); + } + break; + + case 1: + if(work->angle > 96) { + u16 color = work->angle; + HuSprColorSet(work->group, 0, color, color, color); + HuSprColorSet(work->group, 1, color, color, color); + HuSprColorSet(work->group, 2, color, color, color); + HuSprColorSet(work->group, 3, color, color, color); + HuSprColorSet(work->group, 5, color, color, color); + work->angle -= 3; + } else { + work->angle = 0; + work->state = 0; + } + break; + + case 3: + case 4: + if(work->angle != 0) { + object->trans.x += object->rot.x; + + HuSprGrpPosSet(work->group, object->trans.x, object->trans.y); + work->angle--; + } else { + if(work->state == 4) { + BoardModelVisibilitySet(wheelMdl, 0); + } + SetLotteryTicketState(work->player, 0); + } + break; + + case 0: + break; + + default: + break; + + + } +} + +static void SetLotteryTicketState(s32 player, s32 state) +{ + TicketWork *work; + omObjData *object; + s32 i; + for(i=0; iplayer == player) { + work->state = state; + work->angle = 0; + switch(state) { + case 2: + HuSprAttrReset(work->group, 4, HUSPR_ATTR_DISPOFF); + HuSprPosSet(work->group, 4, playerOfsTbl[currTicket][0], playerOfsTbl[currTicket][1]); + break; + + case 1: + work->angle = 255; + work->done = 1; + HuSprAttrSet(work->group, 4, HUSPR_ATTR_DISPOFF); + break; + + case 3: + object->rot.x = 472.0f-object->trans.x; + object->rot.x /= 15.0f; + work->angle = 15; + break; + + case 4: + object->rot.x = 680.0f-object->trans.x; + object->rot.x /= 15.0f; + work->angle = 15; + break; + + case 5: + work->kill = 1; + + default: + break; + } + return; + } + + } +} + +static s32 GetLotteryTicketPlayer(void) +{ + s32 i; + for(i=0; idone) { + return work->player; } } - if(HuPadBtnDown[GWPlayer[player].port] == PAD_BUTTON_A) { - return 1; - } else { - return0: + return -1; +} + +static s32 CheckLotteryTicket(void) +{ + TicketWork *work; + omObjData *object; + + s32 i; + for(i=0; idone) { + return 0; + } + } + return 1; +} + +static void UpdateLotteryTicketMatch(s32 progress, s32 character) +{ + s32 i; + TicketWork *work; + omObjData *object; + s32 match_state; + + for(i=0; idone) { + if(work->character[progress] == character) { + match_state = 2; + } else { + match_state = 1; + } + SetLotteryTicketState(work->player, match_state); + } + } +} + +typedef struct host_move_work { + struct { + u8 kill : 1; + u8 finish : 1; + }; + u8 state; + s16 time; + s16 angle; + s16 angle_end; +} HostMoveWork; + +static void StartHostMove(Vec *from, Vec *to, s16 time) +{ + HostMoveWork *work; + omObjData *object; + float duration; + float angle; + if(time <= 0) { + time = 1; + } + object = omAddObjEx(boardObjMan, 257, 0, 0, -1, ExecHostMove); + hostMoveObj = object; + work = OM_GET_WORK_PTR(object, HostMoveWork); + work->kill = 0; + work->finish = 0; + work->time = time; + work->state = 0; + OSs16tof32(&time, &duration); + omSetTra(object, from->x, from->y, from->z); + omSetRot(object, (to->x-from->x)/duration, 0.0f, (to->z-from->z)/duration); + omSetSca(object, to->x, to->y, to->z); + angle = 180.0*(atan2(object->rot.x, object->rot.z)/M_PI); + work->angle = 0; + OSf32tos16(&angle, &work->angle_end); + BoardModelMotionShiftSet(hostMdl, hostMot[0], 0, 8, 0x40000001); + BoardModelMotionSpeedSet(hostMdl, 3.0f); +} + +static void ExecHostMove(omObjData *object) +{ + HostMoveWork *work = OM_GET_WORK_PTR(object, HostMoveWork); + float angle; + float angle_end; + if(work->kill || BoardIsKill()) { + hostMoveObj = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + OSs16tof32(&work->angle, &angle); + OSs16tof32(&work->angle_end, &angle_end); + switch(work->state) { + case 0: + if(BoardDAngleCalcRange(&angle, angle_end, 10.0f)) { + if(work->finish) { + work->kill = 1; + } else { + work->state = 1; + } + BoardModelMotionSpeedSet(hostMdl, 1.0f); + } + OSf32tos16(&angle, &work->angle); + BoardModelRotYSet(hostMdl, angle); + break; + + case 1: + if(work->time) { + work->time--; + object->trans.x += object->rot.x; + object->trans.y += object->rot.y; + object->trans.z += object->rot.z; + } else { + object->trans.x = object->scale.x; + object->trans.y = object->scale.y; + object->trans.z = object->scale.z; + work->angle_end = 0; + work->finish = 1; + work->state = 0; + BoardModelMotionSpeedSet(hostMdl, 3.0f); + } + break; + + default: + break; + } + BoardModelPosSet(hostMdl, object->trans.x, object->trans.y, object->trans.z); +} + +static s32 CheckHostMove(void) +{ + if(hostMoveObj) { return 0; + } else { + return 1; + } +} + +static void CreateStopWin(void) +{ + s32 mess = 0x120011; + float size[2]; + float pos_x, pos_y; + HuWinMesMaxSizeGet(1, size, mess); + pos_x = -10000; + pos_y = 352; + stopWin = HuWinCreate(pos_x, pos_y, size[0], size[1], 0); + HuWinBGTPLvlSet(stopWin, 0.0f); + HuWinMesSpeedSet(stopWin, 0); + HuWinMesSet(stopWin, mess); +} + +typedef struct last5_roulette_work { + struct { + u8 kill : 1; + u8 state : 3; + }; + s8 choice; + s8 fade_speed; + s8 choices[4]; + s16 alpha; + u16 switch_timer; + u8 switch_vel; + u8 switch_accel; + s16 model; +} Last5RouletteWork; + +static void CreateLast5Roulette(void) +{ + Last5RouletteWork *work; + omObjData *object; + s32 choice1, choice2; + Vec pos; + object = omAddObjEx(boardObjMan, 257, 0, 0, -1, UpdateLast5Roulette); + last5RouletteObj = object; + work = OM_GET_WORK_PTR(object, Last5RouletteWork); + work->kill = 0; + work->choice = 0; + work->switch_timer = 0; + work->switch_vel = 4; + work->state = 2; + work->alpha = 0; + work->fade_speed = 0; + work->switch_accel = 5; + choice1 = BoardRandMod(3)+2; + do { + choice2 = BoardRandMod(3)+2; + } while(choice1 == choice2); + work->choices[0] = 1; + work->choices[1] = 1; + work->choices[2] = choice1; + work->choices[3] = choice2; + work->model = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BLAST5, 10), NULL, 0); + pos.x = 150.0f+spacePos.x; + pos.y = 177.0f+spacePos.y; + pos.z = -135.0f+spacePos.z; + BoardModelPosSetV(work->model, &pos); + BoardModelMotionStart(work->model, 0, 0); + BoardModelMotionSpeedSet(work->model, 0); +} + +static void UpdateLast5Roulette(omObjData *object) +{ + Last5RouletteWork *work = OM_GET_WORK_PTR(object, Last5RouletteWork); + if(work->kill || BoardIsKill()) { + BoardModelHookReset(wheelMdl); + if(work->model != -1) { + BoardModelKill(work->model); + } + last5RouletteObj = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + + switch(work->state) { + case 3: + if(work->switch_timer == 0) { + work->switch_vel += work->switch_accel; + work->switch_accel++; + if(work->switch_vel > 60 || (work->switch_vel > 40 && BoardRandMod(100) > 80)) { + if((GWBoardGet() == 0 || GWBoardGet() == 2) && work->choices[work->choice] == 2) { + work->switch_timer++; + return; + } else { + HuAudFXPlay(870); + SetLast5RouletteState(0); + break; + } + } + } + + case 2: + if(work->switch_timer < work->switch_vel) { + work->switch_timer++; + } else { + s32 choice = work->choices[work->choice]; + float time; + do { + work->choice = BoardRandMod(4); + } while(work->choices[work->choice] == choice); + OSs8tof32(&work->choices[work->choice], &time); + HuAudFXPlay(855); + BoardModelMotionTimeSet(work->model, 0.1f+time); + work->switch_timer = 0; + } + break; + + case 0: + break; + + default: + break; + } + if(work->fade_speed) { + work->alpha += work->fade_speed; + if(work->alpha >= 255) { + work->alpha = 255; + work->fade_speed = 0; + } + if(work->alpha < 0) { + work->alpha = 0; + work->fade_speed = 0; + } + BoardModelAlphaSet(work->model, work->alpha); + } +} + +static void SetLast5RouletteFade(s32 flag) +{ + Last5RouletteWork *work; + if(!last5RouletteObj) { + return; + } + work = OM_GET_WORK_PTR(last5RouletteObj, Last5RouletteWork); + if(flag) { + work->fade_speed = 4; + } else { + work->fade_speed = -4; + } +} + +static void SetLast5RouletteState(s32 state) +{ + Last5RouletteWork *work; + if(!last5RouletteObj) { + return; + } + work = OM_GET_WORK_PTR(last5RouletteObj, Last5RouletteWork); + work->state = state; +} + +static s32 GetLast5RouletteState(void) +{ + Last5RouletteWork *work; + if(!last5RouletteObj) { + return -1; + } + work = OM_GET_WORK_PTR(last5RouletteObj, Last5RouletteWork); + return work->state; +} + +static s32 GetLast5RouletteResult(void) +{ + Last5RouletteWork *work; + if(!last5RouletteObj) { + return -1; + } + work = OM_GET_WORK_PTR(last5RouletteObj, Last5RouletteWork); + return work->choices[work->choice]; +} + +typedef struct team_result_work { + struct { + u8 kill : 1; + }; + u8 delay; + u8 player[2][2]; + s16 group[2]; +} TeamResultWork; + +static void CreateTeamResultWork(TeamResultWork *work); + +static void CreateTeamResult(void) +{ + TeamResultWork *work; + omObjData *object; + s32 i; + s32 j; + s32 coins[2]; + s32 stars[2]; + u32 score[2]; + s32 team, player; + s32 rank1, rank2; + object = omAddObjEx(boardObjMan, 268, 0, 0, -1, UpdateTeamResult); + teamResultObj = object; + work = OM_GET_WORK_PTR(object, TeamResultWork); + CreateTeamResultWork(work); + coins[0] = coins[1] = stars[0] = stars[1] = 0; + for(i=0; i<2; i++) { + for(j=0; j<2; j++) { + coins[i] += BoardPlayerCoinsGet(work->player[i][j]); + stars[i] += GWStarsGet(work->player[i][j]); + } + } + for(i=0; i<2; i++) { + score[i] = coins[i]+(stars[i] << 11); + } + team = BoardRandMod(2); + player = BoardRandMod(2); + if(score[0] >= score[1]) { + object->trans.x = -108.0f; + object->trans.y = 152.0f; + object->rot.x = -108.0f; + object->rot.y = 302.0f; + if(score[0] == score[1]) { + last5Player = work->player[team][player]; + } else { + rank1 = GWPlayer[work->player[1][0]].rank; + rank2 = GWPlayer[work->player[1][1]].rank; + if(rank1 == rank2) { + last5Player = work->player[1][player]; + } else { + if(rank1 < rank2) { + last5Player = work->player[1][1]; + } else { + last5Player = work->player[1][0]; + } + } + } + } else { + object->rot.x = -108.0f; + object->rot.y = 152.0f; + object->trans.x = -108.0f; + object->trans.y = 302.0f; + rank1 = GWPlayer[work->player[0][0]].rank; + rank2 = GWPlayer[work->player[0][1]].rank; + if(rank1 == rank2) { + last5Player = work->player[0][player]; + } else { + if(rank1 < rank2) { + last5Player = work->player[0][1]; + } else { + last5Player = work->player[0][0]; + } + } + } +} + +static void CreateTeamResultWork(TeamResultWork *work) +{ + GXColor color = { 128, 128, 128, 0 }; + s32 i; + s32 character; + s16 group; + s32 j; + s32 team1_idx, team2_idx; + s16 sprite; + s32 spr_file; + s16 prio; + float x, y; + for(team1_idx=team2_idx=i=0; i<4; i++) { + s32 team = GWPlayer[i].team; + if(team == 0) { + work->player[0][team1_idx] = i; + team1_idx++; + } else { + work->player[1][team2_idx] = i; + team2_idx++; + } + } + for(j=0; j<2; j++) { + group = HuSprGrpCreate(15); + work->group[j] = group; + for(i=0; i<13; i++) { + spr_file = teamSprTbl[i]; + prio = teamSprPrioTbl[i]; + + BoardSpriteCreate(spr_file, prio, NULL, &sprite); + HuSprGrpMemberSet(group, i, sprite); + HuSprAttrSet(group, i, HUSPR_ATTR_NOANIM); + HuSprAttrSet(group, i, HUSPR_ATTR_LINEAR); + HuSprPosSet(group, i, teamSprPosTbl[i][0], teamSprPosTbl[i][1]); + } + HuSprTPLvlSet(group, 0, 0.7f); + HuSprScaleSet(group, 0, 1.0f, 2.5f); + HuSprColorSet(group, 0, color.r, color.g, color.b); + if(!GWPlayer[work->player[j][0]].com) { + HuSprAttrSet(group, 11, HUSPR_ATTR_DISPOFF); + } + if(!GWPlayer[work->player[j][1]].com) { + HuSprAttrSet(group, 12, HUSPR_ATTR_DISPOFF); + } + if(j == 0) { + HuSprBankSet(group, 1, 2); + } else { + HuSprBankSet(group, 1, 1); + } + for(i=0; i<2; i++) { + character = GWPlayer[work->player[j][i]].character; + BoardSpriteCreate(teamCharSprTbl[character], 1500, NULL, &sprite); + HuSprGrpMemberSet(group, i+13, sprite); + HuSprAttrSet(group, i+13, HUSPR_ATTR_LINEAR); + x = teamSprPosTbl[i+13][0]; + y = teamSprPosTbl[i+13][1]; + HuSprPosSet(group, i+13, x, y); + } + } +} + +static void SetTeamResultTarget(s32 team, Vec *pos) +{ + if(!teamResultObj || !pos) { + return; + } + if(team) { + teamResultObj->rot.x = pos->x; + teamResultObj->rot.y = pos->y; + } else { + teamResultObj->trans.x = pos->x; + teamResultObj->trans.y = pos->y; + } +} + +static void GetTeamResultTarget(s32 team, Vec *pos) +{ + if(!teamResultObj || !pos) { + return; + } + if(team) { + pos->x = teamResultObj->rot.x; + pos->y = teamResultObj->rot.y; + } else { + pos->x = teamResultObj->trans.x; + pos->y = teamResultObj->trans.y; + } +} + +static void KillTeamResult(void) +{ + TeamResultWork *work; + if(!teamResultObj) { + return; + } + work = OM_GET_WORK_PTR(teamResultObj, TeamResultWork); + work->kill = 1; +} + +static void UpdateTeamResult(omObjData *object) +{ + TeamResultWork *work; + s32 i, j; + work = OM_GET_WORK_PTR(object, TeamResultWork); + if(work->kill || BoardIsKill()) { + HuSprGrpKill(work->group[0]); + HuSprGrpKill(work->group[1]); + teamResultObj = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + if(work->delay) { + work->delay--; + return; + } + { + s8 rank[2]; + u32 score[2]; + s32 coins[2]; + s32 stars[2]; + + + + coins[0] = coins[1] = stars[0] = stars[1] = 0; + for(i=0; i<2; i++) { + for(j=0; j<2; j++) { + coins[i] += BoardPlayerCoinsGet(work->player[i][j]); + stars[i] += GWStarsGet(work->player[i][j]); + } + } + for(i=0; i<2; i++) { + s32 star_val; + s32 coin_val; + + score[i] = coins[i]+(stars[i] << 11); + coin_val = coins[i]; + if(coin_val > 999) { + coin_val = 999; + } + star_val = stars[i]; + if(star_val > 999) { + star_val = 999; + } + BoardSpriteDigitUpdate(work->group[i], 3, coin_val); + BoardSpriteDigitUpdate(work->group[i], 7, star_val); + } + if(score[0] == score[1]) { + rank[0] = rank[1] = 0; + } else if(score[0] > score[1]) { + rank[0] = 0; + rank[1] = 1; + } else { + rank[1] = 0; + rank[0] = 1; + } + HuSprBankSet(work->group[0], 2, rank[0]); + HuSprBankSet(work->group[1], 2, rank[1]); + HuSprGrpPosSet(work->group[0], object->trans.x, object->trans.y); + HuSprGrpPosSet(work->group[1], object->rot.x, object->rot.y); } } \ No newline at end of file From a85600c91da7ce958dfd5b8bdfd7b7a3c098b3e7 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Mon, 11 Mar 2024 22:15:24 -0400 Subject: [PATCH 062/106] MG & LuckyValue functions Basically just a sync commit --- src/game/board/mg_setup.c | 205 +++++++++++++++++++++++++++++++++++++- 1 file changed, 202 insertions(+), 3 deletions(-) diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index 5a2b0d81..2271c890 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -39,7 +39,7 @@ typedef struct bitcopy { s8 unk_03; s16 unk_04; u8 unk_06; - s32 unk_08; + f32 unk_08; unkSubstructR31* unk_0C; } bitcopy; @@ -81,11 +81,13 @@ static s32 luckyMessTbl[9] = { // sbss static u8 mgType; static s32 luckyF; +static f32 hilitePos; static s16 mgNext; static omObjData* mgSetupObj; static Process* mgSetupProc; // sdata +static u8 luckyValue = 0xFF; // sdata2 @@ -102,12 +104,12 @@ static void UpdateMGSetup(omObjData*); static void CenterStatus(bitcopy*, omObjData*); static void SeparateStatus(bitcopy*, omObjData*); static void PopupVS(bitcopy*, omObjData*); -// ... static void FallMGType(bitcopy*, omObjData*); static void LuckyMGFall(bitcopy*, omObjData*); +static void HideLuckyValue(void); +// ... static void UpdateLuckyValue(bitcopy*, omObjData*); static void UpdateMGList(bitcopy*, omObjData*); -static void HideLuckyValue(void); s32 BoardMGSetupPlayPush(s32, s16); void BoardMGSetupPlayPop(s32, s16); @@ -797,3 +799,200 @@ static void PopupVS(bitcopy* arg0, omObjData* arg1) { } } } + +static void FallMGType(bitcopy* arg0, omObjData* arg1) { + Vec sp10; + s16 sp8[3] = { 3, 1, 2 }; + Vec* temp_r4; + Vec* temp_r5; + s16 temp_r30; + bitcopy* temp_r29; + unkSubstructR31* temp_r31; + + temp_r31 = arg0->unk_0C; + temp_r30 = sp8[mgType]; + if (arg0->unk_02 == 0) { + HuSprAttrReset(temp_r31->unk_00[0], temp_r30, 4); + temp_r31->unk_1C[0][temp_r30].y = -284.0f; + temp_r31->unk_1C[1][temp_r30].y = -128.0f; + arg0->unk_02 = 1; + } + PSVECSubtract(&temp_r31->unk_1C[1][temp_r30], &temp_r31->unk_1C[0][temp_r30], &sp10); + if (PSVECMag(&sp10) <= 1.0f) { + temp_r31->unk_1C[0][temp_r30] = temp_r31->unk_1C[1][temp_r30]; + temp_r29 = (bitcopy*) mgSetupObj->work; + temp_r29->field00_bit1 = 7; + temp_r29->unk_02 = 0; + temp_r29->unk_03 = 0; + temp_r29->unk_04 = 0; + } else { + PSVECScale(&sp10, &sp10, 0.1f); + PSVECAdd(&sp10, &temp_r31->unk_1C[0][temp_r30], &temp_r31->unk_1C[0][temp_r30]); + } + HuSprPosSet(temp_r31->unk_00[0], temp_r30, temp_r31->unk_1C[0][temp_r30].x, temp_r31->unk_1C[0][temp_r30].y); +} + +static void LuckyMGFall(bitcopy* arg0, omObjData* arg1) { + u16 spC; + u16 spA; + s16 sp8[3] = { 3, 1, 2 }; + Vec* temp_r25; + Vec* temp_r27; + Vec* temp_r28; + s16 temp_r24; + bitcopy* temp_r26; + u8 temp_r0; + unkSubstructR31* temp_r29; + f32 var_f30; + + temp_r29 = arg0->unk_0C; + temp_r24 = sp8[mgType]; + temp_r28 = &temp_r29->unk_1C[0][4]; + temp_r25 = &temp_r29->unk_1C[1][4]; + temp_r27 = &temp_r29->unk_1C[0][temp_r24]; + switch (arg0->unk_02) { + case 0: + HuSprAttrReset(temp_r29->unk_00[0], 4, 4); + temp_r28->y = -284.0f; + temp_r25->y = -128.0f; + arg0->unk_02 = 1; + break; + case 1: + temp_r28->y += 10.0f; + if (temp_r25->y < temp_r28->y) { + arg0->unk_02 = 2; + arg0->unk_03 = 0; + temp_r28->y = temp_r25->y; + HuAudFXPlay(0x35D); + } + break; + case 2: + temp_r27->y += 10.0f; + if (328.0f < temp_r27->y) { + HuSprAttrReset(temp_r29->unk_00[0], temp_r24, 4); + temp_r26 = (bitcopy*) mgSetupObj->work; + temp_r26->field00_bit1 = 7; + temp_r26->unk_02 = 0; + temp_r26->unk_03 = 0; + temp_r26->unk_04 = 0; + } else if (arg0->unk_03 < 0x1E) { + OSs8tof32(&arg0->unk_03, &var_f30); + HuSprZRotSet(temp_r29->unk_00[0], temp_r24, var_f30); + arg0->unk_03++; + } + break; + } + HuSprPosSet(temp_r29->unk_00[0], 4, temp_r28->x, temp_r28->y); + HuSprPosSet(temp_r29->unk_00[0], temp_r24, temp_r27->x, temp_r27->y); +} + +static void HideLuckyValue(void) { + f32 var_f31; + bitcopy* temp; + unkSubstructR31* temp_r31; + + temp = (bitcopy*) mgSetupObj->work; + temp_r31 = temp->unk_0C; + + for (var_f31 = 1.0f; var_f31 > 0.1f; var_f31 -= 0.1f) { + HuSprTPLvlSet(temp_r31->unk_00[0], 8, var_f31); + HuSprTPLvlSet(temp_r31->unk_00[0], 9, var_f31); + HuPrcVSleep(); + } + HuSprAttrSet(temp_r31->unk_00[0], 8, 4); + HuSprAttrSet(temp_r31->unk_00[0], 9, 4); +} + +static inline s32 GWMGUnk32Get(void) { + return GWSystem.unk_32; +} + +void UpdateLuckyValue(bitcopy* arg0, omObjData* arg1) { + s32 var_r23; + f32 temp_f29; + s32 temp_r3; + bitcopy* temp_r26; + unkSubstructR31* temp_r27; + f32 temp_f28; + u8 spC; + + temp_r27 = arg0->unk_0C; + switch (arg0->unk_02) { + case 0: + HuSprAttrReset(temp_r27->unk_00[0], 8, 4); + HuSprAttrReset(temp_r27->unk_00[0], 9, 4); + HuSprAttrSet(temp_r27->unk_00[0], 8, 8); + HuSprAttrSet(temp_r27->unk_00[0], 9, 8); + HuSprPosSet(temp_r27->unk_00[0], 8, 0.0f, 0.0f); + HuSprPosSet(temp_r27->unk_00[0], 9, 0.0f, 0.0f); + HuSprScaleSet(temp_r27->unk_00[0], 8, 0.001f, 0.001f); + HuSprScaleSet(temp_r27->unk_00[0], 9, 0.001f, 0.001f); + HuSprBankSet(temp_r27->unk_00[0], 9, 1); + arg0->unk_04 = 0; + arg0->unk_02 = 1; + arg0->unk_03 = 0; + temp_r3 = BoardRandMod(0x64U); + if (temp_r3 < 0x55) { + GWSystem.unk_32 = 2; + return; + } + if (temp_r3 >= 0x5F) return; + GWSystem.unk_32 = 3; + return; + case 1: + if (arg0->unk_03 < 0x5A) { + OSu8tof32((u8*) &arg0->unk_03, &temp_f28); + temp_f29 = sin((M_PI * temp_f28) / 180.0); + HuSprScaleSet(temp_r27->unk_00[0], 8, temp_f29, temp_f29); + HuSprScaleSet(temp_r27->unk_00[0], 9, temp_f29, temp_f29); + arg0->unk_03 += 2; + return; + } + arg0->unk_02 = 2; + arg0->unk_06 = BoardRandMod(0xCU) + 0x12; + arg0->unk_03 = 0; + arg0->unk_08 = 0.8f; + return; + case 2: + arg0->unk_08 *= 0.97f; + hilitePos += arg0->unk_08; + if (hilitePos >= 3.0f) { + hilitePos = 0.0f; + } + OSf32tos8(&hilitePos, (s8*)&spC); + if (spC != luckyValue) { + HuAudFXPlay(0x304); + luckyValue = spC; + } + HuSprBankSet(temp_r27->unk_00[0], 9, luckyValue); + if (arg0->unk_08 < 0.05f) { + if (luckyValue != GWMGUnk32Get() - 1) { + arg0->unk_08 *= 1.0309278f; + return; + } + HuAudFXPlay(0x305); + HuAudFXPlay(0x357); + HuAudFXPlay(0x358); + arg0->unk_02 = 3; + arg0->unk_03 = 0; + arg0->unk_04 = 0; + return; + } + break; + case 3: + arg0->unk_04 += 8; + if (arg0->unk_04 >= 0x438) { + temp_r26 = (bitcopy*) mgSetupObj->work; + temp_r26->field00_bit1 = 7; + temp_r26->unk_02 = 0; + temp_r26->unk_03 = 0; + temp_r26->unk_04 = 0; + return; + } + temp_f28 = (arg0->unk_04 % 360); + temp_f29 = (1.0 + (0.5 * sin((M_PI * temp_f28) / 180.0))); + HuSprScaleSet(temp_r27->unk_00[0], 8, temp_f29, temp_f29); + HuSprScaleSet(temp_r27->unk_00[0], 9, temp_f29, temp_f29); + break; + } +} From 8208ed080d0bccc17dff108ed7e1766106630e79 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Tue, 12 Mar 2024 00:49:16 -0400 Subject: [PATCH 063/106] Functions complete, sdata2 misaligned --- config/GMPE01_00/symbols.txt | 2 +- src/game/board/mg_setup.c | 332 ++++++++++++++++++++++++++++++++++- 2 files changed, 330 insertions(+), 4 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index d2efc523..872ff6cb 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5304,7 +5304,7 @@ statusLayout1Vs3 = .data:0x8013AD64; // type:object size:0x30 scope:local data:f statusLayout2Vs2 = .data:0x8013AD94; // type:object size:0x30 scope:local data:float luckyMessTbl = .data:0x8013ADC4; // type:object size:0x24 scope:local jumptable_8013ADE8 = .data:0x8013ADE8; // type:object size:0x20 scope:local -cursorYTbl = .data:0x8013AE08; // type:object size:0x20 scope:local +hiliteYTbl = .data:0x8013AE08; // type:object size:0x10 scope:local hiliteColTbl = .data:0x8013AE28; // type:object size:0xC scope:local hostMesTbl = .data:0x8013AE38; // type:object size:0x90 scope:local houseMdlTbl = .data:0x8013AEC8; // type:object size:0x30 scope:local diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index 2271c890..793b1532 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -3,12 +3,14 @@ #include "game/objsub.h" #include "game/wipe.h" #include "game/flag.h" +#include "game/window.h" #include "game/board/main.h" #include "game/board/audio.h" #include "game/board/player.h" #include "game/board/space.h" #include "game/board/ui.h" #include "game/board/tutorial.h" +#include "game/board/window.h" // structs typedef struct structActiveMG { @@ -39,6 +41,7 @@ typedef struct bitcopy { s8 unk_03; s16 unk_04; u8 unk_06; + u8 unk_07; f32 unk_08; unkSubstructR31* unk_0C; } bitcopy; @@ -46,6 +49,7 @@ typedef struct bitcopy { // bss static structActiveMG activeMG[4]; static s16 mgListAll[0x20]; +static s16 mgPlay4P[8]; // data static s32 mgSetupSprTbl[13] = { @@ -83,13 +87,23 @@ static u8 mgType; static s32 luckyF; static f32 hilitePos; static s16 mgNext; +static u8 mgPlayBattleLen; +static u8 mgPlay2Vs2Len; +static u8 mgPlay1Vs3Len; +static u8 mgPlay4PLen; +static s16 mgPlay1Vs3[3]; +static s16 mgPlay2Vs2[3]; +static s16 mgPlayBattle[2]; +static u8 hiliteTimer; +static u8 hiliteBlinkLen; +static u8 hiliteShowF; static omObjData* mgSetupObj; static Process* mgSetupProc; + // sdata static u8 luckyValue = 0xFF; - -// sdata2 +static s8 cursorPos = 0xFF; // determined functions void BoardMGSetupExec(void); @@ -107,9 +121,9 @@ static void PopupVS(bitcopy*, omObjData*); static void FallMGType(bitcopy*, omObjData*); static void LuckyMGFall(bitcopy*, omObjData*); static void HideLuckyValue(void); -// ... static void UpdateLuckyValue(bitcopy*, omObjData*); static void UpdateMGList(bitcopy*, omObjData*); +// ... s32 BoardMGSetupPlayPush(s32, s16); void BoardMGSetupPlayPop(s32, s16); @@ -996,3 +1010,315 @@ void UpdateLuckyValue(bitcopy* arg0, omObjData* arg1) { break; } } + +static f32 cursorYTbl[4] = { + 64.0f, 88.0f, 112.0f, 136.0f +}; +static f32 hiliteYTbl[4] = { + 60.0f, 84.0f, 108.0f, 132.0f +}; +static GXColor hiliteColTbl[3] = { + { 0xF8, 0xF2, 0x13, 0x00 }, + { 0xF8, 0xF2, 0x13, 0x00 }, + { 0xF8, 0xF2, 0x13, 0x00 } +}; + +void UpdateMGList(bitcopy* arg0, omObjData* arg1) { + f32 sp1C; + f32 sp18; + s32 sp14; + f32 var_f26; + f32 var_f25; + f32 var_f24; + f32 temp_f27; + s32 temp_r22; + s16 temp_r3; + s8 var_r17; + GXColor* temp_r18; + s32 var_r23; + bitcopy* temp_r21; + unkSubstructR31* temp_r24; + + temp_r24 = arg0->unk_0C; + temp_r22 = mgType + 5; + switch (arg0->unk_02) { /* irregular */ + case 0: + HuSprAttrSet(temp_r24->unk_00[0], temp_r22, 8); + HuSprAttrReset(temp_r24->unk_00[0], temp_r22, 4); + HuSprPosSet(temp_r24->unk_00[0], temp_r22, 0.0f, 32.0f); + HuSprScaleSet(temp_r24->unk_00[0], temp_r22, 0.001f, 0.001f); + arg0->unk_04 = 0; + arg0->unk_02 = 1; + arg0->unk_03 = 0; + hilitePos = 0.0f; + + for (var_r23 = 0; var_r23 < arg0->field01_bit0; var_r23++) { + HuWinMesSizeCancelCRSet(1); + HuWinMesMaxSizeGet(1, &sp18, activeMG[var_r23].unk_04); + var_f25 = 152.0f; + var_f24 = 280.0f + (var_r23 * 0x18); + temp_r3 = HuWinCreate(var_f25, var_f24, sp18, sp1C, 0); + HuWinBGTPLvlSet(temp_r3, 0.0f); + HuWinMesSpeedSet(temp_r3, 0); + HuWinDispOff(temp_r3); + HuWinAttrSet(temp_r3, 0x100U); + if (activeMG[var_r23].unk_03 != 0) { + sp14 = activeMG[var_r23].unk_04; + } else { + sp14 = 0x90001; + } + HuWinMesSet(temp_r3, sp14); + activeMG[var_r23].unk_00 = temp_r3; + } + return; + case 1: + if (arg0->unk_03 < 0x5A) { + OSu8tof32((u8*) &arg0->unk_03, &var_f26); + temp_f27 = sin((M_PI * var_f26) / 180.0); + arg0->unk_03 += 3; + HuSprScaleSet(temp_r24->unk_00[0], temp_r22, temp_f27, temp_f27); + return; + } + + for (var_r23 = 0; var_r23 < arg0->field01_bit0; var_r23++) { + HuWinDispOn(activeMG[var_r23].unk_00); + } + HuSprAttrReset(temp_r24->unk_00[0], 0xA, 4); + HuSprAttrSet(temp_r24->unk_00[0], 0xA, 8); + HuSprPosSet(temp_r24->unk_00[0], 0xA, -148.0f, cursorYTbl[0]); + temp_r18 = &hiliteColTbl[mgType]; + HuSprAttrReset(temp_r24->unk_00[0], 0xC, 4); + HuSprPosSet(temp_r24->unk_00[0], 0xC, 0.0f, hiliteYTbl[0]); + HuSprTPLvlSet(temp_r24->unk_00[0], 0xC, 0.7f); + HuSprScaleSet(temp_r24->unk_00[0], 0xC, 32.0f, 3.5f); + HuSprColorSet(temp_r24->unk_00[0], 0xC, temp_r18->r, temp_r18->g, temp_r18->b); + arg0->unk_02 = 2; + arg0->unk_03 = 0; + arg0->unk_08 = 0.7f; + arg0->unk_07 = 0x23 - BoardRandMod(0x1EU); + return; + case 2: + hilitePos += arg0->unk_08; + if (hilitePos >= arg0->field01_bit0) { + hilitePos = 0.0f; + } + OSf32tos8(&hilitePos, &var_r17); + if (var_r17 != cursorPos) { + HuAudFXPlay(0x304); + cursorPos = var_r17; + } + HuSprPosSet(temp_r24->unk_00[0], 0xA, -148.0f, cursorYTbl[cursorPos]); + HuSprPosSet(temp_r24->unk_00[0], 0xC, 0.0f, hiliteYTbl[cursorPos]); + if (arg0->unk_07 != 0) { + arg0->unk_07--; + return; + } + arg0->unk_02 = 3; + return; + case 3: + arg0->unk_08 *= 0.97f; + hilitePos += arg0->unk_08; + if (hilitePos >= arg0->field01_bit0) { + hilitePos = 0.0f; + } + OSf32tos8(&hilitePos, &var_r17); + if (var_r17 != cursorPos) { + HuAudFXPlay(0x304); + cursorPos = var_r17; + } + HuSprPosSet(temp_r24->unk_00[0], 0xA, -148.0f, cursorYTbl[cursorPos]); + HuSprPosSet(temp_r24->unk_00[0], 0xC, 0.0f, hiliteYTbl[cursorPos]); + if (!(arg0->unk_08 < (0.02f + (0.02f * BoardRandFloat())))) return; // weird hacky garbage + HuAudFXPlay(0x305); + arg0->unk_02 = 4; + arg0->unk_03 = 0; + hiliteTimer = 0; + hiliteShowF = 1; + hiliteBlinkLen = 5; + mgNext = activeMG[cursorPos].unk_02; + HuWinMesSet(activeMG[cursorPos].unk_00, activeMG[cursorPos].unk_04); + return; + case 4: + if (arg0->unk_03++ > 0x78U) { + HuSprAttrSet(temp_r24->unk_00[0], 0xA, 4); + HuSprAttrSet(temp_r24->unk_00[0], 0xC, 4); + + for (var_r23 = 0; var_r23 < arg0->field01_bit0; var_r23++) { + HuWinDispOff(activeMG[var_r23].unk_00); + } + arg0->unk_02 = 5; + arg0->unk_03 = 0; + return; + } + if (hiliteTimer < hiliteBlinkLen) { + hiliteTimer++; + } else { + hiliteShowF ^= 1; + hiliteTimer = 0; + } + if (hiliteShowF != 0) { + HuSprAttrReset(temp_r24->unk_00[0], 0xC, 4); + return; + } + HuSprAttrSet(temp_r24->unk_00[0], 0xC, 4); + return; + case 5: + if (arg0->unk_03 < 0x5A) { + OSu8tof32((u8*) &arg0->unk_03, &var_f26); + temp_f27 = (1.0 + (2.0 * sin((M_PI * var_f26) / 180.0))); + arg0->unk_03 += 4; + if (arg0->unk_03 > 0x5A) { + arg0->unk_03 = 0x5A; + } + HuSprScaleSet(temp_r24->unk_00[0], temp_r22, temp_f27, temp_f27); + if (arg0->unk_03 > 0x3C) { + HuSprTPLvlSet(temp_r24->unk_00[0], temp_r22, (90.0f - arg0->unk_03) / 30.0f); + return; + } + } else { + HuSprAttrSet(temp_r24->unk_00[0], temp_r22, 4); + + for (var_r23 = 0; var_r23 < arg0->field01_bit0; var_r23++) { + HuWinDispOff(activeMG[var_r23].unk_00); + } + arg0->unk_03 = 0; + arg0->unk_02 = 6; + temp_r21 = (bitcopy*) mgSetupObj->work; + temp_r21->field00_bit1 = 7; + temp_r21->unk_02 = 0; + temp_r21->unk_03 = 0; + temp_r21->unk_04 = 0; + } + break; + } +} + +void BoardMGSetupPlayClear(void) { + mgPlay4PLen = mgPlay1Vs3Len = mgPlay2Vs2Len = mgPlayBattleLen = 0; + memset(mgPlay4P, 0, 0x10); + memset(mgPlay1Vs3, 0, 6); + memset(mgPlay2Vs2, 0, 6); + memset(mgPlayBattle, 0, 4); +} + +s32 BoardMGSetupPlayPush(s32 arg0, s16 arg1) { + s16* var_r31; + s16 var_r30; + s16 var_r29; + + switch (arg0) { + case 0: + var_r29 = 8; + var_r31 = mgPlay4P; + break; + case 1: + var_r29 = 3; + var_r31 = mgPlay1Vs3; + break; + case 2: + var_r29 = 3; + var_r31 = mgPlay2Vs2; + break; + case 4: + var_r29 = 2; + var_r31 = mgPlayBattle; + break; + default: + return 0; + } + + var_r30 = 0; + while (var_r30 < var_r29) { + if (arg1 == var_r31[var_r30]) { + return 1; + } + var_r30++; + } + return 0; +} + +void BoardMGSetupPlayPop(s32 arg0, s16 arg1) { + s16 var_r29; + s16 temp_r28; + u8* var_r31; + s16* var_r30; + + switch (arg0) { /* irregular */ + case 0: + var_r31 = &mgPlay4PLen; + var_r29 = 8; + var_r30 = mgPlay4P; + break; + case 1: + var_r31 = &mgPlay1Vs3Len; + var_r29 = 3; + var_r30 = mgPlay1Vs3; + break; + case 2: + var_r31 = &mgPlay2Vs2Len; + var_r29 = 3; + var_r30 = mgPlay2Vs2; + break; + case 4: + var_r31 = &mgPlayBattleLen; + var_r29 = 2; + var_r30 = mgPlayBattle; + break; + default: + return; + } + temp_r28 = *var_r31; + var_r30[temp_r28] = arg1; + *var_r31 = temp_r28 + 1; + if (*var_r31 >= var_r29) { + *var_r31 = 0; + } + return; +} + +void BoardMGSetupTutorialExec(void) { + s32 spC; + s32 sp8; + s16 var_r30; + s16* temp_r31; + s32 temp_r0; + s32 var_r26; + bitcopy* temp_r24; + bitcopy* temp_r25; + bitcopy* temp_r27; + bitcopy* temp_r29; + bitcopy* temp_r28; + + *boardTutorialData = 1; + BoardFilterFadeInit(0x1E, 0xA0U); + + for (var_r26 = 0; var_r26 < 4; var_r26++) { + activeMG[var_r26].unk_00 = -1; + activeMG[var_r26].unk_04 = 0; + } + + CreateMGSetup(); + while (setupObjGet() != 7) { + HuPrcVSleep(); + } + temp_r29 = (bitcopy*) mgSetupObj->work; + temp_r29->field00_bit1 = 1; + temp_r29->unk_02 = 0; + temp_r29->unk_03 = 0; + temp_r29->unk_04 = 0; + while (setupObjGet() != 7) { + HuPrcVSleep(); + } + temp_r28 = (bitcopy*) mgSetupObj->work; + temp_r28->field00_bit1 = 6; + temp_r28->unk_02 = 0; + temp_r28->unk_03 = 0; + temp_r28->unk_04 = 0; + while (setupObjGet() != 7) { + HuPrcVSleep(); + } + temp_r24 = (bitcopy*) mgSetupObj->work; + temp_r24->field00_bit0 = 1; + BoardFilterFadeOut(0x1E); + HuPrcSleep(0x1E); +} From db822e01ec16f06d804796e60d4e7c554892e1ec Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 12 Mar 2024 00:07:26 -0500 Subject: [PATCH 064/106] Match and clean up board/mg_setup.c --- config/GMPE01_00/symbols.txt | 4 ++-- configure.py | 2 +- src/game/board/battle.c | 8 +++---- src/game/board/mg_setup.c | 46 ++++++++++++++++++++++-------------- 4 files changed, 35 insertions(+), 25 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 872ff6cb..26c4756e 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -1866,8 +1866,8 @@ HideLuckyValue = .text:0x800A3CA8; // type:function size:0xA8 scope:local UpdateLuckyValue = .text:0x800A3D50; // type:function size:0x430 scope:local UpdateMGList = .text:0x800A4180; // type:function size:0x8FC scope:local BoardMGSetupPlayClear = .text:0x800A4A7C; // type:function size:0x74 -BoardMGSetupPlayPush = .text:0x800A4AF0; // type:function size:0xC8 -BoardMGSetupPlayPop = .text:0x800A4BB8; // type:function size:0xD0 +BoardMGSetupPlaySearch = .text:0x800A4AF0; // type:function size:0xC8 +BoardMGSetupPlayPush = .text:0x800A4BB8; // type:function size:0xD0 BoardMGSetupTutorialExec = .text:0x800A4C88; // type:function size:0x2E4 BoardBooHouseHostSet = .text:0x800A4F6C; // type:function size:0x8 BoardBooHouseHostGet = .text:0x800A4F74; // type:function size:0x8 diff --git a/configure.py b/configure.py index 2f8e79c6..aaed6588 100644 --- a/configure.py +++ b/configure.py @@ -390,7 +390,7 @@ config.libs = [ Object(Matching, "game/board/battle.c"), Object(Matching, "game/board/fortune.c"), Object(Matching, "game/board/boo.c"), - Object(NonMatching, "game/board/mg_setup.c"), + Object(Matching, "game/board/mg_setup.c"), Object(NonMatching, "game/board/boo_house.c"), Object(NonMatching, "game/board/start.c"), Object(Matching, "game/board/last5.c"), diff --git a/src/game/board/battle.c b/src/game/board/battle.c index 544ee051..504b5fe7 100755 --- a/src/game/board/battle.c +++ b/src/game/board/battle.c @@ -42,8 +42,8 @@ typedef struct { s16 unk08; } BattleWork; -extern s32 BoardMGSetupPlayPush(s32, s16); -extern void BoardMGSetupPlayPop(s32, s16); +extern s32 BoardMGSetupPlaySearch(s32, s16); +extern void BoardMGSetupPlayPush(s32, s16); static void DestroyBattle(void); static void ExecBattle(void); @@ -181,7 +181,7 @@ static void ExecBattle(void) { if (!(var_r29->flag & 1)) { continue; } - } else if (BoardMGSetupPlayPush(4, temp_r28) != 0) { + } else if (BoardMGSetupPlaySearch(4, temp_r28) != 0) { continue; } } @@ -191,7 +191,7 @@ static void ExecBattle(void) { break; } battleMGIdx[var_r30] = var_r31; - BoardMGSetupPlayPop(4, temp_r28); + BoardMGSetupPlayPush(4, temp_r28); } if (_CheckFlag(0x10004)) { BoardStatusItemSet(1); diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index 793b1532..1c58cd37 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -87,10 +87,10 @@ static u8 mgType; static s32 luckyF; static f32 hilitePos; static s16 mgNext; -static u8 mgPlayBattleLen; -static u8 mgPlay2Vs2Len; -static u8 mgPlay1Vs3Len; static u8 mgPlay4PLen; +static u8 mgPlay1Vs3Len; +static u8 mgPlay2Vs2Len; +static u8 mgPlayBattleLen; static s16 mgPlay1Vs3[3]; static s16 mgPlay2Vs2[3]; static s16 mgPlayBattle[2]; @@ -124,8 +124,8 @@ static void HideLuckyValue(void); static void UpdateLuckyValue(bitcopy*, omObjData*); static void UpdateMGList(bitcopy*, omObjData*); // ... -s32 BoardMGSetupPlayPush(s32, s16); -void BoardMGSetupPlayPop(s32, s16); +s32 BoardMGSetupPlaySearch(s32, s16); +void BoardMGSetupPlayPush(s32, s16); // FUNCTIONS // @@ -285,7 +285,7 @@ static void ExecMGSetup(void) { ((bitcopy*) (mgSetupObj->work))->field00_bit0 = 1; BoardDataAsyncWait(var_r22); var_r24 = mgNext + 0x191; - BoardMGSetupPlayPop(mgType, var_r24); + BoardMGSetupPlayPush(mgType, var_r24); GWSystem.mg_next_type = -1; GWMGAvailSet(var_r24); GWSystem.mg_next = var_r24 - 0x191; @@ -357,7 +357,7 @@ static void DetermineMGList(bitcopy* arg0) { temp_r23 = temp_r25[var_r29]; temp_r18 = temp_r23 + 0x191; - if (GWMGListGet() == 2 || BoardMGSetupPlayPush(mgType, temp_r18) == 0) { + if (GWMGListGet() == 2 || BoardMGSetupPlaySearch(mgType, temp_r18) == 0) { var_r22 = 0; for (var_r29 = 0; var_r29 < var_r30; var_r29++) { if (temp_r20 == activeMG[var_r29].unk_04) { @@ -537,6 +537,13 @@ static s32 GetMGType(void) { } } +static void UnusedFloat(void) +{ + (void)288.0f; + (void)-98.0f; + (void)674.0f; +} + static s32 GetMGTypeTeam(void) { s8 sp12[4]; s8 spE[4]; @@ -661,27 +668,30 @@ static void UpdateMGSetup(omObjData* arg0) { var_r31->unk_06--; } else { switch (var_r31->field00_bit1) { - case 1: + case 0: CenterStatus(var_r31, arg0); break; - case 2: + case 1: SeparateStatus(var_r31, arg0); break; - case 3: + case 2: PopupVS(var_r31, arg0); break; - case 4: + case 3: FallMGType(var_r31, arg0); break; - case 5: + case 4: LuckyMGFall(var_r31, arg0); break; - case 6: + case 5: UpdateLuckyValue(var_r31, arg0); break; - case 7: + case 6: UpdateMGList(var_r31, arg0); break; + + case 7: + break; } } } @@ -921,7 +931,7 @@ static inline s32 GWMGUnk32Get(void) { return GWSystem.unk_32; } -void UpdateLuckyValue(bitcopy* arg0, omObjData* arg1) { +static void UpdateLuckyValue(bitcopy* arg0, omObjData* arg1) { s32 var_r23; f32 temp_f29; s32 temp_r3; @@ -1023,7 +1033,7 @@ static GXColor hiliteColTbl[3] = { { 0xF8, 0xF2, 0x13, 0x00 } }; -void UpdateMGList(bitcopy* arg0, omObjData* arg1) { +static void UpdateMGList(bitcopy* arg0, omObjData* arg1) { f32 sp1C; f32 sp18; s32 sp14; @@ -1201,7 +1211,7 @@ void BoardMGSetupPlayClear(void) { memset(mgPlayBattle, 0, 4); } -s32 BoardMGSetupPlayPush(s32 arg0, s16 arg1) { +s32 BoardMGSetupPlaySearch(s32 arg0, s16 arg1) { s16* var_r31; s16 var_r30; s16 var_r29; @@ -1237,7 +1247,7 @@ s32 BoardMGSetupPlayPush(s32 arg0, s16 arg1) { return 0; } -void BoardMGSetupPlayPop(s32 arg0, s16 arg1) { +void BoardMGSetupPlayPush(s32 arg0, s16 arg1) { s16 var_r29; s16 temp_r28; u8* var_r31; From c2adb3827a3e2dbd7504e20b3ee3faccd259a367 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Mon, 11 Mar 2024 23:30:29 -0700 Subject: [PATCH 065/106] Matched game/board/shop --- config/GMPE01_00/symbols.txt | 8 +- configure.py | 2 +- include/board_unsplit.h | 2 - include/game/board/model.h | 2 +- include/game/board/shop.h | 13 + src/REL/modeltestDll/main.c | 230 +++---- src/REL/w03Dll/main.c | 3 +- src/REL/w10Dll/main.c | 1 + src/REL/w10Dll/scene.c | 1 + src/game/board/lottery.c | 2 - src/game/board/main.c | 1 + src/game/board/model.c | 10 +- src/game/board/shop.c | 1175 ++++++++++++++++++++++++++++++++++ src/game/board/space.c | 1 + 14 files changed, 1320 insertions(+), 131 deletions(-) create mode 100755 include/game/board/shop.h create mode 100755 src/game/board/shop.c diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 26c4756e..619f7c39 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5207,11 +5207,11 @@ spaceImgIdx = .data:0x80139CC8; // type:object size:0xC scope:local spaceHiliteImgIdx = .data:0x80139CD4; // type:object size:0xC scope:local jumptable_80139CE0 = .data:0x80139CE0; // type:object size:0x28 scope:local hostMessTbl = .data:0x80139D08; // type:object size:0x24 scope:local -itemPriceTbl = .data:0x80139D2C; // type:object size:0x10 scope:local +itemPriceTbl = .data:0x80139D2C; // type:object size:0x10 scope:local data:byte shopMotTbl = .data:0x80139D3C; // type:object size:0x6C scope:local lbl_80139DA8 = .data:0x80139DA8; // type:object size:0xA data:string -itemPrioTbl = .data:0x80139DB2; // type:object size:0x8C scope:local -rankItemGroupTbl = .data:0x80139E3E; // type:object size:0x18 scope:local +itemPrioTbl = .data:0x80139DB2; // type:object size:0x8C scope:local data:byte +rankItemGroupTbl = .data:0x80139E3E; // type:object size:0x18 scope:local data:byte cursorPosTbl = .data:0x80139E58; // type:object size:0x30 scope:local data:float comInputDraw1 = .data:0x80139E88; // type:object size:0xEE scope:local data:2byte comInputDraw2 = .data:0x80139F76; // type:object size:0xBA scope:local data:2byte @@ -5897,7 +5897,7 @@ shopMdlParam = .sdata:0x801D370C; // type:object size:0x8 scope:local hostMdl = .sdata:0x801D3714; // type:object size:0x2 scope:local data:2byte shopMot = .sdata:0x801D3716; // type:object size:0x6 scope:local data:2byte itemCurChoice = .sdata:0x801D371C; // type:object size:0x1 scope:local data:byte -defaultItemTbl = .sdata:0x801D371D; // type:object size:0x5 scope:local +defaultItemTbl = .sdata:0x801D371D; // type:object size:0x5 scope:local data:byte hostMdl = .sdata:0x801D3728; // type:object size:0x2 scope:local data:2byte lotteryMot = .sdata:0x801D372A; // type:object size:0x8 scope:local data:2byte lotterySpr = .sdata:0x801D3732; // type:object size:0x2 scope:local data:2byte diff --git a/configure.py b/configure.py index aaed6588..51f63497 100644 --- a/configure.py +++ b/configure.py @@ -375,7 +375,7 @@ config.libs = [ Object(Matching, "game/board/com.c"), Object(Matching, "game/board/view.c"), Object(Matching, "game/board/space.c"), - Object(NonMatching, "game/board/shop.c"), + Object(Matching, "game/board/shop.c"), Object(Matching, "game/board/lottery.c"), Object(Matching, "game/board/basic_space.c"), Object(Matching, "game/board/warp.c"), diff --git a/include/board_unsplit.h b/include/board_unsplit.h index 941d3d53..d6ca8de1 100644 --- a/include/board_unsplit.h +++ b/include/board_unsplit.h @@ -7,12 +7,10 @@ typedef void (*BoardLightHook)(void); #endif -void BoardShopTutorialExec(s32); void BoardMGSetupTutorialExec(void); void BoardBooHouseTutorialExec(void); void BoardLightHookSet(BoardLightHook set, BoardLightHook reset); s32 fn_8006DDE8(s16, f32); -void BoardShopHostSet(s16); void BoardBooHouseHostSet(s16); s32 BoardCameraRotGet(Vec*); s32 BoardIsKill(void); diff --git a/include/game/board/model.h b/include/game/board/model.h index 6945ef9c..c967db5d 100644 --- a/include/game/board/model.h +++ b/include/game/board/model.h @@ -12,7 +12,7 @@ typedef struct board_model_param { u8 link : 1; u8 start_mot : 1; u8 pause : 1; - }; + } unk4; s16 unk6; } BoardModelParam; diff --git a/include/game/board/shop.h b/include/game/board/shop.h new file mode 100755 index 00000000..a0ddde25 --- /dev/null +++ b/include/game/board/shop.h @@ -0,0 +1,13 @@ +#ifndef _BOARD_SHOP_H +#define _BOARD_SHOP_H + +#include "dolphin/types.h" + +void BoardShopHostSet(s16 arg0); +s16 BoardShopHostGet(void); +void BoardShopInit(void); +void BoardShopKill(void); +void BoardShopExec(s32 player, s32 space); +void BoardShopTutorialExec(s32 arg0); + +#endif diff --git a/src/REL/modeltestDll/main.c b/src/REL/modeltestDll/main.c index 6bad041c..fd594c48 100644 --- a/src/REL/modeltestDll/main.c +++ b/src/REL/modeltestDll/main.c @@ -17,13 +17,13 @@ s32 lbl_1_data_0[8] = { 0x005F001B, - 0x005F0015, - 0x005F0016, - 0x005F0006, - 0x005F0000, - 0x005F0000, - 0x005F0000, - 0x005F0004, + 0x005F0015, + 0x005F0016, + 0x005F0006, + 0x005F0000, + 0x005F0000, + 0x005F0000, + 0x005F0004, }; const f64 unk_rodata_0 = 0.5; @@ -33,14 +33,14 @@ omObjData * lbl_1_bss_9A0; // -------------------------------------------------------------------------- // -void fn_1_A0(void) +void fn_1_A0(void) { Process * prc; OSReport("******* MODELTESTObjectSetup *********\n"); - + prc = omInitObjMan(0x32, 0x2000); omGameSysInit(prc); - + CRot.x = -30.0f; CRot.y = 0.0f; CRot.z = 0.0f; @@ -48,14 +48,14 @@ void fn_1_A0(void) Center.y = 0.0f; Center.z = 0.0f; CZoom = 800.0f; - + Hu3DCameraCreate(1); Hu3DCameraPerspectiveSet(1, 45.0f, 20.0f, 20000.0f, 1.2f); Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); - + lbl_1_bss_9A4 = omAddObjEx(prc, 0, 0x20, 0x20, -1, fn_1_29C); lbl_1_bss_9A0 = omAddObjEx(prc, 0x7FDA, 0, 0, -1, omOutView); - + Hu3DBGColorSet(0x20U, 0x80U, 0x80U); WipeCreate(1, 0, 0x1E); } @@ -83,83 +83,83 @@ char * lbl_1_data_D8[16] = { HsfanimStruct00 lbl_1_data_118 = { - /* unk00 */ 40, - /* unk02 */ {0, 0}, - /* unk04 */ 50.0f, - /* unk08 */ 0.0f, - /* unk0C */ 90.0f, - /* unk10 */ { /* x */ 0.0f, /* y */ -0.05000000074505806f, /* z */ 0.0f}, - /* unk1C */ 50.0f, - /* unk20 */ 0.800000011920929f, - /* unk24 */ 20.0f, - /* unk28 */ 0.9900000095367432f, - /* unk2C */ 4, - /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 32, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 0, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 128, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}}, - /* unk3E */ {{ /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}}, + /* unk00 */ 40, + /* unk02 */ {0, 0}, + /* unk04 */ 50.0f, + /* unk08 */ 0.0f, + /* unk0C */ 90.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ -0.05000000074505806f, /* z */ 0.0f}, + /* unk1C */ 50.0f, + /* unk20 */ 0.800000011920929f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 4, + /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 32, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 0, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 128, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}}, + /* unk3E */ {{ /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 0}}, }; HsfanimStruct00 lbl_1_data_168[2] = { { - /* unk00 */ 50, - /* unk02 */ {0, 0}, - /* unk04 */ 5.0f, - /* unk08 */ 10.0f, - /* unk0C */ 10.0f, - /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, - /* unk1C */ 2.0f, - /* unk20 */ 1.0099999904632568f, - /* unk24 */ 30.0f, - /* unk28 */ 0.9900000095367432f, - /* unk2C */ 2, - /* unk2E */ {{ /* r */ 48, /* g */ 48, /* b */ 8, /* a */ 255}, { /* r */ 64, /* g */ 48, /* b */ 8, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, - /* unk3E */ {{ /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk00 */ 50, + /* unk02 */ {0, 0}, + /* unk04 */ 5.0f, + /* unk08 */ 10.0f, + /* unk0C */ 10.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, + /* unk1C */ 2.0f, + /* unk20 */ 1.0099999904632568f, + /* unk24 */ 30.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 2, + /* unk2E */ {{ /* r */ 48, /* g */ 48, /* b */ 8, /* a */ 255}, { /* r */ 64, /* g */ 48, /* b */ 8, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk3E */ {{ /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, }, -{ - /* unk00 */ 30, - /* unk02 */ {0, 0}, - /* unk04 */ 3.299999952316284f, - /* unk08 */ 10.0f, - /* unk0C */ 0.0f, - /* unk10 */ { /* x */ 0.0f, /* y */ -0.05000000074505806f, /* z */ 0.0f}, - /* unk1C */ 2.0f, - /* unk20 */ 1.0f, - /* unk24 */ 20.0f, - /* unk28 */ 0.9800000190734863f, - /* unk2C */ 2, - /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 64, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, - /* unk3E */ {{ /* r */ 255, /* g */ 128, /* b */ 128, /* a */ 0}, { /* r */ 255, /* g */ 64, /* b */ 32, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, +{ + /* unk00 */ 30, + /* unk02 */ {0, 0}, + /* unk04 */ 3.299999952316284f, + /* unk08 */ 10.0f, + /* unk0C */ 0.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ -0.05000000074505806f, /* z */ 0.0f}, + /* unk1C */ 2.0f, + /* unk20 */ 1.0f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9800000190734863f, + /* unk2C */ 2, + /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 64, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk3E */ {{ /* r */ 255, /* g */ 128, /* b */ 128, /* a */ 0}, { /* r */ 255, /* g */ 64, /* b */ 32, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, }}; HsfanimStruct00 lbl_1_data_208 = { - /* unk00 */ 40, - /* unk02 */ {0, 0}, - /* unk04 */ 50.0f, - /* unk08 */ 0.0f, - /* unk0C */ 180.0f, - /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, - /* unk1C */ 30.0f, - /* unk20 */ 0.8999999761581421f, - /* unk24 */ 20.0f, - /* unk28 */ 0.9900000095367432f, - /* unk2C */ 4, - /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 32, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 0, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 128, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}}, - /* unk3E */ {{ /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk00 */ 40, + /* unk02 */ {0, 0}, + /* unk04 */ 50.0f, + /* unk08 */ 0.0f, + /* unk0C */ 180.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, + /* unk1C */ 30.0f, + /* unk20 */ 0.8999999761581421f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 4, + /* unk2E */ {{ /* r */ 255, /* g */ 255, /* b */ 32, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 0, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 128, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 255, /* a */ 255}}, + /* unk3E */ {{ /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, }; HsfanimStruct00 lbl_1_data_258 = { - /* unk00 */ 30, - /* unk02 */ {0, 0}, - /* unk04 */ 50.0f, - /* unk08 */ 0.0f, - /* unk0C */ 90.0f, - /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, - /* unk1C */ 30.0f, - /* unk20 */ 0.949999988079071f, - /* unk24 */ 20.0f, - /* unk28 */ 0.9900000095367432f, - /* unk2C */ 2, - /* unk2E */ {{ /* r */ 255, /* g */ 16, /* b */ 16, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 16, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, - /* unk3E */ {{ /* r */ 255, /* g */ 16, /* b */ 16, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 16, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk00 */ 30, + /* unk02 */ {0, 0}, + /* unk04 */ 50.0f, + /* unk08 */ 0.0f, + /* unk0C */ 90.0f, + /* unk10 */ { /* x */ 0.0f, /* y */ 0.0f, /* z */ 0.0f}, + /* unk1C */ 30.0f, + /* unk20 */ 0.949999988079071f, + /* unk24 */ 20.0f, + /* unk28 */ 0.9900000095367432f, + /* unk2C */ 2, + /* unk2E */ {{ /* r */ 255, /* g */ 16, /* b */ 16, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 16, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, + /* unk3E */ {{ /* r */ 255, /* g */ 16, /* b */ 16, /* a */ 255}, { /* r */ 255, /* g */ 255, /* b */ 16, /* a */ 255}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}, { /* r */ 0, /* g */ 0, /* b */ 0, /* a */ 0}}, }; const Point3d lbl_1_rodata_38 = {0.0f, 0.0f, 0.0f}; @@ -209,29 +209,29 @@ void fn_1_29C(omObjData * arg0) f32 temp_f30; s16 chrIdx; s32 temp_r0; - + sp14 = lbl_1_rodata_38; sp8 = lbl_1_rodata_44; - + var_r31 = Hu3DGLightCreate(0.0f, 500.0f, 1000.0f, 0.0f, -0.5f, -1.0f, 0xFFU, 0xFFU, 0xFFU); Hu3DGLightInfinitytSet(var_r31); Hu3DShadowCreate(45.0f, 500.0f, 8000.0f); Hu3DShadowTPLvlSet(0.5f); - + Hu3DShadowSizeSet(0xC0U); sp20.x = -500.0f; sp20.y = 1000.0f; sp20.z = 1000.0f; Hu3DShadowPosSet(&sp20, &sp8, &sp14); - for (var_r31 = 0; var_r31 < 1; ++var_r31) + for (var_r31 = 0; var_r31 < 1; ++var_r31) { chrIdx = 0; lbl_1_bss_98A[var_r31] = CharModelCreate(chrIdx, 2); if (var_r31 == 1) { Hu3DModelLayerSet(lbl_1_bss_98A[var_r31], 1); } - + lbl_1_bss_88A[var_r31][0] = CharModelMotionCreate(chrIdx, lbl_1_data_0[0]); lbl_1_bss_88A[var_r31][1] = CharModelMotionCreate(chrIdx, lbl_1_data_0[1]); lbl_1_bss_88A[var_r31][2] = CharModelMotionCreate(chrIdx, lbl_1_data_0[2]); @@ -247,7 +247,7 @@ void fn_1_29C(omObjData * arg0) CharModelMotionDataClose(chrIdx); } temp_r26 = OSGetTick(); - + for (var_r31 = 0; var_r31 < 8; ++var_r31) { Hu3DModelObjMtxGet(lbl_1_bss_98A[0], "test11_tex_we-ske_R_shoe1", sp2C); } @@ -328,7 +328,7 @@ void fn_1_F38(void) { f32 var_f31; var_f31 = 0.0f; - + while(TRUE) { Hu3DModelRotSet(lbl_1_bss_460[0], 0.0f, var_f31, 0.0f); var_f31 += 1.0f; @@ -374,7 +374,7 @@ void fn_1_F9C(struct om_obj_data * omData) s32 var_r31; s16 var_r30; HuUnkF9C2 teropPatterns; - + if (omSysExitReq != 0) { if (lbl_1_bss_10 != 0) { HuPrcKill(lbl_1_bss_10); @@ -455,7 +455,7 @@ void fn_1_F9C(struct om_obj_data * omData) (void) var_fake; } } - + if (lbl_1_bss_458 > 0) { MGSeqParamSet(lbl_1_bss_45A[0], 1, lbl_1_bss_458 / 60); --lbl_1_bss_458; @@ -474,7 +474,7 @@ void fn_1_F9C(struct om_obj_data * omData) sp24.y = cos((M_PI * CRot.x) / 180.0); sp24.z = (cos((M_PI * CRot.y) / 180.0) * sin((M_PI * CRot.x) / 180.0)); temp_f31 = CRot.z; - + sp18.x = sp24.x * (sp30.x * sp30.x + (1.0f - sp30.x * sp30.x) * cos((M_PI * temp_f31) / 180.0)) + sp24.y * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.z * sin((M_PI * temp_f31) / 180.0)) + sp24.z * (sp30.x * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.y * sin((M_PI * temp_f31) / 180.0)); @@ -482,7 +482,7 @@ void fn_1_F9C(struct om_obj_data * omData) sp18.y = sp24.y * (sp30.y * sp30.y + (1.0f - sp30.y * sp30.y) * cos((M_PI * temp_f31) / 180.0)) + sp24.x * (sp30.x * sp30.y * (1.0f - cos((M_PI * temp_f31) / 180.0)) + sp30.z * sin((M_PI * temp_f31) / 180.0)) + sp24.z * (sp30.y * sp30.z * (1.0f - cos((M_PI * temp_f31) / 180.0)) - sp30.x * sin((M_PI * temp_f31) / 180.0)); - + sp18.z = sp24.z * (sp30.z * sp30.z + (1.0f - sp30.z * sp30.z) * cos((M_PI * temp_f31) / 180.0)) + (sp24.x * (sp30.x * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) - sp30.y * sin((M_PI * temp_f31) / 180.0)) + sp24.y * (sp30.y * sp30.z * (1.0 - cos((M_PI * temp_f31) / 180.0)) + sp30.x * sin((M_PI * temp_f31) / 180.0))); @@ -495,7 +495,7 @@ void fn_1_F9C(struct om_obj_data * omData) } teropPatterns = lbl_1_rodata_B8; - + if ((HuPadBtnDown[0] & PAD_BUTTON_X) != 0) { ++lbl_1_bss_24; if (lbl_1_bss_24 >= 7) { @@ -512,7 +512,7 @@ void fn_1_F9C(struct om_obj_data * omData) if ((HuPadBtnDown[0] & PAD_BUTTON_Y) != 0) { var_r30 = MGSeqCreate(0xE, 0x3B); } - + if ((HuPadBtnDown[0] & (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_UP | PAD_BUTTON_DOWN)) != 0) { if ((HuPadBtnDown[0] & PAD_BUTTON_UP) != 0) { MGSeqCreate(0xC, 5, GWPlayerCfg[0].character, -1, -1, -1); @@ -536,7 +536,7 @@ void fn_1_F9C(struct om_obj_data * omData) } // -------------------------------------------------------------------------- // - + void fn_1_20F4(void) { s16 temp_r3; @@ -564,7 +564,7 @@ void fn_1_20F4(void) OSReport("%s\n", lbl_1_data_D8[var_r29]); temp_r3_2 = Hu3DModelObjPtrGet(temp_r3, lbl_1_data_D8[var_r29]); lbl_1_bss_40[var_r29].obj = temp_r3_2; - + Hu3DMotionNoMotSet(temp_r3, lbl_1_data_D8[var_r29], 0x380); lbl_1_bss_40[var_r29].pos.x = temp_r3_2->data.base.pos.x; @@ -578,13 +578,13 @@ void fn_1_20F4(void) lbl_1_bss_40[var_r29].scale.z = temp_r3_2->data.base.scale.z; OSReport( - "%d:(%3.2f,%3.2f,%3.2f),(%3.2f,%3.2f,%3.2f)\n", - var_r29, - temp_r3_2->data.base.pos.x, - temp_r3_2->data.base.pos.y, - temp_r3_2->data.base.pos.z, - temp_r3_2->data.base.rot.x, - temp_r3_2->data.base.rot.y, + "%d:(%3.2f,%3.2f,%3.2f),(%3.2f,%3.2f,%3.2f)\n", + var_r29, + temp_r3_2->data.base.pos.x, + temp_r3_2->data.base.pos.y, + temp_r3_2->data.base.pos.z, + temp_r3_2->data.base.rot.x, + temp_r3_2->data.base.rot.y, temp_r3_2->data.base.rot.z ); } @@ -636,7 +636,7 @@ void fn_1_20F4(void) var_r26 = HuPadSubStkX[1]; } - + if (var_r26 < 0xA && ABS(HuPadSubStkY[1]) < 0xA) { var_r27 = 0x168; var_f29 = 0.0f; @@ -648,7 +648,7 @@ void fn_1_20F4(void) var_f29 = 80.0f; } } - + HuPrcVSleep(); } } @@ -666,7 +666,7 @@ void fn_1_28F8(Point3d * arg0, Point3d * arg1) cam = &Hu3DCamera[0]; C_MTXLookAt(sp18, &cam->pos, &cam->up, &cam->target); PSMTXMultVec(sp18, arg0, &spC); - + temp_f31 = (1.2f * (spC.z * (sin((M_PI * (cam->fov / 2)) / 180.0) / (cos((M_PI * (cam->fov / 2)) / 180.0))))); temp_f30 = (spC.z * (sin((M_PI * (cam->fov / 2)) / 180.0) / (cos((M_PI * (cam->fov / 2)) / 180.0)))); arg1->x = 288.0f + (spC.x * (288.0f / -temp_f31)); @@ -679,7 +679,7 @@ void fn_1_2AFC(void) { HuWinInit(1); temp_r3 = HuWinCreate(-10000.0f, -10000.0f, 480, 0x80, 0); HuWinMesSpeedSet(temp_r3, 3); - + while (TRUE) { HuWinMesSet(temp_r3, 0x200011); HuWinMesWait(temp_r3); @@ -712,7 +712,7 @@ void fn_1_2B68(ModelData * mdl, Mtx arg1) f32 var_f29; // ! - uninitialized f32 var_f28; // ! - uninitialized f32 var_f27; // ! - uninitialized - + if (!lbl_1_bss_30[0]) { lbl_1_bss_30[0] = HuMemDirectMallocNum(HEAP_SYSTEM, FB_SIZE(640, 480), 0x10000000); } @@ -739,14 +739,14 @@ void fn_1_2B68(ModelData * mdl, Mtx arg1) GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3CU, 0U, 0x7DU); GXSetNumTevStages(1); - sp17.r = - sp17.g = - sp17.b = + sp17.r = + sp17.g = + sp17.b = sp17.a = 255; GXSetChanMatColor(GX_COLOR0A0, sp17); sp17.r = - sp17.g = + sp17.g = sp17.b = 128; sp17.a = 255; GXSetChanAmbColor(GX_COLOR0A0, sp17); @@ -767,7 +767,7 @@ void fn_1_2B68(ModelData * mdl, Mtx arg1) sp10 = lbl_1_bss_454->bmp; lbl_1_bss_2C += 1; HuSprTexLoad(lbl_1_bss_454, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR); - + PPCSync(); GXInitTexObj(&sp30, lbl_1_bss_30[0], 0x280U, 0x1E0U, 4U, GX_CLAMP, GX_CLAMP, 0U); GXInitTexObjLOD(&sp30, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0U, 0U, GX_ANISO_1); @@ -781,7 +781,7 @@ void fn_1_2B68(ModelData * mdl, Mtx arg1) sp18[1][0] = sp150[1][0]; sp18[1][1] = sp150[1][1]; sp18[1][2] = 0.0f; - + PSMTXRotRad(spF0, 0x58, -1.5707964f); mtxRot(spF0, 0.0f, 0.0f, 0.0f); temp_f31 = 0.0015625f; @@ -794,18 +794,18 @@ void fn_1_2B68(ModelData * mdl, Mtx arg1) GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_4, GX_ITS_4); GXSetIndTexMtx(GX_ITM_0, sp18, 0); GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, 1, 0, GX_ITM_0); - + lbl_1_bss_28 += 5.0f; if (lbl_1_bss_28 > 360.0f) { lbl_1_bss_28 -= 360.0f; } GXBegin(GX_QUADS, GX_VTXFMT0, 4); - + GXPosition3f32(0.0f, 0.0f, 0.0f); GXTexCoord2f32(0.0f, 1.0f); GXNormal3f32(0.0f, var_f30 / 640.0f, var_f29 / 480.0f); - + GXPosition3f32(640.0f, 0.0f, 0.0f); GXTexCoord2f32(0.0f, 1.0f); GXNormal3f32(0.0f, var_f28 / 640.0f, var_f29 / 480.0f); diff --git a/src/REL/w03Dll/main.c b/src/REL/w03Dll/main.c index 8671684d..2bd2656b 100644 --- a/src/REL/w03Dll/main.c +++ b/src/REL/w03Dll/main.c @@ -7,7 +7,9 @@ #include "game/wipe.h" #include "REL/w03Dll.h" #include "game/board/lottery.h" +#include "game/board/main.h" #include "game/board/model.h" +#include "game/board/shop.h" #include "game/board/space.h" #include "game/board/star.h" #include "game/object.h" @@ -30,7 +32,6 @@ void fn_1_10B0(void); s32 fn_1_12C8(void); s32 fn_8006DDE8(s16, f32); void fn_1_10E4(omObjData* arg0); -extern Process *boardObjMan; typedef void (*VoidFunc)(void); extern const VoidFunc _ctors[]; extern const VoidFunc _dtors[]; diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index 0f3dd29d..14e63a01 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -3,6 +3,7 @@ #include "game/hsfman.h" #include "game/board/lottery.h" #include "game/board/model.h" +#include "game/board/shop.h" #include "game/board/space.h" #include "game/board/star.h" #include "game/board/tutorial.h" diff --git a/src/REL/w10Dll/scene.c b/src/REL/w10Dll/scene.c index 6d5b6783..270f6e41 100644 --- a/src/REL/w10Dll/scene.c +++ b/src/REL/w10Dll/scene.c @@ -3,6 +3,7 @@ #include "game/board/lottery.h" #include "game/board/main.h" #include "game/board/model.h" +#include "game/board/shop.h" #include "game/board/space.h" #include "game/board/star.h" #include "game/board/tutorial.h" diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c index 9c57220a..b10a9f25 100755 --- a/src/game/board/lottery.c +++ b/src/game/board/lottery.c @@ -51,8 +51,6 @@ typedef struct { s16 unk08; } LotteryTicketPickWork; -extern s32 BoardShopHostGet(void); - static void CreateModel(void); static void KillModel(void); static void DestroyLottery(void); diff --git a/src/game/board/main.c b/src/game/board/main.c index e6f6d717..5db7bf48 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -14,6 +14,7 @@ #include "game/board/model.h" #include "game/board/pause.h" #include "game/board/player.h" +#include "game/board/shop.h" #include "game/board/space.h" #include "game/board/tutorial.h" #include "game/board/ui.h" diff --git a/src/game/board/model.c b/src/game/board/model.c index 18b67186..cfffff7e 100644 --- a/src/game/board/model.c +++ b/src/game/board/model.c @@ -249,16 +249,16 @@ s16 BoardModelCreateCharacter(s32 character, s32 data_num, s32 *mot_list, s32 li s16 BoardModelCreateParam(BoardModelParam *param, Vec *pos, Vec *rot) { float unk_param; - s16 model = BoardModelCreate(param->data_num, NULL, param->link); + s16 model = BoardModelCreate(param->data_num, NULL, param->unk4.link); if(model == -1) { return -1; } - BoardModelMotionStart(model, 0, (param->pause) ? 0x40000001 : 0); - if(!param->start_mot) { + BoardModelMotionStart(model, 0, (param->unk4.pause) ? 0x40000001 : 0); + if(!param->unk4.start_mot) { BoardModelMotionSpeedSet(model, 0.0f); } - BoardModelExistDupe(model, param->field04_bit0); - BoardModelVisibilitySet(model, param->visible); + BoardModelExistDupe(model, param->unk4.field04_bit0); + BoardModelVisibilitySet(model, param->unk4.visible); if(pos) { BoardModelPosSetV(model, pos); } diff --git a/src/game/board/shop.c b/src/game/board/shop.c new file mode 100755 index 00000000..c5e6ebe6 --- /dev/null +++ b/src/game/board/shop.c @@ -0,0 +1,1175 @@ +#include "game/board/shop.h" +#include "game/audio.h" +#include "game/gamework.h" +#include "game/gamework_data.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/board/audio.h" +#include "game/board/com.h" +#include "game/board/com_path.h" +#include "game/board/item.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/space.h" +#include "game/board/tutorial.h" +#include "game/board/ui.h" +#include "game/board/view.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "math.h" + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 4; + }; + u8 unk01; + s8 unk02; + s8 unk03; + s8 unk04; + char unk05[1]; + s16 unk06; +} ShopWinWork; + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 3; + }; + char unk01[1]; + s16 unk02; + u16 unk04; +} ItemGiveWork; + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 2; + }; + u8 unk01; + s8 unk02; + s8 unk03; + u8 unk04; + u8 unk05; + s16 unk06; +} ItemChoiceWork; + +static void ExecShop(void); +static void DestroyShop(void); +static void PopupShop(void); +static void CloseShop(void); +static void CreateShopWin(void); +static void UpdateShopWin(omObjData *arg0); +static void SetShopWinItem(ShopWinWork *arg0, omObjData *arg1); +static void PauseShopWin(void); +static void StartItemGive(void); +static void ExecItemGive(omObjData *arg0); +static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1); +static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1); +static void WaitItemGive(omObjData *arg0, ItemGiveWork *arg1); +static void GetShopItems(s32 arg0); +static void GetDefaultShopItems(s32 arg0); +static void SortShopItems(void); +static void DecideComEnter(s32 arg0); +static void DecideComBuy(s32 arg0); +static s32 GetComItemChoice(s32 arg0); +static void WaitItemChoice(void); +static void CreateShopItemChoice(s32 arg0, s32 arg1); +static s32 GetShopItemChoice(void); +static s32 GetShopItemWinChoice(void); +static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1); +static void UpdateShopItemChoice(omObjData *arg0); +static void GetShopItemChoiceInput(ItemChoiceWork *arg0, omObjData *arg1, u32 *arg2); + +static s32 activeItemTbl[5]; +static s32 choiceEnableTbl[6]; + +static s16 shopMdlIdx[2][1]; +static s16 *shopMdlPtr; +static s8 shopPlayer; +static s16 angleVal; +static s32 comF; +static omObjData *itemChoiceObj; +static omObjData *itemGiveObj; +static omObjData *shopWinObj; +static Process *shopProc; + +static s16 itemMdl = -1; +static s8 itemChoice = -1; + +static BoardModelParam shopMdlParam[1] = { + { 0x00070094, { 0, 1, 0, 0, 0 }, -1 } +}; + +static s16 hostMdl = -1; +static s16 shopMot[3] = { -1, -1, -1 }; +static s8 itemCurChoice = -1; + +static s8 defaultItemTbl[5] = { + 0x05, 0x07, 0x02, 0x03, 0x00 +}; + +static s32 hostMessTbl[] = { + 0x000F0004, + 0x000F0007, + 0x000F000A, + 0x000F000D, + 0x000F0010, + 0x000F0013, + 0x000F0004, + 0x000F0024, + 0x000F0024 +}; + +static s8 itemPriceTbl[] = { + 5, 5, 15, 15, + 10, 10, 15, 15, + 15, 15, 0, 25, + 30, 30, 0, 0 +}; + +static s32 shopMotTbl[9][3] = { + { 0x00020001, 0x00020003, 0x00020004 }, + { 0x00020009, 0x0002000B, 0x0002000C }, + { 0x0002000E, 0x00020010, 0x00020011 }, + { 0x00020018, 0x0002001A, 0x0002001B }, + { 0x0002001D, 0x0002001F, 0x00020020 }, + { 0x00020022, 0x00020024, 0x00020025 }, + { 0x00020009, 0x0002000B, 0x0002000C }, + { 0x0002002A, 0x0002002C, 0x0002002D }, + { 0x0002002A, 0x0002002C, 0x0002002D } +}; + +void BoardShopHostSet(s16 arg0) { + hostMdl = arg0; +} + +s16 BoardShopHostGet(void) { + return hostMdl; +} + +void BoardShopInit(void) { + BoardModelParam *var_r29; + Vec sp1C; + Vec sp10; + s32 j; + s32 i; + s32 sp8[2] = { + 0x00080000, + 0x00100000 + }; + + for (i = 0; i < 2; i++) { + BoardSpaceLinkTransformGet(sp8[i], &sp1C, &sp10, 0); + sp1C.y -= 5.0f; + for (j = 0; j < 1; j++) { + var_r29 = &shopMdlParam[j]; + shopMdlIdx[i][j] = BoardModelCreateParam(var_r29, &sp1C, &sp10); + } + } + BoardModelVisibilitySet(hostMdl, 0); +} + +void BoardShopKill(void) { + s32 i; + s32 j; + + for (i = 0; i < 2; i++) { + for (j = 0; j < 1; j++) { + if (shopMdlIdx[i][j] != -1) { + BoardModelKill(shopMdlIdx[i][j]); + shopMdlIdx[i][j] = -1; + } + } + } +} + +void BoardShopExec(s32 player, s32 space) { + if (BoardPlayerSizeGet(GWSystem.player_curr) == 2) { + return; + } + shopPlayer = player; + BoardDiceDigit2DShowSet(0); + shopProc = HuPrcChildCreate(ExecShop, 0x2003, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(shopProc, DestroyShop); + while (shopProc) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); +} + +static void ExecShop(void) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float var_f30; + float temp_f31; + s16 temp_r25; + s16 temp_r28; + u32 var_r30; + s32 var_r29; + s32 temp_r27; + s32 temp_r26; + s32 temp_r24; + s32 var_r23; + s32 i; + + itemCurChoice = -1; + temp_r27 = GWBoardGet(); + temp_r26 = BoardWinPortraitGet(); + comF = 0; + temp_r28 = GWPlayer[shopPlayer].space_curr; + if (BoardSpaceFlagGet(0, temp_r28) & 0x80000) { + shopMdlPtr = shopMdlIdx[0]; + } else { + shopMdlPtr = shopMdlIdx[1]; + } + BoardPlayerIdleSet(shopPlayer); + var_r30 = 0; + if (BoardPlayerCoinsGet(shopPlayer) < 5) { + var_r30 = 0xF0003; + } + if (BoardPlayerItemCount(shopPlayer) == 3) { + var_r30 = 0xF0002; + } + if (GWSystem.turn == GWSystem.max_turn) { + var_r30 = 0xF0001; + } + if (var_r30 != 0) { + BoardWinCreate(0, var_r30, -1); + BoardWinWait(); + BoardWinKill(); + HuPrcEnd(); + } + BoardWinCreateChoice(0, 0xF0000, -1, 0); + DecideComEnter(shopPlayer); + BoardWinWait(); + if (BoardWinChoiceGet() != 0) { + HuPrcEnd(); + } + BoardWinKill(); + BoardAudSeqPause(0, 1, 1000); + BoardStatusShowSetAll(0); + temp_r25 = BoardSpaceLinkFlagSearch(0, temp_r28, 0x02000000); + BoardSpacePosGet(0, temp_r28, &sp38); + BoardSpacePosGet(0, temp_r25, &sp2C); + PSVECSubtract(&sp2C, &sp38, &sp20); + PSVECNormalize(&sp20, &sp20); + temp_f31 = 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI); + sp14.x = -10.0f; + sp14.y = temp_f31; + sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 170.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(shopMdlPtr[0], &sp14, &sp8, 1360.0f, -1.0f, 0x1B); + HuAudFXPlay(0x330); + HuAudFXPlay(0x32D); + PopupShop(); + BoardModelMotionShiftSet(BoardShopHostGet(), shopMot[2], 0.0f, 4.0f, 0); + HuPrcSleep(4); + BoardPlayerRotSet(shopPlayer, 0.0f, temp_f31, 0.0f); + BoardPlayerMoveBetween(shopPlayer, temp_r28, temp_r25); + BoardPlayerIdleSet(shopPlayer); + BoardMusStart(1, 3, 0x7F, 0); + while (!BoardModelMotionEndCheck(BoardShopHostGet())) { + HuPrcVSleep(); + } + BoardModelMotionStart(BoardShopHostGet(), shopMot[0], 0x40000001); + BoardStatusShowSetForce(shopPlayer); + BoardStatusShowSet(shopPlayer, 1); + GetShopItems(shopPlayer); + SortShopItems(); + while (1) { + BoardWinCreateChoice(1, hostMessTbl[temp_r27], temp_r26, 0); + BoardWinAttrSet(0x10); + DecideComBuy(shopPlayer); + BoardWinWait(); + var_r29 = BoardWinChoiceGet(); + if (var_r29 == 1) { + BoardWinCreate(2, hostMessTbl[temp_r27] + 1, temp_r26); + BoardWinWait(); + BoardWinKill(); + break; + } + if (var_r29 != 0) { + BoardViewMapExec(shopPlayer); + continue; + } + CreateShopWin(); + BoardWinCreate(1, hostMessTbl[temp_r27] + 2, temp_r26); + BoardWinPriSet(1000); + for (i = 0; i < 5; i++) { + var_r30 = activeItemTbl[i] + 0xF0000; + var_r30 += 0x16; + BoardWinInsertMesSet(var_r30, i); + var_r29 = itemPriceTbl[activeItemTbl[i]]; + if (var_r29 > BoardPlayerCoinsGet(shopPlayer)) { + BoardWinChoiceDisable(i); + choiceEnableTbl[i] = 0; + } else { + choiceEnableTbl[i] = 1; + } + } + choiceEnableTbl[5] = 1; + BoardWinSpeedSet(0); + BoardWinPause(); + BoardWinAttrSet(0x10); + HuPrcSleep(0xF); + var_r29 = GetComItemChoice(shopPlayer); + CreateShopItemChoice(shopPlayer, var_r29); + WaitItemChoice(); + itemCurChoice = GetShopItemChoice(); + BoardWinKill(); + HuPrcSleep(0xF); + if (itemCurChoice == -1 || itemCurChoice == 5 || itemCurChoice == 0x7F) { + PauseShopWin(); + } else { + PauseShopWin(); + while (!BoardStatusStopCheck(shopPlayer)) { + HuPrcVSleep(); + } + if (itemCurChoice == 5) { + BoardWinCreate(2, hostMessTbl[temp_r27] + 1, temp_r26); + BoardWinWait(); + BoardWinKill(); + break; + } + temp_r24 = itemPriceTbl[activeItemTbl[itemCurChoice]]; + if (temp_r24 >= 20) { + var_r23 = 3; + } else { + var_r23 = 6; + } + var_f30 = BoardDAngleCalc(180.0f + BoardPlayerRotYGet(shopPlayer)); + BoardPlayerMotBlendSet(shopPlayer, var_f30, 0xF); + for (i = 0; i < temp_r24; i++) { + BoardPlayerCoinsAdd(shopPlayer, -1); + HuAudFXPlay(0xE); + HuPrcSleep(var_r23); + } + HuAudFXPlay(0xF); + StartItemGive(); + while (!BoardPlayerMotBlendCheck(shopPlayer)) { + HuPrcVSleep(); + } + while (itemGiveObj) { + HuPrcVSleep(); + } + if (activeItemTbl[itemCurChoice] != 0xD) { + BoardPlayerItemAdd(shopPlayer, activeItemTbl[itemCurChoice]); + } + BoardPlayerMotionShiftSet(shopPlayer, 0xC, 0.0f, 4.0f, 0); + HuPrcSleep(5); + BoardPlayerMotionEndWait(shopPlayer); + HuPrcSleep(15); + break; + } + } + BoardAudSeqFadeOut(1, 1000); + BoardModelVisibilitySet(itemMdl, 0); + BoardModelMotionShiftSet(BoardShopHostGet(), shopMot[1], 0.0f, 10.0f, 0x40000001); + BoardStatusShowSet(shopPlayer, 0); + BoardCameraTargetPlayerSet(shopPlayer); + BoardCameraMotionWait(); + BoardCameraViewSet(1); + BoardPlayerRotSet(shopPlayer, 0.0f, temp_f31, 0.0f); + BoardPlayerMoveBetween(shopPlayer, temp_r25, temp_r28); + BoardPlayerIdleSet(shopPlayer); + BoardStatusShowSetAll(1); + BoardCameraMotionWait(); + BoardAudSeqPause(0, 0, 1000); + CloseShop(); + HuPrcEnd(); +} + +static void DestroyShop(void) { + s16 temp_r30; + s32 i; + + for (i = 0; i < 2; i++) { + BoardModelHookReset(shopMdlIdx[0][i]); + } + temp_r30 = BoardShopHostGet(); + for (i = 0; i < 3; i++) { + if (shopMot[i] != -1) { + BoardModelMotionKill(temp_r30, shopMot[i]); + shopMot[i] = -1; + } + } + PauseShopWin(); + if (itemMdl != -1) { + BoardModelKill(itemMdl); + itemMdl = -1; + } + shopProc = NULL; +} + +static void PopupShop(void) { + s32 i; + + for (i = 0; i < 2; i++) { + BoardModelHookSet(shopMdlIdx[i][0], "shop_noko", BoardShopHostGet()); + } + for (i = 0; i < 3; i++) { + shopMot[i] = BoardModelMotionCreate(BoardShopHostGet(), shopMotTbl[GWBoardGet()][i]); + } + BoardModelMotionStart(BoardShopHostGet(), shopMot[0], 0x40000001); + BoardModelVisibilitySet(BoardShopHostGet(), 1); + BoardModelMotionStart(BoardShopHostGet(), 1, 0x40000001); + BoardModelMotionStart(shopMdlPtr[0], 0, 0); + BoardModelMotionSpeedSet(shopMdlPtr[0], 1.0f); + omVibrate(shopPlayer, 0xC, 6, 6); + HuAudFXPlay(0x32D); + HuAudFXPlay(0x344); + while (BoardModelMotionTimeGet(shopMdlPtr[0]) < 14.0f) { + HuPrcVSleep(); + } + HuAudFXPlay(0x32E); + while (BoardModelMotionTimeGet(shopMdlPtr[0]) < 28.0f) { + HuPrcVSleep(); + } + HuAudFXPlay(0x32F); + while (!BoardModelMotionEndCheck(shopMdlPtr[0])) { + HuPrcVSleep(); + } +} + +static void CloseShop(void) { + BoardModelMotionStart(shopMdlPtr[0], 0, 0x40000004); + while (BoardModelMotionTimeGet(shopMdlPtr[0]) > 28.0f) { + HuPrcVSleep(); + } + HuAudFXPlay(0x32F); + while (BoardModelMotionEndCheck(shopMdlPtr[0]) == 0) { + HuPrcVSleep(); + } + HuAudFXPlay(0x32E); + BoardModelAttrReset(shopMdlPtr[0], 0x40000004); + BoardModelMotionSpeedSet(shopMdlPtr[0], 0.0f); + BoardModelVisibilitySet(BoardShopHostGet(), 0); +} + +static void CreateShopWin(void) { + Vec sp8; + omObjData *var_r31; + ShopWinWork *var_r30; + + var_r31 = omAddObjEx(boardObjMan, 0x109, 0, 0, -1, UpdateShopWin); + var_r30 = OM_GET_WORK_PTR(var_r31, ShopWinWork); + var_r30->unk00_field0 = 0; + var_r30->unk06 = -1; + var_r30->unk00_field1 = 0xFF; + var_r30->unk02 = -1; + var_r30->unk03 = -1; + var_r30->unk01 = 0xC; + var_r30->unk04 = 0; + shopWinObj = var_r31; + var_r30->unk06 = HuWinCreate(36.0f, 344.0f, 0x1F8, 0x60, 0); + HuWinMesSpeedSet(var_r30->unk06, 0); + HuWinDrawNoSet(var_r30->unk06, 0x40); + HuWinExAnimIn(var_r30->unk06); + sp8.x = 84.0f; + sp8.y = 392.0f; + sp8.z = 400.0f; + var_r31->scale.x = var_r31->scale.y = var_r31->scale.z = 0.25f; + Hu3D2Dto3D(&sp8, 1, &sp8); + var_r31->trans.x = sp8.x; + var_r31->trans.y = sp8.y; + var_r31->trans.z = sp8.z; + var_r31->scale.x = var_r31->scale.y = var_r31->scale.z = 1.0f; +} + +static void UpdateShopWin(omObjData *arg0) { + Vec spC; + float var_f29; + float var_f28; + ShopWinWork *temp_r28; + Mtx sp48; + Mtx sp18; + + temp_r28 = OM_GET_WORK_PTR(arg0, ShopWinWork); + if (temp_r28->unk00_field0 != 0 || BoardIsKill()) { + if (temp_r28->unk06 != -1) { + HuWinKill(temp_r28->unk06); + } + shopWinObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r28->unk01 != 0) { + temp_r28->unk01--; + return; + } + temp_r28->unk02 = GetShopItemWinChoice(); + if (temp_r28->unk02 != -1) { + if (temp_r28->unk04 == 90 && temp_r28->unk03 != temp_r28->unk02) { + if (temp_r28->unk02 == 5) { + HuWinDispOff(temp_r28->unk06); + if (temp_r28->unk00_field0 == 0) { + BoardModelVisibilitySet(itemMdl, 0); + } + } else { + HuWinDispOn(temp_r28->unk06); + SetShopWinItem(temp_r28, arg0); + BoardModelVisibilitySet(itemMdl, 1); + temp_r28->unk04 = 0; + } + temp_r28->unk03 = temp_r28->unk02; + } + if (itemChoice == 0x7F) { + BoardModelVisibilitySet(itemMdl, 0); + HuWinDispOff(temp_r28->unk06); + } + var_f29 = 0.0f; + if (temp_r28->unk04 < 90) { + temp_r28->unk04 += 15; + if (temp_r28->unk04 > 90) { + temp_r28->unk04 = 90; + } + OSs8tof32(&temp_r28->unk04, &var_f28); + arg0->scale.x = arg0->scale.y = arg0->scale.z = 0.25 * sin(var_f28 * M_PI / 180.0); + } + if (temp_r28->unk00_field1 == 5) { + var_f29 = -12.5f; + } + arg0->rot.y = BoardDAngleCalc(arg0->rot.y + 2.0f); + BoardCameraRotGet(&spC); + PSMTXRotRad(sp48, 'y', MTXDegToRad(arg0->rot.y)); + PSMTXRotRad(sp18, 'x', MTXDegToRad(spC.x + 10.0f)); + PSMTXConcat(sp18, sp48, sp48); + BoardModelMtxSet(itemMdl, &sp48); + BoardModelRotSet(itemMdl, 0.0f, 0.0f, 0.0f); + BoardModelPosSet(itemMdl, arg0->trans.x, arg0->trans.y + var_f29, arg0->trans.z); + BoardModelScaleSet(itemMdl, arg0->scale.x, arg0->scale.y, arg0->scale.z); + OSf32tos16(&arg0->rot.y, &angleVal); + } +} + +static void SetShopWinItem(ShopWinWork *arg0, omObjData *arg1) { + Vec spC; + s32 var_r26; + s8 temp_r28; + + temp_r28 = activeItemTbl[arg0->unk02]; + if (arg0->unk00_field1 != temp_r28) { + if (itemMdl != -1) { + BoardModelKill(itemMdl); + itemMdl = -1; + } + var_r26 = BoardItemModelGet(temp_r28); + itemMdl = BoardModelCreate(var_r26, NULL, 0); + BoardModelLayerSet(itemMdl, 6); + HuWinMesSet(arg0->unk06, BoardItemNameGet(temp_r28)); + arg0->unk04 = 0; + arg0->unk00_field1 = temp_r28; + if (temp_r28 == 4) { + BoardModelMotionStart(itemMdl, 0, 0x40000001); + BoardModelMotionSpeedSet(itemMdl, 0.033333335f); + } + BoardCameraDirGet(&spC); + arg1->rot.y = BoardDAngleCalc(180.0 * (atan2(-spC.x, -spC.z) / M_PI)); + OSf32tos16(&arg1->rot.y, &angleVal); + } +} + +static void PauseShopWin(void) { + if (shopWinObj) { + OM_GET_WORK_PTR(shopWinObj, ShopWinWork)->unk00_field0 = 1; + shopWinObj = NULL; + } +} + +void StartItemGive(void) { + Vec sp14; + Vec sp8; + omObjData *temp_r30; + ItemGiveWork *temp_r29; + Mtx sp20; + + temp_r30 = omAddObjEx(boardObjMan, 0x109, 0, 0, -1, ExecItemGive); + itemGiveObj = temp_r30; + temp_r29 = OM_GET_WORK_PTR(temp_r30, ItemGiveWork); + temp_r29->unk00_field0 = 0; + temp_r29->unk00_field1 = 0; + temp_r29->unk04 = 0; + temp_r29->unk02 = 0; + BoardModelMotionStart(itemMdl, 0, 0); + BoardModelMotionSpeedSet(itemMdl, 0.0f); + BoardModelPosGet(itemMdl, &sp14); + PSMTXIdentity(sp20); + BoardModelMtxSet(itemMdl, &sp20); + OSs16tof32(&angleVal, &temp_r30->scale.z); + temp_r30->scale.z = -temp_r30->scale.z / 40.0f; + temp_r30->scale.x = 0.25f; + temp_r30->scale.y = 0.015f; + BoardPlayerPosGet(shopPlayer, &sp8); + temp_r30->trans.x = sp14.x; + temp_r30->trans.y = sp14.y; + temp_r30->trans.z = sp14.z; + temp_r30->rot.y = sp8.y + 250.0f; + temp_r30->rot.x = (sp8.x - sp14.x) / 50.0f; + temp_r30->rot.z = (sp8.z - sp14.z) / 50.0f; + itemGiveObj = temp_r30; +} + +static void ExecItemGive(omObjData *arg0) { + ItemGiveWork *temp_r29; + float var_f30; + + temp_r29 = OM_GET_WORK_PTR(arg0, ItemGiveWork); + if (temp_r29->unk00_field0 != 0 || BoardIsKill()) { + itemGiveObj = NULL; + BoardModelVisibilitySet(itemMdl, 0); + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r29->unk04 != 0) { + temp_r29->unk04--; + return; + } + switch (temp_r29->unk00_field1) { + case 0: + MoveItemGive(arg0, temp_r29); + break; + case 1: + ShrinkItemGive(arg0, temp_r29); + break; + case 2: + WaitItemGive(arg0, temp_r29); + break; + } + OSs16tof32(&angleVal, &var_f30); + BoardModelPosSet(itemMdl, arg0->trans.x, arg0->trans.y, arg0->trans.z); + BoardModelScaleSet(itemMdl, arg0->scale.x, arg0->scale.x, arg0->scale.x); + BoardModelRotYSet(itemMdl, var_f30); +} + +static void MoveItemGive(omObjData *arg0, ItemGiveWork *arg1) { + Vec sp1C; + Vec sp10; + float temp_f27; + float var_f26; + + if (arg1->unk02 >= 50.0f) { + arg1->unk02 = 0; + if (activeItemTbl[itemCurChoice] == 0xD) { + arg1->unk00_field1 = 2; + BoardMakeRandomItem(); + BoardItemStart(GWSystem.player_curr, 0xD); + } else { + arg1->unk00_field1 = 1; + arg1->unk04 = 0xF; + BoardPlayerPosGet(shopPlayer, &sp1C); + if (BoardPlayerSizeGet(shopPlayer) == 1) { + arg0->rot.x = (sp1C.y + 30.0f - arg0->trans.y) / 22.5f; + } else { + arg0->rot.x = (sp1C.y + 70.0f - arg0->trans.y) / 22.5f; + } + arg0->trans.y = arg0->rot.y; + arg0->scale.x = 1.0f; + } + return; + } + OSs16tof32(&arg1->unk02, &temp_f27); + arg0->trans.y += 12.0f; + if (arg1->unk02 >= 40.0f) { + BoardPlayerPosGet(shopPlayer, &sp1C); + arg0->scale.x = 1.0f; + arg0->trans.x = sp1C.x; + arg0->trans.z = sp1C.z; + temp_f27 = 40.0f - (50.0f - temp_f27); + temp_f27 = -0.08166667f * temp_f27 * temp_f27; + arg0->trans.y += temp_f27; + BoardCameraDirGet(&sp10); + var_f26 = BoardDAngleCalc(180.0 * (atan2(-sp10.x, -sp10.z) / M_PI)); + OSf32tos16(&var_f26, &angleVal); + } else { + arg0->scale.x += arg0->scale.y; + arg0->trans.x += arg0->rot.x; + arg0->trans.z += arg0->rot.z; + OSs16tof32(&angleVal, &var_f26); + var_f26 += arg0->scale.z; + OSf32tos16(&var_f26, &angleVal); + } + if (arg0->trans.y < arg0->rot.y) { + arg0->trans.y = arg0->rot.y; + } + arg1->unk02++; +} + +static void ShrinkItemGive(omObjData *arg0, ItemGiveWork *arg1) { + float var_f30; + + if (arg1->unk02 == 0) { + HuAudFXPlay(0x30D); + } + if (arg1->unk02 >= 90) { + arg1->unk00_field0 = 1; + BoardModelVisibilitySet(itemMdl, 0); + return; + } + OSs16tof32(&arg1->unk02, &var_f30); + if (BoardPlayerSizeGet(shopPlayer) != 1) { + var_f30 *= 1.5f; + } + if (var_f30 > 90.0f) { + var_f30 = 90.0f; + } + arg0->scale.x = cos(var_f30 * M_PI / 180.0); + arg0->trans.y += arg0->rot.x; + angleVal += 8; + if (angleVal > 360) { + angleVal -= 360; + } + arg1->unk02 += 4; +} + +static void WaitItemGive(omObjData *arg0, ItemGiveWork *arg1) { + if (arg1->unk02 > 20) { + BoardModelVisibilitySet(itemMdl, 0); + } else { + arg1->unk02++; + } + if (BoardItemDoneCheck()) { + arg1->unk00_field0 = 1; + } +} + +static s8 itemPrioTbl[2][5][14] = { + { + { 0x14, 0x14, 0x0F, 0x0F, 0x05, 0x07, 0x05, 0x05, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00 }, + { 0x0F, 0x0F, 0x0D, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x07, 0x00, 0x05, 0x00, 0x00 }, + { 0x07, 0x07, 0x0E, 0x0C, 0x0A, 0x0A, 0x0A, 0x08, 0x05, 0x09, 0x00, 0x08, 0x00, 0x00 }, + { 0x0A, 0x0A, 0x0D, 0x0C, 0x0A, 0x0A, 0x07, 0x0A, 0x05, 0x05, 0x00, 0x08, 0x00, 0x00 }, + { 0x07, 0x07, 0x0D, 0x0A, 0x0D, 0x07, 0x0A, 0x0A, 0x07, 0x08, 0x00, 0x08, 0x00, 0x00 } + }, + { + { 0x0F, 0x0F, 0x12, 0x0F, 0x05, 0x05, 0x05, 0x05, 0x00, 0x05, 0x00, 0x02, 0x05, 0x05 }, + { 0x0F, 0x0F, 0x0D, 0x0A, 0x07, 0x0A, 0x07, 0x03, 0x00, 0x07, 0x00, 0x00, 0x05, 0x08 }, + { 0x05, 0x04, 0x0D, 0x0C, 0x0A, 0x05, 0x0A, 0x08, 0x05, 0x05, 0x00, 0x05, 0x08, 0x0A }, + { 0x07, 0x04, 0x0D, 0x0C, 0x08, 0x08, 0x07, 0x0A, 0x05, 0x05, 0x00, 0x05, 0x08, 0x08 }, + { 0x03, 0x02, 0x0D, 0x0A, 0x0D, 0x03, 0x08, 0x08, 0x07, 0x07, 0x00, 0x08, 0x08, 0x0A } + } +}; + +static s8 rankItemGroupTbl[2][4][3] = { + { + { 0x00, 0x01, 0x03 }, { 0x00, 0x02, 0x04 }, + { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 } + }, + { + { 0x00, 0x01, 0x03 }, { 0x00, 0x02, 0x04 }, + { 0x00, 0x02, 0x04 }, { 0x00, 0x02, 0x04 } + } +}; + +static float cursorPosTbl[6][2] = { + { 190.0f, 182.0f }, + { 190.0f, 208.0f }, + { 190.0f, 234.0f }, + { 190.0f, 260.0f }, + { 190.0f, 286.0f }, + { 190.0f, 312.0f } +}; + +static void GetShopItems(s32 arg0) { + s32 temp_r25; + s32 temp_r20; + s32 temp_r19; + s32 temp_r18; + s32 var_r24; + s32 var_r23; + s32 temp_r22; + s32 var_r27; + s32 var_r26; + s32 var_r28; + s32 var_r29; + s32 var_r30; + + temp_r22 = 3.0f * ((float) GWSystem.turn / GWSystem.max_turn); + if (BoardPlayerCoinsGet(arg0) < 30) { + var_r27 = 0; + } else { + var_r27 = 1; + } + temp_r19 = rankItemGroupTbl[var_r27][GWPlayer[arg0].rank][temp_r22]; + activeItemTbl[0] = activeItemTbl[1] = activeItemTbl[2] = activeItemTbl[3] = activeItemTbl[4] = -1; + temp_r20 = BoardPlayerCoinsGet(shopPlayer); + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + GetDefaultShopItems(arg0); + return; + } + var_r23 = 0; + var_r29 = 0; + while (var_r29 < 5) { + temp_r18 = BoardRandMod(100); + var_r26 = 0; + for (var_r30 = 13; var_r30 >= 0; var_r30--) { + temp_r25 = itemPrioTbl[var_r27][temp_r19][var_r30]; + if (temp_r25 != 0) { + var_r26 += temp_r25; + if (temp_r18 <= var_r26) { + var_r24 = 0; + for (var_r28 = 0; var_r28 < var_r29; var_r28++) { + if (var_r30 == activeItemTbl[var_r28]) { + var_r24 = 1; + break; + } + } + if (var_r24 == 0 && (temp_r20 >= itemPriceTbl[var_r30] || var_r23 != 0)) { + var_r23 = 1; + activeItemTbl[var_r29] = var_r30; + break; + } + } + } + } + if (activeItemTbl[var_r29] != -1) { + var_r29++; + } + } +} + +static void GetDefaultShopItems(s32 arg0) { + s32 temp_r29; + s32 var_r31; + s32 var_r30; + + temp_r29 = BoardRandMod(100); + if (temp_r29 > 90) { + var_r30 = 3; + } else if (temp_r29 > 40) { + var_r30 = BoardRandMod(2) + 1; + } else { + var_r30 = 0; + } + for (var_r31 = 0; var_r31 < 5; var_r31++) { + activeItemTbl[var_r31] = defaultItemTbl[var_r30]; + } +} + +static void SortShopItems(void) { + s32 sp8[5]; + s32 var_r29; + s32 i; + s32 j; + + for (i = 0; i < 5; i++) { + sp8[i] = itemPriceTbl[activeItemTbl[i]]; + } + for (i = 0; i < 4; i++) { + for (j = 4; j >= i + 1; j--) { + if (sp8[j] < sp8[j - 1]) { + var_r29 = activeItemTbl[j]; + activeItemTbl[j] = activeItemTbl[j - 1]; + activeItemTbl[j - 1] = var_r29; + var_r29 = sp8[j]; + sp8[j] = sp8[j - 1]; + sp8[j - 1] = var_r29; + } + } + } +} + +static void DecideComEnter(s32 arg0) { + s32 temp_r27; + s32 temp_r30; + s32 temp_r29; + s32 temp_r26; + u32 var_r28; + + if (!GWPlayer[arg0].com) { + return; + } + temp_r26 = GWPlayer[arg0].roll; + switch (GWPlayer[arg0].diff) { + case 0: + var_r28 = 40; + break; + case 1: + var_r28 = 20; + break; + case 2: + var_r28 = 4; + break; + case 3: + var_r28 = 0; + break; + } + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + if (BoardPlayerCoinsGet(arg0) < 15) { + BoardComKeySetRight(); + return; + } + } else { + temp_r27 = GWPlayer[arg0].space_curr; + temp_r30 = BoardComPathShortcutLenGet(temp_r27, 8, 0); + temp_r29 = BoardComPathShortcutLenGet(temp_r27, 8, 1); + if ((temp_r30 != 0 || temp_r29 != 0) + && (BoardPlayerCoinsGet(arg0) >= 17 || (temp_r29 >= temp_r26 && temp_r30 >= temp_r26)) + && BoardPlayerCoinsGet(arg0) < 40 + && ((temp_r30 < 20 && temp_r30 > 0) || (temp_r29 < 10 && temp_r29 > 0)) + && BoardRandMod(100) > var_r28) { + BoardComKeySetRight(); + return; + } + } + BoardComKeySetLeft(); +} + +static void DecideComBuy(s32 arg0) { + if (!GWPlayer[arg0].com) { + return; + } + if (comF != 0) { + BoardComKeySetDown(); + } else { + BoardComKeySetUp(); + } +} + +static s32 GetComItemChoice(s32 arg0) { + s16 sp8; + s32 temp_r26; + s32 var_r28 = 0; + s8 var_r25; + s8 var_r27; + s8 var_r30; + s32 i; + + if (!GWPlayer[arg0].com) { + return 0; + } + sp8 = GWPlayer[arg0].space_curr; + temp_r26 = BoardPlayerCoinsGet(arg0); + for (var_r27 = i = 0; i < 5; i++) { + if (temp_r26 >= itemPriceTbl[activeItemTbl[i]]) { + var_r30 = BoardComItemWeightGet(arg0, activeItemTbl[i]); + } else { + var_r30 = 0; + } + if (BoardPlayerItemFind(arg0, activeItemTbl[i]) != -1) { + var_r30 = 0; + } + if (var_r30 > var_r27) { + var_r27 = var_r30; + var_r25 = i; + } + } + if (var_r27 == 0) { + comF = 1; + var_r28 = 5; + } else { + var_r28 = var_r25; + } + return var_r28; +} + +static void WaitItemChoice(void) { + while (itemChoiceObj) { + HuPrcVSleep(); + } +} + +static void CreateShopItemChoice(s32 arg0, s32 arg1) { + omObjData *temp_r30; + ItemChoiceWork *var_r31; + s16 spC; + + temp_r30 = omAddObjEx(boardObjMan, 0x7E01, 0, 0, -1, UpdateShopItemChoice); + itemChoiceObj = temp_r30; + itemChoice = -1; + var_r31 = OM_GET_WORK_PTR(temp_r30, ItemChoiceWork); + var_r31->unk00_field0 = 0; + var_r31->unk00_field1 = arg0; + var_r31->unk01 = 0xA; + var_r31->unk05 = 0; + var_r31->unk02 = 0; + var_r31->unk03 = arg1; + var_r31->unk06 = HuSprGrpCreate(1); + temp_r30->trans.x = cursorPosTbl[0][0]; + temp_r30->trans.y = cursorPosTbl[0][1]; + if (GWLanguageGet() != 0) { + temp_r30->trans.x -= 24.0f; + } + if (GWPlayer[arg0].com) { + var_r31->unk01 = GWMessDelayGet(); + } + BoardSpriteCreate(0x70055, 0x3DE, NULL, &spC); + HuSprGrpMemberSet(var_r31->unk06, 0, spC); + HuSprAttrSet(var_r31->unk06, 0, 8); + HuSprPosSet(var_r31->unk06, 0, temp_r30->trans.x, temp_r30->trans.y); +} + +static s32 GetShopItemChoice(void) { + return itemChoice; +} + +static s32 GetShopItemWinChoice(void) { + ItemChoiceWork *var_r31; + + if (!itemChoiceObj) { + return -1; + } + var_r31 = OM_GET_WORK_PTR(itemChoiceObj, ItemChoiceWork); + return var_r31->unk02; +} + +static void MoveShopItemChoice(omObjData *arg0, ItemChoiceWork *arg1) { + u32 sp8; + s32 temp_r28; + s32 temp_r29; + + temp_r28 = arg1->unk02; + arg0->trans.x = cursorPosTbl[arg1->unk02][0]; + arg0->trans.y = cursorPosTbl[arg1->unk02][1]; + if (GWLanguageGet() != 0) { + arg0->trans.x -= 24.0f; + } + if (GWPlayer[arg1->unk00_field1].com) { + GetShopItemChoiceInput(arg1, arg0, &sp8); + } else { + temp_r29 = GWPlayer[arg1->unk00_field1].port; + sp8 = HuPadDStkRep[temp_r29] | HuPadBtnDown[temp_r29]; + } + if (sp8 == 0x100) { + if (choiceEnableTbl[arg1->unk02] == 0) { + HuAudFXPlay(4); + return; + } + if (arg1->unk02 != 5) { + itemChoice = arg1->unk02; + } + HuAudFXPlay(2); + if (GWPlayer[arg1->unk00_field1].com) { + arg1->unk05 = 0x32; + } else { + arg1->unk05 = 5; + } + return; + } + if (sp8 == 0x200) { + itemChoice = 0x7F; + arg1->unk05 = 5; + HuAudFXPlay(3); + } + if (sp8 == 4) { + arg1->unk02++; + } + if (sp8 == 8) { + arg1->unk02--; + } + if (arg1->unk02 < 0) { + arg1->unk02 = 0; + } + if (arg1->unk02 >= 6) { + arg1->unk02 = 5; + } + if (arg1->unk02 != temp_r28) { + HuAudFXPlay(0); + arg1->unk04 = 4; + } +} + +static void UpdateShopItemChoice(omObjData *arg0) { + ItemChoiceWork *temp_r31; + + temp_r31 = OM_GET_WORK_PTR(arg0, ItemChoiceWork); + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + HuSprGrpKill(temp_r31->unk06); + itemChoiceObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r31->unk05 != 0) { + temp_r31->unk05--; + if (temp_r31->unk05 == 0) { + temp_r31->unk00_field0 = 1; + } + } else if (temp_r31->unk01 != 0) { + temp_r31->unk01--; + } else if (temp_r31->unk04 != 0) { + temp_r31->unk04--; + } else { + MoveShopItemChoice(arg0, temp_r31); + } + HuSprPosSet(temp_r31->unk06, 0, arg0->trans.x, arg0->trans.y); +} + +static void GetShopItemChoiceInput(ItemChoiceWork *arg0, omObjData *arg1, u32 *arg2) { + if (arg0->unk02 == arg0->unk03) { + *arg2 = 0x100; + } else { + *arg2 = 4; + } +} + +void BoardShopTutorialExec(s32 arg0) { + Vec sp48; + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + s32 sp14; + s32 sp10; + s16 sp8; + float temp_f31; + s16 temp_r27; + s32 i; + + sp14 = GWBoardGet(); + sp10 = BoardWinPortraitGet(); + if (BoardSpaceFlagGet(0, arg0) & 0x80000) { + shopMdlPtr = shopMdlIdx[0]; + } else { + shopMdlPtr = shopMdlIdx[1]; + } + temp_r27 = BoardSpaceLinkFlagSearch(0, arg0, 0x02000000); + BoardSpacePosGet(0, arg0, &sp48); + BoardSpacePosGet(0, temp_r27, &sp3C); + PSVECSubtract(&sp3C, &sp48, &sp30); + PSVECNormalize(&sp30, &sp30); + temp_f31 = 180.0 * (atan2(-sp30.x, -sp30.z) / M_PI); + sp24.x = -10.0f; + sp24.y = temp_f31; + sp24.z = 0.0f; + sp18.x = 0.0f; + sp18.y = 170.0f; + sp18.z = 0.0f; + BoardCameraMotionStartEx(shopMdlPtr[0], &sp24, &sp18, 1360.0f, -1.0f, 0x15); + HuAudFXPlay(0x330); + HuAudFXPlay(0x32D); + PopupShop(); + BoardModelMotionShiftSet(BoardShopHostGet(), shopMot[2], 0.0f, 4.0f, 0); + HuPrcSleep(4); + while (!BoardModelMotionEndCheck(BoardShopHostGet())) { + HuPrcVSleep(); + } + BoardModelMotionStart(BoardShopHostGet(), shopMot[0], 0x40000001); + BoardTutorialHookExec(0x1C, 0); + BoardModelMotionShiftSet(BoardShopHostGet(), shopMot[1], 0.0f, 10.0f, 0x40000001); + HuPrcSleep(30); + CloseShop(); + for (i = 0; i < 2; i++) { + BoardModelHookReset(shopMdlIdx[0][i]); + } + sp8 = BoardShopHostGet(); + for (i = 0; i < 3; i++) { + if (shopMot[i] != -1) { + BoardModelMotionKill(sp8, shopMot[i]); + shopMot[i] = -1; + } + } + PauseShopWin(); + if (itemMdl != -1) { + BoardModelKill(itemMdl); + itemMdl = -1; + } +} diff --git a/src/game/board/space.c b/src/game/board/space.c index acd4ee9a..a5cd7670 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -5,6 +5,7 @@ #include "game/board/main.h" #include "game/board/model.h" #include "game/board/player.h" +#include "game/board/shop.h" #include "game/board/space.h" #include "game/board/star.h" #include "game/board/tutorial.h" From eeff144f1c289c6b943495340ab637d84ebbf770 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 12 Mar 2024 09:48:48 -0500 Subject: [PATCH 066/106] Start board/bowser.c --- config/GMPE01_00/symbols.txt | 4 +- include/board_unsplit.h | 2 +- include/game/board/main.h | 3 + include/game/gamework_data.h | 6 +- src/game/board/bowser.c | 486 +++++++++++++++++++++++++++++++++++ src/game/board/main.c | 8 +- src/game/objsub.c | 2 +- 7 files changed, 500 insertions(+), 11 deletions(-) create mode 100644 src/game/board/bowser.c diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 619f7c39..0e457f48 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5928,8 +5928,8 @@ jumpMot = .sdata:0x801D3798; // type:object size:0x2 scope:local data:2byte starMdl = .sdata:0x801D379A; // type:object size:0x2 scope:local data:2byte lbl_801D37A0 = .sdata:0x801D37A0; // type:object size:0x8 lbl_801D37A8 = .sdata:0x801D37A8; // type:object size:0x8 -lbl_801D37B0 = .sdata:0x801D37B0; // type:object size:0x2 data:2byte -lbl_801D37B2 = .sdata:0x801D37B2; // type:object size:0x2 data:2byte +jumpMot = .sdata:0x801D37B0; // type:object size:0x2 scope:local data:2byte +scareMot = .sdata:0x801D37B2; // type:object size:0x2 scope:local data:2byte suitItemMdl = .sdata:0x801D37B4; // type:object size:0x2 scope:local data:2byte bowserMdl = .sdata:0x801D37B6; // type:object size:0x2 scope:local data:2byte lbl_801D37B8 = .sdata:0x801D37B8; // type:object size:0x3 data:string diff --git a/include/board_unsplit.h b/include/board_unsplit.h index d6ca8de1..cc378fc7 100644 --- a/include/board_unsplit.h +++ b/include/board_unsplit.h @@ -15,7 +15,7 @@ void BoardBooHouseHostSet(s16); s32 BoardCameraRotGet(Vec*); s32 BoardIsKill(void); -void BoardBowserExec(s32 player, s32 space); +s32 BoardBowserExec(s32 player, s32 space); void BoardFortuneExec(s32 player, s32 space); #endif diff --git a/include/game/board/main.h b/include/game/board/main.h index b58a40d1..22710325 100644 --- a/include/game/board/main.h +++ b/include/game/board/main.h @@ -72,6 +72,8 @@ extern omObjData *boardMainObj; typedef void (*BoardFunc)(void); typedef void (*BoardLightHook)(void); +typedef void (*BoardBowserHook)(s32 beforeF); + typedef void (*BoardCameraPosCalcFunc)(BoardCameraData *camera); typedef void (*BoardTurnStartHook)(s32 player, s32 space); @@ -79,6 +81,7 @@ typedef void (*BoardTurnStartHook)(s32 player, s32 space); extern BoardTurnStartHook boardTurnStartFunc; extern void (*boardStarShowNextHook)(void); extern void (*boardStarGiveHook)(void); +extern BoardBowserHook boardBowserHook; extern BoardFunc boardTurnFunc; extern BoardLightHook boardLightResetHook; extern BoardLightHook boardLightSetHook; diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index 1ab6b00d..6393b6e3 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -40,8 +40,8 @@ typedef struct system_state { /* 0x10 */ u8 ATTRIBUTE_ALIGN(4) board_data[32]; /* 0x30 */ u8 mess_delay; /* 0x31 */ struct { - u8 field31_bit0 : 4; - u8 field31_bit4 : 4; + u8 bowser_loss : 4; + u8 bowser_event : 4; }; /* 0x32 */ s8 unk_32; /* 0x34 */ u16 mg_next; @@ -98,7 +98,7 @@ typedef struct player_state { /* 0x22 */ s16 coins_max; /* 0x24 */ s16 coins_battle; /* 0x26 */ s16 unk_26; -/* 0x28 */ s16 coins_mg_gain; +/* 0x28 */ s16 coin_gain; /* 0x2A */ s16 stars; /* 0x2C */ s16 stars_max; /* 0x2E */ char unk_2E[2]; diff --git a/src/game/board/bowser.c b/src/game/board/bowser.c new file mode 100644 index 00000000..a0c2f285 --- /dev/null +++ b/src/game/board/bowser.c @@ -0,0 +1,486 @@ +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/audio.h" +#include "game/board/window.h" + +#include "game/objsub.h" +#include "game/sprite.h" +#include "game/audio.h" +#include "game/wipe.h" +#include "game/gamework.h" + +static s16 bowserSpr[11]; +static Vec playerPosTemp[4]; + +static s32 scareFxTbl[] = { + 0x128, + 0x168, + 0x1A8, + 0x1E8, + 0x228, + 0x268, + 0x2A8, + 0x2E8 +}; + + +static s8 eventPlayer; +static s8 eventType; +static s16 eventSpace; +static s16 playerMot[4]; +static s16 fireParMan; +static AnimData *fireAnim; +static char coinStealStrAll[8]; +static char coinStealStr[8]; +static omObjData *suitGiveObj; +static omObjData *miniBowserBalloonObj; +static omObjData *bowserEventObj; +static omObjData *miniBowserObj; +static omObjData *bowserObj; +static Process *bowserProc; + +static s16 jumpMot = -1; +static s16 scareMot = -1; +static s16 suitItemMdl = -1; +static s16 bowserMdl = -1; + +static void ExecBowser(void); +static void ExecBowserMain(void); +static void ExecMGReturn(void); +static void DestroyBowser(void); + +static void SquishPlayers(void); +static void ExecBowserSpecial(void); +static void ExecBowserGame(void); +static void DoMGReturnEffect(void); +static void ExecBowserShuffle(void); +static void ExecBowserRevo(void); +static void ExecBowserSuit(void); + +static void CreateBowserObj(void); + +static void SetBowserState(s32 state); +static s32 CheckBowserIdle(void); + +static void CreateBowserEvent(void); +static s32 CheckBowserEvent(void); +static void StopBowserEvent(void); + +static void ConfigBowserEvent(void); + +static void CreateMiniBowser(void); +static s32 CheckMiniBowser(void); + + +static void CreatePlayerMot(void); +static void KillPlayerMot(void); + +static void InitBowserFire(void); +static void KillBowserFire(void); + +static s32 ExecMiniBowserEvent(void); + +s32 BoardBowserExec(s32 player, s32 space) +{ + if(_CheckFlag(0x1000B)) { + HuAudFXPlay(841); + BoardCameraViewSet(2); + BoardPlayerMotBlendSet(player, 0, 15); + while(!BoardPlayerMotBlendCheck(player)) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + BoardTutorialHookExec(12, 0); + GWPlayer[player].color = 2; + } else { + eventPlayer = player; + eventSpace = space; + playerMot[0] = playerMot[1] = playerMot[2] = playerMot[3] = -1; + bowserProc = HuPrcChildCreate(ExecBowser, 8196, 14336, 0, boardMainProc); + HuPrcDestructorSet2(bowserProc, DestroyBowser); + while(bowserProc) { + HuPrcVSleep(); + } + GWPlayer[player].color = 2; + } +} + +typedef struct bowser_work { + u8 kill : 1; +} BowserWork; + +typedef struct mini_bowser_work { + u8 kill : 1; +} MiniBowserWork; + +typedef struct bowser_event_work { + u8 kill : 1; +} BowserEventWork; + +static void ExecBowser(void) +{ + s32 i; + s32 status; + if(!_CheckFlag(0x10003)) { + HuAudFXPlay(841); + omVibrate(eventPlayer, 12, 4, 2); + if(GWBoardGet() == 5 && boardBowserHook) { + boardBowserHook(1); + } + BoardAudSeqPause(0, 1, 1000); + if(BoardRandMod(100) < 20) { + eventType = 0; + } else { + eventType = 1; + } + } else { + BoardMusStart(1, 6, 127, 0); + } + status = BoardDataDirReadAsync(DATADIR_BKOOPA); + BoardDataAsyncWait(status); + CreatePlayerMot(); + if(!_CheckFlag(0x10003)) { + ExecBowserMain(); + } else { + ExecMGReturn(); + } + for(i=0; i<4; i++) { + if(eventSpace == GWPlayer[i].space_curr) { + BoardPlayerMotionSpeedSet(i, 1.0f); + } + } + BoardAudSeqPause(0, 0, 1000); + if(bowserObj) { + OM_GET_WORK_PTR(bowserObj, BowserWork)->kill = 1; + } + if(miniBowserObj) { + OM_GET_WORK_PTR(miniBowserObj, MiniBowserWork)->kill = 1; + } + if(bowserEventObj) { + OM_GET_WORK_PTR(bowserEventObj, BowserEventWork)->kill = 1; + } + GWPlayer[eventPlayer].show_next = 1; + BoardCameraMotionStartEx(-1, NULL, NULL, 2100.0f, -1.0f, 21); + HuPrcSleep(30); + for(i=0; i<4; i++) { + BoardPlayerIdleSet(i); + } + BoardCameraMotionWait(); + if(GWBoardGet() == 5 && boardBowserHook) { + boardBowserHook(0); + } else { + HuPrcSleep(30); + } + HuPrcEnd(); +} + +static void ExecBowserMain(void) +{ + s32 result = 0; + BoardPlayerMotBlendSet(eventPlayer, 0, 15); + while(!BoardPlayerMotBlendCheck(eventPlayer)) { + HuPrcVSleep(); + } + BoardMusStart(1, 5, 127, 0); + BoardCameraViewSet(3); + BoardFilterFadeInit(30, 160); + BoardCameraMotionWait(); + BoardPlayerMotionShiftSet(eventPlayer, jumpMot, 0.0f, 10.0f, 0x40000001); + BoardPlayerMotionSpeedSet(eventPlayer, 2.0f); + HuPrcSleep(120); + ConfigBowserEvent(); + HuAudFXPlay(scareFxTbl[GWPlayer[eventPlayer].character]); + BoardPlayerMotionShiftSet(eventPlayer, scareMot, 0.0f, 10.0f, 0); + CreateMiniBowser(); + while(!CheckMiniBowser()) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(eventPlayer); + if(eventType) { + result = ExecMiniBowserEvent(); + if(!result) { + return; + } + BoardAudSeqFadeOut(1, 1000); + BoardFilterFadeInit(30, 160); + HuPrcSleep(30); + } + ExecBowserSpecial(); + BoardModelMotionShiftSet(bowserMdl, 3, 0.0f, 8.0f, 0); + HuPrcSleep(8); + HuAudFXPlay(58); + BoardWinCreate(2, 0x3000B, 5); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + while(!BoardModelMotionEndCheck(bowserMdl)) { + HuPrcVSleep(); + } + SetBowserState(6); + while(!CheckBowserIdle()) { + HuPrcVSleep(); + } + BoardFilterFadeOut(30); +} + +static void ExecMGReturn(void) +{ + s32 i; + s32 player; + BoardStatusItemSet(1); + for(i=0; i<4; i++) { + BoardPlayerPosSetV(i, &playerPosTemp[i]); + } + BoardCameraMoveSet(0); + BoardCameraTargetPlayerSet(eventPlayer); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + CreateBowserObj(); + SquishPlayers(); + BoardPlayerMotBlendSet(eventPlayer, 0, 15); + BoardCameraViewSet(3); + BoardFilterFadeInit(30, 160); + BoardStatusItemSet(0); + BoardCameraMotionWait(); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 21); + while(WipeStatGet()) { + HuPrcVSleep(); + } + _ClearFlag(0x1001C); + BoardCameraMoveSet(1); + player = GWSystem.player_curr; + GWSystem.player_curr = -1; + DoMGReturnEffect(); + GWSystem.player_curr = player; + BoardStatusShowSetAll(1); + BoardModelMotionShiftSet(bowserMdl, 3, 0.0f, 8.0f, 0); + HuPrcSleep(8); + HuAudFXPlay(58); + BoardWinCreate(2, 0x3000B, 5); + BoardWinWait(); + BoardWinKill(); + while(!BoardStatusStopCheck(0)) { + HuPrcVSleep(); + } + BoardAudSeqFadeOut(1, 1000); + while(!BoardModelMotionEndCheck(bowserMdl)) { + HuPrcVSleep(); + } + SetBowserState(6); + while(!CheckBowserIdle()) { + HuPrcVSleep(); + } + BoardFilterFadeOut(30); + BoardMusStartBoard(); +} + +static void DestroyBowser(void) +{ + KillPlayerMot(); + HuDataDirClose(DATADIR_BKOOPA); + bowserProc = NULL; +} + +static void SquishPlayers(void) +{ + Vec pos; + Vec pos_space; + s32 i; + BoardPlayerPosGet(eventPlayer, &pos); + if(!_CheckFlag(0x10003)) { + HuAudFXPlay(798); + } + pos.y += 6.0f; + BoardPlayerPosSetV(eventPlayer, &pos); + GWPlayer[eventPlayer].show_next = 0; + BoardPlayerMotionSpeedSet(eventPlayer, 0.0f); + for(i=0; i<4; i++) { + if(eventSpace == GWPlayer[i].space_curr) { + BoardPlayerPosGet(i, &pos); + BoardSpacePosGet(0, eventSpace, &pos_space); + pos.y = pos_space.y+2.5f; + BoardPlayerPosSetV(i, &pos); + BoardPlayerMotionStart(i, playerMot[i], 0); + BoardPlayerMotionTimeSet(i, 50.0f); + BoardPlayerMotionSpeedSet(i, 0.0f); + } + } +} + +static void ExecBowserSpecial(void) +{ + s32 i; + CreateBowserObj(); + while(!CheckBowserIdle()) { + HuPrcVSleep(); + } + SetBowserState(2); + HuAudFXPlay(58); + BoardMusStart(1, 6, 127, 0); + HuPrcSleep(120); + BoardWinCreate(2, 0x30007, 5); + BoardWinWait(); + BoardWinKill(); + HuAudFXPlay(857); + BoardModelMotionShiftSet(bowserMdl, 4, 0.0f, 10.0f, 0); + for(i=0; i<4; i++) { + omVibrate(i, 12, 12, 0); + } + HuPrcSleep(11); + while(!BoardModelMotionEndCheck(bowserMdl)) { + HuPrcVSleep(); + } + CreateBowserEvent(); + HuAudFXPlay(831); + HuAudFXPlay(60); + while(!CheckBowserEvent()) { + HuPrcVSleep(); + } + HuPrcSleep(60); + BoardModelAttrSet(bowserMdl, 0x40000004); + while(!BoardModelMotionEndCheck(bowserMdl)) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(bowserMdl, 1, 0.0f, 10.0f, 0); + StopBowserEvent(); + switch(GWSystem.bowser_event) { + case 0: + ExecBowserGame(); + break; + + case 2: + ExecBowserRevo(); + break; + + case 1: + ExecBowserShuffle(); + break; + + case 3: + ExecBowserSuit(); + break; + } +} + +static void ExecBowserGame(void) +{ + s32 i; + s16 mgTbl[3] = { + 435, + 436, + 437 + }; + s32 messLoss[3] = { + 0x30009, + 0x3000C, + 0x3000E + }; + s32 mg; + s32 mess; + s32 fx_stat; + for(i=0; i<4; i++) { + BoardPlayerPosGet(i, &playerPosTemp[i]); + } + BoardWinCreate(2, 0x30008, 5); + BoardWinWait(); + mess = messLoss[GWSystem.bowser_loss]; + BoardWinCreate(2, mess, 5); + BoardWinWait(); + BoardWinKill(); + BoardModelMotionShiftSet(bowserMdl, 5, 0.0f, 8.0f, 0); + HuPrcSleep(8); + while(BoardModelMotionTimeGet(bowserMdl) < 80.0f) { + HuPrcVSleep(); + } + fx_stat = HuAudFXPlay(846); + InitBowserFire(); + while(BoardModelMotionTimeGet(bowserMdl) < 200.0f) { + HuPrcVSleep(); + } + BoardAudSeqFadeOut(1, 1000); + BoardMusVolPanSet(0, 0, 1); + BoardAudSeqPause(0, 0, 1); + _SetFlag(0x1000E); + HuAudFXFadeOut(fx_stat, 500); + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuAudFXAllStop(); + _SetFlag(0x1001C); + KillBowserFire(); + HuPrcSleep(60); + BoardModelMotionStart(bowserMdl, 1, 0); + mg = (s16)mgTbl[BoardRandMod(3)]; + GWMGAvailSet(mg); + GWSystem.mg_next = mg-401; + _SetFlag(0x10003); + BoardNextOvlSet(OVL_INST); + BoardFilterFadeOut(30); + HuPrcEnd(); +} + +static void DoMGReturnEffect(void) +{ + s32 messTbl[3] = { + 0x3000A, + 0x3000D, + 0x3000F + }; + s32 player; + s32 coin; + s32 item; + s32 delay; + s32 item_cnt; + s32 mess; + s32 mess_char; + for(player=0; player<4; player++) { + s16 gain = GWPlayer[player].coin_gain; + if(gain == 1) { + break; + } + } + mess = messTbl[GWSystem.bowser_loss]; + mess_char = BoardPlayerGetCharMess(player); + BoardStatusShowSetForce(player); + BoardStatusShowSet(player, 1); + BoardWinCreate(2, mess, 5); + BoardWinInsertMesSet(mess_char, 1); + BoardWinWait(); + while(!BoardStatusStopCheck(player)) { + HuPrcVSleep(); + } + omVibrate(player, 12, 4, 2); + if(GWSystem.bowser_loss == 2) { + item_cnt = BoardPlayerItemCount(player); + for(item=0; item> 1); + } + if(coin >= 50 ) { + delay = 1; + } else if(coin >= 20) { + delay = 3; + } else { + delay = 6; + } + while(coin != 0 && BoardPlayerCoinsGet(player) != 0) { + BoardPlayerCoinsAdd(player, -1); + HuAudFXPlay(14); + HuPrcSleep(delay); + coin--; + } + HuAudFXPlay(15); + } + BoardStatusShowSet(player, 0); + while(!BoardStatusStopCheck(player)) { + HuPrcVSleep(); + } +} \ No newline at end of file diff --git a/src/game/board/main.c b/src/game/board/main.c index 5db7bf48..8ad45315 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -33,7 +33,7 @@ static omObjData *last5GfxObj; static omObjData *confettiObj; static omObjData *filterObj; BoardTurnStartHook boardTurnStartFunc; -void *boardBowserHook; +BoardBowserHook boardBowserHook; void (*boardStarShowNextHook)(void); void (*boardStarGiveHook)(void); BoardFunc boardTurnFunc; @@ -288,8 +288,8 @@ void BoardSaveInit(s32 board) GWSystem.star_total = 1; GWSystem.last5_effect = 0; GWSystem.player_curr = -1; - GWSystem.field31_bit0 = 0; - GWSystem.field31_bit4 = 0; + GWSystem.bowser_loss = 0; + GWSystem.bowser_event = 0; GWSystem.unk_32 = 1; GWSystem.mg_next = 0; GWSystem.mg_next_type = 0; @@ -324,7 +324,7 @@ void BoardSaveInit(s32 board) GWPlayer[i].stars_max = 0; GWPlayer[i].coins_battle = 0; GWPlayer[i].unk_26 = 0; - GWPlayer[i].coins_mg_gain = 0; + GWPlayer[i].coin_gain = 0; GWPlayer[i].items[0] = -1; GWPlayer[i].items[1] = -1; GWPlayer[i].items[2] = -1; diff --git a/src/game/objsub.c b/src/game/objsub.c index 157500c3..151a0b87 100644 --- a/src/game/objsub.c +++ b/src/game/objsub.c @@ -1200,7 +1200,7 @@ void omGameSysInit(Process *objman) { for (i = 0; i < 4; i++) { if (_CheckFlag(0x1000C) == 0) { - GWPlayer[i].coins_mg_gain = 0; + GWPlayer[i].coin_gain = 0; } GWPlayer[i].unk_26 = 0; From 1a019c7c112f168d818bbc9ab5c3e06e5d04c2fe Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 12 Mar 2024 13:26:35 -0500 Subject: [PATCH 067/106] Finish more of board/bowser.c Particle struct changes are also present --- config/GMPE01_00/symbols.txt | 2 +- include/game/board/ui.h | 2 +- include/game/hsfanim.h | 7 +- src/REL/w03Dll/mg_item.c | 26 +- src/game/board/bowser.c | 922 ++++++++++++++++++++++++++++++++++- src/game/board/item.c | 50 +- src/game/board/mg_setup.c | 2 +- src/game/board/player.c | 6 +- src/game/board/ui.c | 6 +- src/game/chrman.c | 18 +- src/game/hsfanim.c | 20 +- 11 files changed, 990 insertions(+), 71 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 0e457f48..279a6c19 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5608,7 +5608,7 @@ booCamPos = .bss:0x801A4BC0; // type:object size:0xC scope:local data:float booCamTarget = .bss:0x801A4BCC; // type:object size:0xC scope:local data:float booCamUp = .bss:0x801A4BD8; // type:object size:0xC scope:local data:float playerPosTemp = .bss:0x801A4BE8; // type:object size:0x30 scope:local -bowserSpr = .bss:0x801A4C18; // type:object size:0x16 scope:local +bowserEvent = .bss:0x801A4C18; // type:object size:0x16 scope:local battleMGList = .bss:0x801A4C30; // type:object size:0x10 scope:local data:2byte camPosFortune = .bss:0x801A4C40; // type:object size:0xC scope:local data:4byte camTargetFortune = .bss:0x801A4C4C; // type:object size:0xC scope:local data:float diff --git a/include/game/board/ui.h b/include/game/board/ui.h index ccf6d01f..770f0c0e 100755 --- a/include/game/board/ui.h +++ b/include/game/board/ui.h @@ -14,7 +14,7 @@ void BoardStatusGraySet(s32 arg0, s32 arg1); void BoardStatusShowSet(s32 arg0, s32 arg1); void BoardStatusItemHideSet(s32 arg0, s32 arg1); void BoardStatusTargetPosSet(s32 arg0, Vec *arg1); -void BoardStatusPosGet(s32 arg0, float *arg1); +void BoardStatusPosGet(s32 arg0, Vec *arg1); void BoardStatusPosSet(s32 arg0, Vec *arg1); void BoardStatusHammerCreate(s32 arg0); void BoardStatusHammerShowSet(s32 arg0, s32 arg1); diff --git a/include/game/hsfanim.h b/include/game/hsfanim.h index 9070e984..6868b818 100644 --- a/include/game/hsfanim.h +++ b/include/game/hsfanim.h @@ -6,6 +6,9 @@ #include "game/sprite.h" typedef struct model_data ModelData; +typedef struct particle_data ParticleData; + +typedef void (*ParticleHook)(ModelData *model, ParticleData *particle, Mtx matrix); typedef struct { /* 0x00 */ union { @@ -49,7 +52,7 @@ typedef struct particle_data { /* 0x48 */ HsfanimStruct01 *unk_48; /* 0x4C */ Vec *unk_4C; /* 0x50 */ void *unk_50; - /* 0x54 */ void *unk_54; + /* 0x54 */ ParticleHook unk_54; } ParticleData; // Size 0x58 typedef struct { @@ -117,7 +120,7 @@ void Hu3DParticleZRotSet(s16 arg0, float arg1); void Hu3DParticleColSet(s16 arg0, u8 arg1, u8 arg2, u8 arg3); void Hu3DParticleTPLvlSet(s16 arg0, float arg1); void Hu3DParticleBlendModeSet(s16 arg0, u8 arg1); -void Hu3DParticleHookSet(s16 arg0, void *arg1); +void Hu3DParticleHookSet(s16 arg0, ParticleHook arg1); void Hu3DParticleAttrSet(s16 arg0, u8 arg1); void Hu3DParticleAttrReset(s16 arg0, u8 arg1); void Hu3DParticleAnimModeSet(s16 arg0, s16 arg1); diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index 6ef4f514..c9925419 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -74,7 +74,7 @@ void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); s16 Hu3DMotionShiftIDGet(s16 arg0); s32 frand(void); -void fn_1_BE30(s32 arg0, ParticleData* arg1); +void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix); void fn_1_BDAC(void); void fn_1_BC7C(s16 arg0); void fn_1_BBF8(void); @@ -891,7 +891,7 @@ void fn_1_BDAC(void) { } } -void fn_1_BE30(s32 arg0, ParticleData* arg1) { +void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) { Point3d sp8; f32 temp_f30; @@ -900,27 +900,27 @@ void fn_1_BE30(s32 arg0, ParticleData* arg1) { HsfanimStruct01* var_r31; s32 i, j; - if (arg1->unk_34 == 0U) { - var_r31 = arg1->unk_48; - for (i = 0; i < arg1->unk_30; i++, var_r31++) { + if (particle->unk_34 == 0U) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { var_r31->unk40.a = 0; var_r31->unk2C = 0.0f; } - arg1->unk_00 = 0; + particle->unk_00 = 0; } - BoardModelScaleGet(arg1->unk_02, &sp8); + BoardModelScaleGet(particle->unk_02, &sp8); temp_f31 = sp8.x; - BoardModelPosGet(arg1->unk_02, &sp8); + BoardModelPosGet(particle->unk_02, &sp8); for (i = 0; i < 0x16; i++) { - var_r31 = arg1->unk_48; - for (j = 0; j < arg1->unk_30; j++, var_r31++) { + var_r31 = particle->unk_48; + for (j = 0; j < particle->unk_30; j++, var_r31++) { if (0.0f == var_r31->unk2C) { break; } } - if (j != arg1->unk_30) { + if (j != particle->unk_30) { temp_f30 = 360.0f * (0.003921569f * (frand() & 0xFF)); temp_f29 = temp_f31 * (20.0f + (60.0f * (0.003921569f * (frand() & 0xFF)))); var_r31->unk34.x = (sp8.x + (temp_f29 * sin((3.141592653589793 * temp_f30) / 180.0))); @@ -932,9 +932,9 @@ void fn_1_BE30(s32 arg0, ParticleData* arg1) { var_r31->unk2C = (15.0f * temp_f31); } } - var_r31 = arg1->unk_48; + var_r31 = particle->unk_48; - for (i = 0; i < arg1->unk_30; i++, var_r31++) { + for (i = 0; i < particle->unk_30; i++, var_r31++) { if (0.0f != var_r31->unk2C) { var_r31->unk34.y = (var_r31->unk34.y - var_r31->unk08.x); var_r31->unk2C = (var_r31->unk2C - var_r31->unk08.y); diff --git a/src/game/board/bowser.c b/src/game/board/bowser.c index a0c2f285..70cb0d2f 100644 --- a/src/game/board/bowser.c +++ b/src/game/board/bowser.c @@ -3,6 +3,8 @@ #include "game/board/player.h" #include "game/board/audio.h" #include "game/board/window.h" +#include "game/board/ui.h" +#include "game/hsfdraw.h" #include "game/objsub.h" #include "game/sprite.h" @@ -10,7 +12,19 @@ #include "game/wipe.h" #include "game/gamework.h" -static s16 bowserSpr[11]; +#include "string.h" + +#define ABS(x) ((x) < 0 ? -(x) : (x)) + +typedef struct bowser_event_data { + s16 sprite[3]; + s16 delay[3]; + s16 angle[3]; + s16 group; + s16 model; +} BowserEventData; + +static BowserEventData bowserEvent; static Vec playerPosTemp[4]; static s32 scareFxTbl[] = { @@ -58,19 +72,24 @@ static void ExecBowserShuffle(void); static void ExecBowserRevo(void); static void ExecBowserSuit(void); -static void CreateBowserObj(void); +static s32 CheckSuitGive(void); +static void StartSuitGive(void); +static void SuitGiveMain(omObjData *object); +static void CreateBowserObj(void); +static void ExecBowserObj(omObjData *object); static void SetBowserState(s32 state); static s32 CheckBowserIdle(void); static void CreateBowserEvent(void); static s32 CheckBowserEvent(void); static void StopBowserEvent(void); - +static void ExecBowserEvent(omObjData *object); static void ConfigBowserEvent(void); static void CreateMiniBowser(void); static s32 CheckMiniBowser(void); +static void ExecMiniBowser(omObjData *object); static void CreatePlayerMot(void); @@ -108,14 +127,25 @@ s32 BoardBowserExec(s32 player, s32 space) typedef struct bowser_work { u8 kill : 1; + u8 state : 3; + u8 mot_active : 1; + u8 fall_done : 1; + u8 jump_done : 1; + u8 jump_state; + u8 idle_timer; } BowserWork; typedef struct mini_bowser_work { u8 kill : 1; + s16 group; + s16 sprite; + s16 angle; } MiniBowserWork; typedef struct bowser_event_work { u8 kill : 1; + s8 state; + s16 timer; } BowserEventWork; static void ExecBowser(void) @@ -483,4 +513,890 @@ static void DoMGReturnEffect(void) while(!BoardStatusStopCheck(player)) { HuPrcVSleep(); } +} + +static void ExecBowserShuffle(void) +{ + Vec pos; + Vec target; + s16 space_old[4]; + s16 space[4]; + s32 i; + s32 player; + s32 player_new; + s32 reset_cam; + BoardWinCreate(2, 0x30010, 5); + BoardWinWait(); + BoardWinKill(); + for(i=0; i<4; i++) { + space_old[i] = GWPlayer[i].space_curr; + } + player=0; + while(player<4) { + player_new = BoardRandMod(4); + if(player_new == player || space_old[player_new] == -1) { + continue; + } + space[player] = space_old[player_new]; + space_old[player_new] = -1; + player++; + } + HuAudFXPlay(857); + BoardModelMotionShiftSet(bowserMdl, 4, 0.0f, 10.0f, 0); + while(!BoardModelMotionEndCheck(bowserMdl)) { + HuPrcVSleep(); + } + SetBowserState(3); + HuPrcSleep(60); + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); + while(WipeStatGet()) { + HuPrcVSleep(); + } + reset_cam = 0; + for(i=0; i<4; i++) { + GWPlayer[i].space_curr = space[i]; + if(eventSpace == space[i]) { + BoardPlayerMotionStart(i, playerMot[i], 0); + BoardPlayerMotionTimeSet(i, 50.0f); + BoardPlayerMotionSpeedSet(i, 0.0f); + reset_cam = 1; + } else { + BoardPlayerIdleSet(i); + } + BoardPlayerMoveAwayStart(i, GWPlayer[i].space_curr, 1); + } + if(reset_cam) { + BoardCameraTargetGet(&target); + BoardCameraPosGet(&pos); + BoardCameraTargetModelSet(-1); + BoardCameraTargetSet(target.x, target.y, target.z); + BoardCameraPosSet(pos.x, pos.y, pos.z); + } + SetBowserState(4); + HuPrcSleep(60); + BoardModelMotionStart(bowserMdl, 1, 0x40000001); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); + while(WipeStatGet()) { + HuPrcVSleep(); + } +} + +static void ExecBowserRevo(void) +{ + s32 i; + s32 coin; + BoardWinCreate(2, 0x30011, 5); + BoardWinWait(); + BoardWinKill(); + for(coin=i=0; i<4; i++) { + coin += BoardPlayerCoinsGet(i); + } + coin /= 4; + HuAudFXPlay(857); + BoardModelMotionShiftSet(bowserMdl, 4, 0.0f, 10.0f, 0); + while(!BoardModelMotionEndCheck(bowserMdl)) { + HuPrcVSleep(); + } + SetBowserState(3); + HuPrcSleep(60); + WipeColorSet(255, 255, 255); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); + while(WipeStatGet()) { + HuPrcVSleep(); + } + SetBowserState(4); + for(i=0; i<4; i++) { + BoardPlayerCoinsSet(i, coin); + } + HuPrcSleep(60); + BoardModelMotionStart(bowserMdl, 1, 0x40000001); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); + while(WipeStatGet()) { + HuPrcVSleep(); + } +} + +static void ExecBowserSuit(void) +{ + BoardModelMotionShiftSet(bowserMdl, 1, 0.0f, 10.0f, 0); + BoardWinCreate(2, 0x30012, 5); + BoardWinWait(); + HuAudFXPlay(857); + BoardModelMotionShiftSet(bowserMdl, 4, 0.0f, 10.0f, 0); + HuPrcSleep(10); + StartSuitGive(); + while(!CheckSuitGive()) { + HuPrcVSleep(); + } + BoardWinKill(); + BoardModelAttrSet(bowserMdl, 0x40000004); + while(!BoardModelMotionEndCheck(bowserMdl)) { + HuPrcVSleep(); + } +} + +typedef struct suit_give_work { + u8 kill : 1; + u8 state; + u8 timer; + u8 idle_timer; + s16 model; +} SuitGiveWork; + +static s32 CheckSuitGive(void) +{ + if(!suitGiveObj) { + return 1; + } else { + return 0; + } +} + +static void StartSuitGive(void) +{ + omObjData *object; + SuitGiveWork *work; + Vec pos; + object = omAddObjEx(boardObjMan, 258, 0, 0, -1, SuitGiveMain); + suitGiveObj = object; + work = OM_GET_WORK_PTR(suitGiveObj, SuitGiveWork); + work->kill = 0; + work->state = 0; + work->idle_timer = 0; + work->timer = 30; + work->model = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 120), NULL, 0); + BoardModelLayerSet(work->model, 7); + BoardModelScaleSet(work->model, 0.16f, 0.16f, 0.16f); + object->trans.x = 288.0f; + object->trans.y = -64.0f; + pos.x = 288.0f; + pos.y = 240.0f; + object->rot.x = (pos.x-object->trans.x)/30.0f; + object->rot.y = (pos.y-object->trans.y)/30.0f; + object->scale.x = 300.0f; + pos.x = object->trans.x; + pos.y = object->trans.y; + pos.z = object->scale.x; + Hu3D2Dto3D(&pos, 1, &pos); + BoardModelPosSetV(work->model, &pos); +} + +static void SuitGiveMain(omObjData *object) +{ + SuitGiveWork *work = OM_GET_WORK_PTR(object, SuitGiveWork); + s32 effect_active; + Vec pos; + if(work->kill || BoardIsKill()) { + BoardModelKill(work->model); + suitGiveObj = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + if(work->idle_timer) { + work->idle_timer--; + return; + } + + effect_active = 0; + switch(work->state) { + case 0: + if(work->timer == 0) { + work->state = 1; + work->idle_timer = 30; + work->timer = 30; + BoardStatusPosGet(eventPlayer, &pos); + object->rot.x = (pos.x-object->trans.x)/30.0f; + object->rot.y = (pos.y-object->trans.y)/30.0f; + } else { + work->timer--; + } + break; + + case 1: + if(work->timer == 0) { + work->state = 2; + work->idle_timer = 6; + effect_active = 1; + } else { + work->timer--; + } + break; + + case 2: + BoardPlayerItemAdd(eventPlayer, 10); + BoardModelVisibilitySet(work->model, 0); + work->kill = 1; + return; + + default: + break; + } + object->trans.x += object->rot.x; + object->trans.y += object->rot.y; + pos.x = object->trans.x; + pos.y = object->trans.y; + pos.z = object->scale.x; + Hu3D2Dto3D(&pos, 1, &pos); + BoardModelPosSetV(work->model, &pos); + if(effect_active) { + CharModelLayerSetAll(6); + CharModelEffectCreate(1, &pos); + } +} + +static const s32 bowserMotTbl[] = { + DATA_MAKE_NUM(DATADIR_BKOOPA, 8), + DATA_MAKE_NUM(DATADIR_BKOOPA, 10), + DATA_MAKE_NUM(DATADIR_BKOOPA, 11), + DATA_MAKE_NUM(DATADIR_BKOOPA, 12), + DATA_MAKE_NUM(DATADIR_BKOOPA, 13), + DATA_NUM_LISTEND +}; + +static void CreateBowserObj(void) +{ + BowserWork *work; + Vec pos; + bowserObj = omAddObjEx(boardObjMan, 257, 0, 0, -1, ExecBowserObj); + work = OM_GET_WORK_PTR(bowserObj, BowserWork); + work->kill = 0; + work->jump_state = 0; + work->idle_timer = 0; + work->mot_active = 0; + work->fall_done = 0; + work->jump_done = 0; + if(!_CheckFlag(0x10003)) { + work->state = 1; + } else { + work->state = 0; + } + bowserMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BKOOPA, 7), (s32 *)bowserMotTbl, 0); + BoardModelVisibilitySet(bowserMdl, 0); + BoardModelScaleSet(bowserMdl, 2.0f, 2.0f, 2.0f); + BoardPlayerPosGet(eventPlayer, &pos); + BoardModelLayerSet(bowserMdl, 2); + bowserObj->trans.x = pos.x; + bowserObj->trans.y = pos.y; + bowserObj->trans.z = pos.z; + if(!_CheckFlag(0x10003)) { + suitItemMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 99), NULL, 0); + BoardModelLayerSet(suitItemMdl, 2); + BoardModelVisibilitySet(suitItemMdl, 0); + } else { + s32 space = GWPlayer[eventPlayer].space_curr; + BoardSpacePosGet(0, space, &pos); + bowserObj->trans.x = pos.x; + bowserObj->trans.y = pos.y; + bowserObj->trans.z = pos.z; + BoardModelPosSetV(bowserMdl, &pos); + BoardCameraTargetSpaceSet(space); + BoardModelMotionStart(bowserMdl, 1, 0x40000001); + BoardModelVisibilitySet(bowserMdl, 1); + } +} + +static void ExecBowserFall(BowserWork *work, omObjData *object); +static void ExecBowserLaugh(BowserWork *work, omObjData *object); +static void ExecBowserPowerUp(BowserWork *work, omObjData *object); +static void ExecBowserFire(BowserWork *work, omObjData *object); +static void ExecBowserJump(BowserWork *work, omObjData *object); + +static void ExecBowserObj(omObjData *object) +{ + BowserWork *work = OM_GET_WORK_PTR(bowserObj, BowserWork); + Vec pos; + Vec rot; + + if(work->kill || BoardIsKill()) { + BoardModelKill(bowserMdl); + bowserMdl = -1; + BoardModelKill(suitItemMdl); + suitItemMdl = -1; + omDelObjEx(HuPrcCurrentGet(), object); + bowserObj = NULL; + return; + } + if(work->idle_timer) { + work->idle_timer--; + return; + } + if(work->mot_active && BoardModelMotionEndCheck(bowserMdl)) { + work->mot_active = 0; + BoardModelMotionShiftSet(bowserMdl, 1, 0.0f, 10.0f, 0x40000001); + } + switch(work->state) { + case 1: + ExecBowserFall(work, object); + break; + + case 2: + ExecBowserLaugh(work, object); + break; + + case 3: + ExecBowserPowerUp(work, object); + break; + + case 5: + ExecBowserFire(work, object); + break; + + case 6: + ExecBowserJump(work, object); + break; + + case 4: + BoardModelVisibilitySet(suitItemMdl, 0); + work->state = 0; + break; + + case 0: + break; + } + BoardModelPosSet(bowserMdl, object->trans.x, object->trans.y, object->trans.z); + BoardCameraRotGet(&rot); + pos.x = object->trans.x+(-100.0f*sin(M_PI*BoardModelRotYGet(bowserMdl)/180.0)); + pos.z = object->trans.z+(-100.0f*cos(M_PI*BoardModelRotYGet(bowserMdl)/180.0)); + pos.y = object->trans.y+250.0f; + BoardModelPosSetV(suitItemMdl, &pos); +} + +static void ExecBowserFall(BowserWork *work, omObjData *object) +{ + Vec pos; + Vec pos_space; + Vec pos_player; + s32 i; + if(!work->jump_state) { + BoardModelVisibilitySet(bowserMdl, 1); + BoardModelMotionStart(bowserMdl, 2, 0); + BoardModelMotionTimeSet(bowserMdl, 100.0f); + work->jump_state = 1; + return; + } + if(BoardModelMotionEndCheck(bowserMdl)) { + work->state = 0; + BoardModelMotionShiftSet(bowserMdl, 1, 0.0f, 10.0f, 0x40000001); + return; + } + if(!work->fall_done && !(BoardModelMotionTimeGet(bowserMdl) < 140.0f)) { + BoardPlayerPosGet(eventPlayer, &pos); + HuAudFXPlay(829); + BoardCameraQuakeSet(60, 100.0f); + object->trans.y = pos.y; + BoardPlayerPosGet(eventPlayer, &pos_player); + if(!_CheckFlag(0x10003)) { + HuAudFXPlay(798); + } + pos_player.y += 6.0f; + BoardPlayerPosSetV(eventPlayer, &pos_player); + GWPlayer[eventPlayer].show_next = 0; + BoardPlayerMotionSpeedSet(eventPlayer, 0.0f); + for(i=0; i<4; i++) { + if(eventSpace != GWPlayer[i].space_curr) { + continue; + } + BoardPlayerPosGet(i, &pos_player); + BoardSpacePosGet(0, eventSpace, &pos_space); + pos_player.y = 2.5f+pos_space.y; + BoardPlayerPosSetV(i, &pos_player); + BoardPlayerMotionStart(i, playerMot[i], 0); + BoardPlayerMotionTimeSet(i, 50.0f); + BoardPlayerMotionSpeedSet(i, 0.0f); + } + if(!work->fall_done) { + work->fall_done = 1; + omVibrate(eventPlayer, 12, 4, 2); + } + } + +} + +static void ExecBowserLaugh(BowserWork *work, omObjData *object) +{ + BoardModelMotionStart(bowserMdl, 3, 0); + work->mot_active = 1; + work->state = 0; +} + +static void ExecBowserFire(BowserWork *work, omObjData *object) +{ + BoardModelMotionStart(bowserMdl, 5, 0); + work->state = 0; +} + +static void ExecBowserJump(BowserWork *work, omObjData *object) +{ + switch(work->jump_state) { + case 0: + BoardModelMotionShiftSet(bowserMdl, 2, 0.0f, 4.0f, 0); + work->jump_state = 1; + break; + + case 1: + { + s16 model_id = BoardModelIDGet(bowserMdl); + if(Hu3DMotionShiftIDGet(model_id) == -1) { + work->jump_state = 2; + } + } + break; + + case 2: + { + float time = BoardModelMotionTimeGet(bowserMdl); + if(time < 60.0f) { + break; + } + if(!work->jump_done) { + omVibrate(eventPlayer, 12, 12, 0); + HuAudFXPlay(61); + work->jump_done = 1; + } + if(time >= 100.0f) { + BoardModelVisibilitySet(bowserMdl, 0); + work->state = 0; + work->kill = 1; + } + } + break; + } +} + +static void ExecBowserPowerUp(BowserWork *work, omObjData *object) +{ + Vec pos; + if(work->jump_state == 0) { + BoardModelVisibilitySet(suitItemMdl, 1); + BoardModelMotionStart(suitItemMdl, 0, 0); + BoardModelScaleSet(suitItemMdl, 10.0f, 10.0f, 10.0f); + pos.x = object->trans.x+(-100.0f*sin(M_PI*BoardModelRotYGet(bowserMdl)/180.0)); + pos.z = object->trans.z+(-100.0f*cos(M_PI*BoardModelRotYGet(bowserMdl)/180.0)); + pos.y = object->trans.y+250.0f; + BoardModelPosSetV(suitItemMdl, &pos); + HuAudFXPlay(850); + } else { + if(work->jump_state >= 100) { + work->state = 0; + } + } + work->jump_state++; +} + +static void SetBowserState(s32 state) +{ + BowserWork *work = OM_GET_WORK_PTR(bowserObj, BowserWork); + work->state = state; + work->jump_state = 0; +} + +static s32 CheckBowserIdle(void) +{ + BowserWork *work; + if(!bowserObj) { + return 1; + } + work = OM_GET_WORK_PTR(bowserObj, BowserWork); + if(work->state != 0 || work->idle_timer != 0) { + return 0; + } else { + return 1; + } +} + +static void CreateMiniBowser(void) +{ + omObjData *object; + MiniBowserWork *work; + object = omAddObjEx(boardObjMan, 257, 0, 0, -1, ExecMiniBowser); + miniBowserObj = object; + work = OM_GET_WORK_PTR(object, MiniBowserWork); + work->kill = 0; + work->angle = 0; + work->group = HuSprGrpCreate(1); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BKOOPA, 5), 100, NULL, &work->sprite); + HuSprGrpMemberSet(work->group, 0, work->sprite); + HuSprAttrSet(work->group, 0, HUSPR_ATTR_LINEAR); + HuSprGrpPosSet(work->group, 288.0f, 240.0f); + HuSprGrpScaleSet(work->group, 4.0f, 4.0f); +} + +static s32 CheckMiniBowser(void) +{ + if(miniBowserObj) { + return 0; + } else { + return 1; + } +} + +static void ExecMiniBowser(omObjData *object) +{ + MiniBowserWork *work = OM_GET_WORK_PTR(object, MiniBowserWork); + float alpha; + if(work->kill || BoardIsKill()) { + HuSprGrpKill(work->group); + miniBowserObj = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + OSs16tof32(&work->angle, &alpha); + alpha = sin(M_PI*BoardDAngleCalc(alpha)/180.0); + HuSprTPLvlSet(work->group, 0, ABS(alpha)); + if(work->angle == 60) { + HuAudFXPlay(807); + } + work->angle += 2; + if(work->angle == 90 || work->angle == 270 || work->angle == 450) { + omVibrate(eventPlayer, 12, 4, 2); + } + if(work->angle >= 540) { + work->kill = 1; + } +} + +static void CreateBowserEvent(void) +{ + Vec pos_2d; + Vec pos_3d; + s32 eventSpr[] = { + DATA_MAKE_NUM(DATADIR_BKOOPA, 1), + DATA_MAKE_NUM(DATADIR_BKOOPA, 2), + DATA_MAKE_NUM(DATADIR_BKOOPA, 3), + DATA_MAKE_NUM(DATADIR_BKOOPA, 4), + }; + + + BowserEventData *data; + s32 i; + BowserEventWork *work; + s32 sprite; + bowserEventObj = omAddObjEx(boardObjMan, 257, 0, 0, -1, ExecBowserEvent); + work = OM_GET_WORK_PTR(bowserEventObj, BowserEventWork); + work->kill = 0; + work->state = 0; + work->timer = 0; + memset(&bowserEvent, 0, sizeof(BowserEventData)); + data = &bowserEvent; + data->group = HuSprGrpCreate(3); + sprite = eventSpr[GWSystem.bowser_event]; + for(i=0; i<3; i++) { + BoardSpriteCreate(sprite, 100, NULL, &data->sprite[i]); + HuSprGrpMemberSet(data->group, i, data->sprite[i]); + HuSprTPLvlSet(data->group, i, 0.0f); + HuSprPosSet(data->group, i, 0.0f, 0.0f); + data->delay[i] = i*2; + } + HuSprGrpPosSet(data->group, 288.0f, 240.0f); + data->model = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 101), NULL, 0); + pos_2d.x = 288.0f; + pos_2d.y = 240.0f; + pos_2d.z = 1000.0f; + Hu3D2Dto3D(&pos_2d, 1, &pos_3d); + BoardModelMotionStart(data->model, 0, 0x40000001); + BoardModelPosSetV(data->model, &pos_3d); + BoardModelLayerSet(data->model, 2); +} + +static s32 CheckBowserEvent(void) +{ + BowserEventWork *work = OM_GET_WORK_PTR(bowserEventObj, BowserEventWork); + + if(work->state != 2) { + return 0; + } else { + return 1; + } +} + +static void StopBowserEvent(void) +{ + BowserEventWork *work = OM_GET_WORK_PTR(bowserEventObj, BowserEventWork); + work->state = 1; +} + +static void ShowBowserEvent(BowserEventWork *work, omObjData *object); +static void HideBowserEvent(BowserEventWork *work, omObjData *object); + +static void ExecBowserEvent(omObjData *object) +{ + BowserEventWork *work = OM_GET_WORK_PTR(object, BowserEventWork); + BowserEventData *data = &bowserEvent; + if(work->kill || BoardIsKill()) { + HuSprGrpKill(data->group); + BoardModelKill(data->model); + bowserEventObj = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + if(work->timer) { + work->timer--; + return; + } + switch(work->state) { + case 0: + ShowBowserEvent(work, object); + break; + + case 1: + HideBowserEvent(work, object); + break; + + case 2: + break; + } +} + +static void ShowBowserEvent(BowserEventWork *work, omObjData *object) +{ + BowserEventData *data; + s32 i; + s32 count; + float angle; + float tplvl; + float scale; + data = &bowserEvent; + for(count=i=0; i<3; i++) { + if(data->delay[i]) { + data->delay[i]--; + } else { + if(data->angle[i] > 90) { + count++; + continue; + } + OSs16tof32(&data->angle[i], &angle); + tplvl = sin(M_PI*angle/180.0); + scale = sin(M_PI*angle/180.0); + HuSprTPLvlSet(data->group, i, tplvl); + HuSprScaleSet(data->group, i, scale, scale); + BoardModelAlphaSet(data->model, 255.0f*tplvl); + data->angle[i] += 9; + if(data->angle[i] > 90 && i != 0) { + HuSprAttrSet(data->group, i, HUSPR_ATTR_DISPOFF); + } + } + } + if(count == 3) { + work->state = 2; + work->timer = 60; + } +} + +static void HideBowserEvent(BowserEventWork *work, omObjData *object) +{ + BowserEventData *data = &bowserEvent; + float angle; + float tplvl; + OSs16tof32(&data->angle[0], &angle); + tplvl = sin(M_PI*angle/180.0); + HuSprTPLvlSet(data->group, 0, tplvl); + BoardModelAlphaSet(data->model, 255.0f*tplvl); + data->angle[0] -= 10; + if(data->angle[0] < 0) { + work->kill = 1; + HuSprAttrSet(data->group, 0, HUSPR_ATTR_DISPOFF); + } +} + + +static void ConfigBowserEvent(void) +{ + s32 i; + s32 chance; + s32 coins; + s32 item_full; + item_full = 0; + if(BoardPlayerItemCount(eventPlayer) == 3) { + item_full = 1; + } + for(coins=i=0; i<4; i++) { + coins += BoardPlayerCoinsGet(i); + } + retry: + while(1) { + chance = BoardRandMod(100); + if(chance >= 95) { + if(item_full) { + continue; + } + if(GWSystem.max_turn-GWSystem.turn == 0) { + continue; + } + GWSystem.bowser_event = 3; + break; + } else if(chance >= 85) { + GWSystem.bowser_event = 2; + break; + } else if(chance >= 70) { + GWSystem.bowser_event = 1; + break; + } else { + if(coins == 0) { + continue; + } + GWSystem.bowser_event = 0; + GWSystem.bowser_loss = BoardRandMod(3); + break; + } + } +} + +static void CreatePlayerMot(void) +{ + s32 scareMotTbl[] = { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 27), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 27), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 27), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 27), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 27), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 27), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 27), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 27), + }; + s32 jumpMotTbl[] = { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 26), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 26), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 26), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 26), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 26), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 26), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 26), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 26), + }; + s32 playerMotTbl[] = { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 31), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 31), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 31), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 31), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 31), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 31), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 31), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 31), + }; + s32 i; + s32 character; + character = GWPlayer[eventPlayer].character; + scareMot = BoardPlayerMotionCreate(eventPlayer, scareMotTbl[character]); + jumpMot = BoardPlayerMotionCreate(eventPlayer, jumpMotTbl[character]); + for(i=0; i<4; i++) { + character = GWPlayer[i].character; + playerMot[i] = BoardPlayerMotionCreate(i, playerMotTbl[character]); + } +} + +static void KillPlayerMot(void) +{ + s32 i; + if(scareMot > 0) { + BoardPlayerMotionKill(eventPlayer, scareMot); + scareMot = -1; + } + if(jumpMot > 0) { + BoardPlayerMotionKill(eventPlayer, jumpMot); + jumpMot = -1; + } + for(i=0; i<4; i++) { + if(playerMot[i] > 0) { + BoardPlayerMotionKill(i, playerMot[i]); + playerMot[i] = -1; + } + } +} + +static void BowserFireHook(ModelData *model, ParticleData *particle, Mtx matrix); + +static void SpawnBowserFire(HsfanimStruct01 *arg0); +static s32 CheckBowserFire(HsfanimStruct01 *arg0); + +static void InitBowserFire(void) +{ + fireAnim = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_BOARD, 106)); + fireParMan = Hu3DParticleCreate(fireAnim, 30); + Hu3DParticleColSet(fireParMan, 255, 255, 255); + Hu3DParticleScaleSet(fireParMan, 10.0f); + Hu3DParticleHookSet(fireParMan, BowserFireHook); + Hu3DParticleBlendModeSet(fireParMan, 1); + Hu3DModelLayerSet(fireParMan, 2); +} + +static void BowserFireHook(ModelData *model, ParticleData *particle, Mtx matrix) +{ + HsfanimStruct01* var_r30; + s32 i; + s32 var_r28; + Vec pos; + Hu3DModelObjPosGet(BoardModelIDGet(bowserMdl), "itemhook_M_1", &pos); + if (particle->unk_34 == 0) { + var_r30 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r30++) { + var_r30->unk2C = 0.0f; + } + particle->unk_34 = 1; + particle->unk_00 = 0; + } + if((particle->unk_34 & 0x3) == 0) { + var_r30 = particle->unk_48; + for(var_r28=0; var_r28unk_30; var_r28++, var_r30++) { + if(var_r30->unk2C == 0.0f) { + break; + } + } + if(var_r28 != particle->unk_30) { + var_r30->unk34 = pos; + particle->unk_00++; + SpawnBowserFire(var_r30); + } + } + var_r30 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r30++) { + if(var_r30->unk2C != 0.0f && CheckBowserFire(var_r30)) { + particle->unk_00--; + } + } +} + +static void SpawnBowserFire(HsfanimStruct01 *arg0) +{ + Vec dir; + BoardCameraDirGet(&dir); + arg0->unk08.x = 0.0f; + arg0->unk08.y = 0.0f; + arg0->unk08.z = 0.0f; + arg0->unk14.x = -dir.x*((0.5f*BoardRandFloat())+0.5f); + arg0->unk14.y = -dir.y*((0.5f*BoardRandFloat())+0.5f); + arg0->unk14.z = -dir.z*((0.5f*BoardRandFloat())+0.5f); + arg0->unk24 = 1.025f; + arg0->unk40.a = 254; + arg0->unk40.r = 255; + arg0->unk40.g = 255; + arg0->unk40.b = 255; + arg0->unk2C = 100.0f; +} + +static s32 CheckBowserFire(HsfanimStruct01 *arg0) +{ + arg0->unk34.x += arg0->unk08.x; + arg0->unk34.y += arg0->unk08.y; + arg0->unk34.z += arg0->unk08.z; + arg0->unk08.x += arg0->unk14.x; + arg0->unk08.y += arg0->unk14.y; + arg0->unk08.z += arg0->unk14.z; + arg0->unk40.a -= 8; + arg0->unk2C *= arg0->unk24; + if(arg0->unk40.a == 0.0f) { + arg0->unk40.a = 0; + arg0->unk2C = 0.0f; + return 1; + } + return 0; +} + +static void KillBowserFire(void) +{ + if(fireParMan != -1) { + Hu3DModelKill(fireParMan); + fireParMan = -1; + fireAnim = NULL; + } } \ No newline at end of file diff --git a/src/game/board/item.c b/src/game/board/item.c index 60d48ff8..914f74de 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -75,8 +75,8 @@ static void ExecItemLight(void); static void ExecItemWhistle(void); static void ExecItemBowser(void); static void ExecItemBooBall(void); -static void LampParticleUpdate(s32 arg0, ParticleData *arg1); -static void GenieParticleUpdate(s32 arg0, ParticleData *arg1); +static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix); +static void GenieParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix); static void GenieCameraProc(void); static void GenieCameraCalc(UnkGenieCameraStruct *arg0, s32 arg1, float arg2, Vec *arg3, Vec *arg4); static void GenieSceneExec(void); @@ -1924,7 +1924,7 @@ static void ForceConsts(void) (void)125.0f; } -static void LampParticleUpdate(s32 arg0, ParticleData *arg1) { +static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix) { HsfanimStruct01 *var_r31; Vec spC; float sp8; @@ -1933,26 +1933,26 @@ static void LampParticleUpdate(s32 arg0, ParticleData *arg1) { s32 i; s32 j; - if (arg1->unk_34 == 0) { - var_r31 = arg1->unk_48; - for (i = 0; i < arg1->unk_30; i++, var_r31++) { + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { var_r31->unk2C = 0.0f; var_r31->unk40.a = 0; } - arg1->unk_04 = 0.0f; - arg1->unk_00 = 0; + particle->unk_04 = 0.0f; + particle->unk_00 = 0; } - if (arg1->unk_00 == 0) { - arg1->unk_00 = 2; + if (particle->unk_00 == 0) { + particle->unk_00 = 2; BoardModelRotGet(suitMdl, &spC); for (i = 0; i < 2; i++) { - var_r31 = arg1->unk_48; - for (j = 0; j < arg1->unk_30; j++, var_r31++) { + var_r31 = particle->unk_48; + for (j = 0; j < particle->unk_30; j++, var_r31++) { if (var_r31->unk2C == 0.0f) { break; } } - if (j != arg1->unk_30) { + if (j != particle->unk_30) { var_r31->unk34.x = 60.0 * sin((spC.y - 90.0f) * M_PI / 180.0); var_r31->unk34.y = 30.0f; var_r31->unk34.z = 60.0 * cos((spC.y - 90.0f) * M_PI / 180.0); @@ -1968,10 +1968,10 @@ static void LampParticleUpdate(s32 arg0, ParticleData *arg1) { } } } else { - arg1->unk_00--; + particle->unk_00--; } - var_r31 = arg1->unk_48; - for (i = 0; i < arg1->unk_30; i++, var_r31++) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { if (var_r31->unk2C != 0.0f) { if (var_r31->unk00_s16 == 0) { PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34); @@ -2001,16 +2001,16 @@ static void LampParticleUpdate(s32 arg0, ParticleData *arg1) { } } -static void GenieParticleUpdate(s32 arg0, ParticleData *arg1) { +static void GenieParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix) { HsfanimStruct01* var_r31; float temp_f31; float temp_f30; s32 var_r28; s32 i; - if (arg1->unk_34 == 0) { - var_r31 = arg1->unk_48; - for (i = 0; i < arg1->unk_30; i++, var_r31++) { + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { var_r31->unk34.x = -50.0f + (frand() & 0xFF) * 100.0f * 0.003921569f; var_r31->unk34.y = -50.0f + (frand() & 0xFF) * 100.0f * 0.003921569f; var_r31->unk34.z = -10.0f + (frand() & 0xFF) * 20.0f * 0.003921569f; @@ -2025,9 +2025,9 @@ static void GenieParticleUpdate(s32 arg0, ParticleData *arg1) { var_r31->unk2C = 80.0f + (frand() & 0xFF) * 60.0f * 0.003921569f; } } - var_r31 = arg1->unk_48; + var_r31 = particle->unk_48; var_r28 = 0; - for (i = 0; i < arg1->unk_30; i++, var_r31++) { + for (i = 0; i < particle->unk_30; i++, var_r31++) { if (var_r31->unk2C != 0.0f) { var_r28++; PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34); @@ -2042,7 +2042,7 @@ static void GenieParticleUpdate(s32 arg0, ParticleData *arg1) { } } if (var_r28 == 0) { - arg1->unk_02 = 0; + particle->unk_02 = 0; } } @@ -2235,7 +2235,7 @@ static void GenieSceneExec(void) { temp_r21 = HuPrcChildCreate(GenieCameraProc, 0x2005, 0x1000, 0, HuPrcCurrentGet()); Hu3DBGColorSet(0xFF, 0xFF, 0xFF); temp_r27 = Hu3DParticleCreate(genieParticleAnim, 0x32); - Hu3DParticleHookSet(temp_r27, &GenieParticleUpdate); + Hu3DParticleHookSet(temp_r27, GenieParticleUpdate); Hu3DParticleBlendModeSet(temp_r27, 1); Hu3DParticleColSet(temp_r27, 0xFF, 0xFF, 0xFF); Hu3DParticleAnimModeSet(temp_r27, 0); @@ -2409,7 +2409,7 @@ static void ExecItemGenie(void) { HuAudPlayerVoicePlay(currItemRestore, 0x125); temp_r25 = HuAudFXPlay(0x34D); temp_r31 = Hu3DParticleCreate(genieParticleAnim, 0x96); - Hu3DParticleHookSet(temp_r31, &LampParticleUpdate); + Hu3DParticleHookSet(temp_r31, LampParticleUpdate); Hu3DParticleBlendModeSet(temp_r31, 0); Hu3DParticleColSet(temp_r31, 0xFF, 0xFF, 0xFF); Hu3DParticleAnimModeSet(temp_r31, 0); diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index 1c58cd37..796c8b75 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -749,7 +749,7 @@ static void SeparateStatus(bitcopy* arg0, omObjData* arg1) { switch (arg0->unk_02) { case 0: for (var_r28 = 0; var_r28 < 4; var_r28++) { - BoardStatusPosGet(var_r28, &sp8.x); + BoardStatusPosGet(var_r28, &sp8); if (sp8.x < 288.0f) { sp8.x = -98.0f; } else { diff --git a/src/game/board/player.c b/src/game/board/player.c index 702924a7..f8f23972 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -689,7 +689,7 @@ void BoardPlayerPostTurnHookSet(s32 arg0, s32 (*arg1)()) { void BoardPlayerTurnExec(s32 arg0) { BoardPauseDisableSet(1); BoardComUseItemSet(arg0, -1); - GWSystem.field31_bit4 = 0xF; + GWSystem.bowser_event = 0xF; _ClearFlag(0x10016); _ClearFlag(0x1000E); BoardCameraMoveSet(1); @@ -853,11 +853,11 @@ block_14: BoardSpaceBlockExec(arg0, sp8); BoardSpaceLandExec(arg0, sp8); _SetFlag(0x1000E); - if (GWSystem.field31_bit4 != 1) { + if (GWSystem.bowser_event != 1) { BoardCameraViewSet(2); BoardCameraMotionWait(); } else { - GWSystem.field31_bit4 = 0xF; + GWSystem.bowser_event = 0xF; } BoardPlayerZoomRestore(arg0); return; diff --git a/src/game/board/ui.c b/src/game/board/ui.c index 81ec4bed..3b304501 100755 --- a/src/game/board/ui.c +++ b/src/game/board/ui.c @@ -402,11 +402,11 @@ void BoardStatusTargetPosSet(s32 arg0, Vec *arg1) { temp_r31->unk00_bit2 = 1; } -void BoardStatusPosGet(s32 arg0, float *arg1) { +void BoardStatusPosGet(s32 arg0, Vec *arg1) { UnkUiStatusStruct *temp_r31 = &uiStatus[arg0]; - arg1[0] = temp_r31->unk04.x; - arg1[1] = temp_r31->unk04.y; + arg1->x = temp_r31->unk04.x; + arg1->y = temp_r31->unk04.y; } void BoardStatusPosSet(s32 arg0, Vec *arg1) { diff --git a/src/game/chrman.c b/src/game/chrman.c index 676c6793..bbfb4f37 100755 --- a/src/game/chrman.c +++ b/src/game/chrman.c @@ -74,7 +74,7 @@ static s16 CreateEffectStar(s16 arg0, float arg1, float arg2, float arg3, float static s16 CreateEffectWarn(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5); static s16 CreateEffectBird(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5); static s16 CreateEffect(s16 arg0, s16 arg1, float arg2, float arg3, float arg4, float arg5, EffectParamData *arg6); -static void UpdateEffect(s32 arg0, ParticleData *arg1); +static void UpdateEffect(ModelData *model, ParticleData *particle, Mtx matrix); static void RotateEffect(HsfanimStruct01 *arg0); static void PlayEffectSound(HsfanimStruct01 *arg0); static void UpdateItemHook(void); @@ -887,21 +887,21 @@ static s16 CreateEffect(s16 arg0, s16 arg1, float arg2, float arg3, float arg4, return i; } -static void UpdateEffect(s32 arg0, ParticleData *arg1) { +static void UpdateEffect(ModelData *model, ParticleData *particle, Mtx matrix) { EffectParamData *temp_r30; HsfanimStruct01 *var_r31; s16 var_r28; s16 i; - temp_r30 = arg1->unk_1C; - if (arg1->unk_34 == 0) { - var_r31 = arg1->unk_48; - for (i = 0; i < arg1->unk_30; i++, var_r31++) { + temp_r30 = particle->unk_1C; + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { var_r31->unk2C = 0.0f; } } - var_r31 = arg1->unk_48; - for (i = 0; i < arg1->unk_30; i++, var_r31++) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { if (var_r31->unk2C) { if (var_r31->unk02 == -1) { var_r31->unk08.x *= temp_r30[i].unk18; @@ -962,7 +962,7 @@ static void UpdateEffect(s32 arg0, ParticleData *arg1) { } } } - DCStoreRangeNoSync(arg1->unk_48, arg1->unk_30 * sizeof(HsfanimStruct01)); + DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01)); } static void RotateEffect(HsfanimStruct01 *arg0) { diff --git a/src/game/hsfanim.c b/src/game/hsfanim.c index 87df68ca..ef3b7121 100755 --- a/src/game/hsfanim.c +++ b/src/game/hsfanim.c @@ -25,7 +25,7 @@ typedef struct { static void _Hu3DParticleAttrReset(ModelData *arg0, Mtx arg1); static void ParManFunc(void); -static void ParManHook(ModelData *arg0, ParticleData *arg1); +static void ParManHook(ModelData *arg0, ParticleData *arg1, Mtx matrix); u32 frand(void); @@ -606,7 +606,7 @@ void Hu3DParticleBlendModeSet(s16 arg0, u8 arg1) { temp_r30->unk_2C = arg1; } -void Hu3DParticleHookSet(s16 arg0, void *arg1) { +void Hu3DParticleHookSet(s16 arg0, ParticleHook arg1) { ModelData *temp_r31 = &Hu3DData[arg0]; ParticleData *temp_r30 = temp_r31->unk_120; @@ -673,7 +673,7 @@ static void _Hu3DParticleAttrReset(ModelData *arg0, Mtx arg1) { AnimLayerData *temp_r27; ParticleData *temp_r31; HsfanimStruct01 *var_r29; - void (*var_r17)(void*, void*, Mtx); + ParticleHook var_r17; Mtx sp128; Mtx spF8; Mtx spC8; @@ -872,7 +872,7 @@ s16 Hu3DParManCreate(AnimData *arg0, s16 arg1, HsfanimStruct00 *arg2) { return -1; } temp_r3 = Hu3DParticleCreate(arg0, arg1); - Hu3DParticleHookSet(temp_r3, &ParManHook); + Hu3DParticleHookSet(temp_r3, ParManHook); temp_r25 = &Hu3DData[temp_r3]; temp_r29 = temp_r25->unk_120; temp_r29->unk_00 = var_r30; @@ -1214,7 +1214,7 @@ static float jitterTbl[] = { 0.5f, 0.7f, 0.9f, 1.0f }; -static void ParManHook(ModelData *arg0, ParticleData *arg1) { +static void ParManHook(ModelData *model, ParticleData *particle, Mtx matrix) { HsfanimStruct00 *temp_r26; ParManProcUserData *temp_r28; HsfanimStruct01 *var_r29; @@ -1228,9 +1228,9 @@ static void ParManHook(ModelData *arg0, ParticleData *arg1) { s16 sp8; s16 i; - if (Hu3DPauseF == 0 || (arg0->attr & 0x200000)) { - var_r29 = arg1->unk_48; - for (i = 0; i < arg1->unk_30; i++, var_r29++) { + if (Hu3DPauseF == 0 || (model->attr & 0x200000)) { + var_r29 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r29++) { if (var_r29->unk2C) { temp_r28 = parManProc[var_r29->unk02]->user_data; temp_r26 = temp_r28->unk3C; @@ -1278,8 +1278,8 @@ static void ParManHook(ModelData *arg0, ParticleData *arg1) { } } } - temp_r28 = parManProc[arg1->unk_00]->user_data; + temp_r28 = parManProc[particle->unk_00]->user_data; temp_r28->unk38++; - DCStoreRangeNoSync(arg1->unk_48, arg1->unk_30 * sizeof(HsfanimStruct01)); + DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01)); } } From 7963e868fe9f33b82ae9e341d6593006f945ba66 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 12 Mar 2024 14:34:33 -0500 Subject: [PATCH 068/106] Match bowser code --- config/GMPE01_00/symbols.txt | 4 +- configure.py | 2 +- src/game/board/bowser.c | 410 +++++++++++++++++++++++++++++++++++ 3 files changed, 413 insertions(+), 3 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 279a6c19..6e4824d3 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -1751,8 +1751,8 @@ SpawnBowserFire = .text:0x8009A5D4; // type:function size:0xE4 scope:local CheckBowserFire = .text:0x8009A6B8; // type:function size:0xCC scope:local KillBowserFire = .text:0x8009A784; // type:function size:0x40 scope:local ExecMiniBowserEvent = .text:0x8009A7C4; // type:function size:0x188 scope:local -MiniBowserTakeAll = .text:0x8009A94C; // type:function size:0x2C4 scope:local -MiniBowserTake = .text:0x8009AC10; // type:function size:0x2B8 scope:local +MiniBowserTake = .text:0x8009A94C; // type:function size:0x2C4 scope:local +MiniBowserTakeAll = .text:0x8009AC10; // type:function size:0x2B8 scope:local MiniBowserBalloonStop = .text:0x8009AEC8; // type:function size:0x24 scope:local GetMiniBowserBalloonState = .text:0x8009AEEC; // type:function size:0xC scope:local SetMiniBowserBalloonState = .text:0x8009AEF8; // type:function size:0x10 scope:local diff --git a/configure.py b/configure.py index 51f63497..bd98c8e5 100644 --- a/configure.py +++ b/configure.py @@ -386,7 +386,7 @@ config.libs = [ Object(Matching, "game/board/ui.c"), Object(Matching, "game/board/block.c"), Object(Matching, "game/board/item.c"), - Object(NonMatching, "game/board/bowser.c"), + Object(Matching, "game/board/bowser.c"), Object(Matching, "game/board/battle.c"), Object(Matching, "game/board/fortune.c"), Object(Matching, "game/board/boo.c"), diff --git a/src/game/board/bowser.c b/src/game/board/bowser.c index 70cb0d2f..d32ce7d5 100644 --- a/src/game/board/bowser.c +++ b/src/game/board/bowser.c @@ -1399,4 +1399,414 @@ static void KillBowserFire(void) fireParMan = -1; fireAnim = NULL; } +} + +typedef struct mini_bowser_balloon_work { + u8 kill : 1; + u8 state; + u16 timer; + s16 angle; + float offset; + s16 *models; +} MiniBowserBalloonWork; + +static void MiniBowserTake(void); +static void MiniBowserTakeAll(void); +static void MiniBowserBalloonStop(void); + +static s32 GetMiniBowserBalloonState(void); +static void SetMiniBowserBalloonState(s32 state); +static void CreateMiniBowserBalloon(void); + +static void ExecMiniBowserBalloon(omObjData *object); +static void MiniBowserBalloonHover(MiniBowserBalloonWork *work, omObjData *object); +static void MiniBowserBalloonFall(MiniBowserBalloonWork *work, omObjData *object); +static void MiniBowserBalloonRaise(MiniBowserBalloonWork *work, omObjData *object); + + +static void SetMiniBowserMotion(s32 mot, u8 end, s32 pause); +static void SetMiniBowserMotionPause(s32 flag); +static void WaitMiniBowserMotion(void); + +static s32 ExecMiniBowserEvent(void) +{ + s32 doneF = 0; + CreateMiniBowserBalloon(); + SetMiniBowserBalloonState(0); + while(GetMiniBowserBalloonState() != 2) { + HuPrcVSleep(); + } + BoardFilterFadeOut(30); + BoardAudSeqFadeOut(1, 1000); + HuPrcSleep(30); + BoardAudSeqFadeOutFast(1); + BoardMusStart(1, 11, 127, 0); + HuAudFXPlay(62); + BoardWinCreate(2, 0x30000, 6); + BoardWinWait(); + if(BoardRandMod(100) < 70) { + MiniBowserTake(); + } else { + MiniBowserTakeAll(); + } + if(BoardRandMod(100) < 5) { + doneF = 1; + } + if(doneF) { + HuPrcSleep(60); + BoardWinCreate(2, 0x30006, 6); + BoardWinWait(); + BoardWinKill(); + HuAudFXPlay(62); + SetMiniBowserMotion(6, 10, 1); + HuPrcSleep(60); + } else { + HuAudFXPlay(62); + BoardWinCreate(2, 0x30002, 6); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqFadeOut(1, 1000); + SetMiniBowserMotion(4, 10, 1); + HuPrcSleep(30); + } + SetMiniBowserBalloonState(1); + while(GetMiniBowserBalloonState() != 2) { + HuPrcVSleep(); + } + MiniBowserBalloonStop(); + return doneF; +} + +static void MiniBowserTake(void) +{ + u8 coinSteal[][3] = { + 20, 20, 30, + 20, 20, 30, + 10, 15, 20, + 10, 15, 20 + }; + s32 coin_inc; + s32 game_part; + u8 steal; + s32 i; + u32 mess; + s32 delay; + s32 turn; + s32 turn_max; + turn = GWSystem.turn-1; + turn_max = GWSystem.max_turn; + game_part = turn/(turn_max/3); + if(game_part >= 3) { + game_part = 2; + } + steal = (u8)coinSteal[GWPlayer[eventPlayer].rank][game_part]; + sprintf(coinStealStrAll, "%d", steal); + SetMiniBowserMotion(2, 10, 0); + if(steal >= 20) { + delay = 3; + } else { + delay = 6; + } + if(BoardPlayerCoinsGet(eventPlayer) != 0) { + mess = 0x30001; + coin_inc = -1; + } else { + mess = 0x30003; + steal = 10; + coin_inc = 1; + } + HuAudFXPlay(62); + BoardWinCreate(2, mess, 6); + BoardWinInsertMesSet(MAKE_MESSID_PTR(coinStealStrAll), 0); + BoardWinWait(); + if(coin_inc > 0) { + SetMiniBowserMotion(5, 10, 0); + } else { + SetMiniBowserMotion(3, 10, 1); + } + if(coin_inc < 0) { + omVibrate(eventPlayer, 12, 6, 6); + } + if(coin_inc < 0) { + BoardPlayerMotionShiftSet(eventPlayer, 13, 0.0f, 4.0f, 0); + } else { + BoardPlayerMotionShiftSet(eventPlayer, 12, 0.0f, 4.0f, 0); + } + for(i=0; i= 3) { + game_part = 2; + } + steal = (u8)coinSteal[game_part]; + sprintf(coinStealStr, "%d", steal); + SetMiniBowserMotion(2, 10, 0); + for(coin_total=j=0; j<4; j++) { + coin_total += BoardPlayerCoinsGet(j); + } + if(coin_total != 0) { + mess = 0x30004; + coin_inc = -1; + } else { + mess = 0x30005; + steal = 10; + coin_inc = 1; + } + HuAudFXPlay(62); + BoardWinCreate(2, mess, 6); + BoardWinInsertMesSet(MAKE_MESSID_PTR(coinStealStr), 0); + BoardWinWait(); + if(coin_inc > 0) { + SetMiniBowserMotion(5, 10, 0); + } else { + SetMiniBowserMotion(3, 10, 1); + } + if(coin_inc < 0) { + for(i=0; i<4; i++) { + omVibrate(i, 12, 6, 6); + } + } + for(i=0; i<4; i++) { + if(coin_inc < 0) { + BoardPlayerMotionShiftSet(i, 13, 0.0f, 4.0f, 0); + } else { + BoardPlayerMotionShiftSet(i, 12, 0.0f, 4.0f, 0); + } + } + if(steal >= 20) { + delay = 3; + } else { + delay = 6; + } + for(i=0; ikill = 1; + } +} + +static s32 GetMiniBowserBalloonState(void) +{ + return OM_GET_WORK_PTR(miniBowserBalloonObj, MiniBowserBalloonWork)->state; +} + +static void SetMiniBowserBalloonState(s32 state) +{ + OM_GET_WORK_PTR(miniBowserBalloonObj, MiniBowserBalloonWork)->state = state; +} + +static void CreateMiniBowserBalloon(void) +{ + MiniBowserBalloonWork *work; + s16 *models; + Vec pos; + miniBowserBalloonObj = omAddObjEx(boardObjMan, 257, 0, 0, -1, ExecMiniBowserBalloon); + work = OM_GET_WORK_PTR(miniBowserBalloonObj, MiniBowserBalloonWork); + work->kill = 0; + work->state = 0; + work->timer = 0; + work->offset = 0; + work->angle = 0; + work->models = HuMemDirectMallocNum(HEAP_SYSTEM, 9*sizeof(s16), MEMORY_DEFAULT_NUM); + models = work->models; + models[0] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BKOOPA, 14), (s32 *)miniBowserMotTbl, 0); + models[1] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BKOOPA, 0), NULL, 0); + BoardPlayerPosGet(eventPlayer, &pos); + miniBowserBalloonObj->trans.x = pos.x; + miniBowserBalloonObj->trans.y = pos.y+800.0f; + miniBowserBalloonObj->trans.z = pos.z; + BoardModelHookSet(models[1], "minik01", models[0]); + BoardModelPosSet(models[1], miniBowserBalloonObj->trans.x, + miniBowserBalloonObj->trans.y, + miniBowserBalloonObj->trans.z); + SetMiniBowserMotion(1, 0, 1); +} + +static void ExecMiniBowserBalloon(omObjData *object) +{ + MiniBowserBalloonWork *work; + s16 *models; + work = OM_GET_WORK_PTR(miniBowserBalloonObj, MiniBowserBalloonWork); + models = work->models; + if(work->kill || BoardIsKill()) { + BoardModelKill(models[0]); + BoardModelKill(models[1]); + HuMemDirectFree(work->models); + miniBowserBalloonObj = NULL; + omDelObjEx(HuPrcCurrentGet(), object); + return; + } + if(work->timer) { + work->timer--; + } else { + switch(work->state) { + case 0: + MiniBowserBalloonFall(work, object); + break; + + case 1: + MiniBowserBalloonRaise(work, object); + break; + + case 2: + MiniBowserBalloonHover(work, object); + break; + } + } + BoardModelPosSet(models[1], object->trans.x, object->trans.y+work->offset, object->trans.z); +} + +static void MiniBowserBalloonHover(MiniBowserBalloonWork *work, omObjData *object) +{ + float angle; + work->angle++; + if(work->angle >= 360) { + work->angle = 0; + } + OSs16tof32(&work->angle, &angle); + work->offset = 10.0*sin(M_PI*angle/180.0); +} + +static void MiniBowserBalloonFall(MiniBowserBalloonWork *work, omObjData *object) +{ + Vec pos; + BoardPlayerPosGet(eventPlayer, &pos); + pos.y += 250.0f; + if(object->trans.y < pos.y) { + object->trans.y = pos.y; + work->state = 2; + } else { + object->trans.y += -10.0f; + } +} + +static void MiniBowserBalloonRaise(MiniBowserBalloonWork *work, omObjData *object) +{ + Vec pos; + BoardPlayerPosGet(eventPlayer, &pos); + pos.y += 800.0f; + if(object->trans.y > pos.y) { + work->state = 2; + } else { + object->trans.y += 10.0f; + } +} + +static void SetMiniBowserMotion(s32 mot, u8 end, s32 pause) +{ + s16 *models; + u32 attr; + float shift_end; + MiniBowserBalloonWork *work; + work = OM_GET_WORK_PTR(miniBowserBalloonObj, MiniBowserBalloonWork); + models = work->models; + if(pause) { + attr = 0x40000001; + } else { + attr = 0; + } + if(end) { + OSu8tof32(&end, &shift_end); + BoardModelMotionShiftSet(models[0], mot, 0, shift_end, attr); + } else { + BoardModelMotionStart(models[0], mot, attr); + } +} + +static void SetMiniBowserMotionPause(s32 flag) +{ + s16 *models; + MiniBowserBalloonWork *work; + work = OM_GET_WORK_PTR(miniBowserBalloonObj, MiniBowserBalloonWork); + models = work->models; + if(flag) { + BoardModelAttrSet(models[0], 0x40000001); + } else { + BoardModelAttrReset(models[0], 0x40000001); + } +} + +static void WaitMiniBowserMotion(void) +{ + s16 *models; + MiniBowserBalloonWork *work; + work = OM_GET_WORK_PTR(miniBowserBalloonObj, MiniBowserBalloonWork); + models = work->models; + BoardModelAttrReset(models[0], 0x40000001); + while(!BoardModelMotionEndCheck(models[0])) { + HuPrcVSleep(); + } } \ No newline at end of file From c623d8549fdf4cb58f4c62ee24bf2238c1ed0c2f Mon Sep 17 00:00:00 2001 From: mrshigure Date: Tue, 12 Mar 2024 13:59:40 -0700 Subject: [PATCH 069/106] Matched game/board/start --- configure.py | 2 +- include/game/board/star.h | 4 +- include/game/board/start.h | 6 + src/game/board/battle.c | 1 + src/game/board/char_wheel.c | 1 + src/game/board/main.c | 2 +- src/game/board/pause.c | 1 + src/game/board/shop.c | 1 + src/game/board/start.c | 887 ++++++++++++++++++++++++++++++++++++ src/game/board/ui.c | 1 + src/game/board/view.c | 1 + 11 files changed, 903 insertions(+), 4 deletions(-) create mode 100755 include/game/board/start.h create mode 100755 src/game/board/start.c diff --git a/configure.py b/configure.py index bd98c8e5..ad9ff1e0 100644 --- a/configure.py +++ b/configure.py @@ -392,7 +392,7 @@ config.libs = [ Object(Matching, "game/board/boo.c"), Object(Matching, "game/board/mg_setup.c"), Object(NonMatching, "game/board/boo_house.c"), - Object(NonMatching, "game/board/start.c"), + Object(Matching, "game/board/start.c"), Object(Matching, "game/board/last5.c"), Object(Matching, "game/board/pause.c"), Object(Matching, "game/board/com_path.c"), diff --git a/include/game/board/star.h b/include/game/board/star.h index 04a87558..eea8e525 100755 --- a/include/game/board/star.h +++ b/include/game/board/star.h @@ -1,5 +1,5 @@ -#ifndef _BOARD_START_H -#define _BOARD_START_H +#ifndef _BOARD_STAR_H +#define _BOARD_STAR_H #include "game/board/space.h" diff --git a/include/game/board/start.h b/include/game/board/start.h new file mode 100755 index 00000000..8b509fe7 --- /dev/null +++ b/include/game/board/start.h @@ -0,0 +1,6 @@ +#ifndef _BOARD_START_H +#define _BOARD_START_H + +void BoardStartExec(void); + +#endif diff --git a/src/game/board/battle.c b/src/game/board/battle.c index 504b5fe7..491d5c22 100755 --- a/src/game/board/battle.c +++ b/src/game/board/battle.c @@ -6,6 +6,7 @@ #include "game/object.h" #include "game/objsub.h" #include "game/process.h" +#include "game/sprite.h" #include "game/wipe.h" #include "game/board/audio.h" #include "game/board/main.h" diff --git a/src/game/board/char_wheel.c b/src/game/board/char_wheel.c index 75b8510f..a3d53557 100755 --- a/src/game/board/char_wheel.c +++ b/src/game/board/char_wheel.c @@ -4,6 +4,7 @@ #include "game/gamework.h" #include "game/object.h" #include "game/pad.h" +#include "game/sprite.h" #include "game/board/com.h" #include "game/board/main.h" #include "game/board/tutorial.h" diff --git a/src/game/board/main.c b/src/game/board/main.c index 8ad45315..86584a91 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -16,6 +16,7 @@ #include "game/board/player.h" #include "game/board/shop.h" #include "game/board/space.h" +#include "game/board/start.h" #include "game/board/tutorial.h" #include "game/board/ui.h" #include "game/pad.h" @@ -63,7 +64,6 @@ static CameraView camViewTbl[] = { extern void BoardMGSetupPlayClear(void); -extern void BoardStartExec(void); static void InitBoardFunc(omObjData *object); static void ExecBoardFunc(omObjData *object); diff --git a/src/game/board/pause.c b/src/game/board/pause.c index 17e379e2..e156d443 100755 --- a/src/game/board/pause.c +++ b/src/game/board/pause.c @@ -8,6 +8,7 @@ #include "game/pad.h" #include "game/process.h" #include "game/saveload.h" +#include "game/sprite.h" #include "game/window.h" #include "game/wipe.h" #include "game/board/main.h" diff --git a/src/game/board/shop.c b/src/game/board/shop.c index c5e6ebe6..fb28fcda 100755 --- a/src/game/board/shop.c +++ b/src/game/board/shop.c @@ -6,6 +6,7 @@ #include "game/objsub.h" #include "game/pad.h" #include "game/process.h" +#include "game/sprite.h" #include "game/board/audio.h" #include "game/board/com.h" #include "game/board/com_path.h" diff --git a/src/game/board/start.c b/src/game/board/start.c new file mode 100755 index 00000000..0487136c --- /dev/null +++ b/src/game/board/start.c @@ -0,0 +1,887 @@ +#include "game/board/start.h" +#include "game/audio.h" +#include "game/gamework_data.h" +#include "game/flag.h" +#include "game/hsfanim.h" +#include "game/memory.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/sprite.h" +#include "game/wipe.h" +#include "game/board/audio.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/roll.h" +#include "game/board/space.h" +#include "game/board/star.h" +#include "game/board/tutorial.h" +#include "game/board/ui.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "string.h" + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 3; + u8 unk00_field2 : 2; + u8 unk00_field3 : 1; + u8 unk00_field4 : 1; + }; + u8 unk01; + u8 unk02; + s8 unk03; + s8 unk04; + char unk05[1]; + s16 unk06; + s16 unk08; + s16 unk0A; + s16 unk0C; + s8 unk0E; +} PlayerStartWork; + +static void DestroyStart(void); +static void ExecStart(void); +static void ShowLogo(void); +static void FocusStart(void); +static void CreatePlayerStart(void); +static void ExecPlayerStart(omObjData *arg0); +static void PlayerFall(omObjData *arg0, PlayerStartWork *arg1); +static void PlayerWaitSpeak(omObjData *arg0, PlayerStartWork *arg1); +static void PlayerDiceFall(omObjData *arg0, PlayerStartWork *arg1); +static void PlayerDiceRoll(omObjData *arg0, PlayerStartWork *arg1); +static void PlayerDiceNumShow(omObjData *arg0, PlayerStartWork *arg1); +static void PlayerDiceNumHide(omObjData *arg0, PlayerStartWork *arg1); +static void SetPlayerStartState(s32 arg0, s32 arg1); +static s32 GetPlayerStartState(s32 arg0); +static void ExecStartRoll(void); +static void InitCamera(void); +static void InitHost(void); +static void CreateTapWin(void); +static void OrderPlayers(void); + +static Vec spacePos; +static Vec camStartFocusPos; + +static s16 hostMdl; +static s16 startSpace; +static s8 playerOrderNew[4]; +static s8 playerOrderOld[4]; +static Process *startProc; + +static s16 logoSprGrp = -1; +static s16 logoSpr = -1; +static s16 camFocus = -1; +static s16 tapWin = -1; +static s32 streamStatus = -1; + +static s8 tutorialRollTbl[] = { + 0x02, 0x08, 0x06, 0x00 +}; + +static omObjData *playerStartObj[4] = { + NULL, NULL, NULL, NULL +}; + +static s32 hitFX[4] = { + -1, -1, -1, -1 +}; + +static s32 startMesTbl[9][5] = { + { 0x00150001, 0x00150007, 0x0015000D, 0x00150016, 0x0015001C }, + { 0x00150002, 0x00150008, 0x0015000E, 0x00150017, 0x0015001D }, + { 0x00150003, 0x00150009, 0x0015000F, 0x00150018, 0x0015001E }, + { 0x00150004, 0x0015000A, 0x00150010, 0x00150019, 0x0015001F }, + { 0x00150005, 0x0015000B, 0x00150011, 0x0015001A, 0x00150020 }, + { 0x00150006, 0x0015000C, 0x00150012, 0x0015001B, 0x00150021 }, + { 0x00150001, 0x00150007, 0x0015000D, 0x00150016, 0x0015001C }, + { 0x00150033, 0x00150034, 0x00150035, 0x00150036, 0x00150037 }, + { 0x0015003B, 0x0015003C, 0x0015003D, 0x0015003E, 0x0015003F } +}; + +static s32 logoSprTbl[] = { + 0x00070057, 0x00070058, 0x00070059, + 0x0007005A, 0x0007005B, 0x0007005C, + 0x00070057, 0x0007005D, 0x0007005E +}; + +void BoardStartExec(void) { + startProc = HuPrcChildCreate(ExecStart, 0x2007, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(startProc, DestroyStart); + while (startProc != NULL) { + HuPrcVSleep(); + } +} + +static void DestroyStart(void) { + if (tapWin != -1) { + HuWinKill(tapWin); + tapWin = -1; + } + if (logoSprGrp != -1) { + HuSprGrpKill(logoSprGrp); + logoSprGrp = -1; + } + if (camFocus != -1) { + BoardModelKill(camFocus); + camFocus = -1; + } + BoardCameraNearFarSet(100.0f, 13000.0f); + startProc = NULL; +} + +static void ExecStart(void) { + Vec sp8; + s32 i; + + BoardCameraNearFarSet(100.0f, 23000.0f); + GWSystem.player_curr = -1; + startSpace = BoardSpaceFlagPosGet(0, 0x80000000, &spacePos); + if ((GWBoardGet() == 2 || GWBoardGet() == 5) && boardLightResetHook) { + boardLightResetHook(); + } + for (i = 0; i < 4; i++) { + BoardModelVisibilitySet(BoardPlayerModelGet(i), 0); + } + InitCamera(); + CreateTapWin(); + InitHost(); + WipeCreate(1, 0, 0x15); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + _ClearFlag(0x1001C); + if (!_CheckFlag(0x1000B)) { + streamStatus = HuAudSStreamPlay(5); + ShowLogo(); + FocusStart(); + if ((GWBoardGet() == 2 || GWBoardGet() == 5) && boardLightSetHook) { + boardLightSetHook(); + } + BoardCameraMotionWait(); + } else { + BoardMusStart(0, 0x28, 0x7F, 0); + } + CreatePlayerStart(); + ExecStartRoll(); + if (!_CheckFlag(0x1000B)) { + BoardAudSeqFadeOut(0, 0x1F4); + } + if (_CheckFlag(0x1000B)) { + BoardTutorialHookExec(4, 0); + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, 0x15); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + for (i = 0; i < 4; i++) { + BoardPlayerCornerPosSet(i); + } + BoardSpacePosGet(0, GWPlayer->space_curr, &sp8); + BoardPlayerPosSetV(0, &sp8); + BoardCameraMoveSet(0); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + BoardCameraTargetPlayerSet(0); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + BoardModelVisibilitySet(BoardStarHostMdlGet(), 0); + WipeCreate(1, 0, 0x15); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + HuPrcEnd(); + } + BoardCameraNearFarSet(100.0f, 13000.0f); + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, 0x15); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + GWSystem.player_curr = 0; + BoardModelVisibilitySet(hostMdl, 0); + BoardStatusItemSet(1); + BoardPlayerCornerPosSet(0); + BoardPlayerCornerPosSet(1); + BoardPlayerCornerPosSet(2); + BoardPlayerCornerPosSet(3); + BoardPlayerPosSetV(0, &spacePos); + BoardCameraMoveSet(0); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + WipeCreate(1, 0, 0x15); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + } else { + BoardStarShowNext(-1); + } + HuPrcEnd(); +} + +static void ShowLogo(void) { + float temp_f28; + float var_f27; + s16 spA; + s16 sp8; + + logoSprGrp = HuSprGrpCreate(1); + BoardSpriteCreate(logoSprTbl[GWBoardGet()], 1000, 0, &logoSpr); + HuSprGrpMemberSet(logoSprGrp, 0, logoSpr); + HuSprAttrSet(logoSprGrp, 0, 1); + HuSprAttrSet(logoSprGrp, 0, 8); + HuSprScaleSet(logoSprGrp, 0, 0.01f, 0.01f); + HuSprGrpPosSet(logoSprGrp, 288.0f, 240.0f); + for (spA = 0; spA < 90; spA += 4) { + OSs16tof32(&spA, &var_f27); + temp_f28 = sin(var_f27 * M_PI / 180.0); + HuSprScaleSet(logoSprGrp, 0, temp_f28, temp_f28); + HuPrcVSleep(); + } + HuSprScaleSet(logoSprGrp, 0, 1.0f, 1.0f); + for (spA = 0; spA < 540; spA += 4) { + sp8 = spA % 180; + OSs16tof32(&sp8, &var_f27); + temp_f28 = 1.0 + 0.699999988079071 * sin(var_f27 * M_PI / 180.0); + HuSprScaleSet(logoSprGrp, 0, temp_f28, temp_f28); + HuPrcVSleep(); + } + HuSprScaleSet(logoSprGrp, 0, 1.0f, 1.0f); + HuPrcSleep(0x78); + for (spA = 0; spA < 90; spA += 4) { + OSs16tof32(&spA, &var_f27); + temp_f28 = cos(var_f27 * M_PI / 180.0); + HuSprScaleSet(logoSprGrp, 0, temp_f28, temp_f28); + HuPrcVSleep(); + } + HuSprGrpKill(logoSprGrp); + logoSprGrp = -1; +} + +static void FocusStart(void) { + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + u32 var_r31; + + for (var_f31 = 14000.0f; var_f31 >= 2000.0f; var_f31 -= 50.0f) { + BoardCameraZoomSet(var_f31); + HuPrcVSleep(); + } + BoardCameraZoomSet(2000.0f); + BoardModelPosGet(camFocus, &sp2C); + sp20.x = spacePos.x + 150.0f; + sp20.y = spacePos.y + 100.0f; + sp20.z = spacePos.z + 150.0f; + PSVECSubtract(&sp20, &sp2C, &sp14); + sp14.x /= 120.0f; + sp14.y /= 120.0f; + sp14.z /= 120.0f; + HuAudSStreamFadeOut(streamStatus, 0x1388); + for (var_r31 = 0; var_r31 < 120; var_r31++) { + PSVECAdd(&sp14, &sp2C, &sp2C); + BoardModelPosSetV(camFocus, &sp2C); + HuPrcVSleep(); + } + BoardModelPosSetV(camFocus, &sp20); + sp8.x = -22.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(camFocus, &sp8, 0, 1500.0f, -1.0f, 0x15); +} + +static void CreatePlayerStart(void) { + Vec spC; + float temp_f30; + omObjData *var_r29; + PlayerStartWork *var_r30; + s8 i; + + BoardModelPosGet(camFocus, &spC); + for (i = 0; i < 4; i++) { + playerOrderOld[i] = i; + var_r29 = omAddObjEx(boardObjMan, 0x100, 0, 0, -1, ExecPlayerStart); + playerStartObj[i] = var_r29; + var_r30 = OM_GET_WORK_PTR(var_r29, PlayerStartWork); + var_r30->unk00_field0 = 0; + var_r30->unk00_field2 = i; + var_r30->unk03 = -1; + var_r30->unk0A = -1; + var_r30->unk0C = -1; + var_r30->unk00_field1 = 1; + var_r30->unk01 = i * 30; + var_r30->unk00_field3 = 0; + var_r30->unk00_field4 = 0; + var_r30->unk06 = 2; + var_r30->unk04 = 1; + var_r30->unk0E = 0x3C; + var_r30->unk08 = BoardModelCreate(0x70018, NULL, 0); + BoardModelVisibilitySet(var_r30->unk08, 0); + BoardModelMotionSpeedSet(var_r30->unk08, 0.0f); + OSs8tof32(&i, &temp_f30); + temp_f30 = 135.0f * (temp_f30 - 2.0f + 0.5f); + BoardModelVisibilitySet(BoardPlayerModelGet(playerOrderOld[var_r30->unk00_field2]), 1); + var_r29->trans.x = spC.x + temp_f30; + var_r29->trans.y = spC.y + 700.0f; + var_r29->trans.z = spC.z + 100.0f; + BoardPlayerPosSet(playerOrderOld[var_r30->unk00_field2], var_r29->trans.x, var_r29->trans.y, var_r29->trans.z); + BoardPlayerMotionShiftSet(playerOrderOld[var_r30->unk00_field2], 4, 10.0f, 1.0f, 0); + } + if (!_CheckFlag(0x1000B)) { + BoardMusStart(0, 0xC, 0x7F, 0); + } + while (GetPlayerStartState(3) != 0) { + HuPrcVSleep(); + } +} + +static void ExecPlayerStart(omObjData *arg0) { + PlayerStartWork *temp_r31 = OM_GET_WORK_PTR(arg0, PlayerStartWork); + + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + if (hitFX[temp_r31->unk00_field2] != -1) { + HuAudFXStop(hitFX[temp_r31->unk00_field2]); + hitFX[temp_r31->unk00_field2] = -1; + } + playerStartObj[temp_r31->unk00_field2] = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r31->unk01 != 0) { + temp_r31->unk01--; + return; + } + switch (temp_r31->unk00_field1) { + case 0: + break; + case 1: + PlayerFall(arg0, temp_r31); + break; + case 2: + PlayerWaitSpeak(arg0, temp_r31); + break; + case 3: + PlayerDiceFall(arg0, temp_r31); + break; + case 4: + PlayerDiceRoll(arg0, temp_r31); + break; + case 5: + PlayerDiceNumShow(arg0, temp_r31); + break; + case 6: + PlayerDiceNumHide(arg0, temp_r31); + break; + } +} + +static void PlayerFall(omObjData *arg0, PlayerStartWork *arg1) { + float temp_f31; + + if (arg1->unk00_field3 != 0) { + SetPlayerStartState(playerOrderOld[arg1->unk00_field2], 0); + BoardPlayerIdleSet(playerOrderOld[arg1->unk00_field2]); + if (_CheckFlag(0x1000B) && arg1->unk00_field2 == 3) { + BoardTutorialHookExec(0, 0); + } + return; + } + if (arg1->unk02 > 200) { + arg1->unk02 = -56; + } + OSu8tof32(&arg1->unk02, &temp_f31); + arg0->trans.y += -0.08166667f * temp_f31 * temp_f31; + if (arg0->trans.y < spacePos.y) { + arg0->trans.y = spacePos.y; + arg1->unk02 = 0; + BoardPlayerMotionShiftSet(playerOrderOld[arg1->unk00_field2], 5, 0.0f, 4.0f, 0); + arg1->unk01 = 0xC; + arg1->unk00_field3 = 1; + } + arg1->unk02++; + BoardPlayerPosSet(playerOrderOld[arg1->unk00_field2], arg0->trans.x, arg0->trans.y, arg0->trans.z); +} + +static void PlayerWaitSpeak(omObjData *arg0, PlayerStartWork *arg1) { + float var_f31; + + if (arg1->unk02 == 0) { + var_f31 = 180.0f + BoardPlayerRotYGet(playerOrderOld[arg1->unk00_field2]); + BoardPlayerMotBlendSet(playerOrderOld[arg1->unk00_field2], var_f31, 0xF); + arg1->unk02 = 1; + return; + } + if (BoardPlayerMotBlendCheck(playerOrderOld[arg1->unk00_field2])) { + BoardPlayerIdleSet(playerOrderOld[arg1->unk00_field2]); + SetPlayerStartState(playerOrderOld[arg1->unk00_field2], 0); + } +} + +static void PlayerDiceFall(omObjData *arg0, PlayerStartWork *arg1) { + Vec sp8; + float var_f31; + float var_f30; + s32 i; + + if (arg1->unk02 == 0) { + HuAudFXPlay(0x302); + BoardPlayerPosGet(playerOrderOld[arg1->unk00_field2], &sp8); + var_f30 = 250.0f; + var_f31 = 700.0f; + arg0->rot.x = (var_f30 - var_f31) / 30.0f; + sp8.y += var_f31; + BoardModelPosSetV(arg1->unk08, &sp8); + BoardModelVisibilitySet(arg1->unk08, 1); + } else { + if (arg1->unk02 > 30.0f) { + if (_CheckFlag(0x1000B)) { + if (arg1->unk00_field2 == 3) { + BoardTutorialHookExec(1, 0); + for (i = 0; i < 4; i++) { + SetPlayerStartState(playerOrderOld[i], 4); + } + } + return; + } + SetPlayerStartState(playerOrderOld[arg1->unk00_field2], 4); + return; + } + BoardModelPosGet(arg1->unk08, &sp8); + sp8.y += arg0->rot.x; + BoardModelPosSetV(arg1->unk08, &sp8); + } + arg1->unk02++; +} + +static s32 digitMdlTbl[9] = { + 0x0007000D, 0x0007000E, 0x0007000F, + 0x00070010, 0x00070011, 0x00070012, + 0x00070013, 0x00070014, 0x00070015 +}; + +static s32 playerOrderMesTbl[3] = { + 0x00150013, + 0x00150014, + 0x00150015 +}; + +static void PlayerDiceRoll(omObjData *arg0, PlayerStartWork *arg1) { + Vec sp8; + float var_f30; + u32 var_r28; + s8 var_r29; + s8 temp_r26; + + var_r28 = 0; + if (arg1->unk02 > arg1->unk06) { + arg1->unk02 = 0; + temp_r26 = arg1->unk04; + do { + arg1->unk04 = BoardRandMod(9); + } while (arg1->unk04 == temp_r26); + OSs8tof32(&arg1->unk04, &var_f30); + BoardModelMotionTimeSet(arg1->unk08, var_f30 + 0.5f); + } + if (arg1->unk00_field4 == 0) { + if (GWPlayer[playerOrderOld[arg1->unk00_field2]].com) { + if (_CheckFlag(0x1000B)) { + if (arg1->unk0E != 0) { + arg1->unk0E--; + } else { + var_r28 = 0x100; + } + } else if (BoardRandMod(100) < 5) { + var_r28 = 0x100; + } + } else { + var_r28 = HuPadBtnDown[GWPlayer[playerOrderOld[arg1->unk00_field2]].port]; + } + if (var_r28 == 0x100) { + BoardPlayerDiceJumpStart(playerOrderOld[arg1->unk00_field2]); + arg1->unk00_field4 = 1; + } + } else { + if (BoardPlayerDiceJumpCheck(playerOrderOld[arg1->unk00_field2])) { + SetPlayerStartState(playerOrderOld[arg1->unk00_field2], 5); + arg1->unk06 = 360; + arg0->rot.x = arg0->rot.y = 1.0f; + arg1->unk04 = BoardRandMod(9); + HuAudFXPlay(0x303); + if (hitFX[arg1->unk00_field2] != -1) { + HuAudFXStop(hitFX[arg1->unk00_field2]); + hitFX[arg1->unk00_field2] = -1; + } + var_r29 = 0; + while (var_r29 < 4) { + if (playerOrderNew[var_r29] == arg1->unk04 && var_r29 != playerOrderOld[arg1->unk00_field2]) { + arg1->unk04 = BoardRandMod(9); + var_r29 = 0; + } else { + var_r29++; + } + } + if (_CheckFlag(0x1000B)) { + arg1->unk04 = tutorialRollTbl[arg1->unk00_field2]; + } + playerOrderNew[playerOrderOld[arg1->unk00_field2]] = arg1->unk04; + arg1->unk0A = BoardModelCreate(digitMdlTbl[arg1->unk04], NULL, 0); + BoardModelPosGet(arg1->unk08, &sp8); + sp8.x += 50.0 * sin(0.0); + sp8.z += 50.0 * cos(0.0); + BoardModelPosSetV(arg1->unk0A, &sp8); + BoardModelMotionStart(arg1->unk0A, 0, 0); + BoardModelMotionSpeedSet(arg1->unk0A, 0.0f); + BoardModelMotionTimeSet(arg1->unk0A, 0.0f); + BoardModelLayerSet(arg1->unk0A, 2); + arg1->unk0C = BoardDiceEffectCreate(); + Hu3DParManPosSet(arg1->unk0C, sp8.x, sp8.y, sp8.z); + Hu3DParManTimeLimitSet(arg1->unk0C, 0x96); + BoardModelVisibilitySet(arg1->unk08, 0); + return; + } + } + arg1->unk02++; +} + +static void PlayerDiceNumShow(omObjData *arg0, PlayerStartWork *arg1) { + float var_f30; + + arg1->unk06 -= 18; + if (arg1->unk06 < 0) { + arg1->unk06 = 0; + SetPlayerStartState(playerOrderOld[arg1->unk00_field2], 0); + if (_CheckFlag(0x1000B)) { + BoardTutorialHookExec(2, 0); + } + } + OSs16tof32(&arg1->unk06, &var_f30); + BoardModelRotYSet(arg1->unk0A, var_f30); +} + +static void PlayerDiceNumHide(omObjData *arg0, PlayerStartWork *arg1) { + float var_f28; + + switch (arg1->unk02) { + case 0: + arg1->unk06 += 18; + if (arg1->unk06 > 360) { + arg1->unk06 = 0; + arg1->unk02 = 1; + arg0->rot.x = 1.0f; + arg0->rot.y = 1.0f; + } + OSs16tof32(&arg1->unk06, &var_f28); + BoardModelRotYSet(arg1->unk0A, var_f28); + return; + case 1: + arg1->unk06 += 9; + if (arg1->unk06 > 180) { + arg1->unk06 = 0; + arg1->unk02 = 2; + } + OSs16tof32(&arg1->unk06, &var_f28); + arg0->rot.x = 1.0 + 1.2999999523162842 * sin(var_f28 * M_PI / 180.0); + break; + case 2: + arg1->unk06 += 9; + if (arg1->unk06 > 180) { + arg1->unk06 = 179; + arg1->unk02 = 3; + } + OSs16tof32(&arg1->unk06, &var_f28); + arg0->rot.x = cos(0.5f * var_f28 * M_PI / 180.0); + arg0->rot.y = 1.0 + 1.2999999523162842 * sin(var_f28 * M_PI / 180.0); + break; + case 3: + BoardModelVisibilitySet(arg1->unk0A, 0); + arg1->unk00_field0 = 1; + return; + } + BoardModelScaleSet(arg1->unk0A, arg0->rot.x, arg0->rot.y, 1.0f); +} + +static void SetPlayerStartState(s32 arg0, s32 arg1) { + PlayerStartWork *temp_r31; + omObjData *temp_r30; + + temp_r30 = playerStartObj[arg0]; + temp_r31 = OM_GET_WORK_PTR(temp_r30, PlayerStartWork); + temp_r31->unk00_field1 = arg1; + temp_r31->unk02 = 0; + temp_r31->unk01 = 0; + switch (arg1) { + case 4: + hitFX[arg0] = HuAudFXPlay(0x300); + break; + case 5: + break; + case 6: + temp_r31->unk06 = 0; + break; + } +} + +static s32 GetPlayerStartState(s32 arg0) { + PlayerStartWork *temp_r31; + omObjData *temp_r30; + + temp_r30 = playerStartObj[arg0]; + temp_r31 = OM_GET_WORK_PTR(temp_r30, PlayerStartWork); + return temp_r31->unk00_field1; +} + +static void ExecStartRoll(void) { + s32 sp84[] = { 0, 1, 2, 3, 4, 5, 6, 7 }; + s32 var_r29; + s32 var_r23; + s32 var_r22; + s32 var_r24; + s32 i; + + if (!_CheckFlag(0x1000B)) { + for (i = 0; i < 4; i++) { + SetPlayerStartState(i, 2); + } + while (GetPlayerStartState(3) != 0) { + HuPrcVSleep(); + } + _CheckFlag(0x1000B); + var_r29 = startMesTbl[GWBoardGet()][0]; + BoardWinCreate(2, var_r29, BoardWinPortraitGetStar()); + BoardWinWait(); + var_r29 = startMesTbl[GWBoardGet()][1]; + BoardWinCreate(2, var_r29, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardWinKill(); + for (i = 0; i < 4; i++) { + SetPlayerStartState(i, 2); + } + while (GetPlayerStartState(3) != 0) { + HuPrcVSleep(); + } + } + for (i = 0; i < 4; i++) { + SetPlayerStartState(i, 3); + } + if (tapWin != -1) { + HuWinDispOn(tapWin); + } + while (1) { + if (GetPlayerStartState(0) == 0 && GetPlayerStartState(1) == 0 + && GetPlayerStartState(2) == 0 && GetPlayerStartState(3) == 0) { + break; + } + HuPrcVSleep(); + } + if (tapWin != -1) { + HuWinDispOff(tapWin); + } + HuPrcSleep(30); + HuPadRumbleAllStop(); + OrderPlayers(); + BoardStatusKill(); + BoardStatusCreate(); + BoardStatusItemSet(0); + HuPrcVSleep(); + for (i = 0; i < 4; i++) { + if (_CheckFlag(0x1000B)) { + BoardTutorialHookExec(3, i); + } else { + if (i == 0) { + var_r29 = startMesTbl[GWBoardGet()][2]; + } else { + var_r29 = playerOrderMesTbl[i - 1]; + } + BoardWinCreate(0, var_r29, -1); + BoardWinInsertMesSet(BoardPlayerGetCharMess(i), i); + BoardWinWait(); + } + BoardStatusShowSet(i, 1); + SetPlayerStartState(playerOrderOld[i], 6); + BoardPlayerMotionShiftSet(i, 7, 0.0f, 8.0f, 0); + HuPrcSleep(8); + while (!BoardPlayerMotionEndCheck(i)) { + HuPrcVSleep(); + } + } + BoardWinKill(); + for (i = 0; i < 4; i++) { + BoardPlayerIdleSet(i); + } + if (!_CheckFlag(0x1000B)) { + var_r29 = startMesTbl[GWBoardGet()][3]; + BoardWinCreate(2, var_r29, BoardWinPortraitGetStar()); + BoardWinWait(); + HuPrcSleep(30); + if (GWBoardGet() == 7 || GWBoardGet() == 8) { + var_r22 = 100; + var_r23 = 1; + } else { + var_r22 = 10; + var_r23 = 6; + } + for (i = 0; i < var_r22; i++) { + for (var_r24 = 0; var_r24 < 4; var_r24++) { + BoardPlayerCoinsAdd(var_r24, 1); + } + HuAudFXPlay(7); + HuPrcSleep(var_r23); + } + for (i = 0; i < 4; i++) { + BoardPlayerMotionShiftSet(i, 7, 0.0f, 8.0f, 0); + } + HuAudFXPlay(0xF); + while (1) { + if (BoardPlayerMotionEndCheck(0) && BoardPlayerMotionEndCheck(1) + && BoardPlayerMotionEndCheck(2) && BoardPlayerMotionEndCheck(3)) { + break; + } + HuPrcVSleep(); + } + HuPrcSleep(60); + for (i = 0; i < 4; i++) { + BoardPlayerIdleSet(i); + } + var_r29 = startMesTbl[GWBoardGet()][4]; + BoardWinCreate(2, var_r29, BoardWinPortraitGetStar()); + BoardWinWait(); + BoardWinKill(); + } +} + +static void InitCamera(void) { + Vec sp14; + Vec sp8; + + camStartFocusPos.x = 0.0f; + camStartFocusPos.y = 100.0f; + camStartFocusPos.z = 500.0f; + switch (GWBoardGet()) { + case 0: + camStartFocusPos.z -= 200.0f; + camStartFocusPos.x -= 150.0f; + break; + case 3: + camStartFocusPos.z -= 250.0f; + camStartFocusPos.x -= 150.0f; + break; + case 4: + camStartFocusPos.z -= 400.0f; + camStartFocusPos.x -= 150.0f; + break; + case 5: + camStartFocusPos.z -= 500.0f; + break; + case 7: + camStartFocusPos.z -= 520.0f; + camStartFocusPos.x -= 150.0f; + break; + case 8: + camStartFocusPos.z -= 250.0f; + camStartFocusPos.x -= 150.0f; + break; + } + camFocus = BoardModelCreate(0x7000A, NULL, 0); + BoardModelVisibilitySet(camFocus, 0); + BoardModelPosSetV(camFocus, &camStartFocusPos); + if (_CheckFlag(0x1000B)) { + BoardCameraMoveSet(0); + sp14.x = spacePos.x + 150.0f; + sp14.y = spacePos.y + 100.0f; + sp14.z = spacePos.z + 150.0f; + BoardModelPosSetV(camFocus, &sp14); + sp8.x = -22.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + sp14.x = sp14.y = sp14.z = 0.0f; + BoardCameraMotionStartEx(camFocus, &sp8, NULL, 1500.0f, -1.0f, 1); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + } else { + sp14.x = 0.0f; + sp14.y = 0.0f; + sp14.z = 0.0f; + sp8.x = -70.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + BoardCameraMoveSet(0); + BoardCameraMotionStartEx(camFocus, &sp8, &sp14, 14000.0f, -1.0f, 1); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + } +} + +static void InitHost(void) { + Vec sp8; + + if (!_CheckFlag(0x1000B)) { + hostMdl = BoardStarHostMdlGet(); + sp8.x = spacePos.x + 150.0f; + sp8.y = spacePos.y; + sp8.z = spacePos.z - 50.0f; + BoardModelPosSetV(hostMdl, &sp8); + BoardModelVisibilitySet(hostMdl, 1); + BoardModelMotionStart(hostMdl, 1, 0x40000001); + } +} + +static void CreateTapWin(void) { + float sp8[2]; + float var_f31; + float var_f30; + s32 var_r31; + + if (!_CheckFlag(0x1000B)) { + var_r31 = 0x120014; + HuWinMesMaxSizeGet(1, sp8, var_r31); + var_f31 = -10000.0f; + var_f30 = 368.0f; + tapWin = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 0); + HuWinBGTPLvlSet(tapWin, 0.0f); + HuWinMesSpeedSet(tapWin, 0); + HuWinMesSet(tapWin, var_r31); + HuWinDispOff(tapWin); + } +} + +static void OrderPlayers(void) { + s32 temp_r29; + PlayerConfig *temp_r28; + PlayerState *temp_r27; + s32 i; + s32 j; + + temp_r28 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GWPlayerCfg), MEMORY_DEFAULT_NUM); + temp_r27 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GWPlayer), MEMORY_DEFAULT_NUM); + for (i = 0; i < 4; i++) { + playerOrderOld[i] = i; + memcpy(temp_r28 + i, &GWPlayerCfg[i], sizeof(PlayerConfig)); + memcpy(temp_r27 + i, &GWPlayer[i], sizeof(PlayerState)); + } + for (i = 0; i < 3; i++) { + for (j = 3; j > i; j--) { + if (playerOrderNew[j - 1] < playerOrderNew[j]) { + temp_r29 = playerOrderNew[j]; + playerOrderNew[j] = playerOrderNew[j - 1]; + playerOrderNew[j - 1] = temp_r29; + temp_r29 = playerOrderOld[j]; + playerOrderOld[j] = playerOrderOld[j - 1]; + playerOrderOld[j - 1] = temp_r29; + } + } + } + for (i = 0; i < 4; i++) { + memcpy(&GWPlayerCfg[i], temp_r28 + playerOrderOld[i], sizeof(PlayerConfig)); + memcpy(&GWPlayer[i], temp_r27 + playerOrderOld[i], sizeof(PlayerState)); + GWPlayer[i].port = GWPlayerCfg[i].pad_idx; + GWPlayerCfg[i].pad_idx = GWPlayerCfg[i].pad_idx; + } + HuMemDirectFree(temp_r28); + HuMemDirectFree(temp_r27); +} diff --git a/src/game/board/ui.c b/src/game/board/ui.c index 3b304501..ea4fe57e 100755 --- a/src/game/board/ui.c +++ b/src/game/board/ui.c @@ -9,6 +9,7 @@ #include "game/object.h" #include "game/pad.h" #include "game/process.h" +#include "game/sprite.h" #include "game/window.h" #include "game/board/com.h" #include "game/board/item.h" diff --git a/src/game/board/view.c b/src/game/board/view.c index 1d11d83c..ddc738a8 100755 --- a/src/game/board/view.c +++ b/src/game/board/view.c @@ -5,6 +5,7 @@ #include "game/hsfex.h" #include "game/object.h" #include "game/pad.h" +#include "game/sprite.h" #include "game/wipe.h" #include "game/board/main.h" #include "game/board/model.h" From dca93f5585b7481e7050da14ed91d25f03ea81d6 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Tue, 12 Mar 2024 22:49:36 -0400 Subject: [PATCH 070/106] boo_house.c completed, 59.45% DOL --- configure.py | 2 +- include/game/board/boo_house.h | 15 + include/game/board/mg_setup.h | 12 + src/game/board/boo_house.c | 827 +++++++++++++++++++++++++++++++++ src/game/board/mg_setup.c | 5 +- 5 files changed, 856 insertions(+), 5 deletions(-) create mode 100644 include/game/board/boo_house.h create mode 100644 include/game/board/mg_setup.h create mode 100644 src/game/board/boo_house.c diff --git a/configure.py b/configure.py index bd98c8e5..bf98923f 100644 --- a/configure.py +++ b/configure.py @@ -391,7 +391,7 @@ config.libs = [ Object(Matching, "game/board/fortune.c"), Object(Matching, "game/board/boo.c"), Object(Matching, "game/board/mg_setup.c"), - Object(NonMatching, "game/board/boo_house.c"), + Object(Matching, "game/board/boo_house.c"), Object(NonMatching, "game/board/start.c"), Object(Matching, "game/board/last5.c"), Object(Matching, "game/board/pause.c"), diff --git a/include/game/board/boo_house.h b/include/game/board/boo_house.h new file mode 100644 index 00000000..03fb3126 --- /dev/null +++ b/include/game/board/boo_house.h @@ -0,0 +1,15 @@ +#ifndef BOO_HOUSE_H +#define BOO_HOUSE_H + +#include "dolphin/types.h" + + +void BoardBooHouseHostSet(s16); +s16 BoardBooHouseHostGet(void); +void BoardBooHouseCreate(void); +void BoardBooHouseExec(s32); + +s32 BoardBooComUseCheck(s32); +void BoardBooHouseTutorialExec(void); + +#endif diff --git a/include/game/board/mg_setup.h b/include/game/board/mg_setup.h new file mode 100644 index 00000000..469b7cb3 --- /dev/null +++ b/include/game/board/mg_setup.h @@ -0,0 +1,12 @@ +#ifndef _MG_SETUP_H +#define _MG_SETUP_H + +#include "dolphin/types.h" + +void BoardMGSetupExec(void); +void BoardMGSetupPlayClear(void); +s32 BoardMGSetupPlaySearch(s32, s16); +void BoardMGSetupPlayPush(s32, s16); +void BoardMGSetupTutorialExec(void); + +#endif diff --git a/src/game/board/boo_house.c b/src/game/board/boo_house.c new file mode 100644 index 00000000..3d8cf829 --- /dev/null +++ b/src/game/board/boo_house.c @@ -0,0 +1,827 @@ +#include "game/board/boo_house.h" + +#include "game/msm.h" +#include "game/hsfdraw.h" +#include "game/gamework_data.h" +#include "game/board/player.h" +#include "game/board/model.h" +#include "game/board/com.h" +#include "game/board/boo.h" +#include "game/board/ui.h" +#include "game/board/view.h" +#include "game/board/audio.h" +#include "game/board/main.h" +#include "game/board/star.h" +#include "game/board/player.h" +#include "game/board/window.h" + +// bss +static s16 houseMdl[6]; + +// data +static s32 hostMesTbl[6][6] = { + { 0x7000C, 0x7000D, 0x7000E, 0x7000F, 0x70010, 0x70011 }, + { 0x70012, 0x70013, 0x70014, 0x70015, 0x70016, 0x70017 }, + { 0x70018, 0x70019, 0x7001A, 0x7001B, 0x7001C, 0x7001D }, + { 0x7001E, 0x7001F, 0x70020, 0x70021, 0x70022, 0x70023 }, + { 0x70024, 0x70025, 0x70026, 0x70027, 0x70028, 0x70029 }, + { 0x7002A, 0x7002B, 0x7002C, 0x7002D, 0x7002E, 0x7002F }, +}; +static BoardModelParam houseMdlTbl[6] = { + { 0x90000, { 0, 1, 0, 0, 0 }, 0xFFFF }, + { 0x90001, { 1, 1, 0, 0, 0 }, 0xFFFF }, + { 0x90003, { 1, 1, 0, 0, 0 }, 0xFFFF }, + { 0x90004, { 1, 1, 0, 0, 0 }, 0xFFFF }, + { 0x90004, { 1, 1, 0, 0, 0 }, 0xFFFF }, + { 0x90007, { 0, 1, 0, 0, 0 }, 0xFFFF }, +}; +static s32 booMotTbl[3] = { + 0x20013, 0x20016, 0xFFFFFFFF +}; +static s32 houseMotTbl[9][3] = { + { 0x20001, 0x20003, 0x20004 }, + { 0x20009, 0x2000B, 0x2000C }, + { 0x2000E, 0x20010, 0x20011 }, + { 0x20018, 0x2001A, 0x2001B }, + { 0x2001D, 0x2001F, 0x20020 }, + { 0x20022, 0x20024, 0x20025 }, + { 0x20018, 0x2001A, 0x2001B }, + { 0x20001, 0x20003, 0x20004 }, + { 0x20001, 0x20003, 0x20004 } +}; + +// sbss +static s8 currPlayer; +static s8 stealTarget; +static s8 comStarStealTarget; +static s32 comCoinStealTarget; +static s8 stealAmountStr[8]; +static Process* houseProc; + +// sdata +static s16 houseShowMot = 0xFFFF; +static s16 houseHideMot = 0xFFFF; +static s16 ballMdl = 0xFFFF; +static s16 booMdl = 0xFFFF; +static s16 lbl_801D37F8 = 0xFFFF; +static s16 hostMdl = 0xFFFF; +static s16 houseMot[3] = { 0xFFFF, 0xFFFF, 0xFFFF }; + +// determined functions +static void ExecBooHouse(void); +static void DestroyBooHouse(void); +static void PickComStealType(s32); +static void OpenBooHouse(void); +static void CloseBooHouse(void); +static void CreateBooHouseModel(void); +static void KillBooHouseModel(void); +static void ExecNullSteal(void); +static void ExecStarSteal(void); +static void ExecCoinSteal(void); +static void ApplySteal(void); +static void ApplyCoinSteal(s16 arg0, s16 arg1); +static void ApplyStarSteal(void); +static void ApplyBooLight(void); +static void SetBooBallPos(void); + +// FUNCTIONS // +void BoardBooHouseHostSet(s16 arg0) { + hostMdl = arg0; +} + +s16 BoardBooHouseHostGet(void) { + return hostMdl; +} + +void BoardBooHouseCreate(void) { + Vec sp14; + Vec sp8; + + if ((GWBoardGet() == 7) || (GWBoardGet() == 8)) { + return; + } + BoardSpaceLinkTransformGet(0x08000000, &sp14, &sp8, 0); + houseMdl[0] = BoardModelCreateParam(&houseMdlTbl[0], &sp14, &sp8); + if (hostMdl != -1) { + BoardModelVisibilitySet(hostMdl, 0); + } + HuDataDirClose(0x90000); +} + +void BoardBooHouseKill(void) { + if (houseMdl[0] != -1) { + BoardModelKill(houseMdl[0]); + houseMdl[0] = -1; + } +} + +void BoardBooHouseExec(s32 arg0) { + currPlayer = arg0; + if (BoardPlayerSizeGet(currPlayer) != 2) { + BoardDiceDigit2DShowSet(0); + houseProc = HuPrcChildCreate(&ExecBooHouse, 0x2003, 0x3800, 0, boardMainProc); + HuPrcDestructorSet2(houseProc, &DestroyBooHouse); + while (houseProc != 0U) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); + } +} + +static void ExecBooHouse(void) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + f32 temp_f31; + s16 temp_r29; + s32 var_r31; + s16 var_r30; + s32 var_r28; + s32 var_r27; + s32 var_r26; + + _SetFlag(0x10018); + var_r28 = BoardDataDirReadAsync(0x90000); + var_r30 = GWPlayer[currPlayer].space_curr; + BoardPlayerIdleSet(currPlayer); + if (BoardPlayerCoinsGet(currPlayer) < 5) { + BoardWinCreate(0, 0x70001, -1); + BoardWinWait(); + BoardWinKill(); + BoardDataAsyncWait(var_r28); + HuPrcEnd(); + } + BoardWinCreateChoice(0, 0x70000, -1, 0); + if (GWPlayer[currPlayer].com != 0) { + if (BoardBooComUseCheck(currPlayer) != 0) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + if (BoardWinChoiceGet() != 0) { + BoardDataAsyncWait(var_r28); + HuPrcEnd(); + } + + for (var_r26 = var_r31 = 0; var_r31 < 4; var_r31++) { + if (currPlayer != var_r31) { + var_r26 += GWStarsGet(var_r31); + } + } + + for (var_r27 = var_r31 = 0; var_r31 < 4; var_r31++) { + if (currPlayer != var_r31) { + var_r27 += BoardPlayerCoinsGet(var_r31); + } + } + BoardWinKill(); + BoardDiceDigit2DShowSet(0); + BoardAudSeqPause(0, 1, 0x3E8); + BoardDataAsyncWait(var_r28); + temp_r29 = BoardSpaceLinkFlagSearch(0, var_r30, 0x02000000); + BoardSpacePosGet(0, var_r30, &sp38); + BoardSpacePosGet(0, temp_r29, &sp2C); + PSVECSubtract(&sp2C, &sp38, &sp20); + PSVECNormalize(&sp20, &sp20); + temp_f31 = (180.0 * (atan2(-sp20.x, -sp20.z) / M_PI)); + sp14.x = -15.0f; + sp14.y = temp_f31; + sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 150.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(houseMdl[0], &sp14, &sp8, 1370.0f, -1.0f, 0x1B); + CreateBooHouseModel(); + OpenBooHouse(); + BoardPlayerRotSet(currPlayer, 0.0f, temp_f31, 0.0f); + BoardPlayerMoveBetween(currPlayer, var_r30, temp_r29); + BoardPlayerIdleSet(currPlayer); + BoardMusStart(1, 1, 0x7F, 0); + BoardModelMotionShiftSet(BoardBooHouseHostGet(), houseMot[0], 0.0f, 10.0f, 0x40000001); + BoardWinCreate(2, hostMesTbl[GWBoardGet()][0], BoardWinPortraitGet()); + BoardWinWait(); + +repeatWindowView: + HuAudFXPlay(0x4C); + BoardWinCreateChoice(1, hostMesTbl[GWBoardGet()][1], BoardWinPortraitGet(), 0); + if (var_r27 == 0) { + BoardWinChoiceDisable(0); + } + if ((BoardPlayerCoinsGet(currPlayer) < 0x32) || (var_r26 == 0)) { + BoardWinChoiceDisable(1); + } + BoardWinAttrSet(0x10); + if (GWPlayer[currPlayer].com != 0) { + PickComStealType(currPlayer); + } + BoardWinWait(); + stealTarget = BoardWinChoiceGet(); + BoardWinKill(); + while (BoardStatusStopCheck(currPlayer) == 0) { + HuPrcVSleep(); + } + switch (stealTarget) { + case 0: + ExecCoinSteal(); + break; + case 1: + ExecStarSteal(); + break; + case 2: + ExecNullSteal(); + break; + case 3: + BoardViewMapExec(currPlayer); + goto repeatWindowView; + } + if (stealTarget != 2) { + ApplySteal(); + BoardStatusShowSet(currPlayer, 0); + HuPrcVSleep(); + } + BoardModelMotionShiftSet(BoardBooHouseHostGet(), houseMot[1], 0.0f, 10.0f, 0x40000001); + CloseBooHouse(); + BoardCameraViewSet(1); + BoardCameraRotSet(0.0f, 0.0f); + BoardCameraTargetPlayerSet(currPlayer); + BoardAudSeqPause(0, 0, 0x3E8); + BoardPlayerRotSet(currPlayer, 0.0f, temp_f31, 0.0f); + BoardPlayerMoveBetween(currPlayer, temp_r29, var_r30); + KillBooHouseModel(); + BoardStatusShowSetAll(1); + BoardPlayerIdleSet(currPlayer); + HuPrcEnd(); +} + +static void DestroyBooHouse(void) { + s32 var_r31; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + if (houseMot[var_r31] != -1) { + BoardModelMotionKill(BoardBooHouseHostGet(), houseMot[var_r31]); + houseMot[var_r31] = -1; + } + } + if (houseShowMot != -1) { + BoardModelMotionKill(houseMdl[0], houseShowMot); + houseShowMot = -1; + } + if (houseHideMot != -1) { + BoardModelMotionKill(houseMdl[1], houseHideMot); + houseHideMot = -1; + } + BoardWinKill(); + KillBooHouseModel(); + HuDataDirClose(0x90000); + _ClearFlag(0x10018); + houseProc = 0; +} + +static void PickComStealType(s32 arg0) { + s32 var_r31; + s32 var_r30; + s32 var_r28; + + var_r30 = var_r28 = 0; + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (var_r31 != arg0) { + var_r30 += BoardPlayerCoinsGet(var_r31); + var_r28 += GWStarsGet(var_r31); + } + } + if (BoardPlayerCoinsGet(arg0) >= 0x32) { + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if ((var_r31 != arg0) && (GWStarsGet(var_r31) != 0) && (((s32) GWSystem.team == 0) || (var_r31 != BoardPlayerSameTeamFind(arg0)))) { + if (var_r30 != 0) { + BoardComKeySetDown(); + } else { + BoardComKeySetUp(); + } + return; + } + } + } + BoardComKeySetUp(); +} + +static void OpenBooHouse(void) { + s16 temp_r31; + s32 temp_r5; + s32 var_r30; + + ballMdl = BoardBooCreate(currPlayer, 0); + temp_r31 = BoardBooHouseHostGet(); + BoardModelMotionStart(temp_r31, 1, 0x40000001); + + for (var_r30 = 0; var_r30 < 3; var_r30++) { + houseMot[var_r30] = BoardModelMotionCreate(temp_r31, houseMotTbl[GWBoardGet()][var_r30]); + } + BoardModelMotionStart(temp_r31, houseMot[0], 0x40000001); + BoardModelVisibilitySet(temp_r31, 1); + HuAudFXPlay(0x337); + HuAudFXPlay(0x344); + BoardModelMotionStart(houseMdl[0], 0, 0); + BoardModelMotionSpeedSet(houseMdl[0], 1.0f); + BoardModelHookSet(houseMdl[0], "yoko01", houseMdl[1]); + BoardModelHookSet(houseMdl[0], "yoko02", ballMdl); + BoardModelHookSet(houseMdl[0], "yoko03", houseMdl[2]); + BoardModelHookSet(houseMdl[0], "yoko04", houseMdl[3]); + BoardModelHookSet(houseMdl[0], "yoko05", houseMdl[4]); + BoardModelHookSet(houseMdl[0], "yoko9", houseMdl[5]); + BoardModelHookSet(houseMdl[0], "yoko06", temp_r31); + if (GWBoardGet() == 5) { + BoardModelPosSet(temp_r31, 0.0f, 0.0f, -25.0f); + } else { + BoardModelPosSet(temp_r31, 0.0f, 0.0f, 0.0f); + } + BoardModelMotionStart(houseMdl[3], 0, 0x40000001); + BoardModelMotionStart(houseMdl[4], 0, 0x40000001); + booMdl = BoardModelCreate(0x20012, booMotTbl, 0); + BoardModelMotionStart(booMdl, 1, 0x40000001); + BoardModelVisibilitySet(booMdl, 1); + BoardModelHookSet(houseMdl[0], "yoko8", booMdl); + lbl_801D37F8 = BoardModelCreate(0x90008, NULL, 0); + BoardModelVisibilitySet(lbl_801D37F8, 0); + BoardModelLayerSet(lbl_801D37F8, 2); + BoardModelMotionStart(houseMdl[1], 0, 0x40000001); + + while (BoardModelMotionTimeGet(houseMdl[0]) < 90.0f) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(houseMdl[0], houseShowMot, 0.0f, 10.0f, 0x40000001); + BoardModelMotionShiftSet(houseMdl[1], houseHideMot, 0.0f, 10.0f, 0x40000001); + BoardModelHookObjReset(houseMdl[0], "yoko02"); + SetBooBallPos(); + BoardModelMotionShiftSet(BoardBooHouseHostGet(), houseMot[2], 0.0f, 10.0f, 0); +} + +static void CloseBooHouse(void) { + BoardModelPosSet(ballMdl, 0.0f, 0.0f, 0.0f); + BoardModelHookSet(houseMdl[0], "yoko02", ballMdl); + BoardModelMotionShiftSet(houseMdl[1], 0, 90.0f, 10.0f, 0); + BoardModelMotionShiftSet(houseMdl[0], 0, 90.0f, 10.0f, 0); + HuPrcSleep(0xA); + + while (BoardModelMotionShiftIDGet(houseMdl[0]) != -1) { + HuPrcVSleep(); + } + while (BoardModelMotionTimeGet(houseMdl[0]) < 165.0f) { + HuPrcVSleep(); + } + HuAudFXPlay(0x336); + BoardAudSeqFadeOut(1, 0x3E8); + + while (BoardModelMotionEndCheck(houseMdl[0]) == 0) { + HuPrcVSleep(); + } + BoardModelHookReset(houseMdl[0]); + BoardBooKill(); + ballMdl = -1; +} + +static void CreateBooHouseModel(void) { + s32 var_r31; + + for (var_r31 = 0; var_r31 < 6; var_r31++) { + if (var_r31 != 0) { + houseMdl[var_r31] = BoardModelCreateParam(&houseMdlTbl[var_r31], 0, 0); + } + } + houseShowMot = BoardModelMotionCreate(houseMdl[0], 0x90009); + houseHideMot = BoardModelMotionCreate(houseMdl[1], 0x9000A); +} + +static void KillBooHouseModel(void) { + s32 temp_r4; + s32 var_r31; + + for (var_r31 = 1; var_r31 < 6; var_r31++) { + if (houseMdl[var_r31] != -1) { + BoardModelKill(houseMdl[var_r31]); + houseMdl[var_r31] = -1; + } + } + if (booMdl != -1) { + BoardModelKill(booMdl); + booMdl = -1; + } + if (lbl_801D37F8 != -1) { + BoardModelKill(lbl_801D37F8); + lbl_801D37F8 = -1; + } + BoardModelVisibilitySet(BoardBooHouseHostGet(), 0); +} + +static void ExecNullSteal(void) { + HuAudFXPlay(0x4C); + BoardWinCreate(2, hostMesTbl[GWBoardGet()][5], BoardWinPortraitGet()); + BoardWinWait(); + BoardWinKill(); +} + +static void ExecStarSteal(void) { + Vec sp14; + Vec sp8; + s32 temp_r29; + s32 var_r30; + s32 var_r31; + + + for (var_r30 = 0; var_r30 < 0x32; var_r30++) { + BoardPlayerCoinsAdd(currPlayer, -1); + HuAudFXPlay(0xE); + HuPrcSleep(1); + } + HuAudFXPlay(0xF); + BoardBooStealTypeSet(1); + BoardWinCreate(2, hostMesTbl[GWBoardGet()][3], BoardWinPortraitGet()); + BoardWinWait(); + BoardWinKill(); + BoardStatusShowSetAll(0); + + while (BoardPickerDoneCheck() == 0) { + HuPrcVSleep(); + } + HuAudFXPlay(0x4C); + Hu3DModelObjPosGet(BoardModelIDGet(houseMdl[0]), "yoko8", &sp14); + sp14.y += 20.0f; + BoardModelMotionStart(lbl_801D37F8, 0, 0); + BoardModelVisibilitySet(lbl_801D37F8, 1); + BoardModelPosSetV(lbl_801D37F8, &sp14); + HuPrcSleep(5); + + for (var_r31 = 0xFF; var_r31 > 0; var_r31 -= 0x33) { + if (var_r31 < 0) { + var_r31 = 0; + } + BoardModelAlphaSet(booMdl, var_r31); + HuPrcVSleep(); + } + BoardModelVisibilitySet(booMdl, 0); + + while (BoardModelMotionEndCheck(lbl_801D37F8) == 0) { + HuPrcVSleep(); + } + BoardModelVisibilitySet(lbl_801D37F8, 0); + BoardCameraMotionStartEx(ballMdl, NULL, NULL, 325.0f, -1.0f, 0x15); + temp_r29 = BoardBooStealMain(); + sp8.x = 0.0f; + sp8.y = 150.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(houseMdl[0], NULL, &sp8, 1370.0f, -1.0f, 0x15); + BoardCameraMotionWait(); + if (temp_r29 == 0) { + BoardModelMotionStart(booMdl, 2, 0x40000001); + } + BoardModelMotionStart(lbl_801D37F8, 0, 0); + BoardModelVisibilitySet(lbl_801D37F8, 1); + HuPrcSleep(0xB); + BoardModelVisibilitySet(booMdl, 1); + + for (var_r31 = 0; var_r31 < 0xFF; var_r31 += 0x33) { + if (var_r31 > 0xFF) { + var_r31 = 0xFF; + } + BoardModelAlphaSet(booMdl, var_r31); + HuPrcVSleep(); + } + BoardModelAlphaSet(booMdl, -1); + + while (BoardModelMotionEndCheck(lbl_801D37F8) == 0) { + HuPrcVSleep(); + } + BoardModelVisibilitySet(lbl_801D37F8, 0); +} + +static void ExecCoinSteal(void) { + Vec sp14; + Vec sp8; + s32 temp_r29; + s32 var_r30; + s32 var_r31; + + + for (var_r30 = 0; var_r30 < 5; var_r30++) { + BoardPlayerCoinsAdd(currPlayer, -1); + HuAudFXPlay(0xE); + HuPrcSleep(6); + } + HuAudFXPlay(0xF); + BoardBooStealTypeSet(0); + BoardWinCreate(2, hostMesTbl[GWBoardGet()][3], BoardWinPortraitGet()); + BoardWinWait(); + BoardWinKill(); + BoardStatusShowSetAll(0); + + while (BoardPickerDoneCheck() == 0) { + HuPrcVSleep(); + } + HuAudFXPlay(0x4C); + Hu3DModelObjPosGet(BoardModelIDGet(houseMdl[0]), "yoko8", &sp14); + sp14.y += 20.0f; + BoardModelMotionStart(lbl_801D37F8, 0, 0); + BoardModelVisibilitySet(lbl_801D37F8, 1); + BoardModelPosSetV(lbl_801D37F8, &sp14); + HuPrcSleep(5); + + for (var_r31 = 0xFF; var_r31 > 0; var_r31 -= 0x33) { + if (var_r31 < 0) { + var_r31 = 0; + } + BoardModelAlphaSet(booMdl, var_r31); + HuPrcVSleep(); + } + BoardModelVisibilitySet(booMdl, 0); + + while (BoardModelMotionEndCheck(lbl_801D37F8) == 0) { + HuPrcVSleep(); + } + BoardModelVisibilitySet(lbl_801D37F8, 0); + BoardCameraMotionStartEx(ballMdl, NULL, NULL, 325.0f, -1.0f, 0x15); + temp_r29 = BoardBooStealMain(); + sp8.x = 0.0f; + sp8.y = 150.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(houseMdl[0], NULL, &sp8, 1370.0f, -1.0f, 0x15); + BoardCameraMotionWait(); + if (temp_r29 == 0) { + BoardModelMotionStart(booMdl, 2, 0x40000001); + } + BoardModelMotionStart(lbl_801D37F8, 0, 0); + BoardModelVisibilitySet(lbl_801D37F8, 1); + HuPrcSleep(0xB); + BoardModelVisibilitySet(booMdl, 1); + + for (var_r31 = 0; var_r31 < 0xFF; var_r31 += 0x33) { + if (var_r31 > 0xFF) { + var_r31 = 0xFF; + } + BoardModelAlphaSet(booMdl, var_r31); + HuPrcVSleep(); + } + BoardModelAlphaSet(booMdl, -1); + + while (BoardModelMotionEndCheck(lbl_801D37F8) == 0) { + HuPrcVSleep(); + } + BoardModelVisibilitySet(lbl_801D37F8, 0); +} + +void ApplySteal(void) { + s16 spA; + s16 sp8; + s32 temp_r30; + s32 temp_r6; + s32 var_r31; + f32 var_f31; + + BoardModelHookSet(houseMdl[0], "yoko8", booMdl); + BoardModelVisibilitySet(booMdl, 1); + BoardModelPosSet(booMdl, 0.0f, 0.0f, 0.0f); + BoardModelRotSet(booMdl, 0.0f, 0.0f, 0.0f); + BoardModelScaleSet(booMdl, 1.0f, 1.0f, 1.0f); + BoardModelAlphaSet(booMdl, 0xFF); + var_f31 = BoardDAngleCalc(180.0f + BoardPlayerRotYGet(currPlayer)); + BoardPlayerMotBlendSet(currPlayer, var_f31, 0xF); + + while (BoardPlayerMotBlendCheck(currPlayer) == 0) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(currPlayer); + var_r31 = BoardBooStealValueGet(&spA, &sp8); + if (var_r31 == 0) { + ApplyBooLight(); + } else if (stealTarget == 0) { + ApplyCoinSteal(spA, sp8); + } else { + ApplyStarSteal(); + } + BoardWinCreate(2, hostMesTbl[GWBoardGet()][4], BoardWinPortraitGet()); + BoardWinWait(); + BoardWinKill(); +} + +void ApplyCoinSteal(s16 arg0, s16 arg1) { + u32 var_r31; + s32 var_r30; + + if ((s16) arg1 == 0) { + var_r31 = 0x70009; + } else if ((s16) arg1 < 3) { + var_r31 = 0x70008; + } else if ((s16) arg1 < 6) { + var_r31 = 0x70007; + } else if ((s16) arg1 < 8) { + var_r31 = 0x70006; + } else { + var_r31 = 0x70005; + } + sprintf(&stealAmountStr, "%d", arg0); + HuAudFXPlay(0x4B); + BoardWinCreate(2, var_r31, 3); + BoardWinInsertMesSet((s32) &stealAmountStr, 0); + BoardWinWait(); + BoardWinKill(); + BoardStatusShowSetForce(currPlayer); + BoardStatusShowSet(currPlayer, 1); + BoardPlayerMotionShiftSet(currPlayer, 7, 0.0f, 8.0f, 0); + + for (var_r30 = 0; var_r30 < arg0; var_r30++) { + BoardPlayerCoinsAdd(currPlayer, 1); + HuAudFXPlay(0xE); + HuPrcSleep(6); + } + HuAudFXPlay(0xF); + BoardPlayerMotionEndWait(currPlayer); +} + +void ApplyStarSteal(void) { + s32 temp_r31; + + HuAudFXPlay(0x4C); + BoardWinCreate(2, 0x7000A, 3); + BoardWinWait(); + BoardWinKill(); + BoardStatusShowSetForce(currPlayer); + BoardStatusShowSet(currPlayer, 1); + BoardAudSeqPause(1, 1, 0x3E8); + HuPrcSleep(0x17); + BoardPlayerVoiceEnableSet(currPlayer, 7, 0); + BoardPlayerMotionShiftSet(currPlayer, 7, 0.0f, 8.0f, 0); + HuAudFXPlay(boardStarSndTbl[GWPlayer[currPlayer].character]); + BoardPlayerStarsAdd(currPlayer, 1); + HuAudFXPlay(8); + HuPrcSleep(0xA); + temp_r31 = HuAudSStreamPlay(6); + BoardPlayerMotionEndWait(currPlayer); + + while (msmStreamGetStatus(temp_r31) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(1, 0, 0x3E8); + BoardPlayerMotionEndWait(currPlayer); + BoardPlayerVoiceEnableSet(currPlayer, 7, 1); +} + +void ApplyBooLight(void) { + BoardWinCreate(2, 0x7000B, 3); + BoardWinWait(); + BoardWinKill(); + BoardPlayerMotionShiftSet(currPlayer, 8, 0.0f, 8.0f, 0); + while (BoardPlayerMotionEndCheck(currPlayer) == 0) { + HuPrcVSleep(); + } +} + +void SetBooBallPos(void) { + Mtx sp14; + Vec sp8; + s16 var_r31; + + var_r31 = BoardModelIDGet(houseMdl[0]); + Hu3DModelObjMtxGet(var_r31, "yoko02", sp14); + Hu3DMtxTransGet(sp14, &sp8); + BoardModelPosSetV(ballMdl, &sp8); +} + +s32 BoardBooComUseCheck(s32 arg0) { + s32 var_r31; + u32 var_r30; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 var_r26; + s32 var_r24; + + var_r24 = BoardPlayerCoinsGet(arg0); + comStarStealTarget = comCoinStealTarget = -1; + var_r26 = var_r27 = -1; + switch (GWPlayer[arg0].diff) { + case 0: + var_r30 = 0x5F; + break; + case 1: + var_r30 = 0x32; + break; + case 2: + var_r30 = 5; + break; + case 3: + var_r30 = 0; + break; + } + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (var_r31 != arg0) { + if ((s32) GWSystem.team == 0 || var_r31 != BoardPlayerSameTeamFind(arg0)) { + if (BoardPlayerItemFind(var_r31, 8) == -1 || BoardRandMod(0x64) < var_r30) { + var_r29 = BoardPlayerCoinsGet(var_r31); + var_r28 = GWStarsGet(var_r31); + if (var_r28 != 0 || var_r29 != 0) { + if (var_r28 != 0 || var_r29 >= 5 || var_r24 <= 10 || BoardRandMod(0x64) <= 0x32) { + if (var_r27 < var_r29) { + var_r27 = var_r29; + comCoinStealTarget = var_r31; + } + if (var_r26 < var_r28) { + var_r26 = var_r28; + comStarStealTarget = (s8) var_r31; + } + } + } + } + } + } + } + if ((var_r26 <= 0) && (var_r27 <= 0)) { + return 0; + } + return 1; +} + +void BoardBooHouseTutorialExec(void) { + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + f32 temp_f31; + s16 temp_r28; + s16 temp_r29; + s32 temp_r27; + s32 temp_r4; + s32 var_r31; + s32 var_r30; + + temp_r27 = BoardDataDirReadAsync(0x90000); + temp_r29 = BoardSpaceFlagSearch(0, 0x08000000); + BoardDataAsyncWait(temp_r27); + temp_r28 = BoardSpaceLinkFlagSearch(0, temp_r29, 0x02000000); + BoardSpacePosGet(0, temp_r29, &sp38); + BoardSpacePosGet(0, temp_r28, &sp2C); + PSVECSubtract(&sp2C, &sp38, &sp20); + PSVECNormalize(&sp20, &sp20); + temp_f31 = (180.0 * (atan2(-sp20.x, -sp20.z) / M_PI)); + sp14.x = -15.0f; + sp14.y = temp_f31; + sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 150.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(houseMdl[0], &sp14, &sp8, 1370.0f, -1.0f, 0x15); + + for (var_r31 = 0; var_r31 < 6; var_r31++) { + if (var_r31 != 0) { + houseMdl[var_r31] = BoardModelCreateParam(&houseMdlTbl[var_r31], NULL, NULL); + } + } + houseShowMot = BoardModelMotionCreate(houseMdl[0], 0x90009); + houseHideMot = BoardModelMotionCreate(houseMdl[1], 0x9000A); + OpenBooHouse(); + + while (BoardModelMotionEndCheck(BoardBooHouseHostGet()) == 0) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(BoardBooHouseHostGet(), houseMot[0], 0.0f, 10.0f, 0x40000001); + BoardTutorialHookExec(0x1C, 0); + BoardModelMotionShiftSet(BoardBooHouseHostGet(), houseMot[1], 0.0f, 10.0f, 0x40000001); + BoardModelPosSet(ballMdl, 0.0f, 0.0f, 0.0f); + BoardModelHookSet(houseMdl[0], "yoko02", ballMdl); + BoardModelMotionShiftSet(houseMdl[1], 0, 90.0f, 10.0f, 0); + BoardModelMotionShiftSet(houseMdl[0], 0, 90.0f, 10.0f, 0); + HuPrcSleep(0xA); + while (BoardModelMotionShiftIDGet(houseMdl[0]) != -1) { + HuPrcVSleep(); + } + while (BoardModelMotionTimeGet(houseMdl[0]) < 165.0f) { + HuPrcVSleep(); + } + HuAudFXPlay(0x336); + BoardAudSeqFadeOut(1, 0x3E8); + while (BoardModelMotionEndCheck(houseMdl[0]) == 0) { + HuPrcVSleep(); + } + BoardModelHookReset(houseMdl[0]); + BoardBooKill(); + ballMdl = -1; + + for (var_r30 = 1; var_r30 < 6; var_r30++) { + if (houseMdl[var_r30] != -1) { + BoardModelKill(houseMdl[var_r30]); + houseMdl[var_r30] = -1; + } + } + if (booMdl != -1) { + BoardModelKill(booMdl); + booMdl = -1; + } + if (lbl_801D37F8 != -1) { + BoardModelKill(lbl_801D37F8); + lbl_801D37F8 = -1; + } + BoardModelVisibilitySet(BoardBooHouseHostGet(), 0); +} diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index 796c8b75..779cd321 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -1,3 +1,4 @@ +#include "game/board/mg_setup.h" #include "unsplit.h" #include "game/audio.h" #include "game/objsub.h" @@ -106,7 +107,6 @@ static u8 luckyValue = 0xFF; static s8 cursorPos = 0xFF; // determined functions -void BoardMGSetupExec(void); static void DestroyMGSetup(void); static void ExecMGSetup(void); static void DetermineMGList(bitcopy*); @@ -123,9 +123,6 @@ static void LuckyMGFall(bitcopy*, omObjData*); static void HideLuckyValue(void); static void UpdateLuckyValue(bitcopy*, omObjData*); static void UpdateMGList(bitcopy*, omObjData*); -// ... -s32 BoardMGSetupPlaySearch(s32, s16); -void BoardMGSetupPlayPush(s32, s16); // FUNCTIONS // From a66a32f849c0cb87405baa69773063ea9620efe8 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 12 Mar 2024 21:55:39 -0500 Subject: [PATCH 071/106] Start work on selmenu --- config/GMPE01_00/rels/selmenuDll/symbols.txt | 46 +- config/GMPE01_00/symbols.txt | 2 +- include/game/hsfdraw.h | 2 +- include/game/minigame_seq.h | 2 + include/game/object.h | 14 +- src/REL/selmenuDll/main.c | 682 +++++++++++++++++++ src/game/board/pause.c | 1 - src/game/hsfdraw.c | 6 +- src/game/minigame_seq.c | 4 +- src/game/objsysobj.c | 1 - 10 files changed, 727 insertions(+), 33 deletions(-) create mode 100644 src/REL/selmenuDll/main.c diff --git a/config/GMPE01_00/rels/selmenuDll/symbols.txt b/config/GMPE01_00/rels/selmenuDll/symbols.txt index 849ff5fb..e372b827 100644 --- a/config/GMPE01_00/rels/selmenuDll/symbols.txt +++ b/config/GMPE01_00/rels/selmenuDll/symbols.txt @@ -4,14 +4,14 @@ ModuleProlog = .text:0x000000A0; // type:function size:0x4B8 CopyPlayerCfg = .text:0x00000558; // type:function size:0x60 scope:local CalcBtns = .text:0x000005B8; // type:function size:0x324 scope:local DrawPage = .text:0x000008DC; // type:function size:0x170 scope:local -MoveChar = .text:0x00000A4C; // type:function size:0x180 scope:local -MoveCursor = .text:0x00000BCC; // type:function size:0x88 scope:local +MoveSMPage = .text:0x00000A4C; // type:function size:0x180 scope:local +MoveSMCursor = .text:0x00000BCC; // type:function size:0x88 scope:local SMInit = .text:0x00000C54; // type:function size:0x474 scope:local SMUpdate = .text:0x000010C8; // type:function size:0xA78 scope:local -SMCfgUpdate = .text:0x00001B40; // type:function size:0x334 scope:local +SMGroupGen = .text:0x00001B40; // type:function size:0x334 scope:local SMComCharGet = .text:0x00001E74; // type:function size:0x110 scope:local SMCharKill = .text:0x00001F84; // type:function size:0x50 scope:local -fn_1_1FD4 = .text:0x00001FD4; // type:function size:0x10C +CharRandomize = .text:0x00001FD4; // type:function size:0x10C scope:local SMCharInit = .text:0x000020E0; // type:function size:0x1F8 scope:local SMCharUpdate = .text:0x000022D8; // type:function size:0xD6C scope:local SMExit = .text:0x00003044; // type:function size:0x2FC scope:local @@ -55,7 +55,7 @@ lbl_1_data_12 = .data:0x00000012; // type:object size:0x6 data:string lbl_1_data_18 = .data:0x00000018; // type:object size:0x6 data:string lbl_1_data_1E = .data:0x0000001E; // type:object size:0x7 data:string lbl_1_data_25 = .data:0x00000025; // type:object size:0x6 data:string -lbl_1_data_2B = .data:0x0000002B; // type:object size:0x9 +lbl_1_data_2B = .data:0x0000002B; // type:object size:0x8 data:string charTbl = .data:0x00000034; // type:object size:0x20 scope:local lbl_1_data_54 = .data:0x00000054; // type:object size:0x14 data:string lbl_1_data_68 = .data:0x00000068; // type:object size:0x16 data:string @@ -126,9 +126,10 @@ lbl_1_data_4A8 = .data:0x000004A8; // type:object size:0xE data:string lbl_1_data_4B6 = .data:0x000004B6; // type:object size:0xE data:string lbl_1_data_4C4 = .data:0x000004C4; // type:object size:0xE data:string lbl_1_data_4D2 = .data:0x000004D2; // type:object size:0xA data:string -lbl_1_data_4DC = .data:0x000004DC; // type:object size:0x10 +lbl_1_data_4DC = .data:0x000004DC; // type:object size:0xF data:string menuTbl = .data:0x000004EC; // type:object size:0x348 scope:local -lbl_1_data_844 = .data:0x00000834; // type:object size:0x18 +cameraMaskTbl = .data:0x00000834; // type:object size:0x10 scope:local +lbl_1_data_844 = .data:0x00000844; // type:object size:0x18 scope:local lbl_1_data_85C = .data:0x0000085C; // type:object size:0x12 data:string lbl_1_data_86E = .data:0x0000086E; // type:object size:0x12 data:string lbl_1_data_880 = .data:0x00000880; // type:object size:0x12 data:string @@ -136,19 +137,19 @@ lbl_1_data_892 = .data:0x00000892; // type:object size:0x12 data:string lbl_1_data_8A4 = .data:0x000008A4; // type:object size:0x12 data:string lbl_1_data_8B6 = .data:0x000008B6; // type:object size:0x12 data:string lbl_1_data_8C8 = .data:0x000008C8; // type:object size:0x11 data:string -lbl_1_data_8D9 = .data:0x000008D9; // type:object size:0x3 -sndTable = .data:0x000008DC; // type:object size:0x20 scope:local -cursorPosBackup = .data:0x000008FC; // type:object size:0x2 data:2byte -btnPrev = .data:0x000008FE; // type:object size:0x8 scope:local -lbl_1_data_906 = .data:0x00000906; // type:object size:0x12 -funcNameStr = .data:0x00000918; // type:object size:0x4 scope:local data:4byte +lbl_1_data_8D9 = .data:0x000008D9; // type:object size:0x1 +dvdMusTbl = .data:0x000008DC; // type:object size:0x20 scope:local +smSelectPosExit = .data:0x000008FC; // type:object size:0x2 scope:local data:2byte +btnPrevAll = .data:0x000008FE; // type:object size:0x8 scope:local +lbl_1_data_906 = .data:0x00000906; // type:object size:0xF data:string +funcId$244 = .data:0x00000918; // type:object size:0x4 scope:local data:4byte lbl_1_data_91C = .data:0x0000091C; // type:object size:0x12 data:string lbl_1_data_92E = .data:0x0000092E; // type:object size:0x24 data:string lbl_1_data_952 = .data:0x00000952; // type:object size:0xB data:string lbl_1_data_95D = .data:0x0000095D; // type:object size:0x3 data:string -lbl_1_data_960 = .data:0x00000960; // type:object size:0x10 +lbl_1_data_960 = .data:0x00000960; // type:object size:0xD data:string charMdlTbl = .data:0x00000970; // type:object size:0x20 scope:local -charMdlAnimTbl = .data:0x00000990; // type:object size:0x20 scope:local +charMdlMotTbl = .data:0x00000990; // type:object size:0x20 scope:local lbl_1_data_9B0 = .data:0x000009B0; // type:object size:0xD data:string lbl_1_data_9BD = .data:0x000009BD; // type:object size:0x5 lbl_1_data_9C2 = .data:0x000009C2; // type:object size:0x5 @@ -158,7 +159,7 @@ lbl_1_data_9D6 = .data:0x000009D6; // type:object size:0xA data:string lbl_1_data_9E0 = .data:0x000009E0; // type:object size:0xA data:string lbl_1_data_9EA = .data:0x000009EA; // type:object size:0x9 data:string lbl_1_data_9F3 = .data:0x000009F3; // type:object size:0x9 data:string -lbl_1_data_9FC = .data:0x000009FC; // type:object size:0xC +lbl_1_data_9FC = .data:0x000009FC; // type:object size:0x9 data:string padCfgStrTbl = .data:0x00000A08; // type:object size:0x14 scope:local data:4byte lbl_1_data_A1C = .data:0x00000A1C; // type:object size:0x6 data:string lbl_1_data_A22 = .data:0x00000A22; // type:object size:0x4 data:string @@ -179,16 +180,17 @@ lbl_1_data_AEC = .data:0x00000AEC; // type:object size:0x15 data:string lbl_1_data_B01 = .data:0x00000B01; // type:object size:0x15 data:string lbl_1_data_B16 = .data:0x00000B16; // type:object size:0x15 data:string lbl_1_data_B2B = .data:0x00000B2B; // type:object size:0x14 data:string +lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x2 data:2byte sound3DCursorPos = .bss:0x00000002; // type:object size:0x2 scope:local data:2byte emiCompVal = .bss:0x00000004; // type:object size:0x2 scope:local data:2byte emiCompDataNo = .bss:0x00000006; // type:object size:0x2 scope:local data:2byte -playerCfgField = .bss:0x00000008; // type:object size:0x2 scope:local data:2byte -playerCfgPos = .bss:0x0000000A; // type:object size:0x2 scope:local data:2byte +playerCfgOptionPos = .bss:0x00000008; // type:object size:0x2 scope:local data:2byte +playerCfgPlayerPos = .bss:0x0000000A; // type:object size:0x2 scope:local data:2byte playerCfgSelF = .bss:0x0000000C; // type:object size:0x2 scope:local data:2byte -charSelDisallowF = .bss:0x0000000E; // type:object size:0x10 scope:local -playerCharSelF = .bss:0x0000001E; // type:object size:0x8 scope:local +charSelProhibitF = .bss:0x0000000E; // type:object size:0x10 scope:local +playerDoneF = .bss:0x0000001E; // type:object size:0x8 scope:local charModelID = .bss:0x00000026; // type:object size:0x10 scope:local -bntReleaseAll = .bss:0x00000036; // type:object size:0x8 scope:local +btnReleaseAll = .bss:0x00000036; // type:object size:0x8 scope:local btnAll = .bss:0x0000003E; // type:object size:0x8 scope:local btnDownAll = .bss:0x00000046; // type:object size:0x8 scope:local btnReleaseCurr = .bss:0x0000004E; // type:object size:0x2 scope:local data:2byte @@ -198,5 +200,5 @@ smSelectPos = .bss:0x00000054; // type:object size:0x2 scope:local data:2byte smPlayerCfg = .bss:0x00000056; // type:object size:0x28 scope:local data:2byte outViewObj = .bss:0x00000080; // type:object size:0x4 scope:local data:4byte smMainObj = .bss:0x00000084; // type:object size:0x4 scope:local data:4byte -smPagePos = .bss:0x00000088; // type:object size:0xE scope:local +smSelectPosBackup = .bss:0x00000088; // type:object size:0xE scope:local smPage = .bss:0x00000096; // type:object size:0x2 scope:local data:2byte diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 6e4824d3..c174a8a5 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5792,7 +5792,7 @@ titleMes$442 = .sdata:0x801D34A0; // type:object size:0x4 scope:local data:4byte lbl_801D34A4 = .sdata:0x801D34A4; // type:object size:0xC lbl_801D34B0 = .sdata:0x801D34B0; // type:object size:0x1 lbl_801D34B1 = .sdata:0x801D34B1; // type:object size:0x7 -mgSeqInitF = .sdata:0x801D34B8; // type:object size:0x4 data:4byte +mgSeqOvlPrev = .sdata:0x801D34B8; // type:object size:0x4 data:4byte wordStartE = .sdata:0x801D34BC; // type:object size:0x7 scope:local data:string seqPunctTbl = .sdata:0x801D34C3; // type:object size:0x3 scope:local data:byte wordStartJ = .sdata:0x801D34C6; // type:object size:0x6 scope:local diff --git a/include/game/hsfdraw.h b/include/game/hsfdraw.h index 76d17f20..41741d75 100755 --- a/include/game/hsfdraw.h +++ b/include/game/hsfdraw.h @@ -39,7 +39,7 @@ void mtxRotCat(Mtx arg0, float arg1, float arg2, float arg3); void mtxRot(Mtx arg0, float arg1, float arg2, float arg3); void mtxScaleCat(Mtx arg0, float arg1, float arg2, float arg3); s16 HmfInverseMtxF3X3(Mtx arg0, Mtx arg1); -void SetDefLight(Vec arg0, Vec arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5, u8 arg6, u8 arg7, u8 arg8, u8 arg9, u8 argA); +void SetDefLight(Vec *arg0, Vec *arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5, u8 arg6, u8 arg7, u8 arg8, u8 arg9, u8 argA); void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); void Hu3DModelObjMtxGet(s16 arg0, char *arg1, Mtx arg2); void PGObjCall(ModelData *arg0, HsfObject *arg1); diff --git a/include/game/minigame_seq.h b/include/game/minigame_seq.h index 95a04e6e..7a1a85b3 100644 --- a/include/game/minigame_seq.h +++ b/include/game/minigame_seq.h @@ -18,4 +18,6 @@ void MGSeqPauseEnableCtrl(s32 flag); void MGSeqPracticeInit(void); void MGSeqPracticeExitCheck(omObjData *object); +extern OverlayID mgSeqOvlPrev; + #endif diff --git a/include/game/object.h b/include/game/object.h index ecc9c99e..99934e45 100644 --- a/include/game/object.h +++ b/include/game/object.h @@ -101,9 +101,12 @@ s32 omDLLSearch(s16 overlay); void omDLLInfoDump(OSModuleInfo *module); void omDLLHeaderDump(OSModuleHeader *module); +void omOutView(omObjData *object); +void omOutViewMulti(omObjData *object); +void omSystemKeyCheckSetup(Process *objman); +void omSystemKeyCheck(omObjData *object); void omSysPauseEnable(u8 flag); - -void omSystemKeyCheckSetup(Process *objman_process); +void omSysPauseCtrl(s16 flag); extern omObjData *omDBGSysKeyObj; extern Process *omwatchproc; @@ -122,4 +125,11 @@ extern OverlayID omprevovl; extern omDllData *omDLLinfoTbl[OM_DLL_MAX]; +extern Vec CRot; +extern Vec Center; +extern float CZoom; +extern Vec CRotM[16]; +extern Vec CenterM[16]; +extern float CZoomM[16]; + #endif \ No newline at end of file diff --git a/src/REL/selmenuDll/main.c b/src/REL/selmenuDll/main.c new file mode 100644 index 00000000..0de4632c --- /dev/null +++ b/src/REL/selmenuDll/main.c @@ -0,0 +1,682 @@ +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/hsfdraw.h" +#include "game/wipe.h" +#include "game/flag.h" +#include "game/printfunc.h" +#include "game/minigame_seq.h" +#include "game/data.h" + +#include "rel_sqrt_consts.h" + +#define SM_PAGE_MAX 7 +#define SM_PAGE_SIZE 10 + +#define SM_KEY_LEFT 0x0004 +#define SM_KEY_RIGHT 0x0008 +#define SM_KEY_UP 0x0001 +#define SM_KEY_DOWN 0x0002 + +static char *charTbl[] = { + "Mario", + "Luigi", + "Peach", + "Yoshi", + "Wario", + "Donkey", + "Daisy", + "Waluigi" +}; + +typedef struct sm_entry { + u16 enabled; + char *name; + OverlayID overlay; +} SMEntry; + +static SMEntry menuTbl[SM_PAGE_MAX*SM_PAGE_SIZE] = { + { 1, "401:WAKUGURI DIVING", OVL_M401 }, + { 1, "402:PURURUN! BIGSLIME", OVL_M402 }, + { 1, "403:TAORERUKABE!", OVL_M403 }, + { 1, "404:CRAYON RUNNER", OVL_M404 }, + { 1, "405:MEDREY RACE", OVL_M405 }, + { 1, "406:SKI RACE", OVL_M406 }, + { 1, "407:BATTANDOMINO", OVL_M407 }, + { 1, "408:SKY DIVE", OVL_M408 }, + { 1, "409:CRAY SHOT", OVL_M409 }, + { 1, "410:JANJAN FREE THROW", OVL_M410 }, + { 1, "411:PAZZLE DE PONG", OVL_M411 }, + { 1, "412:SNOW THROW", OVL_M412 }, + { 1, "413:BOMBHEI PAZZLE!", OVL_M413 }, + { 1, "414:NERATTE UTE!", OVL_M414 }, + { 1, "415:PYONPYON STAMP", OVL_M415 }, + { 1, "416:MAMORE FIRE", OVL_M416 }, + { 1, "417:MARIO SURFER", OVL_M417 }, + { 1, "418:TAIHOU KAKURENBO", OVL_M418 }, + { 1, "419:BANANA DE KOROBASE", OVL_M419 }, + { 1, "420:WATER BATTLE", OVL_M420 }, + { 1, "421:BODY BALOON", OVL_M421 }, + { 1, "422:BELCON COIN", OVL_M422 }, + { 1, "423:GOAL AND GOAL", OVL_M423 }, + { 1, "424:CLANE CATCH", OVL_M424 }, + { 1, "425:AIR DOSSUN", OVL_M425 }, + { 1, "426:KYOROKYORO PANIC", OVL_M426 }, + { 1, "427:BOAT RACE", OVL_M427 }, + { 1, "428:THE ROCK CLIME", OVL_M428 }, + { 1, "429:TREASURE FOREST", OVL_M429 }, + { 1, "430:PARASAILING GO", OVL_M430 }, + { 1, "431:GURUGURU BOX", OVL_M431 }, + { 1, "432:PAIR DE RACE", OVL_M432 }, + { 1, "433:BEACH VOLLEY", OVL_SUBCHRSEL }, + { 1, "434:KINGYOSUKUI", OVL_M434 }, + { 1, "435:KOOPA DARTS", OVL_M435 }, + { 1, "436:KOOPANO AREGA TABETAI!", OVL_M436 }, + { 1, "437:FUSEN RAKUGO", OVL_M437 }, + { 1, "438:SYAKUNETSU WANWAN ATTACK", OVL_M438 }, + { 1, "439:GURUGURU DANGEROUS", OVL_M439 }, + { 1, "440:NEO KOOPA BAKUDAN", OVL_M440 }, + { 1, "441:HIRAHIRA CHOUCHO", OVL_M441 }, + { 1, "442:SUIMYAKU HORE2", OVL_M442 }, + { 1, "443:DRUG RACE", OVL_M443 }, + { 1, "444:MIRACLE PINBALL", OVL_M444 }, + { 1, "445:KINOPIO HAMMER", OVL_M445 }, + { 1, "446:3MAI SOROERO!", OVL_M446 }, + { 1, "447:IQ BLOCK", OVL_M447 }, + { 1, "448:FUMIKURI", OVL_M448 }, + { 1, "449:NOKO2 KOURA PAZZLE", OVL_M449 }, + { 1, "450:LAST GAME", OVL_M450 }, + { 1, "451:PAZZLE", OVL_M451 }, + { 1, "455:BURUTTE 1BAN", OVL_M455 }, + { 1, "456:MOGUTTE 1BAN", OVL_M456 }, + { 1, "457:SUMOH", OVL_M457 }, + { 1, "458:PSYCOLO BATTLE", OVL_M458 }, + { 1, "459:Dr.WARIO", OVL_M459 }, + { 1, "460:", OVL_M460 }, + { 1, "461:BOMBHEI SCRANBLE", OVL_M461 }, + { 1, "462:", OVL_M462 }, + { 1, "***:MESS CHECK", OVL_MESS }, + { 1, "***:BOARD W01", OVL_W01 }, + { 1, "***:BOARD W02", OVL_W02 }, + { 1, "***:BOARD W03", OVL_W03 }, + { 1, "***:BOARD W04", OVL_W04 }, + { 1, "***:BOARD W05", OVL_W05 }, + { 1, "***:BOARD W06", OVL_W06 }, + { 1, "***:BOARD W20", OVL_W20 }, + { 1, "***:BOARD W21", OVL_W21 }, + { 1, "***:STAFF", OVL_STAFF }, + { 1, "***:STORY TEST", OVL_MSTORY4 }, +}; + +static u32 cameraMaskTbl[] = { + ( 1 << 0 ), + ( 1 << 1 ), + ( 1 << 2 ), + ( 1 << 3 ) +}; + +static u32 lbl_1_data_844[] = { + 0, 1, 2, 3, 4, 5 +}; + +static char *dvdMusTbl[] = { + "sound/mu_016a.dvd", + "sound/mu_047a.dvd", + "sound/mu_052a.dvd", + "sound/mu_054a.dvd", + "sound/mu_101a.dvd", + "sound/mu_108a.dvd", + "sound/mu002a.dvd", + "" +}; + +static s16 smPage; +static s16 smSelectPosBackup[SM_PAGE_MAX]; +static omObjData *smMainObj; +static omObjData *outViewObj; +static PlayerConfig smPlayerCfg[4]; +static s16 smSelectPos; +static s16 smSelectPosExit = -1; +static u16 btnDownCurr; +static u16 btnCurr; +static u16 btnReleaseCurr; +static u16 btnDownAll[4]; +static u16 btnAll[4]; +static u16 btnReleaseAll[4]; +static u16 btnPrevAll[4] = {}; + +static void SMInit(omObjData *object); +static void SMRand8Tick(omObjData *object); + +void ModuleProlog(void) +{ + static char *funcId = "SMOBJECTSETUP\n"; + s32 i; + Process *objman; + Vec pos, dir; + + OSReport("ObjectSetup:%08x\n", ModuleProlog); + OSReport("\n\n\n******* SMObjectSetup *********\n"); + OSReport(funcId); + objman = omInitObjMan(50, 8192); + for(i=0; i<4; i++) { + if(GWPlayerCfg[i].character >= 8) { + break; + } + } + if(i != 4) { + for(i=0; i<4; i++) { + GWPlayerCfg[i].character = i; + } + } + smMainObj = omAddObjEx(objman, 0, 0, 0, -1, SMInit); + outViewObj = omAddObjEx(objman, 32730, 0, 0, -1, omOutViewMulti); + omAddObjEx(objman, 0, 0, 0, -1, SMRand8Tick); + outViewObj->work[0] = 4; + for(i=0; i<4; i++) { + CRotM[i].x = -20.0f; + CRotM[i].y = 0.0f; + CRotM[i].z = 0.0f; + CenterM[i].x = 0.0f; + CenterM[i].y = 50.0f; + CenterM[i].z = 0.0f; + CZoomM[i] = 500.0f; + Hu3DCameraCreate(cameraMaskTbl[i]); + Hu3DCameraPerspectiveSet(cameraMaskTbl[i], 45.0f, 20.0f, 25000.0f, 4.0f/3.0f); + Hu3DCameraViewportSet(cameraMaskTbl[i], (i%2)*320.0f, (i/2)*240.0f, 320.0f, 240.0f, 0.0f, 1.0f); + } + Hu3DGLightCreate(0.0f, 0.0f, 100.0f, 0.0f, 0.0f, -1.0f, 255, 255, 255); + pos.x = 0.0f; + pos.y = 0.0f; + pos.z = 200.0f; + dir.x = dir.y = 0.0f; + dir.z = -1.0f; + SetDefLight(&pos, &dir, 255, 255, 255, 64, 64, 64, 255, 255, 255); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); + GWSystem.mg_next_type = -1; + _ClearFlag(0x10000); + GWSystem.turn = 1; + GWSystem.max_turn = 20; +} + +static void CopyPlayerCfg(PlayerConfig *dst, PlayerConfig *src) +{ + s32 i; + for(i=0; i<4; i++) { + *dst++ = *src++; + } +} + +static void CalcBtns(void) +{ + s32 i; + btnCurr = btnReleaseCurr = btnDownCurr = 0; + for(i=0; i<4; i++) { + btnAll[i] = btnReleaseAll[i] = btnDownAll[i] = 0; + if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_LEFT) { + btnAll[i] |= SM_KEY_LEFT; + } + if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_RIGHT) { + btnAll[i] |= SM_KEY_RIGHT; + } + if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_UP) { + btnAll[i] |= SM_KEY_UP; + } + if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_DOWN) { + btnAll[i] |= SM_KEY_DOWN; + } + btnDownAll[i] |= HuPadBtnDown[i]; + btnReleaseAll[i] = (btnAll[i] ^ btnPrevAll[i]) & btnAll[i]; + btnPrevAll[i] = btnAll[i]; + btnCurr |= btnAll[i]; + btnReleaseCurr |= btnReleaseAll[i]; + btnDownCurr |= btnDownAll[i]; + } +} + +static void DrawPage(void) +{ + s32 i; + SMEntry *entry; + fontcolor = FONT_COLOR_YELLOW; + print8(200, 160, 2.5f, "PAGE:%d/%d", smPage+1, SM_PAGE_MAX); + for(i=0; ienabled == 1) { + if(i == smSelectPos) { + fontcolor = FONT_COLOR_CYAN; + } else { + fontcolor = FONT_COLOR_GREEN; + } + } else { + fontcolor = FONT_COLOR_DARK_GREEN; + } + print8(100, (float)((i+10)*8)*2.5f, 2.5f, "%s", entry->name); + } +} + +static void MoveSMCursor(s16 amount); + +static void MoveSMPage(s16 amount) +{ + s16 page; + s32 i; + u16 enabled; + s16 page_old; + enabled = 0; + page = smPage; + page_old = page; + do { + page += amount; + if(page >= SM_PAGE_MAX) { + page = 0; + } else if(page < 0) { + page = SM_PAGE_MAX-1; + } + for(i=0; i= SM_PAGE_SIZE) { + pos = 0; + } else if(pos < 0) { + pos = SM_PAGE_SIZE-1; + } + } while(!menuTbl[(smPage*SM_PAGE_SIZE)+pos].enabled); + smSelectPos = pos; + (void)pos; +} + +static s16 SMComCharGet(s16 player, s16 offset); +static void SMUpdate(omObjData *object); + +static void SMInit(omObjData *object) +{ + s32 i, j; + OSReport("SMinit:%08x\n", SMInit); + omDLLDBGOut(); + Hu3DBGColorSet(0, 0, 0); + CopyPlayerCfg(smPlayerCfg, GWPlayerCfg); + for(i=0; i<4; i++) { + for(j=i+1; j<4; j++) { + if(smPlayerCfg[i].character == smPlayerCfg[j].character) { + smPlayerCfg[j].character = SMComCharGet(j, -1); + } + } + } + smPage = -1; + for(i=0; ifunc = SMUpdate; +} + +static void SMGroupGen(s32 index); +static void SMCharInit(omObjData *object); +static void SMPlayerCfgInit(omObjData *object); +static void SMSound3DInit(omObjData *object); + +static void SMUpdate(omObjData *object) +{ + CalcBtns(); + DrawPage(); + if(btnReleaseCurr & SM_KEY_UP) { + MoveSMCursor(-1); + SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos); + return; + } + if(btnReleaseCurr & SM_KEY_DOWN) { + MoveSMCursor(1); + SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos); + return; + } + if(btnReleaseCurr & SM_KEY_LEFT) { + MoveSMPage(-1); + SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos); + return; + } + if(btnReleaseCurr & SM_KEY_RIGHT) { + MoveSMPage(1); + SMGroupGen((smPage*SM_PAGE_SIZE)+smSelectPos); + return; + } + if((btnDownCurr & PAD_BUTTON_A) || (btnDownCurr & PAD_BUTTON_START)) { + object->func = SMCharInit; + return; + } + if(btnDownCurr & PAD_BUTTON_Y) { + object->func = SMPlayerCfgInit; + return; + } + if(btnDownCurr & PAD_TRIGGER_Z) { + object->func = SMSound3DInit; + return; + } + if(btnDownCurr & PAD_BUTTON_X) { + omOvlReturnEx(0, 1); + } +} + +static void SMGroupGen(s32 index) +{ + OverlayID overlay; + s32 i; + overlay = menuTbl[index].overlay; + for(i=0; i<50; i++) { + if(overlay == mgInfoTbl[i].ovl) { + break; + } + } + if(i == 50) { + for(i=0; i<4; i++) { + smPlayerCfg[i].group = i; + } + return; + } + switch(mgInfoTbl[i].type) { + case 0: + case 3: + case 4: + case 5: + case 6: + for(i=0; i<4; i++) { + smPlayerCfg[i].group = i; + } + break; + + case 1: + smPlayerCfg[0].group = 0; + for(i=1; i<4; i++) { + smPlayerCfg[i].group = 1; + } + break; + + case 2: + for(i=0; i<2; i++) { + smPlayerCfg[i].group = 0; + } + for(i=2; i<4; i++) { + smPlayerCfg[i].group = 1; + } + break; + } + if(overlay == OVL_M430) { + s32 team_cnt[2]; + s32 team_players[2][2]; + team_cnt[0] = team_cnt[1] = 0; + for(i=0; i<4; i++) { + team_players[smPlayerCfg[i].group][team_cnt[smPlayerCfg[i].group]++] = i; + } + if(frand() & 1) { + GWPlayerCfg[team_players[0][0]].group = 0; + GWPlayerCfg[team_players[0][1]].group = 1; + } else { + GWPlayerCfg[team_players[0][0]].group = 1; + GWPlayerCfg[team_players[0][1]].group = 0; + } + if(frand() & 1) { + GWPlayerCfg[team_players[1][0]].group = 2; + GWPlayerCfg[team_players[1][1]].group = 3; + } else { + GWPlayerCfg[team_players[1][0]].group = 3; + GWPlayerCfg[team_players[1][1]].group = 2; + } + } +} + +static s16 charModelID[8]; +static s16 playerDoneF[4]; +static s16 charSelProhibitF[8]; + +static s32 charMdlTbl[] = { + DATA_MAKE_NUM(DATADIR_SELMENU, 0), + DATA_MAKE_NUM(DATADIR_SELMENU, 2), + DATA_MAKE_NUM(DATADIR_SELMENU, 4), + DATA_MAKE_NUM(DATADIR_SELMENU, 6), + DATA_MAKE_NUM(DATADIR_SELMENU, 8), + DATA_MAKE_NUM(DATADIR_SELMENU, 10), + DATA_MAKE_NUM(DATADIR_SELMENU, 12), + DATA_MAKE_NUM(DATADIR_SELMENU, 14), +}; + +static s32 charMdlMotTbl[] = { + DATA_MAKE_NUM(DATADIR_SELMENU, 1), + DATA_MAKE_NUM(DATADIR_SELMENU, 3), + DATA_MAKE_NUM(DATADIR_SELMENU, 5), + DATA_MAKE_NUM(DATADIR_SELMENU, 7), + DATA_MAKE_NUM(DATADIR_SELMENU, 9), + DATA_MAKE_NUM(DATADIR_SELMENU, 11), + DATA_MAKE_NUM(DATADIR_SELMENU, 13), + DATA_MAKE_NUM(DATADIR_SELMENU, 15), +}; + +static s16 SMComCharGet(s16 player, s16 offset) +{ + s32 i; + s16 character; + for(i=0; i<8; i++) { + charSelProhibitF[i] = 0; + } + for(i=0; i<4; i++) { + if(smPlayerCfg[i].iscom) { + continue; + } + charSelProhibitF[smPlayerCfg[i].character] = 1; + } + if(!offset) { + return; + } + character = smPlayerCfg[player].character; + do { + character += offset; + if(character < 0) { + character = 7; + } + if(character >= 8) { + character = 0; + } + } while(charSelProhibitF[character] != 0); + return character; +} + +static void SMCharKill(void) +{ + s32 i; + for(i=0; i<8; i++) { + Hu3DModelKill(charModelID[i]); + } +} + +static void CharRandomize(void) +{ + s32 i; + s32 j; + s32 valid_cnt; + s32 valid_list[8]; + for(i=0; i<4; i++) { + valid_cnt = 0; + for(j=0; j<8; j++) { + if(charSelProhibitF[j]) { + continue; + } + valid_list[valid_cnt++] = j; + } + if(smPlayerCfg[i].iscom == 1) { + smPlayerCfg[i].character = valid_list[rand8() % valid_cnt]; + charSelProhibitF[smPlayerCfg[i].character] = 1; + } + } +} + +static void SMCharUpdate(omObjData *object); +static void SMExit(omObjData *object); + +static void SMCharInit(omObjData *object) +{ + s32 i; + for(i=0; i<8; i++) { + void *data = HuDataSelHeapReadNum(charMdlTbl[i], MEMORY_DEFAULT_NUM, HEAP_DATA); + charModelID[i] = Hu3DModelCreate(data); + Hu3DModelPosSet(charModelID[i], 0.0f, 0.0f, 0.0f); + Hu3DModelAttrSet(charModelID[i], 0x40000001); + Hu3DMotionSet(charModelID[i], Hu3DJointMotion(charModelID[i], HuDataSelHeapReadNum(charMdlMotTbl[i], MEMORY_DEFAULT_NUM, HEAP_DATA))); + } + for(i=0; i<4; i++) { + playerDoneF[i] = 0; + } + SMComCharGet(0, 0); + object->func = SMCharUpdate; +} + +static void SMCharUpdate(omObjData *object) +{ + s32 i; + + s16 port; + s32 j; + s16 w; + s16 x; + s16 y; + s16 done_players; + s16 num_players; + + for(i=0; i<8; i++) { + Hu3DModelAttrSet(charModelID[i], 0x1); + } + for(i=0; i<4; i++) { + if(!smPlayerCfg[i].iscom) { + Hu3DModelAttrReset(charModelID[smPlayerCfg[i].character], 0x1); + Hu3DModelCameraSet(charModelID[smPlayerCfg[i].character], cameraMaskTbl[i]); + } + } + for(i=0, done_players=0, num_players=0; i<4; i++) { + if(playerDoneF[i] == 1) { + done_players++; + } + if(!smPlayerCfg[i].iscom) { + num_players++; + } + } + if(done_players == num_players) { + SMComCharGet(0, 0); + CharRandomize(); + CopyPlayerCfg(GWPlayerCfg, smPlayerCfg); + CharKill(-1); + OSReport("%d,%d,%d,%d\n", GWPlayerCfg[0].character, + GWPlayerCfg[1].character, + GWPlayerCfg[2].character, + GWPlayerCfg[3].character); + if(!CharAMemPtrGet(GWPlayerCfg[0].character)) { + CharARAMOpen(GWPlayerCfg[0].character); + } + if(!CharAMemPtrGet(GWPlayerCfg[1].character)) { + CharARAMOpen(GWPlayerCfg[1].character); + } + if(!CharAMemPtrGet(GWPlayerCfg[2].character)) { + CharARAMOpen(GWPlayerCfg[2].character); + } + if(!CharAMemPtrGet(GWPlayerCfg[3].character)) { + CharARAMOpen(GWPlayerCfg[3].character); + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 20); + object->func = SMExit; + } + CalcBtns(); + for(i=0; i<4; i++) { + port = smPlayerCfg[i].pad_idx; + if(!playerDoneF[i]) { + if(btnReleaseAll[port] & SM_KEY_LEFT) { + smPlayerCfg[port].character = SMComCharGet(i, -1); + } + if(btnReleaseAll[port] & SM_KEY_RIGHT) { + smPlayerCfg[port].character = SMComCharGet(i, 1); + } + if(btnDownAll[port] & PAD_BUTTON_A) { + playerDoneF[i] = 1; + } + } + if(HuPadBtnDown[port] & PAD_BUTTON_B) { + if(done_players != 0) { + playerDoneF[i] = 0; + } else { + SMCharKill(); + object->func = SMUpdate; + return; + } + } + if(btnDownAll[port] & PAD_BUTTON_START) { + for(j=0; j<4; j++) { + if(!smPlayerCfg[j].iscom) { + playerDoneF[j] = 1; + } + } + return; + } + if(!smPlayerCfg[i].iscom) { + w = strlen(charTbl[smPlayerCfg[i].character]); + w *= 16; + x = ((320-w)/2)+((i%2)*320); + y = 176+((i/2)*240); + if(playerDoneF[i] == 1) { + fontcolor = FONT_COLOR_WHITE; + print8(x, y, 2.0f, "\xFD\x08""%s", charTbl[smPlayerCfg[i].character]); + } else { + fontcolor = FONT_COLOR_GREEN; + print8(x, y, 2.0f, "\xFD\x05""%s", charTbl[smPlayerCfg[i].character]); + } + } else { + w = 72; + x = ((320-w)/2)+((i%2)*320); + y = 108+((i/2)*240); + fontcolor = FONT_COLOR_YELLOW; + print8(x, y, 3.0f, "\xFD\x07""COM"); + } + } +} + +static void SMRand8Tick(omObjData *object) +{ + rand8(); +} \ No newline at end of file diff --git a/src/game/board/pause.c b/src/game/board/pause.c index e156d443..ebe23b90 100755 --- a/src/game/board/pause.c +++ b/src/game/board/pause.c @@ -39,7 +39,6 @@ typedef struct { u32 unk0C; } ConfigWork; -extern void omSysPauseCtrl(s32); static void PauseExit(void); static void PauseProcess(void); diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index 3e2e6e31..365e0f11 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -2980,13 +2980,13 @@ static inline void SetDefLightInlineFunc(GXLightObj *arg0, u8 arg1, u8 arg2, u8 GXSetChanMatColor(GX_COLOR0A0, spE); } -void SetDefLight(Vec arg0, Vec arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5, u8 arg6, u8 arg7, u8 arg8, u8 arg9, u8 argA) { +void SetDefLight(Vec *arg0, Vec *arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5, u8 arg6, u8 arg7, u8 arg8, u8 arg9, u8 argA) { GXLightObj sp20; GXInitLightAttn(&sp20, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); GXInitLightSpot(&sp20, 20.0f, GX_SP_COS); - GXInitLightPos(&sp20, arg0.x, arg0.y, arg0.z); - GXInitLightDir(&sp20, arg1.x, arg1.y, arg1.z); + GXInitLightPos(&sp20, arg0->x, arg0->y, arg0->z); + GXInitLightDir(&sp20, arg1->x, arg1->y, arg1->z); SetDefLightInlineFunc(&sp20, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, argA); } diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index fe87daa3..244969ca 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -84,7 +84,7 @@ static int SeqUpdateRecord(SeqWork *work); static int SeqInitFlip(SeqWork *work, va_list params); static int SeqUpdateFlip(SeqWork *work); -s32 mgSeqInitF = -1; +OverlayID mgSeqOvlPrev = OVL_INVALID; static SeqInfo seqInfoTbl[] = { { NULL, NULL, 292.0f, 240.0f, 1.0f, 1.0f, 60 }, @@ -173,7 +173,7 @@ void MGSeqInit(void) HuAR_DVDtoARAM(DATADIR_MGCONST); while(HuARDMACheck()); fn_80036BC8(); - mgSeqInitF = -1; + mgSeqOvlPrev = -1; seqLanguage = GWLanguageGet(); } diff --git a/src/game/objsysobj.c b/src/game/objsysobj.c index 478db6ef..f58ab4b3 100644 --- a/src/game/objsysobj.c +++ b/src/game/objsysobj.c @@ -56,7 +56,6 @@ void omOutViewMulti(omObjData *object) } } -void omSystemKeyCheck(omObjData *object); void omSystemKeyCheckSetup(Process *objman) { From 0eaf8e36c3cbe0c7fb39c7c7b02eeff310a6ad69 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 12 Mar 2024 23:09:11 -0500 Subject: [PATCH 072/106] More selemnu progress --- src/REL/selmenuDll/main.c | 216 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 216 insertions(+) diff --git a/src/REL/selmenuDll/main.c b/src/REL/selmenuDll/main.c index 0de4632c..ca8ad23e 100644 --- a/src/REL/selmenuDll/main.c +++ b/src/REL/selmenuDll/main.c @@ -9,6 +9,8 @@ #include "game/printfunc.h" #include "game/minigame_seq.h" #include "game/data.h" +#include "game/board/main.h" +#include "game/armem.h" #include "rel_sqrt_consts.h" @@ -676,7 +678,221 @@ static void SMCharUpdate(omObjData *object) } } +static void SMExit(omObjData *object) +{ + s32 mg; + if(WipeStatGet()) { + return; + } + while(HuARDMACheck()); + mg = omMgIndexGet(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay); + GWSystem.mg_next = mg; + OSReport("mgNo=%d\n", mg); + if(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W10) { + _SetFlag(0x1000B); + } else if(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W20) { + BoardSaveInit(7); + BoardPartyConfigSet(0, 0, 0, 20, 0, 0, 0, 0); + } else if(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W21) { + BoardSaveInit(8); + BoardPartyConfigSet(0, 0, 0, 20, 0, 0, 0, 0); + } else { + _ClearFlag(0x1000B); + } + if(mg == -1 || !(HuPadBtn[0] & PAD_TRIGGER_Z) || mgInfoTbl[mg].type == 5 || mgInfoTbl[mg].type == 3 || mgInfoTbl[mg].type == 6) { + omOvlCallEx(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay, 1, 0, 0); + } else { + omOvlCallEx(OVL_INST, 1, 0, 0); + } + mgSeqOvlPrev = menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay; + smSelectPosExit = smSelectPos; +} + +static char *padCfgStrTbl[] = { + "PLAYER:%d", + " PAD%d:%s", + "PADNO:%d", + " GRP:%d", + " DIF:%s" +}; + +static s16 playerCfgSelF; +static s16 playerCfgPlayerPos; +static s16 playerCfgOptionPos; + +#define APPLY_PLAYERCFG_HILITE(option) \ +do { \ + s32 color; \ + if(playerCfgOptionPos == option) { \ + color = FONT_COLOR_CYAN; \ + fontcolor = color; \ + } else { \ + color = FONT_COLOR_GREEN; \ + fontcolor = color; \ + } \ +} while(0) + +static void SMPlayerCfgDraw(void) +{ + s32 i; + s16 x; + s16 y; + s16 w; + char *comStr[] = { + "HUMAN", + "COM" + }; + char *diffStr[] = { + "EASY", + "NORMAL", + "HARD", + "VERYHARD" + }; + + for(i=0; i<4; i++) { + w = 128; + x = ((320-w)/2)+((i%2)*320); + y = ((i/2)*240)+48; + if(playerCfgSelF == 0 && playerCfgPlayerPos == i) { + fontcolor = FONT_COLOR_CYAN; + } else { + fontcolor = FONT_COLOR_GREEN; + } + print8(x, y, 2.0f, padCfgStrTbl[0], i); + if(playerCfgSelF == 0) { + fontcolor = FONT_COLOR_DARK_GREEN; + print8(((i%2)*320)+64, ((i/2)*240)+80, 2.0f, padCfgStrTbl[1], smPlayerCfg[i].pad_idx, comStr[smPlayerCfg[i].iscom]); + print8(((i%2)*320)+64, ((i/2)*240)+96, 2.0f, padCfgStrTbl[2], smPlayerCfg[i].pad_idx); + print8(((i%2)*320)+64, ((i/2)*240)+112, 2.0f, padCfgStrTbl[3], smPlayerCfg[i].group); + print8(((i%2)*320)+64, ((i/2)*240)+128, 2.0f, padCfgStrTbl[4], diffStr[smPlayerCfg[i].diff]); + } else if(playerCfgSelF == 1 && playerCfgPlayerPos == i) { + APPLY_PLAYERCFG_HILITE(0); + print8(((i%2)*320)+64, ((i/2)*240)+80, 2.0f, padCfgStrTbl[1], smPlayerCfg[i].pad_idx, comStr[smPlayerCfg[i].iscom]); + APPLY_PLAYERCFG_HILITE(1); + print8(((i%2)*320)+64, ((i/2)*240)+96, 2.0f, padCfgStrTbl[2], smPlayerCfg[i].pad_idx); + APPLY_PLAYERCFG_HILITE(2); + print8(((i%2)*320)+64, ((i/2)*240)+112, 2.0f, padCfgStrTbl[3], smPlayerCfg[i].group); + APPLY_PLAYERCFG_HILITE(3); + print8(((i%2)*320)+64, ((i/2)*240)+128, 2.0f, padCfgStrTbl[4], diffStr[smPlayerCfg[i].diff]); + } else { + fontcolor = FONT_COLOR_DARK_GREEN; + print8(((i%2)*320)+64, ((i/2)*240)+80, 2.0f, padCfgStrTbl[1], smPlayerCfg[i].pad_idx, comStr[smPlayerCfg[i].iscom]); + print8(((i%2)*320)+64, ((i/2)*240)+96, 2.0f, padCfgStrTbl[2], smPlayerCfg[i].pad_idx); + print8(((i%2)*320)+64, ((i/2)*240)+112, 2.0f, padCfgStrTbl[3], smPlayerCfg[i].group); + print8(((i%2)*320)+64, ((i/2)*240)+128, 2.0f, padCfgStrTbl[4], diffStr[smPlayerCfg[i].diff]); + } + } +} + +static void SMPlayerCfgUpdate(omObjData *object); + +static void SMPlayerCfgInit(omObjData *object) +{ + playerCfgSelF = 0; + playerCfgPlayerPos = 0; + playerCfgOptionPos = 0; + object->func = SMPlayerCfgUpdate; +} + +static void SMPlayerCfgUpdate(omObjData *object) +{ + s32 offset; + SMPlayerCfgDraw(); + CalcBtns(); + if(!playerCfgSelF) { + if(btnReleaseCurr & SM_KEY_LEFT) { + offset = ((playerCfgPlayerPos & 0x1)-1) & 0x1; + playerCfgPlayerPos = (playerCfgPlayerPos & 0xFFFE)+offset; + } else { + if(btnReleaseCurr & SM_KEY_RIGHT) { + offset = ((playerCfgPlayerPos & 0x1)+1) & 0x1; + playerCfgPlayerPos = (playerCfgPlayerPos & 0xFFFE)+offset; + } else if(btnReleaseCurr & SM_KEY_DOWN) { + if((playerCfgPlayerPos += 2) >= 4) { + playerCfgPlayerPos -= 4; + } + } else if(btnReleaseCurr & SM_KEY_UP) { + if((playerCfgPlayerPos -= 2) < 0) { + playerCfgPlayerPos += 4; + } + } + } + if(btnDownCurr & PAD_BUTTON_A) { + playerCfgSelF = 1; + return; + } + if((btnDownCurr & PAD_BUTTON_B) || (btnDownCurr & PAD_BUTTON_Y)) { + object->func = SMUpdate; + } + } else if(btnReleaseCurr & SM_KEY_UP) { + if(--playerCfgOptionPos < 0) { + playerCfgOptionPos = 3; + } + } else if(btnReleaseCurr & SM_KEY_DOWN) { + if(++playerCfgOptionPos > 3) { + playerCfgOptionPos = 0; + } + } else if(btnReleaseCurr & SM_KEY_LEFT) { + switch(playerCfgOptionPos) { + case 0: + smPlayerCfg[playerCfgPlayerPos].iscom ^= 1; + break; + + case 1: + if(--smPlayerCfg[playerCfgPlayerPos].pad_idx < 0) { + smPlayerCfg[playerCfgPlayerPos].pad_idx = 3; + } + break; + + case 2: + if(--smPlayerCfg[playerCfgPlayerPos].group < 0) { + smPlayerCfg[playerCfgPlayerPos].group = 3; + } + break; + + case 3: + if(--smPlayerCfg[playerCfgPlayerPos].diff < 0) { + smPlayerCfg[playerCfgPlayerPos].diff = 3; + } + break; + }; + } else if(btnReleaseCurr & SM_KEY_RIGHT) { + switch(playerCfgOptionPos) { + case 0: + smPlayerCfg[playerCfgPlayerPos].iscom ^= 1; + break; + + case 1: + if(++smPlayerCfg[playerCfgPlayerPos].pad_idx > 3) { + smPlayerCfg[playerCfgPlayerPos].pad_idx = 0; + } + break; + + case 2: + if(++smPlayerCfg[playerCfgPlayerPos].group > 3) { + smPlayerCfg[playerCfgPlayerPos].group = 0; + } + break; + + case 3: + if(++smPlayerCfg[playerCfgPlayerPos].diff > 3) { + smPlayerCfg[playerCfgPlayerPos].diff = 0; + } + break; + } + } else if((btnDownCurr & PAD_BUTTON_A) || (btnDownCurr & PAD_BUTTON_B)) { + playerCfgSelF = 0; + } else if(btnDownCurr & PAD_BUTTON_Y) { + object->func = SMUpdate; + } +} + static void SMRand8Tick(omObjData *object) { rand8(); +} + +void fn_1_450C(void) +{ + } \ No newline at end of file From b49e52d86f50d0003d3743eb832ff10975c9aac7 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 13 Mar 2024 21:24:24 -0500 Subject: [PATCH 073/106] Match selmenu sound functions MSM function prototypes will need to be fixed later on --- include/game/audio.h | 6 ++ src/REL/selmenuDll/main.c | 193 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 192 insertions(+), 7 deletions(-) diff --git a/include/game/audio.h b/include/game/audio.h index 58a9f20d..59f34f27 100644 --- a/include/game/audio.h +++ b/include/game/audio.h @@ -56,6 +56,12 @@ s32 HuAudCharVoicePlay(s16 arg0, s16 arg1); s32 HuAudCharVoicePlayPos(s16 arg0, s16 arg1, Vec *arg2); void HuAudCharVoicePlayEntry(s16 arg0, s16 arg1); +extern float Snd3DBackSurDisOffset; +extern float Snd3DFrontSurDisOffset; +extern float Snd3DStartDisOffset; +extern float Snd3DSpeedOffset; +extern float Snd3DDistOffset; +extern s32 musicOffF; extern u8 fadeStat; #endif diff --git a/src/REL/selmenuDll/main.c b/src/REL/selmenuDll/main.c index ca8ad23e..c9331be4 100644 --- a/src/REL/selmenuDll/main.c +++ b/src/REL/selmenuDll/main.c @@ -11,9 +11,14 @@ #include "game/data.h" #include "game/board/main.h" #include "game/armem.h" +#include "game/audio.h" #include "rel_sqrt_consts.h" +//MSM Definitions +static s8 *msmSeGetIndexPtr(s16 datano); +static void msmMusSetMasterVolume(s32 value); + #define SM_PAGE_MAX 7 #define SM_PAGE_SIZE 10 @@ -720,10 +725,10 @@ static s16 playerCfgSelF; static s16 playerCfgPlayerPos; static s16 playerCfgOptionPos; -#define APPLY_PLAYERCFG_HILITE(option) \ +#define DO_HILITE(pos) \ do { \ s32 color; \ - if(playerCfgOptionPos == option) { \ + if(playerCfgOptionPos == pos) { \ color = FONT_COLOR_CYAN; \ fontcolor = color; \ } else { \ @@ -766,13 +771,13 @@ static void SMPlayerCfgDraw(void) print8(((i%2)*320)+64, ((i/2)*240)+112, 2.0f, padCfgStrTbl[3], smPlayerCfg[i].group); print8(((i%2)*320)+64, ((i/2)*240)+128, 2.0f, padCfgStrTbl[4], diffStr[smPlayerCfg[i].diff]); } else if(playerCfgSelF == 1 && playerCfgPlayerPos == i) { - APPLY_PLAYERCFG_HILITE(0); + DO_HILITE(0); print8(((i%2)*320)+64, ((i/2)*240)+80, 2.0f, padCfgStrTbl[1], smPlayerCfg[i].pad_idx, comStr[smPlayerCfg[i].iscom]); - APPLY_PLAYERCFG_HILITE(1); + DO_HILITE(1); print8(((i%2)*320)+64, ((i/2)*240)+96, 2.0f, padCfgStrTbl[2], smPlayerCfg[i].pad_idx); - APPLY_PLAYERCFG_HILITE(2); + DO_HILITE(2); print8(((i%2)*320)+64, ((i/2)*240)+112, 2.0f, padCfgStrTbl[3], smPlayerCfg[i].group); - APPLY_PLAYERCFG_HILITE(3); + DO_HILITE(3); print8(((i%2)*320)+64, ((i/2)*240)+128, 2.0f, padCfgStrTbl[4], diffStr[smPlayerCfg[i].diff]); } else { fontcolor = FONT_COLOR_DARK_GREEN; @@ -784,6 +789,7 @@ static void SMPlayerCfgDraw(void) } } +#undef DO_HILITE static void SMPlayerCfgUpdate(omObjData *object); static void SMPlayerCfgInit(omObjData *object) @@ -895,4 +901,177 @@ static void SMRand8Tick(omObjData *object) void fn_1_450C(void) { -} \ No newline at end of file +} + +static s16 emiCompDataNo; +static s16 emiCompVal; +static s16 sound3DCursorPos; +s16 lbl_1_bss_0; + +static void SMSound3DUpdate(omObjData *object); +static void SMSound3DDraw(void); + +static void SMSound3DInit(omObjData *object) +{ + s8 *data = msmSeGetIndexPtr(emiCompDataNo); + emiCompVal = data[12]; + object->func = SMSound3DUpdate; +} + +static void SMSound3DUpdate(omObjData *object) +{ + float increment; + s8 *data; + + CalcBtns(); + if(btnReleaseCurr & SM_KEY_UP) { + sound3DCursorPos--; + if(sound3DCursorPos < 0) { + sound3DCursorPos = 7; + } + } + if(btnReleaseCurr & SM_KEY_DOWN) { + sound3DCursorPos++; + if(sound3DCursorPos >= 8) { + sound3DCursorPos = 0; + } + } + if(btnReleaseCurr & (SM_KEY_LEFT | SM_KEY_RIGHT)) { + if(btnReleaseCurr & SM_KEY_RIGHT) { + increment = 10; + } else { + increment = -10; + } + if(HuPadBtn[0] & PAD_TRIGGER_Z) { + increment *= 10.0f; + } + switch(sound3DCursorPos) { + case 0: + Snd3DDistOffset += increment; + break; + + case 1: + Snd3DSpeedOffset += increment; + break; + + case 2: + Snd3DStartDisOffset += increment; + break; + + case 3: + Snd3DFrontSurDisOffset += increment; + break; + + case 4: + Snd3DBackSurDisOffset += increment; + break; + + case 5: + emiCompDataNo += increment/10.0f; + if(emiCompDataNo < 0) { + emiCompDataNo = 0; + } + data = msmSeGetIndexPtr(emiCompDataNo); + emiCompVal = data[12]; + break; + + case 6: + emiCompVal += increment/10.0f; + if(emiCompVal > 127) { + emiCompVal = 127; + } + if(emiCompVal < -127) { + emiCompVal = -127; + } + data = msmSeGetIndexPtr(emiCompDataNo); + data[12] = emiCompVal; + break; + + case 7: + musicOffF = (musicOffF) ? 0 : 1; + if(musicOffF) { + msmMusSetMasterVolume(0); + } else { + msmMusSetMasterVolume(127); + } + break; + } + } + if(btnDownCurr & PAD_BUTTON_START) { + switch(sound3DCursorPos) { + case 0: + Snd3DDistOffset = 0; + break; + + case 1: + Snd3DSpeedOffset = 0; + break; + + case 2: + Snd3DStartDisOffset = 0; + break; + + case 3: + Snd3DFrontSurDisOffset = 0; + break; + + case 4: + Snd3DBackSurDisOffset = 0; + break; + + case 5: + emiCompDataNo = 0; + break; + + case 6: + emiCompVal = 0; + break; + + case 7: + musicOffF = 0; + break; + } + } + + if(btnDownCurr & PAD_BUTTON_B) { + object->func = SMUpdate; + } + SMSound3DDraw(); +} + +#define DO_HILITE(pos) \ +do { \ + if(sound3DCursorPos == pos) { \ + fontcolor = FONT_COLOR_GREEN; \ + } else { \ + fontcolor = FONT_COLOR_DARK_GREEN; \ + } \ +} while(0) + +static void SMSound3DDraw(void) +{ + char *onOffStr[] = { + " ON", + "OFF" + }; + fontcolor = FONT_COLOR_YELLOW; + print8(200, 64, 2.0f, "3DSound Config."); + DO_HILITE(0); + print8(140, 96, 2.0f, "Max Distance %5.1f", Snd3DDistOffset); + DO_HILITE(1); + print8(140, 112, 2.0f, "Sound Speed %5.1f", Snd3DSpeedOffset); + DO_HILITE(2); + print8(140, 128, 2.0f, "Start Distance %5.1f", Snd3DStartDisOffset); + DO_HILITE(3); + print8(140, 144, 2.0f, "Front Distance %5.1f", Snd3DFrontSurDisOffset); + DO_HILITE(4); + print8(140, 160, 2.0f, "Back Distance %5.1f", Snd3DBackSurDisOffset); + DO_HILITE(5); + print8(140, 176, 2.0f, "emiComp DataNo %04d", emiCompDataNo); + DO_HILITE(6); + print8(140, 192, 2.0f, "emiComp VAL %3d", emiCompVal); + DO_HILITE(7); + print8(140, 208, 2.0f, "Music %s", onOffStr[(musicOffF) ? 1 : 0]); +} + +#undef DO_HILITE \ No newline at end of file From 1d4e53898b03e0255940b82beb273a001e282310 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 13 Mar 2024 21:37:18 -0500 Subject: [PATCH 074/106] Improve symbol names in selmenu --- config/GMPE01_00/rels/selmenuDll/symbols.txt | 20 +-- src/REL/selmenuDll/main.c | 158 +++++++++---------- 2 files changed, 89 insertions(+), 89 deletions(-) diff --git a/config/GMPE01_00/rels/selmenuDll/symbols.txt b/config/GMPE01_00/rels/selmenuDll/symbols.txt index e372b827..58c32747 100644 --- a/config/GMPE01_00/rels/selmenuDll/symbols.txt +++ b/config/GMPE01_00/rels/selmenuDll/symbols.txt @@ -9,7 +9,7 @@ MoveSMCursor = .text:0x00000BCC; // type:function size:0x88 scope:local SMInit = .text:0x00000C54; // type:function size:0x474 scope:local SMUpdate = .text:0x000010C8; // type:function size:0xA78 scope:local SMGroupGen = .text:0x00001B40; // type:function size:0x334 scope:local -SMComCharGet = .text:0x00001E74; // type:function size:0x110 scope:local +SMChangeChar = .text:0x00001E74; // type:function size:0x110 scope:local SMCharKill = .text:0x00001F84; // type:function size:0x50 scope:local CharRandomize = .text:0x00001FD4; // type:function size:0x10C scope:local SMCharInit = .text:0x000020E0; // type:function size:0x1F8 scope:local @@ -56,7 +56,7 @@ lbl_1_data_18 = .data:0x00000018; // type:object size:0x6 data:string lbl_1_data_1E = .data:0x0000001E; // type:object size:0x7 data:string lbl_1_data_25 = .data:0x00000025; // type:object size:0x6 data:string lbl_1_data_2B = .data:0x0000002B; // type:object size:0x8 data:string -charTbl = .data:0x00000034; // type:object size:0x20 scope:local +smCharTbl = .data:0x00000034; // type:object size:0x20 scope:local lbl_1_data_54 = .data:0x00000054; // type:object size:0x14 data:string lbl_1_data_68 = .data:0x00000068; // type:object size:0x16 data:string lbl_1_data_7E = .data:0x0000007E; // type:object size:0x11 data:string @@ -127,7 +127,7 @@ lbl_1_data_4B6 = .data:0x000004B6; // type:object size:0xE data:string lbl_1_data_4C4 = .data:0x000004C4; // type:object size:0xE data:string lbl_1_data_4D2 = .data:0x000004D2; // type:object size:0xA data:string lbl_1_data_4DC = .data:0x000004DC; // type:object size:0xF data:string -menuTbl = .data:0x000004EC; // type:object size:0x348 scope:local +smMenuTbl = .data:0x000004EC; // type:object size:0x348 scope:local cameraMaskTbl = .data:0x00000834; // type:object size:0x10 scope:local lbl_1_data_844 = .data:0x00000844; // type:object size:0x18 scope:local lbl_1_data_85C = .data:0x0000085C; // type:object size:0x12 data:string @@ -140,7 +140,7 @@ lbl_1_data_8C8 = .data:0x000008C8; // type:object size:0x11 data:string lbl_1_data_8D9 = .data:0x000008D9; // type:object size:0x1 dvdMusTbl = .data:0x000008DC; // type:object size:0x20 scope:local smSelectPosExit = .data:0x000008FC; // type:object size:0x2 scope:local data:2byte -btnPrevAll = .data:0x000008FE; // type:object size:0x8 scope:local +keyDStkAllPrev = .data:0x000008FE; // type:object size:0x8 scope:local lbl_1_data_906 = .data:0x00000906; // type:object size:0xF data:string funcId$244 = .data:0x00000918; // type:object size:0x4 scope:local data:4byte lbl_1_data_91C = .data:0x0000091C; // type:object size:0x12 data:string @@ -181,7 +181,7 @@ lbl_1_data_B01 = .data:0x00000B01; // type:object size:0x15 data:string lbl_1_data_B16 = .data:0x00000B16; // type:object size:0x15 data:string lbl_1_data_B2B = .data:0x00000B2B; // type:object size:0x14 data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x2 data:2byte -sound3DCursorPos = .bss:0x00000002; // type:object size:0x2 scope:local data:2byte +smSound3DPos = .bss:0x00000002; // type:object size:0x2 scope:local data:2byte emiCompVal = .bss:0x00000004; // type:object size:0x2 scope:local data:2byte emiCompDataNo = .bss:0x00000006; // type:object size:0x2 scope:local data:2byte playerCfgOptionPos = .bss:0x00000008; // type:object size:0x2 scope:local data:2byte @@ -190,12 +190,12 @@ playerCfgSelF = .bss:0x0000000C; // type:object size:0x2 scope:local data:2byte charSelProhibitF = .bss:0x0000000E; // type:object size:0x10 scope:local playerDoneF = .bss:0x0000001E; // type:object size:0x8 scope:local charModelID = .bss:0x00000026; // type:object size:0x10 scope:local -btnReleaseAll = .bss:0x00000036; // type:object size:0x8 scope:local -btnAll = .bss:0x0000003E; // type:object size:0x8 scope:local +keyDStkAllDown = .bss:0x00000036; // type:object size:0x8 scope:local +keyDStkAll = .bss:0x0000003E; // type:object size:0x8 scope:local btnDownAll = .bss:0x00000046; // type:object size:0x8 scope:local -btnReleaseCurr = .bss:0x0000004E; // type:object size:0x2 scope:local data:2byte -btnCurr = .bss:0x00000050; // type:object size:0x2 scope:local data:2byte -btnDownCurr = .bss:0x00000052; // type:object size:0x2 scope:local data:2byte +keyDStkDown = .bss:0x0000004E; // type:object size:0x2 scope:local data:2byte +keyDStk = .bss:0x00000050; // type:object size:0x2 scope:local data:2byte +btnDown = .bss:0x00000052; // type:object size:0x2 scope:local data:2byte smSelectPos = .bss:0x00000054; // type:object size:0x2 scope:local data:2byte smPlayerCfg = .bss:0x00000056; // type:object size:0x28 scope:local data:2byte outViewObj = .bss:0x00000080; // type:object size:0x4 scope:local data:4byte diff --git a/src/REL/selmenuDll/main.c b/src/REL/selmenuDll/main.c index c9331be4..9745868b 100644 --- a/src/REL/selmenuDll/main.c +++ b/src/REL/selmenuDll/main.c @@ -27,7 +27,7 @@ static void msmMusSetMasterVolume(s32 value); #define SM_KEY_UP 0x0001 #define SM_KEY_DOWN 0x0002 -static char *charTbl[] = { +static char *smCharTbl[] = { "Mario", "Luigi", "Peach", @@ -44,7 +44,7 @@ typedef struct sm_entry { OverlayID overlay; } SMEntry; -static SMEntry menuTbl[SM_PAGE_MAX*SM_PAGE_SIZE] = { +static SMEntry smMenuTbl[SM_PAGE_MAX*SM_PAGE_SIZE] = { { 1, "401:WAKUGURI DIVING", OVL_M401 }, { 1, "402:PURURUN! BIGSLIME", OVL_M402 }, { 1, "403:TAORERUKABE!", OVL_M403 }, @@ -146,13 +146,13 @@ static omObjData *outViewObj; static PlayerConfig smPlayerCfg[4]; static s16 smSelectPos; static s16 smSelectPosExit = -1; -static u16 btnDownCurr; -static u16 btnCurr; -static u16 btnReleaseCurr; +static u16 btnDown; +static u16 keyDStk; +static u16 keyDStkDown; static u16 btnDownAll[4]; -static u16 btnAll[4]; -static u16 btnReleaseAll[4]; -static u16 btnPrevAll[4] = {}; +static u16 keyDStkAll[4]; +static u16 keyDStkAllDown[4]; +static u16 keyDStkAllPrev[4] = {}; static void SMInit(omObjData *object); static void SMRand8Tick(omObjData *object); @@ -219,27 +219,27 @@ static void CopyPlayerCfg(PlayerConfig *dst, PlayerConfig *src) static void CalcBtns(void) { s32 i; - btnCurr = btnReleaseCurr = btnDownCurr = 0; + keyDStk = keyDStkDown = btnDown = 0; for(i=0; i<4; i++) { - btnAll[i] = btnReleaseAll[i] = btnDownAll[i] = 0; + keyDStkAll[i] = keyDStkAllDown[i] = btnDownAll[i] = 0; if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_LEFT) { - btnAll[i] |= SM_KEY_LEFT; + keyDStkAll[i] |= SM_KEY_LEFT; } if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_RIGHT) { - btnAll[i] |= SM_KEY_RIGHT; + keyDStkAll[i] |= SM_KEY_RIGHT; } if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_UP) { - btnAll[i] |= SM_KEY_UP; + keyDStkAll[i] |= SM_KEY_UP; } if((HuPadDStkRep[i]|HuPadBtn[i]) & PAD_BUTTON_DOWN) { - btnAll[i] |= SM_KEY_DOWN; + keyDStkAll[i] |= SM_KEY_DOWN; } btnDownAll[i] |= HuPadBtnDown[i]; - btnReleaseAll[i] = (btnAll[i] ^ btnPrevAll[i]) & btnAll[i]; - btnPrevAll[i] = btnAll[i]; - btnCurr |= btnAll[i]; - btnReleaseCurr |= btnReleaseAll[i]; - btnDownCurr |= btnDownAll[i]; + keyDStkAllDown[i] = (keyDStkAll[i] ^ keyDStkAllPrev[i]) & keyDStkAll[i]; + keyDStkAllPrev[i] = keyDStkAll[i]; + keyDStk |= keyDStkAll[i]; + keyDStkDown |= keyDStkAllDown[i]; + btnDown |= btnDownAll[i]; } } @@ -250,7 +250,7 @@ static void DrawPage(void) fontcolor = FONT_COLOR_YELLOW; print8(200, 160, 2.5f, "PAGE:%d/%d", smPage+1, SM_PAGE_MAX); for(i=0; ienabled == 1) { if(i == smSelectPos) { fontcolor = FONT_COLOR_CYAN; @@ -283,7 +283,7 @@ static void MoveSMPage(s16 amount) page = SM_PAGE_MAX-1; } for(i=0; ifunc = SMCharInit; return; } - if(btnDownCurr & PAD_BUTTON_Y) { + if(btnDown & PAD_BUTTON_Y) { object->func = SMPlayerCfgInit; return; } - if(btnDownCurr & PAD_TRIGGER_Z) { + if(btnDown & PAD_TRIGGER_Z) { object->func = SMSound3DInit; return; } - if(btnDownCurr & PAD_BUTTON_X) { + if(btnDown & PAD_BUTTON_X) { omOvlReturnEx(0, 1); } } @@ -410,7 +410,7 @@ static void SMGroupGen(s32 index) { OverlayID overlay; s32 i; - overlay = menuTbl[index].overlay; + overlay = smMenuTbl[index].overlay; for(i=0; i<50; i++) { if(overlay == mgInfoTbl[i].ovl) { break; @@ -499,7 +499,7 @@ static s32 charMdlMotTbl[] = { DATA_MAKE_NUM(DATADIR_SELMENU, 15), }; -static s16 SMComCharGet(s16 player, s16 offset) +static s16 SMChangeChar(s16 player, s16 offset) { s32 i; s16 character; @@ -573,7 +573,7 @@ static void SMCharInit(omObjData *object) for(i=0; i<4; i++) { playerDoneF[i] = 0; } - SMComCharGet(0, 0); + SMChangeChar(0, 0); object->func = SMCharUpdate; } @@ -607,7 +607,7 @@ static void SMCharUpdate(omObjData *object) } } if(done_players == num_players) { - SMComCharGet(0, 0); + SMChangeChar(0, 0); CharRandomize(); CopyPlayerCfg(GWPlayerCfg, smPlayerCfg); CharKill(-1); @@ -634,11 +634,11 @@ static void SMCharUpdate(omObjData *object) for(i=0; i<4; i++) { port = smPlayerCfg[i].pad_idx; if(!playerDoneF[i]) { - if(btnReleaseAll[port] & SM_KEY_LEFT) { - smPlayerCfg[port].character = SMComCharGet(i, -1); + if(keyDStkAllDown[port] & SM_KEY_LEFT) { + smPlayerCfg[port].character = SMChangeChar(i, -1); } - if(btnReleaseAll[port] & SM_KEY_RIGHT) { - smPlayerCfg[port].character = SMComCharGet(i, 1); + if(keyDStkAllDown[port] & SM_KEY_RIGHT) { + smPlayerCfg[port].character = SMChangeChar(i, 1); } if(btnDownAll[port] & PAD_BUTTON_A) { playerDoneF[i] = 1; @@ -662,16 +662,16 @@ static void SMCharUpdate(omObjData *object) return; } if(!smPlayerCfg[i].iscom) { - w = strlen(charTbl[smPlayerCfg[i].character]); + w = strlen(smCharTbl[smPlayerCfg[i].character]); w *= 16; x = ((320-w)/2)+((i%2)*320); y = 176+((i/2)*240); if(playerDoneF[i] == 1) { fontcolor = FONT_COLOR_WHITE; - print8(x, y, 2.0f, "\xFD\x08""%s", charTbl[smPlayerCfg[i].character]); + print8(x, y, 2.0f, "\xFD\x08""%s", smCharTbl[smPlayerCfg[i].character]); } else { fontcolor = FONT_COLOR_GREEN; - print8(x, y, 2.0f, "\xFD\x05""%s", charTbl[smPlayerCfg[i].character]); + print8(x, y, 2.0f, "\xFD\x05""%s", smCharTbl[smPlayerCfg[i].character]); } } else { w = 72; @@ -690,26 +690,26 @@ static void SMExit(omObjData *object) return; } while(HuARDMACheck()); - mg = omMgIndexGet(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay); + mg = omMgIndexGet(smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay); GWSystem.mg_next = mg; OSReport("mgNo=%d\n", mg); - if(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W10) { + if(smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W10) { _SetFlag(0x1000B); - } else if(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W20) { + } else if(smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W20) { BoardSaveInit(7); BoardPartyConfigSet(0, 0, 0, 20, 0, 0, 0, 0); - } else if(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W21) { + } else if(smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay == OVL_W21) { BoardSaveInit(8); BoardPartyConfigSet(0, 0, 0, 20, 0, 0, 0, 0); } else { _ClearFlag(0x1000B); } if(mg == -1 || !(HuPadBtn[0] & PAD_TRIGGER_Z) || mgInfoTbl[mg].type == 5 || mgInfoTbl[mg].type == 3 || mgInfoTbl[mg].type == 6) { - omOvlCallEx(menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay, 1, 0, 0); + omOvlCallEx(smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay, 1, 0, 0); } else { omOvlCallEx(OVL_INST, 1, 0, 0); } - mgSeqOvlPrev = menuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay; + mgSeqOvlPrev = smMenuTbl[(smPage*SM_PAGE_SIZE)+smSelectPos].overlay; smSelectPosExit = smSelectPos; } @@ -806,39 +806,39 @@ static void SMPlayerCfgUpdate(omObjData *object) SMPlayerCfgDraw(); CalcBtns(); if(!playerCfgSelF) { - if(btnReleaseCurr & SM_KEY_LEFT) { + if(keyDStkDown & SM_KEY_LEFT) { offset = ((playerCfgPlayerPos & 0x1)-1) & 0x1; playerCfgPlayerPos = (playerCfgPlayerPos & 0xFFFE)+offset; } else { - if(btnReleaseCurr & SM_KEY_RIGHT) { + if(keyDStkDown & SM_KEY_RIGHT) { offset = ((playerCfgPlayerPos & 0x1)+1) & 0x1; playerCfgPlayerPos = (playerCfgPlayerPos & 0xFFFE)+offset; - } else if(btnReleaseCurr & SM_KEY_DOWN) { + } else if(keyDStkDown & SM_KEY_DOWN) { if((playerCfgPlayerPos += 2) >= 4) { playerCfgPlayerPos -= 4; } - } else if(btnReleaseCurr & SM_KEY_UP) { + } else if(keyDStkDown & SM_KEY_UP) { if((playerCfgPlayerPos -= 2) < 0) { playerCfgPlayerPos += 4; } } } - if(btnDownCurr & PAD_BUTTON_A) { + if(btnDown & PAD_BUTTON_A) { playerCfgSelF = 1; return; } - if((btnDownCurr & PAD_BUTTON_B) || (btnDownCurr & PAD_BUTTON_Y)) { + if((btnDown & PAD_BUTTON_B) || (btnDown & PAD_BUTTON_Y)) { object->func = SMUpdate; } - } else if(btnReleaseCurr & SM_KEY_UP) { + } else if(keyDStkDown & SM_KEY_UP) { if(--playerCfgOptionPos < 0) { playerCfgOptionPos = 3; } - } else if(btnReleaseCurr & SM_KEY_DOWN) { + } else if(keyDStkDown & SM_KEY_DOWN) { if(++playerCfgOptionPos > 3) { playerCfgOptionPos = 0; } - } else if(btnReleaseCurr & SM_KEY_LEFT) { + } else if(keyDStkDown & SM_KEY_LEFT) { switch(playerCfgOptionPos) { case 0: smPlayerCfg[playerCfgPlayerPos].iscom ^= 1; @@ -862,7 +862,7 @@ static void SMPlayerCfgUpdate(omObjData *object) } break; }; - } else if(btnReleaseCurr & SM_KEY_RIGHT) { + } else if(keyDStkDown & SM_KEY_RIGHT) { switch(playerCfgOptionPos) { case 0: smPlayerCfg[playerCfgPlayerPos].iscom ^= 1; @@ -886,9 +886,9 @@ static void SMPlayerCfgUpdate(omObjData *object) } break; } - } else if((btnDownCurr & PAD_BUTTON_A) || (btnDownCurr & PAD_BUTTON_B)) { + } else if((btnDown & PAD_BUTTON_A) || (btnDown & PAD_BUTTON_B)) { playerCfgSelF = 0; - } else if(btnDownCurr & PAD_BUTTON_Y) { + } else if(btnDown & PAD_BUTTON_Y) { object->func = SMUpdate; } } @@ -905,7 +905,7 @@ void fn_1_450C(void) static s16 emiCompDataNo; static s16 emiCompVal; -static s16 sound3DCursorPos; +static s16 smSound3DPos; s16 lbl_1_bss_0; static void SMSound3DUpdate(omObjData *object); @@ -924,20 +924,20 @@ static void SMSound3DUpdate(omObjData *object) s8 *data; CalcBtns(); - if(btnReleaseCurr & SM_KEY_UP) { - sound3DCursorPos--; - if(sound3DCursorPos < 0) { - sound3DCursorPos = 7; + if(keyDStkDown & SM_KEY_UP) { + smSound3DPos--; + if(smSound3DPos < 0) { + smSound3DPos = 7; } } - if(btnReleaseCurr & SM_KEY_DOWN) { - sound3DCursorPos++; - if(sound3DCursorPos >= 8) { - sound3DCursorPos = 0; + if(keyDStkDown & SM_KEY_DOWN) { + smSound3DPos++; + if(smSound3DPos >= 8) { + smSound3DPos = 0; } } - if(btnReleaseCurr & (SM_KEY_LEFT | SM_KEY_RIGHT)) { - if(btnReleaseCurr & SM_KEY_RIGHT) { + if(keyDStkDown & (SM_KEY_LEFT | SM_KEY_RIGHT)) { + if(keyDStkDown & SM_KEY_RIGHT) { increment = 10; } else { increment = -10; @@ -945,7 +945,7 @@ static void SMSound3DUpdate(omObjData *object) if(HuPadBtn[0] & PAD_TRIGGER_Z) { increment *= 10.0f; } - switch(sound3DCursorPos) { + switch(smSound3DPos) { case 0: Snd3DDistOffset += increment; break; @@ -997,8 +997,8 @@ static void SMSound3DUpdate(omObjData *object) break; } } - if(btnDownCurr & PAD_BUTTON_START) { - switch(sound3DCursorPos) { + if(btnDown & PAD_BUTTON_START) { + switch(smSound3DPos) { case 0: Snd3DDistOffset = 0; break; @@ -1033,7 +1033,7 @@ static void SMSound3DUpdate(omObjData *object) } } - if(btnDownCurr & PAD_BUTTON_B) { + if(btnDown & PAD_BUTTON_B) { object->func = SMUpdate; } SMSound3DDraw(); @@ -1041,7 +1041,7 @@ static void SMSound3DUpdate(omObjData *object) #define DO_HILITE(pos) \ do { \ - if(sound3DCursorPos == pos) { \ + if(smSound3DPos == pos) { \ fontcolor = FONT_COLOR_GREEN; \ } else { \ fontcolor = FONT_COLOR_DARK_GREEN; \ From c2ca3b43466f968f7bfc692b9ac4f59d34ac62de Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 14 Mar 2024 08:46:29 -0500 Subject: [PATCH 075/106] Fix w20Dll path --- config/GMPE01_00/rels/w20Dll/splits.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/GMPE01_00/rels/w20Dll/splits.txt b/config/GMPE01_00/rels/w20Dll/splits.txt index d45e8251..9df8ed45 100644 --- a/config/GMPE01_00/rels/w20Dll/splits.txt +++ b/config/GMPE01_00/rels/w20Dll/splits.txt @@ -10,7 +10,7 @@ REL/board_executor.c: .text start:0x00000000 end:0x000000E0 .rodata start:0x00000000 end:0x00000010 -REL/w21Dll/main.c: +REL/w20Dll/main.c: .text start:0x000000E0 end:0x00000678 .rodata start:0x00000010 end:0x00000030 .data start:0x00000000 end:0x00000034 From b664e01d0bf872b915bbc22e25b893524b8d7a2c Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 14 Mar 2024 09:08:20 -0500 Subject: [PATCH 076/106] Decompile w21 board --- config/GMPE01_00/rels/w21Dll/symbols.txt | 22 +++--- configure.py | 2 +- src/REL/w21Dll/main.c | 85 ++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 12 deletions(-) create mode 100644 src/REL/w21Dll/main.c diff --git a/config/GMPE01_00/rels/w21Dll/symbols.txt b/config/GMPE01_00/rels/w21Dll/symbols.txt index 83af6697..1b629d3d 100644 --- a/config/GMPE01_00/rels/w21Dll/symbols.txt +++ b/config/GMPE01_00/rels/w21Dll/symbols.txt @@ -3,16 +3,16 @@ _prolog = .text:0x00000030; // type:function size:0x64 scope:global _epilog = .text:0x00000094; // type:function size:0x4C scope:global BoardCreate = .text:0x000000E0; // type:function size:0x1D4 BoardDestroy = .text:0x000002B4; // type:function size:0xB8 -fn_1_36C = .text:0x0000036C; // type:function size:0x44 -fn_1_3B0 = .text:0x000003B0; // type:function size:0x20 -fn_1_3D0 = .text:0x000003D0; // type:function size:0x8 -fn_1_3D8 = .text:0x000003D8; // type:function size:0x4 -fn_1_3DC = .text:0x000003DC; // type:function size:0x4 +LightSetHook = .text:0x0000036C; // type:function size:0x44 scope:local +LightResetHook = .text:0x000003B0; // type:function size:0x20 scope:local +WalkEvent = .text:0x000003D0; // type:function size:0x8 scope:local +WalkMiniEvent = .text:0x000003D8; // type:function size:0x4 scope:local +LandEvent = .text:0x000003DC; // type:function size:0x4 scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x2 data:2byte -lbl_1_data_2 = .data:0x00000002; // type:object size:0x2 data:2byte -lbl_1_data_4 = .data:0x00000004; // type:object size:0x2 data:2byte -lbl_1_data_8 = .data:0x00000008; // type:object size:0x8 +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +bgMdl = .data:0x00000000; // type:object size:0x2 scope:local data:2byte +fgMdl = .data:0x00000002; // type:object size:0x2 scope:local data:2byte +hostMdl = .data:0x00000004; // type:object size:0x2 scope:local data:2byte +hostMotTbl = .data:0x00000008; // type:object size:0x8 scope:local diff --git a/configure.py b/configure.py index 94246d7c..9e7bacff 100644 --- a/configure.py +++ b/configure.py @@ -1104,7 +1104,7 @@ config.libs = [ Rel('w21Dll', objects = { Object(Matching, "REL/board_executor.c"), - Object(NonMatching, "REL/w21Dll/main.c"), + Object(Matching, "REL/w21Dll/main.c"), } ), Rel('ztardll', diff --git a/src/REL/w21Dll/main.c b/src/REL/w21Dll/main.c new file mode 100644 index 00000000..b870ea1e --- /dev/null +++ b/src/REL/w21Dll/main.c @@ -0,0 +1,85 @@ +#include "game/board/space.h" +#include "game/board/model.h" +#include "game/board/main.h" +#include "game/board/star.h" +#include "game/board/shop.h" + +#include "game/data.h" + +static s16 bgMdl = -1; +static s16 fgMdl = -1; +static s16 hostMdl = -1; + +static s32 hostMotTbl[] = { + DATA_MAKE_NUM(DATADIR_BGUEST, 42), + -1 +}; + +static void LightSetHook(void); +static void LightResetHook(void); +static s32 WalkEvent(void); +static s32 WalkMiniEvent(void); +static s32 LandEvent(void); + +void BoardCreate(void) +{ + BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W21, 0)); + bgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W21, 1), NULL, 0); + fn_8006DDE8(bgMdl, -1.0f); + BoardModelMotionStart(bgMdl, 0, 0x40000001); + fgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W21, 2), NULL, 0); + fn_8006DDE8(fgMdl, -1.0f); + BoardModelPosSet(fgMdl, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(fgMdl, 0, 0x40000001); + hostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 41), hostMotTbl, 0); + BoardModelPosSet(hostMdl, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(hostMdl, 1, 0x40000001); + BoardLightHookSet(LightSetHook, LightResetHook); + BoardSpaceWalkEventFuncSet(WalkEvent); + BoardSpaceWalkMiniEventFuncSet(WalkMiniEvent); + BoardSpaceLandEventFuncSet(LandEvent); + BoardStarHostSet(hostMdl); + BoardShopHostSet(hostMdl); +} + +void BoardDestroy(void) +{ + if(hostMdl != -1) { + BoardModelKill(hostMdl); + hostMdl = -1; + } + if(bgMdl != -1) { + BoardModelKill(bgMdl); + bgMdl = -1; + } + if(fgMdl != -1) { + BoardModelKill(fgMdl); + fgMdl = -1; + } +} + +static void LightSetHook(void) +{ + s16 id = BoardModelIDGet(bgMdl); + Hu3DModelLightInfoSet(id, 1); +} + +static void LightResetHook(void) +{ + Hu3DFogClear(); +} + +static s32 WalkEvent(void) +{ + return 0; +} + +static s32 WalkMiniEvent(void) +{ + +} + +static s32 LandEvent(void) +{ + +} \ No newline at end of file From 0e92b2ba098999df9c18618bf34d444afd1cec00 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 14 Mar 2024 09:57:45 -0500 Subject: [PATCH 077/106] Clean up board rels --- config/GMPE01_00/rels/w10Dll/splits.txt | 4 +- config/GMPE01_00/rels/w10Dll/symbols.txt | 2 +- include/REL/w10Dll.h | 7 - include/game/board/main.h | 10 - src/REL/w03Dll/main.c | 5 +- src/REL/w03Dll/mg_coin.c | 72 +++--- src/REL/w03Dll/mg_item.c | 8 +- src/REL/w03Dll/river.c | 44 ++-- src/REL/w03Dll/smoke.c | 10 +- src/REL/w03Dll/statue.c | 74 +++--- src/REL/w10Dll/main.c | 7 +- src/REL/w10Dll/scene.c | 47 ++++ src/REL/w10Dll/tutorial.c | 289 +++++++++-------------- src/game/board/main.c | 12 +- src/game/board/space.c | 14 +- 15 files changed, 267 insertions(+), 338 deletions(-) diff --git a/config/GMPE01_00/rels/w10Dll/splits.txt b/config/GMPE01_00/rels/w10Dll/splits.txt index 3841a3e1..d14a396d 100644 --- a/config/GMPE01_00/rels/w10Dll/splits.txt +++ b/config/GMPE01_00/rels/w10Dll/splits.txt @@ -22,10 +22,10 @@ REL/w10Dll/host.c: .data start:0x00000078 end:0x00000098 REL/w10Dll/scene.c: - .text start:0x00000D2C end:0x0000176C + .text start:0x00000D2C end:0x00001984 .rodata start:0x00000048 end:0x00000058 REL/w10Dll/tutorial.c: - .text start:0x0000176C end:0x0000206C + .text start:0x00001984 end:0x0000206C .rodata start:0x00000058 end:0x00000070 .data start:0x00000098 end:0x000002D4 diff --git a/config/GMPE01_00/rels/w10Dll/symbols.txt b/config/GMPE01_00/rels/w10Dll/symbols.txt index 2baa309a..658188c2 100644 --- a/config/GMPE01_00/rels/w10Dll/symbols.txt +++ b/config/GMPE01_00/rels/w10Dll/symbols.txt @@ -15,7 +15,7 @@ fn_1_AEC = .text:0x00000AEC; // type:function size:0xB4 fn_1_BA0 = .text:0x00000BA0; // type:function size:0x70 fn_1_C10 = .text:0x00000C10; // type:function size:0x10 fn_1_C20 = .text:0x00000C20; // type:function size:0x10C -fn_1_D2C = .text:0x00000D2C; // type:function size:0x28 scope:local +fn_1_D2C = .text:0x00000D2C; // type:function size:0x28 fn_1_D54 = .text:0x00000D54; // type:function size:0x28 fn_1_D7C = .text:0x00000D7C; // type:function size:0x28 fn_1_DA4 = .text:0x00000DA4; // type:function size:0x28 diff --git a/include/REL/w10Dll.h b/include/REL/w10Dll.h index c334d7ac..d1bc4999 100644 --- a/include/REL/w10Dll.h +++ b/include/REL/w10Dll.h @@ -30,12 +30,6 @@ typedef struct w10DllUnk01 { f32 unk10; } w10DllUnk01; //sizeof ? -typedef struct w10DllUnk03 { - s16 unk0; - s16 unk2; - s16 unk4; -} w10DllUnk03; - typedef struct w10DllUnk04 { s16 unk0; s16 unk2; @@ -106,7 +100,6 @@ void fn_1_1354(void); void fn_1_137C(void); extern w10DllUnk04 lbl_1_data_108[42]; -extern w10DllUnk03 lbl_1_data_C6[]; extern Vec lbl_1_data_80[]; extern Process* lbl_1_bss_18; extern s16 lbl_1_bss_1C; diff --git a/include/game/board/main.h b/include/game/board/main.h index 22710325..80c2595f 100644 --- a/include/game/board/main.h +++ b/include/game/board/main.h @@ -53,16 +53,6 @@ typedef struct board_camera_data { BoardFocusData focus; } BoardCameraData; -static inline s32 BoardCurrGet() -{ - return GWSystem.board; -} - -static inline s32 BoardPartyFlagGet() -{ - return GWSystem.party; -} - extern BoardCameraData boardCamera; extern Process *boardObjMan; extern Process *boardMainProc; diff --git a/src/REL/w03Dll/main.c b/src/REL/w03Dll/main.c index 2bd2656b..cabadc56 100644 --- a/src/REL/w03Dll/main.c +++ b/src/REL/w03Dll/main.c @@ -18,7 +18,6 @@ #include "board_unsplit.h" #include "game/hsfman.h" -void fn_8005B150(void*, void*); void fn_1_740(void); void fn_1_E0(void); s32 fn_1_2930(s32 arg0); @@ -443,6 +442,4 @@ void fn_1_10E4(omObjData* arg0) { lbl_1_bss_8 = 0; } HuAudFXListnerUpdate(&sp14, &sp8); -} - -f32 const padMain = 0.0f; \ No newline at end of file +} \ No newline at end of file diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index b0fb110f..a403c9ad 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -77,40 +77,7 @@ s16 lbl_1_data_454 = -1; s16 lbl_1_data_456 = -1; s16 lbl_1_data_458 = -1; s32 lbl_1_data_45C[] = {0x00770021, 0x00770022, -1}; -char phei_str[] = "phei"; -s32 lbl_1_data_470[] = { - 0x005F0066, - 0x001A0066, - 0x006D0066, - 0x008A0066, - 0x00850066, - 0x00110066, - 0x000D0066, - 0x00810066 -}; -s32 lbl_1_data_490[] = { - 0x005F0067, - 0x001A0067, - 0x006D0067, - 0x008A0067, - 0x00850067, - 0x00110067, - 0x000D0067, - 0x00810067 -}; - -s8 lbl_1_data_4B0 = -1; - -s32 lbl_1_data_4B4[] = { - 0x00000440, - 0x00000441, - 0x00000442, - 0x00000443, - 0x00000444 -}; - -s8 lbl_1_data_4C8[] = {1, 5, 10, 15, 20, 20}; //BSS char lbl_1_bss_150[0x30]; @@ -123,7 +90,7 @@ Process* lbl_1_bss_140; void fn_1_7ABC(void) { lbl_1_data_456 = BoardModelCreate(0x770020, lbl_1_data_45C, 0); - BoardModelHookSet(lbl_1_bss_C[7], phei_str, lbl_1_data_456); + BoardModelHookSet(lbl_1_bss_C[7], "phei", lbl_1_data_456); BoardModelMotionStart(lbl_1_data_456, 2, 0x40000002); BoardModelRotYSet(lbl_1_data_456, -45.0f); } @@ -208,7 +175,7 @@ s32 fn_1_7D18(s32 arg0) { BoardPlayerRotYSet(arg0, 180.0 * (atan2(-sp20.x, -sp20.z) / M_PI)); HuPrcSleep(0x1E); model = BoardModelIDGet(lbl_1_bss_C[7]); - Hu3DModelObjPosGet(model, phei_str, &sp38); + Hu3DModelObjPosGet(model, "phei", &sp38); if (GWPlayer[arg0].character == 5) { var_f31 = 54.000004f; } else { @@ -250,6 +217,28 @@ void fn_1_8140(s32 arg0) { fn_1_91B8(); } +s32 lbl_1_data_470[] = { + 0x005F0066, + 0x001A0066, + 0x006D0066, + 0x008A0066, + 0x00850066, + 0x00110066, + 0x000D0066, + 0x00810066 +}; + +s32 lbl_1_data_490[] = { + 0x005F0067, + 0x001A0067, + 0x006D0067, + 0x008A0067, + 0x00850067, + 0x00110067, + 0x000D0067, + 0x00810067 +}; + void fn_1_81E0(s32 arg0) { Point3d sp8; omObjData* temp_r3; @@ -467,6 +456,17 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) { BoardModelMotionSpeedSet(lbl_1_data_456, arg0->trans.x); } +s8 lbl_1_data_4B0 = -1; + +s32 lbl_1_data_4B4[] = { + 0x00000440, + 0x00000441, + 0x00000442, + 0x00000443, + 0x00000444 +}; + + void fn_1_8C08(omObjData* arg0, someBits3* arg1) { Point3d spC; f32 temp_f31; @@ -552,6 +552,8 @@ void fn_1_9044(omObjData* arg0, someBits3* arg1) { BoardModelRotSetV(lbl_1_data_456, &sp8); } +s8 lbl_1_data_4C8[] = {1, 5, 10, 15, 20, 20}; + void fn_1_91B8(void) { s8 temp_r3; diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index c9925419..49cc2027 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -19,8 +19,6 @@ double sin(double x); double cos(double x); double atan2(double y, double x); -#define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0]))) - typedef struct someBits { /* 0x00 */ struct { u8 unk00_bit0 : 1; @@ -113,12 +111,8 @@ s32 lbl_1_data_4E0 = -1; s16 lbl_1_data_4E4 = -1; s8 lbl_1_data_4E6[] = {1, 1, 3, 3, 2, 2, 2, 1, 2, 3, 0, 4, 5, 0}; -char itemString[] = "item"; -char item1String[] = "item1"; -char item2String[] = "item2"; - char* lbl_1_data_508[] = { - itemString, item1String, item2String + "item", "item1", "item2" }; s32 lbl_1_data_514[] = { diff --git a/src/REL/w03Dll/river.c b/src/REL/w03Dll/river.c index fab310b1..f82f8276 100644 --- a/src/REL/w03Dll/river.c +++ b/src/REL/w03Dll/river.c @@ -58,25 +58,6 @@ s32 lbl_1_data_390[] = { -1 }; -char itemhook_RString[] = "itemhook_R"; -char hei01String[] = "hei01"; -char ikadaString[] = "ikada"; - -typedef struct unkPos { - s32 x; - s32 y; - s32 z; -} unkPos; - -unkPos lbl_1_data_3B8[6] = { - {5, 20, 5}, - {21, 35, 7}, - {31, 50, 10}, - {51, 80, 15}, - {81, 100, 17}, - {101, 999, 20}, -}; - void fn_1_63F4(s32 arg0) { Vec spC; unkWorkStruct* work = OM_GET_WORK_PTR(lbl_1_bss_12C, unkWorkStruct); @@ -100,10 +81,10 @@ void fn_1_6494(void) { lbl_1_data_38C = BoardModelCreate(0x77000F, NULL, 0); lbl_1_data_38A = BoardModelCreate(0x2000D, &lbl_1_data_390[0], 0); BoardModelMotionStart(lbl_1_data_38A, 1, 0x40000001); - BoardModelHookSet(lbl_1_data_38A, itemhook_RString, lbl_1_data_38C); - BoardModelHookSet(lbl_1_data_388, hei01String, lbl_1_data_38A); + BoardModelHookSet(lbl_1_data_38A, "itemhook_R", lbl_1_data_38C); + BoardModelHookSet(lbl_1_data_388, "hei01", lbl_1_data_38A); - Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[0]), ikadaString, &sp14); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[0]), "ikada", &sp14); BoardSpaceFlagPosGet(0, 0x200, &sp8); sp14.x = sp8.x + (400.0 * sin(-1.5707963267948966)); sp14.z = sp8.z + (400.0 * cos(-1.5707963267948966)); @@ -119,7 +100,7 @@ s32 fn_1_6698(void) { Vec sp14; Vec sp8; - Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[0]), ikadaString, &sp14); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[0]), "ikada", &sp14); BoardSpaceFlagPosGet(0, 0x200, &sp8); sp14.x = sp8.x + (400.0 * sin(-1.5707963267948966)); sp14.z = sp8.z + (400.0 * cos(-1.5707963267948966)); @@ -158,6 +139,21 @@ void fn_1_6884(void) { lbl_1_bss_120 = 0; } +typedef struct unkPos { + s32 x; + s32 y; + s32 z; +} unkPos; + +unkPos lbl_1_data_3B8[6] = { + {5, 20, 5}, + {21, 35, 7}, + {31, 50, 10}, + {51, 80, 15}, + {81, 100, 17}, + {101, 999, 20}, +}; + s32 fn_1_6898(s32 arg0) { Vec sp20; Vec sp14; @@ -172,7 +168,7 @@ s32 fn_1_6898(s32 arg0) { BoardCameraViewSet(2); BoardCameraMotionWait(); - Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_388), hei01String, &sp20); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_388), "hei01", &sp20); BoardPlayerPosGet(arg0, &sp14); PSVECSubtract(&sp20, &sp14, &sp8); temp_f31 = 180.0 * (atan2(sp8.x, sp8.z) / 3.141592653589793); diff --git a/src/REL/w03Dll/smoke.c b/src/REL/w03Dll/smoke.c index c9731903..9b8d91c5 100644 --- a/src/REL/w03Dll/smoke.c +++ b/src/REL/w03Dll/smoke.c @@ -18,15 +18,9 @@ extern s16 lbl_1_data_1E0; void fn_1_79E0(omObjData* arg0); -char kemuri1[] = "kemuri1"; -char kemuri2[] = "kemuri2"; -char kemuri3[] = "kemuri3"; -char kemuri4[] = "kemuri4"; -char kemuri5[] = "kemuri5"; - char* kemuri_strings[] = { - kemuri1, kemuri2, kemuri3, - kemuri4, kemuri5 + "kemuri1", "kemuri2", "kemuri3", + "kemuri4", "kemuri5" }; void fn_1_785C(void) { diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index 0a41ab69..4a7923e5 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -36,42 +36,6 @@ s16 lbl_1_data_284 = -1; s16 lbl_1_data_286 = -1; s32 lbl_1_data_288 = -1; -char lbl_1_data_28C[] = "%d"; - -s32 lbl_1_data_290[] = { //TODO: make sure this actually uses DATA_MAKE_NUM macro - DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x62), - DATA_MAKE_NUM(DATADIR_LUIGIMOT, 0x62), - DATA_MAKE_NUM(DATADIR_PEACHMOT, 0x62), - DATA_MAKE_NUM(DATADIR_YOSHIMOT, 0x62), - DATA_MAKE_NUM(DATADIR_WARIOMOT, 0x62), - DATA_MAKE_NUM(DATADIR_DONKEYMOT, 0x62), - DATA_MAKE_NUM(DATADIR_DAISYMOT, 0x62), - DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 0x62), -}; - -s32 lbl_1_data_2B0[] = { //TODO: make sure this actually uses DATA_MAKE_NUM macro - DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x33), - DATA_MAKE_NUM(DATADIR_LUIGIMOT, 0x33), - DATA_MAKE_NUM(DATADIR_PEACHMOT, 0x33), - DATA_MAKE_NUM(DATADIR_YOSHIMOT, 0x33), - DATA_MAKE_NUM(DATADIR_WARIOMOT, 0x33), - DATA_MAKE_NUM(DATADIR_DONKEYMOT, 0x33), - DATA_MAKE_NUM(DATADIR_DAISYMOT, 0x33), - DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 0x33), -}; - -s32 lbl_1_data_2D0[] = { - 0x00000125, 0x00000165, 0x000001A5, - 0x000001E5, 0x00000225, 0x00000265, - 0x000002A5, 0x000002E5 -}; - -s32 lbl_1_data_2F0[] = { - 0x0000012E, 0x0000016E, 0x000001AE, - 0x000001EE, 0x0000022E, 0x0000026E, - 0x000002AE, 0x000002EE -}; - //BSS Extern extern w03State* lbl_1_bss_0; extern Process *boardMainProc; @@ -123,7 +87,7 @@ void fn_1_1358(void) { fn_1_20E0(cur_player_index); } if (lbl_1_bss_2C) { - sprintf(lbl_1_bss_44, lbl_1_data_28C, lbl_1_bss_2C); + sprintf(lbl_1_bss_44, "%d", lbl_1_bss_2C); BoardWinCreate(0, 0x160006, -1); BoardWinInsertMesSet((s32)lbl_1_bss_44, 0); BoardWinWait(); @@ -242,6 +206,40 @@ s32 fn_1_1650(s32 arg0) { return 1; } +s32 lbl_1_data_290[] = { //TODO: make sure this actually uses DATA_MAKE_NUM macro + DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x62), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 0x62), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 0x62), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 0x62), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 0x62), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 0x62), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 0x62), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 0x62), +}; + +s32 lbl_1_data_2B0[] = { //TODO: make sure this actually uses DATA_MAKE_NUM macro + DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x33), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 0x33), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 0x33), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 0x33), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 0x33), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 0x33), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 0x33), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 0x33), +}; + +s32 lbl_1_data_2D0[] = { + 0x00000125, 0x00000165, 0x000001A5, + 0x000001E5, 0x00000225, 0x00000265, + 0x000002A5, 0x000002E5 +}; + +s32 lbl_1_data_2F0[] = { + 0x0000012E, 0x0000016E, 0x000001AE, + 0x000001EE, 0x0000022E, 0x0000026E, + 0x000002AE, 0x000002EE +}; + void fn_1_19DC(s32 arg0, s32 arg1) { s32 temp_r30; s32 temp_r5; @@ -561,7 +559,7 @@ s32 fn_1_2930(s32 arg0) { fn_1_CF4(); return 1; } - sprintf(lbl_1_bss_38, lbl_1_data_28C, lbl_1_bss_0->unk0); + sprintf(lbl_1_bss_38, "%d", lbl_1_bss_0->unk0); BoardWinCreate(0, 0x160007, -1); BoardWinInsertMesSet((s32)lbl_1_bss_38, 1); BoardWinWait(); diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index 14e63a01..39afd789 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -68,11 +68,6 @@ s32 lbl_1_data_6C[2] = { DATA_NUM_LISTEND }; -// function is probably global. only inlined in rels? -inline s32 get_current_board(void) { - return GWSystem.board; -} - void BoardCreate(void) { f32 sp10; f32 spC[2]; @@ -83,7 +78,7 @@ void BoardCreate(void) { s32 temp; s32 board; - board = BoardCurrGet(); + board = GWBoardGet(); lbl_1_bss_0 = (W10State *)&GWSystem.board_data; lbl_1_bss_0->unk0 = 0; lbl_1_bss_0->unk4 = 0; diff --git a/src/REL/w10Dll/scene.c b/src/REL/w10Dll/scene.c index 270f6e41..4a0ac9fd 100644 --- a/src/REL/w10Dll/scene.c +++ b/src/REL/w10Dll/scene.c @@ -244,3 +244,50 @@ void fn_1_13A4(void) { HuPrcVSleep(); } } + +void fn_1_176C(void) { + fn_1_C10(1); + fn_1_BA0(0x2E0024); +} + +void fn_1_179C(void) { + fn_1_BA0(0x2E0025); + GWPlayer[1].color = 2; + GWPlayer[3].color = 2; +} + +void fn_1_17F4(void) { + fn_1_BA0(0x2E0026); + GWPlayer[0].color = 2; +} + +void fn_1_1834(void) { + fn_1_BA0(0x2E0027); + GWPlayer[0].color = 1; + GWPlayer[1].color = 1; + GWPlayer[2].color = 1; + GWPlayer[3].color = 2; +} + +void fn_1_18BC(void) { + fn_1_BA0(0x2E0028); + fn_1_BA0(0x2E0029); + boardTutorialData[0] = 0; + BoardStatusItemSet(0); +} + +void fn_1_1908(void) { + fn_1_BA0(0x2E002D); +} + +void fn_1_1930(void) { + fn_1_BA0(0x2E002F); +} + +void fn_1_1958(void) { + fn_1_BA0(0x2E0031); +} + +void fn_1_1980(void) { + +} \ No newline at end of file diff --git a/src/REL/w10Dll/tutorial.c b/src/REL/w10Dll/tutorial.c index eb85426e..6da586f4 100644 --- a/src/REL/w10Dll/tutorial.c +++ b/src/REL/w10Dll/tutorial.c @@ -5,68 +5,118 @@ #include "game/wipe.h" #include "game/board/ui.h" -char lbl_1_data_98[] = "@@@@@@@@@@@@@@ Tutorial Exit @@@@@@@@@@@@@@\n\000"; +void fn_1_1984(void) { + s32 port; + s32 i; -w10DllUnk03 lbl_1_data_C6[11] = { -1, -1, -1, -2, -1, -1, -4, -1, -1, -5, -1, -1, -5, -1, -1, -4, -1, -1, -1, -1, -1, -3, -1, -1, -2, -1, -1, -4, -1, -1, -5, 6, -1, + if (lbl_1_bss_C == 0) { + if (WipeStatGet() != 0) { + HuWinDispOff(lbl_1_bss_E); + return; + } + HuWinDispOn(lbl_1_bss_E); + if (BoardIsKill() != 0) { + return; + } + for (i = 0; i < ARRAY_COUNT(GWPlayer); i++) { + port = GWPlayer[i].port; + if (port == -1) { + continue; + } + if (HuPadStatGet(port) == 0 && HuPadBtnDown[port] & PAD_BUTTON_START) { + break; + } + } + if (i != 4) { + lbl_1_bss_C = 1; + OSReport("@@@@@@@@@@@@@@ Tutorial Exit @@@@@@@@@@@@@@\n"); + BoardAudSeqFadeOut(0, 0x1F3); + BoardKill(); + BoardTutorialHookSet(NULL); + } + } +} + +s16 lbl_1_data_C6[11][3] = { + 1, -1, -1, + 2, -1, -1, + 4, -1, -1, + 5, -1, -1, + 5, -1, -1, + 4, -1, -1, + 1, -1, -1, + 3, -1, -1, + 2, -1, -1, + 4, -1, -1, + 5, 6, -1, }; w10DllUnk04 lbl_1_data_108[42] = { -{0x0000, 0000, fn_1_D2C}, -{0x0001, 0000, fn_1_D54}, -{0x0002, 0000, fn_1_D7C}, -{0x0003, 0000, fn_1_DA4}, -{0x0003, 0000, fn_1_DCC}, -{0x0003, 0000, fn_1_DF4}, -{0x0003, 0000, fn_1_E1C}, -{0x0004, 0000, fn_1_E44}, -{0x0005, 0000, fn_1_E94}, -{0x0006, 0000, fn_1_EBC}, -{0x0007, 0000, fn_1_EE4}, -{0x000A, 0000, fn_1_EE8}, -{0x000B, 0000, fn_1_F30}, -{0x0010, 0000, fn_1_F6C}, -{0x0011, 0000, fn_1_FB8}, -{0x000C, 0000, fn_1_1010}, -{0x000D, 0000, fn_1_105C}, -{0x000E, 0000, fn_1_1098}, -{0x000E, 0000, fn_1_10C0}, -{0x000F, 0000, fn_1_10F8}, -{0x0012, 0000, fn_1_1134}, -{0x0014, 0000, fn_1_1178}, -{0x0015, 0000, fn_1_11A0}, -{0x0016, 0000, fn_1_11EC}, -{0x0005, 0000, fn_1_1240}, -{0x0017, 0000, fn_1_1278}, -{0x0007, 0000, fn_1_12A0}, -{0x0005, 0000, fn_1_12DC}, -{0x0017, 0000, fn_1_1304}, -{0x0018, 0000, fn_1_132C}, -{0x0019, 0000, fn_1_1354}, -{0x0008, 0000, fn_1_137C}, -{0x0009, 0000, fn_1_13A4}, -{0x001A, 0000, fn_1_176C}, -{0x001B, 0000, fn_1_179C}, -{0x001B, 0000, fn_1_17F4}, -{0x001B, 0000, fn_1_1834}, -{0x001B, 0000, fn_1_18BC}, -{0x001C, 0000, fn_1_1908}, -{0x001C, 0000, fn_1_1930}, -{0x001C, 0000, fn_1_1958}, -{-1, 0, 0}, + {0x0000, 0000, fn_1_D2C}, + {0x0001, 0000, fn_1_D54}, + {0x0002, 0000, fn_1_D7C}, + {0x0003, 0000, fn_1_DA4}, + {0x0003, 0000, fn_1_DCC}, + {0x0003, 0000, fn_1_DF4}, + {0x0003, 0000, fn_1_E1C}, + {0x0004, 0000, fn_1_E44}, + {0x0005, 0000, fn_1_E94}, + {0x0006, 0000, fn_1_EBC}, + {0x0007, 0000, fn_1_EE4}, + {0x000A, 0000, fn_1_EE8}, + {0x000B, 0000, fn_1_F30}, + {0x0010, 0000, fn_1_F6C}, + {0x0011, 0000, fn_1_FB8}, + {0x000C, 0000, fn_1_1010}, + {0x000D, 0000, fn_1_105C}, + {0x000E, 0000, fn_1_1098}, + {0x000E, 0000, fn_1_10C0}, + {0x000F, 0000, fn_1_10F8}, + {0x0012, 0000, fn_1_1134}, + {0x0014, 0000, fn_1_1178}, + {0x0015, 0000, fn_1_11A0}, + {0x0016, 0000, fn_1_11EC}, + {0x0005, 0000, fn_1_1240}, + {0x0017, 0000, fn_1_1278}, + {0x0007, 0000, fn_1_12A0}, + {0x0005, 0000, fn_1_12DC}, + {0x0017, 0000, fn_1_1304}, + {0x0018, 0000, fn_1_132C}, + {0x0019, 0000, fn_1_1354}, + {0x0008, 0000, fn_1_137C}, + {0x0009, 0000, fn_1_13A4}, + {0x001A, 0000, fn_1_176C}, + {0x001B, 0000, fn_1_179C}, + {0x001B, 0000, fn_1_17F4}, + {0x001B, 0000, fn_1_1834}, + {0x001B, 0000, fn_1_18BC}, + {0x001C, 0000, fn_1_1908}, + {0x001C, 0000, fn_1_1930}, + {0x001C, 0000, fn_1_1958}, + {-1, 0, 0}, }; -char lbl_1_data_258[] = "Tutorial Hook P0:%d P1:%d P2:%d P3:%d SCEN:%d CUE:%d PRM:%d DICE:%d MSG:%d\n"; +int fn_1_1AAC(s16 arg0, s32 arg1) { + if (arg0 == 0x1E) { + fn_1_1984(); + return; + } + if (arg0 != 0x1D) { + OSReport("Tutorial Hook P0:%d P1:%d P2:%d P3:%d SCEN:%d CUE:%d PRM:%d DICE:%d MSG:%d\n", + GWPlayer[0].com, GWPlayer[1].com, + GWPlayer[2].com, GWPlayer[3].com, + lbl_1_bss_0->unk0, arg0, arg1, lbl_1_bss_0->unk4, lbl_1_bss_0->unk6); + if (lbl_1_data_108[lbl_1_bss_0->unk0].unk0 != -1) { + if (arg0 == 5) { + BoardRollTutorialSet(&lbl_1_data_C6[lbl_1_bss_0->unk4++][0]); + } + if (arg0 == lbl_1_data_108[lbl_1_bss_0->unk0].unk0) { + void (*temp_r3_3)() = lbl_1_data_108[lbl_1_bss_0->unk0++].unk4; + temp_r3_3(); + } + } + } +} s32 lbl_1_data_2A8[11] = { DATA_MAKE_NUM(DATADIR_W10, 4), @@ -82,133 +132,6 @@ s32 lbl_1_data_2A8[11] = { DATA_MAKE_NUM(DATADIR_W10, 14) }; -void fn_1_176C(void) { - fn_1_C10(1); - fn_1_BA0(0x2E0024); -} - -void fn_1_179C(void) { - fn_1_BA0(0x2E0025); - GWPlayer[1].color = 2; - GWPlayer[3].color = 2; -} - -void fn_1_17F4(void) { - fn_1_BA0(0x2E0026); - GWPlayer[0].color = 2; -} - -void fn_1_1834(void) { - fn_1_BA0(0x2E0027); - GWPlayer[0].color = 1; - GWPlayer[1].color = 1; - GWPlayer[2].color = 1; - GWPlayer[3].color = 2; -} - -void fn_1_18BC(void) { - fn_1_BA0(0x2E0028); - fn_1_BA0(0x2E0029); - boardTutorialData[0] = 0; - BoardStatusItemSet(0); -} - -void fn_1_1908(void) { - fn_1_BA0(0x2E002D); -} - -void fn_1_1930(void) { - fn_1_BA0(0x2E002F); -} - -void fn_1_1958(void) { - fn_1_BA0(0x2E0031); -} - -void fn_1_1980(void) { - -} - -void fn_1_1984(void) { - s32 contPortIndex; - s32 i; - - if (lbl_1_bss_C == 0) { - if (WipeStatGet() != 0) { - HuWinDispOff(lbl_1_bss_E); - return; - } - HuWinDispOn(lbl_1_bss_E); - if (BoardIsKill() != 0) { - return; - } - for (i = 0; i < ARRAY_COUNT(GWPlayer); i++) { - contPortIndex = GWPlayer[i].port; - if (contPortIndex == -1) { - continue; - } - if (HuPadStatGet(contPortIndex) == 0 && HuPadBtnDown[contPortIndex] & PAD_BUTTON_START) { - break; - } - } - if (i != 4) { - lbl_1_bss_C = 1; - OSReport(lbl_1_data_98); - BoardAudSeqFadeOut(0, 0x1F3); - BoardKill(); - BoardTutorialHookSet(NULL); - } - } -} - -int fn_1_1AAC(s16 arg0, s32 arg1) { - s32 i; - if (arg0 == 0x1E) { - if (lbl_1_bss_C == 0) { - if (WipeStatGet() != 0) { - HuWinDispOff(lbl_1_bss_E); - } else { - HuWinDispOn(lbl_1_bss_E); - if (BoardIsKill() == 0) { - s32 contPortIndex; - for (i = 0; i < ARRAY_COUNT(GWPlayer); i++) { - contPortIndex = GWPlayer[i].port; - if (contPortIndex == -1) { - continue; - } - if (HuPadStatGet(contPortIndex) == 0 && HuPadBtnDown[contPortIndex] & 0x1000) { - break; - } - } - if (i != 4) { - lbl_1_bss_C = 1; - OSReport(lbl_1_data_98); - BoardAudSeqFadeOut(0, 0x1F3); - BoardKill(); - BoardTutorialHookSet(NULL); - } - } - } - } - return; - } - if (arg0 != 0x1D) { - OSReport(lbl_1_data_258, - GWPlayer[0].com, GWPlayer[1].com, - GWPlayer[2].com, GWPlayer[3].com, - lbl_1_bss_0->unk0, arg0, arg1, lbl_1_bss_0->unk4, lbl_1_bss_0->unk6); - if (lbl_1_data_108[lbl_1_bss_0->unk0].unk0 != -1) { - if (arg0 == 5) { - BoardRollTutorialSet(&lbl_1_data_C6[lbl_1_bss_0->unk4++]); - } - if (arg0 == lbl_1_data_108[lbl_1_bss_0->unk0].unk0) { - void (*temp_r3_3)() = lbl_1_data_108[lbl_1_bss_0->unk0++].unk4; - temp_r3_3(); - } - } - } -} - void fn_1_1D68(void) { s32 temp_r4; s32 temp_r5; diff --git a/src/game/board/main.c b/src/game/board/main.c index 86584a91..31d069ba 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -328,7 +328,7 @@ void BoardSaveInit(s32 board) GWPlayer[i].items[0] = -1; GWPlayer[i].items[1] = -1; GWPlayer[i].items[2] = -1; - if(BoardPartyFlagGet() == 0 || _CheckFlag(FLAG_ID_MAKE(1, 11))) { + if(GWPartyGet() == 0 || _CheckFlag(FLAG_ID_MAKE(1, 11))) { GWStarsSet(i, 0); } else { GWStarsSet(i, BoardPlayerHandicapGet(i)); @@ -433,14 +433,14 @@ static void MainFunc(void) _ClearFlag(FLAG_ID_MAKE(1, 28)); do { BoardStatusShowSetAll(1); - if(BoardCurrGet() == 5 && GWSystem.player_curr == 0 && !turn_cont && boardTurnFunc) { + if(GWBoardGet() == 5 && GWSystem.player_curr == 0 && !turn_cont && boardTurnFunc) { GWSystem.player_curr = -1; boardTurnFunc(); GWSystem.player_curr = 0; } BoardMusStartBoard(); for(i=GWSystem.player_curr; i<4; i++) { - if(BoardCurrGet() == 7 || BoardCurrGet() == 8) { + if(GWBoardGet() == 7 || GWBoardGet() == 8) { if((int)(GWSystem.max_turn-GWSystem.turn) < 5 && i == 0 && !turn_cont) { BoardLast5GfxInit(); _SetFlag(FLAG_ID_MAKE(0, 8)); @@ -494,7 +494,7 @@ static void MainFunc(void) BoardPlayerMoveAwayStartCurr(GWPlayer[i].space_curr, 1); fade_type = 0; } else { - if(BoardCurrGet() == 7 || BoardCurrGet() == 8) { + if(GWBoardGet() == 7 || GWBoardGet() == 8) { if(GWSystem.turn != GWSystem.max_turn) { WipeColorSet(255, 255, 255); WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_CROSS, 1); @@ -514,7 +514,7 @@ static void MainFunc(void) } BoardPlayerPostTurnHookExec(i); } - if(BoardCurrGet() == 7 || BoardCurrGet() == 8) { + if(GWBoardGet() == 7 || GWBoardGet() == 8) { GWSystem.player_curr = 0; if(BoardTurnNext()) { BoardAudSeqFadeOut(0, 500); @@ -733,7 +733,7 @@ static void DestroyBoard(void) } BoardModelKillAll(); BoardWinKillAll(); - HuDataDirClose(dir_table[BoardCurrGet()]); + HuDataDirClose(dir_table[GWBoardGet()]); HuDataDirClose(DATADIR_EFFECT); HuDataDirClose(DATADIR_BGUEST); HuDataDirClose(DATADIR_BKOOPASUIT); diff --git a/src/game/board/space.c b/src/game/board/space.c index a5cd7670..7d18bc55 100644 --- a/src/game/board/space.c +++ b/src/game/board/space.c @@ -347,7 +347,7 @@ s32 BoardSpaceStarGetNext(void) s16 star_pos; star_total = GWSystem.star_total; star_pos = GWSystem.star_pos; - if(BoardCurrGet() == 5) { + if(GWBoardGet() == 5) { s16 i; s32 count; s32 last_free; @@ -504,7 +504,7 @@ s32 BoardSpaceStarCheck(s32 index) s32 ret; BoardSpace *space = BoardSpaceGet(0, index); BoardSpace *star_space; - if(BoardCurrGet() == 7 || BoardCurrGet() == 8) { + if(GWBoardGet() == 7 || GWBoardGet() == 8) { ret = 0; goto end; } @@ -623,7 +623,7 @@ s32 BoardSpaceWalkExec(s32 player, s32 space) return 0; } space_ptr = BoardSpaceGet(0, space); - if(BoardCurrGet() == 7 || BoardCurrGet() == 8) { + if(GWBoardGet() == 7 || GWBoardGet() == 8) { is_star = 0; } else { star_space = BoardSpaceGet(0, boardSpaceStarTbl[GWSystem.star_pos]); @@ -677,10 +677,10 @@ s32 BoardSpaceBlockExec(s32 player, s32 space) if(space == GWSystem.block_pos) { event_exec = 1; } - if((int)GWSystem.bonus_star == 0 && BoardPartyFlagGet() == 1 && !_CheckFlag(FLAG_ID_MAKE(1, 11))) { + if((int)GWSystem.bonus_star == 0 && GWPartyGet() == 1 && !_CheckFlag(FLAG_ID_MAKE(1, 11))) { event_exec = 0; } - if(BoardCurrGet() == 7 || BoardCurrGet() == 8) { + if(GWBoardGet() == 7 || GWBoardGet() == 8) { event_exec = 0; } if(event_exec) { @@ -987,7 +987,7 @@ void BoardSpaceInit(s32 data_num) memset(spaceAttr, 0, sizeof(spaceAttr)); lbl_801D3FC4[0] = lbl_801D3FC4[1] = lbl_801D3FC4[2] = lbl_801D3FC4[3] = -1; spaceDrawF = 0; - board = BoardCurrGet(); + board = GWBoardGet(); { AnimBmpData *bmp; AnimData *data; @@ -1059,7 +1059,7 @@ void BoardSpaceInit(s32 data_num) GWSystem.star_total = 0; GWSystem.star_flag = 0; } - if(BoardCurrGet() != 7 && BoardCurrGet() != 8) { + if(GWBoardGet() != 7 && GWBoardGet() != 8) { starPlatMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 6), NULL, 0); BoardModelMotionStart(starPlatMdl, 0, 0x40000001); BoardModelVisibilitySet(starPlatMdl, 0); From 31ab3ea3cfc95902dd3fdd064f9f22439b4a972d Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 14 Mar 2024 16:44:20 -0500 Subject: [PATCH 078/106] Label rules board code Will label unkw10Dll later --- config/GMPE01_00/rels/w10Dll/splits.txt | 4 +- config/GMPE01_00/rels/w10Dll/symbols.txt | 165 ++++++------ include/REL/w10Dll.h | 164 +++++------- src/REL/w10Dll/host.c | 59 +++-- src/REL/w10Dll/main.c | 222 +++++++++-------- src/REL/w10Dll/scene.c | 304 +++++++++++------------ src/REL/w10Dll/tutorial.c | 155 ++++++------ 7 files changed, 535 insertions(+), 538 deletions(-) diff --git a/config/GMPE01_00/rels/w10Dll/splits.txt b/config/GMPE01_00/rels/w10Dll/splits.txt index d14a396d..c6adc1ab 100644 --- a/config/GMPE01_00/rels/w10Dll/splits.txt +++ b/config/GMPE01_00/rels/w10Dll/splits.txt @@ -14,12 +14,13 @@ REL/w10Dll/main.c: .text start:0x000000E0 end:0x00000AEC .rodata start:0x00000010 end:0x00000038 .data start:0x00000000 end:0x00000078 - .bss start:0x00000000 end:0x00000038 + .bss start:0x00000000 end:0x00000018 REL/w10Dll/host.c: .text start:0x00000AEC end:0x00000D2C .rodata start:0x00000038 end:0x00000048 .data start:0x00000078 end:0x00000098 + .bss start:0x00000018 end:0x00000020 REL/w10Dll/scene.c: .text start:0x00000D2C end:0x00001984 @@ -29,3 +30,4 @@ REL/w10Dll/tutorial.c: .text start:0x00001984 end:0x0000206C .rodata start:0x00000058 end:0x00000070 .data start:0x00000098 end:0x000002D4 + .bss start:0x00000020 end:0x00000038 diff --git a/config/GMPE01_00/rels/w10Dll/symbols.txt b/config/GMPE01_00/rels/w10Dll/symbols.txt index 658188c2..3e5d6e0c 100644 --- a/config/GMPE01_00/rels/w10Dll/symbols.txt +++ b/config/GMPE01_00/rels/w10Dll/symbols.txt @@ -3,66 +3,66 @@ _prolog = .text:0x00000030; // type:function size:0x64 scope:global _epilog = .text:0x00000094; // type:function size:0x4C scope:global BoardCreate = .text:0x000000E0; // type:function size:0x5F8 BoardDestroy = .text:0x000006D8; // type:function size:0x1E8 -fn_1_8C0 = .text:0x000008C0; // type:function size:0x44 -fn_1_904 = .text:0x00000904; // type:function size:0x4 -fn_1_908 = .text:0x00000908; // type:function size:0x4 -fn_1_90C = .text:0x0000090C; // type:function size:0x8 +LightSetHook = .text:0x000008C0; // type:function size:0x44 scope:local +LightResetHook = .text:0x00000904; // type:function size:0x4 scope:local +LandEvent = .text:0x00000908; // type:function size:0x4 scope:local +WalkEvent = .text:0x0000090C; // type:function size:0x8 scope:local fn_1_914 = .text:0x00000914; // type:function size:0x4 fn_1_918 = .text:0x00000918; // type:function size:0x4 -fn_1_91C = .text:0x0000091C; // type:function size:0x4 +WalkMiniEvent = .text:0x0000091C; // type:function size:0x4 scope:local fn_1_920 = .text:0x00000920; // type:function size:0x1CC -fn_1_AEC = .text:0x00000AEC; // type:function size:0xB4 -fn_1_BA0 = .text:0x00000BA0; // type:function size:0x70 -fn_1_C10 = .text:0x00000C10; // type:function size:0x10 -fn_1_C20 = .text:0x00000C20; // type:function size:0x10C -fn_1_D2C = .text:0x00000D2C; // type:function size:0x28 -fn_1_D54 = .text:0x00000D54; // type:function size:0x28 -fn_1_D7C = .text:0x00000D7C; // type:function size:0x28 -fn_1_DA4 = .text:0x00000DA4; // type:function size:0x28 -fn_1_DCC = .text:0x00000DCC; // type:function size:0x28 -fn_1_DF4 = .text:0x00000DF4; // type:function size:0x28 -fn_1_E1C = .text:0x00000E1C; // type:function size:0x28 -fn_1_E44 = .text:0x00000E44; // type:function size:0x50 -fn_1_E94 = .text:0x00000E94; // type:function size:0x28 -fn_1_EBC = .text:0x00000EBC; // type:function size:0x28 -fn_1_EE4 = .text:0x00000EE4; // type:function size:0x4 -fn_1_EE8 = .text:0x00000EE8; // type:function size:0x48 -fn_1_F30 = .text:0x00000F30; // type:function size:0x3C -fn_1_F6C = .text:0x00000F6C; // type:function size:0x4C -fn_1_FB8 = .text:0x00000FB8; // type:function size:0x58 -fn_1_1010 = .text:0x00001010; // type:function size:0x4C -fn_1_105C = .text:0x0000105C; // type:function size:0x3C -fn_1_1098 = .text:0x00001098; // type:function size:0x28 -fn_1_10C0 = .text:0x000010C0; // type:function size:0x38 -fn_1_10F8 = .text:0x000010F8; // type:function size:0x3C -fn_1_1134 = .text:0x00001134; // type:function size:0x44 -fn_1_1178 = .text:0x00001178; // type:function size:0x28 -fn_1_11A0 = .text:0x000011A0; // type:function size:0x4C -fn_1_11EC = .text:0x000011EC; // type:function size:0x54 -fn_1_1240 = .text:0x00001240; // type:function size:0x38 -fn_1_1278 = .text:0x00001278; // type:function size:0x28 -fn_1_12A0 = .text:0x000012A0; // type:function size:0x3C -fn_1_12DC = .text:0x000012DC; // type:function size:0x28 -fn_1_1304 = .text:0x00001304; // type:function size:0x28 -fn_1_132C = .text:0x0000132C; // type:function size:0x28 -fn_1_1354 = .text:0x00001354; // type:function size:0x28 -fn_1_137C = .text:0x0000137C; // type:function size:0x28 -fn_1_13A4 = .text:0x000013A4; // type:function size:0x3C8 -fn_1_176C = .text:0x0000176C; // type:function size:0x30 -fn_1_179C = .text:0x0000179C; // type:function size:0x58 -fn_1_17F4 = .text:0x000017F4; // type:function size:0x40 -fn_1_1834 = .text:0x00001834; // type:function size:0x88 -fn_1_18BC = .text:0x000018BC; // type:function size:0x4C -fn_1_1908 = .text:0x00001908; // type:function size:0x28 -fn_1_1930 = .text:0x00001930; // type:function size:0x28 -fn_1_1958 = .text:0x00001958; // type:function size:0x28 -fn_1_1980 = .text:0x00001980; // type:function size:0x4 -fn_1_1984 = .text:0x00001984; // type:function size:0x128 -fn_1_1AAC = .text:0x00001AAC; // type:function size:0x2BC -fn_1_1D68 = .text:0x00001D68; // type:function size:0x84 -fn_1_1DEC = .text:0x00001DEC; // type:function size:0x50 -fn_1_1E3C = .text:0x00001E3C; // type:function size:0x174 -fn_1_1FB0 = .text:0x00001FB0; // type:function size:0xBC +HostCreate = .text:0x00000AEC; // type:function size:0xB4 +HostWinExec = .text:0x00000BA0; // type:function size:0x70 +HostPosSet = .text:0x00000C10; // type:function size:0x10 +UpdateHost = .text:0x00000C20; // type:function size:0x10C scope:local +TutorialStartExec = .text:0x00000D2C; // type:function size:0x28 +TutorialPreRollExec = .text:0x00000D54; // type:function size:0x28 +TutorialOrderExec = .text:0x00000D7C; // type:function size:0x28 +TutorialP1StartExec = .text:0x00000DA4; // type:function size:0x28 +TutorialP2StartExec = .text:0x00000DCC; // type:function size:0x28 +TutorialP3StartExec = .text:0x00000DF4; // type:function size:0x28 +TutorialP4StartExec = .text:0x00000E1C; // type:function size:0x28 +TutorialGameStartExec = .text:0x00000E44; // type:function size:0x50 +TutorialRollExec = .text:0x00000E94; // type:function size:0x28 +TutorialMoveExec = .text:0x00000EBC; // type:function size:0x28 +TutorialLandExec = .text:0x00000EE4; // type:function size:0x4 +TutorialLandBlueExec = .text:0x00000EE8; // type:function size:0x48 +TutorialLandRedExec = .text:0x00000F30; // type:function size:0x3C +TutorialLandHappenExec = .text:0x00000F6C; // type:function size:0x4C +TutorialLandFortuneExec = .text:0x00000FB8; // type:function size:0x58 +TutorialLandBowserExec = .text:0x00001010; // type:function size:0x4C +TutorialLandMushroomExec = .text:0x0000105C; // type:function size:0x3C +TutorialMushroomMegaExec = .text:0x00001098; // type:function size:0x28 +TutorialMushroomMiniExec = .text:0x000010C0; // type:function size:0x38 +TutorialLandBattleExec = .text:0x000010F8; // type:function size:0x3C +TutorialLandWarpExec = .text:0x00001134; // type:function size:0x44 +TutorialWarpDecideExec = .text:0x00001178; // type:function size:0x28 +TutorialBlockStarExec = .text:0x000011A0; // type:function size:0x4C +TutorialBlockCoinExec = .text:0x000011EC; // type:function size:0x54 +TutorialMiniMegaExec = .text:0x00001240; // type:function size:0x38 +TutorialMiniUseExec = .text:0x00001278; // type:function size:0x28 +TutorialMiniStopExec = .text:0x000012A0; // type:function size:0x3C +TutorialMegaUseExec = .text:0x000012DC; // type:function size:0x28 +TutorialMegaDiceExec = .text:0x00001304; // type:function size:0x28 +TutorialMegaStompExec = .text:0x0000132C; // type:function size:0x28 +TutorialMegaEventExec = .text:0x00001354; // type:function size:0x28 +TutorialMegaStopExec = .text:0x0000137C; // type:function size:0x28 +TutorialEndExec = .text:0x000013A4; // type:function size:0x3C8 +TutorialMGStatusExec = .text:0x0000176C; // type:function size:0x30 +TutorialMG4PExec = .text:0x0000179C; // type:function size:0x58 +TutorialMG2Vs2Exec = .text:0x000017F4; // type:function size:0x40 +TutorialMG1Vs3Exec = .text:0x00001834; // type:function size:0x88 +TutorialMG1Vs3AltExec = .text:0x000018BC; // type:function size:0x4C +TutorialShopExec = .text:0x00001908; // type:function size:0x28 +TutorialLotteryExec = .text:0x00001930; // type:function size:0x28 +TutorialBooHouseExec = .text:0x00001958; // type:function size:0x28 +TutorialNullExec = .text:0x00001980; // type:function size:0x4 +CloseTutorial = .text:0x00001984; // type:function size:0x128 scope:local +TutorialExec = .text:0x00001AAC; // type:function size:0x2BC +TutorialSprCreate = .text:0x00001D68; // type:function size:0x84 +TutorialSprKill = .text:0x00001DEC; // type:function size:0x50 +TutorialSpaceShow = .text:0x00001E3C; // type:function size:0x174 +TutorialSpaceHide = .text:0x00001FB0; // type:function size:0xBC _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float @@ -85,31 +85,32 @@ lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:f lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 scope:local data:double lbl_1_data_0 = .data:0x00000000; // type:object size:0x28 data:float -lbl_1_data_28 = .data:0x00000028; // type:object size:0x2 data:2byte -lbl_1_data_2A = .data:0x0000002A; // type:object size:0x2 data:2byte -lbl_1_data_2C = .data:0x0000002C; // type:object size:0x2 data:2byte -lbl_1_data_2E = .data:0x0000002E; // type:object size:0x2 data:2byte -lbl_1_data_30 = .data:0x00000030; // type:object size:0x2 data:2byte -lbl_1_data_32 = .data:0x00000032; // type:object size:0x22 data:2byte -lbl_1_data_54 = .data:0x00000054; // type:object size:0x8 -lbl_1_data_5C = .data:0x0000005C; // type:object size:0x8 -lbl_1_data_64 = .data:0x00000064; // type:object size:0x8 -lbl_1_data_6C = .data:0x0000006C; // type:object size:0xC -lbl_1_data_78 = .data:0x00000078; // type:object size:0x8 -lbl_1_data_80 = .data:0x00000080; // type:object size:0x18 data:float -lbl_1_data_98 = .data:0x00000098; // type:object size:0x2E data:string -lbl_1_data_C6 = .data:0x000000C6; // type:object size:0x42 -lbl_1_data_108 = .data:0x00000108; // type:object size:0x150 -lbl_1_data_258 = .data:0x00000258; // type:object size:0x50 data:string -lbl_1_data_2A8 = .data:0x000002A8; // type:object size:0x2C -lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte +bgMdl = .data:0x00000028; // type:object size:0x2 scope:local data:2byte +fgMdl = .data:0x0000002A; // type:object size:0x2 scope:local data:2byte +boardStarHostMdl = .data:0x0000002C; // type:object size:0x2 data:2byte +boardShopHostMdl = .data:0x0000002E; // type:object size:0x2 data:2byte +boardLotteryHostMdl = .data:0x00000030; // type:object size:0x2 data:2byte +boardBooHouseHostMdl = .data:0x00000032; // type:object size:0x2 data:2byte +lbl_1_data_34 = .data:0x00000034; // type:object size:0x20 data:4byte +starHostMot = .data:0x00000054; // type:object size:0x8 scope:local +shopHostMot = .data:0x0000005C; // type:object size:0x8 scope:local +lotteryHostMot = .data:0x00000064; // type:object size:0x8 scope:local +booHouseHostMot = .data:0x0000006C; // type:object size:0x8 scope:local +hostMot = .data:0x00000078; // type:object size:0x8 scope:local +hostPosTbl = .data:0x00000080; // type:object size:0x18 scope:local data:float +lbl_1_data_98 = .data:0x00000098; // type:object size:0x2E scope:local data:string +rollDataTbl = .data:0x000000C6; // type:object size:0x42 scope:local +sceneTbl = .data:0x00000108; // type:object size:0x150 scope:local +lbl_1_data_258 = .data:0x00000258; // type:object size:0x50 scope:local data:string +tutorialSprTbl = .data:0x000002A8; // type:object size:0x2C scope:local +boardWork = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte -lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x2 data:2byte -lbl_1_bss_E = .bss:0x0000000E; // type:object size:0x2 data:2byte +tutorialDoneF = .bss:0x0000000C; // type:object size:0x2 data:2byte +w10ExitWin = .bss:0x0000000E; // type:object size:0x2 data:2byte lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x8 data:2byte -lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte -lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x2 data:2byte -lbl_1_bss_1E = .bss:0x0000001E; // type:object size:0x2 data:2byte -lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x2 data:2byte -lbl_1_bss_22 = .bss:0x00000022; // type:object size:0x16 +hostProc = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte +hostPos = .bss:0x0000001C; // type:object size:0x2 scope:local data:2byte +hostMdl = .bss:0x0000001E; // type:object size:0x2 scope:local data:2byte +sprCurr = .bss:0x00000020; // type:object size:0x2 scope:local data:2byte +sprList = .bss:0x00000022; // type:object size:0x16 scope:local diff --git a/include/REL/w10Dll.h b/include/REL/w10Dll.h index d1bc4999..5d392272 100644 --- a/include/REL/w10Dll.h +++ b/include/REL/w10Dll.h @@ -8,12 +8,12 @@ #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) -typedef struct w10_state { -/* 0x00 */ s32 unk0; -/* 0x04 */ u16 unk4; -/* 0x06 */ u16 unk6; -/* 0x08 */ s16 unk8; -} W10State; +typedef struct w10_board_work { +/* 0x00 */ s32 scene; +/* 0x04 */ u16 dice; +/* 0x06 */ u16 msg; +/* 0x08 */ s16 focus_mdl; +} W10BoardWork; typedef struct unkw10Dll { Vec unk0; @@ -22,104 +22,76 @@ typedef struct unkw10Dll { s32 unk24; } unkw10Dll; //sizeof 0x28 -typedef struct w10DllUnk01 { - u8 unk0; - f32 unk4; - f32 unk8; - f32 unkC; - f32 unk10; -} w10DllUnk01; //sizeof ? +typedef void (*TutorialSceneFunc)(void); -typedef struct w10DllUnk04 { - s16 unk0; - s16 unk2; - void (*unk4)(); -} w10DllUnk04; +typedef struct tutorial_scene { + s16 cue; + TutorialSceneFunc func; +} TutorialScene; -extern s16 lbl_1_bss_20; -extern s16 lbl_1_bss_22[]; -extern s16 lbl_1_bss_20; extern s32 boardTutorialData[4]; -void fn_1_C10(s16); +void HostPosSet(s16); void fn_1_1FB0(void); void fn_1_1E3C(s16, s16, s16); -void fn_1_BA0(s32); -void fn_1_C20(void); +void HostWinExec(s32); void fn_1_6D8(void); void fn_1_E0(void); -void fn_1_1D68(void); -void fn_1_1DEC(void); -void fn_1_AEC(void); -int fn_1_1AAC(s16, s32); -void fn_1_8C0(void); -void fn_1_904(void); -void fn_1_908(void); -s32 fn_1_90C(void); -void fn_1_91C(void); -void fn_1_13A4(void); -void fn_1_176C(void); -void fn_1_179C(void); -void fn_1_17F4(void); -void fn_1_1834(void); -void fn_1_18BC(void); -void fn_1_1908(void); -void fn_1_1930(void); -void fn_1_1958(void); -void fn_1_D2C(void); -void fn_1_D54(void); -void fn_1_D7C(void); -void fn_1_DA4(void); -void fn_1_DCC(void); -void fn_1_DF4(void); -void fn_1_E1C(void); -void fn_1_E44(void); -void fn_1_E94(void); -void fn_1_EBC(void); -void fn_1_EE4(void); -void fn_1_EE8(void); -void fn_1_F30(void); -void fn_1_F6C(void); -void fn_1_FB8(void); -void fn_1_1010(void); -void fn_1_105C(void); -void fn_1_1098(void); -void fn_1_10C0(void); -void fn_1_10F8(void); -void fn_1_1134(void); -void fn_1_1178(void); -void fn_1_11A0(void); -void fn_1_11EC(void); -void fn_1_1240(void); -void fn_1_1278(void); -void fn_1_12A0(void); -void fn_1_12DC(void); -void fn_1_1304(void); -void fn_1_132C(void); -void fn_1_1354(void); -void fn_1_137C(void); +void TutorialSprCreate(void); +void TutorialSprKill(void); +void HostCreate(void); +int TutorialExec(s16, s32); -extern w10DllUnk04 lbl_1_data_108[42]; -extern Vec lbl_1_data_80[]; -extern Process* lbl_1_bss_18; -extern s16 lbl_1_bss_1C; -extern s16 lbl_1_bss_1E; -extern s32 lbl_1_data_78[2]; -extern W10State* lbl_1_bss_0; -extern s16 lbl_1_bss_10[4]; //could be incorrect size +void TutorialStartExec(void); +void TutorialPreRollExec(void); +void TutorialOrderExec(void); +void TutorialP1StartExec(void); +void TutorialP2StartExec(void); +void TutorialP3StartExec(void); +void TutorialP4StartExec(void); +void TutorialGameStartExec(void); +void TutorialRollExec(void); +void TutorialMoveExec(void); +void TutorialLandExec(void); +void TutorialLandBlueExec(void); +void TutorialLandRedExec(void); +void TutorialLandHappenExec(void); +void TutorialLandFortuneExec(void); +void TutorialLandBowserExec(void); +void TutorialLandMushroomExec(void); +void TutorialMushroomMegaExec(void); +void TutorialMushroomMiniExec(void); +void TutorialLandBattleExec(void); +void TutorialLandWarpExec(void); +void TutorialWarpDecideExec(void); +void TutorialBlockStarExec(void); +void TutorialBlockCoinExec(void); +void TutorialMiniMegaExec(void); +void TutorialMiniUseExec(void); +void TutorialMiniStopExec(void); +void TutorialMegaUseExec(void); +void TutorialMegaDiceExec(void); +void TutorialMegaStompExec(void); +void TutorialMegaEventExec(void); +void TutorialMegaStopExec(void); +void TutorialEndExec(void); +void TutorialMGStatusExec(void); +void TutorialMG4PExec(void); +void TutorialMG2Vs2Exec(void); +void TutorialMG1Vs3Exec(void); +void TutorialMG1Vs3AltExec(void); +void TutorialShopExec(void); +void TutorialLotteryExec(void); +void TutorialBooHouseExec(void); + +extern W10BoardWork *boardWork; +extern s16 lbl_1_bss_10[1]; extern void* lbl_1_bss_8; //unknown type -extern s16 lbl_1_bss_C; -extern s16 lbl_1_bss_E; +extern s16 tutorialDoneF; +extern s16 w10ExitWin; extern unkw10Dll lbl_1_data_0[1]; -extern s16 lbl_1_bss_22[11]; -extern s32 lbl_1_data_2A8[11]; -extern s16 lbl_1_data_28; -extern s16 lbl_1_data_2A; -extern s16 lbl_1_data_2C; -extern s16 lbl_1_data_2E; -extern s16 lbl_1_data_30; -extern s16 lbl_1_data_32; -extern s32 lbl_1_data_54[2]; -extern s32 lbl_1_data_5C[2]; -extern s32 lbl_1_data_64[2]; -extern s32 lbl_1_data_6C[2]; \ No newline at end of file + +extern s16 boardStarHostMdl; +extern s16 boardShopHostMdl; +extern s16 boardLotteryHostMdl; +extern s16 boardBooHouseHostMdl; \ No newline at end of file diff --git a/src/REL/w10Dll/host.c b/src/REL/w10Dll/host.c index 275264d2..8fb2d502 100644 --- a/src/REL/w10Dll/host.c +++ b/src/REL/w10Dll/host.c @@ -4,63 +4,70 @@ #include "game/board/tutorial.h" #include "game/board/window.h" -s32 lbl_1_data_78[2] = { +static s16 hostMdl; +static s16 hostPos; +static Process *hostProc; + +static s32 hostMot[2] = { DATA_MAKE_NUM(DATADIR_W10, 16), -1 }; -Vec lbl_1_data_80[2] = { +static Vec hostPosTbl[2] = { {70.0f, 355.0f, 200.f}, {70.0f, 175.0f, 200.f}, }; -void fn_1_AEC(void) { - lbl_1_bss_1C = 0; - lbl_1_bss_1E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 15), lbl_1_data_78, 0); - BoardModelMotionStart(lbl_1_bss_1E, 1, 0x40000001); - BoardTutorialHostSet(lbl_1_bss_1E); - BoardModelLayerSet(lbl_1_bss_1E, 6); - lbl_1_bss_18 = HuPrcCreate(fn_1_C20, 0x1FFF, 0x1800, 0); +static void UpdateHost(void); + + +void HostCreate(void) { + hostPos = 0; + hostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 15), hostMot, 0); + BoardModelMotionStart(hostMdl, 1, 0x40000001); + BoardTutorialHostSet(hostMdl); + BoardModelLayerSet(hostMdl, 6); + hostProc = HuPrcCreate(UpdateHost, 0x1FFF, 0x1800, 0); } -void fn_1_BA0(s32 arg0) { - s16 var_r31; +void HostWinExec(s32 arg0) { + s16 pos; - switch (lbl_1_bss_1C) { + switch (hostPos) { case 0: - var_r31 = 5; + pos = 5; break; case 1: - var_r31 = 6; + pos = 6; break; } - BoardWinCreate(var_r31, arg0, -1); + BoardWinCreate(pos, arg0, -1); BoardWinWait(); BoardWinKill(); } -void fn_1_C10(s16 arg0) { - lbl_1_bss_1C = arg0; +void HostPosSet(s16 arg0) { + hostPos = arg0; } -void fn_1_C20(void) { - Mtx sp20; +void UpdateHost(void) { + Mtx rot; Vec sp14; Vec sp8; while (1) { if (BoardIsKill() != 0) { - BoardModelKill(lbl_1_bss_1E); + BoardModelKill(hostMdl); BoardTutorialHostSet(-1); HuPrcEnd(); } - Hu3D2Dto3D(&lbl_1_data_80[lbl_1_bss_1C], 1, &sp14); - BoardModelPosSetV(lbl_1_bss_1E, &sp14); + Hu3D2Dto3D(&hostPosTbl[hostPos], 1, &sp14); + BoardModelPosSetV(hostMdl, &sp14); BoardCameraRotGet(&sp8); - PSMTXRotRad(sp20, 'y', 0.2617994f); - BoardModelMtxSet(lbl_1_bss_1E, &sp20); - BoardModelRotSet(lbl_1_bss_1E, sp8.x, 0.0f, 0.0f); - BoardModelScaleSet(lbl_1_bss_1E, 0.2f, 0.2f, 0.2f); + PSMTXRotRad(rot, 'y', 0.2617994f); + BoardModelMtxSet(hostMdl, &rot); + BoardModelRotSet(hostMdl, sp8.x, 0.0f, 0.0f); + BoardModelScaleSet(hostMdl, 0.2f, 0.2f, 0.2f); HuPrcVSleep(); } } \ No newline at end of file diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index 39afd789..2694972c 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -12,17 +12,12 @@ #include "math.h" //BSS -s16 lbl_1_bss_22[11]; -s16 lbl_1_bss_20; -s16 lbl_1_bss_1E; -s16 lbl_1_bss_1C; -Process* lbl_1_bss_18; -s16 lbl_1_bss_10[4]; -s16 lbl_1_bss_E; -s16 lbl_1_bss_C; +s16 lbl_1_bss_10[1]; +s16 w10ExitWin; +s16 tutorialDoneF; void* lbl_1_bss_8; -s32 lbl_1_bss_4_pad; -W10State* lbl_1_bss_0; +s32 lbl_1_bss_4; +W10BoardWork *boardWork; //DATA unkw10Dll lbl_1_data_0[1] = { @@ -33,82 +28,88 @@ unkw10Dll lbl_1_data_0[1] = { }; -s16 lbl_1_data_28 = -1; -s16 lbl_1_data_2A = -1; -s16 lbl_1_data_2C = -1; -s16 lbl_1_data_2E = -1; -s16 lbl_1_data_30 = -1; -s16 lbl_1_data_32 = -1; +static s16 bgMdl = -1; +static s16 fgMdl = -1; +s16 boardStarHostMdl = -1; +s16 boardShopHostMdl = -1; +s16 boardLotteryHostMdl = -1; +s16 boardBooHouseHostMdl = -1; //unused? s32 lbl_1_data_34[] = { -0x005F0000, 0x001A0000, -0x006D0000, 0x008A0000, -0x00850000, 0x00110000, -0x000D0000, 0x00810000, + DATADIR_MARIOMOT, DATADIR_LUIGIMOT, + DATADIR_PEACHMOT, DATADIR_YOSHIMOT, + DATADIR_WARIOMOT, DATADIR_DONKEYMOT, + DATADIR_DAISYMOT, DATADIR_WALUIGIMOT, }; -s32 lbl_1_data_54[2] = { +static s32 starHostMot[2] = { DATA_MAKE_NUM(DATADIR_W10, 18), DATA_NUM_LISTEND }; -s32 lbl_1_data_5C[2] = { +static s32 shopHostMot[2] = { DATA_MAKE_NUM(DATADIR_BGUEST, 9), DATA_NUM_LISTEND }; -s32 lbl_1_data_64[2] = { +static s32 lotteryHostMot[2] = { DATA_MAKE_NUM(DATADIR_BGUEST, 24), DATA_NUM_LISTEND }; -s32 lbl_1_data_6C[2] = { +static s32 booHouseHostMot[2] = { DATA_MAKE_NUM(DATADIR_BGUEST, 14), DATA_NUM_LISTEND }; -void BoardCreate(void) { - f32 sp10; - f32 spC[2]; - s32 sp8; +static void LightSetHook(void); +static void LightResetHook(void); +static s32 WalkEvent(void); +static s32 WalkMiniEvent(void); +static s32 LandEvent(void); + + +void BoardCreate(void) +{ + float size[2]; s32 i; unkw10Dll* temp_r30; - s32 temp; + s32 space; s32 board; board = GWBoardGet(); - lbl_1_bss_0 = (W10State *)&GWSystem.board_data; - lbl_1_bss_0->unk0 = 0; - lbl_1_bss_0->unk4 = 0; - lbl_1_bss_0->unk6 = 0; - BoardTutorialHookSet(&fn_1_1AAC); - fn_1_AEC(); - fn_1_1D68(); - lbl_1_bss_C = 0; + boardWork = (W10BoardWork *)&GWSystem.board_data[0]; + boardWork->scene = 0; + boardWork->dice = 0; + boardWork->msg = 0; + BoardTutorialHookSet(&TutorialExec); + HostCreate(); + TutorialSprCreate(); + tutorialDoneF = 0; BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W10, 0)); - temp = BoardSpaceFlagSearch(0, 1); - BoardTutorialBlockSetPos(temp, 1); - lbl_1_data_28 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 1), NULL, 0); - fn_8006DDE8(lbl_1_data_28, -1.0f); - BoardModelPosSet(lbl_1_data_28, 0.0f, 0.0f, 0.0f); - BoardModelMotionStart(lbl_1_data_28, 0, 0x40000001); - BoardModelMotionSpeedSet(lbl_1_data_28, 1.0f); - lbl_1_data_2A = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 2), NULL, 0); - fn_8006DDE8(lbl_1_data_2A, -1.0f); - BoardModelPosSet(lbl_1_data_2A, 0.0f, 0.0f, 0.0f); - BoardModelMotionStart(lbl_1_data_2A, 0, 0x40000001); - lbl_1_data_2C = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 17), lbl_1_data_54, 0); - BoardModelPosSet(lbl_1_data_2C, 0.0f, 0.0f, 0.0f); - BoardModelMotionStart(lbl_1_data_2C, 1, 0x40000001); - lbl_1_data_2E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 5), lbl_1_data_5C, 0); - BoardModelMotionStart(lbl_1_data_2E, 1, 0x40000001); - lbl_1_data_32 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 18), lbl_1_data_64, 0); - BoardModelMotionStart(lbl_1_data_32, 1, 0x40000001); - lbl_1_data_30 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 13), lbl_1_data_6C, 0); - BoardModelMotionStart(lbl_1_data_30, 1, 0x40000001); - BoardLightHookSet(&fn_1_8C0, &fn_1_904); + space = BoardSpaceFlagSearch(0, 1); + BoardTutorialBlockSetPos(space, 1); + bgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 1), NULL, 0); + fn_8006DDE8(bgMdl, -1.0f); + BoardModelPosSet(bgMdl, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(bgMdl, 0, 0x40000001); + BoardModelMotionSpeedSet(bgMdl, 1.0f); + fgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 2), NULL, 0); + fn_8006DDE8(fgMdl, -1.0f); + BoardModelPosSet(fgMdl, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(fgMdl, 0, 0x40000001); + boardStarHostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W10, 17), starHostMot, 0); + BoardModelPosSet(boardStarHostMdl, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(boardStarHostMdl, 1, 0x40000001); + boardShopHostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 5), shopHostMot, 0); + BoardModelMotionStart(boardShopHostMdl, 1, 0x40000001); + boardBooHouseHostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 18), lotteryHostMot, 0); + BoardModelMotionStart(boardBooHouseHostMdl, 1, 0x40000001); + boardLotteryHostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 13), booHouseHostMot, 0); + BoardModelMotionStart(boardLotteryHostMdl, 1, 0x40000001); + BoardLightHookSet(LightSetHook, LightResetHook); for (i = 0; i < ARRAY_COUNT(lbl_1_data_0); i++) { temp_r30 = &lbl_1_data_0[i]; if (temp_r30->unk24 != -1) { @@ -124,24 +125,25 @@ void BoardCreate(void) { } } BoardModelVisibilitySet(lbl_1_bss_10[0], 0); - lbl_1_bss_0->unk8 = BoardModelCreate(0x7000A, NULL, 0); - BoardModelVisibilitySet(lbl_1_bss_0->unk8, 0); - BoardSpaceWalkEventFuncSet((void*)&fn_1_90C); - BoardSpaceWalkMiniEventFuncSet((void*)&fn_1_91C); - BoardSpaceLandEventFuncSet((void*)&fn_1_908); - BoardStarHostSet(lbl_1_data_2C); - BoardBooHouseHostSet(lbl_1_data_32); - BoardShopHostSet(lbl_1_data_2E); - BoardLotteryHostSet(lbl_1_data_30); - HuWinMesMaxSizeGet(1, spC, 0x2E003A); - lbl_1_bss_E = HuWinCreate(-10000.0f, 390.0f, spC[0], spC[1], 1); - HuWinMesSet(lbl_1_bss_E, 0x2E003A); - HuWinMesSpeedSet(lbl_1_bss_E, 0); - HuWinPriSet(lbl_1_bss_E, 1); - HuWinMesPalSet(lbl_1_bss_E, 7, 0, 0, 0); + boardWork->focus_mdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 0); + BoardModelVisibilitySet(boardWork->focus_mdl, 0); + BoardSpaceWalkEventFuncSet(WalkEvent); + BoardSpaceWalkMiniEventFuncSet(WalkMiniEvent); + BoardSpaceLandEventFuncSet(LandEvent); + BoardStarHostSet(boardStarHostMdl); + BoardBooHouseHostSet(boardBooHouseHostMdl); + BoardShopHostSet(boardShopHostMdl); + BoardLotteryHostSet(boardLotteryHostMdl); + HuWinMesMaxSizeGet(1, size, 0x2E003A); + w10ExitWin = HuWinCreate(-10000.0f, 390.0f, size[0], size[1], 1); + HuWinMesSet(w10ExitWin, 0x2E003A); + HuWinMesSpeedSet(w10ExitWin, 0); + HuWinPriSet(w10ExitWin, 1); + HuWinMesPalSet(w10ExitWin, 7, 0, 0, 0); } -void BoardDestroy(void) { +void BoardDestroy(void) +{ s32 i; for (i = 0; i < 1; i++) { if (lbl_1_bss_10[i] != 0) { @@ -149,58 +151,70 @@ void BoardDestroy(void) { lbl_1_bss_10[i] = 0; } } - if (lbl_1_data_32 != -1) { - BoardModelKill(lbl_1_data_32); - lbl_1_data_32 = -1; + if (boardBooHouseHostMdl != -1) { + BoardModelKill(boardBooHouseHostMdl); + boardBooHouseHostMdl = -1; } - if (lbl_1_data_2E != -1) { - BoardModelKill(lbl_1_data_2E); - lbl_1_data_2E = -1; + if (boardShopHostMdl != -1) { + BoardModelKill(boardShopHostMdl); + boardShopHostMdl = -1; } - if (lbl_1_data_30 != -1) { - BoardModelKill(lbl_1_data_30); - lbl_1_data_30 = -1; + if (boardLotteryHostMdl != -1) { + BoardModelKill(boardLotteryHostMdl); + boardLotteryHostMdl = -1; } - if (lbl_1_data_2C != -1) { - BoardModelKill(lbl_1_data_2C); - lbl_1_data_2C = -1; + if (boardStarHostMdl != -1) { + BoardModelKill(boardStarHostMdl); + boardStarHostMdl = -1; } - if (lbl_1_data_28 != -1) { - BoardModelKill(lbl_1_data_28); - lbl_1_data_28 = -1; + if (bgMdl != -1) { + BoardModelKill(bgMdl); + bgMdl = -1; } - if (lbl_1_data_2A != -1) { - BoardModelKill(lbl_1_data_2A); - lbl_1_data_2A = -1; + if (fgMdl != -1) { + BoardModelKill(fgMdl); + fgMdl = -1; } - BoardModelKill(lbl_1_bss_0->unk8); - fn_1_1DEC(); - HuWinKill(lbl_1_bss_E); + BoardModelKill(boardWork->focus_mdl); + TutorialSprKill(); + HuWinKill(w10ExitWin); BoardSpaceDestroy(); } -void fn_1_8C0(void) { - s16 temp = BoardModelIDGet(lbl_1_data_28); - Hu3DModelLightInfoSet(temp, 1); +static void LightSetHook(void) +{ + s16 id = BoardModelIDGet(bgMdl); + Hu3DModelLightInfoSet(id, 1); } -void fn_1_904(void) { +static void LightResetHook(void) +{ + } -void fn_1_908(void) { +static s32 LandEvent(void) +{ + } -s32 fn_1_90C(void) { +static s32 WalkEvent(void) +{ return 0; } -void fn_1_914(void) { +void fn_1_914(void) +{ + } -void fn_1_918(void) { +void fn_1_918(void) +{ + } -void fn_1_91C(void) { +static s32 WalkMiniEvent(void) +{ + } s32 fn_1_920(s16 arg0, f32 arg8, f32 arg9) { diff --git a/src/REL/w10Dll/scene.c b/src/REL/w10Dll/scene.c index 4a0ac9fd..567249e6 100644 --- a/src/REL/w10Dll/scene.c +++ b/src/REL/w10Dll/scene.c @@ -9,233 +9,233 @@ #include "game/board/tutorial.h" #include "game/board/ui.h" -void fn_1_D2C(void) { - fn_1_BA0(0x2E0001); +void TutorialStartExec(void) { + HostWinExec(0x2E0001); } -void fn_1_D54(void) { - fn_1_BA0(0x2E0002); +void TutorialPreRollExec(void) { + HostWinExec(0x2E0002); } -void fn_1_D7C(void) { - fn_1_BA0(0x2E0003); +void TutorialOrderExec(void) { + HostWinExec(0x2E0003); } -void fn_1_DA4(void) { - fn_1_BA0(0x2E0004); +void TutorialP1StartExec(void) { + HostWinExec(0x2E0004); } -void fn_1_DCC(void) { - fn_1_BA0(0x2E0005); +void TutorialP2StartExec(void) { + HostWinExec(0x2E0005); } -void fn_1_DF4(void) { - fn_1_BA0(0x2E0006); +void TutorialP3StartExec(void) { + HostWinExec(0x2E0006); } -void fn_1_E1C(void) { - fn_1_BA0(0x2E0007); +void TutorialP4StartExec(void) { + HostWinExec(0x2E0007); } -void fn_1_E44(void) { - fn_1_BA0(0x2E0008); - fn_1_BA0(0x2E0009); +void TutorialGameStartExec(void) { + HostWinExec(0x2E0008); + HostWinExec(0x2E0009); BoardSpaceStarSetIndex(0); - BoardModelVisibilitySet(lbl_1_data_2C, 1); + BoardModelVisibilitySet(boardStarHostMdl, 1); } -void fn_1_E94(void) { - fn_1_BA0(0x2E000A); +void TutorialRollExec(void) { + HostWinExec(0x2E000A); } -void fn_1_EBC(void) { - fn_1_BA0(0x2E000B); +void TutorialMoveExec(void) { + HostWinExec(0x2E000B); } -void fn_1_EE4(void) { +void TutorialLandExec(void) { } -void fn_1_EE8(void) { - fn_1_1E3C(0, 0x122, 0x8C); - fn_1_BA0(0x2E000C); - fn_1_BA0(0x2E000D); - fn_1_1FB0(); +void TutorialLandBlueExec(void) { + TutorialSpaceShow(0, 0x122, 0x8C); + HostWinExec(0x2E000C); + HostWinExec(0x2E000D); + TutorialSpaceHide(); } -void fn_1_F30(void) { - fn_1_1E3C(1, 0x122, 0x8C); - fn_1_BA0(0x2E000E); - fn_1_1FB0(); +void TutorialLandRedExec(void) { + TutorialSpaceShow(1, 0x122, 0x8C); + HostWinExec(0x2E000E); + TutorialSpaceHide(); } -void fn_1_F6C(void) { - fn_1_1E3C(2, 0x122, 0x8C); - fn_1_BA0(0x2E000F); - fn_1_1FB0(); +void TutorialLandHappenExec(void) { + TutorialSpaceShow(2, 0x122, 0x8C); + HostWinExec(0x2E000F); + TutorialSpaceHide(); BoardTutorialDirInputSet(0, 0x50, 1); } -void fn_1_FB8(void) { - fn_1_1E3C(3, 0x122, 0x8C); - fn_1_BA0(0x2E0010); - fn_1_1FB0(); - fn_1_BA0(0x2E0011); +void TutorialLandFortuneExec(void) { + TutorialSpaceShow(3, 0x122, 0x8C); + HostWinExec(0x2E0010); + TutorialSpaceHide(); + HostWinExec(0x2E0011); BoardTutorialDirInputSet(-0x50, 0, 1); } -void fn_1_1010(void) { - fn_1_1E3C(4, 0x122, 0x8C); - fn_1_BA0(0x2E0012); - fn_1_1FB0(); +void TutorialLandBowserExec(void) { + TutorialSpaceShow(4, 0x122, 0x8C); + HostWinExec(0x2E0012); + TutorialSpaceHide(); BoardTutorialDirInputSet(0, 0x50, 1); } -void fn_1_105C(void) { - fn_1_1E3C(5, 0x122, 0x8C); - fn_1_BA0(0x2E0013); - fn_1_1FB0(); +void TutorialLandMushroomExec(void) { + TutorialSpaceShow(5, 0x122, 0x8C); + HostWinExec(0x2E0013); + TutorialSpaceHide(); } -void fn_1_1098(void) { - fn_1_BA0(0x2E0014); +void TutorialMushroomMegaExec(void) { + HostWinExec(0x2E0014); } -void fn_1_10C0(void) { - fn_1_BA0(0x2E0015); +void TutorialMushroomMiniExec(void) { + HostWinExec(0x2E0015); BoardTutorialDirInputSet(-0x50, 0, 1); } -void fn_1_10F8(void) { - fn_1_1E3C(6, 0x122, 0x8C); - fn_1_BA0(0x2E0016); - fn_1_1FB0(); +void TutorialLandBattleExec(void) { + TutorialSpaceShow(6, 0x122, 0x8C); + HostWinExec(0x2E0016); + TutorialSpaceHide(); } -void fn_1_1134(void) { - fn_1_1E3C(7, 0x122, 0x8C); - fn_1_BA0(0x2E0017); - fn_1_1FB0(); +void TutorialLandWarpExec(void) { + TutorialSpaceShow(7, 0x122, 0x8C); + HostWinExec(0x2E0017); + TutorialSpaceHide(); BoardCharWheelTargetSet(1); } -void fn_1_1178(void) { - fn_1_BA0(0x2E0018); +void TutorialWarpDecideExec(void) { + HostWinExec(0x2E0018); } -void fn_1_11A0(void) { - s32 temp; +void TutorialBlockStarExec(void) { + s32 space; - fn_1_BA0(0x2E0019); - temp = BoardSpaceFlagSearch(0, 1); - BoardTutorialBlockSetPos(temp, 0); + HostWinExec(0x2E0019); + space = BoardSpaceFlagSearch(0, 1); + BoardTutorialBlockSetPos(space, 0); } -void fn_1_11EC(void) { - s32 temp; +void TutorialBlockCoinExec(void) { + s32 space; - fn_1_BA0(0x2E001A); - temp = BoardSpaceFlagSearch(0, 1); - BoardTutorialBlockSetPos(temp, 0); + HostWinExec(0x2E001A); + space = BoardSpaceFlagSearch(0, 1); + BoardTutorialBlockSetPos(space, 0); BoardTutorialItemSet(0); } -void fn_1_1240(void) { - fn_1_BA0(0x2E001B); +void TutorialMiniMegaExec(void) { + HostWinExec(0x2E001B); BoardTutorialDirInputSet(0x50, 0, 1); } -void fn_1_1278(void) { - fn_1_BA0(0x2E001C); +void TutorialMiniUseExec(void) { + HostWinExec(0x2E001C); } -void fn_1_12A0(void) { - fn_1_BA0(0x2E001D); +void TutorialMiniStopExec(void) { + HostWinExec(0x2E001D); BoardPlayerItemAdd(2, 1); BoardTutorialItemSet(1); } -void fn_1_12DC(void) { - fn_1_BA0(0x2E001E); +void TutorialMegaUseExec(void) { + HostWinExec(0x2E001E); } -void fn_1_1304(void) { - fn_1_BA0(0x2E001F); +void TutorialMegaDiceExec(void) { + HostWinExec(0x2E001F); } -void fn_1_132C(void) { - fn_1_BA0(0x2E0020); +void TutorialMegaStompExec(void) { + HostWinExec(0x2E0020); } -void fn_1_1354(void) { - fn_1_BA0(0x2E0021); +void TutorialMegaEventExec(void) { + HostWinExec(0x2E0021); } -void fn_1_137C(void) { - fn_1_BA0(0x2E0022); +void TutorialMegaStopExec(void) { + HostWinExec(0x2E0022); } -void fn_1_13A4(void) { +void TutorialEndExec(void) { s32 i; - Vec sp14; - Vec sp8; - s32 temp_r3_2; + Vec pos; + Vec offset; + s32 space; - fn_1_BA0(0x2E0023); + HostWinExec(0x2E0023); for (i = 0; i < 4; i++) { GWPlayer[i].color = 1; } BoardMGSetupTutorialExec(); BoardStatusShowSetAll(0); - fn_1_C10(0); - fn_1_BA0(0x2E002B); - sp8.x = -33.0f; - sp8.y = sp8.z = 0.0f; - temp_r3_2 = BoardSpaceFlagSearch(0, 0x80000); - BoardSpacePosGet(0, temp_r3_2, &sp14); - BoardModelPosSetV(lbl_1_bss_0->unk8, &sp14); - BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30); + HostPosSet(0); + HostWinExec(0x2E002B); + offset.x = -33.0f; + offset.y = offset.z = 0.0f; + space = BoardSpaceFlagSearch(0, 0x80000); + BoardSpacePosGet(0, space, &pos); + BoardModelPosSetV(boardWork->focus_mdl, &pos); + BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30); BoardCameraMotionWait(); - fn_1_BA0(0x2E002C); - BoardShopTutorialExec(temp_r3_2); - BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30); + HostWinExec(0x2E002C); + BoardShopTutorialExec(space); + BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30); BoardCameraMotionWait(); - temp_r3_2 = BoardSpaceFlagSearch(0, 0x10000000); - BoardSpacePosGet(0, temp_r3_2, &sp14); - BoardModelPosSetV(lbl_1_bss_0->unk8, &sp14); - BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30); + space = BoardSpaceFlagSearch(0, 0x10000000); + BoardSpacePosGet(0, space, &pos); + BoardModelPosSetV(boardWork->focus_mdl, &pos); + BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30); BoardCameraMotionWait(); - fn_1_BA0(0x2E002E); + HostWinExec(0x2E002E); BoardLotteryTutorialExec(); - BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30); + BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30); BoardCameraMotionWait(); - temp_r3_2 = BoardSpaceFlagSearch(0, 0x08000000); - BoardSpacePosGet(0, temp_r3_2, &sp14); - BoardModelPosSetV(lbl_1_bss_0->unk8, &sp14); - BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30); + space = BoardSpaceFlagSearch(0, 0x08000000); + BoardSpacePosGet(0, space, &pos); + BoardModelPosSetV(boardWork->focus_mdl, &pos); + BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30); BoardCameraMotionWait(); - fn_1_BA0(0x2E0030); + HostWinExec(0x2E0030); BoardBooHouseTutorialExec(); - BoardCameraMotionStartEx(lbl_1_bss_0->unk8, &sp8, NULL, 3200.0f, -1.0f, 30); + BoardCameraMotionStartEx(boardWork->focus_mdl, &offset, NULL, 3200.0f, -1.0f, 30); BoardCameraMotionWait(); - fn_1_BA0(0x2E0032); + HostWinExec(0x2E0032); BoardCameraTargetModelSet(BoardStarHostMdlGet()); BoardCameraMotionWait(); - fn_1_BA0(0x2E0033); - fn_1_BA0(0x2E0034); - fn_1_1E3C(8, 0x122, 0x8C); - fn_1_BA0(0x2E0035); - fn_1_1FB0(); - fn_1_1E3C(9, 0x122, 0x8C); - fn_1_BA0(0x2E0036); - fn_1_1FB0(); - fn_1_1E3C(0xA, 0x122, 0x8C); - fn_1_BA0(0x2E0037); - fn_1_1FB0(); - fn_1_BA0(0x2E0038); - fn_1_BA0(0x2E0039); - if (lbl_1_bss_C == 0) { - lbl_1_bss_C = 1; + HostWinExec(0x2E0033); + HostWinExec(0x2E0034); + TutorialSpaceShow(8, 0x122, 0x8C); + HostWinExec(0x2E0035); + TutorialSpaceHide(); + TutorialSpaceShow(9, 0x122, 0x8C); + HostWinExec(0x2E0036); + TutorialSpaceHide(); + TutorialSpaceShow(0xA, 0x122, 0x8C); + HostWinExec(0x2E0037); + TutorialSpaceHide(); + HostWinExec(0x2E0038); + HostWinExec(0x2E0039); + if (tutorialDoneF == 0) { + tutorialDoneF = 1; BoardAudSeqFadeOut(0, 0x1F3); BoardKill(); } @@ -245,49 +245,49 @@ void fn_1_13A4(void) { } } -void fn_1_176C(void) { - fn_1_C10(1); - fn_1_BA0(0x2E0024); +void TutorialMGStatusExec(void) { + HostPosSet(1); + HostWinExec(0x2E0024); } -void fn_1_179C(void) { - fn_1_BA0(0x2E0025); +void TutorialMG4PExec(void) { + HostWinExec(0x2E0025); GWPlayer[1].color = 2; GWPlayer[3].color = 2; } -void fn_1_17F4(void) { - fn_1_BA0(0x2E0026); +void TutorialMG2Vs2Exec(void) { + HostWinExec(0x2E0026); GWPlayer[0].color = 2; } -void fn_1_1834(void) { - fn_1_BA0(0x2E0027); +void TutorialMG1Vs3Exec(void) { + HostWinExec(0x2E0027); GWPlayer[0].color = 1; GWPlayer[1].color = 1; GWPlayer[2].color = 1; GWPlayer[3].color = 2; } -void fn_1_18BC(void) { - fn_1_BA0(0x2E0028); - fn_1_BA0(0x2E0029); +void TutorialMG1Vs3AltExec(void) { + HostWinExec(0x2E0028); + HostWinExec(0x2E0029); boardTutorialData[0] = 0; BoardStatusItemSet(0); } -void fn_1_1908(void) { - fn_1_BA0(0x2E002D); +void TutorialShopExec(void) { + HostWinExec(0x2E002D); } -void fn_1_1930(void) { - fn_1_BA0(0x2E002F); +void TutorialLotteryExec(void) { + HostWinExec(0x2E002F); } -void fn_1_1958(void) { - fn_1_BA0(0x2E0031); +void TutorialBooHouseExec(void) { + HostWinExec(0x2E0031); } -void fn_1_1980(void) { +void TutorialNullExec(void) { } \ No newline at end of file diff --git a/src/REL/w10Dll/tutorial.c b/src/REL/w10Dll/tutorial.c index 6da586f4..d9415273 100644 --- a/src/REL/w10Dll/tutorial.c +++ b/src/REL/w10Dll/tutorial.c @@ -5,20 +5,23 @@ #include "game/wipe.h" #include "game/board/ui.h" -void fn_1_1984(void) { +static s16 sprList[11]; +static s16 sprCurr; + +void CloseTutorial(void) { s32 port; s32 i; - if (lbl_1_bss_C == 0) { + if (tutorialDoneF == 0) { if (WipeStatGet() != 0) { - HuWinDispOff(lbl_1_bss_E); + HuWinDispOff(w10ExitWin); return; } - HuWinDispOn(lbl_1_bss_E); + HuWinDispOn(w10ExitWin); if (BoardIsKill() != 0) { return; } - for (i = 0; i < ARRAY_COUNT(GWPlayer); i++) { + for (i = 0; i < 4; i++) { port = GWPlayer[i].port; if (port == -1) { continue; @@ -28,7 +31,7 @@ void fn_1_1984(void) { } } if (i != 4) { - lbl_1_bss_C = 1; + tutorialDoneF = 1; OSReport("@@@@@@@@@@@@@@ Tutorial Exit @@@@@@@@@@@@@@\n"); BoardAudSeqFadeOut(0, 0x1F3); BoardKill(); @@ -37,7 +40,7 @@ void fn_1_1984(void) { } } -s16 lbl_1_data_C6[11][3] = { +static s16 rollDataTbl[11][3] = { 1, -1, -1, 2, -1, -1, 4, -1, -1, @@ -51,74 +54,74 @@ s16 lbl_1_data_C6[11][3] = { 5, 6, -1, }; -w10DllUnk04 lbl_1_data_108[42] = { - {0x0000, 0000, fn_1_D2C}, - {0x0001, 0000, fn_1_D54}, - {0x0002, 0000, fn_1_D7C}, - {0x0003, 0000, fn_1_DA4}, - {0x0003, 0000, fn_1_DCC}, - {0x0003, 0000, fn_1_DF4}, - {0x0003, 0000, fn_1_E1C}, - {0x0004, 0000, fn_1_E44}, - {0x0005, 0000, fn_1_E94}, - {0x0006, 0000, fn_1_EBC}, - {0x0007, 0000, fn_1_EE4}, - {0x000A, 0000, fn_1_EE8}, - {0x000B, 0000, fn_1_F30}, - {0x0010, 0000, fn_1_F6C}, - {0x0011, 0000, fn_1_FB8}, - {0x000C, 0000, fn_1_1010}, - {0x000D, 0000, fn_1_105C}, - {0x000E, 0000, fn_1_1098}, - {0x000E, 0000, fn_1_10C0}, - {0x000F, 0000, fn_1_10F8}, - {0x0012, 0000, fn_1_1134}, - {0x0014, 0000, fn_1_1178}, - {0x0015, 0000, fn_1_11A0}, - {0x0016, 0000, fn_1_11EC}, - {0x0005, 0000, fn_1_1240}, - {0x0017, 0000, fn_1_1278}, - {0x0007, 0000, fn_1_12A0}, - {0x0005, 0000, fn_1_12DC}, - {0x0017, 0000, fn_1_1304}, - {0x0018, 0000, fn_1_132C}, - {0x0019, 0000, fn_1_1354}, - {0x0008, 0000, fn_1_137C}, - {0x0009, 0000, fn_1_13A4}, - {0x001A, 0000, fn_1_176C}, - {0x001B, 0000, fn_1_179C}, - {0x001B, 0000, fn_1_17F4}, - {0x001B, 0000, fn_1_1834}, - {0x001B, 0000, fn_1_18BC}, - {0x001C, 0000, fn_1_1908}, - {0x001C, 0000, fn_1_1930}, - {0x001C, 0000, fn_1_1958}, - {-1, 0, 0}, +static TutorialScene sceneTbl[42] = { + {0, TutorialStartExec}, + {1, TutorialPreRollExec}, + {2, TutorialOrderExec}, + {3, TutorialP1StartExec}, + {3, TutorialP2StartExec}, + {3, TutorialP3StartExec}, + {3, TutorialP4StartExec}, + {4, TutorialGameStartExec}, + {5, TutorialRollExec}, + {6, TutorialMoveExec}, + {7, TutorialLandExec}, + {10, TutorialLandBlueExec}, + {11, TutorialLandRedExec}, + {16, TutorialLandHappenExec}, + {17, TutorialLandFortuneExec}, + {12, TutorialLandBowserExec}, + {13, TutorialLandMushroomExec}, + {14, TutorialMushroomMegaExec}, + {14, TutorialMushroomMiniExec}, + {15, TutorialLandBattleExec}, + {18, TutorialLandWarpExec}, + {20, TutorialWarpDecideExec}, + {21, TutorialBlockStarExec}, + {22, TutorialBlockCoinExec}, + {5, TutorialMiniMegaExec}, + {23, TutorialMiniUseExec}, + {7, TutorialMiniStopExec}, + {5, TutorialMegaUseExec}, + {23, TutorialMegaDiceExec}, + {24, TutorialMegaStompExec}, + {25, TutorialMegaEventExec}, + {8, TutorialMegaStopExec}, + {9, TutorialEndExec}, + {26, TutorialMGStatusExec}, + {27, TutorialMG4PExec}, + {27, TutorialMG2Vs2Exec}, + {27, TutorialMG1Vs3Exec}, + {27, TutorialMG1Vs3AltExec}, + {28, TutorialShopExec}, + {28, TutorialLotteryExec}, + {28, TutorialBooHouseExec}, + {-1, NULL }, }; -int fn_1_1AAC(s16 arg0, s32 arg1) { - if (arg0 == 0x1E) { - fn_1_1984(); +int TutorialExec(s16 arg0, s32 arg1) { + if (arg0 == 30) { + CloseTutorial(); return; } - if (arg0 != 0x1D) { + if (arg0 != 29) { OSReport("Tutorial Hook P0:%d P1:%d P2:%d P3:%d SCEN:%d CUE:%d PRM:%d DICE:%d MSG:%d\n", GWPlayer[0].com, GWPlayer[1].com, GWPlayer[2].com, GWPlayer[3].com, - lbl_1_bss_0->unk0, arg0, arg1, lbl_1_bss_0->unk4, lbl_1_bss_0->unk6); - if (lbl_1_data_108[lbl_1_bss_0->unk0].unk0 != -1) { + boardWork->scene, arg0, arg1, boardWork->dice, boardWork->msg); + if (sceneTbl[boardWork->scene].cue != -1) { if (arg0 == 5) { - BoardRollTutorialSet(&lbl_1_data_C6[lbl_1_bss_0->unk4++][0]); + BoardRollTutorialSet(&rollDataTbl[boardWork->dice++][0]); } - if (arg0 == lbl_1_data_108[lbl_1_bss_0->unk0].unk0) { - void (*temp_r3_3)() = lbl_1_data_108[lbl_1_bss_0->unk0++].unk4; - temp_r3_3(); + if (arg0 == sceneTbl[boardWork->scene].cue) { + TutorialSceneFunc func = sceneTbl[boardWork->scene++].func; + func(); } } } } -s32 lbl_1_data_2A8[11] = { +static s32 tutorialSprTbl[11] = { DATA_MAKE_NUM(DATADIR_W10, 4), DATA_MAKE_NUM(DATADIR_W10, 5), DATA_MAKE_NUM(DATADIR_W10, 6), @@ -132,45 +135,43 @@ s32 lbl_1_data_2A8[11] = { DATA_MAKE_NUM(DATADIR_W10, 14) }; -void fn_1_1D68(void) { - s32 temp_r4; - s32 temp_r5; +void TutorialSprCreate(void) { s32 i; for (i = 0; i < 11; i++) { - lbl_1_bss_22[i] = espEntry(lbl_1_data_2A8[i], 0, 0); - espDispOff(lbl_1_bss_22[i]); + sprList[i] = espEntry(tutorialSprTbl[i], 0, 0); + espDispOff(sprList[i]); } } -void fn_1_1DEC(void) { +void TutorialSprKill(void) { s32 i; for (i = 0; i < 11; i++) { - espKill(lbl_1_bss_22[i]); + espKill(sprList[i]); } } -void fn_1_1E3C(s16 arg0, s16 arg1, s16 arg2) { +void TutorialSpaceShow(s16 arg0, s16 arg1, s16 arg2) { f32 var_f31; f32 var_f30; u32 i; - lbl_1_bss_20 = lbl_1_bss_22[arg0]; - espPosSet(lbl_1_bss_20, arg1, arg2); + sprCurr = sprList[arg0]; + espPosSet(sprCurr, arg1, arg2); var_f31 = 0.0f; var_f30 = 0.0f; - espDispOn(lbl_1_bss_20); + espDispOn(sprCurr); for (i = 0; i < 15; i++) { var_f31 += 0.06666667f; var_f30 += 0.06666667f; - espScaleSet(lbl_1_bss_20, var_f31, var_f30); + espScaleSet(sprCurr, var_f31, var_f30); HuPrcVSleep(); } - espScaleSet(lbl_1_bss_20, 1.0f, 1.0f); + espScaleSet(sprCurr, 1.0f, 1.0f); } -void fn_1_1FB0(void) { +void TutorialSpaceHide(void) { f32 var_f31; f32 var_f30; u32 i; @@ -180,8 +181,8 @@ void fn_1_1FB0(void) { for (i = 0; i < 15; i++) { var_f31 -= 0.06666667f; var_f30 -= 0.06666667f; - espScaleSet(lbl_1_bss_20, var_f31, var_f30); + espScaleSet(sprCurr, var_f31, var_f30); HuPrcVSleep(); } - espDispOff(lbl_1_bss_20); + espDispOff(sprCurr); } \ No newline at end of file From 6e972fb0d2de05c1c71920a18e4b30e95dfab7da Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 14 Mar 2024 16:49:04 -0500 Subject: [PATCH 079/106] Rename TutorialExec --- config/GMPE01_00/rels/w10Dll/symbols.txt | 2 +- include/REL/w10Dll.h | 2 +- src/REL/w10Dll/main.c | 2 +- src/REL/w10Dll/tutorial.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/GMPE01_00/rels/w10Dll/symbols.txt b/config/GMPE01_00/rels/w10Dll/symbols.txt index 3e5d6e0c..896a61e1 100644 --- a/config/GMPE01_00/rels/w10Dll/symbols.txt +++ b/config/GMPE01_00/rels/w10Dll/symbols.txt @@ -58,7 +58,7 @@ TutorialLotteryExec = .text:0x00001930; // type:function size:0x28 TutorialBooHouseExec = .text:0x00001958; // type:function size:0x28 TutorialNullExec = .text:0x00001980; // type:function size:0x4 CloseTutorial = .text:0x00001984; // type:function size:0x128 scope:local -TutorialExec = .text:0x00001AAC; // type:function size:0x2BC +TutorialHookExec = .text:0x00001AAC; // type:function size:0x2BC TutorialSprCreate = .text:0x00001D68; // type:function size:0x84 TutorialSprKill = .text:0x00001DEC; // type:function size:0x50 TutorialSpaceShow = .text:0x00001E3C; // type:function size:0x174 diff --git a/include/REL/w10Dll.h b/include/REL/w10Dll.h index 5d392272..350da41e 100644 --- a/include/REL/w10Dll.h +++ b/include/REL/w10Dll.h @@ -40,7 +40,7 @@ void fn_1_E0(void); void TutorialSprCreate(void); void TutorialSprKill(void); void HostCreate(void); -int TutorialExec(s16, s32); +int TutorialHookExec(s16, s32); void TutorialStartExec(void); void TutorialPreRollExec(void); diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index 2694972c..c6ed3a83 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -84,7 +84,7 @@ void BoardCreate(void) boardWork->scene = 0; boardWork->dice = 0; boardWork->msg = 0; - BoardTutorialHookSet(&TutorialExec); + BoardTutorialHookSet(TutorialHookExec); HostCreate(); TutorialSprCreate(); tutorialDoneF = 0; diff --git a/src/REL/w10Dll/tutorial.c b/src/REL/w10Dll/tutorial.c index d9415273..ca6cd09d 100644 --- a/src/REL/w10Dll/tutorial.c +++ b/src/REL/w10Dll/tutorial.c @@ -99,7 +99,7 @@ static TutorialScene sceneTbl[42] = { {-1, NULL }, }; -int TutorialExec(s16 arg0, s32 arg1) { +int TutorialHookExec(s16 arg0, s32 arg1) { if (arg0 == 30) { CloseTutorial(); return; From 2caca6bc191e79834fff561d5f418c0f74e3c436 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 14 Mar 2024 19:22:42 -0500 Subject: [PATCH 080/106] Remove unsplit headers --- config/GMPE01_00/rels/w03Dll/symbols.txt | 2 +- include/REL/w10Dll.h | 2 -- include/board_unsplit.h | 21 --------------------- include/game/board/player.h | 3 +-- include/unsplit.h | 12 ------------ src/REL/modeltestDll/main.c | 1 - src/REL/modeltestDll/modeltest00.c | 1 - src/REL/w03Dll/main.c | 3 ++- src/REL/w03Dll/mg_coin.c | 1 - src/REL/w03Dll/mg_item.c | 1 - src/REL/w03Dll/river.c | 1 - src/REL/w03Dll/smoke.c | 1 - src/REL/w03Dll/statue.c | 1 - src/REL/w10Dll/main.c | 1 + src/REL/w10Dll/scene.c | 2 ++ src/game/board/basic_space.c | 1 - src/game/board/main.c | 1 - src/game/board/mg_setup.c | 1 - src/game/board/model.c | 1 - src/game/board/ui.c | 1 - src/game/board/warp.c | 1 - 21 files changed, 7 insertions(+), 52 deletions(-) delete mode 100644 include/board_unsplit.h delete mode 100644 include/unsplit.h diff --git a/config/GMPE01_00/rels/w03Dll/symbols.txt b/config/GMPE01_00/rels/w03Dll/symbols.txt index 460d60e3..231a55e5 100644 --- a/config/GMPE01_00/rels/w03Dll/symbols.txt +++ b/config/GMPE01_00/rels/w03Dll/symbols.txt @@ -345,7 +345,7 @@ lbl_1_data_282 = .data:0x00000282; // type:object size:0x2 data:2byte lbl_1_data_284 = .data:0x00000284; // type:object size:0x2 data:2byte lbl_1_data_286 = .data:0x00000286; // type:object size:0x2 data:2byte lbl_1_data_288 = .data:0x00000288; // type:object size:0x4 data:4byte -lbl_1_data_28C = .data:0x0000028C; // type:object size:0x4 +lbl_1_data_28C = .data:0x0000028C; // type:object size:0x4 scope:local lbl_1_data_290 = .data:0x00000290; // type:object size:0x20 lbl_1_data_2B0 = .data:0x000002B0; // type:object size:0x20 lbl_1_data_2D0 = .data:0x000002D0; // type:object size:0x20 diff --git a/include/REL/w10Dll.h b/include/REL/w10Dll.h index 350da41e..b0c81b94 100644 --- a/include/REL/w10Dll.h +++ b/include/REL/w10Dll.h @@ -3,8 +3,6 @@ #include "REL/executor.h" #include "game/process.h" #include "game/window.h" -#include "board_unsplit.h" -#include "unsplit.h" #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) diff --git a/include/board_unsplit.h b/include/board_unsplit.h deleted file mode 100644 index cc378fc7..00000000 --- a/include/board_unsplit.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef _UNSPLIT_BOARD_H -#define _UNSPLIT_BOARD_H - -#include "dolphin.h" - -#ifndef _BOARD_MAIN_H -typedef void (*BoardLightHook)(void); -#endif - -void BoardMGSetupTutorialExec(void); -void BoardBooHouseTutorialExec(void); -void BoardLightHookSet(BoardLightHook set, BoardLightHook reset); -s32 fn_8006DDE8(s16, f32); -void BoardBooHouseHostSet(s16); -s32 BoardCameraRotGet(Vec*); -s32 BoardIsKill(void); - -s32 BoardBowserExec(s32 player, s32 space); -void BoardFortuneExec(s32 player, s32 space); - -#endif diff --git a/include/game/board/player.h b/include/game/board/player.h index b7f983e1..779c5668 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -2,8 +2,7 @@ #define _BOARD_PLAYER_H #include "math.h" -#include "board_unsplit.h" -#include "dolphin/os/OSFastCast.h" +#include "dolphin.h" #include "game/gamework_data.h" #include "game/gamework.h" #include "game/window.h" diff --git a/include/unsplit.h b/include/unsplit.h deleted file mode 100644 index bfcdf1f3..00000000 --- a/include/unsplit.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _UNSPLIT_H -#define _UNSPLIT_H - -#include "dolphin.h" - -void MGSeqKillAll(void); - -void MGSeqPracticeInit(void); -void CharMotionClose(s16 character); -void CharModelClose(s16 character); - -#endif diff --git a/src/REL/modeltestDll/main.c b/src/REL/modeltestDll/main.c index fd594c48..7c1bbae8 100644 --- a/src/REL/modeltestDll/main.c +++ b/src/REL/modeltestDll/main.c @@ -1,5 +1,4 @@ #include "math.h" -#include "unsplit.h" #include "game/chrman.h" #include "game/object.h" #include "game/wipe.h" diff --git a/src/REL/modeltestDll/modeltest00.c b/src/REL/modeltestDll/modeltest00.c index c45e1f1e..f3407ed4 100644 --- a/src/REL/modeltestDll/modeltest00.c +++ b/src/REL/modeltestDll/modeltest00.c @@ -1,5 +1,4 @@ #include "math.h" -#include "unsplit.h" #include "game/chrman.h" #include "game/wipe.h" #include "game/pad.h" diff --git a/src/REL/w03Dll/main.c b/src/REL/w03Dll/main.c index cabadc56..a75163aa 100644 --- a/src/REL/w03Dll/main.c +++ b/src/REL/w03Dll/main.c @@ -7,6 +7,8 @@ #include "game/wipe.h" #include "REL/w03Dll.h" #include "game/board/lottery.h" +#include "game/board/boo_house.h" + #include "game/board/main.h" #include "game/board/model.h" #include "game/board/shop.h" @@ -15,7 +17,6 @@ #include "game/object.h" #include "game/board/player.h" #include "math.h" -#include "board_unsplit.h" #include "game/hsfman.h" void fn_1_740(void); diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index a403c9ad..b06fc7e1 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -2,7 +2,6 @@ #include "game/chrman.h" #include "game/object.h" #include "REL/w03Dll.h" -#include "board_unsplit.h" #include "game/board/main.h" #include "game/board/model.h" #include "game/board/player.h" diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index 49cc2027..b48ff37c 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -11,7 +11,6 @@ #include "game/objsub.h" #include "game/board/player.h" #include "math.h" -#include "board_unsplit.h" #include "game/hsfman.h" #include "dolphin/os/OSFastCast.h" diff --git a/src/REL/w03Dll/river.c b/src/REL/w03Dll/river.c index f82f8276..515f2ab6 100644 --- a/src/REL/w03Dll/river.c +++ b/src/REL/w03Dll/river.c @@ -1,7 +1,6 @@ #include "dolphin.h" #include "game/object.h" #include "REL/w03Dll.h" -#include "board_unsplit.h" #include "game/board/main.h" #include "game/board/model.h" #include "game/board/player.h" diff --git a/src/REL/w03Dll/smoke.c b/src/REL/w03Dll/smoke.c index 9b8d91c5..530dd8c4 100644 --- a/src/REL/w03Dll/smoke.c +++ b/src/REL/w03Dll/smoke.c @@ -1,7 +1,6 @@ #include "dolphin.h" #include "game/object.h" #include "REL/w03Dll.h" -#include "board_unsplit.h" #include "game/board/main.h" #include "game/board/model.h" diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index 4a7923e5..019f4844 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -9,7 +9,6 @@ #include "game/board/player.h" #include "game/board/space.h" #include "game/board/ui.h" -#include "board_unsplit.h" #include "game/hsfman.h" #include "game/board/main.h" #include "game/objsub.h" diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index c6ed3a83..7ebecc57 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -8,6 +8,7 @@ #include "game/board/star.h" #include "game/board/tutorial.h" #include "game/board/main.h" +#include "game/board/boo_house.h" #include "math.h" diff --git a/src/REL/w10Dll/scene.c b/src/REL/w10Dll/scene.c index 567249e6..9328f7e4 100644 --- a/src/REL/w10Dll/scene.c +++ b/src/REL/w10Dll/scene.c @@ -8,6 +8,8 @@ #include "game/board/star.h" #include "game/board/tutorial.h" #include "game/board/ui.h" +#include "game/board/boo_house.h" +#include "game/board/mg_setup.h" void TutorialStartExec(void) { HostWinExec(0x2E0001); diff --git a/src/game/board/basic_space.c b/src/game/board/basic_space.c index cdf3cb61..270f55b0 100644 --- a/src/game/board/basic_space.c +++ b/src/game/board/basic_space.c @@ -8,7 +8,6 @@ #include "game/object.h" #include "game/objsub.h" #include "game/gamework_data.h" -#include "board_unsplit.h" #include "math.h" typedef struct bit_copy { diff --git a/src/game/board/main.c b/src/game/board/main.c index 31d069ba..1cf38513 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -1,4 +1,3 @@ -#include "board_unsplit.h" #include "game/gamework_data.h" #include "math.h" #include "game/object.h" diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index 779cd321..ce09c15a 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -1,5 +1,4 @@ #include "game/board/mg_setup.h" -#include "unsplit.h" #include "game/audio.h" #include "game/objsub.h" #include "game/wipe.h" diff --git a/src/game/board/model.c b/src/game/board/model.c index cfffff7e..b621f1fd 100644 --- a/src/game/board/model.c +++ b/src/game/board/model.c @@ -5,7 +5,6 @@ #include "game/hsfmotion.h" #include "game/memory.h" #include "game/object.h" -#include "unsplit.h" #define BOARD_MODEL_MAX 256 #define BOARD_MOT_MAX 32 diff --git a/src/game/board/ui.c b/src/game/board/ui.c index ea4fe57e..06cfde0c 100755 --- a/src/game/board/ui.c +++ b/src/game/board/ui.c @@ -17,7 +17,6 @@ #include "game/board/model.h" #include "game/board/player.h" #include "game/board/tutorial.h" -#include "board_unsplit.h" #include "math.h" diff --git a/src/game/board/warp.c b/src/game/board/warp.c index dfd50ab9..3bd2db5a 100644 --- a/src/game/board/warp.c +++ b/src/game/board/warp.c @@ -10,7 +10,6 @@ #include "game/hsfdraw.h" #include "game/hsfex.h" #include "game/objsub.h" -#include "board_unsplit.h" #include "math.h" static void WarpInit(s32); From 930f8b88b3db56b01193314953b83648d41653ae Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 14 Mar 2024 20:57:07 -0500 Subject: [PATCH 081/106] Split Extra Minigame RELs --- config/GMPE01_00/rels/m433Dll/splits.txt | 21 ++++++++ config/GMPE01_00/rels/m433Dll/symbols.txt | 10 ++-- config/GMPE01_00/rels/m442Dll/splits.txt | 15 ++++++ config/GMPE01_00/rels/m442Dll/symbols.txt | 6 +-- config/GMPE01_00/rels/m451Dll/splits.txt | 9 ++++ config/GMPE01_00/rels/m451Dll/symbols.txt | 9 ++-- config/GMPE01_00/rels/m453Dll/splits.txt | 21 ++++++++ config/GMPE01_00/rels/m453Dll/symbols.txt | 6 +-- config/GMPE01_00/rels/m459dll/splits.txt | 9 ++++ config/GMPE01_00/rels/m459dll/symbols.txt | 9 ++-- config/GMPE01_00/rels/m460Dll/splits.txt | 27 ++++++++++ config/GMPE01_00/rels/m460Dll/symbols.txt | 12 ++--- config/GMPE01_00/rels/m461Dll/splits.txt | 6 +++ config/GMPE01_00/rels/m462Dll/splits.txt | 9 ++++ config/GMPE01_00/rels/m462Dll/symbols.txt | 2 +- config/GMPE01_00/rels/m463Dll/splits.txt | 6 +++ configure.py | 62 ++++++++++++++++++++++- 17 files changed, 213 insertions(+), 26 deletions(-) diff --git a/config/GMPE01_00/rels/m433Dll/splits.txt b/config/GMPE01_00/rels/m433Dll/splits.txt index 531cd645..cc4c8dd0 100644 --- a/config/GMPE01_00/rels/m433Dll/splits.txt +++ b/config/GMPE01_00/rels/m433Dll/splits.txt @@ -5,3 +5,24 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/m433Dll/main.c: + .text start:0x000000A0 end:0x00002894 + .rodata start:0x00000000 end:0x000000C0 + .data start:0x00000000 end:0x000000A8 + .bss start:0x00000000 end:0x00000038 + +REL/m433Dll/map.c: + .text start:0x00002894 end:0x00005904 + .rodata start:0x000000C0 end:0x00000368 + .data start:0x000000A8 end:0x000000C8 + .bss start:0x00000038 end:0x000007B8 + +REL/m433Dll/player.c: + .text start:0x00005904 end:0x000112E0 + .rodata start:0x00000368 end:0x000006B0 + .data start:0x000000C8 end:0x00000824 + .bss start:0x000007B8 end:0x000007E4 diff --git a/config/GMPE01_00/rels/m433Dll/symbols.txt b/config/GMPE01_00/rels/m433Dll/symbols.txt index 1d318f59..39b3b5ba 100644 --- a/config/GMPE01_00/rels/m433Dll/symbols.txt +++ b/config/GMPE01_00/rels/m433Dll/symbols.txt @@ -1,6 +1,6 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0x420 +ModuleProlog = .text:0x000000A0; // type:function size:0x420 fn_1_4C0 = .text:0x000004C0; // type:function size:0xC4 fn_1_584 = .text:0x00000584; // type:function size:0x94 fn_1_618 = .text:0x00000618; // type:function size:0x180 @@ -408,9 +408,11 @@ lbl_1_data_28 = .data:0x00000028; // type:object size:0xC data:float lbl_1_data_34 = .data:0x00000034; // type:object size:0xC data:float lbl_1_data_40 = .data:0x00000040; // type:object size:0xC data:float lbl_1_data_4C = .data:0x0000004C; // type:object size:0xC data:float -lbl_1_data_58 = .data:0x00000058; // type:object size:0x50 data:float +lbl_1_data_58 = .data:0x00000058; // type:object size:0xC data:float +lbl_1_data_64 = .data:0x00000064; // type:object size:0x44 data:4byte jumptable_1_data_A8 = .data:0x000000A8; // type:object size:0x1C scope:local -lbl_1_data_C4 = .data:0x000000C4; // type:object size:0x1C data:4byte +lbl_1_data_C4 = .data:0x000000C4; // type:object size:0x4 data:4byte +lbl_1_data_C8 = .data:0x000000C8; // type:object size:0x18 data:4byte lbl_1_data_E0 = .data:0x000000E0; // type:object size:0x38 lbl_1_data_118 = .data:0x00000118; // type:object size:0x38 lbl_1_data_150 = .data:0x00000150; // type:object size:0x30 @@ -465,7 +467,7 @@ lbl_1_bss_38 = .bss:0x00000038; // type:object size:0x6F0 lbl_1_bss_728 = .bss:0x00000728; // type:object size:0x80 lbl_1_bss_7A8 = .bss:0x000007A8; // type:object size:0x4 data:4byte lbl_1_bss_7AC = .bss:0x000007AC; // type:object size:0x4 data:4byte -lbl_1_bss_7B0 = .bss:0x000007B0; // type:object size:0x8 data:4byte +lbl_1_bss_7B0 = .bss:0x000007B0; // type:object size:0x4 data:4byte lbl_1_bss_7B8 = .bss:0x000007B8; // type:object size:0x10 lbl_1_bss_7C8 = .bss:0x000007C8; // type:object size:0x4 data:4byte lbl_1_bss_7CC = .bss:0x000007CC; // type:object size:0x4 data:4byte diff --git a/config/GMPE01_00/rels/m442Dll/splits.txt b/config/GMPE01_00/rels/m442Dll/splits.txt index 531cd645..2946fb94 100644 --- a/config/GMPE01_00/rels/m442Dll/splits.txt +++ b/config/GMPE01_00/rels/m442Dll/splits.txt @@ -5,3 +5,18 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/m442Dll/main.c: + .text start:0x000000A0 end:0x000091AC + .rodata start:0x00000000 end:0x000001E8 + .data start:0x00000000 end:0x00000268 + .bss start:0x00000000 end:0x00011F48 + +REL/m442Dll/score.c: + .text start:0x000091AC end:0x00009970 + .rodata start:0x000001E8 end:0x00000218 + .data start:0x00000268 end:0x00000274 + .bss start:0x00011F48 end:0x00011F50 diff --git a/config/GMPE01_00/rels/m442Dll/symbols.txt b/config/GMPE01_00/rels/m442Dll/symbols.txt index 2e955733..4799507b 100644 --- a/config/GMPE01_00/rels/m442Dll/symbols.txt +++ b/config/GMPE01_00/rels/m442Dll/symbols.txt @@ -1,6 +1,6 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0x2D4 +ModuleProlog = .text:0x000000A0; // type:function size:0x2D4 fn_1_374 = .text:0x00000374; // type:function size:0x10 fn_1_384 = .text:0x00000384; // type:function size:0x10 fn_1_394 = .text:0x00000394; // type:function size:0xB4 @@ -165,7 +165,7 @@ lbl_1_data_60 = .data:0x00000060; // type:object size:0xC data:float lbl_1_data_6C = .data:0x0000006C; // type:object size:0x4 lbl_1_data_70 = .data:0x00000070; // type:object size:0xC lbl_1_data_7C = .data:0x0000007C; // type:object size:0xC -lbl_1_data_88 = .data:0x00000088; // type:object size:0x24 +lbl_1_data_88 = .data:0x00000088; // type:object size:0x23 data:string lbl_1_data_AC = .data:0x000000AC; // type:object size:0x4 data:4byte jumptable_1_data_B0 = .data:0x000000B0; // type:object size:0x30 scope:local lbl_1_data_E0 = .data:0x000000E0; // type:object size:0x1C data:string @@ -220,6 +220,6 @@ lbl_1_bss_11F2C = .bss:0x00011F2C; // type:object size:0x4 data:4byte lbl_1_bss_11F30 = .bss:0x00011F30; // type:object size:0x8 data:4byte lbl_1_bss_11F38 = .bss:0x00011F38; // type:object size:0x4 data:4byte lbl_1_bss_11F3C = .bss:0x00011F3C; // type:object size:0x4 data:4byte -lbl_1_bss_11F40 = .bss:0x00011F40; // type:object size:0x8 data:4byte +lbl_1_bss_11F40 = .bss:0x00011F40; // type:object size:0x4 data:4byte lbl_1_bss_11F48 = .bss:0x00011F48; // type:object size:0x4 data:4byte lbl_1_bss_11F4C = .bss:0x00011F4C; // type:object size:0x4 data:4byte diff --git a/config/GMPE01_00/rels/m451Dll/splits.txt b/config/GMPE01_00/rels/m451Dll/splits.txt index 531cd645..ff2e1d27 100644 --- a/config/GMPE01_00/rels/m451Dll/splits.txt +++ b/config/GMPE01_00/rels/m451Dll/splits.txt @@ -5,3 +5,12 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/m451Dll/m451.c: + .text start:0x000000A0 end:0x000051B8 + .rodata start:0x00000000 end:0x00000174 + .data start:0x00000000 end:0x000007B5 + .bss start:0x00000000 end:0x00000CB6 diff --git a/config/GMPE01_00/rels/m451Dll/symbols.txt b/config/GMPE01_00/rels/m451Dll/symbols.txt index 2bbf42af..9cd1aedd 100644 --- a/config/GMPE01_00/rels/m451Dll/symbols.txt +++ b/config/GMPE01_00/rels/m451Dll/symbols.txt @@ -1,6 +1,6 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0x71C +ModuleProlog = .text:0x000000A0; // type:function size:0x71C fn_1_7BC = .text:0x000007BC; // type:function size:0x9C fn_1_858 = .text:0x00000858; // type:function size:0xC0 fn_1_918 = .text:0x00000918; // type:function size:0x214 @@ -98,7 +98,7 @@ lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x54 lbl_1_data_54 = .data:0x00000054; // type:object size:0xC lbl_1_data_60 = .data:0x00000060; // type:object size:0xC -lbl_1_data_6C = .data:0x0000006C; // type:object size:0xC +lbl_1_data_6C = .data:0x0000006C; // type:object size:0x9 data:string lbl_1_data_78 = .data:0x00000078; // type:object size:0xC lbl_1_data_84 = .data:0x00000084; // type:object size:0xB data:string lbl_1_data_8F = .data:0x0000008F; // type:object size:0xB data:string @@ -189,8 +189,9 @@ lbl_1_data_42B = .data:0x0000042B; // type:object size:0xB data:string lbl_1_data_436 = .data:0x00000436; // type:object size:0xB data:string lbl_1_data_441 = .data:0x00000441; // type:object size:0xB data:string lbl_1_data_44C = .data:0x0000044C; // type:object size:0xB data:string -lbl_1_data_457 = .data:0x00000457; // type:object size:0xD -lbl_1_data_464 = .data:0x00000464; // type:object size:0x264 +lbl_1_data_457 = .data:0x00000457; // type:object size:0xB data:string +lbl_1_data_464 = .data:0x00000464; // type:object size:0x1E0 +lbl_1_data_644 = .data:0x00000644; // type:object size:0x84 lbl_1_data_6C8 = .data:0x000006C8; // type:object size:0xC lbl_1_data_6D4 = .data:0x000006D4; // type:object size:0x78 data:float lbl_1_data_74C = .data:0x0000074C; // type:object size:0xC diff --git a/config/GMPE01_00/rels/m453Dll/splits.txt b/config/GMPE01_00/rels/m453Dll/splits.txt index 531cd645..918d68a7 100644 --- a/config/GMPE01_00/rels/m453Dll/splits.txt +++ b/config/GMPE01_00/rels/m453Dll/splits.txt @@ -5,3 +5,24 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/m453Dll/main.c: + .text start:0x000000A0 end:0x000064E8 + .rodata start:0x00000000 end:0x00000198 + .data start:0x00000000 end:0x00000158 + .bss start:0x00000000 end:0x00000060 + +REL/m453Dll/map.c: + .text start:0x000064E8 end:0x00008F48 + .rodata start:0x00000198 end:0x00000248 + .data start:0x00000158 end:0x00000BC0 + .bss start:0x00000060 end:0x000000C0 + +REL/m453Dll/score.c: + .text start:0x00008F48 end:0x00009674 + .rodata start:0x00000248 end:0x00000278 + .data start:0x00000BC0 end:0x00000BCC + .bss start:0x000000C0 end:0x000000C8 diff --git a/config/GMPE01_00/rels/m453Dll/symbols.txt b/config/GMPE01_00/rels/m453Dll/symbols.txt index fcb400ae..985ae585 100644 --- a/config/GMPE01_00/rels/m453Dll/symbols.txt +++ b/config/GMPE01_00/rels/m453Dll/symbols.txt @@ -1,6 +1,6 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0x3A0 +ModuleProlog = .text:0x000000A0; // type:function size:0x3A0 fn_1_440 = .text:0x00000440; // type:function size:0x20 fn_1_460 = .text:0x00000460; // type:function size:0x3E8 fn_1_848 = .text:0x00000848; // type:function size:0x7B4 @@ -241,7 +241,7 @@ lbl_1_data_AFC = .data:0x00000AFC; // type:object size:0x18 lbl_1_data_B14 = .data:0x00000B14; // type:object size:0x18 lbl_1_data_B2C = .data:0x00000B2C; // type:object size:0x48 lbl_1_data_B74 = .data:0x00000B74; // type:object size:0x30 -lbl_1_data_BA4 = .data:0x00000BA4; // type:object size:0x1C +lbl_1_data_BA4 = .data:0x00000BA4; // type:object size:0x18 lbl_1_data_BC0 = .data:0x00000BC0; // type:object size:0xC lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x2 data:2byte lbl_1_bss_2 = .bss:0x00000002; // type:object size:0x6 data:2byte @@ -259,7 +259,7 @@ lbl_1_bss_3C = .bss:0x0000003C; // type:object size:0x10 lbl_1_bss_4C = .bss:0x0000004C; // type:object size:0x4 data:4byte lbl_1_bss_50 = .bss:0x00000050; // type:object size:0x4 data:4byte lbl_1_bss_54 = .bss:0x00000054; // type:object size:0x4 data:4byte -lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x8 data:4byte +lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 data:4byte lbl_1_bss_60 = .bss:0x00000060; // type:object size:0x18 lbl_1_bss_78 = .bss:0x00000078; // type:object size:0x4 data:4byte lbl_1_bss_7C = .bss:0x0000007C; // type:object size:0x4 data:4byte diff --git a/config/GMPE01_00/rels/m459dll/splits.txt b/config/GMPE01_00/rels/m459dll/splits.txt index 531cd645..fe7907b1 100644 --- a/config/GMPE01_00/rels/m459dll/splits.txt +++ b/config/GMPE01_00/rels/m459dll/splits.txt @@ -5,3 +5,12 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/m459dll/main.c: + .text start:0x000000A0 end:0x00006580 + .rodata start:0x00000000 end:0x000004A8 + .data start:0x00000000 end:0x0000008C + .bss start:0x00000000 end:0x000006E8 diff --git a/config/GMPE01_00/rels/m459dll/symbols.txt b/config/GMPE01_00/rels/m459dll/symbols.txt index ee18477b..3d72ada1 100644 --- a/config/GMPE01_00/rels/m459dll/symbols.txt +++ b/config/GMPE01_00/rels/m459dll/symbols.txt @@ -1,6 +1,6 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0x138 +ModuleProlog = .text:0x000000A0; // type:function size:0x138 fn_1_1D8 = .text:0x000001D8; // type:function size:0x468 fn_1_640 = .text:0x00000640; // type:function size:0xFC fn_1_73C = .text:0x0000073C; // type:function size:0x73C @@ -69,10 +69,11 @@ lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x78 lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x8 lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x18 -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:wstring +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:4byte lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x20 lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x20 -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x19C +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x18C +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x10 lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float @@ -147,7 +148,7 @@ lbl_1_rodata_458 = .rodata:0x00000458; // type:object size:0x48 lbl_1_rodata_4A0 = .rodata:0x000004A0; // type:object size:0x4 data:float lbl_1_rodata_4A4 = .rodata:0x000004A4; // type:object size:0x4 data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x1B data:string -lbl_1_data_1B = .data:0x0000001B; // type:object size:0x1D +lbl_1_data_1B = .data:0x0000001B; // type:object size:0x1B data:string jumptable_1_data_38 = .data:0x00000038; // type:object size:0x38 scope:local lbl_1_data_70 = .data:0x00000070; // type:object size:0x1C lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x2 data:2byte diff --git a/config/GMPE01_00/rels/m460Dll/splits.txt b/config/GMPE01_00/rels/m460Dll/splits.txt index 531cd645..c734d5e8 100644 --- a/config/GMPE01_00/rels/m460Dll/splits.txt +++ b/config/GMPE01_00/rels/m460Dll/splits.txt @@ -5,3 +5,30 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/m460Dll/main.c: + .text start:0x000000A0 end:0x000049A0 + .rodata start:0x00000000 end:0x00000160 + .data start:0x00000000 end:0x000000F0 + .bss start:0x00000000 end:0x00000038 + +REL/m460Dll/player.c: + .text start:0x000049A0 end:0x000067B4 + .rodata start:0x00000160 end:0x00000298 + .data start:0x000000F0 end:0x000001E8 + .bss start:0x00000038 end:0x00000048 + +REL/m460Dll/map.c: + .text start:0x000067B4 end:0x00008CAC + .rodata start:0x00000298 end:0x000003B8 + .data start:0x000001E8 end:0x00000380 + .bss start:0x00000048 end:0x00000050 + +REL/m460Dll/score.c: + .text start:0x00008CAC end:0x00008CAC + .rodata start:0x000003B8 end:0x000003E8 + .data start:0x00000380 end:0x0000038C + .bss start:0x00000050 end:0x00000058 diff --git a/config/GMPE01_00/rels/m460Dll/symbols.txt b/config/GMPE01_00/rels/m460Dll/symbols.txt index 9864f9d8..c53d06a2 100644 --- a/config/GMPE01_00/rels/m460Dll/symbols.txt +++ b/config/GMPE01_00/rels/m460Dll/symbols.txt @@ -1,6 +1,6 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0x428 +ModuleProlog = .text:0x000000A0; // type:function size:0x428 fn_1_4C8 = .text:0x000004C8; // type:function size:0x128 fn_1_5F0 = .text:0x000005F0; // type:function size:0x20C fn_1_7FC = .text:0x000007FC; // type:function size:0x14C @@ -261,7 +261,7 @@ lbl_1_data_A0 = .data:0x000000A0; // type:object size:0xC lbl_1_data_AC = .data:0x000000AC; // type:object size:0xC lbl_1_data_B8 = .data:0x000000B8; // type:object size:0x1 data:byte lbl_1_data_BC = .data:0x000000BC; // type:object size:0x1A data:string -lbl_1_data_D6 = .data:0x000000D6; // type:object size:0x1A +lbl_1_data_D6 = .data:0x000000D6; // type:object size:0x19 data:string lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x20 lbl_1_data_110 = .data:0x00000110; // type:object size:0xA0 jumptable_1_data_1B0 = .data:0x000001B0; // type:object size:0x24 scope:local @@ -274,7 +274,7 @@ lbl_1_data_340 = .data:0x00000340; // type:object size:0xC lbl_1_data_34C = .data:0x0000034C; // type:object size:0x8 lbl_1_data_354 = .data:0x00000354; // type:object size:0x8 lbl_1_data_35C = .data:0x0000035C; // type:object size:0x7 data:string -lbl_1_data_363 = .data:0x00000363; // type:object size:0x9 +lbl_1_data_363 = .data:0x00000363; // type:object size:0x7 data:string lbl_1_data_36C = .data:0x0000036C; // type:object size:0xC lbl_1_data_378 = .data:0x00000378; // type:object size:0x8 data:byte lbl_1_data_380 = .data:0x00000380; // type:object size:0xC @@ -292,10 +292,10 @@ lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x2 data:2byte lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x4 data:4byte lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x4 data:4byte lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x4 data:4byte -lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x8 data:4byte +lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x4 data:4byte lbl_1_bss_38 = .bss:0x00000038; // type:object size:0x4 lbl_1_bss_3C = .bss:0x0000003C; // type:object size:0x4 data:4byte -lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x8 data:4byte -lbl_1_bss_48 = .bss:0x00000048; // type:object size:0x8 data:4byte +lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x4 data:4byte +lbl_1_bss_48 = .bss:0x00000048; // type:object size:0x4 data:4byte lbl_1_bss_50 = .bss:0x00000050; // type:object size:0x4 data:4byte lbl_1_bss_54 = .bss:0x00000054; // type:object size:0x4 data:4byte diff --git a/config/GMPE01_00/rels/m461Dll/splits.txt b/config/GMPE01_00/rels/m461Dll/splits.txt index 531cd645..f140a8e1 100644 --- a/config/GMPE01_00/rels/m461Dll/splits.txt +++ b/config/GMPE01_00/rels/m461Dll/splits.txt @@ -5,3 +5,9 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/m461Dll/main.c: + .text start:0x00000000 end:0x0000D7DC + .rodata start:0x00000000 end:0x00000198 + .data start:0x00000000 end:0x000003EC + .bss start:0x00000000 end:0x00000260 diff --git a/config/GMPE01_00/rels/m462Dll/splits.txt b/config/GMPE01_00/rels/m462Dll/splits.txt index 531cd645..bf1b8eda 100644 --- a/config/GMPE01_00/rels/m462Dll/splits.txt +++ b/config/GMPE01_00/rels/m462Dll/splits.txt @@ -5,3 +5,12 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/executor.c: + .text start:0x00000000 end:0x000000A0 + +REL/m462Dll/main.c: + .text start:0x000000A0 end:0x0000815C + .rodata start:0x00000000 end:0x000001B8 + .data start:0x00000000 end:0x0000011B + .bss start:0x00000000 end:0x000003EC diff --git a/config/GMPE01_00/rels/m462Dll/symbols.txt b/config/GMPE01_00/rels/m462Dll/symbols.txt index 619006c8..2f3d2619 100644 --- a/config/GMPE01_00/rels/m462Dll/symbols.txt +++ b/config/GMPE01_00/rels/m462Dll/symbols.txt @@ -1,6 +1,6 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global -fn_1_A0 = .text:0x000000A0; // type:function size:0x400 +ModuleProlog = .text:0x000000A0; // type:function size:0x400 fn_1_4A0 = .text:0x000004A0; // type:function size:0x1014 fn_1_14B4 = .text:0x000014B4; // type:function size:0x80 fn_1_1534 = .text:0x00001534; // type:function size:0x80 diff --git a/config/GMPE01_00/rels/m463Dll/splits.txt b/config/GMPE01_00/rels/m463Dll/splits.txt index 531cd645..ceb93b07 100644 --- a/config/GMPE01_00/rels/m463Dll/splits.txt +++ b/config/GMPE01_00/rels/m463Dll/splits.txt @@ -5,3 +5,9 @@ Sections: .rodata type:rodata align:8 .data type:data align:8 .bss type:bss align:8 + +REL/m463Dll/main.c: + .text start:0x00000000 end:0x000066B8 + .rodata start:0x00000000 end:0x00000414 + .data start:0x00000000 end:0x0000024D + .bss start:0x00000000 end:0x000005AC diff --git a/configure.py b/configure.py index 9e7bacff..e98b9dd6 100644 --- a/configure.py +++ b/configure.py @@ -876,11 +876,71 @@ config.libs = [ Object(NonMatching, "REL/m411Dll/main.c"), } ), - Rel('m450Dll', + Rel('m433Dll', + objects = { + Object(Matching, "REL/executor.c"), + Object(NonMatching, "REL/m433Dll/main.c"), + Object(NonMatching, "REL/m433Dll/map.c"), + Object(NonMatching, "REL/m433Dll/player.c"), + } + ), + Rel('m442Dll', + objects = { + Object(Matching, "REL/executor.c"), + Object(NonMatching, "REL/m442Dll/main.c"), + Object(NonMatching, "REL/m442Dll/score.c"), + } + ), + Rel('m450Dll', objects = { Object(NonMatching, "REL/m450Dll/main.c"), } ), + Rel('m451Dll', + objects = { + Object(NonMatching, "REL/m451Dll/m451.c"), + } + ), + Rel('m453Dll', + objects = { + Object(Matching, "REL/executor.c"), + Object(NonMatching, "REL/m453Dll/main.c"), + Object(NonMatching, "REL/m453Dll/map.c"), + Object(NonMatching, "REL/m453Dll/score.c"), + } + ), + Rel('m459dll', + objects = { + Object(Matching, "REL/executor.c"), + Object(NonMatching, "REL/m459dll/main.c"), + } + ), + Rel('m460Dll', + objects = { + Object(Matching, "REL/executor.c"), + Object(NonMatching, "REL/m460Dll/main.c"), + Object(NonMatching, "REL/m460Dll/player.c"), + Object(NonMatching, "REL/m460Dll/map.c"), + Object(NonMatching, "REL/m460Dll/score.c"), + } + ), + Rel('m461Dll', + objects = { + Object(Matching, "REL/executor.c"), + Object(NonMatching, "REL/m461Dll/main.c"), + } + ), + Rel('m461Dll', + objects = { + Object(Matching, "REL/executor.c"), + Object(NonMatching, "REL/m462Dll/main.c"), + } + ), + Rel('m463Dll', + objects = { + Object(NonMatching, "REL/m463Dll/main.c"), + } + ), Rel('mentDll', objects = { Object(NonMatching, "REL/mentDll/common.c"), From 2ecef59c15c952587b0de2b73cbccdff09cb7ee9 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Fri, 15 Mar 2024 11:08:07 -0500 Subject: [PATCH 082/106] Start matching instdll --- config/GMPE01_00/rels/instDll/symbols.txt | 5 +- config/GMPE01_00/symbols.txt | 2 +- include/game/audio.h | 11 + include/game/gamework_data.h | 12 +- include/game/hsfanim.h | 2 +- include/game/hsfformat.h | 2 +- include/game/minigame_seq.h | 33 ++ include/game/sprite.h | 1 - include/game/window.h | 2 +- src/REL/instDll/main.c | 411 +++++++++++++++ src/REL/modeltestDll/main.c | 1 + src/game/ClusterExec.c | 1 + src/game/audio.c | 223 ++++---- src/game/board/lottery.c | 2 + src/game/board/main.c | 2 +- src/game/board/mg_setup.c | 2 +- src/game/chrman.c | 1 + src/game/hsfanim.c | 1 + src/game/minigame_seq.c | 592 +++++++++++----------- src/game/saveload.c | 1 + src/game/sprman.c | 2 +- 21 files changed, 872 insertions(+), 437 deletions(-) create mode 100644 src/REL/instDll/main.c diff --git a/config/GMPE01_00/rels/instDll/symbols.txt b/config/GMPE01_00/rels/instDll/symbols.txt index db3511cb..146e93b7 100644 --- a/config/GMPE01_00/rels/instDll/symbols.txt +++ b/config/GMPE01_00/rels/instDll/symbols.txt @@ -118,7 +118,7 @@ lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 data:double lbl_1_data_0 = .data:0x00000000; // type:object size:0x2 data:2byte lbl_1_data_2 = .data:0x00000002; // type:object size:0x24 data:string lbl_1_data_26 = .data:0x00000026; // type:object size:0x20 -lbl_1_data_46 = .data:0x00000046; // type:object size:0xA +lbl_1_data_46 = .data:0x00000046; // type:object size:0x8 lbl_1_data_50 = .data:0x00000050; // type:object size:0x20 lbl_1_data_70 = .data:0x00000070; // type:object size:0x20 lbl_1_data_90 = .data:0x00000090; // type:object size:0x8 data:string @@ -147,4 +147,5 @@ lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x8 data:float lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x18 data:float lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x18 data:float lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 data:4byte -lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x8 data:4byte +lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x4 data:4byte +lbl_1_bss_60 = .bss:0x00000060; // type:object size:0x4 data:4byte diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index c174a8a5..cf031b1b 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -4927,7 +4927,7 @@ lbl_8012E70A = .data:0x8012E70A; // type:object size:0xB data:string lbl_8012E715 = .data:0x8012E715; // type:object size:0x273 lbl_8012E988 = .data:0x8012E988; // type:object size:0x12 data:string lbl_8012E99A = .data:0x8012E99A; // type:object size:0xD6 -sndGrpTable = .data:0x8012EA70; // type:object size:0x5B0 +HuSndGrpTbl = .data:0x8012EA70; // type:object size:0x5B0 lbl_8012F020 = .data:0x8012F020; // type:object size:0x94 lbl_8012F0B4 = .data:0x8012F0B4; // type:object size:0x11 data:string lbl_8012F0C5 = .data:0x8012F0C5; // type:object size:0x3A diff --git a/include/game/audio.h b/include/game/audio.h index 59f34f27..7392530a 100644 --- a/include/game/audio.h +++ b/include/game/audio.h @@ -3,6 +3,15 @@ #include "dolphin.h" +typedef struct hu_snd_grp_data { + /* 0x00 */ s16 ovl; + /* 0x02 */ s16 grpset; + /* 0x04 */ s32 auxANo; + /* 0x08 */ s32 auxBNo; + /* 0x0C */ s8 auxAVol; + /* 0x0D */ s8 auxBVol; +} HuSndGrpData; + void HuAudInit(void); s32 HuAudStreamPlay(void); void HuAudStreamVolSet(s16 vol); @@ -64,4 +73,6 @@ extern float Snd3DDistOffset; extern s32 musicOffF; extern u8 fadeStat; +extern HuSndGrpData HuSndGrpTbl[]; + #endif diff --git a/include/game/gamework_data.h b/include/game/gamework_data.h index 6393b6e3..902c7af8 100644 --- a/include/game/gamework_data.h +++ b/include/game/gamework_data.h @@ -45,7 +45,7 @@ typedef struct system_state { }; /* 0x32 */ s8 unk_32; /* 0x34 */ u16 mg_next; -/* 0x36 */ s16 mg_next_type; +/* 0x36 */ s16 mg_type; /* 0x38 */ u16 unk_38; /* 0x3A */ u8 flag[3][16]; /* 0x6A */ u8 unk_6A[0x72]; @@ -153,6 +153,16 @@ static inline s32 GWTeamGet(void) return GWSystem.team; } +static inline s32 GWMGTypeGet(void) +{ + return GWSystem.mg_type; +} + +static inline void GWMGTypeSet(s32 type) +{ + GWSystem.mg_type = type; +} + static inline s32 GWPartyGet(void) { return GWSystem.party; diff --git a/include/game/hsfanim.h b/include/game/hsfanim.h index 6868b818..63015b06 100644 --- a/include/game/hsfanim.h +++ b/include/game/hsfanim.h @@ -3,7 +3,7 @@ #include "game/hsfformat.h" #include "game/hsfman.h" -#include "game/sprite.h" +#include "game/animdata.h" typedef struct model_data ModelData; typedef struct particle_data ParticleData; diff --git a/include/game/hsfformat.h b/include/game/hsfformat.h index 7d1e4f79..56c35fcb 100644 --- a/include/game/hsfformat.h +++ b/include/game/hsfformat.h @@ -2,7 +2,7 @@ #define _GAME_HSFFORMAT_H #include "dolphin.h" -#include "game/sprite.h" +#include "game/animdata.h" #define HSF_OBJ_NULL1 0 #define HSF_OBJ_REPLICA 1 diff --git a/include/game/minigame_seq.h b/include/game/minigame_seq.h index 7a1a85b3..c8ae6be3 100644 --- a/include/game/minigame_seq.h +++ b/include/game/minigame_seq.h @@ -2,6 +2,39 @@ #define _GAME_MINIGAME_SEQ_H #include "game/object.h" +#include "stdarg.h" + +typedef struct seq_work SeqWork; + +typedef int (*SeqUpdateFunc)(SeqWork *work); +typedef int (*SeqInitFunc)(SeqWork *work, va_list params); + +typedef struct seq_work { + SeqUpdateFunc update; + char *data; + float x; + float y; + float scale_x; + float scale_y; + float unk_18; + float angle; + float win_scale; + float unk_24; + s16 time; + s16 time_max; + s16 timer_val; + s16 state; + s16 alt_word_len; + s16 word_len; + s16 param[2]; + s16 type; + s16 spr_grp[16]; + s16 sprite[16]; + u8 seq_no; + u8 stat; + u8 unk_7C; + u8 unk_7D; +} SeqWork; void MGSeqInit(void); void MGSeqMain(void); diff --git a/include/game/sprite.h b/include/game/sprite.h index 42dcba76..c08cf105 100644 --- a/include/game/sprite.h +++ b/include/game/sprite.h @@ -113,7 +113,6 @@ void HuSprGrpCenterSet(s16 group, float x, float y); void HuSprGrpZRotSet(s16 group, float z_rot); void HuSprGrpScaleSet(s16 group, float x, float y); void HuSprGrpTPLvlSet(s16 group, float tp_lvl); -s32 HuSprGrpDrawNoSet(s16 group, s32 draw_no); void HuSprDrawNoSet(s16 group, s16 member, s32 draw_no); void HuSprPriSet(s16 group, s16 member, s16 prio); void HuSprGrpScissorSet(s16 group, s16 x, s16 y, s16 w, s16 h); diff --git a/include/game/window.h b/include/game/window.h index aec4a429..86d5eb0e 100644 --- a/include/game/window.h +++ b/include/game/window.h @@ -1,7 +1,7 @@ #ifndef _GAME_WINDOW_H #define _GAME_WINDOW_H -#include "game/sprite.h" +#include "game/animdata.h" #include "dolphin.h" #define MAKE_MESSID(bank, mess) (((bank) << 16)+(mess)) diff --git a/src/REL/instDll/main.c b/src/REL/instDll/main.c new file mode 100644 index 00000000..e70cc7c7 --- /dev/null +++ b/src/REL/instDll/main.c @@ -0,0 +1,411 @@ +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" + +#include "game/wipe.h" +#include "game/flag.h" +#include "game/minigame_seq.h" +#include "game/data.h" +#include "game/audio.h" +#include "game/window.h" +#include "game/sprite.h" +#include "math.h" + +#include "rel_sqrt_consts.h" + +void HuSprGrpDrawNoSet(s16 group, s32 draw_no); +static s16 lbl_1_data_0 = 1; + +static omObjData *lbl_1_bss_60; +static omObjData *lbl_1_bss_5C; +static Process *lbl_1_bss_58; +static Vec lbl_1_bss_40[2]; +static Vec lbl_1_bss_28[2]; +static float lbl_1_bss_20[2]; +static s32 lbl_1_bss_1C; +static AnimData *lbl_1_bss_18; +static u16 lbl_1_bss_14; +static u16 lbl_1_bss_12; +static u16 lbl_1_bss_10; +static float lbl_1_bss_C; +static u8 lbl_1_bss_8; +static u16 lbl_1_bss_6; +static u16 lbl_1_bss_4; +static s32 lbl_1_bss_0; + +static void fn_1_994(void); +static void fn_1_17E4(void); +static void fn_1_220C(void); +static void fn_1_2804(void); +static void fn_1_2FA0(void); +static void fn_1_4174(omObjData *object); +static void fn_1_4528(omObjData *object); + +void ModuleProlog(void) +{ + s32 i; + omOvlHisData *his; + s32 light; + OSReport("******* INST ObjectSetup *********\n"); + lbl_1_bss_58 = omInitObjMan(50, 8192); + omGameSysInit(lbl_1_bss_58); + lbl_1_bss_8 = GWLanguageGet(); + lbl_1_bss_14 = GWSystem.mg_next; + lbl_1_bss_10 = 0; + lbl_1_bss_4 = 0; + _ClearFlag(0x1000C); + for(i=0; HuSndGrpTbl[i].ovl != OVL_INVALID; i++) { + if(HuSndGrpTbl[i].ovl == mgInfoTbl[lbl_1_bss_14].ovl) { + break; + } + } + if(HuSndGrpTbl[i].ovl != OVL_INVALID) { + HuAudSndGrpSetSet(HuSndGrpTbl[i].grpset); + } + if(mgInfoTbl[lbl_1_bss_14].ovl == OVL_M411) { + if(GWMGTypeGet() == -1) { + GWMGTypeSet(frandmod(3)); + } + } else { + GWMGTypeSet(-1); + } + HuDataDirClose(mgInfoTbl[lbl_1_bss_14].data_dir); + his = omOvlHisGet(0); + omOvlHisChg(0, OVL_RESULT, his->event, his->stat); + if(omovlevtno == 0 && mgInfoTbl[lbl_1_bss_14].ovl == OVL_M430) { + s32 team_cnt[2]; + s32 team_players[2][2]; + team_cnt[0] = team_cnt[1] = 0; + for(i=0; i<4; i++) { + team_players[GWPlayerCfg[i].group][team_cnt[GWPlayerCfg[i].group]++] = i; + } + if(frand() & 1) { + GWPlayerCfg[team_players[0][0]].group = 0; + GWPlayerCfg[team_players[0][1]].group = 1; + } else { + GWPlayerCfg[team_players[0][0]].group = 1; + GWPlayerCfg[team_players[0][1]].group = 0; + } + if(frand() & 1) { + GWPlayerCfg[team_players[1][0]].group = 2; + GWPlayerCfg[team_players[1][1]].group = 3; + } else { + GWPlayerCfg[team_players[1][0]].group = 3; + GWPlayerCfg[team_players[1][1]].group = 2; + } + } + if(mgInfoTbl[lbl_1_bss_14].type == 3 + || mgInfoTbl[lbl_1_bss_14].type == 5 + || mgInfoTbl[lbl_1_bss_14].type == 6 + || mgInfoTbl[lbl_1_bss_14].type == 8 + || !_CheckFlag(0xB)) { + HuDataDirClose(DATADIR_INST); + omSysPauseEnable(1); + omOvlCallEx(mgInfoTbl[lbl_1_bss_14].ovl, 1, 0, 0); + return; + } + lbl_1_bss_40[0].x = -67.0f; + lbl_1_bss_40[0].y = 40.0f; + lbl_1_bss_40[0].z = 0.0f; + lbl_1_bss_28[0].x = 260.0f; + lbl_1_bss_28[0].y = -103.0f; + lbl_1_bss_28[0].z = -18.0f; + lbl_1_bss_20[0] = 2885.0f; + lbl_1_bss_C = 20.0f; + lbl_1_bss_12 = GWSystem.board; + if(mgBoardHostEnableF) { + lbl_1_bss_12 = 1; + } + lbl_1_bss_40[1].x = lbl_1_bss_40[1].y = lbl_1_bss_40[1].z = 0.0f; + lbl_1_bss_28[1].x = lbl_1_bss_28[1].y = lbl_1_bss_28[1].z = 0.0f; + lbl_1_bss_20[1] = 1000.0f; + omSysPauseEnable(0); + Hu3DCameraCreate(3); + Hu3DCameraPerspectiveSet(1, 30.0f, 20.0f, 15000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1); + Hu3DCameraPerspectiveSet(2, 30.0f, 20.0f, 15000.0f, 1.2f); + Hu3DCameraViewportSet(2, 0, 0, 640, 480, 0, 1); + light = Hu3DGLightCreate(0, 100, 1000, 0, -0.5, -1, 255, 255, 255); + Hu3DGLightInfinitytSet(light); + HuPrcChildCreate(fn_1_994, 100, 12288, 0, lbl_1_bss_58); + HuPrcChildCreate(fn_1_17E4, 100, 12288, 0, lbl_1_bss_58); + HuPrcChildCreate(fn_1_220C, 100, 12288, 0, lbl_1_bss_58); + HuPrcChildCreate(fn_1_2804, 100, 12288, 0, lbl_1_bss_58); + HuPrcChildCreate(fn_1_2FA0, 100, 12288, 0, lbl_1_bss_58); + lbl_1_bss_5C = omAddObjEx(lbl_1_bss_58, 32730, 0, 0, -1, fn_1_4174); + omAddObjEx(lbl_1_bss_58, 0, 32, 32, -1, fn_1_4528); + HuAudSeqPlay(59); + Hu3DBGColorSet(0, 0, 0); + HuWinInit(1); +} + +static s8 lbl_1_data_26[][4] = { + { 3, 2, 1, 0 }, + { 1, 1, 1, 0 }, + { 1, 1, 0, 0 }, + { 0, 1, 2, 3 }, + { 3, 2, 1, 0 }, + { 0, -1, -1, -1 }, + { 0, -1, -1, -1 }, + { 3, 2, 1, 0 }, +}; + +static s8 lbl_1_data_46[] = { + 4, + 4, + 4, + 4, + 4, + 1, + 1, + 4 +}; + +static s32 lbl_1_data_50[] = { + DATA_MAKE_NUM(DATADIR_INST, 0), + DATA_MAKE_NUM(DATADIR_INST, 1), + DATA_MAKE_NUM(DATADIR_INST, 2), + DATA_MAKE_NUM(DATADIR_INST, 3), + DATA_MAKE_NUM(DATADIR_INST, 4), + DATA_MAKE_NUM(DATADIR_INST, 0), + DATA_MAKE_NUM(DATADIR_INST, 5), + DATA_MAKE_NUM(DATADIR_INST, 0), +}; + +static s32 lbl_1_data_70[] = { + DATA_MAKE_NUM(DATADIR_INST, 9), + DATA_MAKE_NUM(DATADIR_INST, 10), + DATA_MAKE_NUM(DATADIR_INST, 11), + DATA_MAKE_NUM(DATADIR_INST, 12), + DATA_MAKE_NUM(DATADIR_INST, 13), + DATA_MAKE_NUM(DATADIR_INST, 14), + DATA_MAKE_NUM(DATADIR_INST, 14), + DATA_MAKE_NUM(DATADIR_INST, 9), +}; + +static void fn_1_50B0(ModelData *model, Mtx mtx); +static void fn_1_5B64(ModelData *model, Mtx mtx); + +static void fn_1_994(void) +{ + + Vec pos; + Vec target; + Vec up; + + Vec spC; + Process *process; + + s16 i; + s16 model; + s16 num_coms; + s16 j; + s16 btns; + s32 status; + s32 done; + s16 group; + s32 pic; + omOvlHisData *his; + s16 sprite; + AnimData *anim; + float pos_z; + float time; + float fov_vel; + float rot_x; + + + process = HuPrcCurrentGet(); + status = -1; + group = HuSprGrpCreate(1); + anim = HuSprAnimRead(HuDataReadNum(lbl_1_data_70[mgInfoTbl[lbl_1_bss_14].type], MEMORY_DEFAULT_NUM)); + sprite = HuSprCreate(anim, 0, 0); + HuSprGrpMemberSet(group, 0, sprite); + HuSprGrpDrawNoSet(group, 127); + HuSprPosSet(group, 0, 288, 240); + if(GWMGTypeGet() == -1) { + pic = mgInfoTbl[lbl_1_bss_14].inst_pic[0]; + } else { + pic = mgInfoTbl[lbl_1_bss_14].inst_pic[GWMGTypeGet()]; + } + lbl_1_bss_18 = HuSprAnimRead(HuDataReadNumHeapShortForce(pic, MEMORY_DEFAULT_NUM, HEAP_DATA)); + Hu3DShadowCreate(20, 500, 8000); + Hu3DShadowTPLvlSet(0); + Hu3DShadowSizeSet(192); + target.x = target.y = target.z = 0; + pos.x = pos.z = 100.0f; + pos.y = 7000.0f; + up.x = up.y = 0.0f; + up.z = 1.0f; + Hu3DShadowPosSet(&pos, &up, &target); + model = Hu3DModelCreateFile(lbl_1_data_50[mgInfoTbl[lbl_1_bss_14].type]); + lbl_1_bss_1C = model; + Hu3DModelPosSet(model, 0, 2000, 0); + Hu3DModelAttrSet(model, 0x40000002); + Hu3DModelCameraSet(model, 1); + Hu3DModelShadowSet(model); + i = Hu3DHookFuncCreate(fn_1_5B64); + Hu3DModelPosSet(i, 0, -200, 0); + Hu3DModelCameraSet(i, 1); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 10); + while(WipeStatGet()) { + HuPrcVSleep(); + } + pos_z = -500.0f; + for(i=0; i<=50; i++) { + Hu3DModelPosSet(model, 0.0f, 2500.0*cos(M_PI*(i*1.8f)/180.0)-200.0, pos_z); + Hu3DModelRotSet(model, 0, 0, 45.0f*(1.0f-(i/50.0f))); + pos_z += 50.0/7.0; + Hu3DShadowTPLvlSet(0.5*(i/50.0f)); + HuPrcVSleep(); + } + HuAudFXPlay(1211); + Hu3DModelAttrReset(model, 0x40000002); + for(i=1; i<=20; i++) { + Hu3DModelPosSet(model, 0.0f, (200.0*(sin(M_PI*(i*2.25f)/180.0)*(1.0/sin(M_PI/4))))-200.0, pos_z); + rot_x = (20-i)*cos(M_PI*(i*13.5f)/180.0); + Hu3DModelRotSet(model, rot_x, 0.0f, 0.0f); + pos_z += 50.0/7.0; + HuPrcVSleep(); + } + Hu3DModelPosSet(model, 0.0f, 0.0f, 0.0f); + Hu3DModelAttrSet(model, 0x40000002); + HuPrcSleep(10); + HuAudFXPlay(1212); + Hu3DModelAttrReset(model, 0x40000002); + i = Hu3DHookFuncCreate(fn_1_50B0); + + Hu3DModelCameraSet(i, 1); + Hu3DModelPosSet(i, 0, 415, 0); + lbl_1_data_0 = 0; + while(Hu3DMotionTimeGet(model) < 80.0f) { + if(Hu3DMotionTimeGet(model) > 30.0f) { + lbl_1_data_0 = 2; + } + HuPrcVSleep(); + } + Hu3DModelAttrSet(model, 0x40000002); + HuDataDirClose(DATADIR_INST); + status = HuDataDirReadAsync(mgInfoTbl[lbl_1_bss_14].data_dir); + while(lbl_1_data_0 != 1) { + HuPrcVSleep(); + } + done = 0; + for(i=num_coms=0; i<4; i++) { + if(GWPlayerCfg[i].iscom) { + num_coms++; + } + } + i=0; + while(1) { + if(!done) { + for(btns=j=0; j<4; j++) { + if(!GWPlayerCfg[j].iscom) { + btns |= HuPadBtnDown[GWPlayerCfg[j].pad_idx]; + } + } + if((btns == PAD_BUTTON_START) || omSysExitReq || (num_coms == 4 && i > 60)) { + HuAudFXPlay(2); + done = 1; + } + if(btns == PAD_TRIGGER_Z) { + HuAudFXPlay(1); + done = 1; + his = omOvlHisGet(0); + omOvlHisChg(0, OVL_INST, 1, his->stat); + _SetFlag(0x1000C); + } + if(mgInstExitEnableF && (btns & PAD_BUTTON_B)) { + HuAudFXPlay(3); + if(status != -1) { + while(!HuDataGetAsyncStat(status)) { + HuPrcVSleep(); + } + } + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + HuAudSeqAllFadeOut(500); + while(WipeStatGet()) { + HuPrcVSleep(); + } + HuDataDirClose(mgInfoTbl[lbl_1_bss_14].data_dir); + if(mgInfoTbl[lbl_1_bss_14].ovl == OVL_M430) { + for(num_coms=0; num_coms<4; num_coms++) { + GWPlayerCfg[num_coms].group = GWPlayerCfg[num_coms].group/2; + } + } + omOvlReturnEx(1, 1); + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } + } + } + if(!lbl_1_bss_4 || !done) { + HuPrcVSleep(); + i++; + continue; + } else { + break; + } + } + if(status != -1) { + while(!HuDataGetAsyncStat(status)) { + HuPrcVSleep(); + } + } + spC = lbl_1_bss_40[0]; + pos = lbl_1_bss_28[0]; + pos_z = lbl_1_bss_20[0]; + WipeColorSet(255, 255, 255); + lbl_1_data_0 = 3; + HuPrcSleep(20); + lbl_1_data_0 = 4; + HuPrcSleep(10); + + Hu3DModelAttrReset(model, 0x40000002); + HuPrcSleep(10); + fov_vel = 0; + for(i=0; i<=60; i++) { + time = i/60.0f; + lbl_1_bss_40[0].x = spC.x+((-65.0f-spC.x)*time); + lbl_1_bss_40[0].y = spC.y+((8.0f-spC.y)*time); + lbl_1_bss_40[0].z = spC.z+(-spC.z)*time; + lbl_1_bss_28[0].x = pos.x+((17.0f-pos.x)*time); + lbl_1_bss_28[0].y = pos.y+((5.0f-pos.y)*time); + lbl_1_bss_28[0].z = pos.z+((-188.0f-pos.z)*time); + lbl_1_bss_20[0] = pos_z+((1173.0f-pos_z)*time); + if(i == 30) { + HuAudFXPlay(1210); + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30); + HuAudSeqAllFadeOut(1000); + } + if(i == 40) { + Hu3DModelAttrSet(model, 0x40000002); + } + if(i > 20) { + lbl_1_bss_C += fov_vel; + fov_vel += 0.04; + } + HuPrcVSleep(); + } + while(WipeStatGet()) { + lbl_1_bss_C += fov_vel; + fov_vel += 0.04; + HuPrcVSleep(); + } + lbl_1_data_0 = 6; + HuPrcVSleep(); + omSysPauseEnable(1); + if(omSysExitReq) { + HuDataDirClose(mgInfoTbl[lbl_1_bss_14].data_dir); + omOvlReturnEx(1, 1); + } else { + omOvlCallEx(mgInfoTbl[lbl_1_bss_14].ovl, 1, 0, 0); + } + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } +} \ No newline at end of file diff --git a/src/REL/modeltestDll/main.c b/src/REL/modeltestDll/main.c index 7c1bbae8..444cea7a 100644 --- a/src/REL/modeltestDll/main.c +++ b/src/REL/modeltestDll/main.c @@ -9,6 +9,7 @@ #include "game/printfunc.h" #include "game/window.h" #include "game/gamework_data.h" +#include "game/sprite.h" #include "REL/modeltestDll.h" diff --git a/src/game/ClusterExec.c b/src/game/ClusterExec.c index 57fb5ef0..21032229 100644 --- a/src/game/ClusterExec.c +++ b/src/game/ClusterExec.c @@ -1,6 +1,7 @@ #include "game/ClusterExec.h" #include "game/EnvelopeExec.h" #include "game/hsfmotion.h" +#include "game/sprite.h" float GetClusterCurve(HsfTrack *arg0, float arg1) { float *var_r30; diff --git a/src/game/audio.c b/src/game/audio.c index 2a1e1dd5..804da97f 100644 --- a/src/game/audio.c +++ b/src/game/audio.c @@ -5,15 +5,6 @@ #include "game/wipe.h" #include "game/gamework_data.h" -typedef struct { - /* 0x00 */ s16 unk00; - /* 0x02 */ s16 unk02; - /* 0x04 */ s32 unk04; - /* 0x08 */ s32 unk08; - /* 0x0C */ s8 unk0C; - /* 0x0D */ s8 unk0D; -} sndGrpTableData; - static s32 HuSePlay(s32 arg0, UnkMsmStruct_01 *arg1); extern s16 omSysExitReq; @@ -346,111 +337,111 @@ s32 HuAudSStreamStatGet(s32 arg0) { return msmStreamGetStatus(arg0); } -sndGrpTableData sndGrpTable[] = { - { OVL_BOOT , 0xFFFF, 0, 1, 0xFF, 0xFF }, - { OVL_INST , 0xFFFF, 0, 1, 0xFF, 0xFF }, - { OVL_M401 , 0x0012, 0, 2, 0x40, 0x40 }, - { OVL_M402 , 0x0013, 0, 3, 0x30, 0x20 }, - { OVL_M403 , 0x0014, 0, 1, 0xFF, 0xFF }, - { OVL_M404 , 0x0015, 0, 1, 0xFF, 0xFF }, - { OVL_M405 , 0x0016, 0, 1, 0x40, 0x20 }, - { OVL_M406 , 0x0017, 0, 1, 0xFF, 0xFF }, - { OVL_M407 , 0x0018, 0, 1, 0xFF, 0xFF }, - { OVL_M408 , 0x0019, 0, 1, 0xFF, 0xFF }, - { OVL_M409 , 0x001A, 0, 4, 0xFF, 0xFF }, - { OVL_M410 , 0x001B, 0, 1, 0xFF, 0xFF }, - { OVL_M411 , 0x001C, 0, 1, 0xFF, 0xFF }, - { OVL_M412 , 0x001D, 0, 1, 0xFF, 0xFF }, - { OVL_M413 , 0x001E, 0, 1, 0xFF, 0xFF }, - { OVL_M414 , 0x001F, 0, 1, 0xFF, 0xFF }, - { OVL_M415 , 0x0020, 0, 1, 0xFF, 0xFF }, - { OVL_M416 , 0x0021, 0, 1, 0xFF, 0xFF }, - { OVL_M417 , 0x0022, 0, 1, 0xFF, 0xFF }, - { OVL_M418 , 0x0023, 0, 1, 0x40, 0x40 }, - { OVL_M419 , 0x0024, 0, 6, 0xFF, 0xFF }, - { OVL_M420 , 0x0025, 0, 1, 0xFF, 0xFF }, - { OVL_M421 , 0x0026, 0, 1, 0xFF, 0xFF }, - { OVL_M422 , 0x0027, 0, 1, 0xFF, 0xFF }, - { OVL_M423 , 0x0028, 0, 1, 0xFF, 0xFF }, - { OVL_M424 , 0x0029, 0, 1, 0xFF, 0xFF }, - { OVL_M425 , 0x002A, 0, 1, 0xFF, 0xFF }, - { OVL_M426 , 0x002B, 0, 1, 0xFF, 0xFF }, - { OVL_M427 , 0x002C, 0, 1, 0x40, 0x48 }, - { OVL_M428 , 0x002D, 0, 1, 0xFF, 0xFF }, - { OVL_M429 , 0x002E, 0, 1, 0xFF, 0xFF }, - { OVL_M430 , 0x002F, 0, 1, 0xFF, 0xFF }, - { OVL_M431 , 0x0030, 0, 1, 0xFF, 0xFF }, - { OVL_M432 , 0x0031, 0, 1, 0x30, 0x20 }, - { OVL_M433 , 0x0032, 0, 1, 0xFF, 0xFF }, - { OVL_M434 , 0x0033, 0, 1, 0xFF, 0xFF }, - { OVL_M435 , 0x0034, 0, 9, 0x20, 0x40 }, - { OVL_M436 , 0x0035, 0, 10, 0x20, 0x40 }, - { OVL_M437 , 0x0036, 0, 1, 0x20, 0x40 }, - { OVL_M438 , 0x0037, 0, 11, 0xFF, 0xFF }, - { OVL_M439 , 0x0038, 0, 12, 0x30, 0x20 }, - { OVL_M440 , 0x0039, 0, 1, 0xFF, 0xFF }, - { OVL_M441 , 0x003A, 0, 1, 0xFF, 0xFF }, - { OVL_M442 , 0x003B, 0, 1, 0xFF, 0xFF }, - { OVL_M443 , 0x003C, 0, 1, 0xFF, 0xFF }, - { OVL_M444 , 0x003D, 0, 1, 0xFF, 0xFF }, - { OVL_M445 , 0x003E, 0, 1, 0xFF, 0xFF }, - { OVL_M446 , 0x003F, 0, 1, 0xFF, 0xFF }, - { OVL_M447 , 0x0040, 0, 1, 0xFF, 0xFF }, - { OVL_M448 , 0x0041, 0, 1, 0xFF, 0xFF }, - { OVL_M449 , 0x0042, 0, 1, 0xFF, 0xFF }, - { OVL_M450 , 0x0043, 0, 13, 0x40, 0x40 }, - { OVL_M451 , 0x0044, 0, 1, 0xFF, 0xFF }, - { OVL_M453 , 0x0045, 0, 1, 0xFF, 0xFF }, - { OVL_M455 , 0x0046, 0, 1, 0xFF, 0xFF }, - { OVL_M456 , 0x0047, 0, 1, 0xFF, 0xFF }, - { OVL_M457 , 0x0048, 0, 14, 0x40, 0x20 }, - { OVL_M458 , 0x0049, 0, 15, 0x40, 0x20 }, - { OVL_M459 , 0x004A, 0, 1, 0xFF, 0xFF }, - { OVL_M460 , 0x004B, 0, 1, 0xFF, 0xFF }, - { OVL_M461 , 0x004C, 0, 1, 0xFF, 0xFF }, - { OVL_M462 , 0x004D, 0, 1, 0xFF, 0xFF }, - { OVL_M463 , 0x004E, 0, 1, 0xFF, 0xFF }, - { OVL_MENT , 0xFFFF, 0, 1, 0xFF, 0xFF }, - { OVL_MGMODE , 0x0001, 0, 1, 0xFF, 0xFF }, - { OVL_MODESEL , 0x0000, 0, 1, 0xFF, 0xFF }, - { OVL_MODELTEST, 0x0012, 0, 1, 0xFF, 0xFF }, - { OVL_MSETUP , 0x0000, 0, 1, 0xFF, 0xFF }, - { OVL_MSTORY , 0x0005, 0, 1, 0xFF, 0xFF }, - { OVL_MSTORY2 , 0x0005, 0, 1, 0xFF, 0xFF }, - { OVL_MSTORY3 , 0x0008, 0, 1, 0xFF, 0xFF }, - { OVL_NIS , 0x0009, 0, 1, 0xFF, 0xFF }, - { OVL_OPTION , 0xFFFF, 0, 1, 0xFF, 0xFF }, - { OVL_PRESENT , 0xFFFF, 0, 1, 0xFF, 0xFF }, - { OVL_RESULT , 0xFFFF, 0, 1, 0xFF, 0xFF }, - { OVL_SAF , 0x0000, 0, 2, 0x7F, 0x7F }, - { OVL_SELMENU , 0x0000, 0, 1, 0xFF, 0xFF }, - { OVL_W01 , 0x0009, 0, 1, 0xFF, 0xFF }, - { OVL_W02 , 0x000A, 0, 1, 0xFF, 0xFF }, - { OVL_W03 , 0x000B, 0, 1, 0xFF, 0xFF }, - { OVL_W04 , 0x000C, 0, 1, 0xFF, 0xFF }, - { OVL_W05 , 0x000D, 0, 1, 0xFF, 0xFF }, - { OVL_W06 , 0x000E, 0, 1, 0xFF, 0xFF }, - { OVL_W10 , 0x000F, 0, 1, 0xFF, 0xFF }, - { OVL_W20 , 0x0010, 0, 1, 0xFF, 0xFF }, - { OVL_W21 , 0x0011, 0, 1, 0xFF, 0xFF }, - { OVL_MPEX , 0x0004, 0, 1, 0xFF, 0xFF }, - { OVL_ZTAR , 0xFFFF, 0, 1, 0xFF, 0xFF }, - { OVL_E3SETUP , 0x0000, 0, 1, 0xFF, 0xFF }, - { OVL_STAFF , 0xFFFF, 0, 1, 0xFF, 0xFF }, - { OVL_INVALID , 0xFFFF, 0, 1, 0x00, 0x00 } +HuSndGrpData HuSndGrpTbl[] = { + { 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) { - sndGrpTableData *var_r31; + HuSndGrpData *var_r31; s16 var_r29; - var_r31 = sndGrpTable; + var_r31 = HuSndGrpTbl; while (1) { - if (var_r31->unk00 == ovl) { - var_r29 = var_r31->unk02; + if (var_r31->ovl == ovl) { + var_r29 = var_r31->grpset; break; } - if (var_r31->unk00 == OVL_INVALID) { + if (var_r31->ovl == OVL_INVALID) { var_r29 = 0x12; break; } @@ -459,14 +450,14 @@ void HuAudDllSndGrpSet(u16 ovl) { if (var_r29 != -1) { OSReport("SOUND ##########################\n"); HuAudSndGrpSetSet(var_r29); - if (var_r31->unk04 != auxANoBak || var_r31->unk08 != auxBNoBak) { - msmSysSetAux(var_r31->unk04, var_r31->unk08); - OSReport("Change AUX %d,%d\n", var_r31->unk04, var_r31->unk08); - auxANoBak = var_r31->unk04; - auxBNoBak = var_r31->unk08; + if (var_r31->auxANo != auxANoBak || var_r31->auxBNo != auxBNoBak) { + msmSysSetAux(var_r31->auxANo, var_r31->auxBNo); + OSReport("Change AUX %d,%d\n", var_r31->auxANo, var_r31->auxBNo); + auxANoBak = var_r31->auxANo; + auxBNoBak = var_r31->auxBNo; HuPrcVSleep(); } - HuAudAUXVolSet(var_r31->unk0C, var_r31->unk0D); + HuAudAUXVolSet(var_r31->auxAVol, var_r31->auxBVol); OSReport("##########################\n"); } } @@ -549,7 +540,7 @@ void HuAudAUXVolSet(s8 arg0, s8 arg1) { } void HuAudVoiceInit(s16 ovl) { - sndGrpTableData *var_r29; + HuSndGrpData *var_r29; OSTick temp_r23; s16 temp_r26; s16 temp_r25; @@ -559,12 +550,12 @@ void HuAudVoiceInit(s16 ovl) { s16 i; if (ovl != OVL_INVALID) { - var_r29 = sndGrpTable; + var_r29 = HuSndGrpTbl; while (1) { - if (var_r29->unk00 == ovl && var_r29->unk02 == -1) { + if (var_r29->ovl == ovl && var_r29->grpset == -1) { return; } - if (var_r29->unk00 == OVL_INVALID) { + if (var_r29->ovl == OVL_INVALID) { break; } var_r29++; diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c index b10a9f25..d8ae7e4b 100755 --- a/src/game/board/lottery.c +++ b/src/game/board/lottery.c @@ -23,6 +23,8 @@ #include "math.h" +void HuSprGrpDrawNoSet(s16 group, s32 draw_no); + #define ABS(x) (((x) < 0) ? -(x) : (x)) typedef struct { diff --git a/src/game/board/main.c b/src/game/board/main.c index 1cf38513..2d1249ff 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -291,7 +291,7 @@ void BoardSaveInit(s32 board) GWSystem.bowser_event = 0; GWSystem.unk_32 = 1; GWSystem.mg_next = 0; - GWSystem.mg_next_type = 0; + GWMGTypeSet(0); GWSystem.unk_38 = 0; GWSystem.block_pos = 0; memset(GWSystem.board_data, 0, 32); diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index ce09c15a..7a1a8ad8 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -282,7 +282,7 @@ static void ExecMGSetup(void) { BoardDataAsyncWait(var_r22); var_r24 = mgNext + 0x191; BoardMGSetupPlayPush(mgType, var_r24); - GWSystem.mg_next_type = -1; + GWMGTypeSet(-1); GWMGAvailSet(var_r24); GWSystem.mg_next = var_r24 - 0x191; _SetFlag(0x10002U); diff --git a/src/game/chrman.c b/src/game/chrman.c index bbfb4f37..17b2b183 100755 --- a/src/game/chrman.c +++ b/src/game/chrman.c @@ -9,6 +9,7 @@ #include "game/hsfmotion.h" #include "game/object.h" #include "game/process.h" +#include "game/sprite.h" #include "math.h" diff --git a/src/game/hsfanim.c b/src/game/hsfanim.c index ef3b7121..0c45106f 100755 --- a/src/game/hsfanim.c +++ b/src/game/hsfanim.c @@ -3,6 +3,7 @@ #include "game/init.h" #include "game/memory.h" #include "game/process.h" +#include "game/sprite.h" #include "math.h" #include "string.h" diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index 244969ca..62bfe709 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -21,34 +21,6 @@ extern s16 HuSysVWaitGet(s16 param); -typedef struct seq_work SeqWork; - -typedef int (*SeqUpdateFunc)(SeqWork *work); -typedef int (*SeqInitFunc)(SeqWork *work, va_list params); - -typedef struct seq_work { - SeqUpdateFunc update; - char *data; - float x; - float y; - float scale_x; - float scale_y; - float unk_18; - float work_float[2]; - float unk_24; - s16 time; - s16 time_max; - s16 work_s16[4]; - s16 param[2]; - s16 type; - s16 spr_grp[16]; - s16 sprite[16]; - u8 seq_no; - u8 stat; - u8 unk_7C; - u8 unk_7D; -} SeqWork; - typedef struct seq_info { SeqInitFunc init; SeqUpdateFunc update; @@ -258,8 +230,8 @@ static s16 CreateSeq(s16 seq_no, va_list params) work->unk_18 = 0.0f; work->unk_7D = 255; work->time_max = info->time_max; - work->work_s16[0] = work->work_s16[1] = work->work_s16[2] = work->work_s16[3] = 0; - work->work_float[0] = work->work_float[1] = 0.0f; + work->timer_val = work->state = work->alt_word_len = work->word_len = 0; + work->angle = work->win_scale = 0.0f; work->param[0] = work->param[1] = 0; for(temp=0; temp<16; temp++) { work->sprite[temp] = work->spr_grp[temp] = -1; @@ -392,16 +364,16 @@ static int SeqInitTimer(SeqWork *work, va_list params) if(duration <= 0 && duration > 99) { duration = 99; } - work->work_s16[0] = duration; + work->timer_val = duration; if(x >= 0) { work->x = x; } if(y >= 0) { work->y = y; } - work->work_s16[2] = 0; - work->work_s16[1] = 2; - work->work_float[0] = 0; + work->alt_word_len = 0; + work->state = 2; + work->angle = 0; work->spr_grp[0] = spr_grp = HuSprGrpCreate(4); HuSprGrpScaleSet(spr_grp, work->scale_x, work->scale_y); spr_anim = HuSprAnimRead(SeqReadFile(DATA_MAKE_NUM(DATADIR_GAMEMES, 2))); @@ -426,7 +398,7 @@ static int SeqInitTimer(SeqWork *work, va_list params) HuSprGrpMemberSet(spr_grp, 3, sprite); HuSprPosSet(spr_grp, 3, 0, 0); if(seqPauseF) { - work->work_s16[1] = 1; + work->state = 1; for(i=0; i<2; i++) { HuSprAttrSet(spr_grp, i, HUSPR_ATTR_DISPOFF); (void)i; //Hack for Matching @@ -442,24 +414,24 @@ static int SeqUpdateTimer(SeqWork *work) u8 digits[2]; s16 i; s16 spr_grp = work->spr_grp[0]; - if(work->param[0] != 0 && work->work_s16[1] != -1) { + if(work->param[0] != 0 && work->state != -1) { switch(work->param[0]) { case 2: switch(work->param[1]) { case -1: work->stat |= 0x4; - work->work_s16[1] = -1; - work->work_float[0] = 0.0f; + work->state = -1; + work->angle = 0.0f; break; case 0: - work->work_s16[1] = 2; - work->work_float[0] = 0.0f; + work->state = 2; + work->angle = 0.0f; break; case 1: - work->work_s16[1] = 3; - work->work_float[0] = 0.0f; + work->state = 3; + work->angle = 0.0f; break; default: @@ -471,18 +443,18 @@ static int SeqUpdateTimer(SeqWork *work) case 1: if(work->param[1] < 0 && !(work->stat & 0x4)) { work->stat |= 0x4; - work->work_s16[1] = -1; - work->work_float[0] = 0.0f; + work->state = -1; + work->angle = 0.0f; } else { if(work->param[1] > 99) { - work->work_s16[0] = 99; + work->timer_val = 99; } else { - if(work->work_s16[0] != work->param[1]) { - work->work_s16[0] = work->param[1]; + if(work->timer_val != work->param[1]) { + work->timer_val = work->param[1]; if(work->param[1] <= 5) { HuAudFXPlay(6); - work->work_s16[1] = 3; - work->work_float[0] = 0.0f; + work->state = 3; + work->angle = 0.0f; HuSprColorSet(spr_grp, 0, 255, 112, 160); HuSprColorSet(spr_grp, 1, 255, 112, 160); } else { @@ -499,7 +471,7 @@ static int SeqUpdateTimer(SeqWork *work) for(i=0; i<2; i++) { HuSprAttrReset(spr_grp, i, HUSPR_ATTR_DISPOFF); } - work->work_s16[1] = 3; + work->state = 3; work->param[0] = 0; break; @@ -508,33 +480,33 @@ static int SeqUpdateTimer(SeqWork *work) break; } } - if(work->work_s16[1] == 1) { + if(work->state == 1) { return 1; } - if(work->work_s16[0] > 99) { + if(work->timer_val > 99) { digits[0] = digits[1] = 9; } else { s32 value; - value = work->work_s16[0]/10; + value = work->timer_val/10; digits[1] = value; - digits[0] = work->work_s16[0]-(value*10); + digits[0] = work->timer_val-(value*10); } HuSprGrpPosSet(spr_grp, work->x, work->y); HuSprGrpScaleSet(spr_grp, work->scale_x, work->scale_y); for(i=0; i<2; i++) { HuSprBankSet(spr_grp, i, digits[i]); } - if(work->work_s16[1] != 0) { - switch(work->work_s16[1]) { + if(work->state != 0) { + switch(work->state) { case 2: { float scale_x, scale_y; - scale = fabs(((sin((work->work_float[0]*M_PI)/180)*5.0f)+1.0f)-(sin((130*M_PI)/180)*5.0f)); + scale = fabs(((sin((work->angle*M_PI)/180)*5.0f)+1.0f)-(sin((130*M_PI)/180)*5.0f)); scale_x = work->scale_x*scale; scale_y = work->scale_y*scale; - work->work_float[0] += seqSpeed*5.0f; - if(work->work_float[0] > 130.0f) { - work->work_s16[1] = 0; + work->angle += seqSpeed*5.0f; + if(work->angle > 130.0f) { + work->state = 0; break; } HuSprGrpScaleSet(spr_grp, scale_x, scale_y); @@ -543,11 +515,11 @@ static int SeqUpdateTimer(SeqWork *work) case 3: { - scale = sin((work->work_float[0]*M_PI)/180)+1.0; - tp_lvl = 1.0-(sin((work->work_float[0]*M_PI)/180)*0.5); - work->work_float[0] += seqSpeed*18.0f; - if(work->work_float[0] > 180.0f) { - work->work_s16[1] = 0; + scale = sin((work->angle*M_PI)/180)+1.0; + tp_lvl = 1.0-(sin((work->angle*M_PI)/180)*0.5); + work->angle += seqSpeed*18.0f; + if(work->angle > 180.0f) { + work->state = 0; scale = 1.0f; tp_lvl = 1.0f; } @@ -563,14 +535,14 @@ static int SeqUpdateTimer(SeqWork *work) for(i=0; i<2; i++) { HuSprScaleSet(spr_grp, i, 1.0f, 1.0f); } - work->work_float[0] += 1.0f; - if(work->work_float[0] < 60.0f) { + work->angle += 1.0f; + if(work->angle < 60.0f) { break; } - tp_lvl = 1.0-((work->work_float[0]-60.0f)/20.0f); + tp_lvl = 1.0-((work->angle-60.0f)/20.0f); if(tp_lvl <= 0.0f) { tp_lvl = 0.0f; - work->work_s16[1] = 0; + work->state = 0; work->stat |= 0x8; } @@ -616,8 +588,8 @@ static int SeqInitType2(SeqWork *work, va_list params) if(y >= 0) { work->y = y; } - work->work_s16[1] = 0; - work->work_float[0] = 0.0f; + work->state = 0; + work->angle = 0.0f; x = 0; len = 0; str=work->data; @@ -636,7 +608,7 @@ static int SeqInitType2(SeqWork *work, va_list params) len++; } } - work->work_s16[3] = len; + work->word_len = len; for(i=0; i<6; i++) { if(x & (1 << i)) { anim_tbl[i] = HuSprAnimRead(SeqReadFile(seqType2SprTbl[i])); @@ -669,7 +641,7 @@ static int SeqInitType2(SeqWork *work, va_list params) } else if(c == ' ') { i = -1; } - work->work_s16[2] = x; + work->alt_word_len = x; if(i == -1) { x += 32; } else if(i >= 0) { @@ -682,8 +654,8 @@ static int SeqInitType2(SeqWork *work, va_list params) } } if(seqPauseF) { - work->work_s16[1] = 1; - for(i=0; iwork_s16[3]; i++) { + work->state = 1; + for(i=0; iword_len; i++) { HuSprAttrSet(spr_grp, i, HUSPR_ATTR_DISPOFF); } } @@ -695,16 +667,16 @@ static int SeqUpdateType2(SeqWork *work) float tp_lvl; s16 spr_grp; spr_grp = work->spr_grp[0]; - HuSprGrpPosSet(spr_grp, work->x-((0.5f*work->scale_x)*work->work_s16[2]), work->y); + HuSprGrpPosSet(spr_grp, work->x-((0.5f*work->scale_x)*work->alt_word_len), work->y); HuSprGrpScaleSet(spr_grp, work->scale_x, work->scale_y); - if(work->param[0] != 0 && work->work_s16[1] != -1) { + if(work->param[0] != 0 && work->state != -1) { switch(work->param[0]) { case 2: if(work->param[1] != -1) { (void)work; //HACK: to introduce extra branch } else { - work->work_s16[1] = -1; - work->work_float[0] = 0.0f; + work->state = -1; + work->angle = 0.0f; } work->param[0] = 0; break; @@ -717,11 +689,11 @@ static int SeqUpdateType2(SeqWork *work) case 3: { s32 i; - for(i=0; iwork_s16[3]; i++) { + for(i=0; iword_len; i++) { HuSprAttrReset(spr_grp, i, HUSPR_ATTR_DISPOFF); (void)i; } - work->work_s16[1] = 0; + work->state = 0; work->param[0] = 0; } break; @@ -731,28 +703,28 @@ static int SeqUpdateType2(SeqWork *work) break; } } - if(work->work_s16[1] == 1) { + if(work->state == 1) { return 1; } work->time += seqSpeed; - if(work->time >= work->time_max && work->work_s16[1] != -1) { + if(work->time >= work->time_max && work->state != -1) { work->stat |= 0x4; - work->work_s16[1] = -1; - work->work_float[0] = 0.0f; + work->state = -1; + work->angle = 0.0f; } - if(work->work_s16[1] != 0) { - if(work->work_s16[1] != -1) { + if(work->state != 0) { + if(work->state != -1) { (void)work; //HACK: to introduce extra branch } else { s16 i; - work->work_float[0] += seqSpeed*0.1f; - tp_lvl = 1.0f-work->work_float[0]; + work->angle += seqSpeed*0.1f; + tp_lvl = 1.0f-work->angle; if(tp_lvl <= 0.0f) { tp_lvl = 0.0f; - work->work_s16[1] = 0; + work->state = 0; work->stat |= 0x8; } - for(i=0; iwork_s16[3]; i++) { + for(i=0; iword_len; i++) { HuSprTPLvlSet(spr_grp, i, tp_lvl); (void)i; } @@ -878,7 +850,7 @@ static s32 SeqMakeWord(SeqWork *work, char *str, s16 flags) HuSprGrpMemberSet(spr_grp, i, sprite); HuSprPosSet(spr_grp, i, char_pos[i]-x, 0.0f); } - work->work_s16[3] = len; + work->word_len = len; HuMemDirectFree(char_anim); HuMemDirectFree(char_pos); return grp_idx; @@ -953,19 +925,19 @@ static int SeqInitMGBasic(SeqWork *work, va_list params) s16 i; s16 word_grp; - work->work_s16[1] = va_arg(params, int); - if(work->work_s16[1] == 2) { + work->state = va_arg(params, int); + if(work->state == 2) { return SeqInitDraw(work, params); } work->type = 0; - work->work_float[0] = 0; + work->angle = 0; { s32 word_katakana; s32 word_flag; s32 word_ofs; word_katakana = 0; - if(work->work_s16[1] == 2 && seqLanguage == 0) { + if(work->state == 2 && seqLanguage == 0) { word_katakana = 1; } if(word_katakana) { @@ -978,11 +950,11 @@ static int SeqInitMGBasic(SeqWork *work, va_list params) } else { word_ofs = 3; } - word_grp = SeqMakeWord(work, wordMgTbl[work->work_s16[1]+word_ofs], word_flag); + word_grp = SeqMakeWord(work, wordMgTbl[work->state+word_ofs], word_flag); } HuSprGrpPosSet(work->spr_grp[word_grp], 0.0f, 0.0f); - for(i=0; iwork_s16[3]; i++) { + for(i=0; iword_len; i++) { HuSprTPLvlSet(work->spr_grp[word_grp], i, 1.0f); HuSprPosSet(work->spr_grp[word_grp], i, -100.0f, 240.0f); } @@ -1006,7 +978,7 @@ static int SeqUpdateMGBasic(SeqWork *work) (void)work; //HACK: to introduce extra branch } else { work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } work->param[0] = 0; break; @@ -1032,7 +1004,7 @@ static int SeqUpdateMGBasic(SeqWork *work) work->time += seqSpeed; if(work->time >= work->time_max && work->type != -1) { work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } if(work->type) { switch(work->type) { @@ -1041,27 +1013,27 @@ static int SeqUpdateMGBasic(SeqWork *work) float pos_x; float time; s16 i; - if(work->work_s16[1] == 0) { + if(work->state == 0) { if(work->time <= 40) { - for(i=0; iwork_s16[3]; i++) { - time = work->time-((20/work->work_s16[3])*(work->work_s16[3]-i-1)); + for(i=0; iword_len; i++) { + time = work->time-((20/work->word_len)*(work->word_len-i-1)); if(time < 0 || time > 20.0f) { continue; } - pos_x = (work->x-(0.5f*(work->work_s16[3]*56)))+28.0f+(i*56); + pos_x = (work->x-(0.5f*(work->word_len*56)))+28.0f+(i*56); if(time == 20.0f) { HuSprPosSet(work->spr_grp[0], i, pos_x, work->y); HuSprZRotSet(work->spr_grp[0], i, 0.0f); } else { - HuSprPosSet(work->spr_grp[0], i, pos_x-(((1.0-sin(((time*4.5f)*M_PI)/180.0))*(work->work_s16[3]*56*2))), work->y); + HuSprPosSet(work->spr_grp[0], i, pos_x-(((1.0-sin(((time*4.5f)*M_PI)/180.0))*(work->word_len*56*2))), work->y); HuSprZRotSet(work->spr_grp[0], i, (time/20.0f)*390.0f); } } } else { time = work->time-40; scale = work->scale_x+(0.5*sin(((time*9.0f)*M_PI)/180.0)); - for(i=0; iwork_s16[3]; i++) { - pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(i*56)); + for(i=0; iword_len; i++) { + pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->word_len*56)))))+(scale*(i*56)); HuSprPosSet(work->spr_grp[0], i, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], i, scale, work->scale_y+sin(((time*9.0f)*M_PI)/180.0)); } @@ -1079,7 +1051,7 @@ static int SeqUpdateMGBasic(SeqWork *work) } } else { if(work->time == 1) { - if(work->work_s16[1] == 1) { + if(work->state == 1) { HuAudFXPlay(37); } else { HuAudFXPlay(40); @@ -1090,29 +1062,29 @@ static int SeqUpdateMGBasic(SeqWork *work) if(work->time <= 20) { time = work->time; scale = work->scale_x+(0.5*sin(((time*9.0f)*M_PI)/180.0)); - for(i=0; iwork_s16[3]; i++) { + for(i=0; iword_len; i++) { HuSprAttrReset(work->spr_grp[0], i, HUSPR_ATTR_DISPOFF); - pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(i*56)); + pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->word_len*56)))))+(scale*(i*56)); HuSprPosSet(work->spr_grp[0], i, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], i, work->scale_x+sin(((time*9.0f)*M_PI)/180.0), work->scale_y+sin(((time*9.0f)*M_PI)/180.0)); } if(time == 20.0f) { - for(i=0; iwork_s16[3]; i++) { + for(i=0; iword_len; i++) { HuSprAttrReset(work->spr_grp[0], i, HUSPR_ATTR_DISPOFF); } } } else { if(work->time > 80) { - for(i=0; iwork_s16[3]; i++) { - time = (work->time-80)-((20/work->work_s16[3])*(work->work_s16[3]-i-1)); + for(i=0; iword_len; i++) { + time = (work->time-80)-((20/work->word_len)*(work->word_len-i-1)); if(time < 0.0f || time > 20.0f) { continue; } - pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(i*56); + pos_x = (28.0f+(work->x-(0.5f*(work->word_len*56))))+(i*56); if(time == 20.0f) { HuSprAttrSet(work->spr_grp[0], i, HUSPR_ATTR_DISPOFF); } else { - HuSprPosSet(work->spr_grp[0], i, pos_x+((1.0-cos(((time*4.5f)*M_PI)/180.0f))*(work->work_s16[3]*56*2)), work->y); + HuSprPosSet(work->spr_grp[0], i, pos_x+((1.0-cos(((time*4.5f)*M_PI)/180.0f))*(work->word_len*56*2)), work->y); HuSprZRotSet(work->spr_grp[0], i, (time/20.0f)*390.0f); } } @@ -1131,17 +1103,17 @@ static int SeqUpdateMGBasic(SeqWork *work) case -1: { - work->work_float[0] += seqSpeed*0.1f; - scale = 1.0f-work->work_float[0]; + work->angle += seqSpeed*0.1f; + scale = 1.0f-work->angle; if(scale <= 0.0f) { scale = 0.0f; work->type = 0; work->stat |= 0x8; - if(work->work_s16[1] == 0) { + if(work->state == 0) { MGSeqPauseEnableCtrl(1); } } - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { HuSprTPLvlSet(work->spr_grp[0], idx, scale); } } @@ -1165,12 +1137,12 @@ static int SeqInitMGCommon(SeqWork *work, va_list params) s16 j; s16 word_grp; - work->work_s16[1] = va_arg(params, int); - if(work->work_s16[1] == 2) { + work->state = va_arg(params, int); + if(work->state == 2) { return SeqInitDraw(work, params); } work->type = 0; - work->work_float[0] = 0; + work->angle = 0; tp_lvl = 1.0f; for(i=0; i<4; i++) { if(i == 0) @@ -1179,7 +1151,7 @@ static int SeqInitMGCommon(SeqWork *work, va_list params) s32 word_flag; s32 word_ofs; word_katakana = 0; - if(work->work_s16[1] == 2 && seqLanguage == 0) { + if(work->state == 2 && seqLanguage == 0) { word_katakana = 1; } if(word_katakana) { @@ -1192,7 +1164,7 @@ static int SeqInitMGCommon(SeqWork *work, va_list params) } else { word_ofs = 3; } - word_grp = SeqMakeWord(work, wordMgTbl[work->work_s16[1]+word_ofs], word_flag); + word_grp = SeqMakeWord(work, wordMgTbl[work->state+word_ofs], word_flag); } else { s16 grp_idx; s32 new_grp; @@ -1211,7 +1183,7 @@ static int SeqInitMGCommon(SeqWork *work, va_list params) word_grp = new_grp; } HuSprGrpPosSet(work->spr_grp[word_grp], 0.0f, 0.0f); - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprTPLvlSet(work->spr_grp[word_grp], j, tp_lvl); HuSprPosSet(work->spr_grp[word_grp], j, -100.0f, 240.0f); HuSprPriSet(work->spr_grp[word_grp], j, i+5); @@ -1243,7 +1215,7 @@ static int SeqUpdateMGBattle(SeqWork *work) (void)work; //HACK: to introduce extra branch } else { work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } work->param[0] = 0; break; @@ -1270,7 +1242,7 @@ static int SeqUpdateMGBattle(SeqWork *work) if(work->time >= work->time_max && work->type != -1) { work->stat |= 0x4; work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } if(work->type) { switch(work->type) { @@ -1279,12 +1251,12 @@ static int SeqUpdateMGBattle(SeqWork *work) s16 i, j; float time; float pos_x; - if(work->work_s16[1] == 0) { + if(work->state == 0) { if(work->time < 45) { if(work->time > 10 && work->time <= 40) { time = work->time-10; scale = 10.0f*(1.0f-(time/30.0f)); - pos_x = (work->x-(0.5f*(work->work_s16[3]*56)))+28.0f; + pos_x = (work->x-(0.5f*(work->word_len*56)))+28.0f; HuSprPosSet(work->spr_grp[0], 0, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], 0, work->scale_x+scale, work->scale_y+scale); scale = time/30.0f; @@ -1295,8 +1267,8 @@ static int SeqUpdateMGBattle(SeqWork *work) if(time < 0 || time > 40) { continue; } - for(j=1; jwork_s16[3]; j++) { - pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(j*56); + for(j=1; jword_len; j++) { + pos_x = (28.0f+(work->x-(0.5f*(work->word_len*56))))+(j*56); if(time == 40.0f) { HuSprPosSet(work->spr_grp[i], j, pos_x, work->y); HuSprZRotSet(work->spr_grp[i], j, 0.0f); @@ -1352,8 +1324,8 @@ static int SeqUpdateMGBattle(SeqWork *work) if(work->time > 60) { time = work->time-60; scale = 0.5*sin((M_PI*(time*9.0f))/180.0); - for(j=0; jwork_s16[3]; j++) { - pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x)); + for(j=0; jword_len; j++) { + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->word_len*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+scale, work->scale_y+scale); } @@ -1372,7 +1344,7 @@ static int SeqUpdateMGBattle(SeqWork *work) } } else { if(work->time == 1) { - if(work->work_s16[1] == 1) { + if(work->state == 1) { HuAudFXPlay(37); } else { HuAudFXPlay(40); @@ -1382,32 +1354,32 @@ static int SeqUpdateMGBattle(SeqWork *work) } if(work->time <= 20) { for(i=1; i<4; i++) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrSet(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } time = work->time; scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0)); - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrReset(work->spr_grp[0], j, HUSPR_ATTR_DISPOFF); - pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56)); + pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->word_len*56)))))+(scale*(j*56)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); } if(time == 20.0f) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrReset(work->spr_grp[0], j, HUSPR_ATTR_DISPOFF); } } } else { if(work->time > 80 && work->time <= 95) { time = work->time-80; - for(j=0; jwork_s16[3]; j++) { - pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(j*56); + for(j=0; jword_len; j++) { + pos_x = (28.0f+(work->x-(0.5f*(work->word_len*56))))+(j*56); HuSprPosSet(work->spr_grp[0], j, pos_x+((288.0f-pos_x)*(1.0-cos((M_PI*(time*6.0))/180.0))), work->y); } if(time == 15.0f) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrReset(work->spr_grp[1], j, HUSPR_ATTR_DISPOFF); HuSprPosSet(work->spr_grp[1], j, 288.0f, work->y); HuSprTPLvlSet(work->spr_grp[1], j, 1.0f); @@ -1415,7 +1387,7 @@ static int SeqUpdateMGBattle(SeqWork *work) } } else { if(work->time > 105) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { time = work->time-105; time -= j*3; if(time < 0) { @@ -1447,17 +1419,17 @@ static int SeqUpdateMGBattle(SeqWork *work) case -1: { - work->work_float[0] += seqSpeed*0.1f; - scale = 1.0f-work->work_float[0]; + work->angle += seqSpeed*0.1f; + scale = 1.0f-work->angle; if(scale <= 0.0f) { scale = 0.0f; work->type = 0; work->stat |= 0x8; - if(work->work_s16[1] == 0) { + if(work->state == 0) { MGSeqPauseEnableCtrl(1); } } - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { HuSprTPLvlSet(work->spr_grp[0], idx, scale); } } @@ -1485,7 +1457,7 @@ static int SeqUpdateMG1vs3(SeqWork *work) (void)work; //HACK: to introduce extra branch } else { work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } work->param[0] = 0; break; @@ -1512,7 +1484,7 @@ static int SeqUpdateMG1vs3(SeqWork *work) if(work->time >= work->time_max && work->type != -1) { work->stat |= 0x4; work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } if(work->type) { switch(work->type) { @@ -1523,14 +1495,14 @@ static int SeqUpdateMG1vs3(SeqWork *work) float pos_x, pos_y; s16 i; s16 j; - if(work->work_s16[1] == 0) { + if(work->state == 0) { if(work->time <= 10) { scale = work->time/10.0f; time = work->time; - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { scale_x = 0.3*work->scale_x; scale_y = 0.3*work->scale_y; - pos_x = ((28.0f*scale_x)+(work->x-(0.5f*(scale_x*(work->work_s16[3]*56)))))+(scale_x*(idx*56)); + pos_x = ((28.0f*scale_x)+(work->x-(0.5f*(scale_x*(work->word_len*56)))))+(scale_x*(idx*56)); pos_y = work->y-(150.0*sin((M_PI*(((16.0f/3.0f)*time)+20.0f))/180.0)); HuSprPosSet(work->spr_grp[0], idx, pos_x, pos_y); HuSprScaleSet(work->spr_grp[0], idx, scale_x, scale_y*cos(M_PI*(12.0f*time)/180.0)); @@ -1539,7 +1511,7 @@ static int SeqUpdateMG1vs3(SeqWork *work) } else { if(work->time <= 60) { for(i=0; i<4; i++) { - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { time = (work->time-10)-(idx*3)-i; if(time < 0.0f) { time = 0.0f; @@ -1551,7 +1523,7 @@ static int SeqUpdateMG1vs3(SeqWork *work) scale = 0.3+(0.7*(1.0-cos((M_PI*(time*3.0f))/180.0))); scale_x = work->scale_x*scale; scale_y = work->scale_y*scale; - pos_x = ((28.0f*scale_x)+(work->x-(0.5f*(scale_x*(work->work_s16[3]*56)))))+(scale_x*(idx*56)); + pos_x = ((28.0f*scale_x)+(work->x-(0.5f*(scale_x*(work->word_len*56)))))+(scale_x*(idx*56)); pos_y = work->y-(150.0*sin((M_PI*(((16.0f/3.0f)*time)+20.0f))/180.0)); HuSprPosSet(work->spr_grp[i], idx, pos_x, pos_y); HuSprScaleSet(work->spr_grp[i], idx, scale_x, scale_y*cos(M_PI*(12.0f*time)/180.0)); @@ -1559,7 +1531,7 @@ static int SeqUpdateMG1vs3(SeqWork *work) } if(work->time == 60) { for(i=1; i<4; i++) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrSet(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } @@ -1568,8 +1540,8 @@ static int SeqUpdateMG1vs3(SeqWork *work) if(work->time > 70) { time = work->time-70; scale = 0.5*sin((M_PI*(time*9.0f))/180.0); - for(j=0; jwork_s16[3]; j++) { - pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x)); + for(j=0; jword_len; j++) { + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->word_len*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+scale, work->scale_y+scale); } @@ -1589,7 +1561,7 @@ static int SeqUpdateMG1vs3(SeqWork *work) } } else { if(work->time == 1) { - if(work->work_s16[1] == 1) { + if(work->state == 1) { HuAudFXPlay(37); } else { HuAudFXPlay(40); @@ -1599,21 +1571,21 @@ static int SeqUpdateMG1vs3(SeqWork *work) } if(work->time <= 20) { for(i=1; i<4; i++) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrSet(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } time = work->time; scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0)); - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrReset(work->spr_grp[0], j, HUSPR_ATTR_DISPOFF); - pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56)); + pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->word_len*56)))))+(scale*(j*56)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); } if(time == 20.0f) { for(i=1; i<4; i++) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrReset(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } @@ -1621,18 +1593,18 @@ static int SeqUpdateMG1vs3(SeqWork *work) } else { if(work->time > 80 || work->time < 140) { for(i=0; i<4; i++) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { time = (work->time-80)-i-j; if(time < 0 || time > 40) { continue; } if(time <= 20) { - float pos_base = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(j*56); - pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+((work->work_s16[3]-j-1)*56); + float pos_base = (28.0f+(work->x-(0.5f*(work->word_len*56))))+(j*56); + pos_x = (28.0f+(work->x-(0.5f*(work->word_len*56))))+((work->word_len-j-1)*56); HuSprPosSet(work->spr_grp[i], j, pos_base+((time/20.0f)*(pos_x-pos_base)), work->y+((440.0f-work->y)*(time/20.0f))); } else { time -= 20.0f; - pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+((work->work_s16[3]-j-1)*56); + pos_x = (28.0f+(work->x-(0.5f*(work->word_len*56))))+((work->word_len-j-1)*56); pos_y = 440.0f; HuSprPosSet(work->spr_grp[i], j, pos_x, pos_y+((-40.0f-pos_y)*(time/20.0f))); } @@ -1653,17 +1625,17 @@ static int SeqUpdateMG1vs3(SeqWork *work) case -1: { - work->work_float[0] += seqSpeed*0.1f; - scale = 1.0f-work->work_float[0]; + work->angle += seqSpeed*0.1f; + scale = 1.0f-work->angle; if(scale <= 0.0f) { scale = 0.0f; work->type = 0; work->stat |= 0x8; - if(work->work_s16[1] == 0) { + if(work->state == 0) { MGSeqPauseEnableCtrl(1); } } - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { HuSprTPLvlSet(work->spr_grp[0], idx, scale); } } @@ -1691,7 +1663,7 @@ static int SeqUpdateMGStory(SeqWork *work) (void)work; //HACK: to introduce extra branch } else { work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } work->param[0] = 0; break; @@ -1718,7 +1690,7 @@ static int SeqUpdateMGStory(SeqWork *work) if(work->time >= work->time_max && work->type != -1) { work->stat |= 0x4; work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } if(work->type) { switch(work->type) { @@ -1728,9 +1700,9 @@ static int SeqUpdateMGStory(SeqWork *work) float time; s16 i; s16 j; - if(work->work_s16[1] == 0) { + if(work->state == 0) { if(work->time <= 30) { - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { time = (work->time-(idx*2)); if(time < 0.0f || time > 15.0f) { continue; @@ -1745,23 +1717,23 @@ static int SeqUpdateMGStory(SeqWork *work) HuSprZRotSet(work->spr_grp[1], idx, (1.0-(time/15.0f))*-180.0); } if(work->time == 30) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrSet(work->spr_grp[1], j, HUSPR_ATTR_DISPOFF); } } } else { if(work->time > 35 && work->time <= 45) { time = work->time-35; - for(idx=0; idxwork_s16[3]; idx++) { - pos_x = (work->x-(0.5f*(work->work_s16[3]*56)))+28.0f+(idx*56); + for(idx=0; idxword_len; idx++) { + pos_x = (work->x-(0.5f*(work->word_len*56)))+28.0f+(idx*56); HuSprPosSet(work->spr_grp[0], idx, 288.0f+((pos_x-288.0f)*(time/10.0f)), work->y); } } else { if(work->time > 55) { time = work->time-55; scale = 0.5*sin(M_PI*(9.0f*time)/180.0); - for(j=0; jwork_s16[3]; j++) { - pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x)); + for(j=0; jword_len; j++) { + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->word_len*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+scale, work->scale_y+scale); } @@ -1781,7 +1753,7 @@ static int SeqUpdateMGStory(SeqWork *work) } } else { if(work->time == 1) { - if(work->work_s16[1] == 1) { + if(work->state == 1) { HuAudFXPlay(37); } else { HuAudFXPlay(40); @@ -1791,42 +1763,42 @@ static int SeqUpdateMGStory(SeqWork *work) } if(work->time <= 20) { for(i=1; i<4; i++) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrSet(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } time = work->time; scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0)); - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrReset(work->spr_grp[0], j, HUSPR_ATTR_DISPOFF); - pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56)); + pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->word_len*56)))))+(scale*(j*56)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); } if(time == 20.0f){ for(i=1; i<4; i++) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrReset(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } } } else if(work->time > 80 && work->time < 160) { for(i=0; i<4; i++) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { s16 initF; float dx, dy; time = (work->time-80)-i; if(time < 0 || time > 60) { continue; } - pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(j*56); - dx = 28.0f+(work->x-(0.5f*(work->work_s16[3]*56))); + pos_x = (28.0f+(work->x-(0.5f*(work->word_len*56))))+(j*56); + dx = 28.0f+(work->x-(0.5f*(work->word_len*56))); pos_y = work->y; for(idx=initF=0; idxx-(0.5f*(work->work_s16[3]*56))); + pos_x = 28.0f+(work->x-(0.5f*(work->word_len*56))); initF = 1; dy = 25.0f; dx = 10.0f; @@ -1860,17 +1832,17 @@ static int SeqUpdateMGStory(SeqWork *work) case -1: { - work->work_float[0] += seqSpeed*0.1f; - scale = 1.0f-work->work_float[0]; + work->angle += seqSpeed*0.1f; + scale = 1.0f-work->angle; if(scale <= 0.0f) { scale = 0.0f; work->type = 0; work->stat |= 0x8; - if(work->work_s16[1] == 0) { + if(work->state == 0) { MGSeqPauseEnableCtrl(1); } } - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { HuSprTPLvlSet(work->spr_grp[0], idx, scale); } } @@ -1898,7 +1870,7 @@ static int SeqUpdateMG2vs2(SeqWork *work) (void)work; //HACK: to introduce extra branch } else { work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } work->param[0] = 0; break; @@ -1925,7 +1897,7 @@ static int SeqUpdateMG2vs2(SeqWork *work) if(work->time >= work->time_max && work->type != -1) { work->stat |= 0x4; work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } if(work->type) { switch(work->type) { @@ -1945,11 +1917,11 @@ static int SeqUpdateMG2vs2(SeqWork *work) float time; s16 i; s16 j; - if(work->work_s16[1] == 0) { + if(work->state == 0) { if(work->time <= 30) { time = work->time; - for(idx=0; idxwork_s16[3]; idx++) { - pos_x = (28.0f+(work->x-(0.5f*(work->scale_x*(work->work_s16[3]*56)))))+(idx*56); + for(idx=0; idxword_len; idx++) { + pos_x = (28.0f+(work->x-(0.5f*(work->scale_x*(work->word_len*56)))))+(idx*56); HuSprPosSet(work->spr_grp[0], idx, pos_x+((1.0f-(time/30.0f))*letterOfs[(idx*2)]), work->y+((1.0f-(time/30.0f))*letterOfs[(idx*2)+1])); HuSprTPLvlSet(work->spr_grp[0], idx, time/30.0f); } @@ -1957,8 +1929,8 @@ static int SeqUpdateMG2vs2(SeqWork *work) if(work->time > 40 && work->time <= 60) { time = work->time-40; scale = 0.5*sin(((time*9.0f)*M_PI)/180.0); - for(j=0; jwork_s16[3]; j++) { - pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x)); + for(j=0; jword_len; j++) { + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->word_len*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+scale, work->scale_y+scale); } @@ -1977,7 +1949,7 @@ static int SeqUpdateMG2vs2(SeqWork *work) } } else { if(work->time == 1) { - if(work->work_s16[1] == 1) { + if(work->state == 1) { HuAudFXPlay(37); } else { HuAudFXPlay(40); @@ -1987,21 +1959,21 @@ static int SeqUpdateMG2vs2(SeqWork *work) } if(work->time <= 20) { for(i=1; i<4; i++) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrSet(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } time = work->time; scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0)); - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrReset(work->spr_grp[0], j, HUSPR_ATTR_DISPOFF); - pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56)); + pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->word_len*56)))))+(scale*(j*56)); HuSprPosSet(work->spr_grp[0], j, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); } if(time == 20.0f) { for(i=1; i<4; i++) { - for(j=0; jwork_s16[3]; j++) { + for(j=0; jword_len; j++) { HuSprAttrReset(work->spr_grp[i], j, HUSPR_ATTR_DISPOFF); } } @@ -2009,8 +1981,8 @@ static int SeqUpdateMG2vs2(SeqWork *work) } else { if(work->time > 80 && work->time < 140) { time = work->time-80; - for(idx=0; idxwork_s16[3]; idx++) { - float radius = (idx*56)-(((work->work_s16[3]-1)*56)/2); + for(idx=0; idxword_len; idx++) { + float radius = (idx*56)-(((work->word_len-1)*56)/2); float angle = (1.0f+(1.0f-(ABS(radius)/320.0f)))*720.0f; float new_scale; radius *= 1.0-(time/60.0f); @@ -2035,17 +2007,17 @@ static int SeqUpdateMG2vs2(SeqWork *work) case -1: { - work->work_float[0] += seqSpeed*0.1f; - scale = 1.0f-work->work_float[0]; + work->angle += seqSpeed*0.1f; + scale = 1.0f-work->angle; if(scale <= 0.0f) { scale = 0.0f; work->type = 0; work->stat |= 0x8; - if(work->work_s16[1] == 0) { + if(work->state == 0) { MGSeqPauseEnableCtrl(1); } } - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { HuSprTPLvlSet(work->spr_grp[0], idx, scale); } } @@ -2069,12 +2041,12 @@ static int SeqInitFlip(SeqWork *work, va_list params) s16 i; s16 word_grp; s16 word_ofs; - work->work_s16[1] = va_arg(params, int); - if(work->work_s16[1] == 2) { + work->state = va_arg(params, int); + if(work->state == 2) { return SeqInitDraw(work, params); } work->type = 0; - work->work_float[0] = 0; + work->angle = 0; { s32 word_ofs_temp; s32 word_katakana; @@ -2087,7 +2059,7 @@ static int SeqInitFlip(SeqWork *work, va_list params) } word_ofs = word_ofs_temp; word_katakana = 0; - if(work->work_s16[1] == 2 && word_ofs == 0) { + if(work->state == 2 && word_ofs == 0) { word_katakana = 1; } if(word_katakana) { @@ -2096,16 +2068,16 @@ static int SeqInitFlip(SeqWork *work, va_list params) word_flag = 0; } - word_grp = SeqMakeWord(work, wordMgTbl[work->work_s16[1]+word_ofs], word_flag); + word_grp = SeqMakeWord(work, wordMgTbl[work->state+word_ofs], word_flag); } HuSprGrpPosSet(work->spr_grp[word_grp], 0.0f, 0.0f); - for(i=0; iwork_s16[3]; i++) { + for(i=0; iword_len; i++) { HuSprTPLvlSet(work->spr_grp[word_grp], i, 0.0f); - HuSprPosSet(work->spr_grp[word_grp], i, (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(i*56), work->y); + HuSprPosSet(work->spr_grp[word_grp], i, (28.0f+(work->x-(0.5f*(work->word_len*56))))+(i*56), work->y); HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR); HuSprAttrReset(work->spr_grp[word_grp], i, HUSPR_ATTR_DISPOFF); } - work->work_s16[2] = work->work_s16[3]; + work->alt_word_len = work->word_len; { s32 word_ofs_temp; s32 word_katakana; @@ -2118,7 +2090,7 @@ static int SeqInitFlip(SeqWork *work, va_list params) } word_ofs = word_ofs_temp; word_katakana = 0; - if(work->work_s16[1] == 2 && word_ofs == 0) { + if(work->state == 2 && word_ofs == 0) { word_katakana = 1; } if(word_katakana) { @@ -2127,12 +2099,12 @@ static int SeqInitFlip(SeqWork *work, va_list params) word_flag = 0; } - word_grp = SeqMakeWord(work, wordMgTbl[work->work_s16[1]+word_ofs], word_flag); + word_grp = SeqMakeWord(work, wordMgTbl[work->state+word_ofs], word_flag); } HuSprGrpPosSet(work->spr_grp[word_grp], 0.0f, 0.0f); - for(i=0; iwork_s16[3]; i++) { + for(i=0; iword_len; i++) { HuSprTPLvlSet(work->spr_grp[word_grp], i, 0.0f); - HuSprPosSet(work->spr_grp[word_grp], i, (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(i*56), work->y); + HuSprPosSet(work->spr_grp[word_grp], i, (28.0f+(work->x-(0.5f*(work->word_len*56))))+(i*56), work->y); HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR); HuSprAttrReset(work->spr_grp[word_grp], i, HUSPR_ATTR_DISPOFF); } @@ -2156,7 +2128,7 @@ static int SeqUpdateFlip(SeqWork *work) (void)work; //HACK: to introduce extra branch } else { work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } work->param[0] = 0; break; @@ -2183,7 +2155,7 @@ static int SeqUpdateFlip(SeqWork *work) if(work->time >= work->time_max && work->type != -1) { work->stat |= 0x4; work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } if(work->type) { switch(work->type) { @@ -2192,21 +2164,21 @@ static int SeqUpdateFlip(SeqWork *work) float time; float pos_x; s16 i; - if(work->work_s16[1] == 0) { + if(work->state == 0) { if(work->time <= 10) { - for(idx=0; idxwork_s16[2]; idx++) { + for(idx=0; idxalt_word_len; idx++) { HuSprTPLvlSet(work->spr_grp[0], idx, work->time/10.0f); } } else { if(work->time <= 30) { time = work->time-10; if(time <= 10) { - for(idx=0; idxwork_s16[2]; idx++) { + for(idx=0; idxalt_word_len; idx++) { HuSprScaleSet(work->spr_grp[0], idx, cos(M_PI*((time/10.0f)*90.0f)/180.0), 1.0f); } } else { time -= 10.0f; - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { HuSprTPLvlSet(work->spr_grp[1], idx, 1.0f); HuSprScaleSet(work->spr_grp[1], idx, sin(M_PI*((time/10.0f)*90.0f)/180.0), 1.0f); } @@ -2215,8 +2187,8 @@ static int SeqUpdateFlip(SeqWork *work) if(work->time > 35 && work->time <= 55) { time = work->time-35; scale = 0.5*sin(((time*9.0f)*M_PI)/180.0); - for(i=0; iwork_s16[3]; i++) { - pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((i*56)*(scale+work->scale_x)); + for(i=0; iword_len; i++) { + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->word_len*56)*(scale+work->scale_x))))+((i*56)*(scale+work->scale_x)); HuSprPosSet(work->spr_grp[1], i, pos_x, work->y); HuSprScaleSet(work->spr_grp[1], i, work->scale_x+scale, work->scale_y+scale); } @@ -2236,7 +2208,7 @@ static int SeqUpdateFlip(SeqWork *work) } } else { if(work->time == 1) { - if(work->work_s16[1] == 1) { + if(work->state == 1) { HuAudFXPlay(37); } else { HuAudFXPlay(40); @@ -2247,23 +2219,23 @@ static int SeqUpdateFlip(SeqWork *work) if(work->time <= 20) { time = work->time; scale = 0.5*sin(M_PI*(9.0f*time)/180.0); - for(i=0; iwork_s16[3]; i++) { + for(i=0; iword_len; i++) { HuSprTPLvlSet(work->spr_grp[1], i, 1.0f); - pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((i*56)*(scale+work->scale_x)); + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->word_len*56)*(scale+work->scale_x))))+((i*56)*(scale+work->scale_x)); HuSprPosSet(work->spr_grp[1], i, pos_x, work->y); HuSprScaleSet(work->spr_grp[1], i, work->scale_x+scale, work->scale_y+scale); } } else { if(work->time > 80 && work->time <= 160) { time = work->time-80; - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { scale = time-(idx*2); if(scale < 0 || scale > 15.0f) { continue; } HuSprScaleSet(work->spr_grp[1], idx, cos(M_PI*((scale/15.0f)*90.0f)/180.0), 1.0f); } - for(idx=0; idxwork_s16[2]; idx++) { + for(idx=0; idxalt_word_len; idx++) { scale = (time-15.0f)-(idx*2); if(scale < 0 || scale > 30.0f) { continue; @@ -2286,17 +2258,17 @@ static int SeqUpdateFlip(SeqWork *work) case -1: { - work->work_float[0] += seqSpeed*0.1f; - scale = 1.0f-work->work_float[0]; + work->angle += seqSpeed*0.1f; + scale = 1.0f-work->angle; if(scale <= 0.0f) { scale = 0.0f; work->type = 0; work->stat |= 0x8; - if(work->work_s16[1] == 0) { + if(work->state == 0) { MGSeqPauseEnableCtrl(1); } } - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { HuSprTPLvlSet(work->spr_grp[1], idx, scale); } } @@ -2324,7 +2296,7 @@ static int SeqUpdateMGBowser(SeqWork *work) (void)work; //HACK: to introduce extra branch } else { work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } work->param[0] = 0; break; @@ -2351,7 +2323,7 @@ static int SeqUpdateMGBowser(SeqWork *work) if(work->time >= work->time_max && work->type != -1) { work->stat |= 0x4; work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } if(work->type) { switch(work->type) { @@ -2370,10 +2342,10 @@ static int SeqUpdateMGBowser(SeqWork *work) float scale_arr[16]; - if(work->work_s16[1] == 0) { + if(work->state == 0) { if(work->time <= 60) { - center_x = (0.5*(work->work_s16[3]*56))+20.0; - for(idx=0; idxwork_s16[3]; idx++) { + center_x = (0.5*(work->word_len*56))+20.0; + for(idx=0; idxword_len; idx++) { time = work->time-idx; if(time < 0) { scale_arr[idx] = 0.0f; @@ -2383,7 +2355,7 @@ static int SeqUpdateMGBowser(SeqWork *work) time = 50.0f; } time_angle = 540.0*(1.0f-(time/50.0f)); - pos_x = (28.0f+(0.5f*-(work->work_s16[3]*56)))+(idx*56); + pos_x = (28.0f+(0.5f*-(work->word_len*56)))+(idx*56); angle = 180.0*(atan2(pos_x, center_x)/M_PI); pos_x = work->x+(center_x*sin(M_PI*(angle+time_angle)/180.0)); pos_y = work->y-(240.0*(1.0-(time/50.0f))); @@ -2394,8 +2366,8 @@ static int SeqUpdateMGBowser(SeqWork *work) spr_idx[idx] = idx; } } - for(i=1; iwork_s16[3]; i++) { - for(idx=0; idxwork_s16[3]-i; idx++) { + for(i=1; iword_len; i++) { + for(idx=0; idxword_len-i; idx++) { if(scale_arr[idx] > scale_arr[idx+1]) { j= spr_idx[idx]; spr_idx[idx] = spr_idx[idx+1]; @@ -2406,15 +2378,15 @@ static int SeqUpdateMGBowser(SeqWork *work) } } } - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { HuSprPriSet(work->spr_grp[0], spr_idx[idx], idx+5); } } else { if(work->time > 60 && work->time <= 80) { time = work->time-60; scale = 0.5*sin(((time*9.0f)*M_PI)/180.0); - for(i=0; iwork_s16[3]; i++) { - pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((i*56)*(scale+work->scale_x)); + for(i=0; iword_len; i++) { + pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->word_len*56)*(scale+work->scale_x))))+((i*56)*(scale+work->scale_x)); HuSprPosSet(work->spr_grp[0], i, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], i, work->scale_x+scale, work->scale_y+scale); } @@ -2434,7 +2406,7 @@ static int SeqUpdateMGBowser(SeqWork *work) } } else { if(work->time == 1) { - if(work->work_s16[1] == 1) { + if(work->state == 1) { HuAudFXPlay(37); } else { HuAudFXPlay(40); @@ -2444,21 +2416,21 @@ static int SeqUpdateMGBowser(SeqWork *work) } if(work->time <= 20) { for(j=1; j<4; j++) { - for(i=0; iwork_s16[3]; i++) { + for(i=0; iword_len; i++) { HuSprAttrSet(work->spr_grp[j], i, HUSPR_ATTR_DISPOFF); } } time = work->time; scale = work->scale_x+(0.5*sin(((time*9.0f)*M_PI)/180.0)); - for(i=0; iwork_s16[3]; i++) { + for(i=0; iword_len; i++) { HuSprAttrReset(work->spr_grp[0], i, HUSPR_ATTR_DISPOFF); - pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(i*56)); + pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->word_len*56)))))+(scale*(i*56)); HuSprPosSet(work->spr_grp[0], i, pos_x, work->y); HuSprScaleSet(work->spr_grp[0], i, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0))); } if(time == 20.0f) { for(j=1; j<4; j++) { - for(i=0; iwork_s16[3]; i++) { + for(i=0; iword_len; i++) { HuSprAttrReset(work->spr_grp[j], i, HUSPR_ATTR_DISPOFF); } } @@ -2479,8 +2451,8 @@ static int SeqUpdateMGBowser(SeqWork *work) if(time < 0.0f || time > 15.0f) { continue; } - for(idx=0; idxwork_s16[3]; idx++) { - pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(idx*56); + for(idx=0; idxword_len; idx++) { + pos_x = (28.0f+(work->x-(0.5f*(work->word_len*56))))+(idx*56); pos_x += (time/15.0f)*(letterOfs[(idx*2)]-pos_x); pos_y = work->y+((time/15.0f)*(letterOfs[(idx*2)+1]-work->y)); HuSprPosSet(work->spr_grp[i], idx, pos_x, pos_y); @@ -2501,17 +2473,17 @@ static int SeqUpdateMGBowser(SeqWork *work) case -1: { - work->work_float[0] += seqSpeed*0.1f; - scale = 1.0f-work->work_float[0]; + work->angle += seqSpeed*0.1f; + scale = 1.0f-work->angle; if(scale <= 0.0f) { scale = 0.0f; work->type = 0; work->stat |= 0x8; - if(work->work_s16[1] == 0) { + if(work->state == 0) { MGSeqPauseEnableCtrl(1); } } - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { HuSprTPLvlSet(work->spr_grp[0], idx, scale); } } @@ -2531,10 +2503,10 @@ static int SeqUpdateMGBowser(SeqWork *work) static int SeqInitDraw(SeqWork *work, va_list params) { s16 word_grp; - work->work_s16[1] = 2; + work->state = 2; work->seq_no = 13; work->type = 0; - work->work_float[0] = 0.0f; + work->angle = 0.0f; { s32 word_flag; s32 word_ofs; @@ -2569,7 +2541,7 @@ static int SeqUpdateDraw(SeqWork *work) (void)work; //HACK: to introduce extra branch } else { work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } work->param[0] = 0; break; @@ -2593,7 +2565,7 @@ static int SeqUpdateDraw(SeqWork *work) if(work->time >= work->time_max && work->type != -1) { work->stat |= 0x4; work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } if(work->type) { switch(work->type) { @@ -2627,11 +2599,11 @@ static int SeqUpdateDraw(SeqWork *work) case -1: { float tp_lvl; - work->work_float[0] += seqSpeed*0.1f; - tp_lvl = 1.0f-work->work_float[0]; + work->angle += seqSpeed*0.1f; + tp_lvl = 1.0f-work->angle; if(tp_lvl <= 0.0f) { tp_lvl = 0.0f; - work->work_s16[1] = 0; + work->state = 0; work->stat |= 0x8; } HuSprGrpTPLvlSet(group, tp_lvl); @@ -2751,13 +2723,13 @@ static int SeqInitWin(SeqWork *work, va_list params) } } word_grp = SeqMakeWord(work, winWordTbl[word_idx], GET_WIN_KANAF()); - winnerNameW[0] = work->work_s16[3]*50; - for(i=0; iwork_s16[3]; i++) { - HuSprPosSet(work->spr_grp[word_grp], i, 25.0f+((i*50)-(0.5f*(work->work_s16[3]*50))), 0.0f); + winnerNameW[0] = work->word_len*50; + for(i=0; iword_len; i++) { + HuSprPosSet(work->spr_grp[word_grp], i, 25.0f+((i*50)-(0.5f*(work->word_len*50))), 0.0f); HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR); } num_winners = 0; - work->work_float[1] = 1.0f; + work->win_scale = 1.0f; for(j=0; j<4; j++) { s32 winner = va_arg(params, int); if(winner < 0) { @@ -2767,7 +2739,7 @@ static int SeqInitWin(SeqWork *work, va_list params) if(seqLanguage != 0) { char *name = winCharNameTbl[(winner*2)+GET_LANG_IDX()]; word_w = 0.0f; - for(i=word_w; iwork_s16[3]; i++, name++) { + for(i=word_w; iword_len; i++, name++) { if(*name == ' ') { word_w += 30.0f; } else { @@ -2776,7 +2748,7 @@ static int SeqInitWin(SeqWork *work, va_list params) } name = winCharNameTbl[(winner*2)+GET_LANG_IDX()]; word_x = 0.0f; - for(i=word_x; iwork_s16[3]; i++, name++) { + for(i=word_x; iword_len; i++, name++) { HuSprPosSet(work->spr_grp[word_grp], i, 25.0+(word_x-(0.5*word_w)), 0.0f); HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR); if(*name == ' ') { @@ -2785,23 +2757,23 @@ static int SeqInitWin(SeqWork *work, va_list params) word_x += 50.0f; } } - if(work->work_float[1] == 0.6f || winner == 7 || winner == 13 || winner == 10) { - work->work_float[1] = 0.6f; + if(work->win_scale == 0.6f || winner == 7 || winner == 13 || winner == 10) { + work->win_scale = 0.6f; } else { - work->work_float[1] = 0.75f; + work->win_scale = 0.75f; } winnerNameW[num_winners+1] = word_w; } else { if(winner == 7 || winner == 13) { - for(i=0;iwork_s16[3]; i++) { - HuSprPosSet(work->spr_grp[word_grp], i, 26.0f+((i*52)-(0.5f*(work->work_s16[3]*52))), 0.0f); + for(i=0;iword_len; i++) { + HuSprPosSet(work->spr_grp[word_grp], i, 26.0f+((i*52)-(0.5f*(work->word_len*52))), 0.0f); HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR); } - work->work_float[1] = 0.8f; - winnerNameW[num_winners+1] = work->work_s16[3]*52; + work->win_scale = 0.8f; + winnerNameW[num_winners+1] = work->word_len*52; } else { - work->work_float[1] = 1.0f; - winnerNameW[num_winners+1] = work->work_s16[3]*56; + work->win_scale = 1.0f; + winnerNameW[num_winners+1] = work->word_len*56; } } @@ -2810,13 +2782,13 @@ static int SeqInitWin(SeqWork *work, va_list params) if(num_winners == 0) { return 0; } - work->work_s16[1] = 0; - work->work_s16[3] = num_winners+1; - work->work_float[0] = 0.0f; + work->state = 0; + work->word_len = num_winners+1; + work->angle = 0.0f; work->type = 0; for(j=0; jwork_float[1])); + word_x = 32.0f+((float)winnerNameW[0]+(winnerNameW[1]*work->win_scale)); if(j == 0) { word_x = (((576.0f-word_x)/2.0f)+(word_x-(winnerNameW[0]/2)))-288.0f; } else { @@ -2827,7 +2799,7 @@ static int SeqInitWin(SeqWork *work, va_list params) if(winnerNameW[j]+32 < 288.0f) { word_x = 176.0f; } else { - word_x = 32.0f+((winnerNameW[j]*work->work_float[1])/2.0f); + word_x = 32.0f+((winnerNameW[j]*work->win_scale)/2.0f); } if(winPosOfs[num_winners-1][j][0] < 0) { word_x = -(288.0f-word_x); @@ -2865,7 +2837,7 @@ static int SeqUpdateWin(SeqWork *work) (void)work; //HACK: to introduce extra branch } else { work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } work->param[0] = 0; break; @@ -2889,7 +2861,7 @@ static int SeqUpdateWin(SeqWork *work) if(work->time >= work->time_max && work->type != -1) { work->stat |= 0x4; work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } if(work->type) { switch(work->type) { @@ -2906,14 +2878,14 @@ static int SeqUpdateWin(SeqWork *work) HuSprGrpZRotSet(work->spr_grp[0], zrot); scale = 1.0+(5.0*cos(M_PI*(90.0f*(time/20.0f))/180.0)); tp_lvl = time/20.0f; - for(idx=1; idxwork_s16[3]; idx++) { + for(idx=1; idxword_len; idx++) { HuSprGrpTPLvlSet(work->spr_grp[idx], tp_lvl); - HuSprGrpScaleSet(work->spr_grp[idx], scale*work->work_float[1], scale); + HuSprGrpScaleSet(work->spr_grp[idx], scale*work->win_scale, scale); } } if(work->time > 20 && work->time <= 22) { HuSprGrpZRotSet(work->spr_grp[0], 0.0f); - for(idx=1; idxwork_s16[3]; idx++) { + for(idx=1; idxword_len; idx++) { float pos_x; float ofs[2]; if(work->time == 21) { @@ -2922,26 +2894,26 @@ static int SeqUpdateWin(SeqWork *work) } else { ofs[0] = ofs[1] = 0.0f; } - if(work->work_s16[3] == 2) { + if(work->word_len == 2) { pos_x = winnerNameW[1]+winnerNameW[0]+32; pos_x = (((576.0f-pos_x)/2.0f)+(winnerNameW[1]/2))-288.0f; } else { - if(abs(winPosOfs[work->work_s16[3]-2][idx][0]) == 144.0f) { + if(abs(winPosOfs[work->word_len-2][idx][0]) == 144.0f) { if(winnerNameW[idx]+32 < 288.0f) { pos_x = 176.0f; } else { - pos_x = 32.0f+((winnerNameW[idx]*work->work_float[1])/2.0f); + pos_x = 32.0f+((winnerNameW[idx]*work->win_scale)/2.0f); } - if(winPosOfs[work->work_s16[3]-2][idx][0] < 0) { + if(winPosOfs[work->word_len-2][idx][0] < 0) { pos_x = -(288.0f-pos_x); } else { pos_x = (576.0f-pos_x)-288.0f; } } else { - pos_x = winPosOfs[work->work_s16[3]-2][idx][0]; + pos_x = winPosOfs[work->word_len-2][idx][0]; } } - HuSprGrpPosSet(work->spr_grp[idx], (288.0f+pos_x)+ofs[0], ofs[1]+(240.0f+winPosOfs[work->work_s16[3]-2][idx][1])); + HuSprGrpPosSet(work->spr_grp[idx], (288.0f+pos_x)+ofs[0], ofs[1]+(240.0f+winPosOfs[work->word_len-2][idx][1])); } } if(work->time == 125) { @@ -2952,14 +2924,14 @@ static int SeqUpdateWin(SeqWork *work) case -1: { - work->work_float[0] += seqSpeed*0.1f; - tp_lvl = 1.0f-work->work_float[0]; + work->angle += seqSpeed*0.1f; + tp_lvl = 1.0f-work->angle; if(tp_lvl <= 0.0f) { tp_lvl = 0.0f; - work->work_s16[1] = 0; + work->state = 0; work->stat |= 0x8; } - for(idx=0; idxwork_s16[3]; idx++) { + for(idx=0; idxword_len; idx++) { HuSprGrpTPLvlSet(work->spr_grp[idx], tp_lvl); } } @@ -2987,7 +2959,7 @@ static int SeqInitRecord(SeqWork *work, va_list params) s32 digit; seqRecordVal = va_arg(params, int); work->type = 0; - work->work_float[0] = 0.0f; + work->angle = 0.0f; work->spr_grp[0] = spr_grp = HuSprGrpCreate(10); spr_data = HuSprAnimRead(SeqReadFile(DATA_MAKE_NUM(DATADIR_GAMEMES, 9))); sprite = HuSprCreate(spr_data, 0, 0); @@ -3095,7 +3067,7 @@ static int SeqUpdateRecord(SeqWork *work) { s16 group; if(_CheckFlag(0x1000C)) { - work->work_s16[1] = 0; + work->state = 0; work->stat |= 0xC; } else { group = work->spr_grp[0]; @@ -3106,7 +3078,7 @@ static int SeqUpdateRecord(SeqWork *work) (void)work; //HACK: to introduce extra branch } else { work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } work->param[0] = 0; break; @@ -3130,7 +3102,7 @@ static int SeqUpdateRecord(SeqWork *work) if(work->time >= work->time_max && work->type != -1) { work->stat |= 0x4; work->type = -1; - work->work_float[0] = 0.0f; + work->angle = 0.0f; } if(work->type) { switch(work->type) { @@ -3151,11 +3123,11 @@ static int SeqUpdateRecord(SeqWork *work) case -1: { float tp_lvl; - work->work_float[0] += seqSpeed*0.1f; - tp_lvl = 1.0f-work->work_float[0]; + work->angle += seqSpeed*0.1f; + tp_lvl = 1.0f-work->angle; if(tp_lvl <= 0.0f) { tp_lvl = 0.0f; - work->work_s16[1] = 0; + work->state = 0; work->stat |= 0x8; } HuSprGrpTPLvlSet(group, tp_lvl); @@ -3209,7 +3181,7 @@ static void PauseProc(void) work.sprite[i] = work.spr_grp[i] = -1; } SeqMakeWord(&work, pauseStr[GET_LANG_IDX()], 0); - for(i=0; i Date: Fri, 15 Mar 2024 15:09:13 -0500 Subject: [PATCH 083/106] Decompile more of instdll --- include/game/hsfmotion.h | 3 + include/game/objsub.h | 4 +- include/game/window.h | 3 + src/REL/instDll/main.c | 380 ++++++++++++++++++++++++++++- src/game/minigame_seq.c | 10 +- src/game/objsub.c | 512 +++++++++++++++++++-------------------- src/game/window.c | 1 - 7 files changed, 639 insertions(+), 274 deletions(-) diff --git a/include/game/hsfmotion.h b/include/game/hsfmotion.h index fa8dc409..7ec10d4c 100644 --- a/include/game/hsfmotion.h +++ b/include/game/hsfmotion.h @@ -4,6 +4,9 @@ #include "dolphin.h" #include "game/hsfformat.h" +#define Hu3DJointMotionFile(model, data_id) (Hu3DJointMotion((model), HuDataSelHeapReadNum((data_id), MEMORY_DEFAULT_NUM, HEAP_DATA))) + + typedef struct motion_data { s16 unk_00; s16 unk_02; diff --git a/include/game/objsub.h b/include/game/objsub.h index c83ecd03..2cc262d0 100644 --- a/include/game/objsub.h +++ b/include/game/objsub.h @@ -14,9 +14,7 @@ typedef struct mg_info { u32 data_dir; u32 inst_pic[3]; u32 mg_pic[3]; - u32 rules_mess; - u32 control_mess[2]; - u32 advice_mess; + u32 inst_mess[4]; } MgInfo; s32 omMgIndexGet(s16 overlay); diff --git a/include/game/window.h b/include/game/window.h index 86d5eb0e..ba0aceac 100644 --- a/include/game/window.h +++ b/include/game/window.h @@ -136,5 +136,8 @@ void HuWinExAnimIn(s16 window); void HuWinExAnimOut(s16 window); void HuWinExCleanup(s16 window); void HuWinExAnimPopIn(s16 window, s16 portrait); +void *MessData_MesPtrGet(void *data, u32 index); + +extern void *messDataPtr; #endif diff --git a/src/REL/instDll/main.c b/src/REL/instDll/main.c index e70cc7c7..b5ada221 100644 --- a/src/REL/instDll/main.c +++ b/src/REL/instDll/main.c @@ -3,6 +3,9 @@ #include "game/pad.h" #include "game/gamework_data.h" #include "game/hsfman.h" +#include "game/hsfdraw.h" +#include "game/printfunc.h" + #include "game/hsfmotion.h" #include "game/wipe.h" @@ -12,11 +15,14 @@ #include "game/audio.h" #include "game/window.h" #include "game/sprite.h" +#include "game/chrman.h" + #include "math.h" #include "rel_sqrt_consts.h" void HuSprGrpDrawNoSet(s16 group, s32 draw_no); + static s16 lbl_1_data_0 = 1; static omObjData *lbl_1_bss_60; @@ -142,15 +148,15 @@ void ModuleProlog(void) HuWinInit(1); } -static s8 lbl_1_data_26[][4] = { - { 3, 2, 1, 0 }, - { 1, 1, 1, 0 }, - { 1, 1, 0, 0 }, - { 0, 1, 2, 3 }, - { 3, 2, 1, 0 }, - { 0, -1, -1, -1 }, - { 0, -1, -1, -1 }, - { 3, 2, 1, 0 }, +static s8 lbl_1_data_26[] = { + 3, 2, 1, 0, + 1, 1, 1, 0, + 1, 1, 0, 0, + 0, 1, 2, 3, + 3, 2, 1, 0, + 0, -1, -1, -1, + 0, -1, -1, -1, + 3, 2, 1, 0 }; static s8 lbl_1_data_46[] = { @@ -408,4 +414,360 @@ static void fn_1_994(void) while(1) { HuPrcVSleep(); } +} + +static char *lbl_1_data_B0[] = { + "p_pos_a", + "p_pos_b", + "p_pos_c", + "p_pos_d" +}; + +static u8 lbl_1_data_C0[] = { + 8, + 0, + 12, + 4 +}; + +static void fn_1_17E4(void) +{ + float tplvl; + s16 i; + s16 j; + s16 time; + s16 player_cnt; + s16 order; + s16 type; + s16 group_type; + s16 group; + ModelData *model; + s16 player_mdl[4]; + s16 char_tbl[4]; + s16 platform_mdl[4]; + s16 player_order[4]; + s16 mot_tbl[4][3]; + Vec player_pos[4]; + + type = mgInfoTbl[lbl_1_bss_14].type; + player_cnt = lbl_1_data_46[type]; + for(i=0; i= 0) { + tplvl = 0.1*time; + Hu3DModelTPLvlSet(platform_mdl[j], 0.5*tplvl); + Hu3DModelScaleSet(platform_mdl[j], tplvl, tplvl, tplvl); + } + } + } + HuPrcVSleep(); + } + model = &Hu3DData[player_mdl[0]]; + while(lbl_1_data_0 != 4) { + HuPrcVSleep(); + } + for(i=0; i<=45; i++) { + for(j=0; j= 4) { + lbl_1_bss_6 = 0; + } + HuWinMesSet(window, mgInfoTbl[lbl_1_bss_14].inst_mess[lbl_1_bss_6]); + HuWinMesPalSet(window, 7, 0, 0, 192); + HuWinPosSet(window_other, 142.0f, 320.0f); + for(i=0; i<=10; i++) { + HuWinPosSet(window_other, 30.0*sin(M_PI*(i*9.0f)/180.0)+142.0, 160.0*(1.0-cos(M_PI*(i*9.0f)/180.0))+320.0); + HuPrcVSleep(); + } + HuPrcSleep(5); + } + lbl_1_bss_4 = 1; + HuPrcVSleep(); + } + for(i=0; i<=20; i++) { + pos_x = 500.0*(1.0-cos(M_PI*(i*4.5f)/180.0))+142.0; + HuWinPosSet(window, pos_x, 320); + HuPrcVSleep(); + } + HuWinAllKill(); + HuPrcEnd(); + while(1) { + HuPrcVSleep(); + } +} + +static void fn_1_2FA0(void) +{ + +} + +static void fn_1_4174(omObjData *object) +{ + +} + + +static void fn_1_4528(omObjData *object) +{ + +} + +static void fn_1_50B0(ModelData *model, Mtx mtx) +{ + +} + +static void fn_1_5B64(ModelData *model, Mtx mtx) +{ + } \ No newline at end of file diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index 62bfe709..dceadba4 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -3192,7 +3192,7 @@ static void PauseProc(void) char_mess_map[GWPlayerCfg[i].group]++; } mg = omMgIndexGet(omcurovl); - if(mgInfoTbl[mg].control_mess[0] == 0 && mgInfoTbl[mg].control_mess[1] == 0) { + if(mgInfoTbl[mg].inst_mess[1] == 0 && mgInfoTbl[mg].inst_mess[2] == 0) { for(i=1; i<=20; i++) { ratio = sin(M_PI*(i*4.5f)/180.0); HuSprGrpPosSet(work.spr_grp[0], 288.0f, (ratio*290)-50.0f); @@ -3207,18 +3207,18 @@ static void PauseProc(void) HuWinAttrSet(window[2], 0x800); HuWinMesSet(window[2], 0x3300A1); } - if(mgInfoTbl[mg].control_mess[1]) { + if(mgInfoTbl[mg].inst_mess[2]) { s16 insert_idx; window[0] = HuWinExCreateStyled(-10000.0f, 140.0f, 412, 120, -1, 0); HuWinPriSet(window[0], 0); HuWinDispOn(window[0]); HuWinMesSpeedSet(window[0], 0); - HuWinMesSet(window[0], mgInfoTbl[mg].control_mess[0]); + HuWinMesSet(window[0], mgInfoTbl[mg].inst_mess[1]); window[1] = HuWinExCreateStyled(-10000.0f, 276.0f, 412, 120, -1, 0); HuWinPriSet(window[1], 0); HuWinDispOn(window[1]); HuWinMesSpeedSet(window[1], 0); - HuWinMesSet(window[1], mgInfoTbl[mg].control_mess[1]); + HuWinMesSet(window[1], mgInfoTbl[mg].inst_mess[2]); for(i=insert_idx=0; i<4; i++) { for(j=0; j Date: Fri, 15 Mar 2024 20:39:22 -0500 Subject: [PATCH 084/106] wip condor.c file --- src/REL/w03Dll/condor.c | 507 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 507 insertions(+) create mode 100644 src/REL/w03Dll/condor.c diff --git a/src/REL/w03Dll/condor.c b/src/REL/w03Dll/condor.c new file mode 100644 index 00000000..fc823ecd --- /dev/null +++ b/src/REL/w03Dll/condor.c @@ -0,0 +1,507 @@ +#include "REL/w03Dll.h" +#include "game/data.h" + + +//file is full of old names and old signatures...needs updating +//is also missing half the functions in this TU + +void fn_1_313C(void); +void fn_1_3218(void); +void fn_1_3304(void); +extern Process* lbl_1_bss_70; +extern s8 lbl_1_bss_7C; +extern s16 lbl_1_data_310; + +// #define MAKE_DATA_NUM(dir, file) (((dir) << 16)+(file)) +// #define MAKE_DIR_NUM(dir) ((dir) << 16) + +// #define DATA_NUM_LISTEND -1 + +s32 lbl_1_data_318[] = { + DATA_MAKE_NUM(0x0077, 0x0016), + DATA_MAKE_NUM(0x0077, 0x0017), + DATA_MAKE_NUM(0x0077, 0x0018), + DATA_MAKE_NUM(0x0077, 0x0019), + DATA_MAKE_NUM(0x0077, 0x001A), + DATA_NUM_LISTEND +}; + +void fn_1_3058(void) { + lbl_1_data_310 = fn_8006D9A4(0x770015, &lbl_1_data_318, 0); + fn_1_3304(); +} + +s32 fn_1_309C(void) { + fn_800688E8(0); + lbl_1_bss_70 = HuPrcChildCreate(fn_1_313C, 0x2003U, 0x2000U, 0, lbl_801D3ED0); + HuPrcDestructorSet2(lbl_1_bss_70, fn_1_3218); + + while (lbl_1_bss_70) { + HuPrcVSleep(); + } + + fn_800688E8(1); + return lbl_1_bss_7C; +} + +s32 fn_800747C4(s32, s32, s32); /* extern */ +extern s16 lbl_1_data_310; +extern f64 lbl_1_rodata_100; +extern f32 lbl_1_rodata_108; +extern f32 lbl_1_rodata_E8; +extern f64 lbl_1_rodata_F0; +extern f64 lbl_1_rodata_F8; + +void fn_1_3304(void) { + Point3d sp8; + f32 temp_f31; + s32 var_r31; + + + if (lbl_1_bss_0->unk1 != 0) { + var_r31 = fn_800745F0(0, 0x4000); + } else { + var_r31 = fn_800745F0(0, 0x8000); + } + var_r31 = fn_800747C4(0, var_r31, 0x02000000); + fn_80074210(0, var_r31, &sp8); + temp_f31 = lbl_1_rodata_E8; + sp8.x = sp8.x + (lbl_1_rodata_F0 * sin((lbl_1_rodata_F8 * temp_f31) / lbl_1_rodata_100)); + sp8.z = sp8.z + (lbl_1_rodata_F0 * cos((lbl_1_rodata_F8 * temp_f31) / lbl_1_rodata_100)); + sp8.y = 45.0f + sp8.y; + fn_8006F158(lbl_1_data_310, &sp8); + fn_8006E2B8(lbl_1_data_310, 2, 0x40000001); +} + +s32 fn_1_3478(s32); +void fn_1_3814(s32); +void fn_1_3968(s32); +void fn_1_3E88(s32); +void fn_1_3F5C(s32); +void fn_8005DAC4(f32, f32); +extern s8 lbl_1_bss_7C; +extern f32 lbl_1_rodata_D8; +extern f32 lbl_1_rodata_DC; +extern f32 lbl_1_rodata_E0; +extern f32 lbl_1_rodata_E4; + +void fn_1_313C(void) { + s32 temp_r31; + + temp_r31 = GWSystem.player_curr; + lbl_1_bss_7C = 0; + lbl_1_bss_0->unk3 = 1; + if (fn_1_3478(temp_r31) != 0) { + fn_8005DAC4(lbl_1_rodata_D8, lbl_1_rodata_DC); + fn_800884F4(0); + fn_1_3968(temp_r31); + fn_1_3E88(temp_r31); + fn_1_3F5C(temp_r31); + lbl_1_bss_7C = 1; + } + fn_8005DAC4(lbl_1_rodata_E0, lbl_1_rodata_E4); + fn_1_3814(temp_r31); + HuPrcEnd(); +} + +extern s32 lbl_1_bss_70; +extern s16 lbl_1_data_312; +extern s16 lbl_1_data_314; +extern s16 lbl_1_data_316; + +void fn_1_3218(void) { + if (lbl_1_data_316 != -1) { + HuWinKill(lbl_1_data_316); + lbl_1_data_316 = -1; + } + if (lbl_1_data_314 != -1) { + fn_8006DB90(lbl_1_data_314); + lbl_1_data_314 = -1; + } + if (lbl_1_data_312 != -1) { + fn_800637CC(GWSystem.player_curr, lbl_1_data_312); + lbl_1_data_312 = -1; + } + lbl_1_bss_0->unk3 = 0; + lbl_1_bss_70 = 0; +} + +s32 BoardWinChoiceGet(void); +void fn_1_4354(s32); +s32 fn_80061FDC(s32); +s32 fn_80063EC0(s32); +void fn_80063EEC(s32, s32); +void fn_8006E47C(s16, s32, f32, f32, s32); +s32 fn_8006E91C(s16); +void fn_80070390(s32, s32, s32, s32); +void fn_80070770(s32); +void fn_80072DA8(s32); +s32 fn_800747C4(s32, s16, s32); +extern s16 lbl_1_data_310; +extern f64 lbl_1_rodata_100; +extern f32 lbl_1_rodata_10C; +extern f32 lbl_1_rodata_110; +extern f32 lbl_1_rodata_114; +extern f32 lbl_1_rodata_118; +extern f32 lbl_1_rodata_11C; +extern f32 lbl_1_rodata_E8; +extern f64 lbl_1_rodata_F8; + +s32 fn_1_3478(s32 arg0) { + Point3d sp38; + Point3d sp2C; + Point3d sp20; + f32 sp1C; + f32 sp18; + Point3d sp14; + Point3d sp8; + + s16 temp_r28; + s32 temp_r3; + s32 var_r29; + s32 var_r30; + s32 temp; + s32 temp_r26; + f32 float_temp; + s32 i, j; + + sp14.x = 0.0f; + sp14.y = 150.0f; + sp14.z = 0.0f; + + sp8.x = -15.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + + fn_8005DB6C(lbl_1_data_310, &sp8, &sp14, lbl_1_rodata_114, lbl_1_rodata_118, 0x15); + temp_r28 = GWPlayer[arg0].space_curr; + fn_8006310C(arg0, &sp2C); + temp = fn_800747C4(0, temp_r28, 0x02000000); + fn_80074210(0, temp, &sp38); + PSVECSubtract(&sp38, &sp2C, &sp20); + float_temp = atan2(sp20.x, sp20.z) / 3.141592653589793f * 180.0f; + fn_80067C90(arg0, (float_temp), 0xF); + + while (fn_8006874C(arg0) == 0) { + HuPrcVSleep(); + } + + fn_80067B98(arg0); + HuAudFXPlay(0x447); + fn_8006E47C(lbl_1_data_310, 4, 0.0f, 5.0f, 0); + HuPrcSleep(6); + + while (fn_8006E91C(lbl_1_data_310) == 0) { + HuPrcVSleep(); + } + + fn_8006E47C(lbl_1_data_310, 1, 0.0f, 5.0f, 0x40000001); + temp_r26 = fn_80061FDC(arg0); + BoardWinCreate(2, 0x160010, 8); + fn_800706D0(temp_r26, 3); + BoardWinWait(); + if (fn_80063EC0(arg0) < 5) { + BoardWinCreate(2, 0x160013, 8); + BoardWinWait(); + BoardWinKill(); + return 0; + } + var_r29 = 0; + goto test; + while (1) { + fn_80070390(2, 0x160011, 8, 0); + fn_80070770(0x10); + + if (GWPlayer[arg0].com != 0) { + fn_1_4354(arg0); + } + + BoardWinWait(); + BoardWinKill(); + switch (BoardWinChoiceGet()) { + case 0: + var_r29 = 1; + break; + case 2: + fn_80072DA8(arg0); + break; + default: + case 1: + BoardWinCreate(2, 0x160014, 8); + BoardWinWait(); + BoardWinKill(); + return 0; + } + test: + if (var_r29 != 0) { + fn_80071034(0, 1, 1000); + for (j = 0; j < 5; j++) { + fn_80063EEC(arg0, -1); + HuAudFXPlay(14); + HuPrcSleep(6); + } + HuAudFXPlay(15); + BoardWinKill(); + return 1; + } + } +} + +extern s8 lbl_1_bss_7C; +extern f32 lbl_1_rodata_120; +extern f32 lbl_1_rodata_124; + +void fn_1_3814(s32 arg0) { + Point3d sp14; + Point3d sp8; + f32 temp; + + fn_8006E47C(lbl_1_data_310, 2, 0.0f, 10.0f, 0x40000001); + temp = (180.0f + fn_80063448(arg0)); + fn_80067C90(arg0, temp, 0xF); + + while (fn_8006874C(arg0) == 0) { + HuPrcVSleep(); + } + + fn_8005D284(1); + fn_8005D834(arg0); + if (lbl_1_bss_7C != 0) { + fn_80074210(0, GWPlayer[arg0].space_curr, &sp14); + fn_8006310C(arg0, &sp8); + fn_80066F44(arg0, &sp8, &sp14, 0x14); + while (GWPlayer[arg0].moving) { + HuPrcVSleep(); + } + } + fn_80067B98(arg0); + fn_8005E0C0(); +} + +void fn_1_3968(s32 arg0) { + s32 var_r29 = 0; + s32 var_r28 = 0; + s32 sp48[] = {0x005F0065, 0x001A0065, 0x006D0065, 0x008A0065, 0x00850065, 0x00110065, 0x000D0065, 0x00810065}; + Point3d sp3C; + Point3d sp30; + Point3d sp24; + Point3d sp18; + s32 sp10[2] = {0x00770013, 0x00770014}; + f32 spC; + s16 sp8; + + f32 temp_f30; + f32 temp_f28; + f32 temp_f31; + f32 temp_f27; + + s16 character; + + lbl_1_data_314 = fn_8006D9A4(sp10[lbl_1_bss_0->unk1], NULL, 0); + character = GWPlayer[arg0].character; + lbl_1_data_312 = fn_8006374C(arg0, sp48[character]); + + Hu3DModelObjPosGet(fn_8006DBD4(lbl_1_data_310), "itemhook_oya", &sp3C); + fn_8006310C(arg0, &sp30); + temp_f30 = fn_8005FBE8(&sp3C, &sp30); + PSVECSubtract(&sp3C, &sp30, &sp24); + PSVECNormalize(&sp24, &sp24); + PSVECScale(&sp24, &sp24, temp_f30 / lbl_1_rodata_108); + fn_80063A1C(arg0, 4, 0.0f, lbl_1_rodata_11C, 0); + HuPrcSleep(5); + + spC = fn_80063448(arg0); + temp_f27 = 180.0f + spC; + var_r29 = 0; + sp8 = 0; + temp_f28 = 40.0f; + + while (1) { + temp_f31 = __OSs16tof32(&sp8); + sp24.y = temp_f28 + (lbl_1_rodata_154 * (lbl_1_rodata_158 * (temp_f31 * temp_f31))); + PSVECAdd(&sp30, &sp24, &sp30); + temp_f30 = fn_8005FBE8(&sp3C, &sp30); + if (temp_f30 < lbl_1_rodata_11C) { + sp24.x = sp24.z = 0.0f; + sp30.x = sp3C.x; + sp30.z = sp3C.z; + } + + if (var_r29 == 0) { + if (sp3C.y < sp30.y) { + var_r29 = 1; + } + } else { + fn_8005FF28(&spC, temp_f27, lbl_1_rodata_15C); + fn_80063374(arg0, spC); + } + + if (sp30.y <= sp3C.y && var_r29 != 0) { + sp30.y = sp3C.y; + break; + } + fn_80062FA4(arg0, &sp30); + HuPrcVSleep(); + sp8 += 1; + } + + fn_80070DEC(1, 0x18, 0x7F, 0); + fn_80063040(arg0, 0.0f, 0.0f, 0.0f); + + + fn_8006F73C(lbl_1_data_310, "itemhook_oya", GetCurrentPlayerIndex(GetCurrentPlayer(arg0))); + fn_8006394C(arg0, lbl_1_data_312, 0x40000001); + HuAudFXPlay(0x44F); + fn_8006E47C(lbl_1_data_310, 5, 0.0f, lbl_1_rodata_11C, 0); + + sp18.x = -15.0f; + sp18.y = 180.0f; + sp18.z = 0.0f; + + fn_8005DB6C(lbl_1_data_310, &sp18, 0, lbl_1_rodata_160, lbl_1_rodata_118, 0x150); + + for (var_r28 = 0, sp8 = 0; ; sp8++) { + if (var_r28 == 0) { + if (sp8 == 0x78U) { + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, -1); + var_r28 = 1; + } + } else if (WipeStatGet() == 0) { + break; + } + HuPrcVSleep(); + } +} + + +void fn_8005D7B4(s32); /* extern */ +void fn_80062FA4(s32, Point3d*); /* extern */ +void fn_8006F800(s16); /* extern */ +extern f32 lbl_1_rodata_108; +extern f32 lbl_1_rodata_124; +extern f64 lbl_1_rodata_F0; + +void fn_1_48EC(s32); /* extern */ +void fn_1_4A9C(void); /* extern */ +void fn_1_5838(s32); /* extern */ +s32 fn_1_62D0(void); /* extern */ +void fn_80088638(s32); /* extern */ +void fn_80088790(s32, s32); /* extern */ +extern s8 lbl_1_bss_7D; + + +void fn_1_3E88(s32 arg0) { + lbl_1_bss_7D = 0; + fn_1_48EC(arg0); + fn_1_5838(arg0); + lbl_1_bss_7D = 1; + fn_80088638(arg0); + fn_80088790(arg0, 1); + WipeCreate(1, 0, 0x15); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + while (fn_1_62D0() != 3) { + HuPrcVSleep(); + } + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + fn_1_4A9C(); + fn_80071034(0, 0, 0x3E8); +} + +void fn_1_3F5C(s32 arg0) { + Mtx sp38; + Point3d sp2C; + Point3d sp20; + Point3d sp14; + Point3d sp8; + f32 temp_f31; + s16 temp_r28; + s32 var_r31; + s16 var_r30; + + if (lbl_1_bss_0->unk1 != 0) { + lbl_1_bss_0->unk1 = 0; + var_r30 = fn_800745F0(0, 0x8000); + } else { + lbl_1_bss_0->unk1 = 1; + var_r30 = fn_800745F0(0, 0x4000); + } + temp_r28 = fn_800747C4(0, var_r30, 0x02000000); + fn_8005D7B4(0); + fn_8006F800(lbl_1_data_310); + if (lbl_1_bss_0->unk1 != 0) { + var_r31 = fn_800745F0(0, 0x4000); + } else { + var_r31 = fn_800745F0(0, 0x8000); + } + var_r31 = fn_800747C4(0, var_r31, 0x02000000); + fn_80074210(0, var_r31, &sp8); + temp_f31 = 0.0f; + sp8.x = (sp8.x + (lbl_1_rodata_F0 * sin((lbl_1_rodata_F8 * temp_f31) / 180.0f))); + sp8.z = (sp8.z + (lbl_1_rodata_F0 * cos((lbl_1_rodata_F8 * temp_f31) / 180.0f))); + sp8.y = 45.0f + sp8.y; + fn_8006F158(lbl_1_data_310, &sp8); + fn_8006E2B8(lbl_1_data_310, 2, 0x40000001); + fn_8006E2B8(lbl_1_data_310, 1, 0x40000001); + fn_8006F0D4(lbl_1_data_310, 0.0f); + PSMTXIdentity(sp38); + fn_8006EFBC(lbl_1_data_310, sp38); + sp20.x = 0.0f; + sp20.y = 150.0f; + sp20.z = 0.0f; + sp14.x = -15.0f; + sp14.y = 0.0f; + sp14.z = 0.0f; + fn_8005DB6C(lbl_1_data_310, &sp14, &sp20, lbl_1_rodata_114, lbl_1_rodata_118, 1); + fn_80074210(0, temp_r28, &sp2C); + fn_80062FA4(arg0, &sp2C); + GWPlayer[arg0].space_curr = var_r30; + fn_80063374(arg0, lbl_1_rodata_124); + fn_80067B98(arg0); + HuPrcSleep(2); + fn_8005D7B4(1); + fn_8006E2B8(lbl_1_bss_C[2], 0, 0x40000001); + fn_8006E0B0(lbl_1_bss_C[2], 1, 0x64); + fn_8008853C(0); + HuPrcSleep(2); + fn_8008853C(1); + WipeCreate(1, 0, 0x15); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardWinCreate(2, 0x16000F, 8); + BoardWinWait(); + BoardWinKill(); +} + +void fn_800712C8(void); /* extern */ +void fn_80071328(void); /* extern */ + +void fn_1_4354(s32 arg0) { + s32 sp8; + s32 starPos; + s32 var_r30; + + var_r30 = 0; + starPos = GWSystem.star_pos; + + if (lbl_1_bss_0->unk1 != 0) { + if ((starPos == 1) || (starPos == 2) || (starPos == 3) || (starPos == 4)) { + var_r30 = 1; + } + } else if ((starPos == 0) || (starPos == 5) || (starPos == 6) || (starPos == 7)) { + var_r30 = 1; + } + if (fn_80063EC0(arg0) < 0x14) { + var_r30 = 1; + } + if (var_r30 != 0) { + fn_800712C8(); + return; + } + fn_80071328(); +} \ No newline at end of file From a0b77a412f5778ba67722a2b5b5eaf0180bd142f Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 16 Mar 2024 09:05:12 -0500 Subject: [PATCH 085/106] Finish instdll/main.c --- config/GMPE01_00/rels/instDll/symbols.txt | 291 +++++++-------- configure.py | 2 +- include/game/minigame_seq.h | 1 + include/game/window.h | 2 +- src/REL/instDll/main.c | 411 +++++++++++++++++++++- src/game/window.c | 4 +- 6 files changed, 559 insertions(+), 152 deletions(-) diff --git a/config/GMPE01_00/rels/instDll/symbols.txt b/config/GMPE01_00/rels/instDll/symbols.txt index 146e93b7..c4ead039 100644 --- a/config/GMPE01_00/rels/instDll/symbols.txt +++ b/config/GMPE01_00/rels/instDll/symbols.txt @@ -1,151 +1,152 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global ModuleProlog = .text:0x000000A0; // type:function size:0x8F4 -fn_1_994 = .text:0x00000994; // type:function size:0xE50 -fn_1_17E4 = .text:0x000017E4; // type:function size:0xA28 -fn_1_220C = .text:0x0000220C; // type:function size:0x5F8 -fn_1_2804 = .text:0x00002804; // type:function size:0x79C -fn_1_2FA0 = .text:0x00002FA0; // type:function size:0x11D4 -fn_1_4174 = .text:0x00004174; // type:function size:0x3B4 -fn_1_4528 = .text:0x00004528; // type:function size:0xB88 -fn_1_50B0 = .text:0x000050B0; // type:function size:0xAB4 -fn_1_5B64 = .text:0x00005B64; // type:function size:0x340 +fn_1_994 = .text:0x00000994; // type:function size:0xE50 scope:local +fn_1_17E4 = .text:0x000017E4; // type:function size:0xA28 scope:local +fn_1_220C = .text:0x0000220C; // type:function size:0x5F8 scope:local +fn_1_2804 = .text:0x00002804; // type:function size:0x79C scope:local +fn_1_2FA0 = .text:0x00002FA0; // type:function size:0x11D4 scope:local +fn_1_4174 = .text:0x00004174; // type:function size:0x3B4 scope:local +fn_1_4528 = .text:0x00004528; // type:function size:0xB88 scope:local +fn_1_50B0 = .text:0x000050B0; // type:function size:0xAB4 scope:local +fn_1_5B64 = .text:0x00005B64; // type:function size:0x340 scope:local fn_1_5EA4 = .text:0x00005EA4; // type:function size:0x4B8 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 data:double -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 data:double -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 data:double -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 data:double -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 data:double -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 data:double -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x8 data:double -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 data:double -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 data:double -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 data:double -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 data:double -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x8 data:double -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 data:double -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 data:double -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float -lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 data:double -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x8 data:double -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 data:double -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 data:double -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x8 data:double -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float -lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 data:float -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 data:float -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 data:float -lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 data:float -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float -lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 data:float -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float -lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 data:float -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 data:double -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float -lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 data:double -lbl_1_data_0 = .data:0x00000000; // type:object size:0x2 data:2byte -lbl_1_data_2 = .data:0x00000002; // type:object size:0x24 data:string -lbl_1_data_26 = .data:0x00000026; // type:object size:0x20 -lbl_1_data_46 = .data:0x00000046; // type:object size:0x8 -lbl_1_data_50 = .data:0x00000050; // type:object size:0x20 -lbl_1_data_70 = .data:0x00000070; // type:object size:0x20 -lbl_1_data_90 = .data:0x00000090; // type:object size:0x8 data:string -lbl_1_data_98 = .data:0x00000098; // type:object size:0x8 data:string -lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x8 data:string -lbl_1_data_A8 = .data:0x000000A8; // type:object size:0x8 data:string -lbl_1_data_B0 = .data:0x000000B0; // type:object size:0x10 -lbl_1_data_C0 = .data:0x000000C0; // type:object size:0x4 -lbl_1_data_C4 = .data:0x000000C4; // type:object size:0x48 -lbl_1_data_10C = .data:0x0000010C; // type:object size:0x18 -lbl_1_data_124 = .data:0x00000124; // type:object size:0x20 data:float -lbl_1_data_144 = .data:0x00000144; // type:object size:0x8 -lbl_1_data_14C = .data:0x0000014C; // type:object size:0x4 data:float -lbl_1_data_150 = .data:0x00000150; // type:object size:0x318 -lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x2 data:2byte -lbl_1_bss_6 = .bss:0x00000006; // type:object size:0x2 data:2byte -lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x1 data:byte -lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:float -lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x2 data:2byte -lbl_1_bss_12 = .bss:0x00000012; // type:object size:0x2 data:2byte -lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x2 data:2byte -lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte -lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x4 data:4byte -lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x8 data:float -lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x18 data:float -lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x18 data:float -lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 data:4byte -lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x4 data:4byte -lbl_1_bss_60 = .bss:0x00000060; // type:object size:0x4 data:4byte +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 scope:local data:double +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 scope:local data:double +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 scope:local data:double +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 scope:local data:double +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 scope:local data:double +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x8 scope:local data:double +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:double +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 scope:local data:double +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data:double +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x8 scope:local data:double +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 scope:local data:double +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 scope:local data:double +lbl_1_data_0 = .data:0x00000000; // type:object size:0x2 scope:local data:2byte +lbl_1_data_2 = .data:0x00000002; // type:object size:0x24 scope:local data:string +lbl_1_data_26 = .data:0x00000026; // type:object size:0x20 scope:local +lbl_1_data_46 = .data:0x00000046; // type:object size:0x8 scope:local +lbl_1_data_50 = .data:0x00000050; // type:object size:0x20 scope:local +lbl_1_data_70 = .data:0x00000070; // type:object size:0x20 scope:local +lbl_1_data_90 = .data:0x00000090; // type:object size:0x8 scope:local data:string +lbl_1_data_98 = .data:0x00000098; // type:object size:0x8 scope:local data:string +lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x8 scope:local data:string +lbl_1_data_A8 = .data:0x000000A8; // type:object size:0x8 scope:local data:string +lbl_1_data_B0 = .data:0x000000B0; // type:object size:0x10 scope:local +lbl_1_data_C0 = .data:0x000000C0; // type:object size:0x4 scope:local +lbl_1_data_C4 = .data:0x000000C4; // type:object size:0x48 scope:local +lbl_1_data_10C = .data:0x0000010C; // type:object size:0x18 scope:local +lbl_1_data_124 = .data:0x00000124; // type:object size:0x20 scope:local data:float +lbl_1_data_144 = .data:0x00000144; // type:object size:0x4 scope:local +lbl_1_data_148 = .data:0x00000148; // type:object size:0x4 scope:local +lbl_1_data_14C = .data:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_data_150 = .data:0x00000150; // type:object size:0x318 scope:local +lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_6 = .bss:0x00000006; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x1 scope:local data:byte +lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 scope:local data:float +lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_12 = .bss:0x00000012; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x8 scope:local data:float +lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x18 scope:local data:float +lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x18 scope:local data:float +lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_60 = .bss:0x00000060; // type:object size:0x4 scope:local data:4byte diff --git a/configure.py b/configure.py index e98b9dd6..8fab5fe5 100644 --- a/configure.py +++ b/configure.py @@ -789,7 +789,7 @@ config.libs = [ Rel('instDll', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/instDll/main.c"), + Object(Matching, "REL/instDll/main.c"), Object(NonMatching, "REL/instDll/font.c"), } ), diff --git a/include/game/minigame_seq.h b/include/game/minigame_seq.h index c8ae6be3..ba4a2322 100644 --- a/include/game/minigame_seq.h +++ b/include/game/minigame_seq.h @@ -42,6 +42,7 @@ s16 MGSeqCreate(s16 type, ...); u8 MGSeqStatGet(s16 id); void MGSeqPosSet(s16 id, float x, float y); void MGSeqParamSet(s16 id, s16 param1, s16 param2); +void MGSeqSprKill(SeqWork *work); void MGSeqKill(s16 id); void MGSeqKillAll(void); s32 MGSeqDoneCheck(void); diff --git a/include/game/window.h b/include/game/window.h index ba0aceac..7fbc09c8 100644 --- a/include/game/window.h +++ b/include/game/window.h @@ -109,7 +109,7 @@ s16 HuWinChoiceNumGet(s16 window); void HuWinChoiceDisable(s16 window, s16 choice); s16 HuWinChoiceNowGet(s16 window); void HuWinMesWait(s16 window); -void HuWinAnimSet(s16 window, AnimData *anim, s16 bank, float x, float y); +s16 HuWinAnimSet(s16 window, AnimData *anim, s16 bank, float x, float y); s16 HuWinSprSet(s16 window, s16 sprite, float x, float y); void HuWinSprPosSet(s16 window, s16 index, float x, float y); void HuWinSprPriSet(s16 window, s16 index, s16 prio); diff --git a/src/REL/instDll/main.c b/src/REL/instDll/main.c index b5ada221..4ba2b989 100644 --- a/src/REL/instDll/main.c +++ b/src/REL/instDll/main.c @@ -746,28 +746,433 @@ static void fn_1_2804(void) } } +static float lbl_1_data_124[] = { + 420, + 70, + 488, + 186, + 476, + 242, + 400, + 292 +}; + +s32 fn_1_5EA4(SeqWork *work, char *mess, s16 jp_flag); + static void fn_1_2FA0(void) { + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f27; + s16 temp_r31; + s16 temp_r30; + char *temp_r29; + AnimData *temp_r28; + s16 temp_r27; + s16 temp_r26; + s16 temp_r25; + s16 temp_r24; + s16 temp_r23; + s16 temp_r22; + u16 temp_r21; + char *temp_r20; + s16 temp_r17; + s16 spA; + s16 sp8; + s16 spC[2]; + s16 sp10[4]; + SeqWork work; + temp_r21 = 0; + for(temp_r31=0; temp_r31<16; temp_r31++) { + work.sprite[temp_r31] = work.spr_grp[temp_r31] = -1; + } + temp_r20 = MessData_MesPtrGet(messDataPtr, mgInfoTbl[lbl_1_bss_14].name_mess); + temp_r29 = temp_r20; + temp_r31 = 0; + temp_r26 = 0; + while(1) { + if(*temp_r29 == 0 || *temp_r29 == 10) { + if(*temp_r29 == 0) { + temp_r31 = 1; + } + *temp_r29 = 0; + fn_1_5EA4(&work, temp_r20, (lbl_1_bss_8 == 0) ? 1 : 0); + HuSprGrpPosSet(work.spr_grp[temp_r26], 288.0f, 240.0f); + spC[temp_r26] = work.alt_word_len; + temp_r26++; + if(temp_r31) { + break; + } + temp_r20 = temp_r29+1; + } + + temp_r29++; + } + if(temp_r26 == 1) { + temp_r22 = spC[0]; + temp_r28 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_INST, 18)); + temp_f29 = ((576.0f-temp_r22)-24.0f)-16.0f+227.0f; + temp_f28 = 78; + temp_f27 = 0.5f; + } else { + temp_r22 = (spC[0] > spC[1]) ? spC[0] : spC[1]; + temp_r28 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_INST, 15)); + temp_f29 = ((576.0f-temp_r22)-24.0f)-16.0f+172.0f; + temp_f28 = 84; + temp_f27 = 1.0f; + } + temp_r25 = HuSprGrpCreate(1); + temp_r17 = HuSprCreate(temp_r28, 0, 0); + HuSprGrpMemberSet(temp_r25, 0, temp_r17); + HuSprPriSet(temp_r25, 0, 100); + HuSprGrpPosSet(temp_r25, 10000, 70); + HuSprScaleSet(temp_r25, 0, 1.0f, temp_f27); + for(temp_r31=0; temp_r31 0.0f) { + if(temp_f30 <= 20.0f) { + temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+lbl_1_data_124[2]; + HuSprGrpPosSet(temp_r24, temp_f31, 186.0f); + temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+(lbl_1_data_124[2]-88.0f); + HuWinPosSet(sp10[0], 16.0f+temp_f31, 168.0f); + } + } + temp_f30 = temp_r31-6; + if(temp_f30 > 0.0f) { + if(temp_f30 <= 20.0f) { + temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+lbl_1_data_124[4]; + HuSprGrpPosSet(temp_r23, temp_f31, 242.0f); + temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+(lbl_1_data_124[4]-100.0f); + HuWinPosSet(sp10[1], 16.0f+temp_f31, 224.0f); + } + } + temp_f30 = temp_r31-9; + if(temp_f30 > 0.0f) { + if(temp_f30 <= 20.0f) { + temp_f31 = 300.0*cos(M_PI*(4.5f*temp_f30)/180.0)+(lbl_1_data_124[6]-217.0f); + HuWinPosSet(sp10[2], 16.0f+temp_f31, 274.0f); + } + } + HuPrcVSleep(); + } + while(lbl_1_data_0 != 3) { + if(temp_r21 != lbl_1_bss_6) { + temp_f31 = 16.0f+(lbl_1_data_124[6]-217.0f); + HuWinMesSet(temp_r27, 0x240002+lbl_1_bss_10+temp_r21); + temp_r21 = lbl_1_bss_6; + if(lbl_1_bss_6 == 1) { + if(mgInfoTbl[lbl_1_bss_14].inst_mess[2]) { + HuWinMesSet(sp10[2], 0x240002+lbl_1_bss_10+lbl_1_bss_6); + } else { + HuWinMesSet(sp10[2], 0x240006+lbl_1_bss_10); + } + } else { + HuWinMesSet(sp10[2], 0x240002+lbl_1_bss_10+lbl_1_bss_6); + } + for(temp_r31=0; temp_r31<=10; temp_r31++) { + HuWinPosSet(temp_r27, 30.0*sin(M_PI*(temp_r31*9.0f)/180.0)+temp_f31, 200.0*(1.0-cos(M_PI*(temp_r31*9.0f)/180.0))+274.0); + HuPrcVSleep(); + } + } + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<20; temp_r31++) { + temp_f30 = 1.0-cos(M_PI*(temp_r31*4.5f)/180.0); + temp_f31 = temp_f29+(500.0f*temp_f30); + HuSprGrpPosSet(temp_r25, temp_f31, temp_f28); + temp_f31 = ((576.0f-(work.alt_word_len/2))-24.0f)+(500.0f*temp_f30); + for(temp_r30=0; temp_r30prio-1, bank); - HuWinSprSet(window, sprite, x, y); + return HuWinSprSet(window, sprite, x, y); } s16 HuWinSprSet(s16 window, s16 sprite, float x, float y) { From 303ea128948ca9eab79fda7da5a26a0ca44cc970 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Sat, 16 Mar 2024 08:41:23 -0700 Subject: [PATCH 086/106] Matched REL/option --- config/GMPE01_00/rels/option/splits.txt | 4 +- config/GMPE01_00/rels/option/symbols.txt | 632 ++++----- configure.py | 18 +- include/REL/option.h | 80 ++ src/REL/option/camera.c | 237 ++++ src/REL/option/guide.c | 230 +++ src/REL/option/record.c | 794 +++++++++++ src/REL/option/room.c | 246 ++++ src/REL/option/rumble.c | 336 +++++ src/REL/option/scene.c | 206 +++ src/REL/option/sound.c | 1654 ++++++++++++++++++++++ src/REL/option/state.c | 126 ++ src/REL/option/window.c | 148 ++ src/game/board/battle.c | 64 +- 14 files changed, 4416 insertions(+), 359 deletions(-) create mode 100755 include/REL/option.h create mode 100755 src/REL/option/camera.c create mode 100755 src/REL/option/guide.c create mode 100755 src/REL/option/record.c create mode 100755 src/REL/option/room.c create mode 100755 src/REL/option/rumble.c create mode 100755 src/REL/option/scene.c create mode 100755 src/REL/option/sound.c create mode 100755 src/REL/option/state.c create mode 100755 src/REL/option/window.c diff --git a/config/GMPE01_00/rels/option/splits.txt b/config/GMPE01_00/rels/option/splits.txt index 79b7fd34..76104ddb 100644 --- a/config/GMPE01_00/rels/option/splits.txt +++ b/config/GMPE01_00/rels/option/splits.txt @@ -51,11 +51,11 @@ REL/option/sound.c: .bss start:0x00000038 end:0x00000040 REL/option/record.c: - .text start:0x000080E4 end:0x0000A3B0 + .text start:0x000080E4 end:0x0000A44C .rodata start:0x000013C0 end:0x000019D0 .data start:0x00000210 end:0x00000254 .bss start:0x00000040 end:0x00000044 REL/option/window.c: - .text start:0x0000A3B0 end:0x0000A9AC + .text start:0x0000A44C end:0x0000A9AC .rodata start:0x000019D0 end:0x000019F0 diff --git a/config/GMPE01_00/rels/option/symbols.txt b/config/GMPE01_00/rels/option/symbols.txt index 7be52769..d5ad45af 100644 --- a/config/GMPE01_00/rels/option/symbols.txt +++ b/config/GMPE01_00/rels/option/symbols.txt @@ -2,14 +2,14 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global ModuleProlog = .text:0x000000A0; // type:function size:0xC0 fn_1_160 = .text:0x00000160; // type:function size:0x110 -fn_1_270 = .text:0x00000270; // type:function size:0xE4 -fn_1_354 = .text:0x00000354; // type:function size:0x114 -fn_1_468 = .text:0x00000468; // type:function size:0xE8 +fn_1_270 = .text:0x00000270; // type:function size:0xE4 scope:local +fn_1_354 = .text:0x00000354; // type:function size:0x114 scope:local +fn_1_468 = .text:0x00000468; // type:function size:0xE8 scope:local fn_1_550 = .text:0x00000550; // type:function size:0x34 fn_1_584 = .text:0x00000584; // type:function size:0x34 fn_1_5B8 = .text:0x000005B8; // type:function size:0x34 -fn_1_5EC = .text:0x000005EC; // type:function size:0xFC -fn_1_6E8 = .text:0x000006E8; // type:function size:0x110 +fn_1_5EC = .text:0x000005EC; // type:function size:0xFC scope:local +fn_1_6E8 = .text:0x000006E8; // type:function size:0x110 scope:local fn_1_7F8 = .text:0x000007F8; // type:function size:0x244 fn_1_A3C = .text:0x00000A3C; // type:function size:0x30 fn_1_A6C = .text:0x00000A6C; // type:function size:0x84 @@ -17,360 +17,360 @@ fn_1_AF0 = .text:0x00000AF0; // type:function size:0x84 fn_1_B74 = .text:0x00000B74; // type:function size:0x84 fn_1_BF8 = .text:0x00000BF8; // type:function size:0x30 fn_1_C28 = .text:0x00000C28; // type:function size:0x30 -fn_1_C58 = .text:0x00000C58; // type:function size:0x30 +fn_1_C58 = .text:0x00000C58; // type:function size:0x30 scope:local fn_1_C88 = .text:0x00000C88; // type:function size:0x30 fn_1_CB8 = .text:0x00000CB8; // type:function size:0x8C -fn_1_D44 = .text:0x00000D44; // type:function size:0x28 -fn_1_D6C = .text:0x00000D6C; // type:function size:0x578 -fn_1_12E4 = .text:0x000012E4; // type:function size:0x200 -fn_1_14E4 = .text:0x000014E4; // type:function size:0xC0 +fn_1_D44 = .text:0x00000D44; // type:function size:0x28 scope:local +fn_1_D6C = .text:0x00000D6C; // type:function size:0x578 scope:local +fn_1_12E4 = .text:0x000012E4; // type:function size:0x200 scope:local +fn_1_14E4 = .text:0x000014E4; // type:function size:0xC0 scope:local fn_1_15A4 = .text:0x000015A4; // type:function size:0x1F4 fn_1_1798 = .text:0x00001798; // type:function size:0xAC -fn_1_1844 = .text:0x00001844; // type:function size:0x1E8 +fn_1_1844 = .text:0x00001844; // type:function size:0x1E8 scope:local fn_1_1A2C = .text:0x00001A2C; // type:function size:0x44 fn_1_1A70 = .text:0x00001A70; // type:function size:0x1C -fn_1_1A8C = .text:0x00001A8C; // type:function size:0x5FC -fn_1_2088 = .text:0x00002088; // type:function size:0x88 -fn_1_2110 = .text:0x00002110; // type:function size:0x34 -fn_1_2144 = .text:0x00002144; // type:function size:0x80 -fn_1_21C4 = .text:0x000021C4; // type:function size:0x34 +fn_1_1A8C = .text:0x00001A8C; // type:function size:0x5FC scope:local +fn_1_2088 = .text:0x00002088; // type:function size:0x88 scope:local +fn_1_2110 = .text:0x00002110; // type:function size:0x34 scope:local +fn_1_2144 = .text:0x00002144; // type:function size:0x80 scope:local +fn_1_21C4 = .text:0x000021C4; // type:function size:0x34 scope:local fn_1_21F8 = .text:0x000021F8; // type:function size:0x224 fn_1_241C = .text:0x0000241C; // type:function size:0x8C -fn_1_24A8 = .text:0x000024A8; // type:function size:0x44 -fn_1_24EC = .text:0x000024EC; // type:function size:0x1C +fn_1_24A8 = .text:0x000024A8; // type:function size:0x44 scope:local +fn_1_24EC = .text:0x000024EC; // type:function size:0x1C scope:local fn_1_2508 = .text:0x00002508; // type:function size:0xA4 -fn_1_25AC = .text:0x000025AC; // type:function size:0x46C -fn_1_2A18 = .text:0x00002A18; // type:function size:0x2E8 -fn_1_2D00 = .text:0x00002D00; // type:function size:0x104 +fn_1_25AC = .text:0x000025AC; // type:function size:0x46C scope:local +fn_1_2A18 = .text:0x00002A18; // type:function size:0x2E8 scope:local +fn_1_2D00 = .text:0x00002D00; // type:function size:0x104 scope:local fn_1_2E04 = .text:0x00002E04; // type:function size:0x148 fn_1_2F4C = .text:0x00002F4C; // type:function size:0x64 -fn_1_2FB0 = .text:0x00002FB0; // type:function size:0x1A8 +fn_1_2FB0 = .text:0x00002FB0; // type:function size:0x1A8 scope:local fn_1_3158 = .text:0x00003158; // type:function size:0xD4 fn_1_322C = .text:0x0000322C; // type:function size:0x64 fn_1_3290 = .text:0x00003290; // type:function size:0x44 fn_1_32D4 = .text:0x000032D4; // type:function size:0x1C -fn_1_32F0 = .text:0x000032F0; // type:function size:0x4BC -fn_1_37AC = .text:0x000037AC; // type:function size:0xBC -fn_1_3868 = .text:0x00003868; // type:function size:0x54 -fn_1_38BC = .text:0x000038BC; // type:function size:0xD0 -fn_1_398C = .text:0x0000398C; // type:function size:0x54 -fn_1_39E0 = .text:0x000039E0; // type:function size:0x128 -fn_1_3B08 = .text:0x00003B08; // type:function size:0x84 -fn_1_3B8C = .text:0x00003B8C; // type:function size:0x54 -fn_1_3BE0 = .text:0x00003BE0; // type:function size:0x8C -fn_1_3C6C = .text:0x00003C6C; // type:function size:0x94 -fn_1_3D00 = .text:0x00003D00; // type:function size:0x54 +fn_1_32F0 = .text:0x000032F0; // type:function size:0x4BC scope:local +fn_1_37AC = .text:0x000037AC; // type:function size:0xBC scope:local +fn_1_3868 = .text:0x00003868; // type:function size:0x54 scope:local +fn_1_38BC = .text:0x000038BC; // type:function size:0xD0 scope:local +fn_1_398C = .text:0x0000398C; // type:function size:0x54 scope:local +fn_1_39E0 = .text:0x000039E0; // type:function size:0x128 scope:local +fn_1_3B08 = .text:0x00003B08; // type:function size:0x84 scope:local +fn_1_3B8C = .text:0x00003B8C; // type:function size:0x54 scope:local +fn_1_3BE0 = .text:0x00003BE0; // type:function size:0x8C scope:local +fn_1_3C6C = .text:0x00003C6C; // type:function size:0x94 scope:local +fn_1_3D00 = .text:0x00003D00; // type:function size:0x54 scope:local fn_1_3D54 = .text:0x00003D54; // type:function size:0xC8 fn_1_3E1C = .text:0x00003E1C; // type:function size:0xB4 fn_1_3ED0 = .text:0x00003ED0; // type:function size:0x58 -fn_1_3F28 = .text:0x00003F28; // type:function size:0xAC -fn_1_3FD4 = .text:0x00003FD4; // type:function size:0x54 +fn_1_3F28 = .text:0x00003F28; // type:function size:0xAC scope:local +fn_1_3FD4 = .text:0x00003FD4; // type:function size:0x54 scope:local fn_1_4028 = .text:0x00004028; // type:function size:0x2B4 fn_1_42DC = .text:0x000042DC; // type:function size:0xAC fn_1_4388 = .text:0x00004388; // type:function size:0x44 fn_1_43CC = .text:0x000043CC; // type:function size:0x1C -fn_1_43E8 = .text:0x000043E8; // type:function size:0x270 -fn_1_4658 = .text:0x00004658; // type:function size:0x424 -fn_1_4A7C = .text:0x00004A7C; // type:function size:0x3D4 -fn_1_4E50 = .text:0x00004E50; // type:function size:0x93C -fn_1_578C = .text:0x0000578C; // type:function size:0x8B8 -fn_1_6044 = .text:0x00006044; // type:function size:0xF8 -fn_1_613C = .text:0x0000613C; // type:function size:0x64 -fn_1_61A0 = .text:0x000061A0; // type:function size:0xFC -fn_1_629C = .text:0x0000629C; // type:function size:0x54 -fn_1_62F0 = .text:0x000062F0; // type:function size:0xFC -fn_1_63EC = .text:0x000063EC; // type:function size:0x54 -fn_1_6440 = .text:0x00006440; // type:function size:0x94 -fn_1_64D4 = .text:0x000064D4; // type:function size:0x54 -fn_1_6528 = .text:0x00006528; // type:function size:0x118 -fn_1_6640 = .text:0x00006640; // type:function size:0x54 -fn_1_6694 = .text:0x00006694; // type:function size:0x38 -fn_1_66CC = .text:0x000066CC; // type:function size:0x38 -fn_1_6704 = .text:0x00006704; // type:function size:0xC4 -fn_1_67C8 = .text:0x000067C8; // type:function size:0x60 -fn_1_6828 = .text:0x00006828; // type:function size:0x1E4 -fn_1_6A0C = .text:0x00006A0C; // type:function size:0x74 -fn_1_6A80 = .text:0x00006A80; // type:function size:0x1DC -fn_1_6C5C = .text:0x00006C5C; // type:function size:0x74 -fn_1_6CD0 = .text:0x00006CD0; // type:function size:0x1D4 -fn_1_6EA4 = .text:0x00006EA4; // type:function size:0xA4 -fn_1_6F48 = .text:0x00006F48; // type:function size:0x1D4 -fn_1_711C = .text:0x0000711C; // type:function size:0xA4 -fn_1_71C0 = .text:0x000071C0; // type:function size:0xE8 -fn_1_72A8 = .text:0x000072A8; // type:function size:0x68 -fn_1_7310 = .text:0x00007310; // type:function size:0x400 -fn_1_7710 = .text:0x00007710; // type:function size:0x190 -fn_1_78A0 = .text:0x000078A0; // type:function size:0x60 -fn_1_7900 = .text:0x00007900; // type:function size:0x3C -fn_1_793C = .text:0x0000793C; // type:function size:0x5C4 -fn_1_7F00 = .text:0x00007F00; // type:function size:0x148 -fn_1_8048 = .text:0x00008048; // type:function size:0x9C +fn_1_43E8 = .text:0x000043E8; // type:function size:0x270 scope:local +fn_1_4658 = .text:0x00004658; // type:function size:0x424 scope:local +fn_1_4A7C = .text:0x00004A7C; // type:function size:0x3D4 scope:local +fn_1_4E50 = .text:0x00004E50; // type:function size:0x93C scope:local +fn_1_578C = .text:0x0000578C; // type:function size:0x8B8 scope:local +fn_1_6044 = .text:0x00006044; // type:function size:0xF8 scope:local +fn_1_613C = .text:0x0000613C; // type:function size:0x64 scope:local +fn_1_61A0 = .text:0x000061A0; // type:function size:0xFC scope:local +fn_1_629C = .text:0x0000629C; // type:function size:0x54 scope:local +fn_1_62F0 = .text:0x000062F0; // type:function size:0xFC scope:local +fn_1_63EC = .text:0x000063EC; // type:function size:0x54 scope:local +fn_1_6440 = .text:0x00006440; // type:function size:0x94 scope:local +fn_1_64D4 = .text:0x000064D4; // type:function size:0x54 scope:local +fn_1_6528 = .text:0x00006528; // type:function size:0x118 scope:local +fn_1_6640 = .text:0x00006640; // type:function size:0x54 scope:local +fn_1_6694 = .text:0x00006694; // type:function size:0x38 scope:local +fn_1_66CC = .text:0x000066CC; // type:function size:0x38 scope:local +fn_1_6704 = .text:0x00006704; // type:function size:0xC4 scope:local +fn_1_67C8 = .text:0x000067C8; // type:function size:0x60 scope:local +fn_1_6828 = .text:0x00006828; // type:function size:0x1E4 scope:local +fn_1_6A0C = .text:0x00006A0C; // type:function size:0x74 scope:local +fn_1_6A80 = .text:0x00006A80; // type:function size:0x1DC scope:local +fn_1_6C5C = .text:0x00006C5C; // type:function size:0x74 scope:local +fn_1_6CD0 = .text:0x00006CD0; // type:function size:0x1D4 scope:local +fn_1_6EA4 = .text:0x00006EA4; // type:function size:0xA4 scope:local +fn_1_6F48 = .text:0x00006F48; // type:function size:0x1D4 scope:local +fn_1_711C = .text:0x0000711C; // type:function size:0xA4 scope:local +fn_1_71C0 = .text:0x000071C0; // type:function size:0xE8 scope:local +fn_1_72A8 = .text:0x000072A8; // type:function size:0x68 scope:local +fn_1_7310 = .text:0x00007310; // type:function size:0x400 scope:local +fn_1_7710 = .text:0x00007710; // type:function size:0x190 scope:local +fn_1_78A0 = .text:0x000078A0; // type:function size:0x60 scope:local +fn_1_7900 = .text:0x00007900; // type:function size:0x3C scope:local +fn_1_793C = .text:0x0000793C; // type:function size:0x5C4 scope:local +fn_1_7F00 = .text:0x00007F00; // type:function size:0x148 scope:local +fn_1_8048 = .text:0x00008048; // type:function size:0x9C scope:local fn_1_80E4 = .text:0x000080E4; // type:function size:0x178 fn_1_825C = .text:0x0000825C; // type:function size:0x54 fn_1_82B0 = .text:0x000082B0; // type:function size:0x44 fn_1_82F4 = .text:0x000082F4; // type:function size:0x1C -fn_1_8310 = .text:0x00008310; // type:function size:0x778 -fn_1_8A88 = .text:0x00008A88; // type:function size:0xD0 -fn_1_8B58 = .text:0x00008B58; // type:function size:0x54 -fn_1_8BAC = .text:0x00008BAC; // type:function size:0xD8 -fn_1_8C84 = .text:0x00008C84; // type:function size:0xFC -fn_1_8D80 = .text:0x00008D80; // type:function size:0x54 -fn_1_8DD4 = .text:0x00008DD4; // type:function size:0xC4 -fn_1_8E98 = .text:0x00008E98; // type:function size:0x60 -fn_1_8EF8 = .text:0x00008EF8; // type:function size:0x40 -fn_1_8F38 = .text:0x00008F38; // type:function size:0x77C -fn_1_96B4 = .text:0x000096B4; // type:function size:0x9C -fn_1_9750 = .text:0x00009750; // type:function size:0x344 -fn_1_9A94 = .text:0x00009A94; // type:function size:0x7C -fn_1_9B10 = .text:0x00009B10; // type:function size:0x8A0 -fn_1_A3B0 = .text:0x0000A3B0; // type:function size:0x9C +fn_1_8310 = .text:0x00008310; // type:function size:0x778 scope:local +fn_1_8A88 = .text:0x00008A88; // type:function size:0xD0 scope:local +fn_1_8B58 = .text:0x00008B58; // type:function size:0x54 scope:local +fn_1_8BAC = .text:0x00008BAC; // type:function size:0xD8 scope:local +fn_1_8C84 = .text:0x00008C84; // type:function size:0xFC scope:local +fn_1_8D80 = .text:0x00008D80; // type:function size:0x54 scope:local +fn_1_8DD4 = .text:0x00008DD4; // type:function size:0xC4 scope:local +fn_1_8E98 = .text:0x00008E98; // type:function size:0x60 scope:local +fn_1_8EF8 = .text:0x00008EF8; // type:function size:0x40 scope:local +fn_1_8F38 = .text:0x00008F38; // type:function size:0x77C scope:local +fn_1_96B4 = .text:0x000096B4; // type:function size:0x9C scope:local +fn_1_9750 = .text:0x00009750; // type:function size:0x344 scope:local +fn_1_9A94 = .text:0x00009A94; // type:function size:0x7C scope:local +fn_1_9B10 = .text:0x00009B10; // type:function size:0x8A0 scope:local +fn_1_A3B0 = .text:0x0000A3B0; // type:function size:0x9C scope:local fn_1_A44C = .text:0x0000A44C; // type:function size:0x260 fn_1_A6AC = .text:0x0000A6AC; // type:function size:0x40 fn_1_A6EC = .text:0x0000A6EC; // type:function size:0x18 fn_1_A704 = .text:0x0000A704; // type:function size:0x18 fn_1_A71C = .text:0x0000A71C; // type:function size:0x54 -fn_1_A770 = .text:0x0000A770; // type:function size:0x40 +fn_1_A770 = .text:0x0000A770; // type:function size:0x40 scope:local fn_1_A7B0 = .text:0x0000A7B0; // type:function size:0x40 fn_1_A7F0 = .text:0x0000A7F0; // type:function size:0x38 fn_1_A828 = .text:0x0000A828; // type:function size:0x38 -fn_1_A860 = .text:0x0000A860; // type:function size:0x20 +fn_1_A860 = .text:0x0000A860; // type:function size:0x20 scope:local fn_1_A880 = .text:0x0000A880; // type:function size:0x24 -fn_1_A8A4 = .text:0x0000A8A4; // type:function size:0x108 +fn_1_A8A4 = .text:0x0000A8A4; // type:function size:0x108 scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 data:double -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 data:double -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 data:double -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 data:double -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 data:double -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 data:double -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 data:float -lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 data:float -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0xC data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0xC -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0xC -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x8 data:double -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 data:double -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 data:double -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 data:double -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 data:double -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x8 data:double -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 data:double -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float -lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float -lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 data:float -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 data:float -lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 data:float -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 data:float -lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 data:float -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x8 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x38 -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8C0 -lbl_1_rodata_AA0 = .rodata:0x00000AA0; // type:object size:0x30 -lbl_1_rodata_AD0 = .rodata:0x00000AD0; // type:object size:0x780 -lbl_1_rodata_1250 = .rodata:0x00001250; // type:object size:0x4 data:float -lbl_1_rodata_1254 = .rodata:0x00001254; // type:object size:0x4 data:float -lbl_1_rodata_1258 = .rodata:0x00001258; // type:object size:0x4 data:float -lbl_1_rodata_125C = .rodata:0x0000125C; // type:object size:0x4 data:float -lbl_1_rodata_1260 = .rodata:0x00001260; // type:object size:0x4 data:float -lbl_1_rodata_1264 = .rodata:0x00001264; // type:object size:0x4 data:float -lbl_1_rodata_1268 = .rodata:0x00001268; // type:object size:0x4 data:float -lbl_1_rodata_1270 = .rodata:0x00001270; // type:object size:0x8 data:double -lbl_1_rodata_1278 = .rodata:0x00001278; // type:object size:0x8 -lbl_1_rodata_1280 = .rodata:0x00001280; // type:object size:0x8 -lbl_1_rodata_1288 = .rodata:0x00001288; // type:object size:0x8 -lbl_1_rodata_1290 = .rodata:0x00001290; // type:object size:0x4 data:float -lbl_1_rodata_1294 = .rodata:0x00001294; // type:object size:0x4 data:float -lbl_1_rodata_1298 = .rodata:0x00001298; // type:object size:0x4 data:float -lbl_1_rodata_129C = .rodata:0x0000129C; // type:object size:0x4 data:float -lbl_1_rodata_12A0 = .rodata:0x000012A0; // type:object size:0x4 data:float -lbl_1_rodata_12A4 = .rodata:0x000012A4; // type:object size:0x4 data:float -lbl_1_rodata_12A8 = .rodata:0x000012A8; // type:object size:0x4 data:float -lbl_1_rodata_12AC = .rodata:0x000012AC; // type:object size:0x4 data:float -lbl_1_rodata_12B0 = .rodata:0x000012B0; // type:object size:0x4 data:float -lbl_1_rodata_12B4 = .rodata:0x000012B4; // type:object size:0x4 data:float -lbl_1_rodata_12B8 = .rodata:0x000012B8; // type:object size:0x4 data:float -lbl_1_rodata_12BC = .rodata:0x000012BC; // type:object size:0x4 data:float -lbl_1_rodata_12C0 = .rodata:0x000012C0; // type:object size:0x4 data:float -lbl_1_rodata_12C4 = .rodata:0x000012C4; // type:object size:0x4 data:float -lbl_1_rodata_12C8 = .rodata:0x000012C8; // type:object size:0x4 data:float -lbl_1_rodata_12CC = .rodata:0x000012CC; // type:object size:0x4 data:float -lbl_1_rodata_12D0 = .rodata:0x000012D0; // type:object size:0x24 -lbl_1_rodata_12F4 = .rodata:0x000012F4; // type:object size:0x4 data:float -lbl_1_rodata_12F8 = .rodata:0x000012F8; // type:object size:0x4 data:float -lbl_1_rodata_12FC = .rodata:0x000012FC; // type:object size:0x4 data:float -lbl_1_rodata_1300 = .rodata:0x00001300; // type:object size:0x4 data:float -lbl_1_rodata_1304 = .rodata:0x00001304; // type:object size:0x4 data:float -lbl_1_rodata_1308 = .rodata:0x00001308; // type:object size:0x1C -lbl_1_rodata_1324 = .rodata:0x00001324; // type:object size:0x4 data:float -lbl_1_rodata_1328 = .rodata:0x00001328; // type:object size:0x4 data:float -lbl_1_rodata_132C = .rodata:0x0000132C; // type:object size:0x4 data:float -lbl_1_rodata_1330 = .rodata:0x00001330; // type:object size:0x14 -lbl_1_rodata_1344 = .rodata:0x00001344; // type:object size:0x4 data:float -lbl_1_rodata_1348 = .rodata:0x00001348; // type:object size:0x4 data:float -lbl_1_rodata_134C = .rodata:0x0000134C; // type:object size:0x4 -lbl_1_rodata_1350 = .rodata:0x00001350; // type:object size:0x8 -lbl_1_rodata_1358 = .rodata:0x00001358; // type:object size:0x8 data:double -lbl_1_rodata_1360 = .rodata:0x00001360; // type:object size:0x8 data:double -lbl_1_rodata_1368 = .rodata:0x00001368; // type:object size:0x4 data:float -lbl_1_rodata_136C = .rodata:0x0000136C; // type:object size:0x4 data:float -lbl_1_rodata_1370 = .rodata:0x00001370; // type:object size:0x8 data:double -lbl_1_rodata_1378 = .rodata:0x00001378; // type:object size:0x8 data:double -lbl_1_rodata_1380 = .rodata:0x00001380; // type:object size:0x4 data:float -lbl_1_rodata_1384 = .rodata:0x00001384; // type:object size:0x4 data:float -lbl_1_rodata_1388 = .rodata:0x00001388; // type:object size:0x8 data:double -lbl_1_rodata_1390 = .rodata:0x00001390; // type:object size:0x4 data:float -lbl_1_rodata_1394 = .rodata:0x00001394; // type:object size:0x4 data:float -lbl_1_rodata_1398 = .rodata:0x00001398; // type:object size:0x4 data:float -lbl_1_rodata_139C = .rodata:0x0000139C; // type:object size:0x4 data:float -lbl_1_rodata_13A0 = .rodata:0x000013A0; // type:object size:0x8 data:double -lbl_1_rodata_13A8 = .rodata:0x000013A8; // type:object size:0x8 data:double -lbl_1_rodata_13B0 = .rodata:0x000013B0; // type:object size:0x4 data:float -lbl_1_rodata_13B4 = .rodata:0x000013B4; // type:object size:0x4 data:float -lbl_1_rodata_13B8 = .rodata:0x000013B8; // type:object size:0x8 data:float -lbl_1_rodata_13C0 = .rodata:0x000013C0; // type:object size:0x18 -lbl_1_rodata_13D8 = .rodata:0x000013D8; // type:object size:0x4 data:float -lbl_1_rodata_13DC = .rodata:0x000013DC; // type:object size:0x4 data:float -lbl_1_rodata_13E0 = .rodata:0x000013E0; // type:object size:0x4 data:float -lbl_1_rodata_13E4 = .rodata:0x000013E4; // type:object size:0x4 data:float -lbl_1_rodata_13E8 = .rodata:0x000013E8; // type:object size:0x4 data:float -lbl_1_rodata_13EC = .rodata:0x000013EC; // type:object size:0x4 data:float -lbl_1_rodata_13F0 = .rodata:0x000013F0; // type:object size:0x4 data:float -lbl_1_rodata_13F4 = .rodata:0x000013F4; // type:object size:0x4 data:float -lbl_1_rodata_13F8 = .rodata:0x000013F8; // type:object size:0x8 data:double -lbl_1_rodata_1400 = .rodata:0x00001400; // type:object size:0x8 data:double -lbl_1_rodata_1408 = .rodata:0x00001408; // type:object size:0x4 data:float -lbl_1_rodata_140C = .rodata:0x0000140C; // type:object size:0x4 data:float -lbl_1_rodata_1410 = .rodata:0x00001410; // type:object size:0x4 data:float -lbl_1_rodata_1414 = .rodata:0x00001414; // type:object size:0x4 data:float -lbl_1_rodata_1418 = .rodata:0x00001418; // type:object size:0x4 data:float -lbl_1_rodata_1420 = .rodata:0x00001420; // type:object size:0x8 data:double -lbl_1_rodata_1428 = .rodata:0x00001428; // type:object size:0x4 data:float -lbl_1_rodata_142C = .rodata:0x0000142C; // type:object size:0x4 data:float -lbl_1_rodata_1430 = .rodata:0x00001430; // type:object size:0x4 data:float -lbl_1_rodata_1434 = .rodata:0x00001434; // type:object size:0x4 data:float -lbl_1_rodata_1438 = .rodata:0x00001438; // type:object size:0x4 data:float -lbl_1_rodata_143C = .rodata:0x0000143C; // type:object size:0x264 -lbl_1_rodata_16A0 = .rodata:0x000016A0; // type:object size:0x4 data:float -lbl_1_rodata_16A4 = .rodata:0x000016A4; // type:object size:0x4 data:float -lbl_1_rodata_16A8 = .rodata:0x000016A8; // type:object size:0x4 data:float -lbl_1_rodata_16AC = .rodata:0x000016AC; // type:object size:0x4 data:float -lbl_1_rodata_16B0 = .rodata:0x000016B0; // type:object size:0x4 data:float -lbl_1_rodata_16B4 = .rodata:0x000016B4; // type:object size:0x4 data:float -lbl_1_rodata_16B8 = .rodata:0x000016B8; // type:object size:0x4 data:float -lbl_1_rodata_16BC = .rodata:0x000016BC; // type:object size:0x4 data:float -lbl_1_rodata_16C0 = .rodata:0x000016C0; // type:object size:0x4 data:float -lbl_1_rodata_16C4 = .rodata:0x000016C4; // type:object size:0x4 data:float -lbl_1_rodata_16C8 = .rodata:0x000016C8; // type:object size:0x4 data:float -lbl_1_rodata_16CC = .rodata:0x000016CC; // type:object size:0x4 data:float -lbl_1_rodata_16D0 = .rodata:0x000016D0; // type:object size:0x4 data:float -lbl_1_rodata_16D4 = .rodata:0x000016D4; // type:object size:0x4 data:float -lbl_1_rodata_16D8 = .rodata:0x000016D8; // type:object size:0x4 data:float -lbl_1_rodata_16DC = .rodata:0x000016DC; // type:object size:0x4 data:float -lbl_1_rodata_16E0 = .rodata:0x000016E0; // type:object size:0x4 data:float -lbl_1_rodata_16E4 = .rodata:0x000016E4; // type:object size:0x4 data:float -lbl_1_rodata_16E8 = .rodata:0x000016E8; // type:object size:0x4 data:float -lbl_1_rodata_16EC = .rodata:0x000016EC; // type:object size:0x4 data:float -lbl_1_rodata_16F0 = .rodata:0x000016F0; // type:object size:0x4 data:float -lbl_1_rodata_16F4 = .rodata:0x000016F4; // type:object size:0x4 data:float -lbl_1_rodata_16F8 = .rodata:0x000016F8; // type:object size:0xD4 -lbl_1_rodata_17CC = .rodata:0x000017CC; // type:object size:0x4 data:float -lbl_1_rodata_17D0 = .rodata:0x000017D0; // type:object size:0x4 data:float -lbl_1_rodata_17D4 = .rodata:0x000017D4; // type:object size:0x4 data:float -lbl_1_rodata_17D8 = .rodata:0x000017D8; // type:object size:0x4 data:float -lbl_1_rodata_17DC = .rodata:0x000017DC; // type:object size:0x4 data:float -lbl_1_rodata_17E0 = .rodata:0x000017E0; // type:object size:0x4 data:float -lbl_1_rodata_17E4 = .rodata:0x000017E4; // type:object size:0x4 data:float -lbl_1_rodata_17E8 = .rodata:0x000017E8; // type:object size:0x84 -lbl_1_rodata_186C = .rodata:0x0000186C; // type:object size:0x48 -lbl_1_rodata_18B4 = .rodata:0x000018B4; // type:object size:0x4 data:float -lbl_1_rodata_18B8 = .rodata:0x000018B8; // type:object size:0x4 data:float -lbl_1_rodata_18BC = .rodata:0x000018BC; // type:object size:0x4 data:float -lbl_1_rodata_18C0 = .rodata:0x000018C0; // type:object size:0x4 data:float -lbl_1_rodata_18C4 = .rodata:0x000018C4; // type:object size:0x4 data:float -lbl_1_rodata_18C8 = .rodata:0x000018C8; // type:object size:0x108 -lbl_1_rodata_19D0 = .rodata:0x000019D0; // type:object size:0x4 data:float -lbl_1_rodata_19D4 = .rodata:0x000019D4; // type:object size:0x4 data:float -lbl_1_rodata_19D8 = .rodata:0x000019D8; // type:object size:0x4 data:float -lbl_1_rodata_19DC = .rodata:0x000019DC; // type:object size:0x4 data:float -lbl_1_rodata_19E0 = .rodata:0x000019E0; // type:object size:0x4 data:float -lbl_1_rodata_19E4 = .rodata:0x000019E4; // type:object size:0x4 data:float -lbl_1_rodata_19E8 = .rodata:0x000019E8; // type:object size:0x4 data:float -lbl_1_rodata_19EC = .rodata:0x000019EC; // type:object size:0x4 data:float -lbl_1_data_1C = .data:0x0000001C; // type:object size:0x1B data:string -lbl_1_data_37 = .data:0x00000037; // type:object size:0x1B data:string -lbl_1_data_52 = .data:0x00000052; // type:object size:0x16 data:string -lbl_1_data_68 = .data:0x00000068; // type:object size:0x8 data:4byte +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:double +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 scope:local data:double +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 scope:local data:double +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 scope:local data:double +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 scope:local data:double +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 scope:local data:double +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0xC scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0xC scope:local +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0xC scope:local +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x8 scope:local data:double +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 scope:local data:double +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 scope:local data:double +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 scope:local data:double +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 scope:local data:double +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x8 scope:local data:double +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 scope:local data:double +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data:float +lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 scope:local data:float +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 scope:local data:float +lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 scope:local data:float +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x8 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x38 scope:local +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x8C0 scope:local +lbl_1_rodata_AA0 = .rodata:0x00000AA0; // type:object size:0x30 scope:local +lbl_1_rodata_AD0 = .rodata:0x00000AD0; // type:object size:0x780 scope:local +lbl_1_rodata_1250 = .rodata:0x00001250; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1254 = .rodata:0x00001254; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1258 = .rodata:0x00001258; // type:object size:0x4 scope:local data:float +lbl_1_rodata_125C = .rodata:0x0000125C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1260 = .rodata:0x00001260; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1264 = .rodata:0x00001264; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1268 = .rodata:0x00001268; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1270 = .rodata:0x00001270; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1278 = .rodata:0x00001278; // type:object size:0x8 scope:local +lbl_1_rodata_1280 = .rodata:0x00001280; // type:object size:0x8 scope:local +lbl_1_rodata_1288 = .rodata:0x00001288; // type:object size:0x8 scope:local +lbl_1_rodata_1290 = .rodata:0x00001290; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1294 = .rodata:0x00001294; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1298 = .rodata:0x00001298; // type:object size:0x4 scope:local data:float +lbl_1_rodata_129C = .rodata:0x0000129C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12A0 = .rodata:0x000012A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12A4 = .rodata:0x000012A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12A8 = .rodata:0x000012A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12AC = .rodata:0x000012AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12B0 = .rodata:0x000012B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12B4 = .rodata:0x000012B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12B8 = .rodata:0x000012B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12BC = .rodata:0x000012BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C0 = .rodata:0x000012C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C4 = .rodata:0x000012C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C8 = .rodata:0x000012C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12CC = .rodata:0x000012CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12D0 = .rodata:0x000012D0; // type:object size:0x24 scope:local +lbl_1_rodata_12F4 = .rodata:0x000012F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12F8 = .rodata:0x000012F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12FC = .rodata:0x000012FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1300 = .rodata:0x00001300; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1304 = .rodata:0x00001304; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1308 = .rodata:0x00001308; // type:object size:0x1C scope:local +lbl_1_rodata_1324 = .rodata:0x00001324; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1328 = .rodata:0x00001328; // type:object size:0x4 scope:local data:float +lbl_1_rodata_132C = .rodata:0x0000132C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1330 = .rodata:0x00001330; // type:object size:0x14 scope:local +lbl_1_rodata_1344 = .rodata:0x00001344; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1348 = .rodata:0x00001348; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134C = .rodata:0x0000134C; // type:object size:0x4 scope:local +lbl_1_rodata_1350 = .rodata:0x00001350; // type:object size:0x8 scope:local +lbl_1_rodata_1358 = .rodata:0x00001358; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1360 = .rodata:0x00001360; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1368 = .rodata:0x00001368; // type:object size:0x4 scope:local data:float +lbl_1_rodata_136C = .rodata:0x0000136C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1370 = .rodata:0x00001370; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1378 = .rodata:0x00001378; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1380 = .rodata:0x00001380; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1384 = .rodata:0x00001384; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1388 = .rodata:0x00001388; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1390 = .rodata:0x00001390; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1394 = .rodata:0x00001394; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1398 = .rodata:0x00001398; // type:object size:0x4 scope:local data:float +lbl_1_rodata_139C = .rodata:0x0000139C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13A0 = .rodata:0x000013A0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_13A8 = .rodata:0x000013A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_13B0 = .rodata:0x000013B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13B4 = .rodata:0x000013B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13B8 = .rodata:0x000013B8; // type:object size:0x8 scope:local data:float +lbl_1_rodata_13C0 = .rodata:0x000013C0; // type:object size:0x18 scope:local +lbl_1_rodata_13D8 = .rodata:0x000013D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13DC = .rodata:0x000013DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13E0 = .rodata:0x000013E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13E4 = .rodata:0x000013E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13E8 = .rodata:0x000013E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13EC = .rodata:0x000013EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13F0 = .rodata:0x000013F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13F4 = .rodata:0x000013F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13F8 = .rodata:0x000013F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1400 = .rodata:0x00001400; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1408 = .rodata:0x00001408; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140C = .rodata:0x0000140C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1410 = .rodata:0x00001410; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1414 = .rodata:0x00001414; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1418 = .rodata:0x00001418; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1420 = .rodata:0x00001420; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1428 = .rodata:0x00001428; // type:object size:0x4 scope:local data:float +lbl_1_rodata_142C = .rodata:0x0000142C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1430 = .rodata:0x00001430; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1434 = .rodata:0x00001434; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1438 = .rodata:0x00001438; // type:object size:0x4 scope:local data:float +lbl_1_rodata_143C = .rodata:0x0000143C; // type:object size:0x264 scope:local +lbl_1_rodata_16A0 = .rodata:0x000016A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16A4 = .rodata:0x000016A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16A8 = .rodata:0x000016A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16AC = .rodata:0x000016AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16B0 = .rodata:0x000016B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16B4 = .rodata:0x000016B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16B8 = .rodata:0x000016B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16BC = .rodata:0x000016BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16C0 = .rodata:0x000016C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16C4 = .rodata:0x000016C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16C8 = .rodata:0x000016C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16CC = .rodata:0x000016CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16D0 = .rodata:0x000016D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16D4 = .rodata:0x000016D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16D8 = .rodata:0x000016D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16DC = .rodata:0x000016DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16E0 = .rodata:0x000016E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16E4 = .rodata:0x000016E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16E8 = .rodata:0x000016E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16EC = .rodata:0x000016EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16F0 = .rodata:0x000016F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16F4 = .rodata:0x000016F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16F8 = .rodata:0x000016F8; // type:object size:0xD4 scope:local +lbl_1_rodata_17CC = .rodata:0x000017CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17D0 = .rodata:0x000017D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17D4 = .rodata:0x000017D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17D8 = .rodata:0x000017D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17DC = .rodata:0x000017DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17E0 = .rodata:0x000017E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17E4 = .rodata:0x000017E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17E8 = .rodata:0x000017E8; // type:object size:0x84 scope:local +lbl_1_rodata_186C = .rodata:0x0000186C; // type:object size:0x48 scope:local +lbl_1_rodata_18B4 = .rodata:0x000018B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18B8 = .rodata:0x000018B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18BC = .rodata:0x000018BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C0 = .rodata:0x000018C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C4 = .rodata:0x000018C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C8 = .rodata:0x000018C8; // type:object size:0x108 scope:local +lbl_1_rodata_19D0 = .rodata:0x000019D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19D4 = .rodata:0x000019D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19D8 = .rodata:0x000019D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19DC = .rodata:0x000019DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19E0 = .rodata:0x000019E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19E4 = .rodata:0x000019E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19E8 = .rodata:0x000019E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19EC = .rodata:0x000019EC; // type:object size:0x4 scope:local data:float +lbl_1_data_1C = .data:0x0000001C; // type:object size:0x1B scope:local data:string +lbl_1_data_37 = .data:0x00000037; // type:object size:0x1B scope:local data:string +lbl_1_data_52 = .data:0x00000052; // type:object size:0x16 scope:local data:string +lbl_1_data_68 = .data:0x00000068; // type:object size:0x8 scope:local data:4byte jumptable_1_data_70 = .data:0x00000070; // type:object size:0x24 scope:local -lbl_1_data_98 = .data:0x00000098; // type:object size:0x8 data:4byte -lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x1C -lbl_1_data_BC = .data:0x000000BC; // type:object size:0x24 +lbl_1_data_98 = .data:0x00000098; // type:object size:0x8 scope:local data:4byte +lbl_1_data_A0 = .data:0x000000A0; // type:object size:0x1C scope:local +lbl_1_data_BC = .data:0x000000BC; // type:object size:0x24 scope:local jumptable_1_data_E0 = .data:0x000000E0; // type:object size:0x24 scope:local -lbl_1_data_108 = .data:0x00000108; // type:object size:0x8 data:4byte -lbl_1_data_110 = .data:0x00000110; // type:object size:0x8 -lbl_1_data_118 = .data:0x00000118; // type:object size:0x38 data:4byte -lbl_1_data_150 = .data:0x00000150; // type:object size:0x18 data:4byte -lbl_1_data_168 = .data:0x00000168; // type:object size:0xC +lbl_1_data_108 = .data:0x00000108; // type:object size:0x8 scope:local data:4byte +lbl_1_data_110 = .data:0x00000110; // type:object size:0x8 scope:local +lbl_1_data_118 = .data:0x00000118; // type:object size:0x38 scope:local data:4byte +lbl_1_data_150 = .data:0x00000150; // type:object size:0x18 scope:local data:4byte +lbl_1_data_168 = .data:0x00000168; // type:object size:0xC scope:local jumptable_1_data_174 = .data:0x00000174; // type:object size:0x24 scope:local jumptable_1_data_198 = .data:0x00000198; // type:object size:0x24 scope:local -lbl_1_data_1BC = .data:0x000001BC; // type:object size:0x4C -lbl_1_data_208 = .data:0x00000208; // type:object size:0x8 -lbl_1_data_210 = .data:0x00000210; // type:object size:0x8 data:4byte +lbl_1_data_1BC = .data:0x000001BC; // type:object size:0x4C scope:local +lbl_1_data_208 = .data:0x00000208; // type:object size:0x8 scope:local +lbl_1_data_210 = .data:0x00000210; // type:object size:0x8 scope:local data:4byte jumptable_1_data_218 = .data:0x00000218; // type:object size:0x1C scope:local jumptable_1_data_234 = .data:0x00000234; // type:object size:0x20 scope:local -lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte +lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x8 data:4byte lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x8 data:4byte lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x8 data:4byte diff --git a/configure.py b/configure.py index 8fab5fe5..c6aa359f 100644 --- a/configure.py +++ b/configure.py @@ -1029,15 +1029,15 @@ config.libs = [ Rel('option', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/option/scene.c"), - Object(NonMatching, "REL/option/camera.c"), - Object(NonMatching, "REL/option/room.c"), - Object(NonMatching, "REL/option/guide.c"), - Object(NonMatching, "REL/option/state.c"), - Object(NonMatching, "REL/option/rumble.c"), - Object(NonMatching, "REL/option/sound.c"), - Object(NonMatching, "REL/option/record.c"), - Object(NonMatching, "REL/option/window.c"), + Object(Matching, "REL/option/scene.c"), + Object(Matching, "REL/option/camera.c"), + Object(Matching, "REL/option/room.c"), + Object(Matching, "REL/option/guide.c"), + Object(Matching, "REL/option/state.c"), + Object(Matching, "REL/option/rumble.c"), + Object(Matching, "REL/option/sound.c"), + Object(Matching, "REL/option/record.c"), + Object(Matching, "REL/option/window.c"), } ), Rel('present', diff --git a/include/REL/option.h b/include/REL/option.h new file mode 100755 index 00000000..e8ff30b5 --- /dev/null +++ b/include/REL/option.h @@ -0,0 +1,80 @@ +#include "game/object.h" + +#include "dolphin/types.h" + +typedef struct { + /* 0x00 */ Process *unk00; + /* 0x04 */ s16 unk04; + /* 0x06 */ char unk06[2]; + /* 0x08 */ s32 unk08; + /* 0x0C */ s32 unk0C; + /* 0x10 */ s32 unk10; + /* 0x14 */ s32 unk14; + /* 0x18 */ u32 unk18; + /* 0x1C */ s32 unk1C; + /* 0x20 */ s32 unk20; +} UnkWindowDataStruct; // Size 0x24 + +void fn_1_160(s16 arg0, s32 arg1, s32 arg2); +s32 fn_1_550(u16 arg0); +s32 fn_1_584(u16 arg0); +s32 fn_1_5B8(u16 arg0); + +omObjData *fn_1_7F8(void); +void fn_1_A3C(omObjData *arg0); +void fn_1_A6C(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4); +void fn_1_AF0(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4); +void fn_1_B74(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4); +float fn_1_BF8(omObjData *arg0); +float fn_1_C28(omObjData *arg0); +void fn_1_C88(omObjData *arg0, float *arg1, float *arg2, float *arg3); +s32 fn_1_CB8(omObjData *arg0); + +omObjData *fn_1_15A4(void); +void fn_1_1798(omObjData *arg0); +void fn_1_1A2C(omObjData *arg0, s32 arg1); +s32 fn_1_1A70(omObjData *arg0); + +omObjData *fn_1_21F8(void); +void fn_1_241C(omObjData *arg0); +void fn_1_2508(omObjData *arg0, float arg1, float arg2, s32 arg3); + +omObjData *fn_1_2E04(void); +void fn_1_2F4C(omObjData *arg0); + +omObjData *fn_1_3158(void); +void fn_1_322C(omObjData *arg0); +void fn_1_3290(omObjData *arg0, s32 arg1); +s32 fn_1_32D4(omObjData *arg0); +void fn_1_3D54(omObjData *arg0); +void fn_1_3E1C(omObjData *arg0); +s32 fn_1_3ED0(omObjData *arg0); + +omObjData *fn_1_4028(void); +void fn_1_42DC(omObjData *arg0); +void fn_1_4388(omObjData *arg0, s32 arg1); +s32 fn_1_43CC(omObjData *arg0); + +omObjData *fn_1_80E4(void); +void fn_1_825C(omObjData *arg0); +void fn_1_82B0(omObjData *arg0, s32 arg1); +s32 fn_1_82F4(omObjData *arg0); + +UnkWindowDataStruct *fn_1_A44C(s32 arg0); +void fn_1_A6AC(UnkWindowDataStruct *arg0); +void fn_1_A6EC(UnkWindowDataStruct *arg0); +void fn_1_A704(UnkWindowDataStruct *arg0); +void fn_1_A71C(UnkWindowDataStruct *arg0, s32 arg1); +void fn_1_A7B0(UnkWindowDataStruct *arg0, float arg1, float arg2); +void fn_1_A7F0(UnkWindowDataStruct *arg0); +void fn_1_A828(UnkWindowDataStruct *arg0); +void fn_1_A880(UnkWindowDataStruct *arg0, s32 arg1); + +extern Process *lbl_1_bss_8; +extern omObjData *lbl_1_bss_10; +extern omObjData *lbl_1_bss_18; +extern omObjData *lbl_1_bss_20; +extern omObjData *lbl_1_bss_28; +extern omObjData *lbl_1_bss_30; +extern omObjData *lbl_1_bss_38; +extern omObjData *lbl_1_bss_40; diff --git a/src/REL/option/camera.c b/src/REL/option/camera.c new file mode 100755 index 00000000..a9d3d31d --- /dev/null +++ b/src/REL/option/camera.c @@ -0,0 +1,237 @@ +#include "REL/option.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/pad.h" +#include "game/printfunc.h" +#include "game/process.h" + +#include "dolphin.h" +#include "math.h" + +typedef struct { + /* 0x00 */ Vec unk00; + /* 0x0C */ Vec unk0C; + /* 0x18 */ float unk18; + /* 0x1C */ float unk1C; + /* 0x20 */ float unk20; + /* 0x24 */ float unk24; + /* 0x28 */ float unk28; + /* 0x2C */ Vec unk2C; + /* 0x38 */ Vec unk38; + /* 0x44 */ char unk44[0xC]; + /* 0x50 */ float unk50; + /* 0x54 */ float unk54; + /* 0x58 */ Vec unk58; + /* 0x64 */ Vec unk64; + /* 0x70 */ char unk70[0xC]; + /* 0x7C */ float unk7C; + /* 0x80 */ float unk80; + /* 0x84 */ float unk84; + /* 0x88 */ float unk88; + /* 0x8C */ float unk8C; + /* 0x90 */ float unk90; + /* 0x94 */ float unk94; + /* 0x98 */ float unk98; +} UnkCameraDataStruct; // Size 0x9C + +static void fn_1_C58(omObjData *arg0, float *arg1, float *arg2, float *arg3); +static void fn_1_D44(omObjData *arg0); +static void fn_1_D6C(omObjData *arg0); +static void fn_1_12E4(omObjData *arg0); +static void fn_1_14E4(omObjData *arg0); + +omObjData *lbl_1_bss_10; + +static float pad_04_00000000_data[] = { + 0.0f, 500.0f, 0.0f, + 0.0f, -1.0f, 0.0f +}; + +static s32 pad_04_00000018_data = -1; + +omObjData *fn_1_7F8(void) { + omObjData *var_r30; + UnkCameraDataStruct *temp_r31; + + var_r30 = omAddObjEx(lbl_1_bss_8, 1001, 0, 0, 3, fn_1_D44); + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkCameraDataStruct), MEMORY_DEFAULT_NUM); + var_r30->data = temp_r31; + temp_r31->unk00.x = 0.0f; + temp_r31->unk00.y = 0.0f; + temp_r31->unk00.z = 0.0f; + temp_r31->unk0C.x = 0.0f; + temp_r31->unk0C.y = 0.0f; + temp_r31->unk0C.z = 0.0f; + temp_r31->unk18 = 0.0f; + temp_r31->unk1C = 1.0f; + temp_r31->unk20 = 0.0f; + temp_r31->unk24 = 0.0f; + temp_r31->unk28 = 0.0f; + temp_r31->unk8C = 1.0f; + temp_r31->unk84 = 1.0f; + temp_r31->unk94 = 1.0f; + Hu3DCameraCreate(1); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + Hu3DCameraPerspectiveSet(1, 42.0f, 10.0f, 8000.0f, 1.2f); + fn_1_B74(var_r30, 600.0f, 60.0f, 120.0f, 1); + fn_1_A6C(var_r30, 180.0f, 120.0f, 0.0f, 1); + return var_r30; +} + +void fn_1_A3C(omObjData *arg0) { + HuMemDirectFree(arg0->data); +} + +void fn_1_A6C(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) { + UnkCameraDataStruct *temp_r31 = arg0->data; + + temp_r31->unk58.x = arg1; + temp_r31->unk58.y = arg2; + temp_r31->unk58.z = arg3; + temp_r31->unk2C = temp_r31->unk00; + temp_r31->unk84 = 0.0f; + temp_r31->unk88 = 1.0f / arg4; +} + +void fn_1_AF0(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) { + UnkCameraDataStruct *temp_r31 = arg0->data; + + temp_r31->unk64.x = arg1; + temp_r31->unk64.y = arg2; + temp_r31->unk64.z = arg3; + temp_r31->unk38 = temp_r31->unk0C; + temp_r31->unk8C = 0.0f; + temp_r31->unk90 = 1.0f / arg4; +} + +void fn_1_B74(omObjData *arg0, float arg1, float arg2, float arg3, s32 arg4) { + UnkCameraDataStruct *temp_r31 = arg0->data; + + temp_r31->unk64.y = arg3; + temp_r31->unk7C = arg1; + temp_r31->unk80 = arg2; + temp_r31->unk38.y = temp_r31->unk0C.y; + temp_r31->unk50 = temp_r31->unk24; + temp_r31->unk54 = temp_r31->unk28; + temp_r31->unk94 = 0.0f; + temp_r31->unk98 = 1.0f / arg4; +} + +float fn_1_BF8(omObjData *arg0) { + UnkCameraDataStruct *temp_r31 = arg0->data; + float temp_f31; + + temp_f31 = temp_r31->unk24; + return temp_f31; +} + +float fn_1_C28(omObjData *arg0) { + UnkCameraDataStruct *temp_r31 = arg0->data; + float temp_f31; + + temp_f31 = temp_r31->unk28; + return temp_f31; +} + +static void fn_1_C58(omObjData *arg0, float *arg1, float *arg2, float *arg3) { + UnkCameraDataStruct *temp_r31 = arg0->data; + + *arg1 = temp_r31->unk00.x; + *arg2 = temp_r31->unk00.y; + *arg3 = temp_r31->unk00.z; +} + +void fn_1_C88(omObjData *arg0, float *arg1, float *arg2, float *arg3) { + UnkCameraDataStruct *temp_r31 = arg0->data; + + *arg1 = temp_r31->unk0C.x; + *arg2 = temp_r31->unk0C.y; + *arg3 = temp_r31->unk0C.z; +} + +s32 fn_1_CB8(omObjData *arg0) { + UnkCameraDataStruct *temp_r31 = arg0->data; + s32 var_r30 = 1; + s32 var_r29 = 1; + + if (!(temp_r31->unk8C < 1.0f) && !(temp_r31->unk94 < 1.0f)) { + var_r29 = 0; + } + if (var_r29 == 0 && !(temp_r31->unk84 < 1.0f)) { + var_r30 = 0; + } + return var_r30; +} + +static void fn_1_D44(omObjData *arg0) { + fn_1_D6C(arg0); +} + +static void fn_1_D6C(omObjData *arg0) { + UnkCameraDataStruct *temp_r31 = arg0->data; + float temp_f28; + float temp_f31; + float temp_f30; + + if (temp_r31->unk84 < 1.0f) { + temp_f28 = sin(90.0f * temp_r31->unk84 * M_PI / 180.0); + temp_r31->unk00.x = temp_r31->unk2C.x + temp_f28 * (temp_r31->unk58.x - temp_r31->unk2C.x); + temp_r31->unk00.y = temp_r31->unk2C.y + temp_f28 * (temp_r31->unk58.y - temp_r31->unk2C.y); + temp_r31->unk00.z = temp_r31->unk2C.z + temp_f28 * (temp_r31->unk58.z - temp_r31->unk2C.z); + if ((temp_r31->unk84 += temp_r31->unk88) >= 1.0f) { + temp_r31->unk00 = temp_r31->unk58; + } + } + if (temp_r31->unk8C < 1.0f) { + temp_f28 = sin(90.0f * temp_r31->unk8C * M_PI / 180.0); + temp_r31->unk0C.x = temp_r31->unk38.x + temp_f28 * (temp_r31->unk64.x - temp_r31->unk38.x); + temp_r31->unk0C.y = temp_r31->unk38.y + temp_f28 * (temp_r31->unk64.y - temp_r31->unk38.y); + temp_r31->unk0C.z = temp_r31->unk38.z + temp_f28 * (temp_r31->unk64.z - temp_r31->unk38.z); + if ((temp_r31->unk8C += temp_r31->unk90) >= 1.0f) { + temp_r31->unk0C = temp_r31->unk64; + } + } + if (temp_r31->unk94 < 1.0f) { + temp_f28 = sin(90.0f * temp_r31->unk94 * M_PI / 180.0); + temp_r31->unk0C.y = temp_r31->unk38.y + temp_f28 * (temp_r31->unk64.y - temp_r31->unk38.y); + temp_r31->unk24 = temp_r31->unk50 + temp_f28 * (temp_r31->unk7C - temp_r31->unk50); + temp_r31->unk28 = temp_r31->unk54 + temp_f28 * (temp_r31->unk80 - temp_r31->unk54); + if ((temp_r31->unk94 += temp_r31->unk98) >= 1.0f) { + temp_r31->unk0C.y = temp_r31->unk64.y; + temp_r31->unk24 = temp_r31->unk7C; + temp_r31->unk28 = temp_r31->unk80; + } + temp_r31->unk0C.x = temp_r31->unk24 * -sin(temp_r31->unk28 * M_PI / 180.0); + temp_r31->unk0C.z = temp_r31->unk24 * cos(temp_r31->unk28 * M_PI / 180.0); + } + temp_f31 = temp_r31->unk0C.x - temp_r31->unk00.x; + temp_f30 = temp_r31->unk0C.z - temp_r31->unk00.z; + temp_r31->unk24 = sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30); + temp_r31->unk28 = fmod(-(180.0 * (atan2(temp_f31, temp_f30) / M_PI)), 360.0); + if (temp_r31->unk28 < 0.0f) { + temp_r31->unk28 += 360.0f; + } + Hu3DCameraPosSet(1, temp_r31->unk00.x, temp_r31->unk00.y, temp_r31->unk00.z, temp_r31->unk18, temp_r31->unk1C, temp_r31->unk20, temp_r31->unk0C.x, temp_r31->unk0C.y, temp_r31->unk0C.z); +} + +static void fn_1_12E4(omObjData *arg0) { + UnkCameraDataStruct *temp_r31; + + if (HuPadBtn[0] & 0xF) { + temp_r31 = arg0->data; + temp_r31->unk0C.x += 0.5f * HuPadStkX[0]; + temp_r31->unk0C.y += 0.5f * HuPadStkY[0]; + temp_r31->unk00.z += 0.5f * HuPadTrigL[0]; + temp_r31->unk00.z -= 0.5f * HuPadTrigR[0]; + temp_r31->unk00.x += 0.5f * HuPadSubStkY[0]; + temp_r31->unk00.y += 0.5f * HuPadSubStkX[0]; + } +} + +static void fn_1_14E4(omObjData *arg0) { + UnkCameraDataStruct *temp_r31 = arg0->data; + + print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", temp_r31->unk0C.x, temp_r31->unk0C.y, temp_r31->unk0C.z); + print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", temp_r31->unk00.x, temp_r31->unk00.y, temp_r31->unk00.z); + print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", temp_r31->unk24, temp_r31->unk28); +} diff --git a/src/REL/option/guide.c b/src/REL/option/guide.c new file mode 100755 index 00000000..4a8d1639 --- /dev/null +++ b/src/REL/option/guide.c @@ -0,0 +1,230 @@ +#include "REL/option.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" + +#include "dolphin.h" +#include "math.h" + +typedef struct { + /* 0x00 */ s32 unk00; + /* 0x04 */ s16 unk04; + /* 0x06 */ char unk06[2]; + /* 0x08 */ Vec unk08; + /* 0x14 */ Vec unk14; + /* 0x20 */ float unk20; + /* 0x24 */ float unk24; + /* 0x28 */ float unk28; + /* 0x2C */ float unk2C; + /* 0x30 */ float unk30; + /* 0x34 */ float unk34; + /* 0x38 */ float unk38; + /* 0x3C */ float unk3C; + /* 0x40 */ float unk40; + /* 0x44 */ float unk44; + /* 0x48 */ char unk48[0xC]; + /* 0x54 */ float unk54; + /* 0x58 */ float unk58; + /* 0x5C */ s32 unk5C; + /* 0x60 */ s32 unk60; +} UnkGuideDataStruct; // Size 0x64 + +static void fn_1_24A8(omObjData *arg0, s32 arg1); +static s32 fn_1_24EC(omObjData *arg0); +static void fn_1_25AC(omObjData *arg0); +static void fn_1_2A18(omObjData *arg0); +static float fn_1_2D00(float arg0, float arg1, float arg2); + +omObjData *lbl_1_bss_20; + +static const s32 lbl_1_rodata_E0[] = { + DATA_MAKE_NUM(DATADIR_OPTION, 16), + DATA_MAKE_NUM(DATADIR_OPTION, 17), + DATA_MAKE_NUM(DATADIR_OPTION, 18) +}; + +static omObjFunc lbl_1_data_98[] = { + NULL, + fn_1_25AC +}; + +omObjData *fn_1_21F8(void) { + omObjData *var_r31; + UnkGuideDataStruct *temp_r30; + s32 i; + + var_r31 = omAddObjEx(lbl_1_bss_8, 1002, 1, 3, 2, NULL); + temp_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkGuideDataStruct), MEMORY_DEFAULT_NUM); + var_r31->data = temp_r30; + temp_r30->unk08.x = -298.59f; + temp_r30->unk08.z = 298.21f; + temp_r30->unk08.y = 0.0f; + temp_r30->unk20 = 0.0f; + temp_r30->unk24 = 134.42f; + temp_r30->unk28 = 0.0f; + temp_r30->unk2C = 0.0f; + temp_r30->unk34 = 0.0f; + temp_r30->unk30 = 0.0f; + var_r31->model[0] = Hu3DModelCreateFile(0x69000C); + Hu3DModelLayerSet(var_r31->model[0], 1); + for (i = 0; i < 3; i++) { + var_r31->motion[i] = Hu3DJointMotion(var_r31->model[0], HuDataSelHeapReadNum(lbl_1_rodata_E0[i], MEMORY_DEFAULT_NUM, HEAP_DATA)); + } + temp_r30->unk5C = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[2], 1, 0xC); + temp_r30->unk60 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[1], 0, 0xC); + CharModelLayerSetAll(1); + Hu3DModelShadowSet(var_r31->model[0]); + Hu3DMotionShiftSet(var_r31->model[0], var_r31->motion[0], 0.0f, 8.0f, 0x40000001); + fn_1_24A8(var_r31, 0); + fn_1_2A18(var_r31); + return var_r31; +} + +void fn_1_241C(omObjData *arg0) { + UnkGuideDataStruct *temp_r29 = arg0->data; + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } + for (i = 0; i < 3; i++) { + Hu3DMotionKill(arg0->motion[i]); + } + HuMemDirectFree(temp_r29); +} + +static void fn_1_24A8(omObjData *arg0, s32 arg1) { + UnkGuideDataStruct *temp_r31 = arg0->data; + + temp_r31->unk00 = arg1; + arg0->func = lbl_1_data_98[arg1]; + arg0->unk10 = 0; + arg0->unk10 = 0; +} + +static s32 fn_1_24EC(omObjData *arg0) { + UnkGuideDataStruct *temp_r31 = arg0->data; + + return temp_r31->unk00; +} + +void fn_1_2508(omObjData *arg0, float arg1, float arg2, s32 arg3) { + UnkGuideDataStruct *temp_r31 = arg0->data; + + temp_r31->unk40 = arg1; + temp_r31->unk44 = arg2; + temp_r31->unk54 = 0.0f; + temp_r31->unk58 = 1.0f / arg3; + temp_r31->unk04 = 0; + fn_1_24A8(arg0, 1); +} + +static void fn_1_25AC(omObjData *arg0) { + UnkGuideDataStruct *temp_r31 = arg0->data; + float var_f31; + float var_f30; + + switch (arg0->unk10) { + case 0: + temp_r31->unk3C = fmod(-(180.0 * (atan2(temp_r31->unk08.x, temp_r31->unk08.z) / M_PI)), 360.0); + if (temp_r31->unk3C < 0.0f) { + temp_r31->unk3C += 360.0f; + } + arg0->unk10 = 1; + /* fallthrough */ + case 1: + var_f30 = sin(90.0f * temp_r31->unk54 * M_PI / 180.0); + var_f31 = temp_r31->unk3C + var_f30 * (temp_r31->unk40 - temp_r31->unk3C); + temp_r31->unk14.x = temp_r31->unk44 * -sin(var_f31 * M_PI / 180.0); + temp_r31->unk14.z = temp_r31->unk44 * cos(var_f31 * M_PI / 180.0); + temp_r31->unk14.y = 0.0f; + temp_r31->unk2C = temp_r31->unk14.x - temp_r31->unk08.x; + temp_r31->unk34 = temp_r31->unk14.z - temp_r31->unk08.z; + if (temp_r31->unk54 <= 0.0f) { + temp_r31->unk2C = 0.0f; + temp_r31->unk34 = 0.0f; + temp_r31->unk08 = temp_r31->unk14; + } + if ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) { + break; + } + var_f31 = fmod(-(180.0 * (atan2(temp_r31->unk08.x, temp_r31->unk08.z) / M_PI)), 360.0); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + temp_r31->unk14.x = 422.0 * -sin(var_f31 * M_PI / 180.0); + temp_r31->unk14.z = 422.0 * cos(var_f31 * M_PI / 180.0); + temp_r31->unk2C = (temp_r31->unk14.x - temp_r31->unk08.x) / 10.0f; + temp_r31->unk34 = (temp_r31->unk14.z - temp_r31->unk08.z) / 10.0f; + temp_r31->unk58 = 0.1f; + temp_r31->unk54 = 0.0f; + arg0->unk10 = 2; + /* fallthrough */ + case 2: + if ((temp_r31->unk54 += temp_r31->unk58) < 1.0f) { + break; + } + arg0->unk10 = 3; + /* fallthrough */ + case 3: + temp_r31->unk08 = temp_r31->unk14; + temp_r31->unk2C = 0.0f; + temp_r31->unk30 = 0.0f; + temp_r31->unk34 = 0.0f; + fn_1_2A18(arg0); + fn_1_24A8(arg0, 0); + break; + } + fn_1_2A18(arg0); +} + +static void fn_1_2A18(omObjData *arg0) { + UnkGuideDataStruct *temp_r31 = arg0->data; + s16 var_r29; + + var_r29 = 0; + temp_r31->unk38 = sqrtf(temp_r31->unk2C * temp_r31->unk2C + temp_r31->unk34 * temp_r31->unk34); + if (0.001f <= temp_r31->unk38) { + if (14.0f <= temp_r31->unk38) { + temp_r31->unk2C /= temp_r31->unk38; + temp_r31->unk34 /= temp_r31->unk38; + temp_r31->unk38 = 14.0f; + temp_r31->unk2C = 14.0f * temp_r31->unk2C; + temp_r31->unk34 = 14.0f * temp_r31->unk34; + } + temp_r31->unk24 = fn_1_2D00(temp_r31->unk24, 180.0 * (atan2(temp_r31->unk2C, temp_r31->unk34) / M_PI), 0.4f); + if (8.0f <= temp_r31->unk38) { + var_r29 = 2; + } else { + var_r29 = 1; + } + } + temp_r31->unk08.x += temp_r31->unk2C; + temp_r31->unk08.z += temp_r31->unk34; + if (temp_r31->unk04 != var_r29) { + Hu3DMotionShiftSet(*arg0->model, arg0->motion[var_r29], 0.0f, 8.0f, 0x40000001); + temp_r31->unk04 = var_r29; + } + omSetTra(arg0, temp_r31->unk08.x, temp_r31->unk08.y, temp_r31->unk08.z); + omSetRot(arg0, temp_r31->unk20, temp_r31->unk24, temp_r31->unk28); +} + +static float fn_1_2D00(float arg0, float arg1, float arg2) { + float var_f30; + float var_f31; + + var_f31 = fmod(arg1 - arg0, 360.0); + if (0.0f > var_f31) { + var_f31 += 360.0f; + } + if (180.0f < var_f31) { + var_f31 -= 360.0f; + } + var_f30 = fmod(arg0 + var_f31 * arg2, 360.0); + if (0.0f > var_f30) { + var_f30 += 360.0f; + } + return var_f30; +} diff --git a/src/REL/option/record.c b/src/REL/option/record.c new file mode 100755 index 00000000..ed576f6a --- /dev/null +++ b/src/REL/option/record.c @@ -0,0 +1,794 @@ +#include "REL/option.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/esprite.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/window.h" + +#include "dolphin.h" +#include "math.h" + +typedef struct { + /* 0x00 */ s32 unk00; + /* 0x04 */ s32 unk04[8]; + /* 0x24 */ s32 unk24; + /* 0x28 */ s32 unk28; +} UnkRecordDataStruct00; // Size 0x2C + +typedef struct { + /* 0x000 */ omObjData *unk00; + /* 0x004 */ omObjData *unk04; + /* 0x008 */ UnkWindowDataStruct *unk08[10]; + /* 0x030 */ s32 unk30; + /* 0x034 */ s16 unk34[153]; + /* 0x166 */ char unk166[6]; + /* 0x16C */ s32 unk16C; + /* 0x170 */ s32 unk170; + /* 0x174 */ s32 unk174; + /* 0x178 */ UnkRecordDataStruct00 unk178[6]; + /* 0x280 */ s32 unk280[6]; + /* 0x298 */ s32 unk298; + /* 0x29C */ s32 unk29C; +} UnkRecordDataStruct01; // Size 0x2A0 + +static void fn_1_8310(omObjData *arg0); +static omObjData *fn_1_8A88(void); +static void fn_1_8B58(omObjData *arg0); +static void fn_1_8BAC(omObjData *arg0, s32 arg1); +static omObjData *fn_1_8C84(void); +static void fn_1_8D80(omObjData *arg0); +static void fn_1_8DD4(omObjData *arg0); +static void fn_1_8E98(omObjData *arg0); +static s32 fn_1_8EF8(s32 arg0, s32 arg1); +static void fn_1_8F38(omObjData *arg0, s32 arg1); +static void fn_1_96B4(omObjData *arg0); +static void fn_1_9750(omObjData *arg0); +static void fn_1_9A94(omObjData *arg0); +static void fn_1_9B10(omObjData *arg0, s32 arg1); +static void fn_1_A3B0(omObjData *arg0); + +omObjData *lbl_1_bss_40; + +static const s32 lbl_1_rodata_13C0[] = { 0, 1, 2, 3, 5, 10 }; + +static omObjFunc lbl_1_data_210[] = { + NULL, + fn_1_8310 +}; + +omObjData *fn_1_80E4(void) { + omObjData *temp_r29; + UnkRecordDataStruct01 *temp_r3; + s32 i; + s32 j; + + temp_r29 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRecordDataStruct01), MEMORY_DEFAULT_NUM); + temp_r29->data = temp_r3; + for (i = 0; i < 6; i++) { + temp_r3->unk178[i].unk00 = GWBoardPlayCountGet(i); + temp_r3->unk178[i].unk28 = GWBoardMaxStarsGet(i); + temp_r3->unk178[i].unk24 = GWBoardMaxCoinsGet(i); + for (j = 0; j < 8; j++) { + temp_r3->unk178[i].unk04[j] = GWBoardWinCountGet(j, i); + } + } + for (i = 0; i < 6; i++) { + temp_r3->unk280[i] = GWMGRecordGet(lbl_1_rodata_13C0[i]); + } + temp_r3->unk170 = 0; + temp_r3->unk174 = 0; + temp_r3->unk16C = 0; + temp_r3->unk00 = fn_1_8A88(); + temp_r3->unk04 = fn_1_8C84(); + fn_1_8DD4(temp_r29); + fn_1_82B0(temp_r29, 0); + return temp_r29; +} + +void fn_1_825C(omObjData *arg0) { + UnkRecordDataStruct01 *temp_r31 = arg0->data; + + fn_1_8B58(temp_r31->unk00); + fn_1_8D80(temp_r31->unk04); + fn_1_8E98(arg0); + HuMemDirectFree(temp_r31); +} + +void fn_1_82B0(omObjData *arg0, s32 arg1) { + UnkRecordDataStruct01 *temp_r31 = arg0->data; + + temp_r31->unk30 = arg1; + arg0->func = lbl_1_data_210[arg1]; + arg0->unk10 = 0; + arg0->unk10 = 0; +} + +s32 fn_1_82F4(omObjData *arg0) { + UnkRecordDataStruct01 *temp_r31 = arg0->data; + + return temp_r31->unk30; +} + +static void fn_1_8310(omObjData *arg0) { + UnkRecordDataStruct01 *temp_r31 = arg0->data; + Vec sp8; + s32 i; + + switch (arg0->unk10) { + case 0: + temp_r31->unk08[0] = fn_1_A44C(0); + temp_r31->unk08[1] = fn_1_A44C(1); + for (i = 0; i < 8; i++) { + temp_r31->unk08[i + 2] = fn_1_A44C(3); + } + fn_1_AF0(lbl_1_bss_10, 519.0f, 125.0f, 300.0f, 0x28); + fn_1_A6C(lbl_1_bss_10, 308.98f, 125.0f, 178.74f, 0x28); + temp_r31->unk170 = 0; + temp_r31->unk174 = 0; + temp_r31->unk298 = 0; + arg0->unk10 = 1; + /* fallthrough */ + case 1: + if (fn_1_CB8(lbl_1_bss_10) != 0) { + break; + } + fn_1_3D54(lbl_1_bss_30); + espBankSet(temp_r31->unk34[47], 0); + espBankSet(temp_r31->unk34[48], 2); + espPosSet(temp_r31->unk34[47], 46.0f, 240.0f); + espPosSet(temp_r31->unk34[48], 494.0f, 240.0f); + if (temp_r31->unk16C == 0) { + fn_1_160(temp_r31->unk34[47], 1, 10); + fn_1_160(temp_r31->unk34[48], 1, 10); + temp_r31->unk29C = 0; + } + arg0->unk10 = 2; + /* fallthrough */ + case 2: + fn_1_96B4(arg0); + fn_1_A3B0(arg0); + fn_1_9A94(arg0); + switch (temp_r31->unk16C) { + case 0: + if (temp_r31->unk170 < 6) { + fn_1_8F38(arg0, temp_r31->unk170); + } else { + fn_1_9750(arg0); + } + fn_1_A6EC(temp_r31->unk08[0]); + fn_1_A71C(temp_r31->unk08[0], MAKE_MESSID(47, 5)); + break; + case 1: + fn_1_9B10(arg0, temp_r31->unk174); + fn_1_A6EC(temp_r31->unk08[0]); + fn_1_A71C(temp_r31->unk08[0], MAKE_MESSID(47, 6)); + break; + } + fn_1_A6EC(temp_r31->unk08[1]); + fn_1_A71C(temp_r31->unk08[1], MAKE_MESSID(47, 169)); + if (temp_r31->unk298 == 0) { + Hu3DModelAttrReset(temp_r31->unk04->model[0], 1); + temp_r31->unk298 = 1; + } + sp8.x = 505.0 * -sin(305 * M_PI / 180.0); + sp8.z = 505.0 * cos(305 * M_PI / 180.0); + sp8.y = 144.0f - 14.0f * temp_r31->unk16C; + omSetTra(temp_r31->unk04, sp8.x, sp8.y, sp8.z); + arg0->unk10 = 3; + /* fallthrough */ + case 3: + if (temp_r31->unk29C > 0) { + temp_r31->unk29C--; + break; + } + espBankSet(temp_r31->unk34[47], 0); + espBankSet(temp_r31->unk34[48], 2); + arg0->unk10 = 4; + /* fallthrough */ + case 4: + if (temp_r31->unk08[1]->unk20 != 0) { + break; + } + if (fn_1_550(0x200) != 0) { + HuAudFXPlay(3); + arg0->unk10 = 5; + } else if (fn_1_584(8) != 0 && temp_r31->unk16C == 1) { + temp_r31->unk16C = 0; + temp_r31->unk170 = 0; + fn_1_8BAC(temp_r31->unk00, temp_r31->unk16C); + fn_1_160(temp_r31->unk34[47], 1, 5); + fn_1_160(temp_r31->unk34[48], 1, 5); + temp_r31->unk29C = 5; + HuAudFXPlay(0x83F); + arg0->unk10 = 2; + } else if (fn_1_584(4) != 0 && temp_r31->unk16C == 0) { + temp_r31->unk16C = 1; + temp_r31->unk174 = 0; + fn_1_8BAC(temp_r31->unk00, temp_r31->unk16C); + fn_1_160(temp_r31->unk34[47], 0, 5); + fn_1_160(temp_r31->unk34[48], 0, 5); + temp_r31->unk29C = 5; + HuAudFXPlay(0x83F); + arg0->unk10 = 2; + } else { + switch (temp_r31->unk16C) { + case 0: + if (fn_1_550(0x40) != 0) { + if (--temp_r31->unk170 < 0) { + temp_r31->unk170 = 6; + } + if (GWGameStat.open_w06 == 0 && temp_r31->unk170 == 5) { + temp_r31->unk170--; + } + HuAudFXPlay(0x840); + espBankSet(temp_r31->unk34[47], 1); + temp_r31->unk29C = 0xA; + arg0->unk10 = 2; + return; + } + if (fn_1_550(0x20) != 0) { + if (++temp_r31->unk170 >= 7) { + temp_r31->unk170 = 0; + } + if (GWGameStat.open_w06 == 0 && temp_r31->unk170 == 5) { + temp_r31->unk170++; + } + HuAudFXPlay(0x840); + espBankSet(temp_r31->unk34[48], 3); + temp_r31->unk29C = 0xA; + arg0->unk10 = 2; + } + break; + case 1: + break; + } + } + break; + case 5: + fn_1_3E1C(lbl_1_bss_30); + if (temp_r31->unk16C == 0) { + fn_1_160(temp_r31->unk34[47], 0, 10); + fn_1_160(temp_r31->unk34[48], 0, 10); + } + fn_1_A704(temp_r31->unk08[0]); + fn_1_A704(temp_r31->unk08[1]); + Hu3DModelAttrSet(temp_r31->unk04->model[0], 1); + arg0->unk10 = 6; + /* fallthrough */ + case 6: + if (temp_r31->unk08[1]->unk20 == 0 && fn_1_3ED0(lbl_1_bss_30) == 0) { + for (i = 0; i < 10; i++) { + fn_1_A6AC(temp_r31->unk08[i]); + } + fn_1_96B4(arg0); + fn_1_A3B0(arg0); + fn_1_9A94(arg0); + fn_1_AF0(lbl_1_bss_10, 519.62f, 120.0f, 300.0f, 0x28); + fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 0x28); + fn_1_82B0(arg0, 0); + } + break; + } +} + +static omObjData *fn_1_8A88(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r31->model[0] = Hu3DModelCreateFile(0x690001); + Hu3DModelAttrSet(temp_r31->model[0], 0x40000002); + Hu3DModelLayerSet(temp_r31->model[0], 0); + Hu3DMotionStartEndSet(temp_r31->model[0], 0.0f, 6.0f); + Hu3DMotionTimeSet(temp_r31->model[0], 6.0f); + return temp_r31; +} + +static void fn_1_8B58(omObjData *arg0) { + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } +} + +static void fn_1_8BAC(omObjData *arg0, s32 arg1) { + s16 temp_r31 = arg0->model[0]; + + switch (arg1) { + case 0: + Hu3DMotionStartEndSet(temp_r31, 0.0f, 6.0f); + Hu3DMotionTimeSet(temp_r31, 0.0f); + break; + case 1: + Hu3DMotionStartEndSet(temp_r31, 6.0f, 12.0f); + Hu3DMotionTimeSet(temp_r31, 6.0f); + break; + } + Hu3DModelAttrReset(arg0->model[0], 0x40000002); +} + +static omObjData *fn_1_8C84(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r31->model[0] = Hu3DModelCreateFile(0x69000E); + Hu3DModelLayerSet(temp_r31->model[0], 2); + Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); + omSetRot(temp_r31, 30.0f, 190.0f, 0.0f); + omSetSca(temp_r31, 0.6f, 0.6f, 0.6f); + Hu3DModelAttrSet(temp_r31->model[0], 1); + return temp_r31; +} + +static void fn_1_8D80(omObjData *arg0) { + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } +} + +static const s32 lbl_1_rodata_143C[153] = { + DATA_MAKE_NUM(DATADIR_OPTION, 55), + DATA_MAKE_NUM(DATADIR_OPTION, 56), + DATA_MAKE_NUM(DATADIR_OPTION, 57), + DATA_MAKE_NUM(DATADIR_OPTION, 58), + DATA_MAKE_NUM(DATADIR_OPTION, 59), + DATA_MAKE_NUM(DATADIR_OPTION, 60), + DATA_MAKE_NUM(DATADIR_OPTION, 61), + DATA_MAKE_NUM(DATADIR_OPTION, 62), + DATA_MAKE_NUM(DATADIR_OPTION, 50), + DATA_MAKE_NUM(DATADIR_OPTION, 51), + DATA_MAKE_NUM(DATADIR_OPTION, 66), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 52), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 53), + DATA_MAKE_NUM(DATADIR_OPTION, 49), + DATA_MAKE_NUM(DATADIR_OPTION, 49), + DATA_MAKE_NUM(DATADIR_OPTION, 19), + DATA_MAKE_NUM(DATADIR_OPTION, 20), + DATA_MAKE_NUM(DATADIR_OPTION, 21), + DATA_MAKE_NUM(DATADIR_OPTION, 22), + DATA_MAKE_NUM(DATADIR_OPTION, 23), + DATA_MAKE_NUM(DATADIR_OPTION, 24), + DATA_MAKE_NUM(DATADIR_OPTION, 25), + DATA_MAKE_NUM(DATADIR_OPTION, 26), + DATA_MAKE_NUM(DATADIR_OPTION, 27), + DATA_MAKE_NUM(DATADIR_OPTION, 28), + DATA_MAKE_NUM(DATADIR_OPTION, 29), + DATA_MAKE_NUM(DATADIR_OPTION, 30), + DATA_MAKE_NUM(DATADIR_OPTION, 31), + DATA_MAKE_NUM(DATADIR_OPTION, 32), + DATA_MAKE_NUM(DATADIR_OPTION, 33), + DATA_MAKE_NUM(DATADIR_OPTION, 34), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54), + DATA_MAKE_NUM(DATADIR_OPTION, 54) +}; + +static void fn_1_8DD4(omObjData *arg0) { + UnkRecordDataStruct01 *temp_r31 = arg0->data; + s32 i; + + for (i = 0; i < 153; i++) { + temp_r31->unk34[i] = espEntry(lbl_1_rodata_143C[i], 0, 0); + espDrawNoSet(temp_r31->unk34[i], 0x40); + espDispOff(temp_r31->unk34[i]); + } + espBankSet(temp_r31->unk34[47], 0); + espBankSet(temp_r31->unk34[48], 2); + HuSprExecLayerSet(0x40, 1); +} + +static void fn_1_8E98(omObjData *arg0) { + UnkRecordDataStruct01 *temp_r31 = arg0->data; + s32 i; + + for (i = 0; i < 153; i++) { + espKill(temp_r31->unk34[i]); + } +} + +static s32 fn_1_8EF8(s32 arg0, s32 arg1) { + s32 var_r31; + + var_r31 = 1; + while (arg1-- != 0) { + var_r31 *= 10; + } + return (arg0 % (var_r31 * 10)) / var_r31; +} + +static void fn_1_8F38(omObjData *arg0, s32 arg1) { + UnkRecordDataStruct01 *temp_r31 = arg0->data; + s32 temp_r28; + s32 i; + s32 j; + + espPosSet(temp_r31->unk34[arg1], 275.0f, 72.0f); + temp_r28 = temp_r31->unk178[temp_r31->unk170].unk00; + for (i = 0; i < 4; i++) { + espPosSet(temp_r31->unk34[i + 11], 323.0f + 20.0f * i, 116.0f); + if (temp_r28 > 999) { + espBankSet(temp_r31->unk34[i + 11], i + 10); + } else { + espBankSet(temp_r31->unk34[i + 11], fn_1_8EF8(temp_r28, 3 - i)); + } + } + espPosSet(temp_r31->unk34[8], 416.0f, 120.0f); + temp_r28 = temp_r31->unk178[temp_r31->unk170].unk24; + for (i = 0; i < 4; i++) { + espPosSet(temp_r31->unk34[i + 15], 364.0f + 20.0f * i, 268.0f); + if (temp_r28 > 999) { + espBankSet(temp_r31->unk34[i + 15], i + 10); + } else { + espBankSet(temp_r31->unk34[i + 15], fn_1_8EF8(temp_r28, 3 - i)); + } + } + espPosSet(temp_r31->unk34[9], 456.0f, 268.0f); + temp_r28 = temp_r31->unk178[temp_r31->unk170].unk28; + for (i = 0; i < 4; i++) { + espPosSet(temp_r31->unk34[i + 19], 364.0f + 20.0f * i, 312.0f); + if (temp_r28 > 999) { + espBankSet(temp_r31->unk34[i + 19], i + 10); + } else { + espBankSet(temp_r31->unk34[i + 19], fn_1_8EF8(temp_r28, 3 - i)); + } + } + espPosSet(temp_r31->unk34[10], 456.0f, 312.0f); + for (i = 0; i < 8; i++) { + espPosSet(temp_r31->unk34[i + 49], 92.0f + 50.0f * i, 200.0f); + for (j = 0; j < 3; j++) { + espPosSet(temp_r31->unk34[i * 3 + 23 + j], 80.0f + 50.0f * i + 12.0f * j, 230.0f); + espBankSet(temp_r31->unk34[i * 3 + 23 + j], fn_1_8EF8(temp_r31->unk178[temp_r31->unk170].unk04[i], 2 - j)); + } + } + espPosSet(temp_r31->unk34[47], 48.0f, 240.0f); + espPosSet(temp_r31->unk34[48], 492.0f, 240.0f); + espDispOn(temp_r31->unk34[arg1]); + for (i = 0; i < 4; i++) { + espDispOn(temp_r31->unk34[i + 11]); + } + espDispOn(temp_r31->unk34[8]); + for (i = 0; i < 4; i++) { + espDispOn(temp_r31->unk34[i + 15]); + } + espDispOn(temp_r31->unk34[9]); + for (i = 0; i < 4; i++) { + espDispOn(temp_r31->unk34[i + 19]); + } + espDispOn(temp_r31->unk34[10]); + for (i = 0; i < 8; i++) { + espDispOn(temp_r31->unk34[i + 49]); + for (j = 0; j < 3; j++) { + espDispOn(temp_r31->unk34[i * 3 + 23 + j]); + } + } + for (i = 0; i < 4; i++) { + fn_1_A7F0(temp_r31->unk08[i + 2]); + } + fn_1_A7B0(temp_r31->unk08[2], 64.0f, 96.0f); + fn_1_A71C(temp_r31->unk08[2], MAKE_MESSID(47, 19)); + fn_1_A7B0(temp_r31->unk08[3], 64.0f, 140.0f); + fn_1_A71C(temp_r31->unk08[3], MAKE_MESSID(47, 20)); + fn_1_A7B0(temp_r31->unk08[4], 64.0f, 248.0f); + fn_1_A71C(temp_r31->unk08[4], MAKE_MESSID(47, 21)); + fn_1_A7B0(temp_r31->unk08[5], 64.0f, 292.0f); + fn_1_A71C(temp_r31->unk08[5], MAKE_MESSID(47, 22)); +} + +static const s32 lbl_1_rodata_16F8[53] = { + 0, 1, 2, 3, 4, 5, 49, 50, 51, 52, + 53, 54, 55, 56, 8, 9, 10, 11, 12, 13, + 14, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 38, 39, 40, 35, 36, 37, 41, + 42, 43, 44, 45, 46, 15, 16, 17, 18, 19, + 20, 21, 22 +}; + +static void fn_1_96B4(omObjData *arg0) { + UnkRecordDataStruct01 *temp_r31 = arg0->data; + s32 i; + + for (i = 0; i < 53; i++) { + espDispOff(temp_r31->unk34[lbl_1_rodata_16F8[i]]); + } + for (i = 0; i < 4; i++) { + fn_1_A828(temp_r31->unk08[i + 2]); + } +} + +static void fn_1_9750(omObjData *arg0) { + UnkRecordDataStruct01 *temp_r31 = arg0->data; + s32 var_r27; + s32 i; + s32 j; + + espPosSet(temp_r31->unk34[6], 275.0f, 72.0f); + for (i = 0; i < 8; i++) { + espPosSet(temp_r31->unk34[i + 57], 148.0f + 80.0f * (i % 4), 172.0f + 104.0f * (i / 4)); + for (j = 0, var_r27 = 0; j < 6; j++) { + var_r27 += temp_r31->unk178[j].unk04[i]; + } + for (j = 0; j < 3; j++) { + espPosSet(temp_r31->unk34[i * 3 + 65 + j], 132.0f + 80.0f * (i % 4) + 16.0f * j, 218.0f + 104.0f * (i / 4)); + espBankSet(temp_r31->unk34[i * 3 + 65 + j], fn_1_8EF8(var_r27, 2 - j)); + } + } + espDispOn(temp_r31->unk34[6]); + for (i = 0; i < 8; i++) { + espDispOn(temp_r31->unk34[i + 57]); + for (j = 0; j < 3; j++) { + espDispOn(temp_r31->unk34[i * 3 + 65 + j]); + } + } + fn_1_A7B0(temp_r31->unk08[2], 136.0f, 96.0f); + fn_1_A71C(temp_r31->unk08[2], MAKE_MESSID(47, 23)); + fn_1_A7F0(temp_r31->unk08[2]); +} + +static const s32 lbl_1_rodata_17E8[33] = { + 6, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88 +}; + +static void fn_1_9A94(omObjData *arg0) { + UnkRecordDataStruct01 *temp_r31 = arg0->data; + s32 i; + + for (i = 0; i < 33; i++) { + espDispOff(temp_r31->unk34[lbl_1_rodata_17E8[i]]); + } + fn_1_A828(temp_r31->unk08[2]); +} + +static const s32 lbl_1_rodata_186C[6][3] = { + { 0x00000195, MAKE_MESSID(23, 5), 0 }, + { 0x00000197, MAKE_MESSID(23, 7), 1 }, + { 0x000001AB, MAKE_MESSID(23, 27), 0 }, + { 0x000001B0, MAKE_MESSID(23, 32), 0 }, + { 0x000001BB, MAKE_MESSID(23, 43), 0 }, + { 0x000001C8, MAKE_MESSID(23, 54), 0 } +}; + +static void fn_1_9B10(omObjData *arg0, s32 arg1) { + UnkRecordDataStruct01 *temp_r31 = arg0->data; + s32 temp_r25; + s32 temp_r27; + s32 var_r28; + s32 var_r26; + s32 var_r17; + s32 sp5C; + s32 sp58; + s32 sp54; + s32 sp50; + s32 sp4C; + s32 i; + s32 j; + + espPosSet(temp_r31->unk34[7], 275.0f, 72.0f); + espPosSet(temp_r31->unk34[47], 48.0f, 240.0f); + espPosSet(temp_r31->unk34[48], 492.0f, 240.0f); + espDispOn(temp_r31->unk34[7]); + for (i = 0; i < 8; i++) { + sp50 = 0; + temp_r27 = i + arg1 * 8; + if (temp_r27 >= 6) { + break; + } + sp54 = GWMGAvailGet(lbl_1_rodata_186C[temp_r27][0]); + temp_r25 = temp_r31->unk280[temp_r27]; + if (sp54 != 0) { + switch (lbl_1_rodata_186C[temp_r27][2]) { + case 1: + for (j = 0; j < 8; j++) { + var_r17 = fn_1_8EF8(temp_r25, 7 - j); + if (var_r17 != 0 || sp50 != 0 || j >= 7) { + espPosSet(temp_r31->unk34[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); + espBankSet(temp_r31->unk34[i * 8 + 89 + j], var_r17); + espDispOn(temp_r31->unk34[i * 8 + 89 + j]); + sp50 = 1; + } + } + break; + case 0: + sp5C = temp_r25 / 3600; + sp58 = (temp_r25 % 3600) / 60; + var_r26 = (temp_r25 % 3600) % 60; + if (lbl_1_rodata_186C[temp_r27][0] == 0x195 || lbl_1_rodata_186C[temp_r27][0] == 0x1B0) { + var_r26 *= 1.6916667f; + } else { + var_r26 *= 1.6666666f; + } + for (j = 1; j < 8; j++) { + espPosSet(temp_r31->unk34[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); + switch (j) { + case 0: + var_r28 = fn_1_8EF8(sp5C, 1); + break; + case 1: + var_r28 = fn_1_8EF8(sp5C, 0); + break; + case 3: + var_r28 = fn_1_8EF8(sp58, 1); + break; + case 4: + var_r28 = fn_1_8EF8(sp58, 0); + break; + case 6: + var_r28 = fn_1_8EF8(var_r26, 1); + break; + case 7: + var_r28 = fn_1_8EF8(var_r26, 0); + break; + case 2: + var_r28 = 11; + break; + case 5: + var_r28 = 12; + break; + } + espBankSet(temp_r31->unk34[i * 8 + 89 + j], var_r28); + espDispOn(temp_r31->unk34[i * 8 + 89 + j]); + } + break; + } + } else { + for (j = 0; j < 8; j++) { + espPosSet(temp_r31->unk34[i * 8 + 89 + j], 336.0f + 16.0f * j, 116.0f + 40.0f * i); + espBankSet(temp_r31->unk34[i * 8 + 89 + j], 0); + espDispOn(temp_r31->unk34[i * 8 + 89 + j]); + } + } + fn_1_A7B0(temp_r31->unk08[i + 2], 60.0f, 96.0f + 40.0f * i); + sp4C = (sp54 != 0) ? lbl_1_rodata_186C[temp_r27][1] : MAKE_MESSID(35, 0); + fn_1_A71C(temp_r31->unk08[i + 2], sp4C); + fn_1_A7F0(temp_r31->unk08[i + 2]); + } +} + +static const s32 lbl_1_rodata_18C8[65] = { + 7, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152 +}; + +static void fn_1_A3B0(omObjData *arg0) { + UnkRecordDataStruct01 *temp_r30 = arg0->data; + s32 i; + + for (i = 0; i < 65; i++) { + espDispOff(temp_r30->unk34[lbl_1_rodata_18C8[i]]); + } + for (i = 0; i < 8; i++) { + fn_1_A828(temp_r30->unk08[i + 2]); + } +} diff --git a/src/REL/option/room.c b/src/REL/option/room.c new file mode 100755 index 00000000..df159da8 --- /dev/null +++ b/src/REL/option/room.c @@ -0,0 +1,246 @@ +#include "REL/option.h" +#include "game/audio.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/process.h" +#include "game/window.h" + +typedef struct { + /* 0x00 */ omObjData *unk00; + /* 0x04 */ omObjData *unk04; + /* 0x08 */ omObjData *unk08; + /* 0x0C */ omObjData *unk0C; + /* 0x10 */ UnkWindowDataStruct *unk10; + /* 0x14 */ UnkWindowDataStruct *unk14; + /* 0x18 */ s32 unk18; + /* 0x1C */ s32 unk1C; + /* 0x20 */ s16 unk20; + /* 0x22 */ char unk22[6]; + /* 0x28 */ s32 unk28; +} UnkRoomDataStruct; // Size 0x2C + +static void fn_1_1844(omObjData *arg0, s32 arg1); +static void fn_1_1A8C(omObjData *arg0); +static omObjData *fn_1_2088(void); +static void fn_1_2110(omObjData *arg0); +static omObjData *fn_1_2144(void); +static void fn_1_21C4(omObjData *arg0); + +omObjData *lbl_1_bss_18; + +static omObjFunc lbl_1_data_68[] = { + NULL, + fn_1_1A8C +}; + +omObjData *fn_1_15A4(void) { + omObjData *var_r30; + UnkRoomDataStruct *temp_r31; + + var_r30 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRoomDataStruct), MEMORY_DEFAULT_NUM); + var_r30->data = temp_r31; + temp_r31->unk18 = 0; + temp_r31->unk20 = -1; + temp_r31->unk28 = 0; + fn_1_B74(lbl_1_bss_10, 600.0f, 60.0f, 120.0f, 1); + fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 1); + temp_r31->unk00 = fn_1_2088(); + lbl_1_bss_38 = fn_1_4028(); + lbl_1_bss_40 = fn_1_80E4(); + lbl_1_bss_30 = fn_1_3158(); + lbl_1_bss_20 = fn_1_21F8(); + temp_r31->unk04 = fn_1_2144(); + temp_r31->unk08 = fn_1_2144(); + temp_r31->unk0C = fn_1_2144(); + omSetRot(temp_r31->unk04, 0.0f, 0.0f, 0.0f); + omSetRot(temp_r31->unk08, 0.0f, 120.0f, 0.0f); + omSetRot(temp_r31->unk0C, 0.0f, 240.0f, 0.0f); + temp_r31->unk10 = fn_1_A44C(0); + temp_r31->unk14 = fn_1_A44C(1); + return var_r30; +} + +void fn_1_1798(omObjData *arg0) { + UnkRoomDataStruct *temp_r31 = arg0->data; + + fn_1_2110(temp_r31->unk00); + fn_1_42DC(lbl_1_bss_38); + fn_1_322C(lbl_1_bss_30); + fn_1_825C(lbl_1_bss_40); + fn_1_241C(lbl_1_bss_20); + fn_1_21C4(temp_r31->unk04); + fn_1_21C4(temp_r31->unk08); + fn_1_21C4(temp_r31->unk0C); + fn_1_A6AC(temp_r31->unk10); + fn_1_A6AC(temp_r31->unk14); + HuMemDirectFree(temp_r31); +} + +static const float lbl_1_rodata_BC[3] = { 45.0f, 165.0f, 285.0f }; + +static void fn_1_1844(omObjData *arg0, s32 arg1) { + UnkRoomDataStruct *temp_r31 = arg0->data; + float sp10; + float spC; + float sp8; + float var_f31; + + temp_r31->unk18 += (arg1 == 0) ? -1 : 1; + if (temp_r31->unk18 < 0) { + temp_r31->unk18 = 2; + } else if (temp_r31->unk18 >= 3) { + temp_r31->unk18 = 0; + } + fn_1_C88(lbl_1_bss_10, &sp10, &spC, &sp8); + fn_1_B74(lbl_1_bss_10, fn_1_BF8(lbl_1_bss_10), fn_1_C28(lbl_1_bss_10) + (arg1 == 0 ? -120.0f : 120.0f), spC, 0x60); + if (temp_r31->unk18 == 2 && arg1 == 0) { + var_f31 = lbl_1_rodata_BC[2] - 360.0f; + } else if (temp_r31->unk18 == 0 && arg1 == 1) { + var_f31 = 360.0f + lbl_1_rodata_BC[0]; + } else { + var_f31 = lbl_1_rodata_BC[temp_r31->unk18]; + } + fn_1_2508(lbl_1_bss_20, var_f31, 430.0f, 0x60); +} + +void fn_1_1A2C(omObjData *arg0, s32 arg1) { + UnkRoomDataStruct *temp_r31 = arg0->data; + + temp_r31->unk1C = arg1; + arg0->func = lbl_1_data_68[arg1]; + arg0->unk10 = 0; + arg0->unk10 = 0; +} + +s32 fn_1_1A70(omObjData *arg0) { + UnkRoomDataStruct *temp_r31 = arg0->data; + + return temp_r31->unk1C; +} + +static const s32 lbl_1_rodata_D4[] = { + MAKE_MESSID(47, 1), + MAKE_MESSID(47, 7), + MAKE_MESSID(47, 4) +}; + +static void fn_1_1A8C(omObjData *arg0) { + UnkRoomDataStruct *temp_r31 = arg0->data; + + switch (arg0->unk10) { + case 0: + if (temp_r31->unk28 == 0) { + fn_1_B74(lbl_1_bss_10, 600.0f, 60.0f, 120.0f, 1); + fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 1); + temp_r31->unk28 = 1; + } + arg0->unk10 = 1; + /* fallthrough */ + case 1: + if (fn_1_CB8(lbl_1_bss_10) != 0) { + break; + } + fn_1_A6EC(temp_r31->unk10); + fn_1_A71C(temp_r31->unk10, lbl_1_rodata_D4[temp_r31->unk18]); + fn_1_A6EC(temp_r31->unk14); + fn_1_A71C(temp_r31->unk14, MAKE_MESSID(47, 14)); + arg0->unk10 = 2; + /* fallthrough */ + case 2: + if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) { + if (fn_1_550(0x200) != 0) { + HuAudFXPlay(3); + arg0->unk10 = 7; + } else if (fn_1_584(1) != 0) { + fn_1_1844(arg0, 0); + fn_1_A704(temp_r31->unk10); + fn_1_A704(temp_r31->unk14); + HuAudFXPlay(0); + arg0->unk10 = 1; + } else if (fn_1_584(2) != 0) { + fn_1_1844(arg0, 1); + fn_1_A704(temp_r31->unk10); + fn_1_A704(temp_r31->unk14); + HuAudFXPlay(0); + arg0->unk10 = 1; + } else if (fn_1_550(0x100) != 0) { + fn_1_A704(temp_r31->unk10); + fn_1_A704(temp_r31->unk14); + HuAudFXPlay(2); + arg0->unk10 = 3; + } + } + break; + case 3: + if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) { + switch (temp_r31->unk18) { + case 0: + fn_1_3290(lbl_1_bss_30, 1); + arg0->unk10 = 4; + break; + case 1: + fn_1_4388(lbl_1_bss_38, 1); + arg0->unk10 = 5; + break; + case 2: + fn_1_82B0(lbl_1_bss_40, 1); + arg0->unk10 = 6; + break; + } + } + break; + case 4: + if (fn_1_32D4(lbl_1_bss_30) == 0) { + arg0->unk10 = 1; + } + break; + case 5: + if (fn_1_43CC(lbl_1_bss_38) == 0) { + arg0->unk10 = 1; + } + break; + case 6: + if (fn_1_82F4(lbl_1_bss_40) == 0) { + arg0->unk10 = 1; + } + break; + case 7: + fn_1_A704(temp_r31->unk10); + fn_1_A704(temp_r31->unk14); + arg0->unk10 = 8; + /* fallthrough */ + case 8: + if (temp_r31->unk10->unk20 == 0 && temp_r31->unk14->unk20 == 0) { + fn_1_1A2C(arg0, 0); + } + break; + } +} + +static omObjData *fn_1_2088(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r31->model[0] = Hu3DModelCreateFile(0x690000); + Hu3DModelLayerSet(temp_r31->model[0], 0); + Hu3DModelShadowMapSet(temp_r31->model[0]); + return temp_r31; +} + +static void fn_1_2110(omObjData *arg0) { + Hu3DModelKill(arg0->model[0]); +} + +static omObjData *fn_1_2144(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + Hu3DModelLayerSet(temp_r31->model[0], 0); + temp_r31->model[0] = Hu3DModelCreateFile(0x690006); + return temp_r31; +} + +static void fn_1_21C4(omObjData *arg0) { + Hu3DModelKill(arg0->model[0]); +} diff --git a/src/REL/option/rumble.c b/src/REL/option/rumble.c new file mode 100755 index 00000000..7261e288 --- /dev/null +++ b/src/REL/option/rumble.c @@ -0,0 +1,336 @@ +#include "REL/option.h" +#include "game/audio.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/pad.h" +#include "game/window.h" + +typedef struct { + /* 0x00 */ omObjData *unk00; + /* 0x04 */ omObjData *unk04; + /* 0x08 */ omObjData *unk08; + /* 0x0C */ omObjData *unk0C; + /* 0x10 */ omObjData *unk10; + /* 0x14 */ UnkWindowDataStruct *unk14[2]; + /* 0x20 */ s32 unk1C; + /* 0x20 */ s32 unk20; + /* 0x24 */ s32 unk24; + /* 0x28 */ s32 unk28; +} UnkRumbleDataStruct; // Size 0x2C + +static void fn_1_32F0(omObjData *arg0); +static omObjData *fn_1_37AC(void); +static void fn_1_3868(omObjData *arg0); +static omObjData *fn_1_38BC(void); +static void fn_1_398C(omObjData *arg0); +static void fn_1_39E0(omObjData *arg0, s32 arg1, s32 arg2); +static omObjData *fn_1_3B08(void); +static void fn_1_3B8C(omObjData *arg0); +static void fn_1_3BE0(omObjData *arg0, s32 arg1); +static omObjData *fn_1_3C6C(void); +static void fn_1_3D00(omObjData *arg0); +static omObjData *fn_1_3F28(void); +static void fn_1_3FD4(omObjData *arg0); + +omObjData *lbl_1_bss_30; + +static omObjFunc lbl_1_data_108[] = { + NULL, + fn_1_32F0 +}; + +omObjData *fn_1_3158(void) { + omObjData *temp_r30; + UnkRumbleDataStruct *temp_r3; + + temp_r30 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkRumbleDataStruct), MEMORY_DEFAULT_NUM); + temp_r30->data = temp_r3; + temp_r3->unk20 = GWGameStat.rumble; + temp_r3->unk00 = fn_1_38BC(); + fn_1_39E0(temp_r3->unk00, temp_r3->unk20, 0); + temp_r3->unk04 = fn_1_3B08(); + fn_1_3BE0(temp_r3->unk04, temp_r3->unk20); + temp_r3->unk08 = fn_1_3C6C(); + temp_r3->unk10 = fn_1_3F28(); + temp_r3->unk0C = fn_1_37AC(); + fn_1_3290(temp_r30, 0); + return temp_r30; +} + +void fn_1_322C(omObjData *arg0) { + UnkRumbleDataStruct *temp_r31 = arg0->data; + + fn_1_3868(temp_r31->unk0C); + fn_1_398C(temp_r31->unk00); + fn_1_3B8C(temp_r31->unk04); + fn_1_3FD4(temp_r31->unk10); + fn_1_3D00(temp_r31->unk08); + HuMemDirectFree(temp_r31); +} + +void fn_1_3290(omObjData *arg0, s32 arg1) { + UnkRumbleDataStruct *temp_r31 = arg0->data; + + temp_r31->unk1C = arg1; + arg0->func = lbl_1_data_108[arg1]; + arg0->unk10 = 0; + arg0->unk10 = 0; +} + +s32 fn_1_32D4(omObjData *arg0) { + UnkRumbleDataStruct *temp_r31 = arg0->data; + + return temp_r31->unk1C; +} + +static void fn_1_32F0(omObjData *arg0) { + UnkRumbleDataStruct *temp_r31 = arg0->data; + s32 i; + + switch (arg0->unk10) { + case 0: + temp_r31->unk14[0] = fn_1_A44C(0); + temp_r31->unk14[1] = fn_1_A44C(1); + fn_1_AF0(lbl_1_bss_10, -519.62f, 135.0f, 300.0f, 0x28); + fn_1_A6C(lbl_1_bss_10, -315.64f, 135.0f, 182.25f, 0x28); + fn_1_3D54(arg0); + Hu3DModelLayerSet(temp_r31->unk08->model[0], 1); + temp_r31->unk24 = 0; + arg0->unk10 = 1; + /* fallthrough */ + case 1: + if (fn_1_CB8(lbl_1_bss_10) != 0) { + break; + } + if (temp_r31->unk24 == 0) { + Hu3DModelAttrReset(temp_r31->unk0C->model[0], 1); + temp_r31->unk24 = 1; + Hu3DModelHookSet(temp_r31->unk00->model[0], "target", temp_r31->unk0C->model[0]); + } + fn_1_A6EC(temp_r31->unk14[1]); + fn_1_A71C(temp_r31->unk14[1], MAKE_MESSID(47, 15)); + fn_1_A6EC(temp_r31->unk14[0]); + if (temp_r31->unk20 != 0) { + fn_1_A71C(temp_r31->unk14[0], MAKE_MESSID(47, 2)); + } else { + fn_1_A71C(temp_r31->unk14[0], MAKE_MESSID(47, 3)); + } + arg0->unk10 = 2; + /* fallthrough */ + case 2: + if (temp_r31->unk14[0]->unk20 == 0 && temp_r31->unk14[1]->unk20 == 0) { + if (fn_1_550(0x200) != 0) { + HuAudFXPlay(3); + arg0->unk10 = 4; + } else if (fn_1_584(8) != 0 && temp_r31->unk20 == 0) { + fn_1_39E0(temp_r31->unk00, 1, 1); + temp_r31->unk20 = 1; + temp_r31->unk28 = 0; + GWGameStat.rumble = 1; + arg0->unk10 = 3; + } else if (fn_1_584(4) != 0 && temp_r31->unk20 != 0) { + fn_1_39E0(temp_r31->unk00, 0, 1); + temp_r31->unk20 = 0; + temp_r31->unk28 = 0; + GWGameStat.rumble = 0; + HuPadRumbleAllStop(); + arg0->unk10 = 3; + } + } + break; + case 3: + if (temp_r31->unk28++ >= 60) { + HuAudFXPlay(0x83C); + fn_1_3BE0(temp_r31->unk04, temp_r31->unk20); + if (temp_r31->unk20 != 0) { + HuPadRumbleSet(0, 0x3C, 0xA, 5); + Hu3DMotionTimeSet(temp_r31->unk10->model[0], 0.0f); + Hu3DModelAttrReset(temp_r31->unk10->model[0], 1); + } else { + Hu3DModelAttrSet(temp_r31->unk10->model[0], 1); + } + arg0->unk10 = 1; + } + break; + case 4: + fn_1_A704(temp_r31->unk14[1]); + fn_1_A704(temp_r31->unk14[0]); + Hu3DModelAttrSet(temp_r31->unk0C->model[0], 1); + fn_1_3E1C(arg0); + arg0->unk10 = 5; + /* fallthrough */ + case 5: + if (temp_r31->unk14[1]->unk20 == 0 && temp_r31->unk14[0]->unk20 == 0 && fn_1_3ED0(lbl_1_bss_30) == 0) { + for (i = 0; i < 2; i++) { + fn_1_A6AC(temp_r31->unk14[i]); + } + Hu3DModelHookReset(temp_r31->unk00->model[0]); + fn_1_AF0(lbl_1_bss_10, -519.62f, 120.0f, 300.0f, 0x28); + fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 0x28); + fn_1_3290(arg0, 0); + } + break; + } +} + +static omObjData *fn_1_37AC(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r31->model[0] = Hu3DModelCreateFile(0x69000F); + Hu3DModelLayerSet(temp_r31->model[0], 3); + omSetRot(temp_r31, 0.0f, 180.0f, 0.0f); + Hu3DModelAttrSet(temp_r31->model[0], 1); + return temp_r31; +} + +static void fn_1_3868(omObjData *arg0) { + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } +} + +static omObjData *fn_1_38BC(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r31->model[0] = Hu3DModelCreateFile(0x690002); + Hu3DModelAttrSet(temp_r31->model[0], 0x40000002); + if (GWGameStat.rumble != 0) { + Hu3DMotionTimeSet(temp_r31->model[0], 60.0f); + } else { + Hu3DMotionTimeSet(temp_r31->model[0], 0.0f); + } + return temp_r31; +} + +static void fn_1_398C(omObjData *arg0) { + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } +} + +static void fn_1_39E0(omObjData *arg0, s32 arg1, s32 arg2) { + s16 temp_r31 = arg0->model[0]; + + Hu3DModelAttrReset(arg0->model[0], 0x40000002); + Hu3DModelAttrReset(arg0->model[0], 0x40000001); + if (arg1 != 0) { + Hu3DMotionStartEndSet(temp_r31, 60.0f, 120.0f); + if (arg2 != 0) { + Hu3DMotionTimeSet(temp_r31, 60.0f); + } else { + Hu3DMotionTimeSet(temp_r31, 119.0f); + } + } else { + Hu3DMotionStartEndSet(temp_r31, 0.0f, 60.0f); + if (arg2 != 0) { + Hu3DMotionTimeSet(temp_r31, 0.0f); + } else { + Hu3DMotionTimeSet(temp_r31, 59.0f); + } + } +} + +static omObjData *fn_1_3B08(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r31->model[0] = Hu3DModelCreateFile(0x690009); + Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); + return temp_r31; +} + +static void fn_1_3B8C(omObjData *arg0) { + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } +} + +static void fn_1_3BE0(omObjData *arg0, s32 arg1) { + if (arg1 != 0) { + Hu3DModelAttrReset(arg0->model[0], 0x40000002); + Hu3DModelAttrSet(arg0->model[0], 0x40000001); + } else { + Hu3DModelAttrSet(arg0->model[0], 0x40000002); + Hu3DModelAttrReset(arg0->model[0], 0x40000001); + } +} + +static omObjData *fn_1_3C6C(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r31->model[0] = Hu3DModelCreateFile(0x69000A); + Hu3DModelAttrSet(temp_r31->model[0], 0x40000002); + Hu3DModelLayerSet(temp_r31->model[0], 2); + return temp_r31; +} + +static void fn_1_3D00(omObjData *arg0) { + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } +} + +void fn_1_3D54(omObjData *arg0) { + UnkRumbleDataStruct *temp_r31 = arg0->data; + s16 temp_r30 = temp_r31->unk08->model[0]; + + Hu3DMotionStartEndSet(temp_r30, 0.0f, 40.0f); + Hu3DMotionTimeSet(temp_r30, 0.0f); + Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000002); + Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000001); + Hu3DModelLayerSet(temp_r31->unk08->model[0], 2); + HuAudFXPlay(0x83D); +} + +void fn_1_3E1C(omObjData *arg0) { + UnkRumbleDataStruct *temp_r31 = arg0->data; + s16 temp_r30 = temp_r31->unk08->model[0]; + + Hu3DMotionStartEndSet(temp_r30, 40.0f, 80.0f); + Hu3DMotionTimeSet(temp_r30, 40.0f); + Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000002); + Hu3DModelAttrReset(temp_r31->unk08->model[0], 0x40000001); + HuAudFXPlay(0x83E); +} + +s32 fn_1_3ED0(omObjData *arg0) { + UnkRumbleDataStruct *temp_r31 = arg0->data; + s16 temp_r30 = temp_r31->unk08->model[0]; + + return !Hu3DMotionEndCheck(temp_r30); +} + +static omObjData *fn_1_3F28(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r31->model[0] = Hu3DModelCreateFile(0x69000B); + if (GWGameStat.rumble != 0) { + Hu3DModelAttrReset(temp_r31->model[0], 1); + } else { + Hu3DModelAttrSet(temp_r31->model[0], 1); + } + return temp_r31; +} + +static void fn_1_3FD4(omObjData *arg0) { + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } +} diff --git a/src/REL/option/scene.c b/src/REL/option/scene.c new file mode 100755 index 00000000..8a24add2 --- /dev/null +++ b/src/REL/option/scene.c @@ -0,0 +1,206 @@ +#include "REL/option.h" +#include "REL/executor.h" +#include "game/audio.h" +#include "game/esprite.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/saveload.h" +#include "game/sprite.h" +#include "game/wipe.h" + +#include "rel_sqrt_consts.h" + +typedef struct { + /* 0x00 */ s16 unk00; + /* 0x02 */ char unk02[2]; + /* 0x04 */ float unk04; + /* 0x08 */ float unk08; +} UnkSceneDataStruct; // Size 0xC + +static void fn_1_270(void); +static void fn_1_354(s16 arg0, s32 arg1, s32 arg2); +static void fn_1_468(void); +static void fn_1_5EC(omObjData *arg0); +static void fn_1_6E8(void); + +Process *lbl_1_bss_8; +static omObjData *lbl_1_bss_4; +static s32 lbl_1_bss_0; + +void ModuleProlog(void) { + lbl_1_bss_8 = omInitObjMan(0x40, 0x2000); + omGameSysInit(lbl_1_bss_8); + HuWinInit(1); + lbl_1_bss_0 = GWGameStat.rumble; + lbl_1_bss_4 = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 0, fn_1_5EC); + lbl_1_bss_4->unk10 = 0; + lbl_1_bss_28 = fn_1_2E04(); +} + +void fn_1_160(s16 arg0, s32 arg1, s32 arg2) { + UnkSceneDataStruct *temp_r31; + Process *temp_r30; + + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSceneDataStruct), MEMORY_DEFAULT_NUM); + temp_r31->unk00 = arg0; + temp_r31->unk08 = 1.0f / arg2; + if (arg1 != 0) { + temp_r31->unk08 = temp_r31->unk08; + temp_r31->unk04 = 0.0f; + } else { + temp_r31->unk08 = -temp_r31->unk08; + temp_r31->unk04 = 1.0f; + } + espDispOn(temp_r31->unk00); + espTPLvlSet(temp_r31->unk00, temp_r31->unk04); + temp_r30 = HuPrcChildCreate(fn_1_270, 0x3000, 0x1500, 0, HuPrcCurrentGet()); + temp_r30->user_data = temp_r31; +} + +static void fn_1_270(void) { + UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data; + + while (1) { + temp_r31->unk04 += temp_r31->unk08; + if (temp_r31->unk04 > 1.0f) { + temp_r31->unk04 = 1.0f; + break; + } + if (temp_r31->unk04 < 0.0f) { + temp_r31->unk04 = 0.0f; + break; + } + espTPLvlSet(temp_r31->unk00, temp_r31->unk04); + HuPrcVSleep(); + } + espTPLvlSet(temp_r31->unk00, temp_r31->unk04); + if (temp_r31->unk04 <= 0.0f) { + espDispOff(temp_r31->unk00); + } + HuMemDirectFree(temp_r31); + HuPrcEnd(); +} + +static void fn_1_354(s16 arg0, s32 arg1, s32 arg2) { + UnkSceneDataStruct *temp_r31; + Process *temp_r30; + + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSceneDataStruct), MEMORY_DEFAULT_NUM); + temp_r31->unk00 = arg0; + temp_r31->unk08 = 1.0f / arg2; + if (arg1 != 0) { + temp_r31->unk08 = temp_r31->unk08; + temp_r31->unk04 = 0.0f; + } else { + temp_r31->unk08 = -temp_r31->unk08; + temp_r31->unk04 = 1.0f; + } + Hu3DModelAttrReset(temp_r31->unk00, 1); + Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04); + temp_r30 = HuPrcChildCreate(fn_1_468, 0x3000, 0x1500, 0, HuPrcCurrentGet()); + temp_r30->user_data = temp_r31; +} + +static void fn_1_468(void) { + UnkSceneDataStruct *temp_r31 = HuPrcCurrentGet()->user_data; + + while (1) { + temp_r31->unk04 += temp_r31->unk08; + if (temp_r31->unk04 > 1.0f) { + temp_r31->unk04 = 1.0f; + break; + } + if (temp_r31->unk04 < 0.0f) { + temp_r31->unk04 = 0.0f; + break; + } + Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04); + HuPrcVSleep(); + } + Hu3DModelTPLvlSet(temp_r31->unk00, temp_r31->unk04); + if (temp_r31->unk04 <= 0.0f) { + Hu3DModelAttrSet(temp_r31->unk00, 1); + } + HuMemDirectFree(temp_r31); + HuPrcEnd(); +} + +s32 fn_1_550(u16 arg0) { + u32 temp_r31 = HuPadBtnDown[0] & arg0; + + return (temp_r31 != 0); +} + +s32 fn_1_584(u16 arg0) { + u32 temp_r31 = HuPadDStkRep[0] & arg0; + + return (temp_r31 != 0); +} + +s32 fn_1_5B8(u16 arg0) { + u32 temp_r31 = HuPadDStk[0] & arg0; + + return (temp_r31 != 0); +} + +static void fn_1_5EC(omObjData *arg0) { + switch (arg0->unk10) { + case 0: + arg0->unk10 = 1; + /* fallthrough */ + case 1: + if (omSysExitReq == 0) { + break; + } + arg0->unk10 = 2; + /* fallthrough */ + case 2: + WipeCreate(2, 0, 0x3C); + HuAudFadeOut(1000); + arg0->unk10 = 3; + /* fallthrough */ + case 3: + if (WipeStatGet() == 0) { + fn_1_2F4C(lbl_1_bss_28); + if (lbl_1_bss_0 != GWGameStat.rumble) { + omSysExitReq = 0; + fn_1_6E8(); + } + omOvlReturnEx(1, 1); + } + break; + } +} + +static void fn_1_6E8(void) { + s16 temp_r31; + + if (SLSaveFlagGet() == 0) { + return; + } + Hu3DAllKill(); + HuSprClose(); + HuSprInit(); + espInit(); + HuPrcVSleep(); + temp_r31 = espEntry(0x860020, 0x1388, 0); + espPosSet(temp_r31, 288.0f, 240.0f); + espAttrReset(temp_r31, 4); + Hu3DBGColorSet(0, 0, 0); + WipeCreate(1, 0, 0xA); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + SLCommonSet(); + if (SLSave() == 0) { + GWSystem.save_mode = 1; + } + WipeCreate(2, 0, 0x14); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } +} diff --git a/src/REL/option/sound.c b/src/REL/option/sound.c new file mode 100755 index 00000000..75fbe8f4 --- /dev/null +++ b/src/REL/option/sound.c @@ -0,0 +1,1654 @@ +#include "REL/option.h" +#include "game/data.h" +#include "game/esprite.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/memory.h" +#include "game/msm.h" +#include "game/process.h" +#include "game/window.h" + +#include "dolphin.h" +#include "math.h" + +typedef struct { + /* 0x000 */ omObjData *unk00[26]; + /* 0x068 */ UnkWindowDataStruct *unk68[13]; + /* 0x09C */ s32 unk9C; + /* 0x0A0 */ s16 unkA0[19]; + /* 0x0C6 */ char unkC6[2]; + /* 0x0C8 */ s32 unkC8; + /* 0x0CC */ s32 unkCC; + /* 0x0D0 */ s32 unkD0; + /* 0x0D4 */ s32 unkD4; + /* 0x0D8 */ s32 unkD8; + /* 0x0DC */ s32 unkDC; + /* 0x0E0 */ s16 unkE0; + /* 0x0E2 */ char unkE2[2]; + /* 0x0E4 */ s32 unkE4; + /* 0x0E8 */ s32 unkE8; + /* 0x0EC */ s32 unkEC; + /* 0x0F0 */ s16 unkF0; + /* 0x0F2 */ s16 unkF2; + /* 0x0F4 */ s16 unkF4; + /* 0x0F6 */ s16 unkF6; + /* 0x0F8 */ s32 unkF8; + /* 0x0FC */ s32 unkFC; + /* 0x100 */ s32 unk100; + /* 0x104 */ float unk104; + /* 0x108 */ float unk108; + /* 0x10C */ Process *unk10C; +} UnkSoundDataStruct00; // Size 0x110 + +typedef struct { + /* 0x00 */ s32 unk00; + /* 0x04 */ s32 unk04; + /* 0x08 */ s32 unk08; + /* 0x0C */ float unk0C; + /* 0x10 */ float unk10; +} UnkSoundDataStruct01; // Size 0x14 + +typedef struct { + /* 0x00 */ BOOL unk00; + /* 0x04 */ s32 unk04; + /* 0x08 */ s16 unk08; + /* 0x0A */ s16 unk0A; + /* 0x0C */ s32 unk0C; +} lbl_1_rodata_1E0_Data; // Size 0x10 + +static void fn_1_43E8(omObjData *arg0); +static void fn_1_4658(omObjData *arg0); +static void fn_1_4A7C(omObjData *arg0); +static void fn_1_4E50(omObjData *arg0); +static void fn_1_578C(omObjData *arg0); +static void fn_1_6044(omObjData *arg0, s32 arg1); +static void fn_1_613C(omObjData *arg0); +static omObjData *fn_1_61A0(void); +static void fn_1_629C(omObjData *arg0); +static omObjData *fn_1_62F0(void); +static void fn_1_63EC(omObjData *arg0); +static omObjData *fn_1_6440(void); +static void fn_1_64D4(omObjData *arg0); +static omObjData *fn_1_6528(s32 arg0, s32 arg1); +static void fn_1_6640(omObjData *arg0); +static void fn_1_6694(omObjData *arg0); +static void fn_1_66CC(omObjData *arg0); +static void fn_1_6704(omObjData *arg0); +static void fn_1_67C8(omObjData *arg0); +static void fn_1_6828(omObjData *arg0); +static void fn_1_6A0C(omObjData *arg0); +static void fn_1_6A80(omObjData *arg0); +static void fn_1_6C5C(omObjData *arg0); +static void fn_1_6CD0(omObjData *arg0, s32 arg1); +static void fn_1_6EA4(omObjData *arg0); +static void fn_1_6F48(omObjData *arg0, s32 arg1); +static void fn_1_711C(omObjData *arg0); +static omObjData *fn_1_71C0(s32 arg0); +static void fn_1_72A8(omObjData *arg0); +static void fn_1_7310(omObjData *arg0); +static void fn_1_7710(omObjData *arg0, s32 arg1, s32 arg2, s32 arg3); +static void fn_1_78A0(omObjData *arg0); +static void fn_1_7900(omObjData *arg0); +static void fn_1_793C(void); +static void fn_1_7F00(omObjData *arg0); +static void fn_1_8048(omObjData *arg0); + +omObjData *lbl_1_bss_38; + +static const s32 lbl_1_rodata_1A8[] = { + MAKE_MESSID(47, 70), + MAKE_MESSID(47, 81), + MAKE_MESSID(47, 172), + MAKE_MESSID(47, 92), + MAKE_MESSID(47, 101), + MAKE_MESSID(47, 109), + MAKE_MESSID(47, 119), + MAKE_MESSID(47, 173), + MAKE_MESSID(47, 174), + MAKE_MESSID(47, 129), + MAKE_MESSID(47, 140), + MAKE_MESSID(47, 149), + MAKE_MESSID(47, 156), + MAKE_MESSID(47, 176) +}; + +static const lbl_1_rodata_1E0_Data lbl_1_rodata_1E0[14][10] = { + { + { TRUE, MAKE_MESSID(47, 71), 1, 0, 20 }, + { TRUE, MAKE_MESSID(47, 72), 2, 79, 43 }, + { TRUE, MAKE_MESSID(47, 73), 3, 81, 44 }, + { TRUE, MAKE_MESSID(47, 74), 29, 80, 45 }, + { TRUE, MAKE_MESSID(47, 76), 30, 82, 47 }, + { TRUE, MAKE_MESSID(47, 78), 1, 0, 12 }, + { TRUE, MAKE_MESSID(47, 77), 4, 83, 48 }, + { TRUE, MAKE_MESSID(47, 80), 11, 90, 40 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 79), 1, 0, 5 }, + { TRUE, MAKE_MESSID(47, 170), 33, 0, 12 }, + { TRUE, MAKE_MESSID(47, 82), 33, 0, 7 }, + { TRUE, MAKE_MESSID(47, 83), 33, 0, 4 }, + { TRUE, MAKE_MESSID(47, 171), 33, 0, 10 }, + { TRUE, MAKE_MESSID(47, 84), 33, 0, 9 }, + { TRUE, MAKE_MESSID(47, 85), 33, 0, 1 }, + { TRUE, MAKE_MESSID(47, 86), 33, 0, 3 }, + { TRUE, MAKE_MESSID(47, 87), 33, 0, 2 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 88), 33, 0, 5 }, + { TRUE, MAKE_MESSID(47, 89), 33, 0, 6 }, + { TRUE, MAKE_MESSID(47, 90), 33, 0, 11 }, + { TRUE, MAKE_MESSID(47, 91), 33, 0, 8 }, + { TRUE, MAKE_MESSID(47, 125), 1, 0, 2 }, + { TRUE, MAKE_MESSID(47, 126), 1, 0, 6 }, + { TRUE, MAKE_MESSID(47, 127), 1, 0, 9 }, + { TRUE, MAKE_MESSID(47, 128), 1, 0, 10 }, + { TRUE, MAKE_MESSID(47, 124), 12, 93, 49 }, + { TRUE, MAKE_MESSID(47, 123), 12, 93, 50 } + }, + { + { TRUE, MAKE_MESSID(47, 93), 5, 84, 13 }, + { TRUE, MAKE_MESSID(47, 94), 5, 84, 14 }, + { TRUE, MAKE_MESSID(47, 95), 5, 84, 15 }, + { TRUE, MAKE_MESSID(47, 96), 5, 84, 16 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 97), 6, 85, 17 }, + { TRUE, MAKE_MESSID(47, 98), 6, 85, 18 }, + { TRUE, MAKE_MESSID(47, 99), 6, 85, 19 }, + { TRUE, MAKE_MESSID(47, 100), 6, 85, 20 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 102), 7, 86, 21 }, + { TRUE, MAKE_MESSID(47, 103), 7, 86, 22 }, + { TRUE, MAKE_MESSID(47, 104), 7, 86, 23 }, + { TRUE, MAKE_MESSID(47, 105), 7, 86, 24 }, + { TRUE, MAKE_MESSID(47, 106), 7, 86, 25 }, + { TRUE, MAKE_MESSID(47, 107), 7, 86, 26 }, + { TRUE, MAKE_MESSID(47, 108), 7, 86, 27 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 110), 8, 87, 28 }, + { TRUE, MAKE_MESSID(47, 111), 8, 87, 30 }, + { TRUE, MAKE_MESSID(47, 112), 8, 87, 29 }, + { TRUE, MAKE_MESSID(47, 113), 8, 87, 31 }, + { TRUE, MAKE_MESSID(47, 114), 8, 87, 32 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 115), 9, 88, 33 }, + { TRUE, MAKE_MESSID(47, 116), 9, 88, 34 }, + { TRUE, MAKE_MESSID(47, 117), 9, 88, 35 }, + { TRUE, MAKE_MESSID(47, 118), 9, 88, 36 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 120), 10, 89, 37 }, + { TRUE, MAKE_MESSID(47, 121), 10, 89, 38 }, + { TRUE, MAKE_MESSID(47, 122), 10, 89, 39 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 130), 13, 94, 59 }, + { TRUE, MAKE_MESSID(47, 131), 13, 94, 57 }, + { TRUE, MAKE_MESSID(47, 132), 14, 95, 67 }, + { TRUE, MAKE_MESSID(47, 133), 15, 96, 68 }, + { TRUE, MAKE_MESSID(47, 134), 16, 97, 69 }, + { TRUE, MAKE_MESSID(47, 135), 17, 98, 70 }, + { TRUE, MAKE_MESSID(47, 136), 18, 99, 71 }, + { TRUE, MAKE_MESSID(47, 137), 19, 100, 72 }, + { TRUE, MAKE_MESSID(47, 138), 20, 101, 73 }, + { TRUE, MAKE_MESSID(47, 139), 21, 102, 74 } + }, + { + { TRUE, MAKE_MESSID(47, 141), 22, 103, 75 }, + { TRUE, MAKE_MESSID(47, 142), 23, 104, 76 }, + { TRUE, MAKE_MESSID(47, 143), 24, 105, 77 }, + { TRUE, MAKE_MESSID(47, 144), 13, 94, 58 }, + { TRUE, MAKE_MESSID(47, 175), 13, 94, 60 }, + { TRUE, MAKE_MESSID(47, 145), 1, 0, 1 }, + { TRUE, MAKE_MESSID(47, 146), 1, 0, 3 }, + { TRUE, MAKE_MESSID(47, 147), 1, 0, 4 }, + { TRUE, MAKE_MESSID(47, 148), 1, 0, 11 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 152), 25, 106, 61 }, + { TRUE, MAKE_MESSID(47, 150), 25, 106, 62 }, + { TRUE, MAKE_MESSID(47, 151), 25, 106, 63 }, + { TRUE, MAKE_MESSID(47, 155), 26, 107, 65 }, + { TRUE, MAKE_MESSID(47, 153), 26, 107, 64 }, + { TRUE, MAKE_MESSID(47, 154), 26, 107, 66 }, + { TRUE, MAKE_MESSID(47, 164), 1, 0, 13 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 157), 27, 108, 51 }, + { TRUE, MAKE_MESSID(47, 158), 27, 108, 53 }, + { TRUE, MAKE_MESSID(47, 159), 27, 108, 54 }, + { TRUE, MAKE_MESSID(47, 160), 27, 108, 52 }, + { TRUE, MAKE_MESSID(47, 161), 27, 108, 55 }, + { TRUE, MAKE_MESSID(47, 162), 27, 108, 56 }, + { TRUE, MAKE_MESSID(47, 163), 1, 0, 7 }, + { TRUE, MAKE_MESSID(47, 165), 1, 0, 22 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 177), 32, 92, 46 }, + { TRUE, MAKE_MESSID(47, 178), 31, 91, 41 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 }, + { FALSE, MAKE_MESSID(47, 69), 0, 0, 0 } + } +}; + +static const s32 lbl_1_rodata_AA0[12] = { + MAKE_MESSID( 0, 0), + MAKE_MESSID( 0, 1), + MAKE_MESSID( 0, 2), + MAKE_MESSID( 0, 3), + MAKE_MESSID( 0, 4), + MAKE_MESSID( 0, 5), + MAKE_MESSID( 0, 6), + MAKE_MESSID( 0, 7), + MAKE_MESSID(47, 34), + MAKE_MESSID(47, 44), + MAKE_MESSID(47, 55), + MAKE_MESSID(47, 62) +}; + +static const lbl_1_rodata_1E0_Data lbl_1_rodata_AD0[12][10] = { + { + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2217 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2219 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2216 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2223 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2220 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2221 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2222 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2218 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2208 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2210 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2207 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2214 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2211 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2212 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2213 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2209 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2226 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2228 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2225 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2232 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2229 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2230 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2231 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2227 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2253 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2255 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2252 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2259 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2256 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2257 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2258 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2254 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2244 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2246 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2243 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2250 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2247 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2248 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2249 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2245 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2199 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2201 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2198 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2205 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2202 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2203 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2204 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2200 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2190 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2192 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2189 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2196 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2193 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2194 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2195 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2191 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 26), 28, 109, 2235 }, + { TRUE, MAKE_MESSID(47, 27), 28, 109, 2237 }, + { TRUE, MAKE_MESSID(47, 28), 28, 109, 2234 }, + { TRUE, MAKE_MESSID(47, 29), 28, 109, 2241 }, + { TRUE, MAKE_MESSID(47, 30), 28, 109, 2238 }, + { TRUE, MAKE_MESSID(47, 31), 28, 109, 2239 }, + { TRUE, MAKE_MESSID(47, 32), 28, 109, 2240 }, + { TRUE, MAKE_MESSID(47, 33), 28, 109, 2236 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 35), 28, 109, 54 }, + { TRUE, MAKE_MESSID(47, 36), 28, 109, 55 }, + { TRUE, MAKE_MESSID(47, 37), 28, 109, 56 }, + { TRUE, MAKE_MESSID(47, 38), 28, 109, 67 }, + { TRUE, MAKE_MESSID(47, 39), 28, 109, 68 }, + { TRUE, MAKE_MESSID(47, 40), 28, 109, 69 }, + { TRUE, MAKE_MESSID(47, 41), 28, 109, 64 }, + { TRUE, MAKE_MESSID(47, 42), 28, 109, 65 }, + { TRUE, MAKE_MESSID(47, 43), 28, 109, 66 }, + { FALSE, MAKE_MESSID(47, 24), 0, 0, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 45), 28, 109, 75 }, + { TRUE, MAKE_MESSID(47, 46), 28, 109, 76 }, + { TRUE, MAKE_MESSID(47, 47), 28, 109, 77 }, + { TRUE, MAKE_MESSID(47, 48), 28, 109, 70 }, + { TRUE, MAKE_MESSID(47, 49), 28, 109, 71 }, + { TRUE, MAKE_MESSID(47, 50), 28, 109, 72 }, + { TRUE, MAKE_MESSID(47, 51), 28, 109, 58 }, + { TRUE, MAKE_MESSID(47, 52), 28, 109, 59 }, + { TRUE, MAKE_MESSID(47, 53), 28, 109, 60 }, + { TRUE, MAKE_MESSID(47, 54), 28, 109, 61 } + }, + { + { TRUE, MAKE_MESSID(47, 56), 28, 109, 62 }, + { TRUE, MAKE_MESSID(47, 57), 28, 109, 63 }, + { TRUE, MAKE_MESSID(47, 58), 28, 109, 79 }, + { TRUE, MAKE_MESSID(47, 59), 28, 109, 80 }, + { TRUE, MAKE_MESSID(47, 60), 28, 109, 73 }, + { TRUE, MAKE_MESSID(47, 61), 28, 109, 74 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + }, + { + { TRUE, MAKE_MESSID(47, 63), 28, 109, 36 }, + { TRUE, MAKE_MESSID(47, 64), 28, 109, 37 }, + { TRUE, MAKE_MESSID(47, 65), 28, 109, 38 }, + { TRUE, MAKE_MESSID(47, 67), 28, 109, 40 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 }, + { FALSE, MAKE_MESSID(47, 24), 28, 109, 0 } + } +}; + +static s32 lbl_1_data_118[14] = { + 1, 1, 1, 0, + 0, 0, 0, 0, + 0, 1, 1, 0, + 0, 0 +}; + +static omObjFunc lbl_1_data_150[] = { + NULL, + fn_1_43E8, + fn_1_4658, + fn_1_4A7C, + fn_1_4E50, + fn_1_578C +}; + +static s32 lbl_1_data_168[] = { + MAKE_MESSID(47, 8), + MAKE_MESSID(47, 10), + MAKE_MESSID(47, 9) +}; + +omObjData *fn_1_4028(void) { + omObjData *temp_r29; + UnkSoundDataStruct00 *temp_r3; + s32 i; + + temp_r29 = omAddObjEx(lbl_1_bss_8, 1003, 0, 0, 1, NULL); + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSoundDataStruct00), MEMORY_DEFAULT_NUM); + temp_r29->data = temp_r3; + temp_r3->unkCC = 0; + temp_r3->unkE8 = 0; + temp_r3->unkE4 = 0; + temp_r3->unkF0 = -2; + temp_r3->unkF2 = -1; + temp_r3->unkF4 = -1; + temp_r3->unkF6 = -1; + temp_r3->unk10C = NULL; + switch (GWGameStat.sound_mode) { + case 0: + temp_r3->unkD0 = 1; + break; + case 2: + default: + temp_r3->unkD0 = 0; + break; + } + temp_r3->unk00[0] = fn_1_6440(); + for (i = 0; i < 6; i++) { + temp_r3->unk00[i + 1] = fn_1_6528(i % 3, (i / 3) > 0); + } + fn_1_613C(temp_r29); + temp_r3->unk00[7] = fn_1_61A0(); + temp_r3->unk00[8] = fn_1_62F0(); + for (i = 0; i < 16; i++) { + temp_r3->unk00[i + 10] = fn_1_71C0((i / 8) == 0 ? 0 : 1); + } + fn_1_6704(temp_r29); + fn_1_4388(temp_r29, 0); + for (i = 0; i < 6; i++) { + lbl_1_data_118[i + 3] = (GWGameStat.board_play_count[i] != 0) ? 1 : 0; + } + lbl_1_data_118[11] = (GWGameStat.field10E_bit6 != 0) ? 1 : 0; + lbl_1_data_118[12] = (GWGameStat.field10E_bit6 != 0) ? 1 : 0; + lbl_1_data_118[13] = (GWGameStat.field10E_bit6 != 0) ? 1 : 0; + return temp_r29; +} + +void fn_1_42DC(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + s32 i; + + fn_1_629C(temp_r31->unk00[7]); + fn_1_63EC(temp_r31->unk00[8]); + fn_1_64D4(temp_r31->unk00[0]); + for (i = 0; i < 6; i++) { + fn_1_6640(temp_r31->unk00[i + 1]); + } + for (i = 0; i < 16; i++) { + fn_1_72A8(temp_r31->unk00[i + 10]); + } + fn_1_67C8(arg0); + HuMemDirectFree(temp_r31); +} + +void fn_1_4388(omObjData *arg0, s32 arg1) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + + temp_r31->unk9C = arg1; + arg0->func = lbl_1_data_150[arg1]; + arg0->unk10 = 0; + arg0->unk10 = 0; +} + +s32 fn_1_43CC(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + + return temp_r31->unk9C; +} + +static void fn_1_43E8(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r30 = arg0->data; + s32 i; + + switch (arg0->unk10) { + case 0: + if (temp_r30->unkE8 == 0) { + temp_r30->unk68[0] = fn_1_A44C(0); + temp_r30->unk68[1] = fn_1_A44C(1); + temp_r30->unk68[2] = fn_1_A44C(2); + for (i = 0; i < 10; i++) { + temp_r30->unk68[i + 3] = fn_1_A44C(3); + } + fn_1_AF0(lbl_1_bss_10, 0.0f, 120.0f, -600.0f, 0x28); + fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, -350.0f, 0x28); + temp_r30->unkE8 = 1; + temp_r30->unkCC = 0; + temp_r30->unkE4 = 0; + arg0->unk10 = 1; + } else { + arg0->unk10 = 2; + } + break; + case 1: + if (fn_1_CB8(lbl_1_bss_10) == 0) { + fn_1_4388(arg0, 2); + } + break; + case 2: + for (i = 0; i < 13; i++) { + fn_1_A6AC(temp_r30->unk68[i]); + } + fn_1_AF0(lbl_1_bss_10, 0.0f, 120.0f, -600.0f, 0x28); + fn_1_A6C(lbl_1_bss_10, 0.0f, 120.0f, 0.0f, 0x28); + temp_r30->unkE8 = 0; + temp_r30->unkE4 = 0; + fn_1_4388(arg0, 0); + break; + } +} + +static void fn_1_4658(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + + switch (arg0->unk10) { + case 0: + fn_1_613C(arg0); + temp_r31->unkD8 = temp_r31->unkCC; + if (temp_r31->unkE4 == 0) { + fn_1_3D54(lbl_1_bss_30); + } else { + fn_1_6C5C(arg0); + fn_1_6EA4(arg0); + fn_1_711C(arg0); + } + temp_r31->unkE4 = 0; + temp_r31->unkEC = 0; + arg0->unk10 = 1; + /* fallthrough */ + case 1: + fn_1_6828(arg0); + fn_1_A6EC(temp_r31->unk68[1]); + fn_1_A71C(temp_r31->unk68[1], MAKE_MESSID(47, 168)); + fn_1_A6EC(temp_r31->unk68[0]); + fn_1_A71C(temp_r31->unk68[0], lbl_1_data_168[temp_r31->unkD8]); + if (temp_r31->unkEC == 0) { + Hu3DModelAttrReset(temp_r31->unk00[7]->model[0], 1); + temp_r31->unkEC = 1; + } + omSetTra(temp_r31->unk00[7], -34.0f + 40.0f * temp_r31->unkD8, 120.0f, -500.0f); + arg0->unk10 = 2; + /* fallthrough */ + case 2: + if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { + if (fn_1_550(0x100) != 0) { + temp_r31->unkCC = temp_r31->unkD8; + temp_r31->unkE4 = 1; + fn_1_6044(arg0, temp_r31->unkCC); + HuAudFXPlay(2); + arg0->unk10 = 3; + } else if (fn_1_550(0x200) != 0) { + HuAudFXPlay(3); + arg0->unk10 = 3; + } else if (fn_1_584(1) != 0 && temp_r31->unkD8 > 0) { + temp_r31->unkD8--; + HuAudFXPlay(0); + arg0->unk10 = 1; + } else if (fn_1_584(2) != 0 && temp_r31->unkD8 < 2) { + temp_r31->unkD8++; + HuAudFXPlay(0); + arg0->unk10 = 1; + } + } + break; + case 3: + fn_1_A704(temp_r31->unk68[1]); + fn_1_A704(temp_r31->unk68[0]); + if (temp_r31->unkE4 == 0) { + fn_1_3E1C(lbl_1_bss_30); + } + Hu3DModelAttrSet(temp_r31->unk00[7]->model[0], 1); + arg0->unk10 = 4; + /* fallthrough */ + case 4: + if ((temp_r31->unkE4 != 0 || fn_1_3ED0(lbl_1_bss_30) == 0) && temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { + if (temp_r31->unkE4 != 0) { + switch (temp_r31->unkCC) { + case 0: + fn_1_4388(arg0, 3); + break; + case 1: + fn_1_4388(arg0, 4); + break; + case 2: + fn_1_4388(arg0, 5); + break; + } + } else { + fn_1_6A0C(arg0); + fn_1_4388(arg0, 1); + } + } + break; + } +} + +static const s32 lbl_1_rodata_1278[] = { 2, 0 }; +static const s32 lbl_1_rodata_1280[] = { 1, 0 }; + +static const s32 lbl_1_rodata_1288[] = { + MAKE_MESSID(47, 11), + MAKE_MESSID(47, 12) +}; + +static void fn_1_4A7C(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + Vec sp8; + + switch (arg0->unk10) { + case 0: + fn_1_6A0C(arg0); + temp_r31->unkE4 = 0; + temp_r31->unkD8 = temp_r31->unkD0; + temp_r31->unkEC = 0; + temp_r31->unkE4 = 0; + fn_1_78A0(arg0); + arg0->unk10 = 1; + /* fallthrough */ + case 1: + fn_1_6A80(arg0); + fn_1_A6EC(temp_r31->unk68[1]); + fn_1_A71C(temp_r31->unk68[1], MAKE_MESSID(47, 168)); + fn_1_A6EC(temp_r31->unk68[0]); + fn_1_A71C(temp_r31->unk68[0], lbl_1_rodata_1288[temp_r31->unkD0]); + if (temp_r31->unkEC == 0) { + Hu3DModelAttrReset(temp_r31->unk00[8]->model[0], 1); + temp_r31->unkEC = 1; + } + sp8.x = -38.0f; + sp8.y = 140.0f - 15.0f * temp_r31->unkD8; + sp8.z = -500.0f; + omSetTra(temp_r31->unk00[8], sp8.x, sp8.y, sp8.z); + arg0->unk10 = 2; + /* fallthrough */ + case 2: + if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { + if (fn_1_550(0x100) != 0) { + temp_r31->unkD0 = temp_r31->unkD8; + if (temp_r31->unkD0 == 0) { + HuAudFXPlay(0x841); + } else { + HuAudFXPlay(0x842); + } + GWGameStat.sound_mode = lbl_1_rodata_1278[temp_r31->unkD8]; + msmSysSetOutputMode(lbl_1_rodata_1278[temp_r31->unkD8]); + OSSetSoundMode(lbl_1_rodata_1280[temp_r31->unkD8]); + temp_r31->unkE4 = 1; + fn_1_6A80(arg0); + temp_r31->unkC8 = 0; + arg0->unk10 = 3; + } else if (fn_1_550(0x200) != 0) { + HuAudFXPlay(3); + arg0->unk10 = 4; + } else if (fn_1_584(8) != 0 && temp_r31->unkD8 > 0) { + temp_r31->unkD8--; + HuAudFXPlay(0); + arg0->unk10 = 1; + } else if (fn_1_584(4) != 0 && temp_r31->unkD8 < 1) { + temp_r31->unkD8++; + HuAudFXPlay(0); + arg0->unk10 = 1; + } + } + break; + case 3: + if (temp_r31->unkC8++ >= 60) { + arg0->unk10 = 4; + return; + } + break; + case 4: + fn_1_7900(arg0); + fn_1_A704(temp_r31->unk68[1]); + fn_1_A704(temp_r31->unk68[0]); + Hu3DModelAttrSet(temp_r31->unk00[8]->model[0], 1); + arg0->unk10 = 5; + /* fallthrough */ + case 5: + if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { + temp_r31->unkE4 = 0; + fn_1_6A80(arg0); + temp_r31->unkE4 = 1; + fn_1_4388(arg0, 2); + } + break; + } +} + +static void fn_1_4E50(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f27; + float temp_f26; + s32 var_r28; + s32 var_r29; + s32 sp8; + + sp8 = temp_r31->unkD8; + switch (arg0->unk10) { + case 0: + fn_1_6A0C(arg0); + temp_r31->unkD4 = 0; + temp_r31->unk100 = 0; + temp_r31->unkFC = 0; + espBankSet(temp_r31->unkA0[14], 0); + espBankSet(temp_r31->unkA0[15], 2); + espPosSet(temp_r31->unkA0[14], 36.0f, 222.0f); + espPosSet(temp_r31->unkA0[15], 544.0f, 222.0f); + fn_1_160(temp_r31->unkA0[14], 1, 5); + fn_1_160(temp_r31->unkA0[15], 1, 5); + temp_r31->unkF8 = 0; + arg0->unk10 = 1; + /* fallthrough */ + case 1: + temp_r31->unkD8 = 0; + temp_r31->unkDC = 0; + if (temp_r31->unkFC != 0) { + do { + temp_r31->unkD4 += temp_r31->unkFC; + if (temp_r31->unkD4 >= 14) { + temp_r31->unkD4 = 0; + } else if (temp_r31->unkD4 < 0) { + temp_r31->unkD4 = 13; + } + } while (lbl_1_data_118[temp_r31->unkD4] == 0); + HuAudFXPlay(0x840); + if (temp_r31->unkFC > 0) { + espBankSet(temp_r31->unkA0[15], 3); + } else { + espBankSet(temp_r31->unkA0[14], 1); + } + temp_r31->unkF8 = 5; + temp_r31->unkFC = 0; + } + arg0->unk10 = 2; + /* fallthrough */ + case 2: + if (temp_r31->unk100 != 0) { + var_r29 = temp_r31->unkD8 + temp_r31->unk100; + if (var_r29 > 9) { + var_r29 = 9; + } else if (var_r29 < 0) { + var_r29 = 0; + } + if (!lbl_1_rodata_1E0[temp_r31->unkD4][var_r29].unk00) { + if (temp_r31->unkD8 < 5) { + for (var_r28 = var_r29; var_r28 >= 5; var_r28--) { + if (lbl_1_rodata_1E0[temp_r31->unkD4][var_r28].unk00) { + var_r29 = var_r28; + break; + } + } + if (var_r28 < 5) { + var_r29 = temp_r31->unkD8; + } + } else { + var_r29 = temp_r31->unkD8; + } + } + temp_r31->unkDC = temp_r31->unkD8; + if (temp_r31->unkD8 != var_r29) { + temp_r31->unkD8 = var_r29; + HuAudFXPlay(0x840); + } + temp_r31->unk100 = 0; + } + arg0->unk10 = 3; + /* fallthrough */ + case 3: + fn_1_6CD0(arg0, temp_r31->unkD4); + fn_1_A6EC(temp_r31->unk68[0]); + fn_1_A71C(temp_r31->unk68[0], MAKE_MESSID(47, 10)); + fn_1_A6EC(temp_r31->unk68[1]); + fn_1_A71C(temp_r31->unk68[1], MAKE_MESSID(47, 18)); + espDispOn(temp_r31->unkA0[18]); + temp_r31->unk104 = 0.0f; + temp_r31->unk108 = 0.0625f; + if (temp_r31->unkF8 > 0) { + arg0->unk10 = 5; + } else { + arg0->unk10 = 4; + } + /* fallthrough */ + case 4: + temp_f31 = 166.0f + 244.0f * (temp_r31->unkDC / 5); + temp_f30 = 144.0f + 29.0f * (temp_r31->unkDC % 5); + temp_f27 = 166.0f + 244.0f * (temp_r31->unkD8 / 5); + temp_f26 = 144.0f + 29.0f * (temp_r31->unkD8 % 5); + temp_f29 = temp_f31 + temp_r31->unk104 * (temp_f27 - temp_f31); + temp_f28 = temp_f30 + temp_r31->unk104 * (temp_f26 - temp_f30); + espPosSet(temp_r31->unkA0[18], temp_f29, temp_f28); + if ((temp_r31->unk104 += temp_r31->unk108) < 1.0f) { + break; + } + espPosSet(temp_r31->unkA0[18], 166.0f + 244.0f * (temp_r31->unkD8 / 5), 144.0f + 29.0f * (temp_r31->unkD8 % 5)); + arg0->unk10 = 6; + break; + case 5: + if (temp_r31->unkF8 > 0) { + temp_r31->unkF8--; + break; + } + espBankSet(temp_r31->unkA0[14], 0); + espBankSet(temp_r31->unkA0[15], 2); + arg0->unk10 = 6; + /* fallthrough */ + case 6: + if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { + if (fn_1_550(0x100) != 0) { + if (temp_r31->unkF0 == -2) { + HuAudFadeOut(0x64); + temp_r31->unkF0 = -1; + } else if (temp_r31->unkF0 != -1) { + HuAudSeqFadeOut(temp_r31->unkF0, 0x64); + temp_r31->unkF0 = -1; + } + fn_1_7F00(arg0); + } else if (fn_1_550(0x200) != 0) { + HuAudFXPlay(3); + temp_r31->unkC8 = 0; + arg0->unk10 = 7; + } else { + if (fn_1_5B8(1) != 0 && temp_r31->unkD8 >= 5) { + temp_r31->unk100 -= 5; + } else if (fn_1_5B8(2) != 0 && temp_r31->unkD8 < 5) { + temp_r31->unk100 += 5; + } + if (fn_1_5B8(8) != 0 && temp_r31->unkD8 % 5 > 0) { + temp_r31->unk100--; + } else if (fn_1_5B8(4) != 0 && temp_r31->unkD8 % 5 < 4) { + temp_r31->unk100++; + } + if (temp_r31->unk100 != 0) { + arg0->unk10 = 2; + } else if (fn_1_550(0x40) != 0) { + temp_r31->unkFC = -1; + } else if (fn_1_550(0x20) != 0) { + temp_r31->unkFC = 1; + } + if (temp_r31->unkFC != 0) { + arg0->unk10 = 1; + } + } + } + break; + case 7: + fn_1_A704(temp_r31->unk68[1]); + fn_1_A704(temp_r31->unk68[0]); + fn_1_8048(arg0); + fn_1_160(temp_r31->unkA0[14], 0, 5); + fn_1_160(temp_r31->unkA0[15], 0, 5); + arg0->unk10 = 8; + /* fallthrough */ + case 8: + if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { + espDispOff(temp_r31->unkA0[18]); + if (temp_r31->unkF0 == -1) { + temp_r31->unkF0 = HuAudSeqPlay(0x2D); + } + fn_1_4388(arg0, 2); + } + break; + } +} + +static void fn_1_578C(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f27; + float temp_f26; + s32 var_r28; + s32 var_r29; + + switch (arg0->unk10) { + case 0: + fn_1_6A0C(arg0); + temp_r31->unkD4 = 0; + temp_r31->unk100 = 0; + temp_r31->unkFC = 0; + espBankSet(temp_r31->unkA0[14], 0); + espBankSet(temp_r31->unkA0[15], 2); + espPosSet(temp_r31->unkA0[14], 36.0f, 222.0f); + espPosSet(temp_r31->unkA0[15], 544.0f, 222.0f); + fn_1_160(temp_r31->unkA0[14], 1, 5); + fn_1_160(temp_r31->unkA0[15], 1, 5); + temp_r31->unkF8 = 0; + arg0->unk10 = 3; + /* fallthrough */ + case 1: + temp_r31->unkD8 = 0; + temp_r31->unkDC = 0; + if (temp_r31->unkFC != 0) { + temp_r31->unkD4 += temp_r31->unkFC; + if (temp_r31->unkD4 > 11) { + temp_r31->unkD4 = 0; + } else if (temp_r31->unkD4 < 0) { + temp_r31->unkD4 = 11; + } + HuAudFXPlay(0x840); + if (temp_r31->unkFC > 0) { + espBankSet(temp_r31->unkA0[15], 3); + } else { + espBankSet(temp_r31->unkA0[14], 1); + } + temp_r31->unkF8 = 5; + temp_r31->unkFC = 0; + } + arg0->unk10 = 2; + /* fallthrough */ + case 2: + if (temp_r31->unk100 != 0) { + var_r29 = temp_r31->unkD8 + temp_r31->unk100; + if (var_r29 > 9) { + var_r29 = 9; + } else if (var_r29 < 0) { + var_r29 = 0; + } + if (!lbl_1_rodata_AD0[temp_r31->unkD4][var_r29].unk00) { + if (temp_r31->unkD8 < 5) { + for (var_r28 = var_r29; var_r28 >= 5; var_r28--) { + if (lbl_1_rodata_AD0[temp_r31->unkD4][var_r28].unk00) { + var_r29 = var_r28; + break; + } + } + if (var_r28 < 5) { + var_r29 = temp_r31->unkD8; + } + } else { + var_r29 = temp_r31->unkD8; + } + } + temp_r31->unkDC = temp_r31->unkD8; + if (temp_r31->unkD8 != var_r29) { + temp_r31->unkD8 = var_r29; + HuAudFXPlay(0x840); + } + temp_r31->unk100 = 0; + } + arg0->unk10 = 3; + /* fallthrough */ + case 3: + fn_1_6F48(arg0, temp_r31->unkD4); + fn_1_A6EC(temp_r31->unk68[0]); + fn_1_A71C(temp_r31->unk68[0], MAKE_MESSID(47, 9)); + fn_1_A6EC(temp_r31->unk68[1]); + fn_1_A71C(temp_r31->unk68[1], MAKE_MESSID(47, 18)); + espDispOn(temp_r31->unkA0[18]); + temp_r31->unk104 = 0.0f; + temp_r31->unk108 = 0.0625f; + if (temp_r31->unkF8 > 0) { + arg0->unk10 = 5; + } else { + arg0->unk10 = 4; + } + /* fallthrough */ + case 4: + temp_f31 = 166.0f + 244.0f * (temp_r31->unkDC / 5); + temp_f30 = 144.0f + 29.0f * (temp_r31->unkDC % 5); + temp_f27 = 166.0f + 244.0f * (temp_r31->unkD8 / 5); + temp_f26 = 144.0f + 29.0f * (temp_r31->unkD8 % 5); + temp_f29 = temp_f31 + temp_r31->unk104 * (temp_f27 - temp_f31); + temp_f28 = temp_f30 + temp_r31->unk104 * (temp_f26 - temp_f30); + espPosSet(temp_r31->unkA0[18], temp_f29, temp_f28); + if ((temp_r31->unk104 += temp_r31->unk108) < 1.0f) { + break; + } + espPosSet(temp_r31->unkA0[18], 166.0f + 244.0f * (temp_r31->unkD8 / 5), 144.0f + 29.0f * (temp_r31->unkD8 % 5)); + arg0->unk10 = 6; + break; + case 5: + if (temp_r31->unkF8 > 0) { + temp_r31->unkF8--; + break; + } + espBankSet(temp_r31->unkA0[14], 0); + espBankSet(temp_r31->unkA0[15], 2); + arg0->unk10 = 6; + /* fallthrough */ + case 6: + if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { + if (fn_1_550(0x100) != 0) { + fn_1_7F00(arg0); + } else if (fn_1_550(0x200) != 0) { + HuAudFXPlay(3); + temp_r31->unkC8 = 0; + arg0->unk10 = 7; + } else { + if (fn_1_5B8(1) != 0 && temp_r31->unkD8 >= 5) { + temp_r31->unk100 -= 5; + } else if (fn_1_5B8(2) != 0 && temp_r31->unkD8 < 5) { + temp_r31->unk100 += 5; + } + if (fn_1_5B8(8) != 0 && temp_r31->unkD8 % 5 > 0) { + temp_r31->unk100--; + } else if (fn_1_5B8(4) != 0 && temp_r31->unkD8 % 5 < 4) { + temp_r31->unk100++; + } + if (temp_r31->unk100 != 0) { + arg0->unk10 = 2; + } else if (fn_1_550(0x40) != 0) { + temp_r31->unkFC = -1; + } else if (fn_1_550(0x20) != 0) { + temp_r31->unkFC = 1; + } + if (temp_r31->unkFC != 0) { + arg0->unk10 = 1; + } + } + } + break; + case 7: + fn_1_A704(temp_r31->unk68[1]); + fn_1_A704(temp_r31->unk68[0]); + fn_1_8048(arg0); + fn_1_160(temp_r31->unkA0[14], 0, 5); + fn_1_160(temp_r31->unkA0[15], 0, 5); + arg0->unk10 = 8; + /* fallthrough */ + case 8: + if (temp_r31->unk68[0]->unk20 == 0 && temp_r31->unk68[1]->unk20 == 0) { + espDispOff(temp_r31->unkA0[18]); + fn_1_4388(arg0, 2); + } + break; + } +} + +static void fn_1_6044(omObjData *arg0, s32 arg1) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + + switch (arg1) { + case 0: + fn_1_6694(temp_r31->unk00[1]); + fn_1_6694(temp_r31->unk00[5]); + fn_1_6694(temp_r31->unk00[6]); + fn_1_66CC(temp_r31->unk00[4]); + fn_1_66CC(temp_r31->unk00[2]); + fn_1_66CC(temp_r31->unk00[3]); + break; + case 1: + fn_1_6694(temp_r31->unk00[4]); + fn_1_6694(temp_r31->unk00[2]); + fn_1_6694(temp_r31->unk00[6]); + fn_1_66CC(temp_r31->unk00[1]); + fn_1_66CC(temp_r31->unk00[5]); + fn_1_66CC(temp_r31->unk00[3]); + break; + case 2: + fn_1_6694(temp_r31->unk00[4]); + fn_1_6694(temp_r31->unk00[5]); + fn_1_6694(temp_r31->unk00[3]); + fn_1_66CC(temp_r31->unk00[1]); + fn_1_66CC(temp_r31->unk00[2]); + fn_1_66CC(temp_r31->unk00[6]); + break; + } +} + +static void fn_1_613C(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + + fn_1_6694(temp_r31->unk00[4]); + fn_1_6694(temp_r31->unk00[5]); + fn_1_6694(temp_r31->unk00[6]); + fn_1_66CC(temp_r31->unk00[1]); + fn_1_66CC(temp_r31->unk00[2]); + fn_1_66CC(temp_r31->unk00[3]); +} + +static omObjData *fn_1_61A0(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r31->model[0] = Hu3DModelCreateFile(0x69000D); + Hu3DModelLayerSet(temp_r31->model[0], 2); + Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); + omSetRot(temp_r31, -80.0f, 45.0f, 0.0f); + omSetSca(temp_r31, 0.6f, 0.6f, 0.6f); + Hu3DModelAttrSet(temp_r31->model[0], 1); + return temp_r31; +} + +static void fn_1_629C(omObjData *arg0) { + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } +} + +static omObjData *fn_1_62F0(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r31->model[0] = Hu3DModelCreateFile(0x69000E); + Hu3DModelLayerSet(temp_r31->model[0], 2); + Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); + omSetRot(temp_r31, 0.0f, -90.0f, 0.0f); + omSetSca(temp_r31, 0.6f, 0.6f, 0.6f); + Hu3DModelAttrSet(temp_r31->model[0], 1); + return temp_r31; +} + +static void fn_1_63EC(omObjData *arg0) { + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } +} + +static omObjData *fn_1_6440(void) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r31->model[0] = Hu3DModelCreateFile(0x690003); + Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); + Hu3DModelLayerSet(temp_r31->model[0], 0); + return temp_r31; +} + +static void fn_1_64D4(omObjData *arg0) { + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } +} + +static const Vec lbl_1_rodata_12D0[3] = { + { -40.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, + { 40.0f, 0.0f, 0.0f } +}; + +static omObjData *fn_1_6528(s32 arg0, s32 arg1) { + omObjData *temp_r31; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + if (arg1 != 0) { + temp_r31->model[0] = Hu3DModelCreateFile(0x690005); + } else { + temp_r31->model[0] = Hu3DModelCreateFile(0x690004); + } + Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); + Hu3DModelLayerSet(temp_r31->model[0], 0); + omSetTra(temp_r31, lbl_1_rodata_12D0[arg0].x, lbl_1_rodata_12D0[arg0].y, lbl_1_rodata_12D0[arg0].z); + return temp_r31; +} + +static void fn_1_6640(omObjData *arg0) { + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } +} + +static void fn_1_6694(omObjData *arg0) { + Hu3DModelAttrReset(arg0->model[0], 1); +} + +static void fn_1_66CC(omObjData *arg0) { + Hu3DModelAttrSet(arg0->model[0], 1); +} + +static s32 lbl_1_data_1BC[] = { + DATA_MAKE_NUM(DATADIR_OPTION, 38), + DATA_MAKE_NUM(DATADIR_OPTION, 39), + DATA_MAKE_NUM(DATADIR_OPTION, 40), + DATA_MAKE_NUM(DATADIR_OPTION, 35), + DATA_MAKE_NUM(DATADIR_OPTION, 36), + DATA_MAKE_NUM(DATADIR_OPTION, 37), + DATA_MAKE_NUM(DATADIR_OPTION, 41), + DATA_MAKE_NUM(DATADIR_OPTION, 43), + DATA_MAKE_NUM(DATADIR_OPTION, 42), + DATA_MAKE_NUM(DATADIR_OPTION, 44), + DATA_MAKE_NUM(DATADIR_OPTION, 45), + DATA_MAKE_NUM(DATADIR_OPTION, 46), + DATA_MAKE_NUM(DATADIR_OPTION, 47), + DATA_MAKE_NUM(DATADIR_OPTION, 48), + DATA_MAKE_NUM(DATADIR_OPTION, 49), + DATA_MAKE_NUM(DATADIR_OPTION, 49), + DATA_MAKE_NUM(DATADIR_OPTION, 63), + DATA_MAKE_NUM(DATADIR_OPTION, 64), + DATA_MAKE_NUM(DATADIR_OPTION, 65) +}; + +static void fn_1_6704(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + s32 i; + + for (i = 0; i < 19; i++) { + temp_r31->unkA0[i] = espEntry(lbl_1_data_1BC[i], 0, 0); + espDrawNoSet(temp_r31->unkA0[i], 0x40); + espDispOff(temp_r31->unkA0[i]); + } + espBankSet(temp_r31->unkA0[14], 0); + espBankSet(temp_r31->unkA0[15], 2); + HuSprExecLayerSet(0x40, 1); +} + +static void fn_1_67C8(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + s32 i; + + for (i = 0; i < 19; i++) { + espKill(temp_r31->unkA0[i]); + } +} + +static void fn_1_6828(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + float temp_f31 = 288.0f; + float temp_f30 = 188.0f; + + espPosSet(temp_r31->unkA0[12], 288.0f, 72.0f); + espPosSet(temp_r31->unkA0[0], temp_f31 + -112.0f, temp_f30); + espPosSet(temp_r31->unkA0[3], temp_f31 + -112.0f, temp_f30); + espPosSet(temp_r31->unkA0[1], temp_f31, temp_f30); + espPosSet(temp_r31->unkA0[4], temp_f31, temp_f30); + espPosSet(temp_r31->unkA0[2], temp_f31 + 112.0f, temp_f30); + espPosSet(temp_r31->unkA0[5], temp_f31 + 112.0f, temp_f30); + espDispOn(temp_r31->unkA0[12]); + switch (temp_r31->unkD8) { + case 0: + espDispOn(temp_r31->unkA0[3]); + espDispOn(temp_r31->unkA0[1]); + espDispOn(temp_r31->unkA0[2]); + espDispOff(temp_r31->unkA0[0]); + espDispOff(temp_r31->unkA0[4]); + espDispOff(temp_r31->unkA0[5]); + break; + case 1: + espDispOn(temp_r31->unkA0[0]); + espDispOn(temp_r31->unkA0[4]); + espDispOn(temp_r31->unkA0[2]); + espDispOff(temp_r31->unkA0[3]); + espDispOff(temp_r31->unkA0[1]); + espDispOff(temp_r31->unkA0[5]); + break; + case 2: + espDispOn(temp_r31->unkA0[0]); + espDispOn(temp_r31->unkA0[1]); + espDispOn(temp_r31->unkA0[5]); + espDispOff(temp_r31->unkA0[3]); + espDispOff(temp_r31->unkA0[4]); + espDispOff(temp_r31->unkA0[2]); + break; + } +} + +static const s32 lbl_1_rodata_1308[] = { 12, 0, 1, 2, 3, 4, 5 }; + +static void fn_1_6A0C(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r30 = arg0->data; + s32 i; + + for (i = 0; i < 7; i++) { + espDispOff(temp_r30->unkA0[lbl_1_rodata_1308[i]]); + } +} + +static void fn_1_6A80(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + float temp_f31 = 290.0f; + float temp_f30 = 192.0f; + + espPosSet(temp_r31->unkA0[13], 288.0f, 72.0f); + espPosSet(temp_r31->unkA0[6], temp_f31, temp_f30 - 32.0f); + espPosSet(temp_r31->unkA0[7], temp_f31, temp_f30 - 32.0f); + espPosSet(temp_r31->unkA0[8], temp_f31, temp_f30 + 32.0f); + espPosSet(temp_r31->unkA0[9], temp_f31, temp_f30 + 32.0f); + switch (temp_r31->unkD8) { + case 0: + espPosSet(temp_r31->unkA0[17], temp_f31, temp_f30 - 32.0f); + break; + case 1: + espPosSet(temp_r31->unkA0[17], temp_f31, temp_f30 + 32.0f); + break; + } + espDispOn(temp_r31->unkA0[13]); + switch (temp_r31->unkD8) { + case 0: + espDispOn(temp_r31->unkA0[6]); + espDispOn(temp_r31->unkA0[9]); + espDispOff(temp_r31->unkA0[7]); + espDispOff(temp_r31->unkA0[8]); + break; + case 1: + espDispOn(temp_r31->unkA0[7]); + espDispOn(temp_r31->unkA0[8]); + espDispOff(temp_r31->unkA0[6]); + espDispOff(temp_r31->unkA0[9]); + break; + } + if (temp_r31->unkE4 != 0) { + espDispOn(temp_r31->unkA0[17]); + } else { + espDispOff(temp_r31->unkA0[17]); + } +} + +static const s32 lbl_1_rodata_1330[] = { 13, 6, 7, 8, 9 }; + +static void fn_1_6C5C(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r30 = arg0->data; + s32 i; + + for (i = 0; i < 5; i++) { + espDispOff(temp_r30->unkA0[lbl_1_rodata_1330[i]]); + } +} + +static void fn_1_6CD0(omObjData *arg0, s32 arg1) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + s32 i; + + espPosSet(temp_r31->unkA0[10], 288.0f, 72.0f); + espDispOn(temp_r31->unkA0[10]); + fn_1_A7F0(temp_r31->unk68[2]); + for (i = 0; i < 10; i++) { + fn_1_A7F0(temp_r31->unk68[i + 3]); + fn_1_A7B0(temp_r31->unk68[i + 3], 52.0f + 244.0f * (i / 5), 124.0f + 29.0f * (i % 5)); + } + fn_1_A71C(temp_r31->unk68[2], lbl_1_rodata_1A8[arg1]); + for (i = 0; i < 10; i++) { + fn_1_A71C(temp_r31->unk68[i + 3], lbl_1_rodata_1E0[arg1][i].unk04); + } +} + +static const s32 lbl_1_rodata_134C[] = { 10 }; + +static void fn_1_6EA4(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r30 = arg0->data; + s32 i; + + for (i = 0; i < 1; i++) { + espDispOff(temp_r30->unkA0[lbl_1_rodata_134C[i]]); + } + fn_1_A828(temp_r30->unk68[2]); + for (i = 0; i < 10; i++) { + fn_1_A828(temp_r30->unk68[i + 3]); + } +} + +static void fn_1_6F48(omObjData *arg0, s32 arg1) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + s32 i; + + espPosSet(temp_r31->unkA0[11], 288.0f, 72.0f); + espDispOn(temp_r31->unkA0[11]); + fn_1_A7F0(temp_r31->unk68[2]); + for (i = 0; i < 10; i++) { + fn_1_A7F0(temp_r31->unk68[i + 3]); + fn_1_A7B0(temp_r31->unk68[i + 3], 52.0f + 244.0f * (i / 5), 124.0f + 29.0f * (i % 5)); + } + fn_1_A71C(temp_r31->unk68[2], lbl_1_rodata_AA0[arg1]); + for (i = 0; i < 10; i++) { + fn_1_A71C(temp_r31->unk68[i + 3], lbl_1_rodata_AD0[arg1][i].unk04); + } +} + +static const s32 lbl_1_rodata_1350[] = { 11, 0 }; + +static void fn_1_711C(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r30 = arg0->data; + s32 i; + + for (i = 0; i < 1; i++) { + espDispOff(temp_r30->unkA0[lbl_1_rodata_1350[i]]); + } + fn_1_A828(temp_r30->unk68[2]); + for (i = 0; i < 10; i++) { + fn_1_A828(temp_r30->unk68[i + 3]); + } +} + +static s32 lbl_1_data_208[] = { + DATA_MAKE_NUM(DATADIR_OPTION, 7), + DATA_MAKE_NUM(DATADIR_OPTION, 8) +}; + +static omObjData *fn_1_71C0(s32 arg0) { + omObjData *temp_r31; + UnkSoundDataStruct01 *temp_r3; + + temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkSoundDataStruct01), MEMORY_DEFAULT_NUM); + temp_r31->data = temp_r3; + temp_r3->unk00 = 0; + temp_r3->unk04 = arg0; + temp_r31->model[0] = Hu3DModelCreateFile(lbl_1_data_208[arg0]); + Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); + Hu3DModelLayerSet(temp_r31->model[0], 2); + Hu3DModelAttrReset(temp_r31->model[0], 2); + return temp_r31; +} + +static void fn_1_72A8(omObjData *arg0) { + UnkSoundDataStruct01 *temp_r30 = arg0->data; + s32 i; + + for (i = 0; i < 1; i++) { + Hu3DModelKill(arg0->model[i]); + } + HuMemDirectFree(temp_r30); +} + +static void fn_1_7310(omObjData *arg0) { + UnkSoundDataStruct01 *temp_r31 = arg0->data; + float temp_f31; + float temp_f30; + float var_f29; + float var_f28; + float temp_f27; + float temp_f26; + float temp_f25; + float temp_f24; + float temp_f23; + + Hu3DModelAttrReset(arg0->model[0], 1); + temp_f31 = sin(45.0f * temp_r31->unk0C * M_PI / 180.0); + temp_f31 = temp_f31 * temp_f31; + switch (temp_r31->unk08) { + case 0: + var_f29 = 174.5f + 7.0f * temp_f31; + var_f28 = -15.0 + 30.0 * sin(1440.0f * temp_f31 * M_PI / 180.0); + break; + case 1: + var_f29 = 185.5f - (7.0f * temp_f31); + var_f28 = 15.0 - 30.0 * sin(1440.0f * temp_f31 * M_PI / 180.0); + break; + } + temp_f23 = sin(180.0f * temp_r31->unk0C * M_PI / 180.0); + temp_f27 = 500.0f - 25.0f * temp_f31; + temp_f26 = temp_f27 * -sin(var_f29 * M_PI / 180.0); + temp_f25 = temp_f27 * cos(var_f29 * M_PI / 180.0); + temp_f24 = 160.0f - 15.0f * temp_r31->unk0C; + temp_f30 = 0.5 + 2.0 * sin(90.0f * temp_f31 * M_PI / 180.0); + omSetTra(arg0, temp_f26, temp_f24, temp_f25); + Hu3DModelTPLvlSet(arg0->model[0], temp_f23); + omSetSca(arg0, temp_f30, temp_f30, temp_f30); + omSetRot(arg0, 0.0f, 0.0f, var_f28); + if ((temp_r31->unk0C += temp_r31->unk10) < 1.0f) { + return; + } + temp_r31->unk00 = 0; + Hu3DModelAttrSet(arg0->model[0], 1); + arg0->func = NULL; + arg0->unk10 = 0; +} + +static void fn_1_7710(omObjData *arg0, s32 arg1, s32 arg2, s32 arg3) { + omObjData *var_r30; + UnkSoundDataStruct01 *var_r31; + s32 i; + + for (i = 0; i < 16; i++) { + var_r30 = ((UnkSoundDataStruct00*) arg0->data)->unk00[i + 10]; + var_r31 = var_r30->data; + if (var_r31->unk00 == 0 && var_r31->unk04 == arg1) { + break; + } + } + if (i != 16) { + Hu3DMotionTimeSet(var_r30->model[0], 2.0f * arg3); + Hu3DMotionStartEndSet(var_r30->model[0], 2.0f * arg3, 2.0f * arg3 + 1.0f); + var_r31->unk00 = 1; + var_r31->unk08 = arg2; + var_r31->unk0C = 0.0f; + var_r31->unk10 = 0.011111111f; + var_r30->func = fn_1_7310; + var_r30->unk10 = 0; + } +} + +static void fn_1_78A0(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + + temp_r31->unk10C = HuPrcChildCreate(fn_1_793C, 0x64, 0x2000, 0, HuPrcCurrentGet()); + temp_r31->unk10C->user_data = arg0; +} + +static void fn_1_7900(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + + HuPrcKill(temp_r31->unk10C); +} + +static void fn_1_793C(void) { + omObjData *temp_r26; + UnkSoundDataStruct00 *sp8; + s32 var_r21; + s32 temp_r31; + + temp_r26 = HuPrcCurrentGet()->user_data; + sp8 = temp_r26->data; + while (1) { + switch (sp8->unkD8) { + case 0: + var_r21 = 1; + temp_r31 = frandmod(7); + fn_1_7710(temp_r26, var_r21, 0, temp_r31); + var_r21 = 0; + temp_r31 = frandmod(7); + fn_1_7710(temp_r26, var_r21, 1, temp_r31); + break; + case 1: + var_r21 = 0; + temp_r31 = frandmod(7); + fn_1_7710(temp_r26, var_r21, 0, temp_r31); + fn_1_7710(temp_r26, var_r21, 1, temp_r31); + break; + } + HuPrcSleep(0x18); + } +} + +static void fn_1_7F00(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r30 = arg0->data; + lbl_1_rodata_1E0_Data *var_r31; + + if (temp_r30->unkCC == 1) { + var_r31 = (lbl_1_rodata_1E0_Data*) &lbl_1_rodata_1E0[temp_r30->unkD4][temp_r30->unkD8]; + } else { + var_r31 = (lbl_1_rodata_1E0_Data*) &lbl_1_rodata_AD0[temp_r30->unkD4][temp_r30->unkD8]; + } + if (var_r31->unk00 != 0) { + fn_1_8048(arg0); + switch (var_r31->unk08) { + case 1: + temp_r30->unkF4 = HuAudSStreamPlay(var_r31->unk0C); + break; + case 28: + if (var_r31->unk0A != temp_r30->unkE0) { + HuAudSndGrpSetSet(var_r31->unk0A); + } + temp_r30->unkF6 = HuAudFXPlay(var_r31->unk0C); + break; + default: + if (var_r31->unk0A != temp_r30->unkE0 && var_r31->unk0A != 2) { + HuAudSndGrpSetSet(var_r31->unk0A); + } + temp_r30->unkF2 = HuAudSeqPlay(var_r31->unk0C); + break; + } + temp_r30->unkE0 = var_r31->unk0A; + HuPrcSleep(40); + } +} + +static void fn_1_8048(omObjData *arg0) { + UnkSoundDataStruct00 *temp_r31 = arg0->data; + + if (temp_r31->unkF2 != -1) { + HuAudSeqFadeOut(temp_r31->unkF2, 0x64); + temp_r31->unkF2 = -1; + } + if (temp_r31->unkF4 != -1) { + HuAudSStreamFadeOut(temp_r31->unkF4, 0x64); + temp_r31->unkF4 = -1; + } + if (temp_r31->unkF6 != -1) { + HuAudFXFadeOut(temp_r31->unkF6, 0x64); + temp_r31->unkF6 = -1; + } + HuPrcSleep(20); +} diff --git a/src/REL/option/state.c b/src/REL/option/state.c new file mode 100755 index 00000000..b9714e13 --- /dev/null +++ b/src/REL/option/state.c @@ -0,0 +1,126 @@ +#include "REL/option.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/window.h" +#include "game/wipe.h" + +#include "dolphin.h" + +typedef struct { + /* 0x00 */ UnkWindowDataStruct *unk00; + /* 0x04 */ s32 unk04; + /* 0x08 */ s16 unk08; + /* 0x0A */ char unk0A[2]; +} UnkStateDataStruct; // Size 0xC + +typedef struct { + Vec unk00; + Vec unk0C; + GXColor unk18; +} UnkLightDataStruct; // Size 0x1C + +static void fn_1_2FB0(omObjData *arg0); + +omObjData *lbl_1_bss_28; + +static UnkLightDataStruct lbl_1_data_A0 = { + { 0.0f, 300.0f, 0.0f }, + { 0.0f, -300.0f, -600.0f }, + { 0xFF, 0xFF, 0xFF, 0xFF } +}; + +static Vec lbl_1_data_BC[3] = { + { 0.0f, 3000.0f, 1.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f } +}; + +omObjData *fn_1_2E04(void) { + omObjData *var_r30; + UnkStateDataStruct *temp_r3; + LightData *sp8; + + var_r30 = omAddObjEx(lbl_1_bss_8, 1000, 0, 0, 4, fn_1_2FB0); + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkStateDataStruct), MEMORY_DEFAULT_NUM); + var_r30->data = temp_r3; + lbl_1_bss_10 = fn_1_7F8(); + lbl_1_bss_18 = fn_1_15A4(); + temp_r3->unk00 = fn_1_A44C(0); + Hu3DLighInit(); + temp_r3->unk08 = Hu3DGLightCreateV(&lbl_1_data_A0.unk00, &lbl_1_data_A0.unk0C, &lbl_1_data_A0.unk18); + Hu3DGLightInfinitytSet(temp_r3->unk08); + sp8 = &Hu3DGlobalLight[temp_r3->unk08]; + Hu3DShadowCreate(30.0f, 20.0f, 5000.0f); + Hu3DShadowTPLvlSet(0.45f); + Hu3DShadowPosSet(&lbl_1_data_BC[0], &lbl_1_data_BC[1], &lbl_1_data_BC[2]); + return var_r30; +} + +void fn_1_2F4C(omObjData *arg0) { + UnkStateDataStruct *temp_r31 = arg0->data; + + fn_1_A3C(lbl_1_bss_10); + fn_1_1798(lbl_1_bss_18); + fn_1_A6AC(temp_r31->unk00); + HuMemDirectFree(temp_r31); +} + +static void fn_1_2FB0(omObjData *arg0) { + UnkStateDataStruct *temp_r31 = arg0->data; + + switch (arg0->unk10) { + case 0: + arg0->unk10 = 1; + /* fallthrough */ + case 1: + WipeCreate(1, -1, 0x3C); + arg0->unk10 = 2; + break; + case 2: + if (WipeStatGet() != 0 || temp_r31->unk00->unk20 != 0) { + break; + } + fn_1_1A2C(lbl_1_bss_18, 1); + arg0->unk10 = 3; + /* fallthrough */ + case 3: + if (fn_1_1A70(lbl_1_bss_18) != 0) { + break; + } + arg0->unk10 = 4; + /* fallthrough */ + case 4: + fn_1_A6EC(temp_r31->unk00); + fn_1_A71C(temp_r31->unk00, MAKE_MESSID(47, 167)); + arg0->unk10 = 5; + /* fallthrough */ + case 5: + if (temp_r31->unk00->unk20 != 0) { + break; + } + fn_1_A880(temp_r31->unk00, 1); + arg0->unk10 = 6; + /* fallthrough */ + case 6: + if (temp_r31->unk00->unk20 != 0) { + break; + } + fn_1_A704(temp_r31->unk00); + if (temp_r31->unk00->unk1C == 0) { + temp_r31->unk04 = 0; + arg0->unk10 = 7; + } else { + arg0->unk10 = 2; + } + break; + case 7: + arg0->unk10 = 8; + temp_r31->unk04 = 0; + /* fallthrough */ + case 8: + if (temp_r31->unk00->unk20 == 0 && temp_r31->unk04++ >= 60) { + omSysExitReq = 1; + } + break; + } +} diff --git a/src/REL/option/window.c b/src/REL/option/window.c new file mode 100755 index 00000000..ec1311f0 --- /dev/null +++ b/src/REL/option/window.c @@ -0,0 +1,148 @@ +#include "REL/option.h" +#include "game/esprite.h" +#include "game/memory.h" +#include "game/process.h" +#include "game/sprite.h" +#include "game/window.h" + +static void fn_1_A770(UnkWindowDataStruct *arg0, s32 arg1, s16 arg2); +static void fn_1_A860(UnkWindowDataStruct *arg0); +static void fn_1_A8A4(void); + +UnkWindowDataStruct *fn_1_A44C(s32 arg0) { + UnkWindowDataStruct *temp_r31; + + temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWindowDataStruct), MEMORY_DEFAULT_NUM); + temp_r31->unk18 = 0; + temp_r31->unk10 = 0; + temp_r31->unk14 = 0; + temp_r31->unk20 = 0; + temp_r31->unk00 = HuPrcChildCreate(fn_1_A8A4, 0x2000, 0x2000, 0, lbl_1_bss_8); + temp_r31->unk00->user_data = temp_r31; + temp_r31->unk08 = arg0; + switch (temp_r31->unk08) { + case 0: + temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1); + HuWinBGTPLvlSet(temp_r31->unk04, 0.8f); + HuWinMesSpeedSet(temp_r31->unk04, 0); + HuWinMesPalSet(temp_r31->unk04, 7, 0, 0, 0); + break; + case 1: + temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 326.0f, 480, 40, -1, 0); + HuWinAttrSet(temp_r31->unk04, 0x800); + HuWinBGTPLvlSet(temp_r31->unk04, 0.0f); + HuWinMesSpeedSet(temp_r31->unk04, 0); + break; + case 2: + temp_r31->unk04 = HuWinExCreateStyled(-10000.0f, 88.0f, 224, 34, -1, 0); + HuWinAttrSet(temp_r31->unk04, 0x800); + HuWinBGTPLvlSet(temp_r31->unk04, 0.0f); + HuWinMesSpeedSet(temp_r31->unk04, 0); + break; + case 3: + temp_r31->unk04 = HuWinExCreateStyled(175.0f, 100.0f, 300, 34, -1, 0); + HuWinBGTPLvlSet(temp_r31->unk04, 0.0f); + HuWinMesSpeedSet(temp_r31->unk04, 0); + break; + } + HuWinDrawNoSet(temp_r31->unk04, 0x3F); + fn_1_A828(temp_r31); + HuSprExecLayerSet(0x3F, 2); + return temp_r31; +} + +void fn_1_A6AC(UnkWindowDataStruct *arg0) { + HuWinExCleanup(arg0->unk04); + HuPrcKill(arg0->unk00); + HuMemDirectFree(arg0); +} + +void fn_1_A6EC(UnkWindowDataStruct *arg0) { + if (arg0->unk0C == 0) { + arg0->unk20 = 1; + } +} + +void fn_1_A704(UnkWindowDataStruct *arg0) { + if (arg0->unk0C != 0) { + arg0->unk20 = 2; + } +} + +void fn_1_A71C(UnkWindowDataStruct *arg0, s32 arg1) { + if (arg0->unk20 == 0) { + HuWinMesSet(arg0->unk04, arg1); + } else { + arg0->unk18 = arg1; + } +} + +static void fn_1_A770(UnkWindowDataStruct *arg0, s32 arg1, s16 arg2) { + HuWinInsertMesSet(arg0->unk04, arg1, arg2); +} + +void fn_1_A7B0(UnkWindowDataStruct *arg0, float arg1, float arg2) { + HuWinPosSet(arg0->unk04, arg1, arg2); +} + +void fn_1_A7F0(UnkWindowDataStruct *arg0) { + HuWinDispOn(arg0->unk04); + arg0->unk0C = 1; +} + +void fn_1_A828(UnkWindowDataStruct *arg0) { + HuWinDispOff(arg0->unk04); + arg0->unk0C = 0; +} + +static void fn_1_A860(UnkWindowDataStruct *arg0) { + if (arg0->unk20 == 0) { + arg0->unk20 = 3; + } + arg0->unk10 = 1; +} + +void fn_1_A880(UnkWindowDataStruct *arg0, s32 arg1) { + if (arg0->unk20 == 0) { + arg0->unk20 = 4; + } + arg0->unk14 = 1; + arg0->unk1C = arg1; +} + +static void fn_1_A8A4(void) { + UnkWindowDataStruct *temp_r31 = HuPrcCurrentGet()->user_data; + + while (1) { + switch (temp_r31->unk20) { + case 1: + fn_1_A7F0(temp_r31); + HuWinExAnimIn(temp_r31->unk04); + break; + case 2: + HuWinExAnimOut(temp_r31->unk04); + fn_1_A828(temp_r31); + break; + case 3: + HuWinMesWait(temp_r31->unk04); + temp_r31->unk10 = 0; + break; + case 4: + temp_r31->unk1C = HuWinChoiceGet(temp_r31->unk04, temp_r31->unk1C); + temp_r31->unk14 = 0; + break; + } + if (temp_r31->unk18 != 0) { + HuWinMesSet(temp_r31->unk04, temp_r31->unk18); + temp_r31->unk18 = 0; + } + temp_r31->unk20 = 0; + if (temp_r31->unk10 != 0) { + temp_r31->unk20 = 3; + } + if (temp_r31->unk14 != 0) { + temp_r31->unk20 = 4; + } + HuPrcVSleep(); + } +} diff --git a/src/game/board/battle.c b/src/game/board/battle.c index 491d5c22..94630e3a 100755 --- a/src/game/board/battle.c +++ b/src/game/board/battle.c @@ -150,15 +150,15 @@ static void ExecBattle(void) { MgInfo *var_r29; s32 var_r27 = 0; s32 sp8[] = { - 0x00750000, - 0x00760000, - 0x00770000, - 0x00780000, - 0x00790000, - 0x007A0000, - 0x007B0000, - 0x007C0000, - 0x007D0000 + DATADIR_W01, + DATADIR_W02, + DATADIR_W03, + DATADIR_W04, + DATADIR_W05, + DATADIR_W06, + DATADIR_W10, + DATADIR_W20, + DATADIR_W21 }; var_r29 = mgInfoTbl; @@ -498,17 +498,17 @@ static void CreateBattleMain(void) { s32 i; BattleWork *temp_r31; s32 spC[] = { - 0x00010000, - 0x00010001, - 0x00010002, - 0x00010003, - 0x00010003, - 0x00010004, - 0x00010005, - 0x00010006, - 0x00010007, - 0x00010008, - 0x00010009 + DATA_MAKE_NUM(DATADIR_BBATTLE, 0), + DATA_MAKE_NUM(DATADIR_BBATTLE, 1), + DATA_MAKE_NUM(DATADIR_BBATTLE, 2), + DATA_MAKE_NUM(DATADIR_BBATTLE, 3), + DATA_MAKE_NUM(DATADIR_BBATTLE, 3), + DATA_MAKE_NUM(DATADIR_BBATTLE, 4), + DATA_MAKE_NUM(DATADIR_BBATTLE, 5), + DATA_MAKE_NUM(DATADIR_BBATTLE, 6), + DATA_MAKE_NUM(DATADIR_BBATTLE, 7), + DATA_MAKE_NUM(DATADIR_BBATTLE, 8), + DATA_MAKE_NUM(DATADIR_BBATTLE, 9) }; battleObj = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, UpdateBattleMain); @@ -774,24 +774,24 @@ static void SetBattleBombState(s32 arg0) { static s8 battleChanceTbl[][3][5] = { { - { 0x0A, 0x55, 0x05, 0x00, 0x00 }, - { 0x0A, 0x4B, 0x0F, 0x00, 0x00 }, - { 0x0A, 0x41, 0x19, 0x00, 0x00 }, + { 10, 85, 5, 0, 0 }, + { 10, 75, 15, 0, 0 }, + { 10, 65, 25, 0, 0 }, }, { - { 0x05, 0x46, 0x14, 0x05, 0x00 }, - { 0x05, 0x3C, 0x19, 0x0A, 0x00 }, - { 0x05, 0x32, 0x1E, 0x0A, 0x00 }, + { 5, 70, 20, 5, 0 }, + { 5, 60, 25, 10, 0 }, + { 5, 50, 30, 10, 0 }, }, { - { 0x05, 0x3C, 0x14, 0x0A, 0x05 }, - { 0x05, 0x2D, 0x1E, 0x0F, 0x05 }, - { 0x05, 0x23, 0x1E, 0x14, 0x0A }, + { 5, 60, 20, 10, 5 }, + { 5, 45, 30, 15, 5 }, + { 5, 35, 30, 20, 10 }, }, { - { 0x05, 0x2D, 0x1E, 0x0F, 0x05 }, - { 0x05, 0x1E, 0x23, 0x14, 0x0A }, - { 0x05, 0x14, 0x23, 0x19, 0x0F } + { 5, 45, 30, 15, 5 }, + { 5, 30, 35, 20, 10 }, + { 5, 20, 35, 25, 15 } } }; From 45fce0cfa24f26d4aaee6727e0a2ad8e5a759573 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 16 Mar 2024 12:29:54 -0500 Subject: [PATCH 087/106] Fix selmenu compile --- src/REL/selmenuDll/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/REL/selmenuDll/main.c b/src/REL/selmenuDll/main.c index 9745868b..c627b3ac 100644 --- a/src/REL/selmenuDll/main.c +++ b/src/REL/selmenuDll/main.c @@ -202,7 +202,7 @@ void ModuleProlog(void) dir.z = -1.0f; SetDefLight(&pos, &dir, 255, 255, 255, 64, 64, 64, 255, 255, 255); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 30); - GWSystem.mg_next_type = -1; + GWMGTypeSet(-1); _ClearFlag(0x10000); GWSystem.turn = 1; GWSystem.max_turn = 20; From 6d754f108eb05cc20a0a1995aeb3c4bb04aafe2e Mon Sep 17 00:00:00 2001 From: mrshigure Date: Sat, 16 Mar 2024 13:04:23 -0700 Subject: [PATCH 088/106] Matched REL/mess + some data cleanup --- config/GMPE01_00/rels/messDll/symbols.txt | 200 ++++++------- configure.py | 2 +- include/game/window.h | 3 +- src/REL/messDll/main.c | 331 ++++++++++++++++++++++ src/REL/option/guide.c | 2 +- src/REL/option/record.c | 4 +- src/REL/option/room.c | 4 +- src/REL/option/rumble.c | 10 +- src/REL/option/sound.c | 10 +- src/game/board/lottery.c | 271 +++++++++++------- src/game/window.c | 2 +- 11 files changed, 612 insertions(+), 227 deletions(-) create mode 100755 src/REL/messDll/main.c diff --git a/config/GMPE01_00/rels/messDll/symbols.txt b/config/GMPE01_00/rels/messDll/symbols.txt index 4ff0390b..5a124210 100644 --- a/config/GMPE01_00/rels/messDll/symbols.txt +++ b/config/GMPE01_00/rels/messDll/symbols.txt @@ -1,105 +1,105 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global ModuleProlog = .text:0x000000A0; // type:function size:0x21C -fn_1_2BC = .text:0x000002BC; // type:function size:0x44 -fn_1_300 = .text:0x00000300; // type:function size:0xB88 -fn_1_E88 = .text:0x00000E88; // type:function size:0x328 -fn_1_11B0 = .text:0x000011B0; // type:function size:0x2F0 +fn_1_2BC = .text:0x000002BC; // type:function size:0x44 scope:local +fn_1_300 = .text:0x00000300; // type:function size:0xB88 scope:local +fn_1_E88 = .text:0x00000E88; // type:function size:0x328 scope:local +fn_1_11B0 = .text:0x000011B0; // type:function size:0x2F0 scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 data:double -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 data:double -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 data:double -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 data:double -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x22 data:string -lbl_1_data_22 = .data:0x00000022; // type:object size:0x16 data:string -lbl_1_data_38 = .data:0x00000038; // type:object size:0x11 data:string -lbl_1_data_49 = .data:0x00000049; // type:object size:0xD data:string -lbl_1_data_56 = .data:0x00000056; // type:object size:0xD data:string -lbl_1_data_63 = .data:0x00000063; // type:object size:0xB data:string -lbl_1_data_6E = .data:0x0000006E; // type:object size:0xF data:string -lbl_1_data_7D = .data:0x0000007D; // type:object size:0xE data:string -lbl_1_data_8B = .data:0x0000008B; // type:object size:0xE data:string -lbl_1_data_99 = .data:0x00000099; // type:object size:0xD data:string -lbl_1_data_A6 = .data:0x000000A6; // type:object size:0x9 data:string -lbl_1_data_AF = .data:0x000000AF; // type:object size:0xE data:string -lbl_1_data_BD = .data:0x000000BD; // type:object size:0xF data:string -lbl_1_data_CC = .data:0x000000CC; // type:object size:0xB data:string -lbl_1_data_D7 = .data:0x000000D7; // type:object size:0x12 data:string -lbl_1_data_E9 = .data:0x000000E9; // type:object size:0xA data:string -lbl_1_data_F3 = .data:0x000000F3; // type:object size:0xD data:string -lbl_1_data_100 = .data:0x00000100; // type:object size:0xB data:string -lbl_1_data_10B = .data:0x0000010B; // type:object size:0xF data:string -lbl_1_data_11A = .data:0x0000011A; // type:object size:0x9 data:string -lbl_1_data_123 = .data:0x00000123; // type:object size:0xF data:string -lbl_1_data_132 = .data:0x00000132; // type:object size:0x13 data:string -lbl_1_data_145 = .data:0x00000145; // type:object size:0xF data:string -lbl_1_data_154 = .data:0x00000154; // type:object size:0xF data:string -lbl_1_data_163 = .data:0x00000163; // type:object size:0x12 data:string -lbl_1_data_175 = .data:0x00000175; // type:object size:0xB data:string -lbl_1_data_180 = .data:0x00000180; // type:object size:0xD data:string -lbl_1_data_18D = .data:0x0000018D; // type:object size:0xF data:string -lbl_1_data_19C = .data:0x0000019C; // type:object size:0xA data:string -lbl_1_data_1A6 = .data:0x000001A6; // type:object size:0xC data:string -lbl_1_data_1B2 = .data:0x000001B2; // type:object size:0xD data:string -lbl_1_data_1BF = .data:0x000001BF; // type:object size:0xF data:string -lbl_1_data_1CE = .data:0x000001CE; // type:object size:0x11 data:string -lbl_1_data_1DF = .data:0x000001DF; // type:object size:0xF data:string -lbl_1_data_1EE = .data:0x000001EE; // type:object size:0xC data:string -lbl_1_data_1FA = .data:0x000001FA; // type:object size:0xC data:string -lbl_1_data_206 = .data:0x00000206; // type:object size:0x8 data:string -lbl_1_data_20E = .data:0x0000020E; // type:object size:0x11 data:string -lbl_1_data_21F = .data:0x0000021F; // type:object size:0x11 data:string -lbl_1_data_230 = .data:0x00000230; // type:object size:0x12 data:string -lbl_1_data_242 = .data:0x00000242; // type:object size:0xF data:string -lbl_1_data_251 = .data:0x00000251; // type:object size:0xC data:string -lbl_1_data_25D = .data:0x0000025D; // type:object size:0xB data:string -lbl_1_data_268 = .data:0x00000268; // type:object size:0xB data:string -lbl_1_data_273 = .data:0x00000273; // type:object size:0xB data:string -lbl_1_data_27E = .data:0x0000027E; // type:object size:0xB data:string -lbl_1_data_289 = .data:0x00000289; // type:object size:0xB data:string -lbl_1_data_294 = .data:0x00000294; // type:object size:0xD data:string -lbl_1_data_2A1 = .data:0x000002A1; // type:object size:0x11 data:string -lbl_1_data_2B2 = .data:0x000002B2; // type:object size:0xF data:string -lbl_1_data_2C1 = .data:0x000002C1; // type:object size:0xC data:string -lbl_1_data_2CD = .data:0x000002CD; // type:object size:0x11 data:string -lbl_1_data_2DE = .data:0x000002DE; // type:object size:0xF data:string -lbl_1_data_2ED = .data:0x000002ED; // type:object size:0xF data:string -lbl_1_data_2FC = .data:0x000002FC; // type:object size:0xF data:string -lbl_1_data_30B = .data:0x0000030B; // type:object size:0x11 data:string -lbl_1_data_31C = .data:0x0000031C; // type:object size:0x10 -lbl_1_data_32C = .data:0x0000032C; // type:object size:0xE4 data:4byte -lbl_1_data_410 = .data:0x00000410; // type:object size:0x2 data:2byte -lbl_1_data_412 = .data:0x00000412; // type:object size:0x6 -lbl_1_data_418 = .data:0x00000418; // type:object size:0x5 data:string -lbl_1_data_41D = .data:0x0000041D; // type:object size:0x4 data:string -lbl_1_data_421 = .data:0x00000421; // type:object size:0x4 data:string -lbl_1_data_425 = .data:0x00000425; // type:object size:0x4 data:string -lbl_1_data_429 = .data:0x00000429; // type:object size:0x4 data:string -lbl_1_data_42D = .data:0x0000042D; // type:object size:0x4 data:string -lbl_1_data_431 = .data:0x00000431; // type:object size:0x4 data:string -lbl_1_data_435 = .data:0x00000435; // type:object size:0x4 data:string -lbl_1_data_439 = .data:0x00000439; // type:object size:0x7 -lbl_1_data_440 = .data:0x00000440; // type:object size:0x20 -lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x2 data:2byte -lbl_1_bss_2 = .bss:0x00000002; // type:object size:0x6 data:2byte -lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x24 data:4byte -lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x4 data:4byte -lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x4 data:4byte -lbl_1_bss_34 = .bss:0x00000034; // type:object size:0x4 data:4byte +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 scope:local data:double +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 scope:local data:double +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 scope:local data:double +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 scope:local data:double +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_data_0 = .data:0x00000000; // type:object size:0x22 scope:local data:string +lbl_1_data_22 = .data:0x00000022; // type:object size:0x16 scope:local data:string +lbl_1_data_38 = .data:0x00000038; // type:object size:0x11 scope:local data:string +lbl_1_data_49 = .data:0x00000049; // type:object size:0xD scope:local data:string +lbl_1_data_56 = .data:0x00000056; // type:object size:0xD scope:local data:string +lbl_1_data_63 = .data:0x00000063; // type:object size:0xB scope:local data:string +lbl_1_data_6E = .data:0x0000006E; // type:object size:0xF scope:local data:string +lbl_1_data_7D = .data:0x0000007D; // type:object size:0xE scope:local data:string +lbl_1_data_8B = .data:0x0000008B; // type:object size:0xE scope:local data:string +lbl_1_data_99 = .data:0x00000099; // type:object size:0xD scope:local data:string +lbl_1_data_A6 = .data:0x000000A6; // type:object size:0x9 scope:local data:string +lbl_1_data_AF = .data:0x000000AF; // type:object size:0xE scope:local data:string +lbl_1_data_BD = .data:0x000000BD; // type:object size:0xF scope:local data:string +lbl_1_data_CC = .data:0x000000CC; // type:object size:0xB scope:local data:string +lbl_1_data_D7 = .data:0x000000D7; // type:object size:0x12 scope:local data:string +lbl_1_data_E9 = .data:0x000000E9; // type:object size:0xA scope:local data:string +lbl_1_data_F3 = .data:0x000000F3; // type:object size:0xD scope:local data:string +lbl_1_data_100 = .data:0x00000100; // type:object size:0xB scope:local data:string +lbl_1_data_10B = .data:0x0000010B; // type:object size:0xF scope:local data:string +lbl_1_data_11A = .data:0x0000011A; // type:object size:0x9 scope:local data:string +lbl_1_data_123 = .data:0x00000123; // type:object size:0xF scope:local data:string +lbl_1_data_132 = .data:0x00000132; // type:object size:0x13 scope:local data:string +lbl_1_data_145 = .data:0x00000145; // type:object size:0xF scope:local data:string +lbl_1_data_154 = .data:0x00000154; // type:object size:0xF scope:local data:string +lbl_1_data_163 = .data:0x00000163; // type:object size:0x12 scope:local data:string +lbl_1_data_175 = .data:0x00000175; // type:object size:0xB scope:local data:string +lbl_1_data_180 = .data:0x00000180; // type:object size:0xD scope:local data:string +lbl_1_data_18D = .data:0x0000018D; // type:object size:0xF scope:local data:string +lbl_1_data_19C = .data:0x0000019C; // type:object size:0xA scope:local data:string +lbl_1_data_1A6 = .data:0x000001A6; // type:object size:0xC scope:local data:string +lbl_1_data_1B2 = .data:0x000001B2; // type:object size:0xD scope:local data:string +lbl_1_data_1BF = .data:0x000001BF; // type:object size:0xF scope:local data:string +lbl_1_data_1CE = .data:0x000001CE; // type:object size:0x11 scope:local data:string +lbl_1_data_1DF = .data:0x000001DF; // type:object size:0xF scope:local data:string +lbl_1_data_1EE = .data:0x000001EE; // type:object size:0xC scope:local data:string +lbl_1_data_1FA = .data:0x000001FA; // type:object size:0xC scope:local data:string +lbl_1_data_206 = .data:0x00000206; // type:object size:0x8 scope:local data:string +lbl_1_data_20E = .data:0x0000020E; // type:object size:0x11 scope:local data:string +lbl_1_data_21F = .data:0x0000021F; // type:object size:0x11 scope:local data:string +lbl_1_data_230 = .data:0x00000230; // type:object size:0x12 scope:local data:string +lbl_1_data_242 = .data:0x00000242; // type:object size:0xF scope:local data:string +lbl_1_data_251 = .data:0x00000251; // type:object size:0xC scope:local data:string +lbl_1_data_25D = .data:0x0000025D; // type:object size:0xB scope:local data:string +lbl_1_data_268 = .data:0x00000268; // type:object size:0xB scope:local data:string +lbl_1_data_273 = .data:0x00000273; // type:object size:0xB scope:local data:string +lbl_1_data_27E = .data:0x0000027E; // type:object size:0xB scope:local data:string +lbl_1_data_289 = .data:0x00000289; // type:object size:0xB scope:local data:string +lbl_1_data_294 = .data:0x00000294; // type:object size:0xD scope:local data:string +lbl_1_data_2A1 = .data:0x000002A1; // type:object size:0x11 scope:local data:string +lbl_1_data_2B2 = .data:0x000002B2; // type:object size:0xF scope:local data:string +lbl_1_data_2C1 = .data:0x000002C1; // type:object size:0xC scope:local data:string +lbl_1_data_2CD = .data:0x000002CD; // type:object size:0x11 scope:local data:string +lbl_1_data_2DE = .data:0x000002DE; // type:object size:0xF scope:local data:string +lbl_1_data_2ED = .data:0x000002ED; // type:object size:0xF scope:local data:string +lbl_1_data_2FC = .data:0x000002FC; // type:object size:0xF scope:local data:string +lbl_1_data_30B = .data:0x0000030B; // type:object size:0x11 scope:local data:string +lbl_1_data_31C = .data:0x0000031C; // type:object size:0x10 scope:local +lbl_1_data_32C = .data:0x0000032C; // type:object size:0xE4 scope:local data:4byte +lbl_1_data_410 = .data:0x00000410; // type:object size:0x2 scope:local data:2byte +lbl_1_data_412 = .data:0x00000412; // type:object size:0x6 scope:local +lbl_1_data_418 = .data:0x00000418; // type:object size:0x5 scope:local data:string +lbl_1_data_41D = .data:0x0000041D; // type:object size:0x4 scope:local data:string +lbl_1_data_421 = .data:0x00000421; // type:object size:0x4 scope:local data:string +lbl_1_data_425 = .data:0x00000425; // type:object size:0x4 scope:local data:string +lbl_1_data_429 = .data:0x00000429; // type:object size:0x4 scope:local data:string +lbl_1_data_42D = .data:0x0000042D; // type:object size:0x4 scope:local data:string +lbl_1_data_431 = .data:0x00000431; // type:object size:0x4 scope:local data:string +lbl_1_data_435 = .data:0x00000435; // type:object size:0x4 scope:local data:string +lbl_1_data_439 = .data:0x00000439; // type:object size:0x7 scope:local +lbl_1_data_440 = .data:0x00000440; // type:object size:0x20 scope:local +lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_2 = .bss:0x00000002; // type:object size:0x6 scope:local data:2byte +lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x24 scope:local data:4byte +lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_34 = .bss:0x00000034; // type:object size:0x4 scope:local data:4byte diff --git a/configure.py b/configure.py index c6aa359f..6dab546c 100644 --- a/configure.py +++ b/configure.py @@ -950,7 +950,7 @@ config.libs = [ Rel('messDll', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/messDll/main.c"), + Object(Matching, "REL/messDll/main.c"), } ), Rel('mgmodedll', diff --git a/include/game/window.h b/include/game/window.h index 7fbc09c8..a2ff8eb1 100644 --- a/include/game/window.h +++ b/include/game/window.h @@ -76,6 +76,7 @@ typedef struct { } WindowData; // Size 0x180 extern WindowData winData[32]; +extern void *messDataPtr; void HuWindowInit(void); void HuWinInit(s32 mess_data_no); @@ -123,7 +124,7 @@ void _HuWinComKeySet(s32 player_1, s32 player_2, s32 player_3, s32 player_4, s16 void HuWinComKeyGet(s16 window, u32 *data); void HuWinComKeyReset(void); void HuWinMesMaxSizeGet(s16 mess_num, float *size, ...); -void HuWinInsertMesSizeGet(s32 mess, s16 index); +void HuWinInsertMesSizeGet(u32 mess, s16 index); void HuWinMesSizeCancelCRSet(s32 cancel_cr); void HuWinMesMaxSizeBetGet(float *size, u32 start, u32 end); s16 HuWinKeyWaitNumGet(u32 mess); diff --git a/src/REL/messDll/main.c b/src/REL/messDll/main.c new file mode 100755 index 00000000..a3381d0c --- /dev/null +++ b/src/REL/messDll/main.c @@ -0,0 +1,331 @@ +#include "REL/executor.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/object.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/window.h" +#include "game/wipe.h" + +#include "dolphin.h" +#include "math.h" +#include "rel_sqrt_consts.h" + +extern s32 sprintf(char*, const char*, s32); + +static void fn_1_2BC(omObjData *arg0); +static void fn_1_300(omObjData *arg0); +static void fn_1_E88(void); +static s32 fn_1_11B0(s16 arg0, s16 arg1); + +static Process *lbl_1_bss_34; +static omObjData *lbl_1_bss_30; +static omObjData *lbl_1_bss_2C; +static u8 lbl_1_bss_C_pad[0x20]; +static Process *lbl_1_bss_8; +static u8 lbl_1_bss_4_pad[4]; +static s16 lbl_1_bss_2; +static s16 lbl_1_bss_0; + +void ModuleProlog(void) { + OSReport("******* SAFObjectSetup *********\n"); + lbl_1_bss_34 = omInitObjMan(0x32, 0x2000); + CRot.x = -20.0f; + CRot.y = 0.0f; + CRot.z = 0.0f; + Center.x = 0.0f; + Center.y = 120.0f; + Center.z = 0.0f; + CZoom = 500.0f; + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 45.0f, 20.0f, 15000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + lbl_1_bss_30 = omAddObjEx(lbl_1_bss_34, 0, 0x40, 0, -1, fn_1_2BC); + lbl_1_bss_2C = omAddObjEx(lbl_1_bss_34, 0x7FDA, 0, 0, -1, omOutView); + HuWinInit(1); + lbl_1_bss_8 = HuPrcChildCreate(fn_1_E88, 100, 0x3000, 0, lbl_1_bss_34); +} + +static void fn_1_2BC(omObjData *arg0) { + WipeCreate(1, 0, 10); + arg0->func = fn_1_300; +} + +static void fn_1_300(omObjData *arg0) { + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f31; + s8 temp_r31; + + if (HuPadBtnDown[0] & 0x1000) { + GWSystem.mg_next = 1; + omOvlReturnEx(1, 1); + return; + } + CRot.x += -HuPadSubStkY[0] / 20; + CRot.y += HuPadSubStkX[0] / 20; + CZoom += HuPadTrigL[0] / 2; + CZoom -= HuPadTrigR[0] / 2; + sp2C.x = Center.x + CZoom * (sin(CRot.y * M_PI / 180.0) * cos(CRot.x * M_PI / 180.0)); + sp2C.y = Center.y + CZoom * -sin(CRot.x * M_PI / 180.0); + sp2C.z = Center.z + CZoom * (cos(CRot.y * M_PI / 180.0) * cos(CRot.x * M_PI / 180.0)); + sp20.x = Center.x - sp2C.x; + sp20.y = Center.y - sp2C.y; + sp20.z = Center.z - sp2C.z; + sp14.x = sin(CRot.y * M_PI / 180.0) * sin(CRot.x * M_PI / 180.0); + sp14.y = cos(CRot.x * M_PI / 180.0); + sp14.z = cos(CRot.y * M_PI / 180.0) * sin(CRot.x * M_PI / 180.0); + temp_f31 = CRot.z; + sp8.x = sp14.x * (sp20.x * sp20.x + (1.0f - sp20.x * sp20.x) * cos(temp_f31 * M_PI / 180.0)) + + sp14.y * (sp20.x * sp20.y * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.z * sin(temp_f31 * M_PI / 180.0)) + + sp14.z * (sp20.x * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.y * sin(temp_f31 * M_PI / 180.0)); + sp8.y = sp14.x * (sp20.x * sp20.y * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.z * sin(temp_f31 * M_PI / 180.0)) + + sp14.y * (sp20.y * sp20.y + (1.0f - sp20.y * sp20.y) * cos(temp_f31 * M_PI / 180.0)) + + sp14.z * (sp20.y * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.x * sin(temp_f31 * M_PI / 180.0)); + sp8.z = sp14.x * (sp20.x * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) - sp20.y * sin(temp_f31 * M_PI / 180.0)) + + sp14.y * (sp20.y * sp20.z * (1.0 - cos(temp_f31 * M_PI / 180.0)) + sp20.x * sin(temp_f31 * M_PI / 180.0)) + + sp14.z * (sp20.z * sp20.z + (1.0f - sp20.z * sp20.z) * cos(temp_f31 * M_PI / 180.0)); + PSVECCrossProduct(&sp14, &sp20, &sp20); + PSVECNormalize(&sp20, &sp20); + temp_r31 = HuPadSubStkX[0] & 0xF8; + if (temp_r31 != 0) { + Center.x += sp20.x * temp_r31 * 0.05f; + Center.y += sp20.y * temp_r31 * 0.05f; + Center.z += sp20.z * temp_r31 * 0.05f; + } + PSVECNormalize(&sp8, &sp20); + temp_r31 = -(HuPadSubStkY[0] & 0xF8); + if (temp_r31 != 0) { + Center.x += sp20.x * temp_r31 * 0.05f; + Center.y += sp20.y * temp_r31 * 0.05f; + Center.z += sp20.z * temp_r31 * 0.05f; + } +} + +static char *lbl_1_data_32C[] = { + "001_Character_Name_ss", + "002_Hidden_Block", + "003_Battle_M", + "004_Bowser_M", + "005_Warp_M", + "006_Mushroom_M", + "007_Lot_house", + "008_Boo_house", + "009_ItemName", + "010_Bord", + "011_RoundItem", + "012_Spaceamida", + "013_Star_M", + "014_RollerCoaster", + "015_Last5", + "016_ItemShop", + "017_System", + "018_ModeSelect", + "019_Item", + "020_Map2_event", + "021_Lucky_Minigame", + "022_Bord_Start", + "023_Map3_event", + "024_Minigame_Name", + "025_mg_446", + "026_debugmes", + "027_Party_Mode", + "028_SETUP", + "029_Miracle", + "030_mg_kuppa", + "031_Story_Mode", + "032_Bowser_Story", + "033_Map4_event", + "034_mg_inst", + "035_E3_only", + "036_saf", + "037_Mg_inst_sys_", + "038_Bord_Results", + "039_Bord_Results2", + "040_Map5_event", + "041_Mg_Mode", + "042_mg_445", + "043_mg_447", + "044_mg_448", + "045_mg_449", + "046_mg_450", + "047_tutorial", + "048_Option_Rooml", + "049_Map6_event", + "050_charley", + "051_Present_Room", + "052_Extra_Room", + "053_Staff_Post", + "054_Staff_Name", + "055_Opening_Demo", + "056_mgex_inst", + NULL +}; + +static s16 lbl_1_data_410 = -1; + +static void fn_1_E88(void) { + s16 sp10[256]; // unknown size + char spC[4]; + char sp8[4]; + s16 temp_r3; + s16 var_r25; + s16 var_r27; + s16 var_r28; + s32 var_r30; + s32 var_r31; + s32 temp_r3_2; + char *var_r29; + + var_r28 = var_r27 = 0; + while (lbl_1_data_32C[var_r28] != 0) { + var_r29 = lbl_1_data_32C[var_r28]; + while (*var_r29 != 0) { + if (*var_r29 == '_') { + *var_r29 = 0x86; + } + var_r29++; + } + sp10[var_r28] = 0; + var_r30 = (var_r28 << 16); + var_r25 = 0; + while (1) { + if ((s32) MessData_MesPtrGet(messDataPtr, var_r30 + var_r25) == 0) { + break; + } + sp10[var_r28]++; + var_r25++; + } + var_r27++; + var_r28++; + } + temp_r3 = HuWinExCreateStyled(-10000.0f, 32.0f, 316, 40, -1, 0); + HuWinExAnimIn(temp_r3); + HuWinAttrSet(temp_r3, 0x800); + HuWinMesSpeedSet(temp_r3, 0); + HuWinMesSet(temp_r3, MAKE_MESSID_PTR(lbl_1_data_32C[0])); + lbl_1_bss_0 = HuWinCreate(460.0f, 32.0f, 100, 40, 0); + HuWinAttrSet(lbl_1_bss_0, 0x800); + HuWinMesSpeedSet(lbl_1_bss_0, 0); + HuWinMesSet(lbl_1_bss_0, MAKE_MESSID_PTR("\x1F\x01_\x1F\x02")); + var_r31 = 0; + var_r30 = 0; + while (1) { + HuWinHomeClear(lbl_1_bss_0); + sprintf(spC, "%03d", var_r30 + 1); + HuWinInsertMesSet(lbl_1_bss_0, MAKE_MESSID_PTR(spC), 0); + sprintf(sp8, "%03d", sp10[var_r31]); + HuWinInsertMesSet(lbl_1_bss_0, MAKE_MESSID_PTR(sp8), 1); + HuWinMesSet(lbl_1_bss_0, MAKE_MESSID_PTR("\x1F\x01_\x1F\x02")); + temp_r3_2 = fn_1_11B0(var_r31, var_r30); + if (temp_r3_2 & 0x20) { + var_r31++; + if (var_r31 >= var_r27) { + var_r31 = 0; + } + var_r30 = 0; + } else if (temp_r3_2 & 0x40) { + var_r31--; + if (var_r31 < 0) { + var_r31 = var_r27 - 1; + } + var_r30 = 0; + } else if (temp_r3_2 & 0x200) { + var_r30--; + if (var_r30 < 0) { + var_r31--; + if (var_r31 < 0) { + var_r31 = var_r27 - 1; + } + var_r30 = sp10[var_r31] - 1; + } + } else { + var_r30++; + if (var_r30 >= sp10[var_r31]) { + var_r31++; + if (var_r31 >= var_r27) { + var_r31 = 0; + } + var_r30 = 0; + } + } + HuPrcVSleep(); + } +} + +static char *lbl_1_data_440[] = { + "]1^", + "]2^", + "]3^", + "]4^", + "]5^", + "]6^", + "]7^", + "]8^" +}; + +static s32 fn_1_11B0(s16 arg0, s16 arg1) { + WindowData *temp_r30; + float sp10; + float spC; + s32 temp_r28; + s32 var_r27; + s32 var_r26; + u8 *var_r29; + s16 i; + + var_r27 = 0; + var_r26 = 0; + HuWinHomeClear(lbl_1_bss_2); + HuWinMesSet(lbl_1_bss_2, MAKE_MESSID_PTR(lbl_1_data_32C[arg0])); + HuPrcVSleep(); + if (lbl_1_data_410 != -1) { + HuWinKill(lbl_1_data_410); + } + temp_r28 = MAKE_MESSID(arg0, arg1); + for (i = 0; i < 8; i++) { + HuWinInsertMesSizeGet(MAKE_MESSID_PTR(lbl_1_data_440[i]), (s16) i); + } + HuWinMesMaxSizeGet(1, &spC, temp_r28); + if (spC <= 16.0f) { + spC = 32.0f; + } + lbl_1_data_410 = HuWinCreate(-10000.0f, -10000.0f, spC, sp10, 0); + for (i = 0; i < 8; i++) { + HuWinInsertMesSet(lbl_1_data_410, MAKE_MESSID_PTR(lbl_1_data_440[i]), (s16) i); + } + temp_r30 = &winData[lbl_1_data_410]; + temp_r30->push_key |= 0x360; + temp_r30->key_auto = 0x60; + HuWinMesSet(lbl_1_data_410, temp_r28); + var_r29 = MessData_MesPtrGet(messDataPtr, temp_r28); + while (*var_r29 != 0) { + if (*var_r29 == 0xF) { + var_r27 = 1; + } + if (*var_r29 == 0) { + var_r26 = 1; + } + var_r29++; + } + if (var_r27 != 0) { + HuWinMesWait(lbl_1_data_410); + HuWinChoiceGet(lbl_1_data_410, 0); + return temp_r30->key_down; + } + if (var_r26 == 0) { + while (!(HuPadBtnRep[0] & 0x360)) { + HuPrcVSleep(); + } + return HuPadBtnRep[0]; + } + while (temp_r30->stat != 0) { + if (HuPadBtnRep[0] & 0x60) { + return HuPadBtnDown[0]; + } + HuPrcVSleep(); + } + return temp_r30->key_down; +} diff --git a/src/REL/option/guide.c b/src/REL/option/guide.c index 4a8d1639..c48edf1f 100755 --- a/src/REL/option/guide.c +++ b/src/REL/option/guide.c @@ -67,7 +67,7 @@ omObjData *fn_1_21F8(void) { temp_r30->unk2C = 0.0f; temp_r30->unk34 = 0.0f; temp_r30->unk30 = 0.0f; - var_r31->model[0] = Hu3DModelCreateFile(0x69000C); + var_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 12)); Hu3DModelLayerSet(var_r31->model[0], 1); for (i = 0; i < 3; i++) { var_r31->motion[i] = Hu3DJointMotion(var_r31->model[0], HuDataSelHeapReadNum(lbl_1_rodata_E0[i], MEMORY_DEFAULT_NUM, HEAP_DATA)); diff --git a/src/REL/option/record.c b/src/REL/option/record.c index ed576f6a..27c98655 100755 --- a/src/REL/option/record.c +++ b/src/REL/option/record.c @@ -279,7 +279,7 @@ static omObjData *fn_1_8A88(void) { omObjData *temp_r31; temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(0x690001); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 1)); Hu3DModelAttrSet(temp_r31->model[0], 0x40000002); Hu3DModelLayerSet(temp_r31->model[0], 0); Hu3DMotionStartEndSet(temp_r31->model[0], 0.0f, 6.0f); @@ -315,7 +315,7 @@ static omObjData *fn_1_8C84(void) { omObjData *temp_r31; temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(0x69000E); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 14)); Hu3DModelLayerSet(temp_r31->model[0], 2); Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); omSetRot(temp_r31, 30.0f, 190.0f, 0.0f); diff --git a/src/REL/option/room.c b/src/REL/option/room.c index df159da8..a697e0e4 100755 --- a/src/REL/option/room.c +++ b/src/REL/option/room.c @@ -222,7 +222,7 @@ static omObjData *fn_1_2088(void) { omObjData *temp_r31; temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(0x690000); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 0)); Hu3DModelLayerSet(temp_r31->model[0], 0); Hu3DModelShadowMapSet(temp_r31->model[0]); return temp_r31; @@ -237,7 +237,7 @@ static omObjData *fn_1_2144(void) { temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); Hu3DModelLayerSet(temp_r31->model[0], 0); - temp_r31->model[0] = Hu3DModelCreateFile(0x690006); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 6)); return temp_r31; } diff --git a/src/REL/option/rumble.c b/src/REL/option/rumble.c index 7261e288..72a3169b 100755 --- a/src/REL/option/rumble.c +++ b/src/REL/option/rumble.c @@ -180,7 +180,7 @@ static omObjData *fn_1_37AC(void) { omObjData *temp_r31; temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(0x69000F); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 15)); Hu3DModelLayerSet(temp_r31->model[0], 3); omSetRot(temp_r31, 0.0f, 180.0f, 0.0f); Hu3DModelAttrSet(temp_r31->model[0], 1); @@ -199,7 +199,7 @@ static omObjData *fn_1_38BC(void) { omObjData *temp_r31; temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(0x690002); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 2)); Hu3DModelAttrSet(temp_r31->model[0], 0x40000002); if (GWGameStat.rumble != 0) { Hu3DMotionTimeSet(temp_r31->model[0], 60.0f); @@ -243,7 +243,7 @@ static omObjData *fn_1_3B08(void) { omObjData *temp_r31; temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(0x690009); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 9)); Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); return temp_r31; } @@ -270,7 +270,7 @@ static omObjData *fn_1_3C6C(void) { omObjData *temp_r31; temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(0x69000A); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 10)); Hu3DModelAttrSet(temp_r31->model[0], 0x40000002); Hu3DModelLayerSet(temp_r31->model[0], 2); return temp_r31; @@ -318,7 +318,7 @@ static omObjData *fn_1_3F28(void) { omObjData *temp_r31; temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(0x69000B); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 11)); if (GWGameStat.rumble != 0) { Hu3DModelAttrReset(temp_r31->model[0], 1); } else { diff --git a/src/REL/option/sound.c b/src/REL/option/sound.c index 75fbe8f4..b9f9e628 100755 --- a/src/REL/option/sound.c +++ b/src/REL/option/sound.c @@ -1156,7 +1156,7 @@ static omObjData *fn_1_61A0(void) { omObjData *temp_r31; temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(0x69000D); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 13)); Hu3DModelLayerSet(temp_r31->model[0], 2); Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); omSetRot(temp_r31, -80.0f, 45.0f, 0.0f); @@ -1177,7 +1177,7 @@ static omObjData *fn_1_62F0(void) { omObjData *temp_r31; temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(0x69000E); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 14)); Hu3DModelLayerSet(temp_r31->model[0], 2); Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); omSetRot(temp_r31, 0.0f, -90.0f, 0.0f); @@ -1198,7 +1198,7 @@ static omObjData *fn_1_6440(void) { omObjData *temp_r31; temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); - temp_r31->model[0] = Hu3DModelCreateFile(0x690003); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 3)); Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); Hu3DModelLayerSet(temp_r31->model[0], 0); return temp_r31; @@ -1223,9 +1223,9 @@ static omObjData *fn_1_6528(s32 arg0, s32 arg1) { temp_r31 = omAddObjEx(lbl_1_bss_8, 1003, 1, 0, 1, NULL); if (arg1 != 0) { - temp_r31->model[0] = Hu3DModelCreateFile(0x690005); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 5)); } else { - temp_r31->model[0] = Hu3DModelCreateFile(0x690004); + temp_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_OPTION, 4)); } Hu3DModelAttrSet(temp_r31->model[0], 0x40000001); Hu3DModelLayerSet(temp_r31->model[0], 0); diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c index d8ae7e4b..188ebce5 100755 --- a/src/game/board/lottery.c +++ b/src/game/board/lottery.c @@ -98,7 +98,6 @@ static s8 comLotteryType; static s8 comLotteryWinType; static u8 comInputPos; static s32 handUpdateF; -// ... static omObjData *lotteryTicketPickObj; static s8 (*comInputDrawP)[2]; static Process *lotteryProc; @@ -242,35 +241,88 @@ void BoardLotteryInit(void) { if (GWBoardGet() != 8) { BoardModelVisibilitySet(BoardLotteryHostGet(), 0); BoardSpaceLinkTransformGet(0x10000000, &sp14, &sp8, NULL); - lotteryMdl[0] = BoardModelCreate(0x50000, NULL, 0); + lotteryMdl[0] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BKUJIYA, 0), NULL, 0); BoardModelMotionStart(lotteryMdl[0], 0, 0); BoardModelMotionSpeedSet(lotteryMdl[0], 0.0f); BoardModelPosSetV(lotteryMdl[0], &sp14); BoardModelRotSetV(lotteryMdl[0], &sp8); - HuDataDirClose(0x50000); + HuDataDirClose(DATA_MAKE_NUM(DATADIR_BKUJIYA, 0)); } } static void CreateModel(void) { s32 i; - s32 sp10[4] = { 0x00050005, 0x00050006, 0x00050007, 0x00050008 }; - s32 sp8[2] = { 0x00050003, 0x00050004 }; + s32 sp10[4] = { + DATA_MAKE_NUM(DATADIR_BKUJIYA, 5), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 6), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 7), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 8) + }; + s32 sp8[2] = { + DATA_MAKE_NUM(DATADIR_BKUJIYA, 3), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 4) + }; s32 sp20[9][4] = { - { 0x00020001, 0x00020002, 0x00020003, 0x00020004 }, - { 0x00020009, 0x0002000A, 0x0002000B, 0x0002000C }, - { 0x0002000E, 0x0002000F, 0x00020010, 0x00020011 }, - { 0x00020018, 0x00020019, 0x0002001A, 0x0002001B }, - { 0x0002001D, 0x0002001E, 0x0002001F, 0x00020020 }, - { 0x00020022, 0x00020023, 0x00020024, 0x00020025 }, - { 0x0002000E, 0x0002000F, 0x00020010, 0x00020011 }, - { 0x0002002A, 0x0002002B, 0x0002002C, 0x0002002D }, - { 0x0002002A, 0x0002002B, 0x0002002C, 0x0002002D } + { + DATA_MAKE_NUM(DATADIR_BGUEST, 1), + DATA_MAKE_NUM(DATADIR_BGUEST, 2), + DATA_MAKE_NUM(DATADIR_BGUEST, 3), + DATA_MAKE_NUM(DATADIR_BGUEST, 4) + }, + { + DATA_MAKE_NUM(DATADIR_BGUEST, 9), + DATA_MAKE_NUM(DATADIR_BGUEST, 10), + DATA_MAKE_NUM(DATADIR_BGUEST, 11), + DATA_MAKE_NUM(DATADIR_BGUEST, 12) + }, + { + DATA_MAKE_NUM(DATADIR_BGUEST, 14), + DATA_MAKE_NUM(DATADIR_BGUEST, 15), + DATA_MAKE_NUM(DATADIR_BGUEST, 16), + DATA_MAKE_NUM(DATADIR_BGUEST, 17) + }, + { + DATA_MAKE_NUM(DATADIR_BGUEST, 24), + DATA_MAKE_NUM(DATADIR_BGUEST, 25), + DATA_MAKE_NUM(DATADIR_BGUEST, 26), + DATA_MAKE_NUM(DATADIR_BGUEST, 27) + }, + { + DATA_MAKE_NUM(DATADIR_BGUEST, 29), + DATA_MAKE_NUM(DATADIR_BGUEST, 30), + DATA_MAKE_NUM(DATADIR_BGUEST, 31), + DATA_MAKE_NUM(DATADIR_BGUEST, 32) + }, + { + DATA_MAKE_NUM(DATADIR_BGUEST, 34), + DATA_MAKE_NUM(DATADIR_BGUEST, 35), + DATA_MAKE_NUM(DATADIR_BGUEST, 36), + DATA_MAKE_NUM(DATADIR_BGUEST, 37) + }, + { + DATA_MAKE_NUM(DATADIR_BGUEST, 14), + DATA_MAKE_NUM(DATADIR_BGUEST, 15), + DATA_MAKE_NUM(DATADIR_BGUEST, 16), + DATA_MAKE_NUM(DATADIR_BGUEST, 17) + }, + { + DATA_MAKE_NUM(DATADIR_BGUEST, 42), + DATA_MAKE_NUM(DATADIR_BGUEST, 43), + DATA_MAKE_NUM(DATADIR_BGUEST, 44), + DATA_MAKE_NUM(DATADIR_BGUEST, 45) + }, + { + DATA_MAKE_NUM(DATADIR_BGUEST, 42), + DATA_MAKE_NUM(DATADIR_BGUEST, 43), + DATA_MAKE_NUM(DATADIR_BGUEST, 44), + DATA_MAKE_NUM(DATADIR_BGUEST, 45) + } }; - lotteryMdl[1] = BoardModelCreate(0x50001, NULL, 0); + lotteryMdl[1] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BKUJIYA, 1), NULL, 0); fn_8006DDE8(lotteryMdl[1], -1.0f); BoardModelMotionSpeedSet(lotteryMdl[1], 0.0f); - lotteryMdl[2] = BoardModelCreate(0x50002, NULL, 0); + lotteryMdl[2] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BKUJIYA, 2), NULL, 0); BoardModelVisibilitySet(lotteryMdl[2], 0); fn_8006DDE8(lotteryMdl[2], -1.0f); BoardModelMotionStart(lotteryMdl[2], 0, 0); @@ -286,7 +338,7 @@ static void CreateModel(void) { fn_8006DDE8(gripMdl[i], -1.0f); BoardModelMotionSpeedSet(gripMdl[i], 0.0f); } - lotteryMdl[3] = BoardModelCreate(0x50011, NULL, 0); + lotteryMdl[3] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BKUJIYA, 17), NULL, 0); BoardModelVisibilitySet(lotteryMdl[3], 0); fn_8006DDE8(lotteryMdl[3], -1.0f); BoardModelPosSet(BoardLotteryHostGet(), 0.0f, 0.0f, 0.0f); @@ -368,7 +420,7 @@ static void DestroyLottery(void) { BoardWinKill(); KillScratch(); KillCoin(); - HuDataDirClose(0x50000); + HuDataDirClose(DATA_MAKE_NUM(DATADIR_BKUJIYA, 0)); lotteryProc = NULL; } @@ -388,38 +440,38 @@ static void ExecLottery(void) { switch (GWBoardGet()) { case 0: - lotteryMessBase = 0x60002; + lotteryMessBase = MAKE_MESSID(6, 2); break; case 1: - lotteryMessBase = 0x6000F; + lotteryMessBase = MAKE_MESSID(6, 15); break; case 2: - lotteryMessBase = 0x6001C; + lotteryMessBase = MAKE_MESSID(6, 28); break; case 3: - lotteryMessBase = 0x60029; + lotteryMessBase = MAKE_MESSID(6, 41); break; case 4: - lotteryMessBase = 0x60036; + lotteryMessBase = MAKE_MESSID(6, 54); break; case 5: - lotteryMessBase = 0x60043; + lotteryMessBase = MAKE_MESSID(6, 67); break; case 6: - lotteryMessBase = 0x60002; + lotteryMessBase = MAKE_MESSID(6, 2); break; case 7: - lotteryMessBase = 0x60052; + lotteryMessBase = MAKE_MESSID(6, 82); break; case 8: - lotteryMessBase = 0x60052; + lotteryMessBase = MAKE_MESSID(6, 82); break; } - temp_r29 = BoardDataDirReadAsync(0x50000); + temp_r29 = BoardDataDirReadAsync(DATADIR_BKUJIYA); temp_r31 = GWSystem.player_curr; temp_r28 = GWPlayer[temp_r31].space_curr; BoardPlayerIdleSet(temp_r31); - BoardWinCreateChoice(0, 0x60000, -1, 0); + BoardWinCreateChoice(0, MAKE_MESSID(6, 0), -1, 0); if (GWPlayer[temp_r31].com) { if (BoardPlayerCoinsGet(temp_r31) >= 5) { BoardComKeySetLeft(); @@ -435,7 +487,7 @@ static void ExecLottery(void) { HuPrcEnd(); } if (BoardPlayerCoinsGet(temp_r31) < 5) { - BoardWinCreate(0, 0x60001, -1); + BoardWinCreate(0, MAKE_MESSID(6, 1), -1); BoardWinWait(); BoardWinKill(); if (temp_r29 != -1) { @@ -477,7 +529,7 @@ static void ExecLottery(void) { if (BoardPlayerSizeGet(temp_r31) == 1) { BoardModelVisibilitySet(lotteryMdl[3], 1); } - omVibrate(temp_r31, 0xC, 6, 6); + omVibrate(temp_r31, 12, 6, 6); HuAudFXPlay(0x331); HuAudFXPlay(0x344); BoardModelMotionStart(lotteryMdl[0], 0, 0); @@ -641,7 +693,7 @@ static void PayEnterFee(s32 arg0) { BoardStatusShowSetForce(temp_r31); BoardStatusShowSet(temp_r31, 1); if (arg0 != 0) { - var_r29 = lotteryMessBase + 0xC; + var_r29 = lotteryMessBase + 12; } else { var_r29 = lotteryMessBase; } @@ -672,14 +724,14 @@ static void ShowTicket(void) { s32 i; u8 *var_r28; s32 sp14[] = { - 0x00050015, - 0x00050016, - 0x00050017, - 0x00050018, - 0x00050019, - 0x0005001A, - 0x0005001B, - 0x0005001C + DATA_MAKE_NUM(DATADIR_BKUJIYA, 21), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 22), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 23), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 24), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 25), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 26), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 27), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 28) }; if (GWBoardGet() == 7 || GWBoardGet() == 8) { @@ -688,25 +740,25 @@ static void ShowTicket(void) { sp8 = GWPlayer[GWSystem.player_curr].field00_bitA; var_r28 = (u8*) &sp8; temp_r31 = HuSprGrpCreate(4); - BoardSpriteCreate(0x50014, 0x7531, 0, &spA); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BKUJIYA, 20), 30001, 0, &spA); HuSprGrpMemberSet(temp_r31, 0, spA); HuSprAttrSet(temp_r31, 0, 9); HuSprPosSet(temp_r31, 0, 288.0f, 240.0f); HuSprTPLvlSet(temp_r31, 0, 0.0f); var_r29 = GWPlayer[(*var_r28 >> 4) & 3].character; - BoardSpriteCreate(sp14[var_r29], 0x7530, 0, &spC); + BoardSpriteCreate(sp14[var_r29], 30000, 0, &spC); HuSprGrpMemberSet(temp_r31, 1, spC); HuSprAttrSet(temp_r31, 1, 9); HuSprPosSet(temp_r31, 1, 200.0f, 237.0f); HuSprTPLvlSet(temp_r31, 1, 0.0f); var_r29 = GWPlayer[(*var_r28 >> 2) & 3].character; - BoardSpriteCreate(sp14[var_r29], 0x7530, 0, &spE); + BoardSpriteCreate(sp14[var_r29], 30000, 0, &spE); HuSprGrpMemberSet(temp_r31, 2, spE); HuSprAttrSet(temp_r31, 2, 9); HuSprPosSet(temp_r31, 2, 294.0f, 237.0f); HuSprTPLvlSet(temp_r31, 2, 0.0f); var_r29 = GWPlayer[*var_r28 & 3].character; - BoardSpriteCreate(sp14[var_r29], 0x7530, 0, &sp10); + BoardSpriteCreate(sp14[var_r29], 30000, 0, &sp10); HuSprGrpMemberSet(temp_r31, 3, sp10); HuSprAttrSet(temp_r31, 3, 9); HuSprPosSet(temp_r31, 3, 388.0f, 237.0f); @@ -752,7 +804,7 @@ static void SetupTicket(s32 arg0) { } } for (var_r28 = 0; var_r28 < 1000; var_r28++) { - var_r29 = BoardRandMod(0x40) & 0x3F; + var_r29 = BoardRandMod(64) & 0x3F; for (var_r31 = 0; var_r30 != 0 && var_r31 < var_r30; var_r31++) { if (sp8[var_r31] == var_r29) { var_r29 = 0x80; @@ -768,9 +820,12 @@ static void SetupTicket(s32 arg0) { } static void LotteryInlineFunc00(s32 arg0, s32 arg1) { - s32 sp20[2] = { 0x00050012, 0x00050013 }; - s16 sp10[2] = { 0x0098, 0x0078 }; - s16 sp14[2] = { 0x0078, 0x0078 }; + s32 sp20[2] = { + DATA_MAKE_NUM(DATADIR_BKUJIYA, 18), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 19) + }; + s16 sp10[2] = { 152, 120 }; + s16 sp14[2] = { 120, 120 }; Vec sp34; float temp_f30; s16 var_r30; @@ -780,7 +835,7 @@ static void LotteryInlineFunc00(s32 arg0, s32 arg1) { sp34.y = -sp10[arg0] / 2; temp_f30 = 4.0f; if (lotterySpr == -1) { - lotterySpr = espEntry(sp20[arg0], 0x7531, 0); + lotterySpr = espEntry(sp20[arg0], 30001, 0); espAttrSet(lotterySpr, 1); } } else { @@ -820,14 +875,14 @@ static void ExecBallGame(void) { s8 sp9; s8 *temp_r23; s32 sp58[] = { - 0x005F001D, - 0x001A001D, - 0x006D001D, - 0x008A001D, - 0x0085001D, - 0x0011001D, - 0x000D001D, - 0x0081001D + DATA_MAKE_NUM(DATADIR_MARIOMOT, 29), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 29), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 29), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 29), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 29), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 29), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 29), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 29), }; temp_r27 = GWSystem.player_curr; @@ -858,7 +913,7 @@ static void ExecBallGame(void) { var_r20 = 0; spB = spA = sp9 = var_r17 = 0; var_r26 = var_f28 = var_f27 = var_f25 = var_f23 = var_r21 = 0; - HuPrcSleep(0x18); + HuPrcSleep(24); var_r24 = var_r22 = 0; while (1) { HuPrcVSleep(); @@ -1033,32 +1088,32 @@ static void ExecBallPrize(void) { } static const s32 pickSpr[] = { - 0x0007001E, - 0x0007001F, - 0x00070020, - 0x00070021, - 0x00070022, - 0x00070023, - 0x00070024, - 0x00070025 + DATA_MAKE_NUM(DATADIR_BOARD, 30), + DATA_MAKE_NUM(DATADIR_BOARD, 31), + DATA_MAKE_NUM(DATADIR_BOARD, 32), + DATA_MAKE_NUM(DATADIR_BOARD, 33), + DATA_MAKE_NUM(DATADIR_BOARD, 34), + DATA_MAKE_NUM(DATADIR_BOARD, 35), + DATA_MAKE_NUM(DATADIR_BOARD, 36), + DATA_MAKE_NUM(DATADIR_BOARD, 37) }; static const s32 handMdl[] = { - 0x00050009, - 0x0005000A, - 0x0005000B, - 0x0005000C, - 0x0005000D, - 0x0005000E, - 0x0005000F, - 0x00050010 + DATA_MAKE_NUM(DATADIR_BKUJIYA, 9), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 10), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 11), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 12), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 13), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 14), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 15), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 16) }; static const s32 ticketSpr[] = { - 0x0005001D, - 0x0005001E, - 0x0005001F, - 0x00050020 + DATA_MAKE_NUM(DATADIR_BKUJIYA, 29), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 30), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 31), + DATA_MAKE_NUM(DATADIR_BKUJIYA, 32) }; static omObjData *ticketObj[12] = { NULL }; @@ -1077,14 +1132,14 @@ static s32 loseSoundTbl[] = { }; static s32 loseMotTbl[] = { - 0x005F0033, - 0x001A0033, - 0x006D0033, - 0x008A0033, - 0x00850033, - 0x00110033, - 0x000D0033, - 0x00810033 + DATA_MAKE_NUM(DATADIR_MARIOMOT, 51), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 51), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 51), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 51), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 51), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 51), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 51), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 51) }; static void ExecScratchTicket(s32 arg0) { @@ -1172,7 +1227,7 @@ static void ExecScratch(void) { s32 temp_r31; currPrize = -1; - BoardFilterFadeInit(0x1E, 0xA0); + BoardFilterFadeInit(30, 0xA0); InitTicketPrizes(); InitScratchSpr(); temp_curr = GWSystem.player_curr; @@ -1281,7 +1336,7 @@ static void InitScratchSpr(void) { BoardPlayerRotGet(temp_curr, &sp18); memset(ticketObj, 0, sizeof(ticketObj)); BoardCameraRotGet(&spC); - temp_r28 = HuSprGrpCreate(0x18); + temp_r28 = HuSprGrpCreate(24); ticketSprGrp = temp_r28; for (i = 0; i < 12; i++) { temp_r31 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, ExecScratchSpr); @@ -1295,12 +1350,12 @@ static void InitScratchSpr(void) { temp_r31->trans.y = 98.0f + 110.0f * (i / 4); temp_r31->rot.x = -56.0f; temp_r31->rot.y = temp_r31->trans.y; - BoardSpriteCreate(ticketSpr[ticketPrize[i]], 0x157C, NULL, &sp8); + BoardSpriteCreate(ticketSpr[ticketPrize[i]], 5500, NULL, &sp8); HuSprGrpMemberSet(temp_r28, i, sp8); HuSprPosSet(temp_r28, i, temp_r31->rot.x, temp_r31->rot.y); HuSprAttrSet(temp_r28, i, 8); temp_r29->unk02 = sp8; - BoardSpriteCreate(0x50021, 0x1388, &temp_r29->unk08, &sp8); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BKUJIYA, 33), 5000, &temp_r29->unk08, &sp8); HuSprGrpMemberSet(temp_r28, i + 12, sp8); HuSprPosSet(temp_r28, i + 12, temp_r31->rot.x, temp_r31->rot.y); HuSprAttrSet(temp_r28, i + 12, 8); @@ -1417,7 +1472,7 @@ static void InitScratchPick(void) { var_r31->unk00_field0 = 0; var_r31->unk01 = GWPlayer[GWSystem.player_curr].character; var_r31->unk08 = HuSprGrpCreate(1); - BoardSpriteCreate(pickSpr[var_r31->unk01], 0x1388, 0, &var_r31->unk06); + BoardSpriteCreate(pickSpr[var_r31->unk01], 5000, 0, &var_r31->unk06); HuSprGrpMemberSet(var_r31->unk08, 0, var_r31->unk06); HuSprAttrSet(var_r31->unk08, 0, 8); HuSprPosSet(var_r31->unk08, 0, temp_f31, temp_f30); @@ -1457,7 +1512,7 @@ static void ExecTicketFocus(s32 arg0) { } temp_r29 = OM_GET_WORK_PTR(ticketObj[arg0], TicketWork); for (var_f31 = 0.0f; var_f31 < 90.0f; var_f31 += 2.0f) { - temp_f30 = 1.0 + 1.2999999523162842 * sin(var_f31 * M_PI / 180.0); + temp_f30 = 1.0 + 1.3f * sin(var_f31 * M_PI / 180.0); HuSprScaleSet(ticketSprGrp, temp_r29->unk00_field2, temp_f30, temp_f30); HuSprScaleSet(ticketSprGrp, temp_r29->unk00_field2 + 12, temp_f30, temp_f30); HuPrcVSleep(); @@ -1630,10 +1685,10 @@ static void ExecCoinPrize(void) { BoardPlayerPosGet(temp_r27, &sp8); var_f31 = 150.0f + sp8.y; if (BoardPlayerSizeGet(temp_r27) == 1) { - var_f31 = 110.0f + (52.5308f + (0.3f * var_f31)); + var_f31 = 52.5308f + 0.3f * var_f31 + 110.0f; } for (i = 0; i < 10; i++) { - coinMdl[i] = BoardModelCreate(0x7000A, NULL, 0); + coinMdl[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 0); BoardModelVisibilitySet(coinMdl[i], 0); } while (1) { @@ -1672,7 +1727,7 @@ static void ExecCoinPrize(void) { coinF[i] = 0; BoardPlayerCoinsAdd(temp_r27, 1); HuAudFXPlay(7); - omVibrate(temp_r27, 0xC, 6, 6); + omVibrate(temp_r27, 12, 6, 6); } else { BoardModelPosSetV(coinMdl[i], &sp64[i]); BoardModelRotSet(coinMdl[i], 0.0f, sp3C[i], 0.0f); @@ -1697,12 +1752,10 @@ static void ExecItemPrize(void) { s16 *var_r31; s16 i; s32 spC[2] = { - 0x0007006F, - 0x00070070 - }; - s8 sp8[2] = { - 0x02, 0x03 + DATA_MAKE_NUM(DATADIR_BOARD, 111), + DATA_MAKE_NUM(DATADIR_BOARD, 112) }; + s8 sp8[2] = { 2, 3 }; temp_r29 = GWSystem.player_curr; var_r28 = (BoardRandFloat() < 0.5f) ? 1 : 0; @@ -1752,7 +1805,7 @@ static void ExecItemPrize(void) { BoardModelKill(*var_r31); *var_r31 = -1; BoardPlayerItemAdd(GWSystem.player_curr, sp8[var_r28]); - omVibrate(GWSystem.player_curr, 0xC, 6, 6); + omVibrate(GWSystem.player_curr, 12, 6, 6); } static void KillCoin(void) { @@ -1783,7 +1836,7 @@ static void ExecPrize(void) { sp14.x = 0.0f; sp14.y = 200.0f; sp14.z = 0.0f; - BoardCameraMotionStartEx(lotteryMdl[0], 0, &sp14, 1300.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(lotteryMdl[0], 0, &sp14, 1300.0f, -1.0f, 21); temp_r30 = GWSystem.player_curr; BoardStatusShowSetForce(temp_r30); BoardStatusShowSet(temp_r30, 1); @@ -1803,18 +1856,18 @@ static void ExecPrize(void) { case 0: var_r28 = lotteryMessBase + 2; var_r29 = 7; - var_r26 = 0x64; + var_r26 = 100; break; case 1: var_r28 = lotteryMessBase + 4; var_r29 = 7; - var_r26 = 0x50; + var_r26 = 80; break; case 2: var_r28 = lotteryMessBase + 5; if (var_r24 < 3) { var_r29 = 7; - var_r26 = 0x50; + var_r26 = 80; } else { var_r29 = 8; } @@ -1933,14 +1986,14 @@ static void CreateLotteryWin(s32 arg0) { temp_f30 = -10000.0f; if (arg0 == 0) { - var_r31 = 0x60050; + var_r31 = MAKE_MESSID(6, 80); var_f31 = 352.0f; } else if (arg0 == 1) { var_f31 = 352.0f; - var_r31 = 0x60051; + var_r31 = MAKE_MESSID(6, 81); } else { var_f31 = 364.0f; - var_r31 = 0x200016; + var_r31 = MAKE_MESSID(32, 22); } HuWinMesMaxSizeGet(1, sp8, var_r31); lotteryInstWin = HuWinCreate(temp_f30, var_f31, sp8[0], sp8[1], 0); @@ -1967,7 +2020,7 @@ void BoardLotteryTutorialExec(void) { s16 temp_r31; s32 temp_r30; - temp_r30 = BoardDataDirReadAsync(0x50000); + temp_r30 = BoardDataDirReadAsync(DATADIR_BKUJIYA); temp_r31 = BoardSpaceFlagSearch(0, 0x10000000); if (temp_r30 != -1) { BoardDataAsyncWait(temp_r30); diff --git a/src/game/window.c b/src/game/window.c index d141969a..fbe521c0 100644 --- a/src/game/window.c +++ b/src/game/window.c @@ -1537,7 +1537,7 @@ void HuWinMesMaxSizeGet(s16 mess_num, float *size, ...) { va_end(list); } -void HuWinInsertMesSizeGet(s32 mess, s16 index) { +void HuWinInsertMesSizeGet(u32 mess, s16 index) { winInsertF = 1; winMaxWidth = winMaxHeight = 0; GetMesMaxSizeSub(mess); From 007b62526a326d48246deb5a1021551d6c67c517 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 17 Mar 2024 23:30:17 -0500 Subject: [PATCH 089/106] Match selmenu --- config/GMPE01_00/rels/selmenuDll/symbols.txt | 284 +++++++++---------- configure.py | 2 +- src/REL/selmenuDll/main.c | 11 +- 3 files changed, 148 insertions(+), 149 deletions(-) diff --git a/config/GMPE01_00/rels/selmenuDll/symbols.txt b/config/GMPE01_00/rels/selmenuDll/symbols.txt index 58c32747..3f593825 100644 --- a/config/GMPE01_00/rels/selmenuDll/symbols.txt +++ b/config/GMPE01_00/rels/selmenuDll/symbols.txt @@ -25,161 +25,161 @@ SMSound3DUpdate = .text:0x00004574; // type:function size:0x854 scope:local SMSound3DDraw = .text:0x00004DC8; // type:function size:0x3D0 scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 data:double -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x8 data:4byte -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x10 data:4byte -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x8 data:4byte -lbl_1_data_0 = .data:0x00000000; // type:object size:0x6 data:string -lbl_1_data_6 = .data:0x00000006; // type:object size:0x6 data:string -lbl_1_data_C = .data:0x0000000C; // type:object size:0x6 data:string -lbl_1_data_12 = .data:0x00000012; // type:object size:0x6 data:string -lbl_1_data_18 = .data:0x00000018; // type:object size:0x6 data:string -lbl_1_data_1E = .data:0x0000001E; // type:object size:0x7 data:string -lbl_1_data_25 = .data:0x00000025; // type:object size:0x6 data:string -lbl_1_data_2B = .data:0x0000002B; // type:object size:0x8 data:string +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 scope:local data:double +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x8 scope:local data:4byte +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x8 scope:local data:4byte +lbl_1_data_0 = .data:0x00000000; // type:object size:0x6 scope:local data:string +lbl_1_data_6 = .data:0x00000006; // type:object size:0x6 scope:local data:string +lbl_1_data_C = .data:0x0000000C; // type:object size:0x6 scope:local data:string +lbl_1_data_12 = .data:0x00000012; // type:object size:0x6 scope:local data:string +lbl_1_data_18 = .data:0x00000018; // type:object size:0x6 scope:local data:string +lbl_1_data_1E = .data:0x0000001E; // type:object size:0x7 scope:local data:string +lbl_1_data_25 = .data:0x00000025; // type:object size:0x6 scope:local data:string +lbl_1_data_2B = .data:0x0000002B; // type:object size:0x8 scope:local data:string smCharTbl = .data:0x00000034; // type:object size:0x20 scope:local -lbl_1_data_54 = .data:0x00000054; // type:object size:0x14 data:string -lbl_1_data_68 = .data:0x00000068; // type:object size:0x16 data:string -lbl_1_data_7E = .data:0x0000007E; // type:object size:0x11 data:string -lbl_1_data_8F = .data:0x0000008F; // type:object size:0x12 data:string -lbl_1_data_A1 = .data:0x000000A1; // type:object size:0x10 data:string -lbl_1_data_B1 = .data:0x000000B1; // type:object size:0xD data:string -lbl_1_data_BE = .data:0x000000BE; // type:object size:0x11 data:string -lbl_1_data_CF = .data:0x000000CF; // type:object size:0xD data:string -lbl_1_data_DC = .data:0x000000DC; // type:object size:0xE data:string -lbl_1_data_EA = .data:0x000000EA; // type:object size:0x16 data:string -lbl_1_data_100 = .data:0x00000100; // type:object size:0x13 data:string -lbl_1_data_113 = .data:0x00000113; // type:object size:0xF data:string -lbl_1_data_122 = .data:0x00000122; // type:object size:0x14 data:string -lbl_1_data_136 = .data:0x00000136; // type:object size:0x11 data:string -lbl_1_data_147 = .data:0x00000147; // type:object size:0x13 data:string -lbl_1_data_15A = .data:0x0000015A; // type:object size:0x10 data:string -lbl_1_data_16A = .data:0x0000016A; // type:object size:0x11 data:string -lbl_1_data_17B = .data:0x0000017B; // type:object size:0x15 data:string -lbl_1_data_190 = .data:0x00000190; // type:object size:0x17 data:string -lbl_1_data_1A7 = .data:0x000001A7; // type:object size:0x11 data:string -lbl_1_data_1B8 = .data:0x000001B8; // type:object size:0x10 data:string -lbl_1_data_1C8 = .data:0x000001C8; // type:object size:0x10 data:string -lbl_1_data_1D8 = .data:0x000001D8; // type:object size:0x12 data:string -lbl_1_data_1EA = .data:0x000001EA; // type:object size:0x10 data:string -lbl_1_data_1FA = .data:0x000001FA; // type:object size:0xF data:string -lbl_1_data_209 = .data:0x00000209; // type:object size:0x15 data:string -lbl_1_data_21E = .data:0x0000021E; // type:object size:0xE data:string -lbl_1_data_22C = .data:0x0000022C; // type:object size:0x13 data:string -lbl_1_data_23F = .data:0x0000023F; // type:object size:0x14 data:string -lbl_1_data_253 = .data:0x00000253; // type:object size:0x13 data:string -lbl_1_data_266 = .data:0x00000266; // type:object size:0x11 data:string -lbl_1_data_277 = .data:0x00000277; // type:object size:0x11 data:string -lbl_1_data_288 = .data:0x00000288; // type:object size:0x11 data:string -lbl_1_data_299 = .data:0x00000299; // type:object size:0x10 data:string -lbl_1_data_2A9 = .data:0x000002A9; // type:object size:0x10 data:string -lbl_1_data_2B9 = .data:0x000002B9; // type:object size:0x1B data:string -lbl_1_data_2D4 = .data:0x000002D4; // type:object size:0x11 data:string -lbl_1_data_2E5 = .data:0x000002E5; // type:object size:0x1D data:string -lbl_1_data_302 = .data:0x00000302; // type:object size:0x17 data:string -lbl_1_data_319 = .data:0x00000319; // type:object size:0x16 data:string -lbl_1_data_32F = .data:0x0000032F; // type:object size:0x15 data:string -lbl_1_data_344 = .data:0x00000344; // type:object size:0x13 data:string -lbl_1_data_357 = .data:0x00000357; // type:object size:0xE data:string -lbl_1_data_365 = .data:0x00000365; // type:object size:0x14 data:string -lbl_1_data_379 = .data:0x00000379; // type:object size:0x13 data:string -lbl_1_data_38C = .data:0x0000038C; // type:object size:0x12 data:string -lbl_1_data_39E = .data:0x0000039E; // type:object size:0xD data:string -lbl_1_data_3AB = .data:0x000003AB; // type:object size:0xD data:string -lbl_1_data_3B8 = .data:0x000003B8; // type:object size:0x17 data:string -lbl_1_data_3CF = .data:0x000003CF; // type:object size:0xE data:string -lbl_1_data_3DD = .data:0x000003DD; // type:object size:0xB data:string -lbl_1_data_3E8 = .data:0x000003E8; // type:object size:0x11 data:string -lbl_1_data_3F9 = .data:0x000003F9; // type:object size:0x11 data:string -lbl_1_data_40A = .data:0x0000040A; // type:object size:0xA data:string -lbl_1_data_414 = .data:0x00000414; // type:object size:0x13 data:string -lbl_1_data_427 = .data:0x00000427; // type:object size:0xD data:string -lbl_1_data_434 = .data:0x00000434; // type:object size:0x5 data:string -lbl_1_data_439 = .data:0x00000439; // type:object size:0x15 data:string -lbl_1_data_44E = .data:0x0000044E; // type:object size:0x5 data:string -lbl_1_data_453 = .data:0x00000453; // type:object size:0xF data:string -lbl_1_data_462 = .data:0x00000462; // type:object size:0xE data:string -lbl_1_data_470 = .data:0x00000470; // type:object size:0xE data:string -lbl_1_data_47E = .data:0x0000047E; // type:object size:0xE data:string -lbl_1_data_48C = .data:0x0000048C; // type:object size:0xE data:string -lbl_1_data_49A = .data:0x0000049A; // type:object size:0xE data:string -lbl_1_data_4A8 = .data:0x000004A8; // type:object size:0xE data:string -lbl_1_data_4B6 = .data:0x000004B6; // type:object size:0xE data:string -lbl_1_data_4C4 = .data:0x000004C4; // type:object size:0xE data:string -lbl_1_data_4D2 = .data:0x000004D2; // type:object size:0xA data:string -lbl_1_data_4DC = .data:0x000004DC; // type:object size:0xF data:string +lbl_1_data_54 = .data:0x00000054; // type:object size:0x14 scope:local data:string +lbl_1_data_68 = .data:0x00000068; // type:object size:0x16 scope:local data:string +lbl_1_data_7E = .data:0x0000007E; // type:object size:0x11 scope:local data:string +lbl_1_data_8F = .data:0x0000008F; // type:object size:0x12 scope:local data:string +lbl_1_data_A1 = .data:0x000000A1; // type:object size:0x10 scope:local data:string +lbl_1_data_B1 = .data:0x000000B1; // type:object size:0xD scope:local data:string +lbl_1_data_BE = .data:0x000000BE; // type:object size:0x11 scope:local data:string +lbl_1_data_CF = .data:0x000000CF; // type:object size:0xD scope:local data:string +lbl_1_data_DC = .data:0x000000DC; // type:object size:0xE scope:local data:string +lbl_1_data_EA = .data:0x000000EA; // type:object size:0x16 scope:local data:string +lbl_1_data_100 = .data:0x00000100; // type:object size:0x13 scope:local data:string +lbl_1_data_113 = .data:0x00000113; // type:object size:0xF scope:local data:string +lbl_1_data_122 = .data:0x00000122; // type:object size:0x14 scope:local data:string +lbl_1_data_136 = .data:0x00000136; // type:object size:0x11 scope:local data:string +lbl_1_data_147 = .data:0x00000147; // type:object size:0x13 scope:local data:string +lbl_1_data_15A = .data:0x0000015A; // type:object size:0x10 scope:local data:string +lbl_1_data_16A = .data:0x0000016A; // type:object size:0x11 scope:local data:string +lbl_1_data_17B = .data:0x0000017B; // type:object size:0x15 scope:local data:string +lbl_1_data_190 = .data:0x00000190; // type:object size:0x17 scope:local data:string +lbl_1_data_1A7 = .data:0x000001A7; // type:object size:0x11 scope:local data:string +lbl_1_data_1B8 = .data:0x000001B8; // type:object size:0x10 scope:local data:string +lbl_1_data_1C8 = .data:0x000001C8; // type:object size:0x10 scope:local data:string +lbl_1_data_1D8 = .data:0x000001D8; // type:object size:0x12 scope:local data:string +lbl_1_data_1EA = .data:0x000001EA; // type:object size:0x10 scope:local data:string +lbl_1_data_1FA = .data:0x000001FA; // type:object size:0xF scope:local data:string +lbl_1_data_209 = .data:0x00000209; // type:object size:0x15 scope:local data:string +lbl_1_data_21E = .data:0x0000021E; // type:object size:0xE scope:local data:string +lbl_1_data_22C = .data:0x0000022C; // type:object size:0x13 scope:local data:string +lbl_1_data_23F = .data:0x0000023F; // type:object size:0x14 scope:local data:string +lbl_1_data_253 = .data:0x00000253; // type:object size:0x13 scope:local data:string +lbl_1_data_266 = .data:0x00000266; // type:object size:0x11 scope:local data:string +lbl_1_data_277 = .data:0x00000277; // type:object size:0x11 scope:local data:string +lbl_1_data_288 = .data:0x00000288; // type:object size:0x11 scope:local data:string +lbl_1_data_299 = .data:0x00000299; // type:object size:0x10 scope:local data:string +lbl_1_data_2A9 = .data:0x000002A9; // type:object size:0x10 scope:local data:string +lbl_1_data_2B9 = .data:0x000002B9; // type:object size:0x1B scope:local data:string +lbl_1_data_2D4 = .data:0x000002D4; // type:object size:0x11 scope:local data:string +lbl_1_data_2E5 = .data:0x000002E5; // type:object size:0x1D scope:local data:string +lbl_1_data_302 = .data:0x00000302; // type:object size:0x17 scope:local data:string +lbl_1_data_319 = .data:0x00000319; // type:object size:0x16 scope:local data:string +lbl_1_data_32F = .data:0x0000032F; // type:object size:0x15 scope:local data:string +lbl_1_data_344 = .data:0x00000344; // type:object size:0x13 scope:local data:string +lbl_1_data_357 = .data:0x00000357; // type:object size:0xE scope:local data:string +lbl_1_data_365 = .data:0x00000365; // type:object size:0x14 scope:local data:string +lbl_1_data_379 = .data:0x00000379; // type:object size:0x13 scope:local data:string +lbl_1_data_38C = .data:0x0000038C; // type:object size:0x12 scope:local data:string +lbl_1_data_39E = .data:0x0000039E; // type:object size:0xD scope:local data:string +lbl_1_data_3AB = .data:0x000003AB; // type:object size:0xD scope:local data:string +lbl_1_data_3B8 = .data:0x000003B8; // type:object size:0x17 scope:local data:string +lbl_1_data_3CF = .data:0x000003CF; // type:object size:0xE scope:local data:string +lbl_1_data_3DD = .data:0x000003DD; // type:object size:0xB scope:local data:string +lbl_1_data_3E8 = .data:0x000003E8; // type:object size:0x11 scope:local data:string +lbl_1_data_3F9 = .data:0x000003F9; // type:object size:0x11 scope:local data:string +lbl_1_data_40A = .data:0x0000040A; // type:object size:0xA scope:local data:string +lbl_1_data_414 = .data:0x00000414; // type:object size:0x13 scope:local data:string +lbl_1_data_427 = .data:0x00000427; // type:object size:0xD scope:local data:string +lbl_1_data_434 = .data:0x00000434; // type:object size:0x5 scope:local data:string +lbl_1_data_439 = .data:0x00000439; // type:object size:0x15 scope:local data:string +lbl_1_data_44E = .data:0x0000044E; // type:object size:0x5 scope:local data:string +lbl_1_data_453 = .data:0x00000453; // type:object size:0xF scope:local data:string +lbl_1_data_462 = .data:0x00000462; // type:object size:0xE scope:local data:string +lbl_1_data_470 = .data:0x00000470; // type:object size:0xE scope:local data:string +lbl_1_data_47E = .data:0x0000047E; // type:object size:0xE scope:local data:string +lbl_1_data_48C = .data:0x0000048C; // type:object size:0xE scope:local data:string +lbl_1_data_49A = .data:0x0000049A; // type:object size:0xE scope:local data:string +lbl_1_data_4A8 = .data:0x000004A8; // type:object size:0xE scope:local data:string +lbl_1_data_4B6 = .data:0x000004B6; // type:object size:0xE scope:local data:string +lbl_1_data_4C4 = .data:0x000004C4; // type:object size:0xE scope:local data:string +lbl_1_data_4D2 = .data:0x000004D2; // type:object size:0xA scope:local data:string +lbl_1_data_4DC = .data:0x000004DC; // type:object size:0xF scope:local data:string smMenuTbl = .data:0x000004EC; // type:object size:0x348 scope:local cameraMaskTbl = .data:0x00000834; // type:object size:0x10 scope:local lbl_1_data_844 = .data:0x00000844; // type:object size:0x18 scope:local -lbl_1_data_85C = .data:0x0000085C; // type:object size:0x12 data:string -lbl_1_data_86E = .data:0x0000086E; // type:object size:0x12 data:string -lbl_1_data_880 = .data:0x00000880; // type:object size:0x12 data:string -lbl_1_data_892 = .data:0x00000892; // type:object size:0x12 data:string -lbl_1_data_8A4 = .data:0x000008A4; // type:object size:0x12 data:string -lbl_1_data_8B6 = .data:0x000008B6; // type:object size:0x12 data:string -lbl_1_data_8C8 = .data:0x000008C8; // type:object size:0x11 data:string -lbl_1_data_8D9 = .data:0x000008D9; // type:object size:0x1 +lbl_1_data_85C = .data:0x0000085C; // type:object size:0x12 scope:local data:string +lbl_1_data_86E = .data:0x0000086E; // type:object size:0x12 scope:local data:string +lbl_1_data_880 = .data:0x00000880; // type:object size:0x12 scope:local data:string +lbl_1_data_892 = .data:0x00000892; // type:object size:0x12 scope:local data:string +lbl_1_data_8A4 = .data:0x000008A4; // type:object size:0x12 scope:local data:string +lbl_1_data_8B6 = .data:0x000008B6; // type:object size:0x12 scope:local data:string +lbl_1_data_8C8 = .data:0x000008C8; // type:object size:0x11 scope:local data:string +lbl_1_data_8D9 = .data:0x000008D9; // type:object size:0x1 scope:local dvdMusTbl = .data:0x000008DC; // type:object size:0x20 scope:local smSelectPosExit = .data:0x000008FC; // type:object size:0x2 scope:local data:2byte keyDStkAllPrev = .data:0x000008FE; // type:object size:0x8 scope:local -lbl_1_data_906 = .data:0x00000906; // type:object size:0xF data:string +lbl_1_data_906 = .data:0x00000906; // type:object size:0xF scope:local data:string funcId$244 = .data:0x00000918; // type:object size:0x4 scope:local data:4byte -lbl_1_data_91C = .data:0x0000091C; // type:object size:0x12 data:string -lbl_1_data_92E = .data:0x0000092E; // type:object size:0x24 data:string -lbl_1_data_952 = .data:0x00000952; // type:object size:0xB data:string -lbl_1_data_95D = .data:0x0000095D; // type:object size:0x3 data:string -lbl_1_data_960 = .data:0x00000960; // type:object size:0xD data:string +lbl_1_data_91C = .data:0x0000091C; // type:object size:0x12 scope:local data:string +lbl_1_data_92E = .data:0x0000092E; // type:object size:0x24 scope:local data:string +lbl_1_data_952 = .data:0x00000952; // type:object size:0xB scope:local data:string +lbl_1_data_95D = .data:0x0000095D; // type:object size:0x3 scope:local data:string +lbl_1_data_960 = .data:0x00000960; // type:object size:0xD scope:local data:string charMdlTbl = .data:0x00000970; // type:object size:0x20 scope:local charMdlMotTbl = .data:0x00000990; // type:object size:0x20 scope:local -lbl_1_data_9B0 = .data:0x000009B0; // type:object size:0xD data:string -lbl_1_data_9BD = .data:0x000009BD; // type:object size:0x5 -lbl_1_data_9C2 = .data:0x000009C2; // type:object size:0x5 -lbl_1_data_9C7 = .data:0x000009C7; // type:object size:0x6 -lbl_1_data_9CD = .data:0x000009CD; // type:object size:0x9 data:string -lbl_1_data_9D6 = .data:0x000009D6; // type:object size:0xA data:string -lbl_1_data_9E0 = .data:0x000009E0; // type:object size:0xA data:string -lbl_1_data_9EA = .data:0x000009EA; // type:object size:0x9 data:string -lbl_1_data_9F3 = .data:0x000009F3; // type:object size:0x9 data:string -lbl_1_data_9FC = .data:0x000009FC; // type:object size:0x9 data:string +lbl_1_data_9B0 = .data:0x000009B0; // type:object size:0xD scope:local data:string +lbl_1_data_9BD = .data:0x000009BD; // type:object size:0x5 scope:local +lbl_1_data_9C2 = .data:0x000009C2; // type:object size:0x5 scope:local +lbl_1_data_9C7 = .data:0x000009C7; // type:object size:0x6 scope:local +lbl_1_data_9CD = .data:0x000009CD; // type:object size:0x9 scope:local data:string +lbl_1_data_9D6 = .data:0x000009D6; // type:object size:0xA scope:local data:string +lbl_1_data_9E0 = .data:0x000009E0; // type:object size:0xA scope:local data:string +lbl_1_data_9EA = .data:0x000009EA; // type:object size:0x9 scope:local data:string +lbl_1_data_9F3 = .data:0x000009F3; // type:object size:0x9 scope:local data:string +lbl_1_data_9FC = .data:0x000009FC; // type:object size:0x9 scope:local data:string padCfgStrTbl = .data:0x00000A08; // type:object size:0x14 scope:local data:4byte -lbl_1_data_A1C = .data:0x00000A1C; // type:object size:0x6 data:string -lbl_1_data_A22 = .data:0x00000A22; // type:object size:0x4 data:string -lbl_1_data_A26 = .data:0x00000A26; // type:object size:0x5 data:string -lbl_1_data_A2B = .data:0x00000A2B; // type:object size:0x7 data:string -lbl_1_data_A32 = .data:0x00000A32; // type:object size:0x5 data:string -lbl_1_data_A37 = .data:0x00000A37; // type:object size:0x9 data:string +lbl_1_data_A1C = .data:0x00000A1C; // type:object size:0x6 scope:local data:string +lbl_1_data_A22 = .data:0x00000A22; // type:object size:0x4 scope:local data:string +lbl_1_data_A26 = .data:0x00000A26; // type:object size:0x5 scope:local data:string +lbl_1_data_A2B = .data:0x00000A2B; // type:object size:0x7 scope:local data:string +lbl_1_data_A32 = .data:0x00000A32; // type:object size:0x5 scope:local data:string +lbl_1_data_A37 = .data:0x00000A37; // type:object size:0x9 scope:local data:string jumptable_1_data_A40 = .data:0x00000A40; // type:object size:0x20 scope:local jumptable_1_data_A60 = .data:0x00000A60; // type:object size:0x20 scope:local -lbl_1_data_A80 = .data:0x00000A80; // type:object size:0x4 data:string -lbl_1_data_A84 = .data:0x00000A84; // type:object size:0x4 data:string -lbl_1_data_A88 = .data:0x00000A88; // type:object size:0x10 data:string -lbl_1_data_A98 = .data:0x00000A98; // type:object size:0x15 data:string -lbl_1_data_AAD = .data:0x00000AAD; // type:object size:0x15 data:string -lbl_1_data_AC2 = .data:0x00000AC2; // type:object size:0x15 data:string -lbl_1_data_AD7 = .data:0x00000AD7; // type:object size:0x15 data:string -lbl_1_data_AEC = .data:0x00000AEC; // type:object size:0x15 data:string -lbl_1_data_B01 = .data:0x00000B01; // type:object size:0x15 data:string -lbl_1_data_B16 = .data:0x00000B16; // type:object size:0x15 data:string -lbl_1_data_B2B = .data:0x00000B2B; // type:object size:0x14 data:string +lbl_1_data_A80 = .data:0x00000A80; // type:object size:0x4 scope:local data:string +lbl_1_data_A84 = .data:0x00000A84; // type:object size:0x4 scope:local data:string +lbl_1_data_A88 = .data:0x00000A88; // type:object size:0x10 scope:local data:string +lbl_1_data_A98 = .data:0x00000A98; // type:object size:0x15 scope:local data:string +lbl_1_data_AAD = .data:0x00000AAD; // type:object size:0x15 scope:local data:string +lbl_1_data_AC2 = .data:0x00000AC2; // type:object size:0x15 scope:local data:string +lbl_1_data_AD7 = .data:0x00000AD7; // type:object size:0x15 scope:local data:string +lbl_1_data_AEC = .data:0x00000AEC; // type:object size:0x15 scope:local data:string +lbl_1_data_B01 = .data:0x00000B01; // type:object size:0x15 scope:local data:string +lbl_1_data_B16 = .data:0x00000B16; // type:object size:0x15 scope:local data:string +lbl_1_data_B2B = .data:0x00000B2B; // type:object size:0x14 scope:local data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x2 data:2byte smSound3DPos = .bss:0x00000002; // type:object size:0x2 scope:local data:2byte emiCompVal = .bss:0x00000004; // type:object size:0x2 scope:local data:2byte diff --git a/configure.py b/configure.py index 6dab546c..12daf4ad 100644 --- a/configure.py +++ b/configure.py @@ -1066,7 +1066,7 @@ config.libs = [ Rel('selmenuDll', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/selmenuDll/main.c"), + Object(Matching, "REL/selmenuDll/main.c"), } ), Rel('staffDll', diff --git a/src/REL/selmenuDll/main.c b/src/REL/selmenuDll/main.c index c627b3ac..55b55841 100644 --- a/src/REL/selmenuDll/main.c +++ b/src/REL/selmenuDll/main.c @@ -725,16 +725,15 @@ static s16 playerCfgSelF; static s16 playerCfgPlayerPos; static s16 playerCfgOptionPos; -#define DO_HILITE(pos) \ +#define DO_HILITE(option) \ do { \ s32 color; \ - if(playerCfgOptionPos == pos) { \ - color = FONT_COLOR_CYAN; \ - fontcolor = color; \ + if(playerCfgOptionPos == option) { \ + color = fontcolor = FONT_COLOR_CYAN; \ } else { \ - color = FONT_COLOR_GREEN; \ - fontcolor = color; \ + color = fontcolor = FONT_COLOR_GREEN; \ } \ + (void)color; \ } while(0) static void SMPlayerCfgDraw(void) From 538ac0a01a967da9a21464c8b9c9cc5ea9ca7763 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Sat, 23 Mar 2024 22:45:09 -0700 Subject: [PATCH 090/106] Matched REL/w01/main + some data cleanup --- config/GMPE01_00/rels/w01Dll/symbols.txt | 444 ++-- configure.py | 2 +- include/REL/option.h | 5 + include/REL/w01Dll.h | 22 + include/game/board/main.h | 1 - include/game/board/player.h | 1 - include/game/board/space.h | 1 + src/REL/w01Dll/main.c | 2564 ++++++++++++++++++++++ src/game/board/battle.c | 45 +- src/game/board/pause.c | 162 +- 10 files changed, 2919 insertions(+), 328 deletions(-) create mode 100755 include/REL/w01Dll.h create mode 100755 src/REL/w01Dll/main.c diff --git a/config/GMPE01_00/rels/w01Dll/symbols.txt b/config/GMPE01_00/rels/w01Dll/symbols.txt index 4ba3173b..bd58c480 100644 --- a/config/GMPE01_00/rels/w01Dll/symbols.txt +++ b/config/GMPE01_00/rels/w01Dll/symbols.txt @@ -3,76 +3,76 @@ _prolog = .text:0x00000030; // type:function size:0x64 scope:global _epilog = .text:0x00000094; // type:function size:0x4C scope:global BoardCreate = .text:0x000000E0; // type:function size:0x4BC BoardDestroy = .text:0x0000059C; // type:function size:0x194 -fn_1_730 = .text:0x00000730; // type:function size:0x44 -fn_1_774 = .text:0x00000774; // type:function size:0x4 -fn_1_778 = .text:0x00000778; // type:function size:0x9C -fn_1_814 = .text:0x00000814; // type:function size:0x1D4 -fn_1_9E8 = .text:0x000009E8; // type:function size:0x318 -fn_1_D00 = .text:0x00000D00; // type:function size:0x4 -fn_1_D04 = .text:0x00000D04; // type:function size:0x550 -fn_1_1254 = .text:0x00001254; // type:function size:0x38 -fn_1_128C = .text:0x0000128C; // type:function size:0x80 -fn_1_130C = .text:0x0000130C; // type:function size:0x270 -fn_1_157C = .text:0x0000157C; // type:function size:0xF4 -fn_1_1670 = .text:0x00001670; // type:function size:0x90 -fn_1_1700 = .text:0x00001700; // type:function size:0x290 -fn_1_1990 = .text:0x00001990; // type:function size:0x148 -fn_1_1AD8 = .text:0x00001AD8; // type:function size:0x64 -fn_1_1B3C = .text:0x00001B3C; // type:function size:0x3A8 -fn_1_1EE4 = .text:0x00001EE4; // type:function size:0x48 -fn_1_1F2C = .text:0x00001F2C; // type:function size:0x78 -fn_1_1FA4 = .text:0x00001FA4; // type:function size:0x580 -fn_1_2524 = .text:0x00002524; // type:function size:0x248 -fn_1_276C = .text:0x0000276C; // type:function size:0x7AC -fn_1_2F18 = .text:0x00002F18; // type:function size:0x438 -fn_1_3350 = .text:0x00003350; // type:function size:0x1C4 -fn_1_3514 = .text:0x00003514; // type:function size:0xA0 -fn_1_35B4 = .text:0x000035B4; // type:function size:0x70 -fn_1_3624 = .text:0x00003624; // type:function size:0xFD0 -fn_1_45F4 = .text:0x000045F4; // type:function size:0x180 -fn_1_4774 = .text:0x00004774; // type:function size:0xF0 -fn_1_4864 = .text:0x00004864; // type:function size:0x50 -fn_1_48B4 = .text:0x000048B4; // type:function size:0x560 -fn_1_4E14 = .text:0x00004E14; // type:function size:0x194 -fn_1_4FA8 = .text:0x00004FA8; // type:function size:0x30 -fn_1_4FD8 = .text:0x00004FD8; // type:function size:0xFC -fn_1_50D4 = .text:0x000050D4; // type:function size:0x2E4 -fn_1_53B8 = .text:0x000053B8; // type:function size:0x84 -fn_1_543C = .text:0x0000543C; // type:function size:0x258 -fn_1_5694 = .text:0x00005694; // type:function size:0x1D8 -fn_1_586C = .text:0x0000586C; // type:function size:0xC0 -fn_1_592C = .text:0x0000592C; // type:function size:0x200 -fn_1_5B2C = .text:0x00005B2C; // type:function size:0x14 -fn_1_5B40 = .text:0x00005B40; // type:function size:0x190 -fn_1_5CD0 = .text:0x00005CD0; // type:function size:0x38 -fn_1_5D08 = .text:0x00005D08; // type:function size:0x390 -fn_1_6098 = .text:0x00006098; // type:function size:0xFC -fn_1_6194 = .text:0x00006194; // type:function size:0x25C -fn_1_63F0 = .text:0x000063F0; // type:function size:0x624 -fn_1_6A14 = .text:0x00006A14; // type:function size:0x1AC -fn_1_6BC0 = .text:0x00006BC0; // type:function size:0x3F4 -fn_1_6FB4 = .text:0x00006FB4; // type:function size:0x574 -fn_1_7528 = .text:0x00007528; // type:function size:0x2C4 -fn_1_77EC = .text:0x000077EC; // type:function size:0xA8 -fn_1_7894 = .text:0x00007894; // type:function size:0x1D0 -fn_1_7A64 = .text:0x00007A64; // type:function size:0xAC8 -fn_1_852C = .text:0x0000852C; // type:function size:0x280 -fn_1_87AC = .text:0x000087AC; // type:function size:0x34 -fn_1_87E0 = .text:0x000087E0; // type:function size:0x1A8 -fn_1_8988 = .text:0x00008988; // type:function size:0xC8 -fn_1_8A50 = .text:0x00008A50; // type:function size:0x11C -fn_1_8B6C = .text:0x00008B6C; // type:function size:0x270 -fn_1_8DDC = .text:0x00008DDC; // type:function size:0x3B0 -fn_1_918C = .text:0x0000918C; // type:function size:0xF0 -fn_1_927C = .text:0x0000927C; // type:function size:0xB0 -fn_1_932C = .text:0x0000932C; // type:function size:0x17C -fn_1_94A8 = .text:0x000094A8; // type:function size:0x14C -fn_1_95F4 = .text:0x000095F4; // type:function size:0x200 -fn_1_97F4 = .text:0x000097F4; // type:function size:0xF8 -fn_1_98EC = .text:0x000098EC; // type:function size:0x34 -fn_1_9920 = .text:0x00009920; // type:function size:0x104 -fn_1_9A24 = .text:0x00009A24; // type:function size:0x198 -fn_1_9BBC = .text:0x00009BBC; // type:function size:0x144 +fn_1_730 = .text:0x00000730; // type:function size:0x44 scope:local +fn_1_774 = .text:0x00000774; // type:function size:0x4 scope:local +fn_1_778 = .text:0x00000778; // type:function size:0x9C scope:local +fn_1_814 = .text:0x00000814; // type:function size:0x1D4 scope:local +fn_1_9E8 = .text:0x000009E8; // type:function size:0x318 scope:local +fn_1_D00 = .text:0x00000D00; // type:function size:0x4 scope:local +fn_1_D04 = .text:0x00000D04; // type:function size:0x550 scope:local +fn_1_1254 = .text:0x00001254; // type:function size:0x38 scope:local +fn_1_128C = .text:0x0000128C; // type:function size:0x80 scope:local +fn_1_130C = .text:0x0000130C; // type:function size:0x270 scope:local +fn_1_157C = .text:0x0000157C; // type:function size:0xF4 scope:local +fn_1_1670 = .text:0x00001670; // type:function size:0x90 scope:local +fn_1_1700 = .text:0x00001700; // type:function size:0x290 scope:local +fn_1_1990 = .text:0x00001990; // type:function size:0x148 scope:local +fn_1_1AD8 = .text:0x00001AD8; // type:function size:0x64 scope:local +fn_1_1B3C = .text:0x00001B3C; // type:function size:0x3A8 scope:local +fn_1_1EE4 = .text:0x00001EE4; // type:function size:0x48 scope:local +fn_1_1F2C = .text:0x00001F2C; // type:function size:0x78 scope:local +fn_1_1FA4 = .text:0x00001FA4; // type:function size:0x580 scope:local +fn_1_2524 = .text:0x00002524; // type:function size:0x248 scope:local +fn_1_276C = .text:0x0000276C; // type:function size:0x7AC scope:local +fn_1_2F18 = .text:0x00002F18; // type:function size:0x438 scope:local +fn_1_3350 = .text:0x00003350; // type:function size:0x1C4 scope:local +fn_1_3514 = .text:0x00003514; // type:function size:0xA0 scope:local +fn_1_35B4 = .text:0x000035B4; // type:function size:0x70 scope:local +fn_1_3624 = .text:0x00003624; // type:function size:0xFD0 scope:local +fn_1_45F4 = .text:0x000045F4; // type:function size:0x180 scope:local +fn_1_4774 = .text:0x00004774; // type:function size:0xF0 scope:local +fn_1_4864 = .text:0x00004864; // type:function size:0x50 scope:local +fn_1_48B4 = .text:0x000048B4; // type:function size:0x560 scope:local +fn_1_4E14 = .text:0x00004E14; // type:function size:0x194 scope:local +fn_1_4FA8 = .text:0x00004FA8; // type:function size:0x30 scope:local +fn_1_4FD8 = .text:0x00004FD8; // type:function size:0xFC scope:local +fn_1_50D4 = .text:0x000050D4; // type:function size:0x2E4 scope:local +fn_1_53B8 = .text:0x000053B8; // type:function size:0x84 scope:local +fn_1_543C = .text:0x0000543C; // type:function size:0x258 scope:local +fn_1_5694 = .text:0x00005694; // type:function size:0x1D8 scope:local +fn_1_586C = .text:0x0000586C; // type:function size:0xC0 scope:local +fn_1_592C = .text:0x0000592C; // type:function size:0x200 scope:local +fn_1_5B2C = .text:0x00005B2C; // type:function size:0x14 scope:local +fn_1_5B40 = .text:0x00005B40; // type:function size:0x190 scope:local +fn_1_5CD0 = .text:0x00005CD0; // type:function size:0x38 scope:local +fn_1_5D08 = .text:0x00005D08; // type:function size:0x390 scope:local +fn_1_6098 = .text:0x00006098; // type:function size:0xFC scope:local +fn_1_6194 = .text:0x00006194; // type:function size:0x25C scope:local +fn_1_63F0 = .text:0x000063F0; // type:function size:0x624 scope:local +fn_1_6A14 = .text:0x00006A14; // type:function size:0x1AC scope:local +fn_1_6BC0 = .text:0x00006BC0; // type:function size:0x3F4 scope:local +fn_1_6FB4 = .text:0x00006FB4; // type:function size:0x574 scope:local +fn_1_7528 = .text:0x00007528; // type:function size:0x2C4 scope:local +fn_1_77EC = .text:0x000077EC; // type:function size:0xA8 scope:local +fn_1_7894 = .text:0x00007894; // type:function size:0x1D0 scope:local +fn_1_7A64 = .text:0x00007A64; // type:function size:0xAC8 scope:local +fn_1_852C = .text:0x0000852C; // type:function size:0x280 scope:local +fn_1_87AC = .text:0x000087AC; // type:function size:0x34 scope:local +fn_1_87E0 = .text:0x000087E0; // type:function size:0x1A8 scope:local +fn_1_8988 = .text:0x00008988; // type:function size:0xC8 scope:local +fn_1_8A50 = .text:0x00008A50; // type:function size:0x11C scope:local +fn_1_8B6C = .text:0x00008B6C; // type:function size:0x270 scope:local +fn_1_8DDC = .text:0x00008DDC; // type:function size:0x3B0 scope:local +fn_1_918C = .text:0x0000918C; // type:function size:0xF0 scope:local +fn_1_927C = .text:0x0000927C; // type:function size:0xB0 scope:local +fn_1_932C = .text:0x0000932C; // type:function size:0x17C scope:local +fn_1_94A8 = .text:0x000094A8; // type:function size:0x14C scope:local +fn_1_95F4 = .text:0x000095F4; // type:function size:0x200 scope:local +fn_1_97F4 = .text:0x000097F4; // type:function size:0xF8 scope:local +fn_1_98EC = .text:0x000098EC; // type:function size:0x34 scope:local +fn_1_9920 = .text:0x00009920; // type:function size:0x104 scope:local +fn_1_9A24 = .text:0x00009A24; // type:function size:0x198 scope:local +fn_1_9BBC = .text:0x00009BBC; // type:function size:0x144 scope:local fn_1_9D00 = .text:0x00009D00; // type:function size:0xD8 fn_1_9DD8 = .text:0x00009DD8; // type:function size:0x6E0 fn_1_A4B8 = .text:0x0000A4B8; // type:function size:0x9C @@ -136,90 +136,90 @@ fn_1_11064 = .text:0x00011064; // type:function size:0x420 fn_1_11484 = .text:0x00011484; // type:function size:0x56C _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 data:double -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 data:double -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 data:double -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 data:double -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 data:double -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 data:float -lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 data:float -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 data:float -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float -lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 data:double -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x10 data:4byte -lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x8 data:4byte -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x8 data:4byte -lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x2 data:2byte -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 data:double -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x2 data:2byte -lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float -lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 data:float -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 data:float -lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 data:float -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 scope:local data:double +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 scope:local data:double +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 scope:local data:double +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 scope:local data:double +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x8 scope:local data:double +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 scope:local data:double +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_AC = .rodata:0x000000AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x8 scope:local data:4byte +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x8 scope:local data:4byte +lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x2 scope:local data:2byte +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 scope:local data:double +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x2 scope:local data:2byte +lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data:float +lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 scope:local data:float +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 scope:local data:float +lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 scope:local data:float +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 data:float lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 data:float lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float @@ -334,34 +334,34 @@ lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 data:float lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x528 -lbl_1_data_528 = .data:0x00000528; // type:object size:0x2 data:2byte -lbl_1_data_52A = .data:0x0000052A; // type:object size:0x2 data:2byte -lbl_1_data_52C = .data:0x0000052C; // type:object size:0x2 data:2byte -lbl_1_data_52E = .data:0x0000052E; // type:object size:0x2 data:2byte -lbl_1_data_530 = .data:0x00000530; // type:object size:0x2 data:2byte -lbl_1_data_534 = .data:0x00000534; // type:object size:0x8 -lbl_1_data_53C = .data:0x0000053C; // type:object size:0x8 -lbl_1_data_544 = .data:0x00000544; // type:object size:0x14 data:string -lbl_1_data_558 = .data:0x00000558; // type:object size:0x14 data:string -lbl_1_data_56C = .data:0x0000056C; // type:object size:0x14 -lbl_1_data_580 = .data:0x00000580; // type:object size:0x2 data:2byte -lbl_1_data_582 = .data:0x00000582; // type:object size:0x12 -lbl_1_data_594 = .data:0x00000594; // type:object size:0x40 -lbl_1_data_5D4 = .data:0x000005D4; // type:object size:0x4 data:4byte -lbl_1_data_5D8 = .data:0x000005D8; // type:object size:0x4 data:4byte -lbl_1_data_5DC = .data:0x000005DC; // type:object size:0x10 -lbl_1_data_5EC = .data:0x000005EC; // type:object size:0x7 data:string -lbl_1_data_5F3 = .data:0x000005F3; // type:object size:0x7 data:string -lbl_1_data_5FA = .data:0x000005FA; // type:object size:0xA -lbl_1_data_604 = .data:0x00000604; // type:object size:0xC -lbl_1_data_610 = .data:0x00000610; // type:object size:0x10 -lbl_1_data_620 = .data:0x00000620; // type:object size:0x5 data:string -lbl_1_data_625 = .data:0x00000625; // type:object size:0x5 data:string -lbl_1_data_62A = .data:0x0000062A; // type:object size:0x5 data:string -lbl_1_data_62F = .data:0x0000062F; // type:object size:0x4 data:string -lbl_1_data_633 = .data:0x00000633; // type:object size:0x1 data:byte -lbl_1_data_634 = .data:0x00000634; // type:object size:0x24 +lbl_1_data_0 = .data:0x00000000; // type:object size:0x528 scope:local +lbl_1_data_528 = .data:0x00000528; // type:object size:0x2 scope:local data:2byte +lbl_1_data_52A = .data:0x0000052A; // type:object size:0x2 scope:local data:2byte +lbl_1_data_52C = .data:0x0000052C; // type:object size:0x2 scope:local data:2byte +lbl_1_data_52E = .data:0x0000052E; // type:object size:0x2 scope:local data:2byte +lbl_1_data_530 = .data:0x00000530; // type:object size:0x2 scope:local data:2byte +lbl_1_data_534 = .data:0x00000534; // type:object size:0x8 scope:local +lbl_1_data_53C = .data:0x0000053C; // type:object size:0x8 scope:local +lbl_1_data_544 = .data:0x00000544; // type:object size:0x14 scope:local data:string +lbl_1_data_558 = .data:0x00000558; // type:object size:0x14 scope:local data:string +lbl_1_data_56C = .data:0x0000056C; // type:object size:0x13 scope:local data:string +lbl_1_data_580 = .data:0x00000580; // type:object size:0x2 scope:local data:2byte +lbl_1_data_582 = .data:0x00000582; // type:object size:0x12 scope:local +lbl_1_data_594 = .data:0x00000594; // type:object size:0x40 scope:local +lbl_1_data_5D4 = .data:0x000005D4; // type:object size:0x4 scope:local data:4byte +lbl_1_data_5D8 = .data:0x000005D8; // type:object size:0x4 scope:local data:4byte +lbl_1_data_5DC = .data:0x000005DC; // type:object size:0x10 scope:local data:2byte +lbl_1_data_5EC = .data:0x000005EC; // type:object size:0x7 scope:local data:string +lbl_1_data_5F3 = .data:0x000005F3; // type:object size:0x7 scope:local data:string +lbl_1_data_5FA = .data:0x000005FA; // type:object size:0x7 scope:local data:string +lbl_1_data_604 = .data:0x00000604; // type:object size:0xC scope:local +lbl_1_data_610 = .data:0x00000610; // type:object size:0x10 scope:local +lbl_1_data_620 = .data:0x00000620; // type:object size:0x5 scope:local data:string +lbl_1_data_625 = .data:0x00000625; // type:object size:0x5 scope:local data:string +lbl_1_data_62A = .data:0x0000062A; // type:object size:0x5 scope:local data:string +lbl_1_data_62F = .data:0x0000062F; // type:object size:0x4 scope:local data:string +lbl_1_data_633 = .data:0x00000633; // type:object size:0x1 scope:local data:byte +lbl_1_data_634 = .data:0x00000634; // type:object size:0x24 scope:local lbl_1_data_658 = .data:0x00000658; // type:object size:0x24 lbl_1_data_67C = .data:0x0000067C; // type:object size:0x14 lbl_1_data_690 = .data:0x00000690; // type:object size:0x2D0 @@ -378,46 +378,46 @@ lbl_1_data_F91 = .data:0x00000F91; // type:object size:0x5 data:string lbl_1_data_F96 = .data:0x00000F96; // type:object size:0x6 lbl_1_data_F9C = .data:0x00000F9C; // type:object size:0x10 data:4byte lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte -lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte -lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:4byte -lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 data:4byte -lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x4 data:4byte -lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte -lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x1 data:byte -lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 data:4byte -lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x2 data:2byte -lbl_1_bss_26 = .bss:0x00000026; // type:object size:0x2 data:2byte -lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x1 data:byte -lbl_1_bss_29 = .bss:0x00000029; // type:object size:0x1 data:byte -lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x5A0 -lbl_1_bss_5CC = .bss:0x000005CC; // type:object size:0x2 data:2byte -lbl_1_bss_5D0 = .bss:0x000005D0; // type:object size:0x30 -lbl_1_bss_600 = .bss:0x00000600; // type:object size:0x18 -lbl_1_bss_618 = .bss:0x00000618; // type:object size:0xC data:4byte -lbl_1_bss_624 = .bss:0x00000624; // type:object size:0xC data:float -lbl_1_bss_630 = .bss:0x00000630; // type:object size:0xC data:4byte -lbl_1_bss_63C = .bss:0x0000063C; // type:object size:0x4 data:float -lbl_1_bss_640 = .bss:0x00000640; // type:object size:0x4 data:float -lbl_1_bss_644 = .bss:0x00000644; // type:object size:0x4 data:float -lbl_1_bss_648 = .bss:0x00000648; // type:object size:0xC data:4byte -lbl_1_bss_654 = .bss:0x00000654; // type:object size:0xC data:float -lbl_1_bss_660 = .bss:0x00000660; // type:object size:0xC data:float -lbl_1_bss_66C = .bss:0x0000066C; // type:object size:0x4 data:float -lbl_1_bss_670 = .bss:0x00000670; // type:object size:0x4 data:float -lbl_1_bss_674 = .bss:0x00000674; // type:object size:0x4 data:float -lbl_1_bss_678 = .bss:0x00000678; // type:object size:0x30 -lbl_1_bss_6A8 = .bss:0x000006A8; // type:object size:0x4 data:float -lbl_1_bss_6AC = .bss:0x000006AC; // type:object size:0x2 data:2byte -lbl_1_bss_6AE = .bss:0x000006AE; // type:object size:0x2 data:2byte -lbl_1_bss_6B0 = .bss:0x000006B0; // type:object size:0x1 data:byte -lbl_1_bss_6B1 = .bss:0x000006B1; // type:object size:0x1 data:byte -lbl_1_bss_6B2 = .bss:0x000006B2; // type:object size:0x1 data:byte -lbl_1_bss_6B3 = .bss:0x000006B3; // type:object size:0x1 data:byte -lbl_1_bss_6B4 = .bss:0x000006B4; // type:object size:0x1 data:byte -lbl_1_bss_6B6 = .bss:0x000006B6; // type:object size:0xA data:2byte -lbl_1_bss_6C0 = .bss:0x000006C0; // type:object size:0x4 data:4byte -lbl_1_bss_6C4 = .bss:0x000006C4; // type:object size:0x44 data:2byte +lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x1 scope:local data:byte +lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_26 = .bss:0x00000026; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x1 scope:local data:byte +lbl_1_bss_29 = .bss:0x00000029; // type:object size:0x1 scope:local data:byte +lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x5A0 scope:local +lbl_1_bss_5CC = .bss:0x000005CC; // type:object size:0x4 scope:local data:2byte +lbl_1_bss_5D0 = .bss:0x000005D0; // type:object size:0x30 scope:local +lbl_1_bss_600 = .bss:0x00000600; // type:object size:0x18 scope:local +lbl_1_bss_618 = .bss:0x00000618; // type:object size:0xC scope:local data:4byte +lbl_1_bss_624 = .bss:0x00000624; // type:object size:0xC scope:local data:float +lbl_1_bss_630 = .bss:0x00000630; // type:object size:0xC scope:local data:4byte +lbl_1_bss_63C = .bss:0x0000063C; // type:object size:0x4 scope:local data:float +lbl_1_bss_640 = .bss:0x00000640; // type:object size:0x4 scope:local data:float +lbl_1_bss_644 = .bss:0x00000644; // type:object size:0x4 scope:local data:float +lbl_1_bss_648 = .bss:0x00000648; // type:object size:0xC scope:local data:4byte +lbl_1_bss_654 = .bss:0x00000654; // type:object size:0xC scope:local data:float +lbl_1_bss_660 = .bss:0x00000660; // type:object size:0xC scope:local data:float +lbl_1_bss_66C = .bss:0x0000066C; // type:object size:0x4 scope:local data:float +lbl_1_bss_670 = .bss:0x00000670; // type:object size:0x4 scope:local data:float +lbl_1_bss_674 = .bss:0x00000674; // type:object size:0x4 scope:local data:float +lbl_1_bss_678 = .bss:0x00000678; // type:object size:0x30 scope:local +lbl_1_bss_6A8 = .bss:0x000006A8; // type:object size:0x4 scope:local data:float +lbl_1_bss_6AC = .bss:0x000006AC; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_6AE = .bss:0x000006AE; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_6B0 = .bss:0x000006B0; // type:object size:0x1 scope:local data:byte +lbl_1_bss_6B1 = .bss:0x000006B1; // type:object size:0x1 scope:local data:byte +lbl_1_bss_6B2 = .bss:0x000006B2; // type:object size:0x1 scope:local data:byte +lbl_1_bss_6B3 = .bss:0x000006B3; // type:object size:0x1 scope:local data:byte +lbl_1_bss_6B4 = .bss:0x000006B4; // type:object size:0x1 scope:local data:byte +lbl_1_bss_6B6 = .bss:0x000006B6; // type:object size:0xA scope:local data:2byte +lbl_1_bss_6C0 = .bss:0x000006C0; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_6C4 = .bss:0x000006C4; // type:object size:0x42 data:2byte lbl_1_bss_708 = .bss:0x00000708; // type:object size:0x2 data:2byte lbl_1_bss_70C = .bss:0x0000070C; // type:object size:0x4 data:4byte lbl_1_bss_710 = .bss:0x00000710; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index 12daf4ad..ef010ff3 100644 --- a/configure.py +++ b/configure.py @@ -1084,7 +1084,7 @@ config.libs = [ Rel('w01Dll', objects = { Object(Matching, "REL/board_executor.c"), - Object(NonMatching, "REL/w01Dll/main.c"), + Object(Matching, "REL/w01Dll/main.c"), Object(NonMatching, "REL/w01Dll/mg_coin.c"), Object(NonMatching, "REL/w01Dll/mg_item.c"), } diff --git a/include/REL/option.h b/include/REL/option.h index e8ff30b5..8334ff77 100755 --- a/include/REL/option.h +++ b/include/REL/option.h @@ -1,3 +1,6 @@ +#ifndef REL_OPTION_H +#define REL_OPTION_H + #include "game/object.h" #include "dolphin/types.h" @@ -78,3 +81,5 @@ extern omObjData *lbl_1_bss_28; extern omObjData *lbl_1_bss_30; extern omObjData *lbl_1_bss_38; extern omObjData *lbl_1_bss_40; + +#endif diff --git a/include/REL/w01Dll.h b/include/REL/w01Dll.h new file mode 100755 index 00000000..a2a3af3f --- /dev/null +++ b/include/REL/w01Dll.h @@ -0,0 +1,22 @@ +#ifndef REL_W01_H +#define REL_W01_H + +#include "dolphin/types.h" + +typedef struct { + /* 0x00 */ struct { + u8 unk00_field0 : 1; + }; + /* 0x01 */ s8 unk01[2]; +} UnkBoardDataStruct; // Size unknown + +extern void fn_1_9D00(s32 arg0); +extern void fn_1_9DD8(void); +extern void fn_1_D740(s16 *arg0); +extern void fn_1_DD84(void); +extern void fn_1_DE94(void); + +extern s16 lbl_1_bss_6C4[33]; +extern UnkBoardDataStruct *lbl_1_bss_0; + +#endif diff --git a/include/game/board/main.h b/include/game/board/main.h index 80c2595f..ce7bdef5 100644 --- a/include/game/board/main.h +++ b/include/game/board/main.h @@ -106,7 +106,6 @@ void BoardCameraOffsetSet(float x, float y, float z); void BoardCameraTargetPlayerSet(s32 player); void BoardCameraTargetModelSet(s16 model); void BoardCameraTargetSpaceSet(s32 space); -void BoardCameraPosCalcFuncSet(BoardCameraPosCalcFunc func); void BoardCameraQuakeSet(s32 duration, float strength); void BoardCameraQuakeReset(); void BoardCameraTargetSet(float x, float y, float z); diff --git a/include/game/board/player.h b/include/game/board/player.h index 779c5668..5fef2c61 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -146,7 +146,6 @@ void BoardBowserSuitMotionSetWait(void); void BoardBowserSuitPlayerModelKill(void); void BoardDiceDigit2DShowSet(s32); s32 BoardPlayerMotBlendCheck(s32); -void BoardPlayerMoveAwayStartCurr(s32, s32); void BoardBowserSuitMotionSetWalk(void); s16 BoardBowserSuitModelGet(void); diff --git a/include/game/board/space.h b/include/game/board/space.h index d361da39..70ed236f 100644 --- a/include/game/board/space.h +++ b/include/game/board/space.h @@ -49,6 +49,7 @@ s32 BoardSpaceStarGetCurr(void); s32 BoardSpaceStarCheck(s32 index); void BoardSpaceLandExec(s32 player, s32 space); void BoardSpaceBlockPosSet(void); +void BoardSpaceInit(s32 data_num); extern s16 boardSpaceStarTbl[8]; diff --git a/src/REL/w01Dll/main.c b/src/REL/w01Dll/main.c new file mode 100755 index 00000000..1737da2e --- /dev/null +++ b/src/REL/w01Dll/main.c @@ -0,0 +1,2564 @@ +#include "REL/w01Dll.h" +#include "REL/board_executor.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/object.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/window.h" +#include "game/wipe.h" +#include "game/board/audio.h" +#include "game/board/boo_house.h" +#include "game/board/com.h" +#include "game/board/lottery.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/shop.h" +#include "game/board/space.h" +#include "game/board/star.h" +#include "game/board/ui.h" +#include "game/board/view.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "math.h" + +typedef struct { + /* 0x00 */ Vec unk00; + /* 0x0C */ Vec unk0C; + /* 0x18 */ Vec unk18; + /* 0x24 */ s32 unk24; +} UnkW01Struct; // Size 0x28 + +typedef struct { + struct { + u8 unk00_field0 : 1; + }; +} Bss10Work; + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 3; + u8 unk00_field2 : 1; + u8 unk00_field3 : 1; + }; + u8 unk01; + u8 unk02; + char unk03[1]; + s16 unk04; + char unk06[2]; + float unk08; +} Bss18Work; + +typedef struct { + /* 0x00 */ s8 unk00; + /* 0x01 */ s8 unk01; + /* 0x02 */ s16 unk02; + /* 0x04 */ s16 unk04; + /* 0x06 */ s16 unk06; + /* 0x08 */ float unk08; + /* 0x0C */ char unk0C[4]; + /* 0x10 */ float unk10; + /* 0x14 */ Vec unk14; + /* 0x20 */ Mtx unk20; +} BssCData; // Size 0x50 + +typedef struct { + struct { + u8 unk00_field0 : 1; + }; + s8 unk01; + char unk02[2]; + BssCData *unk04; +} BssCWork; + +typedef struct { + /* 0x00 */ s16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ float unk04; + /* 0x08 */ Vec unk08; + /* 0x14 */ Vec unk14; +} Bss20Data; // Size 0x20 + +typedef struct { + struct { + u8 unk00_field0 : 1; + }; + u8 unk01; + char unk02[2]; + Bss20Data *unk04; +} Bss20Work; + +static void fn_1_730(void); +static void fn_1_774(void); +static s32 fn_1_778(void); +static s32 fn_1_814(void); +static void fn_1_9E8(void); +static void fn_1_D00(void); +static void fn_1_D04(void); +static void fn_1_1254(void); +static void fn_1_128C(void); +static void fn_1_130C(void); +static s32 fn_1_157C(void); +static void fn_1_1670(void); +static void fn_1_1700(void); +static void fn_1_1990(void); +static void fn_1_1AD8(BoardCameraData *camera); +static void fn_1_1B3C(void); +static void fn_1_1EE4(void); +static void fn_1_1F2C(omObjData *arg0); +static void fn_1_1FA4(void); +static float fn_1_2524(void); +static void fn_1_276C(void); +static void fn_1_2F18(void); +static void fn_1_3350(void); +static void fn_1_3514(s32 arg0); +static void fn_1_35B4(s32 arg0); +static void fn_1_3624(void); +static void fn_1_45F4(void); +static void fn_1_4774(void); +static void fn_1_4864(void); +static s32 fn_1_48B4(void); +static void fn_1_4E14(void); +static void fn_1_4FA8(void); +static void fn_1_4FD8(void); +static void fn_1_50D4(void); +static void fn_1_53B8(void); +static void fn_1_543C(void); +static void fn_1_5694(s32 arg0); +static void fn_1_586C(s32 arg0, s32 arg1); +static void fn_1_592C(void); +static void fn_1_5B2C(void); +static void fn_1_5B40(void); +static BOOL fn_1_5CD0(void); +static void fn_1_5D08(void); +static void fn_1_6098(omObjData *arg0); +static void fn_1_6194(Bss18Work *arg0, omObjData *arg1); +static void fn_1_63F0(Bss18Work *arg0, omObjData *arg1); +static void fn_1_6A14(Bss18Work *arg0, omObjData *arg1); +static void fn_1_6BC0(Bss18Work *arg0, omObjData *arg1); +static void fn_1_6FB4(Bss18Work *arg0, omObjData *arg1); +static void fn_1_7528(s32 arg0, s32 arg1); +static void fn_1_77EC(s32 arg0, s32 arg1); +static void fn_1_7894(void); +static void fn_1_7A64(void); +static void fn_1_852C(void); +static void fn_1_87AC(void); +static void fn_1_87E0(omObjData *arg0); +static void fn_1_8988(BssCData *arg0, omObjData *arg1); +static void fn_1_8A50(BssCData *arg0, omObjData *arg1); +static void fn_1_8B6C(BssCData *arg0, omObjData *arg1); +static void fn_1_8DDC(BssCData *arg0, omObjData *arg1); +static void fn_1_918C(BssCData *arg0, omObjData *arg1); +static void fn_1_927C(BssCData *arg0, omObjData *arg1); +static void fn_1_932C(BssCData *arg0); +static s32 fn_1_94A8(BssCData *arg0); +static void fn_1_95F4(BssCData *arg0); +static void fn_1_97F4(void); +static void fn_1_98EC(void); +static void fn_1_9920(omObjData *arg0); +static void fn_1_9A24(Bss20Work *arg0); +static void fn_1_9BBC(Bss20Work *arg0); + +s16 lbl_1_bss_6C4[33]; +static s32 *lbl_1_bss_6C0; +static s16 lbl_1_bss_6B6[5]; +static s8 lbl_1_bss_6B4; +static s8 lbl_1_bss_6B3; +static s8 lbl_1_bss_6B2; +static s8 lbl_1_bss_6B1; +static s8 lbl_1_bss_6B0; +static s16 lbl_1_bss_6AE; +static s16 lbl_1_bss_6AC; +static float lbl_1_bss_6A8; +static Mtx lbl_1_bss_678; +static float lbl_1_bss_674; +static float lbl_1_bss_670; +static float lbl_1_bss_66C; +static Vec lbl_1_bss_660; +static Vec lbl_1_bss_654; +static Vec lbl_1_bss_648; +static float lbl_1_bss_644; +static float lbl_1_bss_640; +static float lbl_1_bss_63C; +static Vec lbl_1_bss_630; +static Vec lbl_1_bss_624; +static Vec lbl_1_bss_618; +static s8 lbl_1_bss_600[24]; +static s16 lbl_1_bss_5D0[24]; +static s16 lbl_1_bss_5CC[2]; +static s8 lbl_1_bss_2C[1440]; +static s8 lbl_1_bss_2A[2]; // padding +static s8 lbl_1_bss_29; +static s8 lbl_1_bss_28; +static s16 lbl_1_bss_26; +static s16 lbl_1_bss_24; +static omObjData *lbl_1_bss_20; +static s8 lbl_1_bss_1C; +static omObjData *lbl_1_bss_18; +static Process *lbl_1_bss_14; +static omObjData *lbl_1_bss_10; +static omObjData *lbl_1_bss_C; +static Process *lbl_1_bss_8; +static Process *lbl_1_bss_4; +UnkBoardDataStruct *lbl_1_bss_0; + +static UnkW01Struct lbl_1_data_0[33] = { + { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 8) }, + { { 0.0f, 700.0f, 300.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 9) }, + { { -2025.0f, 100.0f, 1950.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, + { { 1725.0f, 200.0f, -1650.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, + { { 2757.974f, 200.0f, -536.781f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, + { { -2750.0f, 300.0f, -2150.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 12) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 13) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 14) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 15) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 17) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 18) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 18) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 21) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 22) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 23) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 24) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 25) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 26) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 27) }, + { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 3) }, + { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 5) }, + { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 3) }, + { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 5) } +}; + +static s16 lbl_1_data_528 = -1; +static s16 lbl_1_data_52A = -1; +static s16 lbl_1_data_52C = -1; +static s16 lbl_1_data_52E = -1; +static s16 lbl_1_data_530 = -1; + +static s32 lbl_1_data_534[] = { + DATA_MAKE_NUM(DATADIR_W01, 30), + -1 +}; + +static s32 lbl_1_data_53C[] = { + DATA_MAKE_NUM(DATADIR_BGUEST, 1), + -1 +}; + +void BoardCreate(void) { + UnkW01Struct *temp_r30; + s32 sp8; + s32 i; + + sp8 = GWBoardGet(); + lbl_1_bss_0 = (UnkBoardDataStruct*) GWSystem.board_data; + BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W01, 0)); + lbl_1_data_528 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 1), NULL, 0); + fn_8006DDE8(lbl_1_data_528, -1.0f); + BoardModelPosSet(lbl_1_data_528, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_528, 0, 0x40000001); + lbl_1_data_52A = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 2), NULL, 0); + fn_8006DDE8(lbl_1_data_52A, -1.0f); + BoardModelPosSet(lbl_1_data_52A, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_52A, 0, 0x40000001); + lbl_1_data_52C = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 29), lbl_1_data_534, 0); + BoardModelPosSet(lbl_1_data_52C, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_52C, 1, 0x40000001); + lbl_1_data_52E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 0), lbl_1_data_53C, 0); + BoardModelPosSet(lbl_1_data_52E, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_52E, 1, 0x40000001); + lbl_1_data_530 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 11), NULL, 0); + BoardModelMotionStart(lbl_1_data_530, 0, 0x40000001); + BoardLightHookSet(fn_1_730, fn_1_774); + for (i = 0; i < 33; i++) { + temp_r30 = &lbl_1_data_0[i]; + if (temp_r30->unk24 != -1) { + if (i == 2 || i == 3 || i == 4 || i == 5) { + lbl_1_bss_6C0 = lbl_1_data_53C; + } else { + lbl_1_bss_6C0 = NULL; + } + lbl_1_bss_6C4[i] = BoardModelCreate(temp_r30->unk24, lbl_1_bss_6C0, 0); + BoardModelPosSetV(lbl_1_bss_6C4[i], &temp_r30->unk00); + BoardModelRotSetV(lbl_1_bss_6C4[i], &temp_r30->unk0C); + BoardModelScaleSetV(lbl_1_bss_6C4[i], &temp_r30->unk18); + BoardModelVisibilitySet(lbl_1_bss_6C4[i], 1); + } + } + BoardModelMotionStart(lbl_1_bss_6C4[2], 1, 0x40000001); + BoardModelMotionStart(lbl_1_bss_6C4[3], 1, 0x40000001); + BoardModelMotionStart(lbl_1_bss_6C4[4], 1, 0x40000001); + BoardModelMotionStart(lbl_1_bss_6C4[5], 1, 0x40000001); + fn_1_543C(); + fn_1_9E8(); + fn_1_1700(); + BoardSpaceWalkEventFuncSet(fn_1_814); + BoardSpaceWalkMiniEventFuncSet(fn_1_157C); + BoardSpaceLandEventFuncSet(fn_1_778); + BoardStarHostSet(lbl_1_data_52C); + BoardBooHouseHostSet(lbl_1_data_52E); + BoardLotteryHostSet(lbl_1_data_52E); + BoardShopHostSet(lbl_1_data_52E); + BoardJunctionMaskSet(0xC000); + BoardJunctionMaskSet(0x3000); +} + +void BoardDestroy(void) { + s32 i; + + fn_1_4864(); + fn_1_D00(); + for (i = 0; i < 33; i++) { + if (lbl_1_bss_6C4[i] != 0) { + BoardModelKill(lbl_1_bss_6C4[i]); + lbl_1_bss_6C4[i] = 0; + } + } + if (lbl_1_data_530 != -1) { + BoardModelKill(lbl_1_data_530); + lbl_1_data_530 = -1; + } + if (lbl_1_data_52E != -1) { + BoardModelKill(lbl_1_data_52E); + lbl_1_data_52E = -1; + } + if (lbl_1_data_52C != -1) { + BoardModelKill(lbl_1_data_52C); + lbl_1_data_52C = -1; + } + if (lbl_1_data_528 != -1) { + BoardModelKill(lbl_1_data_528); + lbl_1_data_528 = -1; + } + if (lbl_1_data_52A != -1) { + BoardModelKill(lbl_1_data_52A); + lbl_1_data_52A = -1; + } + BoardSpaceDestroy(); +} + +static void fn_1_730(void) { + s16 var_r31; + + var_r31 = BoardModelIDGet(lbl_1_data_528); + Hu3DModelLightInfoSet(var_r31, 1); +} + +static void fn_1_774(void) { +} + +static s32 fn_1_778(void) { + s32 temp_r31; + s32 temp_r30; + u32 temp_r29; + + temp_r31 = GWSystem.player_curr; + temp_r30 = GWPlayer[temp_r31].space_curr; + temp_r29 = BoardSpaceFlagGet(0, temp_r30); + if (temp_r29 & 0x800) { + fn_1_77EC(temp_r31, temp_r30); + } else if (temp_r29 & 0x400) { + fn_1_7528(temp_r31, temp_r30); + } +} + +static s32 fn_1_814(void) { + s32 temp_r27; + s32 var_r30; + s32 var_r29; + s32 var_r26; + BoardSpace *temp_r31; + BoardSpace *temp_r28; + + temp_r27 = GWSystem.player_curr; + temp_r31 = BoardSpaceGet(0, GWPlayer[temp_r27].space_curr); + if (temp_r31->flag & 0x3000) { + if (BoardPlayerSizeGet(temp_r27) == 2 || GWPlayer[temp_r27].bowser_suit) { + return 0; + } + if (temp_r31->flag & 0x2000) { + if (lbl_1_bss_0->unk00_field0 != 0) { + return 0; + } + } else if (temp_r31->flag & 0x1000) { + if (lbl_1_bss_0->unk00_field0 != 1) { + return 0; + } + } + fn_1_4FD8(); + return 1; + } + var_r29 = -1; + for (var_r30 = 0; var_r30 < temp_r31->link_cnt; var_r30++) { + if (temp_r31->link[var_r30] != -1) { + temp_r28 = BoardSpaceGet(0, temp_r31->link[var_r30]); + if (temp_r28->flag & 0x8000) { + var_r29 = 0; + var_r26 = temp_r31->link[var_r30]; + break; + } else if (temp_r28->flag & 0x4000) { + var_r29 = 1; + var_r26 = temp_r31->link[var_r30]; + break; + } + } + } + if (var_r29 != -1) { + fn_1_586C(var_r29, var_r26); + return 1; + } + return 0; +} + +static void fn_1_9E8(void) { + BoardModelVisibilitySet(lbl_1_bss_6C4[6], 1); + BoardModelVisibilitySet(lbl_1_bss_6C4[7], 0); + BoardModelVisibilitySet(lbl_1_bss_6C4[8], 0); + BoardModelVisibilitySet(lbl_1_bss_6C4[9], 0); + BoardModelVisibilitySet(lbl_1_bss_6C4[10], 0); + BoardModelVisibilitySet(lbl_1_bss_6C4[11], 0); + BoardModelVisibilitySet(lbl_1_bss_6C4[12], 0); + BoardModelVisibilitySet(lbl_1_bss_6C4[13], 0); + BoardModelVisibilitySet(lbl_1_bss_6C4[14], 1); + BoardModelVisibilitySet(lbl_1_bss_6C4[15], 1); + BoardModelMotionStart(lbl_1_bss_6C4[6], 0, 0); + BoardModelMotionSpeedSet(lbl_1_bss_6C4[6], 0.0f); + BoardModelMotionStart(lbl_1_bss_6C4[14], 0, 0x40000001); + BoardModelMotionStart(lbl_1_bss_6C4[15], 0, 0x40000001); + BoardModelHookSet(lbl_1_bss_6C4[6], "amida_ban_07-sirenr", lbl_1_bss_6C4[14]); + BoardModelHookSet(lbl_1_bss_6C4[6], "amida_ban_07-sirenl", lbl_1_bss_6C4[15]); + BoardModelVisibilitySet(lbl_1_bss_6C4[16], 1); + BoardModelVisibilitySet(lbl_1_bss_6C4[17], 1); + BoardModelVisibilitySet(lbl_1_bss_6C4[18], 1); + BoardModelVisibilitySet(lbl_1_bss_6C4[19], 0); + BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0); + BoardModelVisibilitySet(lbl_1_bss_6C4[21], 1); + BoardModelVisibilitySet(lbl_1_bss_6C4[22], 1); + BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0); + BoardModelMotionSpeedSet(lbl_1_bss_6C4[21], 0.0f); + BoardModelMotionStart(lbl_1_bss_6C4[18], 0, 0); + BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], 0.0f); + BoardModelExistDupe(lbl_1_bss_6C4[16], 0); + BoardModelMotionStart(lbl_1_bss_6C4[16], 0, 0x40000001); + BoardModelMotionStart(lbl_1_bss_6C4[17], 0, 0x40000001); + BoardModelMotionStart(lbl_1_bss_6C4[22], 0, 0x40000001); + BoardModelHookSet(lbl_1_bss_6C4[21], "m_goraund_01-flag1", lbl_1_bss_6C4[22]); +} + +static void fn_1_D00(void) { +} + +static void fn_1_D04(void) { + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + Vec spC; + s8 sp8[4]; + s32 temp_r28; + s32 temp_r3; + s32 var_r26; + s32 var_r25; + s32 temp_r30; + s32 i; + s32 j; + + temp_r30 = GWSystem.player_curr; + var_r26 = 0; + if (BoardPlayerItemCount(temp_r30) == 3) { + BoardWinCreate(0, MAKE_MESSID(10, 9), 0); + BoardWinWait(); + BoardWinKill(); + HuPrcEnd(); + } + lbl_1_bss_6B6[0] = 0; + i = 1; + while (i < 4) { + lbl_1_bss_6B6[i] = frandmod(14); + if (lbl_1_bss_6B6[i] != 10 && lbl_1_bss_6B6[i] != 13) { + for (j = 0; j < i; j++) { + if (lbl_1_bss_6B6[i] == lbl_1_bss_6B6[j]) { + lbl_1_bss_6B6[i] = -1; + } + } + if (lbl_1_bss_6B6[i] != -1) { + i++; + } + } + } + fn_1_D740(lbl_1_bss_6B6); + for (i = 0; i < 4; i++) { + sp8[i] = lbl_1_bss_6B6[i]; + } + if (BoardComPreferItemGet(temp_r30, sp8, 4) != -1) { + var_r26 = 1; + } + HuAudFXPlay(0x40D); + HuAudFXPlay(0x40E); + BoardModelAttrReset(lbl_1_bss_6C4[21], 0x40000004); + BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0); + temp_r28 = GWPlayer[temp_r30].space_curr; + temp_r3 = BoardSpaceLinkFlagSearch(0, temp_r28, 0x02000000); + BoardSpacePosGet(0, temp_r3, &sp3C); + sp30.x = 150.0f; + sp30.y = 0.0f; + sp30.z = 0.0f; + sp24.x = -45.0f; + sp24.y = 0.0f; + sp24.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_6C4[4], &sp24, &sp30, 1880.0f, -1.0f, 21); + BoardCameraMotionWait(); + BoardWinCreateChoice(2, MAKE_MESSID(10, 0), 0, 0); + if (GWPlayer[temp_r30].com) { + if (var_r26 != 0) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + BoardWinKill(); + var_r25 = BoardWinChoiceGet(); + if (var_r25 != 0) { + BoardWinCreate(2, MAKE_MESSID(10, 4), 0); + BoardWinWait(); + BoardWinKill(); + BoardMGExit(); + HuAudFXPlay(0x40F); + BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0x40000004); + while (!BoardModelMotionEndCheck(lbl_1_bss_6C4[21])) { + HuPrcVSleep(); + } + BoardModelMotionSpeedSet(lbl_1_bss_6C4[21], 0.0f); + BoardModelAttrReset(lbl_1_bss_6C4[21], 0x40000004); + while (BoardMGDoneFlagGet() != 1) { + HuPrcVSleep(); + } + BoardMGDoneFlagSet(0); + fn_1_DD84(); + HuPrcEnd(); + } + BoardPlayerMoveBetween(temp_r30, temp_r28, temp_r3); + while (GWPlayer[temp_r30].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r30, 1, 0x40000001); + sp18.x = 0.0f; + sp18.y = 0.0f; + sp18.z = 0.0f; + spC.x = -45.0f; + spC.y = 0.0f; + spC.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_6C4[21], &spC, &sp18, 1200.0f, -1.0f, 21); + BoardCameraMotionWait(); + fn_1_DE94(); + while (BoardEventFlagGet() != 0) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + BoardAudSeqPause(0, 0, 1000); + while (GWPlayer[temp_r30].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r30, 1, 0x40000001); + HuPrcEnd(); +} + +static void fn_1_1254(void) { + BoardWinKill(); + CharModelDataClose(-1); + lbl_1_bss_4 = NULL; +} + +static void fn_1_128C(void) { + lbl_1_bss_4 = HuPrcChildCreate(fn_1_D04, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_4, fn_1_1254); + while (lbl_1_bss_4) { + HuPrcVSleep(); + } +} + +static void fn_1_130C(void) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 temp_r31; + s32 var_r28; + s32 temp_r30; + s32 temp_r3; + + temp_r31 = GWSystem.player_curr; + BoardWinCreateChoice(2, MAKE_MESSID(11, 0), 0, 0); + if (GWPlayer[temp_r31].com) { + BoardComKeySetLeft(); + } + BoardWinWait(); + BoardWinKill(); + var_r28 = BoardWinChoiceGet(); + if (var_r28 != 0) { + BoardWinCreate(2, MAKE_MESSID(11, 4), 0); + BoardWinWait(); + BoardWinKill(); + BoardMGExit(); + return; + } + BoardModelMotionStart(lbl_1_bss_6C4[6], 0, 0); + sp14.x = 0.0f; + sp14.y = 0.0f; + sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 170.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_6C4[6], &sp14, &sp8, 1200.0f, 25.0f, 21); + temp_r30 = GWPlayer[temp_r31].space_curr; + temp_r3 = BoardSpaceLinkFlagSearch(0, temp_r30, 0x02000000); + BoardSpacePosGet(0, temp_r3, &sp20); + BoardPlayerMoveBetween(temp_r31, temp_r30, temp_r3); + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); + BoardAudSeqPause(0, 1, 1000); + fn_1_9DD8(); + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + while (BoardEventFlagGet() != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + while (GWPlayer[temp_r31].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); +} + +// TODO: consider moving to gamework_data.h or board/player.h. +static inline s16 GWPlayerCurrSpaceCurrGet(void) { + return GWPlayer[GWSystem.player_curr].space_curr; +} + +static s32 fn_1_157C(void) { + s32 temp_r31; + + temp_r31 = BoardSpaceFlagGet(0, GWPlayerCurrSpaceCurrGet()) & 0x600000; + BoardDiceDigit2DShowSet(0); + if (temp_r31 == 0x200000) { + fn_1_130C(); + } else if (temp_r31 == 0x400000) { + fn_1_128C(); + } + BoardDiceDigit2DShowSet(1); +} + +static void fn_1_1670(void) { + if (lbl_1_bss_0->unk00_field0 == 0) { + BoardModelVisibilitySet(lbl_1_bss_6C4[2], 1); + BoardModelVisibilitySet(lbl_1_bss_6C4[3], 0); + } else { + BoardModelVisibilitySet(lbl_1_bss_6C4[2], 0); + BoardModelVisibilitySet(lbl_1_bss_6C4[3], 1); + } +} + +static void fn_1_1700(void) { + Vec sp8; + Mtx sp14; + + lbl_1_bss_6B1 = 0; + lbl_1_bss_6AE = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 10), NULL, 0); + lbl_1_bss_644 = BoardModelMotionMaxTimeGet(lbl_1_bss_6AE); + BoardModelVisibilitySet(lbl_1_bss_6AE, 0); + memset(lbl_1_bss_2C, 0, sizeof(lbl_1_bss_2C)); + if (BoardSpaceRead(1, DATA_MAKE_NUM(DATADIR_W01, 6)) == 0) { + if (lbl_1_bss_0->unk00_field0 == 0) { + BoardSpaceFlagPosGet(1, 0x2000, &sp8); + BoardModelMotionTimeSet(lbl_1_bss_6AE, lbl_1_bss_644); + lbl_1_bss_63C = -90.0f; + } else { + BoardSpaceFlagPosGet(1, 0x1000, &sp8); + BoardModelMotionTimeSet(lbl_1_bss_6AE, 0.0f); + lbl_1_bss_63C = 90.0f; + } + lbl_1_bss_654 = sp8; + BoardModelPosSetV(lbl_1_bss_6C4[0], &sp8); + BoardModelRotSet(lbl_1_bss_6C4[0], 0.0f, lbl_1_bss_63C, 0.0f); + BoardModelExistDupe(lbl_1_bss_6C4[0], 1); + BoardModelExistDupe(lbl_1_bss_6C4[1], 1); + fn_8006DDE8(lbl_1_bss_6C4[1], 500.0f); + PSMTXIdentity(sp14); + BoardModelMtxSet(lbl_1_bss_6C4[0], &sp14); + fn_1_1670(); + } +} + +static void fn_1_1990(void) { + Vec sp10; + float var_f31; + s32 var_r29; + s32 var_r30; + s16 sp8[3]; + BoardSpace *temp_r31; + BoardSpace *temp_r3; + + var_r29 = lbl_1_bss_6AC; + var_f31 = 0.0f; + while (TRUE) { + temp_r31 = BoardSpaceGet(1, var_r29); + if (lbl_1_bss_0->unk00_field0 == 0) { + var_r30 = temp_r31->link[0]; + } else { + BoardSpaceLinkTargetListGet(1, var_r29, sp8); + var_r30 = sp8[0]; + } + if (var_r30 == 0) { + break; + } + temp_r3 = BoardSpaceGet(1, var_r30); + if (!temp_r3) { + temp_r3 = temp_r31; + break; + } + PSVECSubtract(&temp_r3->pos, &temp_r31->pos, &sp10); + var_f31 += PSVECMag(&sp10); + if (var_f31 >= lbl_1_bss_640) { + break; + } + var_r29 = var_r30; + } + if (temp_r31->flag & 8) { + lbl_1_bss_6B3 = 1; + } else { + lbl_1_bss_6B3 = 0; + } +} + +static void fn_1_1AD8(BoardCameraData *camera) { + camera->pos = lbl_1_bss_630; + camera->up = lbl_1_bss_624; + camera->target = lbl_1_bss_618; +} + +static void fn_1_1B3C(void) { + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + Vec spC; + Mtx sp48; + + PSVECSubtract(&lbl_1_bss_654, &lbl_1_bss_648, &sp30); + if (lbl_1_bss_6B3 != 0) { + BoardModelPosGet(lbl_1_bss_6C4[1], &sp3C); + PSVECSubtract(&sp3C, &lbl_1_bss_654, &sp18); + PSVECNormalize(&sp18, &sp18); + sp24 = lbl_1_bss_648; + spC = lbl_1_bss_654; + BoardMTXCalcLookAt(sp48, &spC, &sp18, &sp24); + PSMTXTranspose(sp48, lbl_1_bss_678); + PSMTXRotRad(sp48, 'z', MTXDegToRad(lbl_1_bss_660.z)); + PSMTXConcat(lbl_1_bss_678, sp48, lbl_1_bss_678); + } else { + if (sp30.z != 0.0f || sp30.x != 0.0f) { + lbl_1_bss_660.y = 180.0 * (atan2(sp30.x, sp30.z) / M_PI); + lbl_1_bss_660.x = -(180.0 * (atan2(sp30.y, sqrtf(sp30.x * sp30.x + sp30.z * sp30.z)) / M_PI)); + } else { + lbl_1_bss_660.x = lbl_1_bss_660.y = 0.0f; + } + PSMTXRotRad(lbl_1_bss_678, 'z', MTXDegToRad(lbl_1_bss_660.z)); + PSMTXRotRad(sp48, 'x', MTXDegToRad(lbl_1_bss_660.x)); + PSMTXConcat(sp48, lbl_1_bss_678, lbl_1_bss_678); + PSMTXRotRad(sp48, 'y', MTXDegToRad(lbl_1_bss_660.y)); + PSMTXConcat(sp48, lbl_1_bss_678, lbl_1_bss_678); + } +} + +static void fn_1_1EE4(void) { + Bss10Work *temp_r31; + + if (lbl_1_bss_10) { + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_10, Bss10Work); + temp_r31->unk00_field0 = 1; + } +} + +static void fn_1_1F2C(omObjData *arg0) { + Bss10Work *temp_r31 = OM_GET_WORK_PTR(arg0, Bss10Work); + + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + omDelObjEx(HuPrcCurrentGet(), arg0); + lbl_1_bss_10 = NULL; + return; + } + fn_1_1FA4(); +} + +static void fn_1_1FA4(void) { + Vec sp18; + Vec spC; + float temp_f28; + float temp_f29; + float var_f27; + + spC.x = lbl_1_bss_648.x; + spC.y = lbl_1_bss_648.y + 200.0f; + spC.z = lbl_1_bss_648.z; + PSVECSubtract(&spC, &lbl_1_bss_618, &spC); + PSVECScale(&spC, &spC, 0.08f); + PSVECAdd(&spC, &lbl_1_bss_618, &lbl_1_bss_618); + PSVECSubtract(&lbl_1_bss_654, &lbl_1_bss_648, &spC); + if (spC.x != 0.0f || spC.z != 0.0f) { + temp_f29 = atan2f(spC.y, sqrtf(spC.x * spC.x + spC.z * spC.z)); + temp_f28 = atan2f(-spC.x, -spC.z); + } else { + temp_f29 = temp_f28 = 0.0f; + return; + } + temp_f29 += -0.27925268f; + if (lbl_1_bss_6B3 != 0) { + if (lbl_1_bss_66C < 0.08f) { + lbl_1_bss_66C -= 0.00033333333f; + } + BoardModelPosGet(lbl_1_bss_6C4[1], &sp18); + if (lbl_1_bss_0->unk00_field0 == 0) { + var_f27 = -2500.0f; + } else { + var_f27 = 2500.0f; + } + sp18.x = sp18.x + var_f27 * sin(1.4137166738510132); // 81 * M_PI / 180.0 + sp18.y = sp18.y + -150.0f; + sp18.z = sp18.z + var_f27 * cos(1.4137166738510132); // 81 * M_PI / 180.0 + PSVECSubtract(&sp18, &lbl_1_bss_630, &spC); + PSVECScale(&spC, &spC, lbl_1_bss_66C); + PSVECAdd(&spC, &lbl_1_bss_630, &lbl_1_bss_630); + } else { + if (lbl_1_bss_66C < 0.08f) { + lbl_1_bss_66C += 0.00066666666f; + } + spC.x = 400.0 * (sin(temp_f28) * cos(temp_f29)); + spC.y = 400.0 * -sin(temp_f29); + spC.z = 400.0 * (cos(temp_f28) * cos(temp_f29)); + PSVECAdd(&lbl_1_bss_618, &spC, &spC); + PSVECSubtract(&spC, &lbl_1_bss_630, &spC); + PSVECScale(&spC, &spC, lbl_1_bss_66C); + PSVECAdd(&spC, &lbl_1_bss_630, &lbl_1_bss_630); + } +} + +static float fn_1_2524(void) { + Vec sp24; + Vec sp18; + Vec spC; + float var_f30; + s16 sp8; + s32 var_r29; + s32 i; + + sp24 = lbl_1_bss_654; + if (GWPlayer[lbl_1_bss_6B4].com) { + if (lbl_1_bss_6B3 != 0) { + return 0.0f; + } + for (i = 0; i < 24; i++) { + if (lbl_1_bss_600[i] == 0) { + BoardModelPosGet(lbl_1_bss_5D0[i], &sp18); + PSVECSubtract(&sp18, &sp24, &spC); + if (!(PSVECMag(&spC) > 400.0f)) { + break; + } + } + } + if (i == 24) { + return 0.0f; + } + PSVECSubtract(&sp18, &sp24, &spC); + var_f30 = 180.0 * (atan2(spC.x, spC.z) / M_PI); + if (var_f30 > 0.0f) { + var_f30 = 45.0f; + } else { + var_f30 = -45.0f; + } + } else { + var_r29 = GWPlayer[lbl_1_bss_6B4].port; + sp8 = HuPadStkX[var_r29]; + OSs16tof32(&sp8, &var_f30); + var_f30 = var_f30 * 0.625f; + } + return var_f30; +} + +static void fn_1_276C(void) { + Vec sp58; + Vec sp40; + Vec sp34; + Vec sp28; + Vec sp1C; + float temp_f26; + float var_f27; + Mtx sp70; + + fn_1_1B3C(); + if (lbl_1_bss_6B1 != 0) { + lbl_1_bss_660.z = 0.0f; + return; + } + var_f27 = fn_1_2524(); + BoardDAngleCalcRange(&lbl_1_bss_660.z, var_f27, 5.0f); + temp_f26 = 6.0f + 6.0f * (lbl_1_bss_660.z / 45.0f) - 1.0f; + if (lbl_1_bss_660.z > 22.5f) { + BoardPlayerMotionStart(lbl_1_bss_6B4, lbl_1_bss_5CC[1], 0); + BoardPlayerMotionTimeSet(lbl_1_bss_6B4, temp_f26); + } else if (lbl_1_bss_660.z < -22.5f) { + BoardPlayerMotionStart(lbl_1_bss_6B4, lbl_1_bss_5CC[1], 0); + BoardPlayerMotionTimeSet(lbl_1_bss_6B4, temp_f26); + } else { + BoardPlayerMotionShiftSet(lbl_1_bss_6B4, lbl_1_bss_5CC[0], 0.0f, 10.0f, 0x40000001); + } + fn_1_2F18(); +} + +static void fn_1_2F18(void) { + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + Vec spC; + float var_f29; + Mtx spD8; + Mtx spA8; + Mtx sp78; + Mtx sp48; + s32 i; + + if (lbl_1_bss_6B3 == 0) { + var_f29 = lbl_1_bss_660.z; + if (var_f29 > 180.0f) { + var_f29 -= 360.0f; + } + BoardModelPosGet(lbl_1_bss_6C4[0], &spC); + PSVECSubtract(&lbl_1_bss_654, &lbl_1_bss_648, &sp18); + if (sp18.z != 0.0f || sp18.x != 0.0f) { + sp24.y = 180.0 * (atan2(sp18.x, sp18.z) / M_PI); + sp24.x = -(180.0 * (atan2(sp18.y, sqrtf(sp18.x * sp18.x + sp18.z * sp18.z)) / M_PI)); + } else { + sp24.x = sp24.y = 0.0f; + } + PSMTXTrans(spD8, 0.0f, 180.0f, 0.0f); + PSMTXRotRad(spA8, 'x', MTXDegToRad(sp24.x)); + PSMTXRotRad(sp78, 'y', MTXDegToRad(sp24.y)); + PSMTXRotRad(sp48, 'z', MTXDegToRad(var_f29)); + PSMTXConcat(spA8, sp48, sp48); + PSMTXConcat(sp78, sp48, sp48); + PSMTXConcat(sp48, spD8, spD8); + sp30.x = spD8[0][3]; + sp30.y = spD8[1][3]; + sp30.z = spD8[2][3]; + PSVECAdd(&sp30, &spC, &sp30); + if (var_f29 < 27.000002f && var_f29 > -27.000002f) { + return; + } + for (i = 0; i < 24; i++) { + if (lbl_1_bss_600[i] == 0) { + BoardModelPosGet(lbl_1_bss_5D0[i], &sp3C); + if (BoardVecMaxDistXZCheck(&sp3C, &sp30, 180.0f)) { + CharModelLayerSetAll(2); + CharModelCoinEffectCreate(1, &sp3C); + BoardModelVisibilitySet(lbl_1_bss_5D0[i], 0); + BoardPlayerCoinsAdd(lbl_1_bss_6B4, 1); + HuAudFXPlay(7); + lbl_1_bss_600[i] = 1; + break; + } + } + } + } +} + +static s16 lbl_1_data_580 = -1; + +static void fn_1_3350(void) { + Vec sp8; + s16 temp_r3; + ModelData *temp_r30; + HsfObject *temp_r31; + + lbl_1_bss_674 += 0.002f; + if (lbl_1_bss_670 > 0.18f) { + lbl_1_bss_670 = 0.18f; + } else if (lbl_1_bss_670 < 0.18f) { + lbl_1_bss_670 += lbl_1_bss_674; + } + temp_r3 = BoardModelIDGet(lbl_1_bss_6AE); + temp_r30 = &Hu3DData[temp_r3]; + Hu3DMotionExec(temp_r3, temp_r30->unk_08, temp_r30->unk_64, 0); + temp_r31 = Hu3DModelObjPtrGet(temp_r3, "looppath-cube1"); + lbl_1_bss_648 = lbl_1_bss_654; + lbl_1_bss_654.x = temp_r31->data.curr.pos.x; + lbl_1_bss_654.y = temp_r31->data.curr.pos.y; + lbl_1_bss_654.z = temp_r31->data.curr.pos.z; + PSVECSubtract(&lbl_1_bss_648, &lbl_1_bss_654, &sp8); + lbl_1_bss_640 += PSVECMag(&sp8); +} + +static s32 lbl_1_data_594[8][2] = { + { DATA_MAKE_NUM(DATADIR_W01, 34), DATA_MAKE_NUM(DATADIR_W01, 42) }, + { DATA_MAKE_NUM(DATADIR_W01, 35), DATA_MAKE_NUM(DATADIR_W01, 43) }, + { DATA_MAKE_NUM(DATADIR_W01, 36), DATA_MAKE_NUM(DATADIR_W01, 44) }, + { DATA_MAKE_NUM(DATADIR_W01, 37), DATA_MAKE_NUM(DATADIR_W01, 45) }, + { DATA_MAKE_NUM(DATADIR_W01, 38), DATA_MAKE_NUM(DATADIR_W01, 46) }, + { DATA_MAKE_NUM(DATADIR_W01, 39), DATA_MAKE_NUM(DATADIR_W01, 47) }, + { DATA_MAKE_NUM(DATADIR_W01, 40), DATA_MAKE_NUM(DATADIR_W01, 48) }, + { DATA_MAKE_NUM(DATADIR_W01, 41), DATA_MAKE_NUM(DATADIR_W01, 49) } +}; + +static void fn_1_3514(s32 arg0) { + s32 temp_r30; + s32 i; + + temp_r30 = GWPlayer[arg0].character; + for (i = 0; i < 2; i++) { + lbl_1_bss_5CC[i] = BoardPlayerMotionCreate(arg0, lbl_1_data_594[temp_r30][i]); + } +} + +static void fn_1_35B4(s32 arg0) { + s32 i; + + for (i = 0; i < 2; i++) { + BoardPlayerMotionKill(arg0, lbl_1_bss_5CC[i]); + lbl_1_bss_5CC[i] = -1; + } +} + +static void fn_1_3624(void) { + Mtx sp48; + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + float temp_f28; + float var_f30; + float var_f29; + s32 temp_r19; + Bss10Work *temp_r18; + s16 sp10; + s16 var_r25; + s16 i; + + lbl_1_bss_674 = lbl_1_bss_670 = 0.0f; + lbl_1_bss_640 = 0.0f; + lbl_1_bss_660.x = 0.0f; + lbl_1_bss_660.y = 0.0f; + lbl_1_bss_660.z = 0.0f; + lbl_1_bss_6A8 = 0.0f; + lbl_1_bss_6B3 = 0; + lbl_1_bss_624.x = 0.0f; + lbl_1_bss_624.z = 0.0f; + lbl_1_bss_624.y = 1.0f; + lbl_1_bss_66C = 0.08f; + fn_1_3514(lbl_1_bss_6B4); + BoardPlayerMotionStart(lbl_1_bss_6B4, lbl_1_bss_5CC[0], 0x40000001); + BoardSpaceAttrSet(0, 1); + fn_1_97F4(); + BoardModelMotionStart(lbl_1_bss_6AE, 0, 0); + if (lbl_1_bss_0->unk00_field0 == 0) { + BoardModelMotionTimeSet(lbl_1_bss_6AE, lbl_1_bss_644); + lbl_1_bss_63C = -90.0f; + lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x2000, &sp3C); + var_r25 = BoardSpaceFlagSearch(0, 0x1000); + var_f30 = -1.0f; + } else { + BoardModelMotionTimeSet(lbl_1_bss_6AE, 0.0f); + lbl_1_bss_63C = 90.0f; + lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x1000, &sp3C); + var_r25 = BoardSpaceFlagSearch(0, 0x2000); + var_f30 = 1.0f; + } + lbl_1_bss_654 = sp3C; + lbl_1_bss_648 = lbl_1_bss_654; + BoardModelMotionSpeedSet(lbl_1_bss_6AE, lbl_1_bss_670); + BoardPlayerPosSetV(lbl_1_bss_6B4, &lbl_1_bss_654); + BoardCameraPosCalcFuncSet(fn_1_1AD8); + lbl_1_bss_10 = omAddObjEx(boardObjMan, 0x7E02, 0, 0, -1, fn_1_1F2C); + temp_r18 = OM_GET_WORK_PTR(lbl_1_bss_10, Bss10Work); + temp_r18->unk00_field0 = 0; + sp30.x = -40.0f; + sp30.z = 0.0f; + sp30.y = -lbl_1_bss_63C; + BoardCameraMotionStartEx(lbl_1_bss_6C4[0], &sp30, 0, 150.0f, -1.0f, 2); + BoardCameraMotionWait(); + BoardModelPosGet(lbl_1_bss_6C4[0], &lbl_1_bss_618); + lbl_1_bss_630.x = lbl_1_bss_618.x + 1000.0 * (sin(sp30.y * M_PI / 180.0) * cos(sp30.x * M_PI / 180.0)); + lbl_1_bss_630.y = lbl_1_bss_618.y + 1000.0 * -sin(sp30.x * M_PI / 180.0); + lbl_1_bss_630.z = lbl_1_bss_618.z + 1000.0 * (cos(sp30.y * M_PI / 180.0) * cos(sp30.x * M_PI / 180.0)); + PSMTXRotRad(lbl_1_bss_678, 'y', MTXDegToRad(lbl_1_bss_63C)); + BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); + BoardPlayerMtxSet(lbl_1_bss_6B4, &lbl_1_bss_678); + BoardModelRotSet(lbl_1_bss_6C4[0], 0.0f, 0.0f, 0.0f); + BoardPlayerRotSet(lbl_1_bss_6B4, 0.0f, 0.0f, 0.0f); + BoardPlayerExistCheck(lbl_1_bss_6B4, 0); + BoardMusStart(1, 0x10, 0x7F, 0); + fn_1_50D4(); + BoardStatusShowSetForce(lbl_1_bss_6B4); + BoardStatusShowSet(lbl_1_bss_6B4, 1); + while (!BoardStatusStopCheck(lbl_1_bss_6B4)) { + HuPrcVSleep(); + } + temp_r19 = HuAudFXPlay(0x40C); + fn_1_4774(); + WipeCreate(1, 0, -1); + lbl_1_bss_6B0 = 1; + HuAudFXPlay(0x413); + while (TRUE) { + fn_1_1990(); + fn_1_3350(); + fn_1_276C(); + BoardModelPosSetV(lbl_1_bss_6C4[0], &lbl_1_bss_654); + BoardPlayerPosSetV(lbl_1_bss_6B4, &lbl_1_bss_654); + if (BoardPlayerSizeGet(lbl_1_bss_6B4) != 1) { + PSMTXTrans(sp48, 0.0f, 30.0f, 0.0f); + } else { + PSMTXTrans(sp48, 0.0f, 400.0f, 250.0f); + } + BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); + PSMTXConcat(lbl_1_bss_678, sp48, sp48); + BoardPlayerMtxSet(lbl_1_bss_6B4, &sp48); + if (lbl_1_bss_0->unk00_field0 == 0) { + var_f29 = -lbl_1_bss_670; + } else { + var_f29 = lbl_1_bss_670; + } + BoardModelMotionSpeedSet(lbl_1_bss_6AE, var_f29); + if (lbl_1_bss_0->unk00_field0 == 0) { + if (BoardModelMotionTimeGet(lbl_1_bss_6AE) <= 0.0f) { + break; + } + } else { + if (BoardModelMotionTimeGet(lbl_1_bss_6AE) >= lbl_1_bss_644) { + break; + } + } + HuPrcVSleep(); + } + PSMTXIdentity(lbl_1_bss_678); + fn_1_4864(); + HuAudFXStop(temp_r19); + fn_1_1EE4(); + fn_1_98EC(); + if (BoardPlayerSizeGet(lbl_1_bss_6B4) == 1) { + PSMTXTrans(sp48, 0.0f, 400.0f, 250.0f); + } else { + PSMTXTrans(sp48, 0.0f, 30.0f, 0.0f); + } + BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); + BoardPlayerMtxSet(lbl_1_bss_6B4, &sp48); + lbl_1_bss_660.x = lbl_1_bss_660.z = 0.0f; + BoardAudSeqFadeOut(1, 1000); + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, -1); + HuAudFXPlay(0x401); + temp_f28 = (-lbl_1_bss_63C - lbl_1_bss_660.y) / 30.0f; + for (i = 0; i < 30; i++) { + BoardModelRotSetV(lbl_1_bss_6C4[0], &lbl_1_bss_660); + BoardPlayerRotSetV(lbl_1_bss_6B4, &lbl_1_bss_660); + lbl_1_bss_660.y += temp_f28 * var_f30; + HuPrcVSleep(); + } + lbl_1_bss_660.y = -lbl_1_bss_63C; + BoardModelRotSetV(lbl_1_bss_6C4[0], &lbl_1_bss_660); + BoardPlayerRotSetV(lbl_1_bss_6B4, &lbl_1_bss_660); + BoardStatusShowSet(lbl_1_bss_6B4, 0); + BoardSpaceAttrReset(0, 1); + fn_1_53B8(); + BoardCameraMoveSet(0); + BoardCameraTargetPlayerSet(lbl_1_bss_6B4); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + do { + HuPrcVSleep(); + } while (WipeStatGet() != 0); + BoardPlayerIdleSet(lbl_1_bss_6B4); + BoardPlayerMtxSet(lbl_1_bss_6B4, &lbl_1_bss_678); + BoardCameraPosCalcFuncSet(NULL); + BoardPlayerExistCheck(lbl_1_bss_6B4, 1); + BoardSpacePosGet(0, var_r25, &sp3C); + GWPlayer[lbl_1_bss_6B4].space_curr = var_r25; + BoardPlayerPosSetV(lbl_1_bss_6B4, &sp3C); + fn_1_35B4(lbl_1_bss_6B4); + lbl_1_bss_6B2 = 1; +} + +static void fn_1_45F4(void) { + if (lbl_1_bss_6B2 != 0) { + if (lbl_1_bss_0->unk00_field0 == 0) { + lbl_1_bss_0->unk00_field0 = 1; + } else { + lbl_1_bss_0->unk00_field0 = 0; + } + lbl_1_bss_6B2 = 0; + fn_1_1670(); + } + fn_1_87AC(); + while (lbl_1_bss_C) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + BoardCameraMoveSet(1); + BoardCameraMotionWait(); + WipeCreate(1, 0, 21); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + BoardStatusShowSetAll(1); +} + +static void fn_1_4774(void) { + float sp8[2]; + float var_f31; + float var_f30; + + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(13, 5)); + var_f31 = -10000.0f; + var_f30 = 352.0f; + lbl_1_data_580 = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 0); + HuWinBGTPLvlSet(lbl_1_data_580, 0.0f); + HuWinMesSpeedSet(lbl_1_data_580, 0); + HuWinMesSet(lbl_1_data_580, MAKE_MESSID(13, 5)); +} + +static void fn_1_4864(void) { + if (lbl_1_data_580 != -1) { + HuWinKill(lbl_1_data_580); + lbl_1_data_580 = -1; + } +} + +static s32 fn_1_48B4(void) { + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + u32 var_r31; + s32 i; + s32 temp_r28; + s32 temp_r30; + + var_r31 = 0; + lbl_1_bss_6B0 = 0; + lbl_1_bss_6B1 = 0; + lbl_1_bss_6B2 = 0; + lbl_1_bss_6B4 = GWSystem.player_curr; + temp_r30 = GWPlayer[lbl_1_bss_6B4].space_curr; + BoardPlayerMotionShiftSet(lbl_1_bss_6B4, 1, 0.0f, 14.0f, 0x40000001); + BoardWinCreateChoice(0, MAKE_MESSID(13, 0), -1, 0); + if (GWPlayer[lbl_1_bss_6B4].com) { + fn_1_9D00(lbl_1_bss_6B4); + } + BoardWinWait(); + if (BoardWinChoiceGet() != 0) { + return 0; + } + BoardWinCreate(2, 0xD0006, 0); + BoardWinWait(); + temp_r28 = BoardSpaceLinkFlagSearch(0, temp_r30, 0x02000000); + BoardSpacePosGet(0, temp_r30, &sp20); + BoardSpacePosGet(0, temp_r28, &sp14); + PSVECSubtract(&sp14, &sp20, &sp8); + PSVECNormalize(&sp8, &sp8); + var_f31 = 180.0 * (atan2(-sp8.x, -sp8.z) / M_PI); + BoardPlayerRotSet(lbl_1_bss_6B4, 0.0f, var_f31, 0.0f); + BoardPlayerMoveBetween(lbl_1_bss_6B4, temp_r30, temp_r28); + while (GWPlayer[lbl_1_bss_6B4].moving) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_6B4); + while (TRUE) { + BoardWinCreateChoice(1, MAKE_MESSID(13, 1), 0, 0); + BoardWinAttrSet(0x10); + if (GWPlayer[lbl_1_bss_6B4].com) { + if (BoardPlayerCoinsGet(lbl_1_bss_6B4) >= 5) { + BoardComKeySetUp(); + } else { + BoardComKeySetDown(); + } + } + BoardWinWait(); + if (BoardWinChoiceGet() == 1) { + var_r31 = MAKE_MESSID(13, 3); + break; + } + if (BoardWinChoiceGet() == 2) { + BoardViewMapExec(lbl_1_bss_6B4); + continue; + } + if (BoardPlayerCoinsGet(lbl_1_bss_6B4) < 5) { + var_r31 = MAKE_MESSID(13, 4); + break; + } + for (i = 0; i < 5; i++) { + BoardPlayerCoinsAdd(lbl_1_bss_6B4, -1); + HuAudFXPlay(0xE); + HuPrcSleep(6); + } + HuAudFXPlay(0xF); + BoardWinCreate(2, MAKE_MESSID(13, 2), 0); + BoardWinWait(); + BoardWinKill(); + BoardAudSeqPause(0, 1, 1000); + HuAudFXPlay(0x402); + BoardStatusShowSetAll(0); + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, 21); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + fn_1_852C(); + return 1; + } + if (var_r31 != 0) { + BoardWinCreate(1, var_r31, 0); + BoardWinWait(); + BoardWinKill(); + } + BoardCameraTargetPlayerSet(lbl_1_bss_6B4); + PSVECSubtract(&sp20, &sp14, &sp8); + PSVECNormalize(&sp8, &sp8); + var_f31 = 180.0 * (atan2(-sp8.x, -sp8.z) / M_PI); + BoardPlayerRotSet(lbl_1_bss_6B4, 0.0f, var_f31, 0.0f); + BoardPlayerMoveBetween(lbl_1_bss_6B4, temp_r28, temp_r30); + while (GWPlayer[lbl_1_bss_6B4].moving) { + HuPrcVSleep(); + } + return 0; +} + +static void fn_1_4E14(void) { + if (fn_1_48B4() != 0) { + fn_1_3624(); + fn_1_45F4(); + } + HuPrcEnd(); +} + +static void fn_1_4FA8(void) { + BoardWinKill(); + lbl_1_bss_8 = NULL; +} + +static void fn_1_4FD8(void) { + lbl_1_bss_6B4 = GWSystem.player_curr; + BoardDiceDigit2DShowSet(0); + if (BoardPlayerSizeGet(lbl_1_bss_6B4) == 2 || GWPlayer[lbl_1_bss_6B4].bowser_suit) { + return; + } + lbl_1_bss_8 = HuPrcChildCreate(fn_1_4E14, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_8, fn_1_4FA8); + while (lbl_1_bss_8) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); +} + +static void fn_1_50D4(void) { + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f30; + float var_f31; + BoardSpace *temp_r31; + s32 var_r27; + s32 var_r26; + s32 var_r29; + s32 var_r28; + s32 i; + + for (i = 0; i < 24; i++) { + lbl_1_bss_5D0[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 9), NULL, 0); + BoardModelVisibilitySet(lbl_1_bss_5D0[i], 0); + BoardModelMotionStart(lbl_1_bss_5D0[i], 0, 0x40000001); + lbl_1_bss_600[i] = 0; + } + temp_f30 = 180.0f; + var_r28 = BoardSpaceFlagPosGet(1, 0x2000, &sp20); + var_r27 = BoardRand() & 1; + var_r29 = i = 0; + while (i < 24) { + temp_r31 = BoardSpaceGet(1, var_r28); + var_r28 = temp_r31->link[0]; + if (var_r28 == -1 || temp_r31->link_cnt == 0) { + break; + } + if (!(temp_r31->flag & 0x80)) { + sp14 = temp_r31->pos; + } else { + if (var_r29 >= 3) { + if (BoardRandFloat() < 0.5f) { + var_r26 = 1; + } else { + var_r26 = 0; + } + var_r27 = var_r26; + var_r29 = 0; + } + PSVECSubtract(&sp14, &temp_r31->pos, &sp8); + PSVECNormalize(&sp8, &sp8); + var_f31 = 180.0 * (atan2(sp8.z, sp8.x) / M_PI); + if (var_r27 != 0) { + var_f31 += 180.0f; + } + sp20.x = temp_r31->pos.x + temp_f30 * sin(var_f31 * M_PI / 180.0); + sp20.y = temp_r31->pos.y + 80.0f; + sp20.z = temp_r31->pos.z + temp_f30 * cos(var_f31 * M_PI / 180.0); + BoardModelPosSetV(lbl_1_bss_5D0[i], &sp20); + BoardModelVisibilitySet(lbl_1_bss_5D0[i], 1); + sp14 = temp_r31->pos; + i++; + var_r29++; + } + } +} + +static void fn_1_53B8(void) { + s32 i; + + for (i = 0; i < 24; i++) { + if (lbl_1_bss_5D0[i] != -1) { + BoardModelKill(lbl_1_bss_5D0[i]); + lbl_1_bss_5D0[i] = -1; + } + } +} + +static s32 lbl_1_data_5D4 = -1; +static s32 lbl_1_data_5D8 = -1; + +static s16 lbl_1_data_5DC[2][4] = { + { 24, 25, 26, 27 }, + { 29, 30, 31, 32 } +}; + +static char *lbl_1_data_604[] = { + "chara1", "chara2", "chara3" +}; + +static float lbl_1_data_610[2][2] = { + { 90.0f, 0.0f }, + { 0.0f, 270.0f } +}; + +static void fn_1_543C(void) { + float var_f31; + s16 temp_r28; + s16 temp_r29; + s32 i; + s32 j; + char *sp10[] = { "cup1", "cup2", "cup3", "ya1" }; + s32 sp8[] = { 23, 28 }; + + for (i = 0; i < 2; i++) { + temp_r28 = lbl_1_bss_6C4[sp8[i]]; + BoardModelMotionStart(temp_r28, 0, 0x40000001); + BoardModelExistDupe(temp_r28, 0); + for (j = 0; j < 4; j++) { + temp_r29 = lbl_1_bss_6C4[lbl_1_data_5DC[i][j]]; + BoardModelExistDupe(temp_r29, 1); + BoardModelHookSet(temp_r28, sp10[j], temp_r29); + BoardModelMotionStart(temp_r29, 0, 0x40000001); + BoardModelRotSet(temp_r29, 0.0f, 360.0f * BoardRandFloat(), 0.0f); + } + } + if (lbl_1_bss_0->unk01[0] != 0) { + var_f31 = 0.0f; + } else { + var_f31 = 90.0f; + } + BoardModelRotSet(lbl_1_bss_6C4[27], 0.0f, var_f31, 0.0f); + if (lbl_1_bss_0->unk01[1] != 0) { + var_f31 = -90.0f; + } else { + var_f31 = 0.0f; + } + BoardModelRotSet(lbl_1_bss_6C4[32], 0.0f, var_f31, 0.0f); +} + +static void fn_1_5694(s32 arg0) { + s16 temp_r29; + s16 temp_r30; + s16 i; + s32 spC[] = { 23, 28 }; + + temp_r29 = lbl_1_bss_6C4[spC[lbl_1_bss_29]]; + if (arg0 != 0) { + BoardModelMotionSpeedSet(temp_r29, 1.0f); + BoardModelAttrReset(temp_r29, 0x40000002); + for (i = 0; i < 3; i++) { + temp_r30 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]]; + BoardModelMotionSpeedSet(temp_r30, 1.0f); + BoardModelAttrReset(temp_r30, 0x40000002); + } + } else { + BoardModelMotionSpeedSet(temp_r29, 0.0f); + BoardModelAttrSet(temp_r29, 0x40000002); + for (i = 0; i < 3; i++) { + temp_r30 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]]; + BoardModelMotionSpeedSet(temp_r30, 0.0f); + BoardModelAttrSet(temp_r30, 0x40000002); + } + } +} + +static void fn_1_586C(s32 arg0, s32 arg1) { + lbl_1_bss_29 = arg0; + lbl_1_bss_26 = arg1; + BoardDiceDigit2DShowSet(0); + lbl_1_bss_14 = HuPrcChildCreate(fn_1_592C, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_14, fn_1_5B2C); + while (lbl_1_bss_14) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); +} + +static void fn_1_592C(void) { + s16 temp_r30; + s16 var_r28; + + lbl_1_data_5D4 = -1; + lbl_1_data_5D8 = -1; + BoardPlayerIdleSet(GWSystem.player_curr); + if (lbl_1_bss_29 == 0) { + var_r28 = lbl_1_bss_6C4[23]; + } else { + var_r28 = lbl_1_bss_6C4[28]; + } + BoardCameraTargetModelSet(var_r28); + BoardCameraOffsetSet(0.0f, 0.0f, 0.0f); + fn_1_5D08(); + while (!fn_1_5CD0()) { + HuPrcVSleep(); + } + fn_1_5B40(); + fn_1_5694(1); + BoardCameraTargetPlayerSet(GWSystem.player_curr); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + HuPrcEnd(); +} + +static void fn_1_5B2C(void) { + lbl_1_bss_14 = NULL; +} + +static void fn_1_5B40(void) { + s16 spC[] = { 27, 32 }; + s16 temp_r30; + s32 temp_r31; + float sp8; + float temp_f31; + + temp_r31 = lbl_1_bss_0->unk01[lbl_1_bss_29]; + lbl_1_bss_0->unk01[lbl_1_bss_29] ^= 1; + temp_r30 = lbl_1_bss_6C4[spC[lbl_1_bss_29]]; + sp8 = lbl_1_data_610[lbl_1_bss_29][temp_r31]; + temp_f31 = lbl_1_data_610[lbl_1_bss_29][temp_r31 ^ 1]; + HuAudFXPlay(0x403); + while (TRUE) { + HuPrcVSleep(); + if (BoardDAngleCalcRange(&sp8, temp_f31, 3.0f) != 0) { + break; + } + BoardModelRotSet(temp_r30, 0.0f, sp8, 0.0f); + } +} + +static BOOL fn_1_5CD0(void) { + return lbl_1_bss_18 ? FALSE : TRUE; +} + +static void fn_1_5D08(void) { + Bss18Work *temp_r31; + float var_f30; + float var_f31; + s16 var_r28; + s16 var_r25; + s32 i; + + if (lbl_1_bss_29 == 0) { + var_r28 = lbl_1_bss_6C4[23]; + } else { + var_r28 = lbl_1_bss_6C4[28]; + } + while (TRUE) { + var_f30 = BoardModelMotionTimeGet(var_r28); + if (var_f30 >= 209.0f && var_f30 <= 211.0f) { + break; + } + if (var_f30 >= 129.0f && var_f30 <= 131.0f) { + break; + } + if (var_f30 >= 49.0f && var_f30 <= 51.0f) { + break; + } + HuPrcVSleep(); + } + var_f31 = 1.0f; + while (var_f31 > 0.01f) { + var_f31 *= 0.9f; + if (var_f31 <= 0.01f) { + var_f31 = 0.0f; + } + BoardModelMotionSpeedSet(var_r28, var_f31); + for (i = 0; i < 3; i++) { + var_r25 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]]; + BoardModelMotionSpeedSet(var_r25, var_f31); + } + HuPrcVSleep(); + } + fn_1_5694(0); + lbl_1_bss_18 = omAddObjEx(boardObjMan, 0x103, 0, 0, -1, fn_1_6098); + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_18, Bss18Work); + temp_r31->unk00_field0 = 0; + temp_r31->unk01 = 0; + temp_r31->unk02 = 0; + temp_r31->unk00_field2 = 0; + temp_r31->unk04 = var_r28; + if (BoardPlayerSizeGet(GWSystem.player_curr) == 2) { + temp_r31->unk00_field3 = 1; + } else { + temp_r31->unk00_field3 = 0; + } +} + +static void fn_1_6098(omObjData *arg0) { + Bss18Work *temp_r31 = OM_GET_WORK_PTR(arg0, Bss18Work); + s32 temp_r0; + + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + lbl_1_bss_18 = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r31->unk02 != 0) { + temp_r31->unk02--; + return; + } + switch (temp_r31->unk00_field1) { + case 0: + fn_1_6194(temp_r31, arg0); + break; + case 2: + fn_1_63F0(temp_r31, arg0); + break; + case 3: + fn_1_6BC0(temp_r31, arg0); + break; + case 1: + fn_1_6FB4(temp_r31, arg0); + break; + } +} + +static void fn_1_6194(Bss18Work *arg0, omObjData *arg1) { + Mtx sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f31; + float var_f30; + s32 var_r28; + s32 i; + + BoardPlayerPosGet(GWSystem.player_curr, &sp20); + var_f30 = 1000000.0f; + for (i = 0; i < 3; i++) { + Hu3DModelObjPosGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[i], &sp8); + temp_f31 = PSVECSquareDistance(&sp8, &sp20); + if (temp_f31 < var_f30) { + var_f30 = temp_f31; + lbl_1_bss_28 = i; + sp2C = sp8; + } + } + Hu3DModelObjMtxGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[lbl_1_bss_28], sp38); + Hu3DMtxRotGet(&sp38, &sp14); + sp14.y = 180.0f; + PSVECSubtract(&sp2C, &sp20, &sp8); + arg1->trans.x = sp8.x / 25.0f; + arg1->trans.z = sp8.z / 25.0f; + var_r28 = BoardPlayerRotYGet(GWSystem.player_curr); + arg1->trans.y = BoardDAngleCalc(sp14.y - var_r28) / 25.0f; + arg1->scale.x = sp2C.x; + arg1->scale.y = sp2C.y; + arg1->scale.z = sp2C.z; + BoardPlayerMotionShiftSet(GWSystem.player_curr, 4, 15.0f, 5.0f, 0); + arg0->unk00_field1 = 2; + arg0->unk01 = 0; +} + +static void fn_1_63F0(Bss18Work *arg0, omObjData *arg1) { + Vec sp10; + float temp_f29; + float var_f27; + float var_f28; + s16 var_r24; + + if (arg0->unk01 >= 55) { + BoardPlayerRotSet(GWSystem.player_curr, 0.0f, 0.0f, 0.0f); + BoardPlayerIdleSet(GWSystem.player_curr); + if (GWPlayer[GWSystem.player_curr].bowser_suit) { + BoardModelHookSet(arg0->unk04, lbl_1_data_604[lbl_1_bss_28], BoardBowserSuitModelGet()); + } else { + BoardModelHookSet(arg0->unk04, lbl_1_data_604[lbl_1_bss_28], BoardPlayerModelGetCurr()); + } + var_r24 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]]; + if (arg0->unk00_field3 != 0) { + BoardModelScaleSet(var_r24, 1.0f, 0.1f, 1.0f); + } + fn_1_5694(1); + lbl_1_data_5D4 = HuAudFXPlay(0x410); + arg0->unk01 = 0; + arg0->unk00_field1 = 1; + return; + } + if (arg0->unk01 == 25) { + BoardPlayerPosSet(GWSystem.player_curr, arg1->scale.x, arg1->scale.y, arg1->scale.z); + BoardPlayerMotionShiftSet(GWSystem.player_curr, 5, 0.0f, 8.0f, 0); + } + if (arg0->unk01 < 25) { + OSu8tof32(&arg0->unk01, &temp_f29); + BoardPlayerPosGet(GWSystem.player_curr, &sp10); + sp10.x += arg1->trans.x; + sp10.z += arg1->trans.z; + sp10.y += 15.0f + -0.08166667f * temp_f29 * temp_f29; + if (sp10.y <= arg1->scale.y) { + sp10.y = arg1->scale.y; + } + var_f27 = arg1->trans.y + BoardPlayerRotYGet(GWSystem.player_curr); + BoardPlayerRotYSet(GWSystem.player_curr, var_f27); + BoardPlayerPosSetV(GWSystem.player_curr, &sp10); + if (arg0->unk01 > 12 && arg0->unk00_field3 != 0) { + if (lbl_1_data_5D8 == -1) { + lbl_1_data_5D8 = HuAudFXPlay(0x411); + } + OSu8tof32(&arg0->unk01, &temp_f29); + temp_f29 -= 12.0f; + temp_f29 = 90.0f * (temp_f29 / 12.5f); + var_f28 = cos(temp_f29 * M_PI / 180.0); + if (var_f28 < 0.1f) { + var_f28 = 0.1f; + } + var_r24 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]]; + BoardModelScaleSet(var_r24, 1.0f, var_f28, 1.0f); + } + } + arg0->unk01++; +} + +static void fn_1_6A14(Bss18Work *arg0, omObjData *arg1) { + Vec sp20; + Vec sp14; + Vec sp8; + + BoardModelHookObjReset(arg0->unk04, lbl_1_data_604[lbl_1_bss_28]); + Hu3DModelObjPosGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[lbl_1_bss_28], &sp14); + BoardPlayerPosSetV(GWSystem.player_curr, &sp14); + BoardSpacePosGet(0, lbl_1_bss_24, &sp20); + PSVECSubtract(&sp20, &sp14, &sp8); + arg1->trans.x = sp8.x / 25.0f; + arg1->trans.z = sp8.z / 25.0f; + arg1->scale.x = sp20.x; + arg1->scale.y = sp20.y; + arg1->scale.z = sp20.z; + BoardPlayerMotionShiftSet(GWSystem.player_curr, 4, 15.0f, 5.0f, 0); + BoardPlayerRotYSet(GWSystem.player_curr, 180.0 * (atan2(sp8.x, sp8.z) / M_PI)); + arg0->unk00_field1 = 3; + arg0->unk01 = 0; +} + +static void fn_1_6BC0(Bss18Work *arg0, omObjData *arg1) { + Vec sp14; + Vec sp8; + float var_f28; + float temp_f29; + s16 var_r27; + + if (arg0->unk01 >= 55) { + BoardSpacePosGet(0, lbl_1_bss_24, &sp8); + GWPlayer[GWSystem.player_curr].space_curr = lbl_1_bss_24; + BoardPlayerPosSetV(GWSystem.player_curr, &sp8); + BoardPlayerIdleSet(GWSystem.player_curr); + var_r27 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]]; + if (arg0->unk00_field3 != 0) { + BoardModelScaleSet(var_r27, 1.0f, 1.0f, 1.0f); + } + arg0->unk00_field0 = 1; + } + if (arg0->unk01 == 25) { + BoardPlayerPosSet(GWSystem.player_curr, arg1->scale.x, arg1->scale.y, arg1->scale.z); + BoardPlayerMotionShiftSet(GWSystem.player_curr, 5, 0.0f, 8.0f, 0); + } + if (arg0->unk01 < 25) { + OSu8tof32(&arg0->unk01, &temp_f29); + BoardPlayerPosGet(GWSystem.player_curr, &sp14); + sp14.x += arg1->trans.x; + sp14.z += arg1->trans.z; + sp14.y += 15.0f + -0.08166667f * temp_f29 * temp_f29; + if (sp14.y <= arg1->scale.y) { + sp14.y = arg1->scale.y; + } + BoardPlayerPosSetV(GWSystem.player_curr, &sp14); + if (arg0->unk01 > 12 && arg0->unk00_field3 != 0) { + OSu8tof32(&arg0->unk01, &temp_f29); + temp_f29 -= 12.0f; + temp_f29 = 90.0f * (temp_f29 / 12.5f); + var_f28 = sin(temp_f29 * M_PI / 180.0); + if (var_f28 < 0.1f) { + var_f28 = 0.1f; + } + var_r27 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]]; + BoardModelScaleSet(var_r27, 1.0f, var_f28, 1.0f); + } + } + arg0->unk01++; +} + +static void fn_1_6FB4(Bss18Work *arg0, omObjData *arg1) { + Vec sp40; + Vec sp34; + Vec sp28; + Vec sp1C; + Vec sp10; + float var_f31; + BoardSpace *temp_r29; + s16 var_r22; + u32 temp_r3; + s32 var_r24; + s32 i; + + if (arg0->unk00_field2 != 0) { + arg0->unk08 *= 0.9f; + if (arg0->unk08 <= 0.01f) { + arg0->unk08 = 0.0f; + fn_1_5694(0); + if (lbl_1_data_5D4 != -1) { + HuAudFXStop(lbl_1_data_5D4); + lbl_1_data_5D4 = -1; + } + fn_1_6A14(arg0, arg1); + } + BoardModelMotionSpeedSet(arg0->unk04, arg0->unk08); + for (i = 0; i < 3; i++) { + var_r22 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]]; + BoardModelMotionSpeedSet(var_r22, arg0->unk08); + } + return; + } + if (lbl_1_bss_29 == 0) { + var_r24 = lbl_1_bss_0->unk01[lbl_1_bss_29] ^ 1; + } else { + var_r24 = lbl_1_bss_0->unk01[lbl_1_bss_29]; + } + temp_r29 = BoardSpaceGet(0, lbl_1_bss_26); + lbl_1_bss_24 = -1; + for (i = 0; i < temp_r29->link_cnt; i++) { + if (temp_r29->link[i] != -1) { + temp_r3 = BoardSpaceFlagGet(0, temp_r29->link[i]); + if ((temp_r3 & 0x200) && var_r24 == 0) { + lbl_1_bss_24 = temp_r29->link[i]; + } + if ((temp_r3 & 0x100) && var_r24 != 0) { + lbl_1_bss_24 = temp_r29->link[i]; + } + } + } + BoardSpacePosGet(0, lbl_1_bss_24, &sp40); + Hu3DModelObjPosGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[lbl_1_bss_28], &sp34); + var_f31 = BoardVecDistXZCalc(&sp40, &sp34); + if (var_f31 <= 300.0f) { + arg0->unk00_field2 = 1; + arg0->unk08 = 1.0f; + } +} + +static void fn_1_7528(s32 arg0, s32 arg1) { + Vec sp30; + Vec sp24; + Vec sp18; + float temp_f31; + float temp_f30; + s16 sp14[] = { 23, 28 }; + + BoardPlayerIdleSet(GWSystem.player_curr); + BoardSpacePosGet(0, arg1, &sp30); + BoardModelPosGet(lbl_1_bss_6C4[23], &sp24); + BoardModelPosGet(lbl_1_bss_6C4[28], &sp18); + temp_f31 = PSVECDistance(&sp24, &sp30); + temp_f30 = PSVECDistance(&sp18, &sp30); + if (temp_f31 < temp_f30) { + lbl_1_bss_29 = 0; + } else { + lbl_1_bss_29 = 1; + } + BoardCameraTargetModelSet(lbl_1_bss_6C4[sp14[lbl_1_bss_29]]); + BoardCameraMotionWait(); + HuPrcSleep(42); + fn_1_5B40(); + BoardCameraTargetPlayerSet(GWSystem.player_curr); + BoardCameraMotionWait(); + HuPrcSleep(12); +} + +static void fn_1_77EC(s32 arg0, s32 arg1) { + lbl_1_bss_6B4 = arg0; + lbl_1_bss_6B0 = 0; + lbl_1_bss_8 = HuPrcChildCreate(fn_1_7894, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_8, fn_1_4FA8); + while (lbl_1_bss_8) { + HuPrcVSleep(); + } +} + +static void fn_1_7894(void) { + lbl_1_bss_6B1 = 1; + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, 21); + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + fn_1_7A64(); + fn_1_45F4(); + HuPrcEnd(); +} + +static void fn_1_7A64(void) { + Vec sp34; + Vec sp28; + Vec sp1C; + Vec sp10; + float var_f30; + s16 var_r20; + s32 temp_r19; + s32 var_r28; + + var_r28 = 0; + lbl_1_bss_674 = lbl_1_bss_670 = 0.18f; + lbl_1_bss_640 = 0.0f; + lbl_1_bss_660.x = 0.0f; + lbl_1_bss_660.y = 0.0f; + lbl_1_bss_660.z = 0.0f; + lbl_1_bss_6A8 = 0.0f; + lbl_1_bss_6B3 = 0; + lbl_1_bss_624.x = 0.0f; + lbl_1_bss_624.z = 0.0f; + lbl_1_bss_624.y = 1.0f; + lbl_1_bss_66C = 0.04f; + BoardSpaceAttrSet(0, 1); + fn_1_97F4(); + BoardModelMotionStart(lbl_1_bss_6AE, 0, 0); + if (lbl_1_bss_0->unk00_field0 == 0) { + BoardModelMotionTimeSet(lbl_1_bss_6AE, lbl_1_bss_644); + lbl_1_bss_63C = -90.0f; + lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x2000, &sp34); + var_r20 = BoardSpaceFlagSearch(1, 0x1000); + } else { + BoardModelMotionTimeSet(lbl_1_bss_6AE, 0.0f); + lbl_1_bss_63C = 90.0f; + lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x1000, &sp34); + var_r20 = BoardSpaceFlagSearch(1, 0x2000); + } + lbl_1_bss_654 = sp34; + BoardCameraMotionStartEx(lbl_1_bss_6C4[0], 0, 0, 2400.0f, -1.0f, 2); + PSMTXRotRad(lbl_1_bss_678, 'y', MTXDegToRad(lbl_1_bss_63C)); + BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); + BoardModelRotSet(lbl_1_bss_6C4[0], 0.0f, 0.0f, 0.0f); + fn_1_3350(); + lbl_1_bss_648 = lbl_1_bss_654; + lbl_1_bss_618 = lbl_1_bss_654; + lbl_1_bss_630 = lbl_1_bss_654; + fn_1_852C(); + BoardModelMotionSpeedSet(lbl_1_bss_6AE, lbl_1_bss_670); + BoardCameraMotionWait(); + WipeCreate(1, 0, -1); + lbl_1_bss_6B0 = 1; + temp_r19 = HuAudFXPlay(0x412); + while (TRUE) { + fn_1_1990(); + fn_1_3350(); + fn_1_276C(); + BoardModelPosSetV(lbl_1_bss_6C4[0], &lbl_1_bss_654); + BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); + if (lbl_1_bss_0->unk00_field0 == 0) { + var_f30 = -lbl_1_bss_670; + } else { + var_f30 = lbl_1_bss_670; + } + BoardModelMotionSpeedSet(lbl_1_bss_6AE, var_f30); + if (lbl_1_bss_0->unk00_field0 == 0) { + if (BoardModelMotionTimeGet(lbl_1_bss_6AE) <= 20.0f && var_r28 == 0) { + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, -1); + var_r28 = 1; + } + } else { + if (BoardModelMotionTimeGet(lbl_1_bss_6AE) >= lbl_1_bss_644 - 20.0f && var_r28 == 0) { + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, -1); + var_r28 = 1; + } + } + if (var_r28 != 0 && WipeStatGet() == 0) { + break; + } + HuPrcVSleep(); + } + HuAudFXStop(temp_r19); + fn_1_98EC(); + fn_1_87AC(); + while (lbl_1_bss_C) { + HuPrcVSleep(); + } + PSMTXIdentity(lbl_1_bss_678); + BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); + lbl_1_bss_660.x = 0.0f; + lbl_1_bss_660.z = 0.0f; + lbl_1_bss_660.y = -lbl_1_bss_63C; + BoardModelRotSetV(lbl_1_bss_6C4[0], &lbl_1_bss_660); + BoardSpacePosGet(1, var_r20, &sp34); + BoardModelPosSetV(lbl_1_bss_6C4[0], &sp34); + BoardSpaceAttrReset(0, 1); + BoardCameraMoveSet(0); + BoardCameraTargetPlayerSet(lbl_1_bss_6B4); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + lbl_1_bss_6B2 = 1; +} + +static s8 lbl_1_data_633 = -1; + +static void fn_1_852C(void) { + BssCWork *temp_r30; + BssCData *temp_r31; + Vec spC; + float temp_f31; + s16 sp8; + s16 var_r28; + s16 i; + u32 var_r27; + + lbl_1_bss_C = omAddObjEx(boardObjMan, 0x103, 0, 0, -1, fn_1_87E0); + temp_r30 = OM_GET_WORK_PTR(lbl_1_bss_C, BssCWork); + temp_r30->unk00_field0 = 0; + temp_r30->unk04 = HuMemDirectMallocNum(HEAP_SYSTEM, 4 * sizeof(BssCData), MEMORY_DEFAULT_NUM); + memset(temp_r30->unk04, 0, 4 * sizeof(BssCData)); + lbl_1_data_633 = -1; + lbl_1_bss_1C = 0; + for (temp_r30->unk01 = i = 0; i < 4; i++) { + temp_r31 = &temp_r30->unk04[temp_r30->unk01]; + var_r28 = GWPlayer[i].space_curr; + sp8 = GWPlayer[i].character; + var_r27 = BoardSpaceFlagGet(0, var_r28); + if (!(var_r27 & 1)) { + temp_r31->unk00 = -1; + continue; + } + temp_r31->unk00 = 0; + temp_r31->unk01 = i; + temp_r31->unk02 = 0; + BoardPlayerPosGet(temp_r31->unk01, &spC); + temp_r31->unk04 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 10), NULL, 0); + temp_f31 = BoardModelMotionMaxTimeGet(temp_r31->unk04); + BoardModelVisibilitySet(temp_r31->unk04, 0); + fn_1_95F4(temp_r31); + BoardModelMotionStart(temp_r31->unk04, 0, 0); + BoardModelMotionSpeedSet(temp_r31->unk04, 0.0f); + if (lbl_1_bss_0->unk00_field0 == 0) { + temp_r31->unk08 = -0.18f; + BoardModelMotionTimeSet(temp_r31->unk04, temp_f31); + } else { + temp_r31->unk08 = 0.18f; + BoardModelMotionTimeSet(temp_r31->unk04, 0.0f); + } + fn_1_932C(temp_r31); + temp_r30->unk01++; + } + BoardCameraMoveSet(1); + BoardCameraTargetModelSet(lbl_1_bss_6C4[0]); +} + +static void fn_1_87AC(void) { + if (lbl_1_bss_C) { + OM_GET_WORK_PTR(lbl_1_bss_C, BssCWork)->unk00_field0 = 1; + } +} + +static void fn_1_87E0(omObjData *arg0) { + BssCWork *temp_r30 = OM_GET_WORK_PTR(arg0, BssCWork); + BssCData *temp_r31; + s32 i; + + if (temp_r30->unk00_field0 != 0 || BoardIsKill()) { + for (i = 0; i < temp_r30->unk01; i++) { + temp_r31 = &temp_r30->unk04[i]; + } + HuMemDirectFree(temp_r30->unk04); + lbl_1_bss_C = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (lbl_1_bss_6B0 == 0) { + return; + } + for (i = 0; i < temp_r30->unk01; i++) { + temp_r31 = &temp_r30->unk04[i]; + if (temp_r31->unk02 != 0) { + temp_r31->unk02--; + } else { + switch (temp_r31->unk00) { + case 0: + fn_1_8988(temp_r31, arg0); + break; + case 1: + fn_1_8A50(temp_r31, arg0); + break; + case 2: + fn_1_8B6C(temp_r31, arg0); + break; + case 3: + fn_1_8DDC(temp_r31, arg0); + break; + case 4: + fn_1_918C(temp_r31, arg0); + break; + case 5: + fn_1_927C(temp_r31, arg0); + break; + } + } + } +} + +static void fn_1_8988(BssCData *arg0, omObjData *arg1) { + Vec sp20; + Vec sp14; + Vec sp8; + + if (arg0->unk10 - lbl_1_bss_640 > 900.0f) { + return; + } + BoardModelPosGet(*lbl_1_bss_6C4, &sp20); + BoardPlayerPosGet(arg0->unk01, &sp14); + PSVECSubtract(&sp20, &sp14, &sp8); + BoardPlayerRotYSet(arg0->unk01, 180.0 * (atan2(sp8.x, sp8.z) / M_PI)); + arg0->unk00 = 1; +} + +static s32 lbl_1_data_634[8] = { + 0x00000123, + 0x00000163, + 0x000001A3, + 0x000001E3, + 0x00000223, + 0x00000263, + 0x000002A3, + 0x000002E3 +}; + +static void fn_1_8A50(BssCData *arg0, omObjData *arg1) { + if (lbl_1_data_633 == -1) { + BoardCameraTargetPlayerSet(arg0->unk01); + lbl_1_data_633 = arg0->unk01; + } + HuAudFXPlay(lbl_1_data_634[GWPlayer[arg0->unk01].character]); + BoardPlayerMotionStart(arg0->unk01, 9, 0); + BoardPlayerMotionSpeedSet(arg0->unk01, 2.0f); + arg0->unk02 = lbl_1_bss_1C * 3 + 9; + arg0->unk00 = 2; + lbl_1_bss_1C++; + omVibrate(arg0->unk01, 12, 4, 2); +} + +static void fn_1_8B6C(BssCData *arg0, omObjData *arg1) { + ModelData *temp_r29; + HsfObject *var_r30; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f30; + float var_f31; + s16 var_r28; + + BoardPlayerPosGet(arg0->unk01, &arg0->unk14); + BoardModelPosGet(lbl_1_bss_6C4[0], &sp20); + PSVECSubtract(&sp20, &arg0->unk14, &sp14); + BoardPlayerRotYSet(arg0->unk01, -(180.0 * (atan2(sp14.x, sp14.z) / M_PI))); + BoardPlayerMotionStart(arg0->unk01, 3, 0x40000001); + BoardPlayerMotionSpeedSet(arg0->unk01, 2.0f); + temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6AE); + var_r28 = BoardModelIDGet(lbl_1_bss_6AE); + temp_r29 = &Hu3DData[var_r28]; + Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0); + var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1"); + sp8.x = var_r30->data.curr.pos.x; + sp8.y = var_r30->data.curr.pos.y; + sp8.z = var_r30->data.curr.pos.z; + var_f31 = lbl_1_bss_640; + while (TRUE) { + Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0); + var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1"); + sp14.x = sp8.x - var_r30->data.curr.pos.x; + sp14.y = sp8.y - var_r30->data.curr.pos.y; + sp14.z = sp8.z - var_r30->data.curr.pos.z; + var_f31 += PSVECMag(&sp14); + if (var_f31 >= arg0->unk10) { + break; + } + sp8.x = var_r30->data.curr.pos.x; + sp8.y = var_r30->data.curr.pos.y; + sp8.z = var_r30->data.curr.pos.z; + temp_r29->unk_64 += arg0->unk08; + } + BoardModelMotionStart(arg0->unk04, 0, 0); + BoardModelMotionTimeSet(arg0->unk04, temp_r29->unk_64); + BoardModelMotionSpeedSet(arg0->unk04, temp_r29->unk_68); + arg0->unk00 = 3; + BoardModelMotionTimeSet(lbl_1_bss_6AE, temp_f30); +} + +static void fn_1_8DDC(BssCData *arg0, omObjData *arg1) { + ModelData *temp_r29; + HsfObject *var_r30; + Vec *var_r27; + Vec *var_r26; + Vec sp48; + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + Vec spC; + Mtx sp54; + s16 var_r28; + + var_r28 = BoardModelIDGet(arg0->unk04); + temp_r29 = &Hu3DData[var_r28]; + Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0); + var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1"); + sp30.x = var_r30->data.curr.pos.x; + sp30.y = var_r30->data.curr.pos.y; + sp30.z = var_r30->data.curr.pos.z; + PSVECSubtract(&sp30, &arg0->unk14, &sp24); + if (fn_1_94A8(arg0) != 0) { + BoardModelPosGet(lbl_1_bss_6C4[1], &sp18); + PSVECSubtract(&sp18, &sp30, &sp48); + PSVECNormalize(&sp48, &sp48); + var_r27 = &arg0->unk14; + var_r26 = &sp30; + BoardMTXCalcLookAt(sp54, var_r26, &sp48, var_r27); + PSMTXTranspose(sp54, arg0->unk20); + } else { + if (sp24.z != 0.0f || sp24.x != 0.0f) { + sp3C.y = 180.0 * (atan2(sp24.x, sp24.z) / M_PI); + sp3C.x = -(180.0 * (atan2(sp24.y, sqrtf(sp24.x * sp24.x + sp24.z * sp24.z)) / M_PI)); + } else { + sp3C.x = sp3C.y = 0.0f; + } + PSMTXRotRad(sp54, 'x', MTXDegToRad(sp3C.x)); + PSMTXRotRad(arg0->unk20, 'y', MTXDegToRad(sp3C.y)); + PSMTXConcat(arg0->unk20, sp54, arg0->unk20); + } + BoardPlayerPosSetV(arg0->unk01, &sp30); + BoardPlayerRotSet(arg0->unk01, 0.0f, 0.0f, 0.0f); + BoardPlayerMtxSet(arg0->unk01, &arg0->unk20); + arg0->unk14 = sp30; + BoardSpacePosGet(0, arg0->unk06, &spC); + if (BoardVecMaxDistXZCheck(&spC, &sp30, 200.0f)) { + arg0->unk00 = 4; + } +} + +static void fn_1_918C(BssCData *arg0, omObjData *arg1) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 var_r30; + + PSMTXIdentity(arg0->unk20); + var_r30 = BoardSpaceLinkFlagSearch(0, arg0->unk06, 0x40); + BoardSpacePosGet(0, var_r30, &sp20); + BoardPlayerPosGet(arg0->unk01, &sp14); + BoardPlayerMtxSet(arg0->unk01, &arg0->unk20); + PSVECSubtract(&sp20, &sp14, &sp8); + BoardPlayerRotYSet(arg0->unk01, 180.0 * (atan2(-sp8.z, -sp8.x) / M_PI)); + BoardPlayerPosLerpStart(arg0->unk01, &sp14, &sp20, 0x14); + arg0->unk00 = 5; +} + +static void fn_1_927C(BssCData *arg0, omObjData *arg1) { + s32 temp_r3; + + if (!GWPlayer[arg0->unk01].moving) { + BoardPlayerIdleSet(arg0->unk01); + temp_r3 = BoardSpaceLinkFlagSearch(0, arg0->unk06, 0x40); + GWPlayer[arg0->unk01].space_curr = temp_r3; + arg0->unk00 = -1; + BoardPlayerMoveAwayStartCurr(temp_r3, 0); + } +} + +static void fn_1_932C(BssCData *arg0) { + BoardSpace *temp_r30; + BoardSpace *var_r26; + Vec sp20[2]; + Vec sp14; + float spC[2]; + s16 sp8[2]; + s32 var_r29; + s32 var_r28; + s32 i; + + for (var_r28 = i = 0; i < BoardSpaceCountGet(0); i++) { + temp_r30 = BoardSpaceGet(0, i + 1); + for (var_r29 = 0; var_r29 < temp_r30->link_cnt; var_r29++) { + var_r26 = BoardSpaceGet(0, temp_r30->link[var_r29]); + if (var_r26->flag & 0x40) { + sp8[var_r28] = i + 1; + BoardSpacePosGet(0, temp_r30->link[var_r29], &sp20[var_r28]); + var_r28++; + } + } + if (var_r28 >= 2) { + break; + } + } + if (lbl_1_bss_0->unk00_field0 == 0) { + BoardSpaceFlagPosGet(0, 0x1000, &sp14); + } else { + BoardSpaceFlagPosGet(0, 0x2000, &sp14); + } + for (i = 0; i < 2; i++) { + spC[i] = PSVECSquareDistance(&sp14, &sp20[i]); + } + if (spC[0] < spC[1]) { + arg0->unk06 = sp8[0]; + } else { + arg0->unk06 = sp8[1]; + } +} + +static s32 fn_1_94A8(BssCData *arg0) { + Vec sp14; + s16 spC[4]; + float sp8; + s32 var_r30; + s32 var_r29; + s32 var_r26; + BoardSpace *var_r31; + BoardSpace *var_r27; + BoardSpace *var_r28; + + BoardPlayerPosGet(arg0->unk01, &sp14); + var_r28 = NULL; + var_r26 = -1; + var_r30 = lbl_1_bss_6AC; + sp8 = 0.0f; + while (TRUE) { + var_r31 = BoardSpaceGet(1, var_r30); + if (lbl_1_bss_0->unk00_field0 == 0) { + var_r29 = var_r31->link[0]; + } else { + BoardSpaceLinkTargetListGet(1, var_r30, spC); + var_r29 = spC[0]; + } + var_r27 = BoardSpaceGet(1, var_r29); + if (!var_r27) { + var_r27 = var_r31; + break; + } + if (BoardVecMaxDistXZCheck(&var_r31->pos, &sp14, 200.0f)) { + if (BoardVecMaxDistXZCheck(&var_r31->pos, &sp14, 100.0f)) { + break; + } + if (var_r28) { + var_r31 = var_r28; + break; + } else { + var_r28 = var_r31; + } + } + var_r26 = var_r30; + var_r30 = var_r29; + } + if (var_r31->flag & 8) { + return 1; + } else { + return 0; + } +} + +static void fn_1_95F4(BssCData *arg0) { + HsfObject *var_r30; + ModelData *temp_r29; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f30; + float var_f31; + s16 var_r28; + + temp_f30 = BoardModelMotionMaxTimeGet(arg0->unk04); + if (lbl_1_bss_0->unk00_field0 == 0) { + BoardModelMotionTimeSet(arg0->unk04, temp_f30); + BoardModelMotionSpeedSet(arg0->unk04, -0.18f); + } else { + BoardModelMotionTimeSet(arg0->unk04, 0.0f); + BoardModelMotionSpeedSet(arg0->unk04, 0.18f); + } + BoardPlayerPosGet(arg0->unk01, &sp14); + var_r28 = BoardModelIDGet(arg0->unk04); + temp_r29 = &Hu3DData[var_r28]; + Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0); + var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1"); + sp20.x = var_r30->data.curr.pos.x; + sp20.y = var_r30->data.curr.pos.y; + sp20.z = var_r30->data.curr.pos.z; + var_f31 = 0.0f; + while (TRUE) { + Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0); + var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1"); + sp2C.x = var_r30->data.curr.pos.x; + sp2C.y = var_r30->data.curr.pos.y; + sp2C.z = var_r30->data.curr.pos.z; + PSVECSubtract(&sp2C, &sp20, &sp8); + var_f31 += PSVECMag(&sp8); + if (BoardVecMinDistCheck(&sp14, &sp2C, 150.0f)) { + break; + } + sp20 = sp2C; + temp_r29->unk_64 += temp_r29->unk_68; + } + arg0->unk10 = var_f31; +} + +static void fn_1_97F4(void) { + Bss20Work *temp_r30; + Bss20Data *var_r31; + s32 i; + + if (lbl_1_bss_20) { + return; + } + lbl_1_bss_20 = omAddObjEx(boardObjMan, 0x101, 1, 0, -1, fn_1_9920); + temp_r30 = OM_GET_WORK_PTR(lbl_1_bss_20, Bss20Work); + temp_r30->unk00_field0 = 0; + temp_r30->unk04 = HuMemDirectMallocNum(HEAP_SYSTEM, 20 * sizeof(Bss20Data), MEMORY_DEFAULT_NUM); + var_r31 = temp_r30->unk04; + for (i = 0; i < 20; var_r31++, i++) { + var_r31->unk00 = -1; + var_r31->unk02 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 7), NULL, 0); + BoardModelVisibilitySet(var_r31->unk02, 0); + } +} + +static void fn_1_98EC(void) { + if (lbl_1_bss_20) { + OM_GET_WORK_PTR(lbl_1_bss_20, Bss20Work)->unk00_field0 = 1; + } +} + +static void fn_1_9920(omObjData *arg0) { + Bss20Work *temp_r31; + s32 i; + + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_20, Bss20Work); + if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + for (i = 0; i < 20; i++) { + BoardModelKill(temp_r31->unk04[i].unk02); + } + HuMemDirectFree(temp_r31->unk04); + lbl_1_bss_20 = 0; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (lbl_1_bss_640 < 10.0f) { + return; + } + if (temp_r31->unk01 != 0) { + temp_r31->unk01--; + } else { + temp_r31->unk01 = 2; + fn_1_9A24(temp_r31); + } + fn_1_9BBC(temp_r31); +} + +static void fn_1_9A24(Bss20Work *arg0) { + Bss20Data *temp_r31; + Mtx sp8; + s32 i; + s32 j; + + if (lbl_1_bss_6B1 != 0) { + PSMTXTrans(sp8, 0.0f, 50.0f, -100.0f); + } else { + PSMTXTrans(sp8, 0.0f, 70.0f, -100.0f); + } + PSMTXConcat(lbl_1_bss_678, sp8, sp8); + for (i = 0; i < 4; i++) { + for (j = 0; j < 20; j++) { + temp_r31 = &arg0->unk04[j]; + if (temp_r31->unk00 == -1) { + temp_r31->unk00 = 10; + Hu3DMtxTransGet(sp8, &temp_r31->unk08); + PSVECAdd(&lbl_1_bss_654, &temp_r31->unk08, &temp_r31->unk08); + temp_r31->unk14.x = 0.0f; + temp_r31->unk14.y = 0.0f; + temp_r31->unk14.z = 0.001f; + temp_r31->unk04 = 1.0f; + BoardModelVisibilitySet(temp_r31->unk02, 1); + BoardModelLayerSet(temp_r31->unk02, 2); + BoardModelPosSetV(temp_r31->unk02, &temp_r31->unk08); + break; + } + } + } +} + +static void fn_1_9BBC(Bss20Work *arg0) { + Bss20Data *temp_r31; + s32 i; + + for (i = 0; i < 20; i++) { + temp_r31 = &arg0->unk04[i]; + if (temp_r31->unk00 == -1) { + continue; + } + temp_r31->unk00--; + if (temp_r31->unk00 == 0) { + temp_r31->unk00 = -1; + BoardModelVisibilitySet(temp_r31->unk02, 0); + } else { + if (temp_r31->unk00 <= 3) { + temp_r31->unk04 = sin(30.0f * temp_r31->unk00 * M_PI / 180.0); + } + PSVECAdd(&temp_r31->unk08, &temp_r31->unk14, &temp_r31->unk08); + BoardModelMtxSet(temp_r31->unk02, &lbl_1_bss_678); + BoardModelPosSetV(temp_r31->unk02, &temp_r31->unk08); + BoardModelScaleSet(temp_r31->unk02, temp_r31->unk04, temp_r31->unk04, temp_r31->unk04); + } + } +} diff --git a/src/game/board/battle.c b/src/game/board/battle.c index 94630e3a..73b9d29a 100755 --- a/src/game/board/battle.c +++ b/src/game/board/battle.c @@ -2,6 +2,7 @@ #include "game/audio.h" #include "game/chrman.h" #include "game/data.h" +#include "game/flag.h" #include "game/gamework.h" #include "game/object.h" #include "game/objsub.h" @@ -84,7 +85,7 @@ static omObjData *battleObj; static Process *battleProc; static const s8 battleCoinTbl[] = { - 0x05, 0x0A, 0x14, 0x1E, 0x32 + 5, 10, 20, 30, 50 }; static float battleCursorPosTbl[] = { @@ -133,7 +134,7 @@ void BoardBattleExec(s32 player, s32 space) { } static void DestroyBattle(void) { - HuDataDirClose(0x10000); + HuDataDirClose(DATADIR_BBATTLE); battleProc = NULL; } @@ -201,13 +202,13 @@ static void ExecBattle(void) { HuPrcVSleep(); } _ClearFlag(0x1001C); - HuPrcSleep(0x3C); + HuPrcSleep(60); HuPrcEnd(); } HuAudFXPlay(0x34A); - omVibrate(GWSystem.player_curr, 0xC, 6, 6); - BoardAudSeqPause(0, 1, 0x1F4); - temp_r22 = BoardDataDirReadAsync(0x10000); + omVibrate(GWSystem.player_curr, 12, 6, 6); + BoardAudSeqPause(0, 1, 500); + temp_r22 = BoardDataDirReadAsync(DATADIR_BBATTLE); BoardCameraViewSet(3); BoardCameraMotionWait(); BoardPlayerMotBlendSet(currPlayer, 0, 0xF); @@ -217,7 +218,7 @@ static void ExecBattle(void) { BoardDataAsyncWait(temp_r22); SetBattleCoinValue(); BoardMusStart(1, 4, 0x7F, 0); - omVibrate(GWSystem.player_curr, 0xC, 6, 6); + omVibrate(GWSystem.player_curr, 12, 6, 6); InitExplode(); while (CheckExplode() == 0) { HuPrcVSleep(); @@ -235,13 +236,13 @@ static void ExecBattle(void) { } } if (var_r26 == 0) { - BoardWinCreate(2, 0x20001, 1); + BoardWinCreate(2, MAKE_MESSID(2, 1), 1); BoardWinWait(); BoardWinKill(); var_r27 = 1; } else { HuAudFXPlay(0x4F); - BoardWinCreate(2, 0x20000, 1); + BoardWinCreate(2, MAKE_MESSID(2, 0), 1); BoardWinWait(); BoardWinKill(); SetBattleBombState(3); @@ -260,7 +261,7 @@ static void ExecBattle(void) { var_r23 = 1; } var_r25 = var_r23; - HuPrcSleep(0x3C); + HuPrcSleep(60); } else { var_r25 = -1; } @@ -279,15 +280,15 @@ static void ExecBattle(void) { BoardMusVolPanSet(0, 0, 1); BoardAudSeqPause(0, 0, 1); if (var_r27 == 0) { - HuDataDirClose(0x70000); - HuDataDirClose(0x20000); + HuDataDirClose(DATADIR_BOARD); + HuDataDirClose(DATADIR_BGUEST); HuDataDirClose(sp8[GWBoardGet()]); HuPrcSleep(2); temp_r28 = battleMGList[battleMGIdx[mgChoice]]; GWMGAvailSet(temp_r28); GWSystem.mg_next = temp_r28 - 401; if (_CheckFlag(0xB)) { - var_r24 = 0x140000; + var_r24 = DATADIR_INST; } else { var_r24 = mgInfoTbl[temp_r28 - 401].data_dir; } @@ -375,12 +376,12 @@ static void TakeCoins(void) { HuAudFXPlay(0xF); sprintf(totalCoinStr, "%d", var_r30); if (var_r30 != coinTakeMax * 4) { - var_r24 = 0x20003; + var_r24 = MAKE_MESSID(2, 3); } else { - var_r24 = 0x20002; + var_r24 = MAKE_MESSID(2, 2); } BoardWinCreate(2, var_r24, 1); - BoardWinInsertMesSet((u32) totalCoinStr, 0); + BoardWinInsertMesSet(MAKE_MESSID_PTR(totalCoinStr), 0); BoardWinWait(); BoardWinKill(); } @@ -403,7 +404,7 @@ static void InitExplode(void) { temp_r31->unk00_field0 = 0; temp_r31->unk00_field1 = 0; temp_r31->unk01 = 0x10; - temp_r31->unk02 = BoardModelCreate(0x20026, NULL, 0); + temp_r31->unk02 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 38), NULL, 0); BoardModelLayerSet(temp_r31->unk02, 2); explodeObj->trans.x = sp14.x; explodeObj->trans.y = sp14.y - 100.0f; @@ -411,7 +412,7 @@ static void InitExplode(void) { BoardModelPosSet(temp_r31->unk02, explodeObj->trans.x, explodeObj->trans.y, explodeObj->trans.z); BoardModelMotionStart(temp_r31->unk02, 0, 0x40000001); for (i = 0; i < 4; i++) { - temp_r31->unk04[i] = BoardModelCreate(0x70066, NULL, 0); + temp_r31->unk04[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 102), NULL, 0); sp8.x = sp14.x + sp20[i][0]; sp8.y = sp14.y; sp8.z = sp14.z + sp20[i][1]; @@ -534,7 +535,7 @@ static void CreateBattleMain(void) { } HuSprGrpPosSet(temp_r31->unk08, 288.0f, 240.0f); battleObj->trans.x = -308.0f; - BoardFilterFadeInit(0x1E, 0xA0); + BoardFilterFadeInit(30, 0xA0); } static void UpdateBattleMain(omObjData *arg0) { @@ -614,7 +615,7 @@ static void ShowBattleGame(BattleWork *arg0, omObjData *arg1) { float var_r29; if (arg0->unk01 == 0) { - if (BoardFilterFadePauseCheck() != 0) { + if (BoardFilterFadePauseCheck()) { arg0->unk01 = 1; arg1->trans.z = 0.01f; arg1->trans.y = 0.0f; @@ -711,7 +712,7 @@ static void ShowBattleCoin(BattleWork *arg0, omObjData *arg1) { while (var_f30 > 180.0f) { var_f30 -= 180.0f; } - temp_f29 = 0.8999999761581421 + sin(var_f30 * M_PI / 180.0); + temp_f29 = 0.9f + sin(var_f30 * M_PI / 180.0); HuSprScaleSet(arg0->unk08, 1, temp_f29, temp_f29); } @@ -750,7 +751,7 @@ static void VibratePad(BattleWork *arg0, omObjData *arg1) { s32 i; for (i = 0; i < 4; i++) { - omVibrate(i, 0xC, 0xC, 0); + omVibrate(i, 12, 0xC, 0); } arg0->unk00_field1 = 8; } diff --git a/src/game/board/pause.c b/src/game/board/pause.c index ebe23b90..84b84b4c 100755 --- a/src/game/board/pause.c +++ b/src/game/board/pause.c @@ -114,15 +114,15 @@ static float padConfigPosTbl[4][2] = { }; static s32 boardLogoTbl[] = { - 0x00070057, - 0x00070058, - 0x00070059, - 0x0007005A, - 0x0007005B, - 0x0007005C, - 0x00070057, - 0x0007005D, - 0x0007005E + DATA_MAKE_NUM(DATADIR_BOARD, 87), + DATA_MAKE_NUM(DATADIR_BOARD, 88), + DATA_MAKE_NUM(DATADIR_BOARD, 89), + DATA_MAKE_NUM(DATADIR_BOARD, 90), + DATA_MAKE_NUM(DATADIR_BOARD, 91), + DATA_MAKE_NUM(DATADIR_BOARD, 92), + DATA_MAKE_NUM(DATADIR_BOARD, 87), + DATA_MAKE_NUM(DATADIR_BOARD, 93), + DATA_MAKE_NUM(DATADIR_BOARD, 94) }; static float turnDigitPosTbl[] = { @@ -130,14 +130,14 @@ static float turnDigitPosTbl[] = { }; static s32 boxMdlTbl[] = { - 0x00080008, - 0x00080009, - 0x0008000A, - 0x0008000B, - 0x0008000C, - 0x0008000D, - 0x0008000E, - 0x0008000F + DATA_MAKE_NUM(DATADIR_BPAUSE, 8), + DATA_MAKE_NUM(DATADIR_BPAUSE, 9), + DATA_MAKE_NUM(DATADIR_BPAUSE, 10), + DATA_MAKE_NUM(DATADIR_BPAUSE, 11), + DATA_MAKE_NUM(DATADIR_BPAUSE, 12), + DATA_MAKE_NUM(DATADIR_BPAUSE, 13), + DATA_MAKE_NUM(DATADIR_BPAUSE, 14), + DATA_MAKE_NUM(DATADIR_BPAUSE, 15) }; void BoardPauseStart(void) { @@ -168,7 +168,7 @@ static void PauseExit(void) { DeletePauseScreen(); DeletePauseControlWin(); BoardEventFlagReset(); - HuDataDirClose(0x80000); + HuDataDirClose(DATADIR_BPAUSE); pausePad = -1; omSysPauseCtrl(0); if (GWMGExplainGet()) { @@ -197,8 +197,8 @@ static void PauseProcess(void) { pauseQuitF = 0; mainScreenF = 1; - BoardFilterFadeInit(0x1E, 0xA0); - temp_r31 = BoardDataDirReadAsync(0x80000); + BoardFilterFadeInit(30, 0xA0); + temp_r31 = BoardDataDirReadAsync(DATADIR_BPAUSE); BoardRollWinDispSet(0); BoardDiceDigit2DShowSet(0); BoardStatusItemSet(0); @@ -219,12 +219,12 @@ static void PauseProcess(void) { DeletePauseScreen(); DeletePauseControlWin(); if (pauseQuitF != 0) { - HuPrcSleep(0x14); + HuPrcSleep(20); WipeColorSet(0, 0, 0); BoardKill(); } else { - BoardFilterFadeOut(0x1E); - HuPrcSleep(0x1E); + BoardFilterFadeOut(30); + HuPrcSleep(30); } HuPrcEnd(); } @@ -262,28 +262,28 @@ void CreatePauseScreen(void) { temp_r27->trans.y = -32.0f + boxPosTbl[cursorPos][1]; pauseCursorPos = HuSprGrpCreate(2); HuSprGrpPosSet(pauseCursorPos, 0.0f, 0.0f); - BoardSpriteCreate(0x70055, 0x2BC, 0, &sp8); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BOARD, 85), 700, 0, &sp8); HuSprGrpMemberSet(pauseCursorPos, 0, sp8); HuSprZRotSet(pauseCursorPos, 0, 45.0f); HuSprAttrSet(pauseCursorPos, 0, 4); HuSprAttrSet(pauseCursorPos, 0, 8); HuSprPosSet(pauseCursorPos, 0, temp_r27->trans.x, temp_r27->trans.y); - BoardSpriteCreate(0x80007, 0x2EE, 0, &sp8); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BPAUSE, 7), 750, 0, &sp8); HuSprGrpMemberSet(pauseCursorPos, 1, sp8); HuSprAttrSet(pauseCursorPos, 1, 4); HuSprAttrSet(pauseCursorPos, 1, 8); pauseSprGrp = HuSprGrpCreate(7); HuSprGrpPosSet(pauseSprGrp, 0.0f, 0.0f); - BoardSpriteCreate(boardLogoTbl[GWBoardGet()], 0x384, 0, &sp8); + BoardSpriteCreate(boardLogoTbl[GWBoardGet()], 900, 0, &sp8); HuSprGrpMemberSet(pauseSprGrp, 0, sp8); HuSprPosSet(pauseSprGrp, 0, 288.0f, 120.0f); HuSprAttrSet(pauseSprGrp, 0, 4); HuSprAttrSet(pauseSprGrp, 0, 8); - BoardSpriteCreate(0x80005, 0x384, 0, &sp8); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BPAUSE, 5), 900, 0, &sp8); HuSprGrpMemberSet(pauseSprGrp, 1, sp8); HuSprPosSet(pauseSprGrp, 1, 288.0f, 302.0f); HuSprAttrSet(pauseSprGrp, 1, 8); - BoardSpriteCreate(0x80004, 0x320, 0, &sp8); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BPAUSE, 4), 800, 0, &sp8); HuSprGrpMemberSet(pauseSprGrp, 2, sp8); HuSprZRotSet(pauseSprGrp, 2, -30.0f); HuSprPosSet(pauseSprGrp, 2, 87.0f, 245.0f); @@ -301,32 +301,32 @@ void CreatePauseScreen(void) { HuSprBankSet(pauseSprGrp, 2, 1); } for (i = 0; i < 4; i++) { - BoardSpriteCreate(0x80006, 0x320, 0, &sp8); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BPAUSE, 6), 800, 0, &sp8); HuSprGrpMemberSet(pauseSprGrp, i + 3, sp8); HuSprPosSet(pauseSprGrp, i + 3, turnDigitPosTbl[i], 301.0f); HuSprAttrSet(pauseSprGrp, i + 3, 8); HuSprAttrSet(pauseSprGrp, i + 3, 1); } - padConfigSprGrp = HuSprGrpCreate(0xD); + padConfigSprGrp = HuSprGrpCreate(13); HuSprGrpPosSet(padConfigSprGrp, 0.0f, 0.0f); for (i = 0; i < 4; i++) { - BoardSpriteCreate(0x80000, 0x38E, 0, &sp8); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BPAUSE, 0), 910, 0, &sp8); HuSprGrpMemberSet(padConfigSprGrp, i, sp8); HuSprAttrSet(padConfigSprGrp, i, 8); HuSprAttrSet(padConfigSprGrp, i, 1); - BoardSpriteCreate(0x80001, 0x2BC, 0, &sp8); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BPAUSE, 1), 700, 0, &sp8); HuSprGrpMemberSet(padConfigSprGrp, i + 4, sp8); HuSprAttrSet(padConfigSprGrp, i + 4, 8); HuSprAttrSet(padConfigSprGrp, i + 4, 1); - BoardSpriteCreate(0x80002, 0x320, 0, &sp8); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BPAUSE, 2), 800, 0, &sp8); HuSprGrpMemberSet(padConfigSprGrp, i + 8, sp8); HuSprAttrSet(padConfigSprGrp, i + 8, 8); HuSprAttrSet(padConfigSprGrp, i + 8, 1); } - BoardSpriteCreate(0x80003, 0x3E8, 0, &sp8); - HuSprGrpMemberSet(padConfigSprGrp, 0xC, sp8); - HuSprAttrSet(padConfigSprGrp, 0xC, 4); - HuSprDrawNoSet(padConfigSprGrp, 0xC, 0x40); + BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BPAUSE, 3), 1000, 0, &sp8); + HuSprGrpMemberSet(padConfigSprGrp, 12, sp8); + HuSprAttrSet(padConfigSprGrp, 12, 4); + HuSprDrawNoSet(padConfigSprGrp, 12, 0x40); CreatePadConfigSprite(); ShowPadConfigSprite(0); hostOldLayer = BoardModelLayerGet(hostMdl); @@ -551,15 +551,15 @@ static void PauseConfigObjFunc(omObjData *arg0) { switch (boxState[5]) { case 0: GWSystem.mess_speed = 2; - GWSystem.mess_delay = 0x30; + GWSystem.mess_delay = 48; break; case 1: GWSystem.mess_speed = 1; - GWSystem.mess_delay = 0x20; + GWSystem.mess_delay = 32; break; case 2: GWSystem.mess_speed = 0; - GWSystem.mess_delay = 0x10; + GWSystem.mess_delay = 16; break; } } @@ -608,14 +608,14 @@ static void UpdatePauseText(s32 arg0) { switch (arg0) { case 0: - HuWinMesSet(settingsWin, 0x10001C); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 28)); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { if (i == GWPlayer[j].port) { if (GWPlayer[j].com) { - var_r28 = 0x10001E; + var_r28 = MAKE_MESSID(16, 30); } else { - var_r28 = 0x10001D; + var_r28 = MAKE_MESSID(16, 29); } HuWinInsertMesSet(settingsWin, var_r28, i); break; @@ -625,66 +625,66 @@ static void UpdatePauseText(s32 arg0) { break; case 1: if (boxState[arg0] != 0) { - HuWinMesSet(settingsWin, 0x100021); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 33)); } else { - HuWinMesSet(settingsWin, 0x100022); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 34)); } break; case 2: if (boxState[arg0] != 0) { - HuWinMesSet(settingsWin, 0x100023); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 35)); } else { - HuWinMesSet(settingsWin, 0x100024); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 36)); } break; case 3: switch (boxState[arg0]) { case 0: - HuWinMesSet(settingsWin, 0x100026); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 38)); break; case 1: - HuWinMesSet(settingsWin, 0x100025); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 37)); break; case 2: - HuWinMesSet(settingsWin, 0x100027); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 39)); break; } break; case 4: if (boxState[arg0] != 0) { - HuWinMesSet(settingsWin, 0x100028); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 40)); } else { - HuWinMesSet(settingsWin, 0x100029); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 41)); } break; case 5: switch (boxState[arg0]) { case 0: - HuWinMesSet(settingsWin, 0x10002C); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 44)); break; case 1: - HuWinMesSet(settingsWin, 0x10002B); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 43)); break; case 2: - HuWinMesSet(settingsWin, 0x10002A); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 42)); break; } break; case 6: switch (boxState[arg0]) { case 0: - HuWinMesSet(settingsWin, 0x10002F); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 47)); break; case 1: - HuWinMesSet(settingsWin, 0x10002D); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 45)); break; case 2: - HuWinMesSet(settingsWin, 0x10002E); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 46)); break; } break; case 7: - HuWinMesSet(settingsWin, 0x100030); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 48)); break; } } @@ -699,16 +699,16 @@ static void InitPauseQuit(omObjData *arg0, ConfigWork *arg1) { HuPrcSetStat(quitProcess, 0xC); HuPrcDestructorSet2(quitProcess, DeletePauseQuit); arg1->unk01 = 1; - arg1->unk06 = 0xA; + arg1->unk06 = 10; HuSprAttrSet(pauseCursorPos, 0, 4); HuSprAttrSet(pauseCursorPos, 1, 4); break; case 1: if (quitWin != -1 && HuWinStatGet(quitWin) == 3) { if (HuWinChoiceNowGet(quitWin) != 0) { - HuWinMesSet(settingsWin, 0x100033); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 51)); } else { - HuWinMesSet(settingsWin, 0x100032); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 50)); } } if (!quitProcess) { @@ -741,7 +741,7 @@ static void PauseQuitProcess(void) { float sp10[2]; float sp8[2]; - HuWinMesMaxSizeGet(1, sp8, 0x100031); + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(16, 49)); sp10[0] = -10000.0f; sp10[1] = 140.0f; quitWin = HuWinExCreate(sp10[0], sp10[1], sp8[0], sp8[1], -1); @@ -749,10 +749,10 @@ static void PauseQuitProcess(void) { temp_r31->active_pad = (1 << pausePad); HuWinExAnimIn(quitWin); HuWinMesSpeedSet(quitWin, 0); - HuWinMesSet(quitWin, 0x100031); + HuWinMesSet(quitWin, MAKE_MESSID(16, 49)); HuWinMesWait(quitWin); if (HuWinChoiceGet(quitWin, 0) == 1) { - HuPrcSleep(0x3C); + HuPrcSleep(60); pauseQuitF = 1; _SetFlag(0x1001B); } @@ -764,7 +764,7 @@ static void DeletePauseQuit(void) { HuWinExCleanup(quitWin); quitWin = -1; } - HuDataDirClose(0x80000); + HuDataDirClose(DATADIR_BPAUSE); quitProcess = NULL; } @@ -807,7 +807,7 @@ static void CreatePadConfig(omObjData *arg0, ConfigWork *arg1) { arg0->rot.x = 576.0f; arg0->rot.y = 112.0f; arg0->rot.z = (32.0f - arg0->rot.x) / 20.0f; - arg1->unk07 = 0x14; + arg1->unk07 = 20; ShowPadConfigSprite(1); HuSprGrpPosSet(padConfigSprGrp, arg0->rot.x, arg0->rot.y); arg1->unk04 = 0; @@ -864,7 +864,7 @@ static void CursorMovePadConfig(omObjData *arg0, ConfigWork *arg1) { s32 temp_r29; u32 temp_r30; - HuWinMesSet(settingsWin, 0x10001F); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 31)); temp_r30 = HuPadDStkRep[pausePad] | HuPadBtnDown[pausePad]; temp_r29 = CheckPort(arg1->unk04); if (temp_r30 == 0x100) { @@ -910,9 +910,9 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) { u32 var_r30; var_r30 = 0; - if (HuPadStkX[pausePad] < -0x14) { + if (HuPadStkX[pausePad] < -20) { var_r30 |= 1; - } else if (HuPadStkX[pausePad] > 0x14) { + } else if (HuPadStkX[pausePad] > 20) { var_r30 |= 2; } temp_r29 = CheckPort(arg1->unk04); @@ -921,10 +921,10 @@ static void ChangeDiffPadConfig(omObjData *arg0, ConfigWork *arg1) { } else { var_r27 = 3; } - HuWinMesSet(settingsWin, 0x100020); + HuWinMesSet(settingsWin, MAKE_MESSID(16, 32)); if (var_r30 != 0) { if (arg1->unk0C != 0 && arg1->unk0C == var_r30) { - if (arg1->unk09++ < 0xA) { + if (arg1->unk09++ < 10) { return; } } else { @@ -1061,7 +1061,7 @@ static s32 UpdatePauseBox(omObjData *arg0, ConfigWork *arg1, s32 arg2) { } var_f29 = arg0->rot.x; arg0->rot.y = (var_f30 - var_f29) / 30.0f; - arg1->unk07 = 0x1E; + arg1->unk07 = 30; arg1->unk01 = 2; } break; @@ -1161,7 +1161,7 @@ static s32 UpdatePauseBoxExt(omObjData *arg0, ConfigWork *arg1, s32 arg2) { } var_f29 = arg0->rot.x; arg0->rot.y = (var_f30 - var_f29) / 30.0f; - arg1->unk07 = 0x1E; + arg1->unk07 = 30; arg1->unk01 = 2; } break; @@ -1280,7 +1280,7 @@ static void CreatePauseControlWin(void) { float var_f30; u32 var_r31; - var_r31 = 0x100035; + var_r31 = MAKE_MESSID(16, 53); HuWinMesMaxSizeGet(1, sp8, var_r31); var_f31 = 152.0f; var_f30 = 280.0f; @@ -1290,9 +1290,9 @@ static void CreatePauseControlWin(void) { HuWinMesSet(settingsControlWin, var_r31); HuWinDispOff(settingsControlWin); if (GWBoardGet() == 7 || GWBoardGet() == 8) { - var_r31 = 0x100049; + var_r31 = MAKE_MESSID(16, 73); } else { - var_r31 = 0x100034; + var_r31 = MAKE_MESSID(16, 52); } HuWinMesMaxSizeGet(1, sp8, var_r31); var_f31 = -10000.0f; @@ -1418,7 +1418,7 @@ static void CreatePadConfigSprite(void) { break; } } - temp_f31 = i * 0x60 + 0xB2; + temp_f31 = i * 96 + 178; temp_f30 = 64.0f; temp_r28 = GWPlayer[j].character; temp_r27 = GWPlayer[j].diff; @@ -1434,7 +1434,7 @@ static void CreatePadConfigSprite(void) { HuSprPosSet(padConfigSprGrp, i + 4, temp_f31, temp_f30); HuSprPosSet(padConfigSprGrp, i + 8, temp_f31, temp_f30); } - HuSprPosSet(padConfigSprGrp, 0xC, 260.0f, 64.0f); + HuSprPosSet(padConfigSprGrp, 12, 260.0f, 64.0f); HuSprGrpPosSet(padConfigSprGrp, 0.0f, 0.0f); } @@ -1455,9 +1455,9 @@ static void ShowPadConfigSprite(s32 arg0) { } } if (arg0 != 0) { - HuSprAttrReset(padConfigSprGrp, 0xC, 4); + HuSprAttrReset(padConfigSprGrp, 12, 4); } else { - HuSprAttrSet(padConfigSprGrp, 0xC, 4); + HuSprAttrSet(padConfigSprGrp, 12, 4); } } From bf2751380ed39edc39e1a2bea259a81dc376184c Mon Sep 17 00:00:00 2001 From: Rainchus Date: Tue, 26 Mar 2024 09:06:18 -0500 Subject: [PATCH 091/106] condor.c decompiled, not linked yet --- src/REL/w03Dll/condor.c | 633 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 628 insertions(+), 5 deletions(-) diff --git a/src/REL/w03Dll/condor.c b/src/REL/w03Dll/condor.c index fc823ecd..e2089d9a 100644 --- a/src/REL/w03Dll/condor.c +++ b/src/REL/w03Dll/condor.c @@ -1,6 +1,6 @@ #include "REL/w03Dll.h" #include "game/data.h" - +#include "game/hsfman.h" //file is full of old names and old signatures...needs updating //is also missing half the functions in this TU @@ -11,6 +11,7 @@ void fn_1_3304(void); extern Process* lbl_1_bss_70; extern s8 lbl_1_bss_7C; extern s16 lbl_1_data_310; +extern char* lbl_1_data_34C[]; // #define MAKE_DATA_NUM(dir, file) (((dir) << 16)+(file)) // #define MAKE_DIR_NUM(dir) ((dir) << 16) @@ -318,7 +319,7 @@ void fn_1_3968(s32 arg0) { while (1) { temp_f31 = __OSs16tof32(&sp8); - sp24.y = temp_f28 + (lbl_1_rodata_154 * (lbl_1_rodata_158 * (temp_f31 * temp_f31))); + sp24.y = temp_f28 + (-0.08166667f * (0.75f * (temp_f31 * temp_f31))); PSVECAdd(&sp30, &sp24, &sp30); temp_f30 = fn_8005FBE8(&sp3C, &sp30); if (temp_f30 < lbl_1_rodata_11C) { @@ -332,7 +333,7 @@ void fn_1_3968(s32 arg0) { var_r29 = 1; } } else { - fn_8005FF28(&spC, temp_f27, lbl_1_rodata_15C); + fn_8005FF28(&spC, temp_f27, 5.142857f); fn_80063374(arg0, spC); } @@ -358,7 +359,7 @@ void fn_1_3968(s32 arg0) { sp18.y = 180.0f; sp18.z = 0.0f; - fn_8005DB6C(lbl_1_data_310, &sp18, 0, lbl_1_rodata_160, lbl_1_rodata_118, 0x150); + fn_8005DB6C(lbl_1_data_310, &sp18, 0, 4000.0f, lbl_1_rodata_118, 0x150); for (var_r28 = 0, sp8 = 0; ; sp8++) { if (var_r28 == 0) { @@ -504,4 +505,626 @@ void fn_1_4354(s32 arg0) { return; } fn_80071328(); -} \ No newline at end of file +} + +f32 lbl_1_bss_80[20][2]; + +typedef struct w03StructUnk3 { +/* 0x00 */ s16 unk_00; +/* 0x02 */ s16 model; +/* 0x04 */ f32 unk_04; +/* 0x08 */ Vec unk_08; +/* 0x14 */ Vec unk_14; +} w03StructUnk3; + +typedef struct w03StructUnk2 { +/* 0x00 */ struct { + u8 unkbit_00 : 1; + u8 unkbit_01 : 2; + u8 unkbit_03 : 1; + u8 unkbit_04 : 1; + }; + s8 unk_01; + s8 unk_02; + u8 unk_03; + s16 model; + char unk_06[2]; + w03StructUnk3* unk_08; +} w03StructUnk2; + +void fn_1_4424(w03StructUnk2* arg0) { + Mtx sp108; + Mtx spD8; + Mtx spA8; + Mtx sp78; + Point3d sp6C; + Point3d sp60; + Vec sp54; + Vec sp48; + Point3d sp3C; + Vec sp30; + Vec sp24; + Vec sp18; + s32 sp14; + f32 temp; + s16 spC; + s16 sp8; + f32 temp_f30; + s16 temp_r23; + s16 var_r25; + f32 sp10; + f32 sp10_2; + s16 i; + char* temp_r22; + w03StructUnk3* temp_r27; + ModelData* temp_r28; + + memset(&lbl_1_bss_80, 0, 0xA0); + sp48.x = sp54.x = 0.0f; + sp48.y = sp54.y = 0.0f; + sp48.z = sp54.z = 0.0f; + sp14 = 0; + BoardSpaceFlagPosGet(0, 0x8000U, &sp6C); + BoardSpaceFlagPosGet(0, 0x8000U, &sp60); + if (lbl_1_bss_0->unk1 != 0) { + PSVECSubtract(&sp6C, &sp60, &sp3C); + } else { + PSVECSubtract(&sp60, &sp6C, &sp3C); + } + sp10_2 = 180.0f * (atan2(-sp3C.x, -sp3C.z) / 3.141592653589793); + BoardModelMotionStart(lbl_1_data_314, 0, 0U); + BoardModelMotionSpeedSet(lbl_1_data_314, 8.0f); + HuPrcSleep(1); + temp_r23 = BoardModelIDGet(lbl_1_data_314); + temp_r28 = &Hu3DData[temp_r23]; + temp_r22 = lbl_1_data_34C[lbl_1_bss_0->unk1]; + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_314), temp_r22, &sp48); + sp24.x = 0.0f; + sp24.y = 1.0f; + sp24.z = 0.0f; + for (i = var_r25 = 0; i < 20;) { + Hu3DMotionExec(temp_r23, temp_r28->unk_08, temp_r28->unk_64, 0); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_314), temp_r22, &sp54); + temp_r28->unk_64 = (f32) (temp_r28->unk_64 + temp_r28->unk_68); + if (temp_r28->unk_64 > 400.0f) { + break; + } + + if (var_r25 % 4 == 0 && ((s16) var_r25 != 0)) { + temp_r27 = &arg0->unk_08[i]; + temp_r27->unk_00 = 1; + temp_f30 = (0.5f - BoardRandFloat()) * 10; + OSf32tos16(&temp_f30, &sp8); + sp8 = (sp8 / 10) * 10; + OSs16tof32(&sp8, &temp_f30); + lbl_1_bss_80[i+1][0] = temp_f30; + lbl_1_bss_80[i+1][1] = temp_r28->unk_64; + sp30 = sp48; + sp18 = sp54; + BoardMTXCalcLookAt(spA8, &sp18, &sp24, &sp30); + PSMTXTranspose(spA8, spA8); + PSMTXRotRad(spD8, 0x7A, 0.017453292f * temp_f30); + PSMTXTrans(sp108, 0.0f, -350.0f, 0.0f); + PSMTXConcat(spD8, sp108, sp108); + PSMTXConcat(spA8, sp108, sp108); + PSMTXTrans(sp78, sp54.x, sp54.y, sp54.z); + PSMTXConcat(sp78, sp108, sp78); + Hu3DMtxTransGet(sp78, &temp_r27->unk_08); + BoardModelPosSetV(temp_r27->model, &temp_r27->unk_08); + BoardModelVisibilitySet(temp_r27->model, 1); + i++; + } + sp48 = sp54; + var_r25++; + } + arg0->unk_03 = i; +} + +void fn_1_48EC(s32 arg0) { + Point3d spC; + omObjData* obj; + s32 i; + w03StructUnk2* temp_r31; + w03StructUnk3* temp_r30; + + obj = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, fn_1_50D4); + lbl_1_bss_74 = obj; + temp_r31 = OM_GET_WORK_PTR(obj, w03StructUnk2); + temp_r31->unkbit_00 = 0; + temp_r31->unk_01 = 0; + temp_r31->unkbit_03 = 0; + temp_r31->unkbit_04 = 0; + temp_r31->unk_02 = -1; + temp_r31->unkbit_01 = arg0; + temp_r31->unk_08 = HuMemDirectMallocNum(HEAP_SYSTEM, 0xA00, 0x10000000U); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[2]), "coin", &spC); + temp_r31->model = BoardModelCreate(0x770007, NULL, 0); + BoardModelVisibilitySet(temp_r31->model, 0); + BoardModelPosSetV(temp_r31->model, &spC); + BoardModelLayerSet(temp_r31->model, 2U); + memset(temp_r31->unk_08, 0, 0xA00U); + + for (i = 0; i < 0x50; i++) { + temp_r30 = &temp_r31->unk_08[i]; + temp_r30->model = BoardModelCreate(0x70009, 0, 1); + BoardModelVisibilitySet(temp_r30->model, 0); + BoardModelMotionStart(temp_r30->model, 0, 0x40000001U); + } + + fn_1_4424(temp_r31); +} + +extern omObjData* lbl_1_bss_74; + +typedef struct w03UnkStruct4 { + /* 0x00 */ struct { + u8 unk00_bit0 : 1; + }; +} w03UnkStruct4; + +void fn_1_4A9C(void) { + ((w03UnkStruct4*)&lbl_1_bss_74->work[0])->unk00_bit0 = 1; +} + +void fn_1_4ABC(w03StructUnk2* arg0) { + Point3d sp8; + f32 temp_f31; + w03StructUnk3* temp_r31; + s32 i; + + //reg alloc hack + (void)i; + (void)i; + + BoardModelPosGet(lbl_1_data_310, &sp8); + sp8.y += lbl_1_rodata_180; + + for (i = 0; i < arg0->unk_03; i++) { + temp_r31 = &arg0->unk_08[i]; + if (temp_r31->unk_00 == 1) { + if (BoardVecMinDistCheck(&sp8, &temp_r31->unk_08, lbl_1_rodata_184) != 0) { + temp_r31->unk_00 = -1; + BoardModelVisibilitySet(temp_r31->model, 0); + CharModelLayerSetAll(2); + CharModelCoinEffectCreate(1, &temp_r31->unk_08); + BoardPlayerCoinsAdd((arg0->unk_00 >> 5) & 3, 1); + HuAudFXPlay(7); + } + BoardModelPosSetV(temp_r31->model, &temp_r31->unk_08); + } + } + + BoardModelPosGet(lbl_1_data_310, &sp8); + + for (i = arg0->unk_03; i < 0x50; i++) { + temp_r31 = &arg0->unk_08[i]; + if (temp_r31->unk_00 == 1) { + temp_r31->unk_04 += lbl_1_rodata_168; + temp_f31 = lbl_1_rodata_188 * (temp_r31->unk_04 * temp_r31->unk_04); + PSVECAdd(&temp_r31->unk_14, &temp_r31->unk_08, &temp_r31->unk_08); + temp_r31->unk_08.y += lbl_1_rodata_18C * temp_f31; + if (temp_r31->unk_08.y < lbl_1_rodata_190) { + temp_r31->unk_00 = -1; + BoardModelVisibilitySet(temp_r31->model, 0); + } else if (BoardVecMinDistCheck(&sp8, &temp_r31->unk_08, lbl_1_rodata_184) != 0) { + temp_r31->unk_00 = -1; + BoardModelVisibilitySet(temp_r31->model, 0); + BoardPlayerCoinsAdd((arg0->unk_00 >> 5) & 3, 1); + CharModelLayerSetAll(2); + CharModelCoinEffectCreate(1, &temp_r31->unk_08); + HuAudFXPlay(7); + } else { + BoardModelPosSetV(temp_r31->model, &temp_r31->unk_08); + } + } + } +} + + +extern omObjData* lbl_1_bss_74; + +s32 fn_1_4D0C(w03StructUnk3** arg0, s16* arg1) { + w03StructUnk2* temp_r31; + + if (!(lbl_1_bss_74)) { + return 0; + } + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_74, w03StructUnk2); + *arg0 = temp_r31->unk_08; + *arg1 = temp_r31->unk_03; + return 1; +} + +void fn_1_4D60(w03StructUnk2* arg0) { + Point3d sp8; + f32 temp_f31; + f32 temp_f30; + s32 i; + s32 j; + w03StructUnk3* temp_r31; + + if (arg0->unk_02 == 1) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[2]), "coin", &sp8); + for (i = 0; i < 5; i++) { + for (j = arg0->unk_03; j < 0x50; j++) { + temp_r31 = &arg0->unk_08[j]; + if (temp_r31->unk_00 == 0) { + temp_r31->unk_00 = 1; + temp_f31 = 360.0f * BoardRandFloat(); + temp_f30 = 5.0f * BoardRandFloat(); + temp_r31->unk_14.x = temp_f30 * sin((3.141592653589793 * temp_f31) / 180.0); + temp_r31->unk_14.y = 50.0f + (20.0f * BoardRandFloat()); + temp_r31->unk_14.z = temp_f30 * cos((3.141592653589793 * temp_f31) / 180.0); + temp_r31->unk_08.x = sp8.x; + temp_r31->unk_08.y = sp8.y; + temp_r31->unk_08.z = sp8.z; + BoardModelVisibilitySet(temp_r31->model, 1); + BoardModelMotionStart(temp_r31->model, 0, 0x40000001); + break; + } + } + } + } +} + +void fn_1_4F24(w03StructUnk2* arg0) { + s32 var_r30 = 0; + s32 sp8[4] = {5, 10, 30, 40}; + s32 temp_r29; + s32 temp_r28; + + if (arg0->unk_02 == -1) { + if (GWTeamGet()) { + if (GWPlayer[arg0->unkbit_01].rank == 0) { + var_r30 = 5; + } else if (GWPlayer[arg0->unkbit_01].rank == 1) { + var_r30 = 20; + } + } else { + var_r30 = sp8[GWPlayer[arg0->unkbit_01].rank]; + } + temp_r29 = BoardRandMod(100); + temp_r28 = BoardRandMod(100); + if (temp_r29 < var_r30) { + if (temp_r28 < 30) { + arg0->unk_02 = 2; + } else { + arg0->unk_02 = 1; + } + } else { + arg0->unk_02 = 0; + } + if (arg0->unk_02 != 0) { + BoardModelMotionShiftSet(lbl_1_bss_C[2], 0, 0, 101.0f, 0); + } + } +} + +void fn_1_50D4(omObjData* arg0) { + Point3d sp50; + Point3d sp44; + Point3d sp38; + PlayerState* sp18; + PlayerState* sp14; + s16 sp10[2]; + s16 spC[2]; + f32 temp_f31; + f32 temp_f30; + f32 temp_f29; + s32 i, j, k; + s32 temp_r22; + s32 temp_r23; + w03StructUnk3* temp_r30; + w03StructUnk2* temp_r31; + w03StructUnk3* temp; + + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_74, w03StructUnk2); + if ((temp_r31->unkbit_00 != 0) || (BoardIsKill() != 0)) { + for (i = 0; i < 0x50; i++) { + temp = &temp_r31->unk_08[i]; + BoardModelKill(temp->model); + } + + for (i = 0; i < 4; i++) { + BoardModelVisibilitySet(BoardPlayerModelGet(i), 1); + } + + BoardModelKill(temp_r31->model); + HuMemDirectFree(temp_r31->unk_08); + lbl_1_bss_74 = 0; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + + if (lbl_1_data_314 != -1) { + temp_f31 = BoardModelMotionTimeGet(lbl_1_data_314); + if (temp_r31->unk_01 == 0) { + if ((lbl_1_bss_0->unk1 != 0) && + ((temp_f31 >= 212.0f)) || + (lbl_1_bss_0->unk1 == 0) && + ((temp_f31 >= 86.0f))) { + + temp_r31->unk_01 = 1; + } + } else { + fn_1_4F24(temp_r31); //inline + } + + if (temp_r31->unk_01 != 0) { + if (BoardModelMotionEndCheck(lbl_1_bss_C[2]) != 0) { + BoardModelMotionStart(lbl_1_bss_C[2], 0, 0x40000001); + BoardModelMotionStartEndSet(lbl_1_bss_C[2], 1, 100); + } + if (BoardModelMotionEndCheck(temp_r31->model) != 0) { + BoardModelVisibilitySet(temp_r31->model, 0); + } + } + + if (BoardModelMotionTimeGet(lbl_1_bss_C[2]) >= lbl_1_rodata_1BC) { + if (temp_r31->unkbit_04 == 0) { + if (temp_r31->unkbit_03 == 0) { + HuAudFXPlay(0x43C); + } else { + HuAudFXPlay(0x43D); + } + temp_r31->unkbit_04 = 1; + } + if (temp_r31->unk_02 == 1) { + omVibrate(GWSystem.player_curr, 0xC, 4, 2); + fn_1_4D60(temp_r31); //inline + } else if ((temp_r31->unk_02 == 2) && (temp_r31->unkbit_03 == 0)) { + omVibrate(GWSystem.player_curr, 0xC, 0xC, 0); + BoardModelVisibilitySet(temp_r31->model, 1); + BoardModelMotionStart(temp_r31->model, 0, 0); + temp_r31->unkbit_03 = 1; + } + } + + fn_1_4ABC(temp_r31); + + for (i = 0; i < 4; i++) { + if (i != GWSystem.player_curr) { + BoardPlayerPosGet(i, &sp50); + BoardModelPosGet(lbl_1_data_310, &sp44); + PSVECSubtract(&sp50, &sp44, &sp38); + if (PSVECMag(&sp38) >= lbl_1_rodata_1C0) { + BoardModelVisibilitySet(BoardPlayerModelGet(i), 0); + } else { + BoardModelVisibilitySet(BoardPlayerModelGet(i), 1); + } + } + } + } +} + +typedef struct w03UnkStruct5 { + /* 0x00 */ struct { + u8 unk00_bit0 : 1; + u8 unk00_bit1 : 2; + u8 unk00_bit3 : 1; + u8 unk00_bit4 : 4; + }; + /* 0x01 */ char unk_01[3]; + /* 0x04 */ f32 unk_04; + /* 0x08 */ f32 unk_08; +} w03UnkStruct5; + +extern omObjData* lbl_1_bss_78; + +void fn_1_5838(s32 arg0) { + Point3d sp18; + Point3d spC; + omObjData* obj; + w03UnkStruct5* temp_r31; + + obj = omAddObjEx(boardObjMan, 0x7E01, 0, 0, -1, &fn_1_5AC8); + lbl_1_bss_78 = obj; + temp_r31 = OM_GET_WORK_PTR(obj, w03UnkStruct5); + temp_r31->unk00_bit0 = 0; + temp_r31->unk00_bit1 = arg0; + temp_r31->unk00_bit4 = 1; + temp_r31->unk00_bit3 = 0; + switch (GWPlayer[temp_r31->unk00_bit1].diff) { + case 0: + temp_r31->unk_08 = (lbl_1_rodata_110 + (lbl_1_rodata_1C4 * BoardRandFloat())); + break; + case 1: + temp_r31->unk_08 = (lbl_1_rodata_1C8 + (lbl_1_rodata_1CC * BoardRandFloat())); + break; + case 2: + temp_r31->unk_08 = (lbl_1_rodata_1D0 + (lbl_1_rodata_1C8 * BoardRandFloat())); + break; + case 3: + temp_r31->unk_08 = lbl_1_rodata_E8; + break; + } + BoardCameraMoveSet(0); + sp18.x = lbl_1_rodata_E8; + sp18.y = lbl_1_rodata_17C; + sp18.z = lbl_1_rodata_E8; + spC.x = lbl_1_rodata_1D4; + spC.y = lbl_1_rodata_E8; + spC.z = lbl_1_rodata_E8; + BoardCameraMotionStartEx(lbl_1_data_310, &spC, &sp18, 1, 3000.0f, 1); + BoardModelMotionStart(lbl_1_data_310, 3, 0x40000001U); + BoardModelMotionStart(lbl_1_data_314, 0, 0U); + BoardModelMotionSpeedSet(lbl_1_data_314, lbl_1_rodata_1DC); + fn_1_5C5C(obj, temp_r31); + BoardCameraMotionWait(); + BoardCameraTargetModelSet(-1); +} + +void fn_1_5AC8(omObjData* arg0) { + s32 temp_r0; + w03UnkStruct5* temp_r31; + + temp_r31 = OM_GET_WORK_PTR(arg0, w03UnkStruct5); + if ((temp_r31->unk00_bit0 != 0) || (BoardIsKill() != 0)) { + lbl_1_bss_78 = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + if (lbl_1_data_316 != -1) { + HuWinKill(lbl_1_data_316); + lbl_1_data_316 = -1; + } + return; + } + if ((lbl_1_rodata_120 == BoardModelMotionTimeGet(lbl_1_data_310)) || (lbl_1_rodata_198 == BoardModelMotionTimeGet(lbl_1_data_310))) { + HuAudFXPlay(0x43B); + } + switch (temp_r31->unk00_bit4) { + case 1: + if (lbl_1_bss_7D != 0) { + fn_1_629C(2); + fn_1_62FC(); + BoardCameraTargetModelSet(lbl_1_data_310); + BoardCameraMoveSet(1); + + } + break; + case 2: + fn_1_5C5C(arg0, (w03UnkStruct5* ) temp_r31); + break; + case 3: + BoardCameraTargetModelSet(-1); + BoardCameraMoveSet(0); + temp_r31->unk00_bit0 = 1; + break; + } +} + +void fn_1_5C5C(omObjData* arg0, w03UnkStruct5* arg1) { + Mtx sp110; + Mtx spE0; + Mtx spB0; + Mtx sp80; + Mtx sp50; + Point3d sp44; + Point3d sp38; + Point3d sp2C; + Point3d sp20; + Point3d sp14; + Point3d sp8; + s16 temp_r3; + char* temp_r27; + ModelDataTemp* temp_r30; + + if (((WipeStatGet() == 0) && (arg1->unk00_bit3) || (BoardModelMotionEndCheck(lbl_1_data_314) != 0))) { + fn_1_629C(3); + return; + } + if ((BoardModelMotionTimeGet(lbl_1_data_314) >= lbl_1_rodata_1E0) && (arg1->unk00_bit3) == 0) { + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, -1); + arg1->unk00_bit3 = 1; + BoardAudSeqFadeOut(1, 0x3E8); + } + sp38.x = arg0->rot.x; + sp38.y = arg0->rot.y; + sp38.z = arg0->rot.z; + temp_r3 = BoardModelIDGet(lbl_1_data_314); + temp_r30 = &Hu3DData[temp_r3]; + temp_r27 = lbl_1_data_35C[lbl_1_bss_0->unk1]; + Hu3DMotionExec(temp_r3, temp_r30->unk_08, temp_r30->unk_64, 0); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_314), temp_r27, &sp44); + if (lbl_1_rodata_E8 != temp_r30->unk_64) { + PSVECSubtract(&sp38, &sp44, &sp2C); + } else { + sp2C.x = sp2C.y = sp2C.z = lbl_1_rodata_E8; + } + arg0->rot.x = sp44.x; + arg0->rot.y = sp44.y; + arg0->rot.z = sp44.z; + fn_1_602C(arg0, arg1); + sp8 = sp38; + sp14 = sp44; + sp20.x = sp20.z = lbl_1_rodata_E8; + sp20.y = lbl_1_rodata_168; + BoardMTXCalcLookAt(sp110, &sp14, &sp20, &sp8); + PSMTXTranspose(sp110, sp110); + PSMTXRotRad(spE0, 0x7A, lbl_1_rodata_178 * -arg1->unk_04); + PSMTXTrans(sp50, lbl_1_rodata_E8, lbl_1_rodata_1E4, lbl_1_rodata_E8); + PSMTXConcat(spE0, sp50, sp50); + PSMTXConcat(sp110, sp50, sp50); + PSMTXTrans(sp80, sp44.x, sp44.y, sp44.z); + PSMTXConcat(sp80, sp50, sp80); + Hu3DMtxTransGet(sp80, &sp44); + PSMTXRotRad(spB0, 0x79, (lbl_1_rodata_1E8 * (lbl_1_rodata_100 * (atan2(-sp2C.x, -sp2C.z) / lbl_1_rodata_F8)))); + PSMTXConcat(spB0, spE0, sp110); + BoardModelMtxSet(lbl_1_data_310, &sp110); + BoardModelPosSetV(lbl_1_data_310, &sp44); + BoardCameraRotSet(lbl_1_rodata_1D4, (lbl_1_rodata_100 * (atan2(sp2C.x, sp2C.z) / lbl_1_rodata_F8))); +} + +void fn_1_602C(s32 arg0, w03UnkStruct5* arg1) { + f32 temp_f31 = 0.0f; + f32 var_f30; + f32 var_f29; + + if (GWPlayer[arg1->unk00_bit1].com == 0) { + var_f30 = HuPadStkX[GWPlayer[arg1->unk00_bit1].port]; + } else { + var_f30 = fn_1_61A4(arg0, arg1); + } + temp_f31 = lbl_1_rodata_1F0 * var_f30; + if (temp_f31 < lbl_1_rodata_E8) { + var_f29 = -temp_f31; + } else { + var_f29 = temp_f31; + } + if (var_f29 < lbl_1_rodata_1F4) { + arg1->unk_04 *= lbl_1_rodata_1F8; + return; + } + BoardDAngleCalcRange(&arg1->unk_04, temp_f31, lbl_1_rodata_168); +} + +f32 fn_1_61A4(s32 arg0, w03UnkStruct5* arg1) { + w03StructUnk3* sp8; + f32 temp_f31; + s16 i; + w03StructUnk2* temp_r29; + s16 var_r28; + f32* temp_r31; + + if (lbl_1_bss_74) { + temp_r29 = OM_GET_WORK_PTR(lbl_1_bss_74, w03StructUnk2); + sp8 = temp_r29->unk_08; + var_r28 = temp_r29->unk_03; + } + + temp_f31 = BoardModelMotionTimeGet(lbl_1_data_314); + temp_f31 = temp_f31 + arg1->unk_08; + + for (i = 0; i < var_r28; i++) { + temp_r31 = lbl_1_bss_80[i]; + if ((temp_r31[1] < temp_f31) && (temp_r31[3] > temp_f31)) { + return lbl_1_rodata_208 * temp_r31[2]; + } + } + return 0.0f; +} + +void fn_1_629C(s8 arg0) { + w03UnkStruct5* temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_78, w03UnkStruct5); + temp_r31->unk00_bit4 = arg0; +} + +s32 fn_1_62D0(void) { + w03UnkStruct5* temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_78, w03UnkStruct5); + return temp_r31->unk00_bit4; +} + +void fn_1_62FC(void) { + f32 sp8[2]; + s32 messageID = 0x000D0005; + f32 temp0; + f32 temp1; + + HuWinMesMaxSizeGet(1, sp8, messageID); + temp0 = lbl_1_rodata_20C; + temp1 = lbl_1_rodata_210; + lbl_1_data_316 = HuWinCreate(temp0, temp1, sp8[0], sp8[1], 0); + HuWinBGTPLvlSet(lbl_1_data_316, lbl_1_rodata_E8); + HuWinMesSpeedSet(lbl_1_data_316, 0); + HuWinMesSet(lbl_1_data_316, messageID); +} From 64f96764ca8bd456945b4dbc6c763dc47539595d Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 26 Mar 2024 15:39:36 -0500 Subject: [PATCH 092/106] Match w03 condor.c --- config/GMPE01_00/rels/w03Dll/symbols.txt | 130 +++--- configure.py | 2 +- include/REL/w03Dll.h | 5 +- src/REL/w03Dll/condor.c | 498 +++++++++++------------ 4 files changed, 309 insertions(+), 326 deletions(-) diff --git a/config/GMPE01_00/rels/w03Dll/symbols.txt b/config/GMPE01_00/rels/w03Dll/symbols.txt index 231a55e5..875a8237 100644 --- a/config/GMPE01_00/rels/w03Dll/symbols.txt +++ b/config/GMPE01_00/rels/w03Dll/symbols.txt @@ -161,67 +161,67 @@ lbl_1_rodata_C2 = .rodata:0x000000C2; // type:object size:0x6 scope:local data:b lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 scope:local data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 data:double -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x8 data:double -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 data:double -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x20 data:4byte -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 data:4byte -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float -lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float -lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 data:float -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 data:float -lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 data:float -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 data:float -lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 data:float -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x10 data:4byte -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float -lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 data:float -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 data:float -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 data:float -lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 data:float -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float -lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 data:float -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x8 data:double -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 data:float -lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 data:float -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x8 data:double -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 scope:local data:double +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x20 scope:local data:4byte +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 scope:local data:4byte +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data:float +lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 scope:local data:float +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 scope:local data:float +lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 scope:local data:float +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x8 scope:local data:double +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 scope:local data:float lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 scope:local data:float lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float @@ -355,11 +355,11 @@ lbl_1_data_312 = .data:0x00000312; // type:object size:0x2 data:2byte lbl_1_data_314 = .data:0x00000314; // type:object size:0x2 data:2byte lbl_1_data_316 = .data:0x00000316; // type:object size:0x2 data:2byte lbl_1_data_318 = .data:0x00000318; // type:object size:0x18 -lbl_1_data_330 = .data:0x00000330; // type:object size:0xD data:string -lbl_1_data_33D = .data:0x0000033D; // type:object size:0x6 data:string -lbl_1_data_343 = .data:0x00000343; // type:object size:0x9 +lbl_1_data_330 = .data:0x00000330; // type:object size:0xD scope:local data:string +lbl_1_data_33D = .data:0x0000033D; // type:object size:0x6 scope:local data:string +lbl_1_data_343 = .data:0x00000343; // type:object size:0x9 scope:local lbl_1_data_34C = .data:0x0000034C; // type:object size:0x8 -lbl_1_data_354 = .data:0x00000354; // type:object size:0x8 +lbl_1_data_354 = .data:0x00000354; // type:object size:0x8 scope:local lbl_1_data_35C = .data:0x0000035C; // type:object size:0xC lbl_1_data_368 = .data:0x00000368; // type:object size:0x20 lbl_1_data_388 = .data:0x00000388; // type:object size:0x2 data:2byte diff --git a/configure.py b/configure.py index ef010ff3..01290ed9 100644 --- a/configure.py +++ b/configure.py @@ -1106,7 +1106,7 @@ config.libs = [ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w03Dll/main.c"), Object(Matching, "REL/w03Dll/statue.c"), - Object(NonMatching, "REL/w03Dll/condor.c"), + Object(Matching, "REL/w03Dll/condor.c"), Object(Matching, "REL/w03Dll/river.c"), Object(Matching, "REL/w03Dll/smoke.c"), Object(Matching, "REL/w03Dll/mg_coin.c"), diff --git a/include/REL/w03Dll.h b/include/REL/w03Dll.h index ce63d4d8..8962d5e1 100644 --- a/include/REL/w03Dll.h +++ b/include/REL/w03Dll.h @@ -26,4 +26,7 @@ typedef struct w03State { u16 unk4; u16 unk6; s16 unk8; -} w03State; \ No newline at end of file +} w03State; + +extern w03State* lbl_1_bss_0; +extern s16 lbl_1_bss_C[14]; diff --git a/src/REL/w03Dll/condor.c b/src/REL/w03Dll/condor.c index e2089d9a..3ee28ba7 100644 --- a/src/REL/w03Dll/condor.c +++ b/src/REL/w03Dll/condor.c @@ -1,6 +1,16 @@ #include "REL/w03Dll.h" #include "game/data.h" +#include "game/board/main.h" +#include "game/board/space.h" +#include "game/board/player.h" +#include "game/board/model.h" +#include "game/board/window.h" + #include "game/hsfman.h" +#include "game/hsfdraw.h" + +#include "game/pad.h" +#include "game/wipe.h" //file is full of old names and old signatures...needs updating //is also missing half the functions in this TU @@ -8,83 +18,57 @@ void fn_1_313C(void); void fn_1_3218(void); void fn_1_3304(void); -extern Process* lbl_1_bss_70; -extern s8 lbl_1_bss_7C; -extern s16 lbl_1_data_310; -extern char* lbl_1_data_34C[]; + +float lbl_1_bss_80[20][2]; +s8 lbl_1_bss_7D; +s8 lbl_1_bss_7C; +omObjData *lbl_1_bss_78; +omObjData *lbl_1_bss_74; +Process* lbl_1_bss_70; + // #define MAKE_DATA_NUM(dir, file) (((dir) << 16)+(file)) // #define MAKE_DIR_NUM(dir) ((dir) << 16) // #define DATA_NUM_LISTEND -1 +s16 lbl_1_data_310 = -1; +s16 lbl_1_data_312 = -1; +s16 lbl_1_data_314 = -1; +s16 lbl_1_data_316 = -1; s32 lbl_1_data_318[] = { - DATA_MAKE_NUM(0x0077, 0x0016), - DATA_MAKE_NUM(0x0077, 0x0017), - DATA_MAKE_NUM(0x0077, 0x0018), - DATA_MAKE_NUM(0x0077, 0x0019), - DATA_MAKE_NUM(0x0077, 0x001A), + DATA_MAKE_NUM(DATADIR_W03, 0x0016), + DATA_MAKE_NUM(DATADIR_W03, 0x0017), + DATA_MAKE_NUM(DATADIR_W03, 0x0018), + DATA_MAKE_NUM(DATADIR_W03, 0x0019), + DATA_MAKE_NUM(DATADIR_W03, 0x001A), DATA_NUM_LISTEND }; void fn_1_3058(void) { - lbl_1_data_310 = fn_8006D9A4(0x770015, &lbl_1_data_318, 0); + lbl_1_data_310 = BoardModelCreate(0x770015, lbl_1_data_318, 0); fn_1_3304(); } s32 fn_1_309C(void) { - fn_800688E8(0); - lbl_1_bss_70 = HuPrcChildCreate(fn_1_313C, 0x2003U, 0x2000U, 0, lbl_801D3ED0); + BoardDiceDigit2DShowSet(0); + lbl_1_bss_70 = HuPrcChildCreate(fn_1_313C, 0x2003U, 0x2000U, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_70, fn_1_3218); while (lbl_1_bss_70) { HuPrcVSleep(); } - fn_800688E8(1); + BoardDiceDigit2DShowSet(1); return lbl_1_bss_7C; } -s32 fn_800747C4(s32, s32, s32); /* extern */ -extern s16 lbl_1_data_310; -extern f64 lbl_1_rodata_100; -extern f32 lbl_1_rodata_108; -extern f32 lbl_1_rodata_E8; -extern f64 lbl_1_rodata_F0; -extern f64 lbl_1_rodata_F8; - -void fn_1_3304(void) { - Point3d sp8; - f32 temp_f31; - s32 var_r31; - - - if (lbl_1_bss_0->unk1 != 0) { - var_r31 = fn_800745F0(0, 0x4000); - } else { - var_r31 = fn_800745F0(0, 0x8000); - } - var_r31 = fn_800747C4(0, var_r31, 0x02000000); - fn_80074210(0, var_r31, &sp8); - temp_f31 = lbl_1_rodata_E8; - sp8.x = sp8.x + (lbl_1_rodata_F0 * sin((lbl_1_rodata_F8 * temp_f31) / lbl_1_rodata_100)); - sp8.z = sp8.z + (lbl_1_rodata_F0 * cos((lbl_1_rodata_F8 * temp_f31) / lbl_1_rodata_100)); - sp8.y = 45.0f + sp8.y; - fn_8006F158(lbl_1_data_310, &sp8); - fn_8006E2B8(lbl_1_data_310, 2, 0x40000001); -} - s32 fn_1_3478(s32); void fn_1_3814(s32); void fn_1_3968(s32); void fn_1_3E88(s32); void fn_1_3F5C(s32); -void fn_8005DAC4(f32, f32); extern s8 lbl_1_bss_7C; -extern f32 lbl_1_rodata_D8; -extern f32 lbl_1_rodata_DC; -extern f32 lbl_1_rodata_E0; -extern f32 lbl_1_rodata_E4; void fn_1_313C(void) { s32 temp_r31; @@ -93,22 +77,18 @@ void fn_1_313C(void) { lbl_1_bss_7C = 0; lbl_1_bss_0->unk3 = 1; if (fn_1_3478(temp_r31) != 0) { - fn_8005DAC4(lbl_1_rodata_D8, lbl_1_rodata_DC); - fn_800884F4(0); + BoardCameraNearFarSet(500.0f, 20000.0f); + BoardStatusShowSetAll(0); fn_1_3968(temp_r31); fn_1_3E88(temp_r31); fn_1_3F5C(temp_r31); lbl_1_bss_7C = 1; } - fn_8005DAC4(lbl_1_rodata_E0, lbl_1_rodata_E4); + BoardCameraNearFarSet(100.0f, 13000.0f); fn_1_3814(temp_r31); HuPrcEnd(); } -extern s32 lbl_1_bss_70; -extern s16 lbl_1_data_312; -extern s16 lbl_1_data_314; -extern s16 lbl_1_data_316; void fn_1_3218(void) { if (lbl_1_data_316 != -1) { @@ -116,48 +96,52 @@ void fn_1_3218(void) { lbl_1_data_316 = -1; } if (lbl_1_data_314 != -1) { - fn_8006DB90(lbl_1_data_314); + BoardModelKill(lbl_1_data_314); lbl_1_data_314 = -1; } if (lbl_1_data_312 != -1) { - fn_800637CC(GWSystem.player_curr, lbl_1_data_312); + BoardPlayerMotionKill(GWSystem.player_curr, lbl_1_data_312); lbl_1_data_312 = -1; } lbl_1_bss_0->unk3 = 0; lbl_1_bss_70 = 0; } -s32 BoardWinChoiceGet(void); + +void fn_1_3304(void) { + Vec sp8; + f32 temp_f31; + s32 var_r31; + + + if (lbl_1_bss_0->unk1 != 0) { + var_r31 = BoardSpaceFlagSearch(0, 0x4000); + } else { + var_r31 = BoardSpaceFlagSearch(0, 0x8000); + } + var_r31 = BoardSpaceLinkFlagSearch(0, var_r31, 0x02000000); + BoardSpacePosGet(0, var_r31, &sp8); + temp_f31 = 0.0f; + sp8.x = sp8.x + (-300.0 * sin((M_PI * temp_f31) / 180.0)); + sp8.z = sp8.z + (-300.0 * cos((M_PI * temp_f31) / 180.0)); + sp8.y = 45.0f + sp8.y; + BoardModelPosSetV(lbl_1_data_310, &sp8); + BoardModelMotionStart(lbl_1_data_310, 2, 0x40000001); +} + void fn_1_4354(s32); -s32 fn_80061FDC(s32); -s32 fn_80063EC0(s32); -void fn_80063EEC(s32, s32); -void fn_8006E47C(s16, s32, f32, f32, s32); -s32 fn_8006E91C(s16); -void fn_80070390(s32, s32, s32, s32); -void fn_80070770(s32); -void fn_80072DA8(s32); -s32 fn_800747C4(s32, s16, s32); -extern s16 lbl_1_data_310; -extern f64 lbl_1_rodata_100; -extern f32 lbl_1_rodata_10C; -extern f32 lbl_1_rodata_110; -extern f32 lbl_1_rodata_114; -extern f32 lbl_1_rodata_118; -extern f32 lbl_1_rodata_11C; -extern f32 lbl_1_rodata_E8; -extern f64 lbl_1_rodata_F8; + s32 fn_1_3478(s32 arg0) { - Point3d sp38; - Point3d sp2C; - Point3d sp20; + Vec sp38; + Vec sp2C; + Vec sp20; f32 sp1C; f32 sp18; - Point3d sp14; - Point3d sp8; + Vec sp14; + Vec sp8; - s16 temp_r28; + s32 temp_r28; s32 temp_r3; s32 var_r29; s32 var_r30; @@ -174,34 +158,34 @@ s32 fn_1_3478(s32 arg0) { sp8.y = 0.0f; sp8.z = 0.0f; - fn_8005DB6C(lbl_1_data_310, &sp8, &sp14, lbl_1_rodata_114, lbl_1_rodata_118, 0x15); + BoardCameraMotionStartEx(lbl_1_data_310, &sp8, &sp14, 1900.0f, -1.0f, 0x15); temp_r28 = GWPlayer[arg0].space_curr; - fn_8006310C(arg0, &sp2C); - temp = fn_800747C4(0, temp_r28, 0x02000000); - fn_80074210(0, temp, &sp38); + BoardPlayerPosGet(arg0, &sp2C); + temp = BoardSpaceLinkFlagSearch(0, temp_r28, 0x02000000); + BoardSpacePosGet(0, temp, &sp38); PSVECSubtract(&sp38, &sp2C, &sp20); - float_temp = atan2(sp20.x, sp20.z) / 3.141592653589793f * 180.0f; - fn_80067C90(arg0, (float_temp), 0xF); + float_temp = atan2(sp20.x, sp20.z) / M_PI * 180.0f; + BoardPlayerMotBlendSet(arg0, (float_temp), 0xF); - while (fn_8006874C(arg0) == 0) { + while (BoardPlayerMotBlendCheck(arg0) == 0) { HuPrcVSleep(); } - fn_80067B98(arg0); + BoardPlayerIdleSet(arg0); HuAudFXPlay(0x447); - fn_8006E47C(lbl_1_data_310, 4, 0.0f, 5.0f, 0); + BoardModelMotionShiftSet(lbl_1_data_310, 4, 0.0f, 5.0f, 0); HuPrcSleep(6); - while (fn_8006E91C(lbl_1_data_310) == 0) { + while (BoardModelMotionEndCheck(lbl_1_data_310) == 0) { HuPrcVSleep(); } - fn_8006E47C(lbl_1_data_310, 1, 0.0f, 5.0f, 0x40000001); - temp_r26 = fn_80061FDC(arg0); + BoardModelMotionShiftSet(lbl_1_data_310, 1, 0.0f, 5.0f, 0x40000001); + temp_r26 = BoardPlayerGetCharMess(arg0); BoardWinCreate(2, 0x160010, 8); - fn_800706D0(temp_r26, 3); + BoardWinInsertMesSet(temp_r26, 3); BoardWinWait(); - if (fn_80063EC0(arg0) < 5) { + if (BoardPlayerCoinsGet(arg0) < 5) { BoardWinCreate(2, 0x160013, 8); BoardWinWait(); BoardWinKill(); @@ -210,8 +194,8 @@ s32 fn_1_3478(s32 arg0) { var_r29 = 0; goto test; while (1) { - fn_80070390(2, 0x160011, 8, 0); - fn_80070770(0x10); + BoardWinCreateChoice(2, 0x160011, 8, 0); + BoardWinAttrSet(0x10); if (GWPlayer[arg0].com != 0) { fn_1_4354(arg0); @@ -224,7 +208,7 @@ s32 fn_1_3478(s32 arg0) { var_r29 = 1; break; case 2: - fn_80072DA8(arg0); + BoardViewMapExec(arg0); break; default: case 1: @@ -235,9 +219,9 @@ s32 fn_1_3478(s32 arg0) { } test: if (var_r29 != 0) { - fn_80071034(0, 1, 1000); + BoardAudSeqPause(0, 1, 1000); for (j = 0; j < 5; j++) { - fn_80063EEC(arg0, -1); + BoardPlayerCoinsAdd(arg0, -1); HuAudFXPlay(14); HuPrcSleep(6); } @@ -249,44 +233,42 @@ s32 fn_1_3478(s32 arg0) { } extern s8 lbl_1_bss_7C; -extern f32 lbl_1_rodata_120; -extern f32 lbl_1_rodata_124; void fn_1_3814(s32 arg0) { - Point3d sp14; - Point3d sp8; + Vec sp14; + Vec sp8; f32 temp; - fn_8006E47C(lbl_1_data_310, 2, 0.0f, 10.0f, 0x40000001); - temp = (180.0f + fn_80063448(arg0)); - fn_80067C90(arg0, temp, 0xF); + BoardModelMotionShiftSet(lbl_1_data_310, 2, 0.0f, 10.0f, 0x40000001); + temp = (180.0f + BoardPlayerRotYGet(arg0)); + BoardPlayerMotBlendSet(arg0, temp, 0xF); - while (fn_8006874C(arg0) == 0) { + while (BoardPlayerMotBlendCheck(arg0) == 0) { HuPrcVSleep(); } - fn_8005D284(1); - fn_8005D834(arg0); + BoardCameraViewSet(1); + BoardCameraTargetPlayerSet(arg0); if (lbl_1_bss_7C != 0) { - fn_80074210(0, GWPlayer[arg0].space_curr, &sp14); - fn_8006310C(arg0, &sp8); - fn_80066F44(arg0, &sp8, &sp14, 0x14); + BoardSpacePosGet(0, GWPlayer[arg0].space_curr, &sp14); + BoardPlayerPosGet(arg0, &sp8); + BoardPlayerPosLerpStart(arg0, &sp8, &sp14, 0x14); while (GWPlayer[arg0].moving) { HuPrcVSleep(); } } - fn_80067B98(arg0); - fn_8005E0C0(); + BoardPlayerIdleSet(arg0); + BoardCameraMotionWait(); } void fn_1_3968(s32 arg0) { s32 var_r29 = 0; s32 var_r28 = 0; s32 sp48[] = {0x005F0065, 0x001A0065, 0x006D0065, 0x008A0065, 0x00850065, 0x00110065, 0x000D0065, 0x00810065}; - Point3d sp3C; - Point3d sp30; - Point3d sp24; - Point3d sp18; + Vec sp3C; + Vec sp30; + Vec sp24; + Vec sp18; s32 sp10[2] = {0x00770013, 0x00770014}; f32 spC; s16 sp8; @@ -298,20 +280,20 @@ void fn_1_3968(s32 arg0) { s16 character; - lbl_1_data_314 = fn_8006D9A4(sp10[lbl_1_bss_0->unk1], NULL, 0); + lbl_1_data_314 = BoardModelCreate(sp10[lbl_1_bss_0->unk1], NULL, 0); character = GWPlayer[arg0].character; - lbl_1_data_312 = fn_8006374C(arg0, sp48[character]); + lbl_1_data_312 = BoardPlayerMotionCreate(arg0, sp48[character]); - Hu3DModelObjPosGet(fn_8006DBD4(lbl_1_data_310), "itemhook_oya", &sp3C); - fn_8006310C(arg0, &sp30); - temp_f30 = fn_8005FBE8(&sp3C, &sp30); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_310), "itemhook_oya", &sp3C); + BoardPlayerPosGet(arg0, &sp30); + temp_f30 = BoardVecDistXZCalc(&sp3C, &sp30); PSVECSubtract(&sp3C, &sp30, &sp24); PSVECNormalize(&sp24, &sp24); - PSVECScale(&sp24, &sp24, temp_f30 / lbl_1_rodata_108); - fn_80063A1C(arg0, 4, 0.0f, lbl_1_rodata_11C, 0); + PSVECScale(&sp24, &sp24, temp_f30 / 45.0f); + BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 5.0f, 0); HuPrcSleep(5); - spC = fn_80063448(arg0); + spC = BoardPlayerRotYGet(arg0); temp_f27 = 180.0f + spC; var_r29 = 0; sp8 = 0; @@ -321,8 +303,8 @@ void fn_1_3968(s32 arg0) { temp_f31 = __OSs16tof32(&sp8); sp24.y = temp_f28 + (-0.08166667f * (0.75f * (temp_f31 * temp_f31))); PSVECAdd(&sp30, &sp24, &sp30); - temp_f30 = fn_8005FBE8(&sp3C, &sp30); - if (temp_f30 < lbl_1_rodata_11C) { + temp_f30 = BoardVecDistXZCalc(&sp3C, &sp30); + if (temp_f30 < 5.0f) { sp24.x = sp24.z = 0.0f; sp30.x = sp3C.x; sp30.z = sp3C.z; @@ -333,33 +315,33 @@ void fn_1_3968(s32 arg0) { var_r29 = 1; } } else { - fn_8005FF28(&spC, temp_f27, 5.142857f); - fn_80063374(arg0, spC); + BoardDAngleCalcRange(&spC, temp_f27, 5.142857f); + BoardPlayerRotYSet(arg0, spC); } if (sp30.y <= sp3C.y && var_r29 != 0) { sp30.y = sp3C.y; break; } - fn_80062FA4(arg0, &sp30); + BoardPlayerPosSetV(arg0, &sp30); HuPrcVSleep(); sp8 += 1; } - fn_80070DEC(1, 0x18, 0x7F, 0); - fn_80063040(arg0, 0.0f, 0.0f, 0.0f); + BoardMusStart(1, 0x18, 0x7F, 0); + BoardPlayerPosSet(arg0, 0.0f, 0.0f, 0.0f); - fn_8006F73C(lbl_1_data_310, "itemhook_oya", GetCurrentPlayerIndex(GetCurrentPlayer(arg0))); - fn_8006394C(arg0, lbl_1_data_312, 0x40000001); + BoardModelHookSet(lbl_1_data_310, "itemhook_oya", BoardPlayerModelGet(arg0)); + BoardPlayerMotionStart(arg0, lbl_1_data_312, 0x40000001); HuAudFXPlay(0x44F); - fn_8006E47C(lbl_1_data_310, 5, 0.0f, lbl_1_rodata_11C, 0); + BoardModelMotionShiftSet(lbl_1_data_310, 5, 0.0f, 5.0f, 0); sp18.x = -15.0f; sp18.y = 180.0f; sp18.z = 0.0f; - fn_8005DB6C(lbl_1_data_310, &sp18, 0, 4000.0f, lbl_1_rodata_118, 0x150); + BoardCameraMotionStartEx(lbl_1_data_310, &sp18, 0, 4000.0f, -1.0f, 0x150); for (var_r28 = 0, sp8 = 0; ; sp8++) { if (var_r28 == 0) { @@ -375,30 +357,18 @@ void fn_1_3968(s32 arg0) { } } - -void fn_8005D7B4(s32); /* extern */ -void fn_80062FA4(s32, Point3d*); /* extern */ -void fn_8006F800(s16); /* extern */ -extern f32 lbl_1_rodata_108; -extern f32 lbl_1_rodata_124; -extern f64 lbl_1_rodata_F0; - void fn_1_48EC(s32); /* extern */ void fn_1_4A9C(void); /* extern */ void fn_1_5838(s32); /* extern */ s32 fn_1_62D0(void); /* extern */ -void fn_80088638(s32); /* extern */ -void fn_80088790(s32, s32); /* extern */ -extern s8 lbl_1_bss_7D; - void fn_1_3E88(s32 arg0) { lbl_1_bss_7D = 0; fn_1_48EC(arg0); fn_1_5838(arg0); lbl_1_bss_7D = 1; - fn_80088638(arg0); - fn_80088790(arg0, 1); + BoardStatusShowSetForce(arg0); + BoardStatusShowSet(arg0, 1); WipeCreate(1, 0, 0x15); while (WipeStatGet() != 0) { HuPrcVSleep(); @@ -410,15 +380,15 @@ void fn_1_3E88(s32 arg0) { HuPrcVSleep(); } fn_1_4A9C(); - fn_80071034(0, 0, 0x3E8); + BoardAudSeqPause(0, 0, 0x3E8); } void fn_1_3F5C(s32 arg0) { Mtx sp38; - Point3d sp2C; - Point3d sp20; - Point3d sp14; - Point3d sp8; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; f32 temp_f31; s16 temp_r28; s32 var_r31; @@ -426,50 +396,50 @@ void fn_1_3F5C(s32 arg0) { if (lbl_1_bss_0->unk1 != 0) { lbl_1_bss_0->unk1 = 0; - var_r30 = fn_800745F0(0, 0x8000); + var_r30 = BoardSpaceFlagSearch(0, 0x8000); } else { lbl_1_bss_0->unk1 = 1; - var_r30 = fn_800745F0(0, 0x4000); + var_r30 = BoardSpaceFlagSearch(0, 0x4000); } - temp_r28 = fn_800747C4(0, var_r30, 0x02000000); - fn_8005D7B4(0); - fn_8006F800(lbl_1_data_310); + temp_r28 = BoardSpaceLinkFlagSearch(0, var_r30, 0x02000000); + BoardCameraMoveSet(0); + BoardModelHookReset(lbl_1_data_310); if (lbl_1_bss_0->unk1 != 0) { - var_r31 = fn_800745F0(0, 0x4000); + var_r31 = BoardSpaceFlagSearch(0, 0x4000); } else { - var_r31 = fn_800745F0(0, 0x8000); + var_r31 = BoardSpaceFlagSearch(0, 0x8000); } - var_r31 = fn_800747C4(0, var_r31, 0x02000000); - fn_80074210(0, var_r31, &sp8); + var_r31 = BoardSpaceLinkFlagSearch(0, var_r31, 0x02000000); + BoardSpacePosGet(0, var_r31, &sp8); temp_f31 = 0.0f; - sp8.x = (sp8.x + (lbl_1_rodata_F0 * sin((lbl_1_rodata_F8 * temp_f31) / 180.0f))); - sp8.z = (sp8.z + (lbl_1_rodata_F0 * cos((lbl_1_rodata_F8 * temp_f31) / 180.0f))); + sp8.x = (sp8.x + (-300.0 * sin((M_PI * temp_f31) / 180.0f))); + sp8.z = (sp8.z + (-300.0 * cos((M_PI * temp_f31) / 180.0f))); sp8.y = 45.0f + sp8.y; - fn_8006F158(lbl_1_data_310, &sp8); - fn_8006E2B8(lbl_1_data_310, 2, 0x40000001); - fn_8006E2B8(lbl_1_data_310, 1, 0x40000001); - fn_8006F0D4(lbl_1_data_310, 0.0f); + BoardModelPosSetV(lbl_1_data_310, &sp8); + BoardModelMotionStart(lbl_1_data_310, 2, 0x40000001); + BoardModelMotionStart(lbl_1_data_310, 1, 0x40000001); + BoardModelRotYSet(lbl_1_data_310, 0.0f); PSMTXIdentity(sp38); - fn_8006EFBC(lbl_1_data_310, sp38); + BoardModelMtxSet(lbl_1_data_310, &sp38); sp20.x = 0.0f; sp20.y = 150.0f; sp20.z = 0.0f; sp14.x = -15.0f; sp14.y = 0.0f; sp14.z = 0.0f; - fn_8005DB6C(lbl_1_data_310, &sp14, &sp20, lbl_1_rodata_114, lbl_1_rodata_118, 1); - fn_80074210(0, temp_r28, &sp2C); - fn_80062FA4(arg0, &sp2C); + BoardCameraMotionStartEx(lbl_1_data_310, &sp14, &sp20, 1900.0f, -1.0f, 1); + BoardSpacePosGet(0, temp_r28, &sp2C); + BoardPlayerPosSetV(arg0, &sp2C); GWPlayer[arg0].space_curr = var_r30; - fn_80063374(arg0, lbl_1_rodata_124); - fn_80067B98(arg0); + BoardPlayerRotYSet(arg0, 180.0f); + BoardPlayerIdleSet(arg0); HuPrcSleep(2); - fn_8005D7B4(1); - fn_8006E2B8(lbl_1_bss_C[2], 0, 0x40000001); - fn_8006E0B0(lbl_1_bss_C[2], 1, 0x64); - fn_8008853C(0); + BoardCameraMoveSet(1); + BoardModelMotionStart(lbl_1_bss_C[2], 0, 0x40000001); + BoardModelMotionStartEndSet(lbl_1_bss_C[2], 1, 0x64); + BoardStatusItemSet(0); HuPrcSleep(2); - fn_8008853C(1); + BoardStatusItemSet(1); WipeCreate(1, 0, 0x15); while (WipeStatGet() != 0) { HuPrcVSleep(); @@ -479,9 +449,6 @@ void fn_1_3F5C(s32 arg0) { BoardWinKill(); } -void fn_800712C8(void); /* extern */ -void fn_80071328(void); /* extern */ - void fn_1_4354(s32 arg0) { s32 sp8; s32 starPos; @@ -497,18 +464,16 @@ void fn_1_4354(s32 arg0) { } else if ((starPos == 0) || (starPos == 5) || (starPos == 6) || (starPos == 7)) { var_r30 = 1; } - if (fn_80063EC0(arg0) < 0x14) { + if (BoardPlayerCoinsGet(arg0) < 0x14) { var_r30 = 1; } if (var_r30 != 0) { - fn_800712C8(); + BoardComKeySetLeft(); return; } - fn_80071328(); + BoardComKeySetRight(); } -f32 lbl_1_bss_80[20][2]; - typedef struct w03StructUnk3 { /* 0x00 */ s16 unk_00; /* 0x02 */ s16 model; @@ -532,16 +497,21 @@ typedef struct w03StructUnk2 { w03StructUnk3* unk_08; } w03StructUnk2; +char *lbl_1_data_34C[] = { + "jyanA", + "jyanB" +}; + void fn_1_4424(w03StructUnk2* arg0) { Mtx sp108; Mtx spD8; Mtx spA8; Mtx sp78; - Point3d sp6C; - Point3d sp60; + Vec sp6C; + Vec sp60; Vec sp54; Vec sp48; - Point3d sp3C; + Vec sp3C; Vec sp30; Vec sp24; Vec sp18; @@ -593,7 +563,7 @@ void fn_1_4424(w03StructUnk2* arg0) { if (var_r25 % 4 == 0 && ((s16) var_r25 != 0)) { temp_r27 = &arg0->unk_08[i]; temp_r27->unk_00 = 1; - temp_f30 = (0.5f - BoardRandFloat()) * 10; + temp_f30 = (0.5f - BoardRandFloat()) * 90; OSf32tos16(&temp_f30, &sp8); sp8 = (sp8 / 10) * 10; OSs16tof32(&sp8, &temp_f30); @@ -603,7 +573,7 @@ void fn_1_4424(w03StructUnk2* arg0) { sp18 = sp54; BoardMTXCalcLookAt(spA8, &sp18, &sp24, &sp30); PSMTXTranspose(spA8, spA8); - PSMTXRotRad(spD8, 0x7A, 0.017453292f * temp_f30); + MTXRotDeg(spD8, 'z', temp_f30); PSMTXTrans(sp108, 0.0f, -350.0f, 0.0f); PSMTXConcat(spD8, sp108, sp108); PSMTXConcat(spA8, sp108, sp108); @@ -620,8 +590,10 @@ void fn_1_4424(w03StructUnk2* arg0) { arg0->unk_03 = i; } +void fn_1_50D4(omObjData* arg0); + void fn_1_48EC(s32 arg0) { - Point3d spC; + Vec spC; omObjData* obj; s32 i; w03StructUnk2* temp_r31; @@ -654,8 +626,6 @@ void fn_1_48EC(s32 arg0) { fn_1_4424(temp_r31); } -extern omObjData* lbl_1_bss_74; - typedef struct w03UnkStruct4 { /* 0x00 */ struct { u8 unk00_bit0 : 1; @@ -667,7 +637,7 @@ void fn_1_4A9C(void) { } void fn_1_4ABC(w03StructUnk2* arg0) { - Point3d sp8; + Vec sp8; f32 temp_f31; w03StructUnk3* temp_r31; s32 i; @@ -677,17 +647,17 @@ void fn_1_4ABC(w03StructUnk2* arg0) { (void)i; BoardModelPosGet(lbl_1_data_310, &sp8); - sp8.y += lbl_1_rodata_180; + sp8.y += 250.0f; for (i = 0; i < arg0->unk_03; i++) { temp_r31 = &arg0->unk_08[i]; if (temp_r31->unk_00 == 1) { - if (BoardVecMinDistCheck(&sp8, &temp_r31->unk_08, lbl_1_rodata_184) != 0) { + if (BoardVecMinDistCheck(&sp8, &temp_r31->unk_08, 200.0f) != 0) { temp_r31->unk_00 = -1; BoardModelVisibilitySet(temp_r31->model, 0); CharModelLayerSetAll(2); CharModelCoinEffectCreate(1, &temp_r31->unk_08); - BoardPlayerCoinsAdd((arg0->unk_00 >> 5) & 3, 1); + BoardPlayerCoinsAdd(arg0->unkbit_01, 1); HuAudFXPlay(7); } BoardModelPosSetV(temp_r31->model, &temp_r31->unk_08); @@ -699,17 +669,17 @@ void fn_1_4ABC(w03StructUnk2* arg0) { for (i = arg0->unk_03; i < 0x50; i++) { temp_r31 = &arg0->unk_08[i]; if (temp_r31->unk_00 == 1) { - temp_r31->unk_04 += lbl_1_rodata_168; - temp_f31 = lbl_1_rodata_188 * (temp_r31->unk_04 * temp_r31->unk_04); + temp_r31->unk_04 += 1.0f; + temp_f31 = 0.8f * (temp_r31->unk_04 * temp_r31->unk_04); PSVECAdd(&temp_r31->unk_14, &temp_r31->unk_08, &temp_r31->unk_08); - temp_r31->unk_08.y += lbl_1_rodata_18C * temp_f31; - if (temp_r31->unk_08.y < lbl_1_rodata_190) { + temp_r31->unk_08.y += -0.0375f * temp_f31; + if (temp_r31->unk_08.y < -300.0f) { temp_r31->unk_00 = -1; BoardModelVisibilitySet(temp_r31->model, 0); - } else if (BoardVecMinDistCheck(&sp8, &temp_r31->unk_08, lbl_1_rodata_184) != 0) { + } else if (BoardVecMinDistCheck(&sp8, &temp_r31->unk_08, 200.0f) != 0) { temp_r31->unk_00 = -1; BoardModelVisibilitySet(temp_r31->model, 0); - BoardPlayerCoinsAdd((arg0->unk_00 >> 5) & 3, 1); + BoardPlayerCoinsAdd(arg0->unkbit_01, 1); CharModelLayerSetAll(2); CharModelCoinEffectCreate(1, &temp_r31->unk_08); HuAudFXPlay(7); @@ -736,7 +706,7 @@ s32 fn_1_4D0C(w03StructUnk3** arg0, s16* arg1) { } void fn_1_4D60(w03StructUnk2* arg0) { - Point3d sp8; + Vec sp8; f32 temp_f31; f32 temp_f30; s32 i; @@ -795,15 +765,15 @@ void fn_1_4F24(w03StructUnk2* arg0) { arg0->unk_02 = 0; } if (arg0->unk_02 != 0) { - BoardModelMotionShiftSet(lbl_1_bss_C[2], 0, 0, 101.0f, 0); + BoardModelMotionShiftSet(lbl_1_bss_C[2], 0, 101.0f, 10.0f, 0); } } } void fn_1_50D4(omObjData* arg0) { - Point3d sp50; - Point3d sp44; - Point3d sp38; + Vec sp50; + Vec sp44; + Vec sp38; PlayerState* sp18; PlayerState* sp14; s16 sp10[2]; @@ -860,7 +830,7 @@ void fn_1_50D4(omObjData* arg0) { } } - if (BoardModelMotionTimeGet(lbl_1_bss_C[2]) >= lbl_1_rodata_1BC) { + if (BoardModelMotionTimeGet(lbl_1_bss_C[2]) >= 170.0f) { if (temp_r31->unkbit_04 == 0) { if (temp_r31->unkbit_03 == 0) { HuAudFXPlay(0x43C); @@ -887,7 +857,7 @@ void fn_1_50D4(omObjData* arg0) { BoardPlayerPosGet(i, &sp50); BoardModelPosGet(lbl_1_data_310, &sp44); PSVECSubtract(&sp50, &sp44, &sp38); - if (PSVECMag(&sp38) >= lbl_1_rodata_1C0) { + if (PSVECMag(&sp38) >= 2000.0f) { BoardModelVisibilitySet(BoardPlayerModelGet(i), 0); } else { BoardModelVisibilitySet(BoardPlayerModelGet(i), 1); @@ -909,11 +879,16 @@ typedef struct w03UnkStruct5 { /* 0x08 */ f32 unk_08; } w03UnkStruct5; -extern omObjData* lbl_1_bss_78; +void fn_1_5AC8(omObjData* arg0); +void fn_1_5C5C(omObjData* arg0, w03UnkStruct5* arg1); +void fn_1_602C(omObjData* arg0, w03UnkStruct5* arg1); +f32 fn_1_61A4(omObjData* arg0, w03UnkStruct5* arg1); +void fn_1_629C(s8 arg0); +void fn_1_62FC(void); void fn_1_5838(s32 arg0) { - Point3d sp18; - Point3d spC; + Vec sp18; + Vec spC; omObjData* obj; w03UnkStruct5* temp_r31; @@ -926,29 +901,29 @@ void fn_1_5838(s32 arg0) { temp_r31->unk00_bit3 = 0; switch (GWPlayer[temp_r31->unk00_bit1].diff) { case 0: - temp_r31->unk_08 = (lbl_1_rodata_110 + (lbl_1_rodata_1C4 * BoardRandFloat())); + temp_r31->unk_08 = (-15.0f + (-30.0f * BoardRandFloat())); break; case 1: - temp_r31->unk_08 = (lbl_1_rodata_1C8 + (lbl_1_rodata_1CC * BoardRandFloat())); + temp_r31->unk_08 = (-5.0f + (-10.0f * BoardRandFloat())); break; case 2: - temp_r31->unk_08 = (lbl_1_rodata_1D0 + (lbl_1_rodata_1C8 * BoardRandFloat())); + temp_r31->unk_08 = (-2.0f + (-5.0f * BoardRandFloat())); break; case 3: - temp_r31->unk_08 = lbl_1_rodata_E8; + temp_r31->unk_08 = 0.0f; break; } BoardCameraMoveSet(0); - sp18.x = lbl_1_rodata_E8; - sp18.y = lbl_1_rodata_17C; - sp18.z = lbl_1_rodata_E8; - spC.x = lbl_1_rodata_1D4; - spC.y = lbl_1_rodata_E8; - spC.z = lbl_1_rodata_E8; - BoardCameraMotionStartEx(lbl_1_data_310, &spC, &sp18, 1, 3000.0f, 1); + sp18.x = 0.0f; + sp18.y = -350.0f; + sp18.z = 0.0f; + spC.x = -20.0f; + spC.y = 0.0f; + spC.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_data_310, &spC, &sp18, 3000.0f, -1.0f, 1); BoardModelMotionStart(lbl_1_data_310, 3, 0x40000001U); BoardModelMotionStart(lbl_1_data_314, 0, 0U); - BoardModelMotionSpeedSet(lbl_1_data_314, lbl_1_rodata_1DC); + BoardModelMotionSpeedSet(lbl_1_data_314, 0.7f); fn_1_5C5C(obj, temp_r31); BoardCameraMotionWait(); BoardCameraTargetModelSet(-1); @@ -968,7 +943,7 @@ void fn_1_5AC8(omObjData* arg0) { } return; } - if ((lbl_1_rodata_120 == BoardModelMotionTimeGet(lbl_1_data_310)) || (lbl_1_rodata_198 == BoardModelMotionTimeGet(lbl_1_data_310))) { + if ((10.0f == BoardModelMotionTimeGet(lbl_1_data_310)) || (50.0f == BoardModelMotionTimeGet(lbl_1_data_310))) { HuAudFXPlay(0x43B); } switch (temp_r31->unk00_bit4) { @@ -992,27 +967,32 @@ void fn_1_5AC8(omObjData* arg0) { } } +char *lbl_1_data_35C[] = { + "jyanA", + "jyanB" +}; + void fn_1_5C5C(omObjData* arg0, w03UnkStruct5* arg1) { Mtx sp110; Mtx spE0; Mtx spB0; Mtx sp80; Mtx sp50; - Point3d sp44; - Point3d sp38; - Point3d sp2C; - Point3d sp20; - Point3d sp14; - Point3d sp8; + Vec sp44; + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; s16 temp_r3; char* temp_r27; - ModelDataTemp* temp_r30; + ModelData* temp_r30; if (((WipeStatGet() == 0) && (arg1->unk00_bit3) || (BoardModelMotionEndCheck(lbl_1_data_314) != 0))) { fn_1_629C(3); return; } - if ((BoardModelMotionTimeGet(lbl_1_data_314) >= lbl_1_rodata_1E0) && (arg1->unk00_bit3) == 0) { + if ((BoardModelMotionTimeGet(lbl_1_data_314) >= 410.0f) && (arg1->unk00_bit3) == 0) { WipeColorSet(0, 0, 0); WipeCreate(2, 0, -1); arg1->unk00_bit3 = 1; @@ -1026,10 +1006,10 @@ void fn_1_5C5C(omObjData* arg0, w03UnkStruct5* arg1) { temp_r27 = lbl_1_data_35C[lbl_1_bss_0->unk1]; Hu3DMotionExec(temp_r3, temp_r30->unk_08, temp_r30->unk_64, 0); Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_314), temp_r27, &sp44); - if (lbl_1_rodata_E8 != temp_r30->unk_64) { + if (0.0f != temp_r30->unk_64) { PSVECSubtract(&sp38, &sp44, &sp2C); } else { - sp2C.x = sp2C.y = sp2C.z = lbl_1_rodata_E8; + sp2C.x = sp2C.y = sp2C.z = 0.0f; } arg0->rot.x = sp44.x; arg0->rot.y = sp44.y; @@ -1037,25 +1017,25 @@ void fn_1_5C5C(omObjData* arg0, w03UnkStruct5* arg1) { fn_1_602C(arg0, arg1); sp8 = sp38; sp14 = sp44; - sp20.x = sp20.z = lbl_1_rodata_E8; - sp20.y = lbl_1_rodata_168; + sp20.x = sp20.z = 0.0f; + sp20.y = 1.0f; BoardMTXCalcLookAt(sp110, &sp14, &sp20, &sp8); PSMTXTranspose(sp110, sp110); - PSMTXRotRad(spE0, 0x7A, lbl_1_rodata_178 * -arg1->unk_04); - PSMTXTrans(sp50, lbl_1_rodata_E8, lbl_1_rodata_1E4, lbl_1_rodata_E8); + MTXRotDeg(spE0, 'z', -arg1->unk_04); + PSMTXTrans(sp50, 0.0f, -600.0f, 0.0f); PSMTXConcat(spE0, sp50, sp50); PSMTXConcat(sp110, sp50, sp50); PSMTXTrans(sp80, sp44.x, sp44.y, sp44.z); PSMTXConcat(sp80, sp50, sp80); Hu3DMtxTransGet(sp80, &sp44); - PSMTXRotRad(spB0, 0x79, (lbl_1_rodata_1E8 * (lbl_1_rodata_100 * (atan2(-sp2C.x, -sp2C.z) / lbl_1_rodata_F8)))); + MTXRotDeg(spB0, 'y', (180.0 * (atan2(-sp2C.x, -sp2C.z) / M_PI))); PSMTXConcat(spB0, spE0, sp110); BoardModelMtxSet(lbl_1_data_310, &sp110); BoardModelPosSetV(lbl_1_data_310, &sp44); - BoardCameraRotSet(lbl_1_rodata_1D4, (lbl_1_rodata_100 * (atan2(sp2C.x, sp2C.z) / lbl_1_rodata_F8))); + BoardCameraRotSet(-20.0f, (180.0 * (atan2(sp2C.x, sp2C.z) / M_PI))); } -void fn_1_602C(s32 arg0, w03UnkStruct5* arg1) { +void fn_1_602C(omObjData* arg0, w03UnkStruct5* arg1) { f32 temp_f31 = 0.0f; f32 var_f30; f32 var_f29; @@ -1065,20 +1045,20 @@ void fn_1_602C(s32 arg0, w03UnkStruct5* arg1) { } else { var_f30 = fn_1_61A4(arg0, arg1); } - temp_f31 = lbl_1_rodata_1F0 * var_f30; - if (temp_f31 < lbl_1_rodata_E8) { + temp_f31 = 0.625f * var_f30; + if (temp_f31 < 0.0f) { var_f29 = -temp_f31; } else { var_f29 = temp_f31; } - if (var_f29 < lbl_1_rodata_1F4) { - arg1->unk_04 *= lbl_1_rodata_1F8; + if (var_f29 < 2.0f) { + arg1->unk_04 *= 0.97f; return; } - BoardDAngleCalcRange(&arg1->unk_04, temp_f31, lbl_1_rodata_168); + BoardDAngleCalcRange(&arg1->unk_04, temp_f31, 1.0f); } -f32 fn_1_61A4(s32 arg0, w03UnkStruct5* arg1) { +f32 fn_1_61A4(omObjData* arg0, w03UnkStruct5* arg1) { w03StructUnk3* sp8; f32 temp_f31; s16 i; @@ -1098,7 +1078,7 @@ f32 fn_1_61A4(s32 arg0, w03UnkStruct5* arg1) { for (i = 0; i < var_r28; i++) { temp_r31 = lbl_1_bss_80[i]; if ((temp_r31[1] < temp_f31) && (temp_r31[3] > temp_f31)) { - return lbl_1_rodata_208 * temp_r31[2]; + return -1.5f * temp_r31[2]; } } return 0.0f; @@ -1121,10 +1101,10 @@ void fn_1_62FC(void) { f32 temp1; HuWinMesMaxSizeGet(1, sp8, messageID); - temp0 = lbl_1_rodata_20C; - temp1 = lbl_1_rodata_210; + temp0 = -10000.0f; + temp1 = 392.0f; lbl_1_data_316 = HuWinCreate(temp0, temp1, sp8[0], sp8[1], 0); - HuWinBGTPLvlSet(lbl_1_data_316, lbl_1_rodata_E8); + HuWinBGTPLvlSet(lbl_1_data_316, 0.0f); HuWinMesSpeedSet(lbl_1_data_316, 0); HuWinMesSet(lbl_1_data_316, messageID); } From 710a2cd1bac500ed7abd593d4adb844c039dd693 Mon Sep 17 00:00:00 2001 From: Rainchus Date: Tue, 26 Mar 2024 22:59:08 -0500 Subject: [PATCH 093/106] move reg alloc hack to avoid warning --- src/REL/w03Dll/condor.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/REL/w03Dll/condor.c b/src/REL/w03Dll/condor.c index 3ee28ba7..97e9d21b 100644 --- a/src/REL/w03Dll/condor.c +++ b/src/REL/w03Dll/condor.c @@ -642,10 +642,6 @@ void fn_1_4ABC(w03StructUnk2* arg0) { w03StructUnk3* temp_r31; s32 i; - //reg alloc hack - (void)i; - (void)i; - BoardModelPosGet(lbl_1_data_310, &sp8); sp8.y += 250.0f; @@ -664,6 +660,10 @@ void fn_1_4ABC(w03StructUnk2* arg0) { } } + //reg alloc hack + (void)i; + (void)i; + BoardModelPosGet(lbl_1_data_310, &sp8); for (i = arg0->unk_03; i < 0x50; i++) { From 08594854de9dafaf47025804d27f9a26758e060e Mon Sep 17 00:00:00 2001 From: Rainchus Date: Tue, 26 Mar 2024 23:54:03 -0500 Subject: [PATCH 094/106] cleanup a bit of w03 --- src/REL/w03Dll/condor.c | 260 ++++++++++++++++++++++----------------- src/REL/w03Dll/main.c | 47 +++++-- src/REL/w03Dll/mg_coin.c | 76 +++++++++--- src/REL/w03Dll/mg_item.c | 101 +++++++++++---- src/REL/w03Dll/river.c | 94 +++++++++----- src/REL/w03Dll/smoke.c | 12 +- src/REL/w03Dll/statue.c | 66 +++++++--- src/REL/w10Dll/main.c | 2 +- 8 files changed, 441 insertions(+), 217 deletions(-) diff --git a/src/REL/w03Dll/condor.c b/src/REL/w03Dll/condor.c index 97e9d21b..af07abe7 100644 --- a/src/REL/w03Dll/condor.c +++ b/src/REL/w03Dll/condor.c @@ -12,13 +12,72 @@ #include "game/pad.h" #include "game/wipe.h" -//file is full of old names and old signatures...needs updating -//is also missing half the functions in this TU +//structs +typedef struct w03UnkStruct5 { + /* 0x00 */ struct { + u8 unk00_bit0 : 1; + u8 unk00_bit1 : 2; + u8 unk00_bit3 : 1; + u8 unk00_bit4 : 4; + }; + /* 0x01 */ char unk_01[3]; + /* 0x04 */ f32 unk_04; + /* 0x08 */ f32 unk_08; +} w03UnkStruct5; + +typedef struct w03UnkStruct4 { + /* 0x00 */ struct { + u8 unk00_bit0 : 1; + }; +} w03UnkStruct4; + +typedef struct w03StructUnk3 { +/* 0x00 */ s16 unk_00; +/* 0x02 */ s16 model; +/* 0x04 */ f32 unk_04; +/* 0x08 */ Vec unk_08; +/* 0x14 */ Vec unk_14; +} w03StructUnk3; + +typedef struct w03StructUnk2 { +/* 0x00 */ struct { + u8 unkbit_00 : 1; + u8 unkbit_01 : 2; + u8 unkbit_03 : 1; + u8 unkbit_04 : 1; + }; + s8 unk_01; + s8 unk_02; + u8 unk_03; + s16 model; + char unk_06[2]; + w03StructUnk3* unk_08; +} w03StructUnk2; + +//function signatures void fn_1_313C(void); void fn_1_3218(void); void fn_1_3304(void); +s32 fn_1_3478(s32); +void fn_1_3814(s32); +void fn_1_3968(s32); +void fn_1_3E88(s32); +void fn_1_3F5C(s32); +void fn_1_4354(s32); +void fn_1_48EC(s32); +void fn_1_4A9C(void); +void fn_1_50D4(omObjData* arg0); +void fn_1_5838(s32); +void fn_1_5AC8(omObjData* arg0); +void fn_1_5C5C(omObjData* arg0, w03UnkStruct5* arg1); +void fn_1_602C(omObjData* arg0, w03UnkStruct5* arg1); +f32 fn_1_61A4(omObjData* arg0, w03UnkStruct5* arg1); +void fn_1_629C(s8 arg0); +s32 fn_1_62D0(void); +void fn_1_62FC(void); +//bss float lbl_1_bss_80[20][2]; s8 lbl_1_bss_7D; s8 lbl_1_bss_7C; @@ -26,12 +85,7 @@ omObjData *lbl_1_bss_78; omObjData *lbl_1_bss_74; Process* lbl_1_bss_70; - -// #define MAKE_DATA_NUM(dir, file) (((dir) << 16)+(file)) -// #define MAKE_DIR_NUM(dir) ((dir) << 16) - -// #define DATA_NUM_LISTEND -1 - +//data s16 lbl_1_data_310 = -1; s16 lbl_1_data_312 = -1; s16 lbl_1_data_314 = -1; @@ -63,19 +117,13 @@ s32 fn_1_309C(void) { return lbl_1_bss_7C; } -s32 fn_1_3478(s32); -void fn_1_3814(s32); -void fn_1_3968(s32); -void fn_1_3E88(s32); -void fn_1_3F5C(s32); -extern s8 lbl_1_bss_7C; - void fn_1_313C(void) { s32 temp_r31; temp_r31 = GWSystem.player_curr; lbl_1_bss_7C = 0; lbl_1_bss_0->unk3 = 1; + if (fn_1_3478(temp_r31) != 0) { BoardCameraNearFarSet(500.0f, 20000.0f); BoardStatusShowSetAll(0); @@ -84,6 +132,7 @@ void fn_1_313C(void) { fn_1_3F5C(temp_r31); lbl_1_bss_7C = 1; } + BoardCameraNearFarSet(100.0f, 13000.0f); fn_1_3814(temp_r31); HuPrcEnd(); @@ -95,14 +144,17 @@ void fn_1_3218(void) { HuWinKill(lbl_1_data_316); lbl_1_data_316 = -1; } + if (lbl_1_data_314 != -1) { BoardModelKill(lbl_1_data_314); lbl_1_data_314 = -1; } + if (lbl_1_data_312 != -1) { BoardPlayerMotionKill(GWSystem.player_curr, lbl_1_data_312); lbl_1_data_312 = -1; } + lbl_1_bss_0->unk3 = 0; lbl_1_bss_70 = 0; } @@ -112,13 +164,13 @@ void fn_1_3304(void) { Vec sp8; f32 temp_f31; s32 var_r31; - if (lbl_1_bss_0->unk1 != 0) { var_r31 = BoardSpaceFlagSearch(0, 0x4000); } else { var_r31 = BoardSpaceFlagSearch(0, 0x8000); } + var_r31 = BoardSpaceLinkFlagSearch(0, var_r31, 0x02000000); BoardSpacePosGet(0, var_r31, &sp8); temp_f31 = 0.0f; @@ -129,9 +181,6 @@ void fn_1_3304(void) { BoardModelMotionStart(lbl_1_data_310, 2, 0x40000001); } -void fn_1_4354(s32); - - s32 fn_1_3478(s32 arg0) { Vec sp38; Vec sp2C; @@ -140,7 +189,6 @@ s32 fn_1_3478(s32 arg0) { f32 sp18; Vec sp14; Vec sp8; - s32 temp_r28; s32 temp_r3; s32 var_r29; @@ -185,15 +233,16 @@ s32 fn_1_3478(s32 arg0) { BoardWinCreate(2, 0x160010, 8); BoardWinInsertMesSet(temp_r26, 3); BoardWinWait(); + if (BoardPlayerCoinsGet(arg0) < 5) { BoardWinCreate(2, 0x160013, 8); BoardWinWait(); BoardWinKill(); return 0; } + var_r29 = 0; - goto test; - while (1) { + while (var_r29 == 0) { BoardWinCreateChoice(2, 0x160011, 8, 0); BoardWinAttrSet(0x10); @@ -217,22 +266,20 @@ s32 fn_1_3478(s32 arg0) { BoardWinKill(); return 0; } - test: - if (var_r29 != 0) { - BoardAudSeqPause(0, 1, 1000); - for (j = 0; j < 5; j++) { - BoardPlayerCoinsAdd(arg0, -1); - HuAudFXPlay(14); - HuPrcSleep(6); - } - HuAudFXPlay(15); - BoardWinKill(); - return 1; - } } -} -extern s8 lbl_1_bss_7C; + BoardAudSeqPause(0, 1, 1000); + + for (j = 0; j < 5; j++) { + BoardPlayerCoinsAdd(arg0, -1); + HuAudFXPlay(14); + HuPrcSleep(6); + } + + HuAudFXPlay(15); + BoardWinKill(); + return 1; +} void fn_1_3814(s32 arg0) { Vec sp14; @@ -249,6 +296,7 @@ void fn_1_3814(s32 arg0) { BoardCameraViewSet(1); BoardCameraTargetPlayerSet(arg0); + if (lbl_1_bss_7C != 0) { BoardSpacePosGet(0, GWPlayer[arg0].space_curr, &sp14); BoardPlayerPosGet(arg0, &sp8); @@ -257,6 +305,7 @@ void fn_1_3814(s32 arg0) { HuPrcVSleep(); } } + BoardPlayerIdleSet(arg0); BoardCameraMotionWait(); } @@ -304,6 +353,7 @@ void fn_1_3968(s32 arg0) { sp24.y = temp_f28 + (-0.08166667f * (0.75f * (temp_f31 * temp_f31))); PSVECAdd(&sp30, &sp24, &sp30); temp_f30 = BoardVecDistXZCalc(&sp3C, &sp30); + if (temp_f30 < 5.0f) { sp24.x = sp24.z = 0.0f; sp30.x = sp3C.x; @@ -323,6 +373,7 @@ void fn_1_3968(s32 arg0) { sp30.y = sp3C.y; break; } + BoardPlayerPosSetV(arg0, &sp30); HuPrcVSleep(); sp8 += 1; @@ -357,11 +408,6 @@ void fn_1_3968(s32 arg0) { } } -void fn_1_48EC(s32); /* extern */ -void fn_1_4A9C(void); /* extern */ -void fn_1_5838(s32); /* extern */ -s32 fn_1_62D0(void); /* extern */ - void fn_1_3E88(s32 arg0) { lbl_1_bss_7D = 0; fn_1_48EC(arg0); @@ -370,15 +416,19 @@ void fn_1_3E88(s32 arg0) { BoardStatusShowSetForce(arg0); BoardStatusShowSet(arg0, 1); WipeCreate(1, 0, 0x15); + while (WipeStatGet() != 0) { HuPrcVSleep(); } + while (fn_1_62D0() != 3) { HuPrcVSleep(); } + while (WipeStatGet() != 0) { HuPrcVSleep(); } + fn_1_4A9C(); BoardAudSeqPause(0, 0, 0x3E8); } @@ -401,14 +451,17 @@ void fn_1_3F5C(s32 arg0) { lbl_1_bss_0->unk1 = 1; var_r30 = BoardSpaceFlagSearch(0, 0x4000); } + temp_r28 = BoardSpaceLinkFlagSearch(0, var_r30, 0x02000000); BoardCameraMoveSet(0); BoardModelHookReset(lbl_1_data_310); + if (lbl_1_bss_0->unk1 != 0) { var_r31 = BoardSpaceFlagSearch(0, 0x4000); } else { var_r31 = BoardSpaceFlagSearch(0, 0x8000); } + var_r31 = BoardSpaceLinkFlagSearch(0, var_r31, 0x02000000); BoardSpacePosGet(0, var_r31, &sp8); temp_f31 = 0.0f; @@ -421,12 +474,14 @@ void fn_1_3F5C(s32 arg0) { BoardModelRotYSet(lbl_1_data_310, 0.0f); PSMTXIdentity(sp38); BoardModelMtxSet(lbl_1_data_310, &sp38); + sp20.x = 0.0f; sp20.y = 150.0f; sp20.z = 0.0f; sp14.x = -15.0f; sp14.y = 0.0f; sp14.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_data_310, &sp14, &sp20, 1900.0f, -1.0f, 1); BoardSpacePosGet(0, temp_r28, &sp2C); BoardPlayerPosSetV(arg0, &sp2C); @@ -441,9 +496,11 @@ void fn_1_3F5C(s32 arg0) { HuPrcSleep(2); BoardStatusItemSet(1); WipeCreate(1, 0, 0x15); + while (WipeStatGet() != 0) { HuPrcVSleep(); } + BoardWinCreate(2, 0x16000F, 8); BoardWinWait(); BoardWinKill(); @@ -464,39 +521,19 @@ void fn_1_4354(s32 arg0) { } else if ((starPos == 0) || (starPos == 5) || (starPos == 6) || (starPos == 7)) { var_r30 = 1; } + if (BoardPlayerCoinsGet(arg0) < 0x14) { var_r30 = 1; } + if (var_r30 != 0) { BoardComKeySetLeft(); return; } + BoardComKeySetRight(); } -typedef struct w03StructUnk3 { -/* 0x00 */ s16 unk_00; -/* 0x02 */ s16 model; -/* 0x04 */ f32 unk_04; -/* 0x08 */ Vec unk_08; -/* 0x14 */ Vec unk_14; -} w03StructUnk3; - -typedef struct w03StructUnk2 { -/* 0x00 */ struct { - u8 unkbit_00 : 1; - u8 unkbit_01 : 2; - u8 unkbit_03 : 1; - u8 unkbit_04 : 1; - }; - s8 unk_01; - s8 unk_02; - u8 unk_03; - s16 model; - char unk_06[2]; - w03StructUnk3* unk_08; -} w03StructUnk2; - char *lbl_1_data_34C[] = { "jyanA", "jyanB" @@ -536,12 +573,14 @@ void fn_1_4424(w03StructUnk2* arg0) { sp14 = 0; BoardSpaceFlagPosGet(0, 0x8000U, &sp6C); BoardSpaceFlagPosGet(0, 0x8000U, &sp60); + if (lbl_1_bss_0->unk1 != 0) { PSVECSubtract(&sp6C, &sp60, &sp3C); } else { PSVECSubtract(&sp60, &sp6C, &sp3C); } - sp10_2 = 180.0f * (atan2(-sp3C.x, -sp3C.z) / 3.141592653589793); + + sp10_2 = 180.0f * (atan2(-sp3C.x, -sp3C.z) / M_PI); BoardModelMotionStart(lbl_1_data_314, 0, 0U); BoardModelMotionSpeedSet(lbl_1_data_314, 8.0f); HuPrcSleep(1); @@ -552,10 +591,12 @@ void fn_1_4424(w03StructUnk2* arg0) { sp24.x = 0.0f; sp24.y = 1.0f; sp24.z = 0.0f; + for (i = var_r25 = 0; i < 20;) { Hu3DMotionExec(temp_r23, temp_r28->unk_08, temp_r28->unk_64, 0); Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_314), temp_r22, &sp54); temp_r28->unk_64 = (f32) (temp_r28->unk_64 + temp_r28->unk_68); + if (temp_r28->unk_64 > 400.0f) { break; } @@ -587,11 +628,10 @@ void fn_1_4424(w03StructUnk2* arg0) { sp48 = sp54; var_r25++; } + arg0->unk_03 = i; } -void fn_1_50D4(omObjData* arg0); - void fn_1_48EC(s32 arg0) { Vec spC; omObjData* obj; @@ -616,7 +656,7 @@ void fn_1_48EC(s32 arg0) { BoardModelLayerSet(temp_r31->model, 2U); memset(temp_r31->unk_08, 0, 0xA00U); - for (i = 0; i < 0x50; i++) { + for (i = 0; i < 80; i++) { temp_r30 = &temp_r31->unk_08[i]; temp_r30->model = BoardModelCreate(0x70009, 0, 1); BoardModelVisibilitySet(temp_r30->model, 0); @@ -626,14 +666,8 @@ void fn_1_48EC(s32 arg0) { fn_1_4424(temp_r31); } -typedef struct w03UnkStruct4 { - /* 0x00 */ struct { - u8 unk00_bit0 : 1; - }; -} w03UnkStruct4; - void fn_1_4A9C(void) { - ((w03UnkStruct4*)&lbl_1_bss_74->work[0])->unk00_bit0 = 1; + OM_GET_WORK_PTR(lbl_1_bss_74, w03UnkStruct4)->unk00_bit0 = 1; } void fn_1_4ABC(w03StructUnk2* arg0) { @@ -666,7 +700,7 @@ void fn_1_4ABC(w03StructUnk2* arg0) { BoardModelPosGet(lbl_1_data_310, &sp8); - for (i = arg0->unk_03; i < 0x50; i++) { + for (i = arg0->unk_03; i < 80; i++) { temp_r31 = &arg0->unk_08[i]; if (temp_r31->unk_00 == 1) { temp_r31->unk_04 += 1.0f; @@ -690,15 +724,13 @@ void fn_1_4ABC(w03StructUnk2* arg0) { } } - -extern omObjData* lbl_1_bss_74; - s32 fn_1_4D0C(w03StructUnk3** arg0, s16* arg1) { w03StructUnk2* temp_r31; if (!(lbl_1_bss_74)) { return 0; } + temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_74, w03StructUnk2); *arg0 = temp_r31->unk_08; *arg1 = temp_r31->unk_03; @@ -716,15 +748,15 @@ void fn_1_4D60(w03StructUnk2* arg0) { if (arg0->unk_02 == 1) { Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[2]), "coin", &sp8); for (i = 0; i < 5; i++) { - for (j = arg0->unk_03; j < 0x50; j++) { + for (j = arg0->unk_03; j < 80; j++) { temp_r31 = &arg0->unk_08[j]; if (temp_r31->unk_00 == 0) { temp_r31->unk_00 = 1; temp_f31 = 360.0f * BoardRandFloat(); temp_f30 = 5.0f * BoardRandFloat(); - temp_r31->unk_14.x = temp_f30 * sin((3.141592653589793 * temp_f31) / 180.0); + temp_r31->unk_14.x = temp_f30 * sin((M_PI * temp_f31) / 180.0); temp_r31->unk_14.y = 50.0f + (20.0f * BoardRandFloat()); - temp_r31->unk_14.z = temp_f30 * cos((3.141592653589793 * temp_f31) / 180.0); + temp_r31->unk_14.z = temp_f30 * cos((M_PI * temp_f31) / 180.0); temp_r31->unk_08.x = sp8.x; temp_r31->unk_08.y = sp8.y; temp_r31->unk_08.z = sp8.z; @@ -753,8 +785,10 @@ void fn_1_4F24(w03StructUnk2* arg0) { } else { var_r30 = sp8[GWPlayer[arg0->unkbit_01].rank]; } + temp_r29 = BoardRandMod(100); temp_r28 = BoardRandMod(100); + if (temp_r29 < var_r30) { if (temp_r28 < 30) { arg0->unk_02 = 2; @@ -764,6 +798,7 @@ void fn_1_4F24(w03StructUnk2* arg0) { } else { arg0->unk_02 = 0; } + if (arg0->unk_02 != 0) { BoardModelMotionShiftSet(lbl_1_bss_C[2], 0, 101.0f, 10.0f, 0); } @@ -789,8 +824,9 @@ void fn_1_50D4(omObjData* arg0) { w03StructUnk3* temp; temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_74, w03StructUnk2); + if ((temp_r31->unkbit_00 != 0) || (BoardIsKill() != 0)) { - for (i = 0; i < 0x50; i++) { + for (i = 0; i < 80; i++) { temp = &temp_r31->unk_08[i]; BoardModelKill(temp->model); } @@ -817,7 +853,7 @@ void fn_1_50D4(omObjData* arg0) { temp_r31->unk_01 = 1; } } else { - fn_1_4F24(temp_r31); //inline + fn_1_4F24(temp_r31); } if (temp_r31->unk_01 != 0) { @@ -841,7 +877,7 @@ void fn_1_50D4(omObjData* arg0) { } if (temp_r31->unk_02 == 1) { omVibrate(GWSystem.player_curr, 0xC, 4, 2); - fn_1_4D60(temp_r31); //inline + fn_1_4D60(temp_r31); } else if ((temp_r31->unk_02 == 2) && (temp_r31->unkbit_03 == 0)) { omVibrate(GWSystem.player_curr, 0xC, 0xC, 0); BoardModelVisibilitySet(temp_r31->model, 1); @@ -867,25 +903,6 @@ void fn_1_50D4(omObjData* arg0) { } } -typedef struct w03UnkStruct5 { - /* 0x00 */ struct { - u8 unk00_bit0 : 1; - u8 unk00_bit1 : 2; - u8 unk00_bit3 : 1; - u8 unk00_bit4 : 4; - }; - /* 0x01 */ char unk_01[3]; - /* 0x04 */ f32 unk_04; - /* 0x08 */ f32 unk_08; -} w03UnkStruct5; - -void fn_1_5AC8(omObjData* arg0); -void fn_1_5C5C(omObjData* arg0, w03UnkStruct5* arg1); -void fn_1_602C(omObjData* arg0, w03UnkStruct5* arg1); -f32 fn_1_61A4(omObjData* arg0, w03UnkStruct5* arg1); -void fn_1_629C(s8 arg0); -void fn_1_62FC(void); - void fn_1_5838(s32 arg0) { Vec sp18; Vec spC; @@ -899,6 +916,7 @@ void fn_1_5838(s32 arg0) { temp_r31->unk00_bit1 = arg0; temp_r31->unk00_bit4 = 1; temp_r31->unk00_bit3 = 0; + switch (GWPlayer[temp_r31->unk00_bit1].diff) { case 0: temp_r31->unk_08 = (-15.0f + (-30.0f * BoardRandFloat())); @@ -913,13 +931,16 @@ void fn_1_5838(s32 arg0) { temp_r31->unk_08 = 0.0f; break; } + BoardCameraMoveSet(0); + sp18.x = 0.0f; sp18.y = -350.0f; sp18.z = 0.0f; spC.x = -20.0f; spC.y = 0.0f; spC.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_data_310, &spC, &sp18, 3000.0f, -1.0f, 1); BoardModelMotionStart(lbl_1_data_310, 3, 0x40000001U); BoardModelMotionStart(lbl_1_data_314, 0, 0U); @@ -934,6 +955,7 @@ void fn_1_5AC8(omObjData* arg0) { w03UnkStruct5* temp_r31; temp_r31 = OM_GET_WORK_PTR(arg0, w03UnkStruct5); + if ((temp_r31->unk00_bit0 != 0) || (BoardIsKill() != 0)) { lbl_1_bss_78 = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); @@ -943,9 +965,11 @@ void fn_1_5AC8(omObjData* arg0) { } return; } + if ((10.0f == BoardModelMotionTimeGet(lbl_1_data_310)) || (50.0f == BoardModelMotionTimeGet(lbl_1_data_310))) { HuAudFXPlay(0x43B); } + switch (temp_r31->unk00_bit4) { case 1: if (lbl_1_bss_7D != 0) { @@ -992,33 +1016,42 @@ void fn_1_5C5C(omObjData* arg0, w03UnkStruct5* arg1) { fn_1_629C(3); return; } + if ((BoardModelMotionTimeGet(lbl_1_data_314) >= 410.0f) && (arg1->unk00_bit3) == 0) { WipeColorSet(0, 0, 0); WipeCreate(2, 0, -1); arg1->unk00_bit3 = 1; BoardAudSeqFadeOut(1, 0x3E8); } + sp38.x = arg0->rot.x; sp38.y = arg0->rot.y; sp38.z = arg0->rot.z; + temp_r3 = BoardModelIDGet(lbl_1_data_314); temp_r30 = &Hu3DData[temp_r3]; temp_r27 = lbl_1_data_35C[lbl_1_bss_0->unk1]; + Hu3DMotionExec(temp_r3, temp_r30->unk_08, temp_r30->unk_64, 0); Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_314), temp_r27, &sp44); + if (0.0f != temp_r30->unk_64) { PSVECSubtract(&sp38, &sp44, &sp2C); } else { sp2C.x = sp2C.y = sp2C.z = 0.0f; } + arg0->rot.x = sp44.x; arg0->rot.y = sp44.y; arg0->rot.z = sp44.z; + fn_1_602C(arg0, arg1); + sp8 = sp38; sp14 = sp44; sp20.x = sp20.z = 0.0f; sp20.y = 1.0f; + BoardMTXCalcLookAt(sp110, &sp14, &sp20, &sp8); PSMTXTranspose(sp110, sp110); MTXRotDeg(spE0, 'z', -arg1->unk_04); @@ -1045,16 +1078,20 @@ void fn_1_602C(omObjData* arg0, w03UnkStruct5* arg1) { } else { var_f30 = fn_1_61A4(arg0, arg1); } + temp_f31 = 0.625f * var_f30; + if (temp_f31 < 0.0f) { var_f29 = -temp_f31; } else { var_f29 = temp_f31; } + if (var_f29 < 2.0f) { arg1->unk_04 *= 0.97f; return; } + BoardDAngleCalcRange(&arg1->unk_04, temp_f31, 1.0f); } @@ -1081,6 +1118,7 @@ f32 fn_1_61A4(omObjData* arg0, w03UnkStruct5* arg1) { return -1.5f * temp_r31[2]; } } + return 0.0f; } @@ -1095,15 +1133,15 @@ s32 fn_1_62D0(void) { } void fn_1_62FC(void) { - f32 sp8[2]; + f32 widthHeight[2]; s32 messageID = 0x000D0005; - f32 temp0; - f32 temp1; + f32 x; + f32 y; - HuWinMesMaxSizeGet(1, sp8, messageID); - temp0 = -10000.0f; - temp1 = 392.0f; - lbl_1_data_316 = HuWinCreate(temp0, temp1, sp8[0], sp8[1], 0); + HuWinMesMaxSizeGet(1, widthHeight, messageID); + x = -10000.0f; + y = 392.0f; + lbl_1_data_316 = HuWinCreate(x, y, widthHeight[0], widthHeight[1], 0); HuWinBGTPLvlSet(lbl_1_data_316, 0.0f); HuWinMesSpeedSet(lbl_1_data_316, 0); HuWinMesSet(lbl_1_data_316, messageID); diff --git a/src/REL/w03Dll/main.c b/src/REL/w03Dll/main.c index a75163aa..bfcaf2c4 100644 --- a/src/REL/w03Dll/main.c +++ b/src/REL/w03Dll/main.c @@ -19,25 +19,25 @@ #include "math.h" #include "game/hsfman.h" -void fn_1_740(void); +//function signatures void fn_1_E0(void); -s32 fn_1_2930(s32 arg0); void fn_1_884(void); +void fn_1_740(void); void fn_1_8F0(void); s32 fn_1_910(void); s32 fn_1_A74(void); void fn_1_AF8(void); void fn_1_DEC(void); void fn_1_10B0(void); -s32 fn_1_12C8(void); -s32 fn_8006DDE8(s16, f32); void fn_1_10E4(omObjData* arg0); +s32 fn_1_12C8(void); +s32 fn_1_2930(s32 arg0); + typedef void (*VoidFunc)(void); extern const VoidFunc _ctors[]; extern const VoidFunc _dtors[]; - -//DATA +//data w03StructUnk0 lbl_1_data_0[] = { {{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0004)}, {{145.0988f, 65.6173f, -2004.14f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0005)}, @@ -125,26 +125,31 @@ void BoardCreate(void) { lbl_1_bss_0 = (w03State*)&GWSystem.board_data; lbl_1_bss_0->unk3 = 0; BoardSpaceInit(0x770000); + lbl_1_data_1E0 = BoardModelCreate(0x770001, NULL, 0); fn_8006DDE8(lbl_1_data_1E0, -1.0f); BoardModelPosSet(lbl_1_data_1E0, 0.0f, 0.0f, 0.0f); BoardModelMotionStart(lbl_1_data_1E0, 0, 0x40000001); + lbl_1_data_1E8 = BoardModelCreate(0x770003, NULL, 0); fn_8006DDE8(lbl_1_data_1E8, -1.0f); BoardModelPosSet(lbl_1_data_1E8, 0.0f, 0.0f, 0.0f); BoardModelLayerSet(lbl_1_data_1E8, 2); + lbl_1_data_1E2 = BoardModelCreate(0x770002, NULL, 0); fn_8006DDE8(lbl_1_data_1E2, -1.0f); BoardModelPosSet(lbl_1_data_1E2, 0.0f, 0.0f, 0.0f); BoardModelMotionStart(lbl_1_data_1E2, 0, 0x40000001); + lbl_1_data_1E4 = BoardModelCreate(0x77001B, lbl_1_data_20C, 0); BoardModelPosSet(lbl_1_data_1E4, 0.0f, 0.0f, 0.0f); BoardModelMotionStart(lbl_1_data_1E4, 1, 0x40000001); + lbl_1_data_1E6 = BoardModelCreate(0x2000D, lbl_1_data_214, 0); BoardModelPosSet(lbl_1_data_1E6, 0.0f, 0.0f, 0.0f); BoardModelMotionStart(lbl_1_data_1E6, 1, 0x40000001); - for (i = 0; i < 12; i++) { + for (i = 0; i < ARRAY_COUNT(lbl_1_data_0); i++) { temp_r30 = &lbl_1_data_0[i]; if (temp_r30->datanum != -1) { if ((i == 10) || (i == 11)) { @@ -159,15 +164,18 @@ void BoardCreate(void) { BoardModelVisibilitySet(lbl_1_bss_C[i], 1); } } + BoardModelMotionStart(lbl_1_bss_C[10], 1, 0x40000001); BoardModelMotionStart(lbl_1_bss_C[11], 1, 0x40000001); BoardModelMotionStart(lbl_1_bss_C[7], 0, 0x40000002); BoardModelMotionStart(lbl_1_bss_C[9], 0, 0x40000002); BoardModelMotionStart(lbl_1_bss_C[1], 0, 0x40000002); + fn_1_3058(); fn_1_6494(); fn_1_7ABC(); fn_1_9A7C(); + BoardLightHookSet(&fn_1_884, &fn_1_8F0); BoardSpaceWalkEventFuncSet(&fn_1_910); BoardSpaceWalkMiniEventFuncSet((void*)&fn_1_A74); @@ -180,6 +188,7 @@ void BoardCreate(void) { BoardJunctionMaskSet(0x3000); fn_1_CF4(); BoardModelMotionStart(lbl_1_bss_C[0], 0, 0x40000001); + if (lbl_1_bss_0->unk0 != 0) { var_f30 = lbl_1_data_1EC.unk_10; var_f31 = lbl_1_data_1EC.unk_14; @@ -189,10 +198,12 @@ void BoardCreate(void) { var_f31 = lbl_1_data_1EC.unk_04; fn_1_63F4(1); } + BoardModelMotionStartEndSet(lbl_1_bss_C[0], var_f30, var_f31); BoardModelMotionStart(lbl_1_bss_C[2], 0, 0x40000001); - BoardModelMotionStartEndSet(lbl_1_bss_C[2], 1, 0x64); + BoardModelMotionStartEndSet(lbl_1_bss_C[2], 1, 100); fn_1_785C(); + if (lbl_1_bss_0->unk2 != 0) { for (i = 0; i < 4; i++) { if ((lbl_1_bss_0->unk2 & (1 << i)) != 0) { @@ -201,6 +212,7 @@ void BoardCreate(void) { } } } + fn_1_DEC(); } @@ -210,22 +222,27 @@ void BoardDestroy(void) { fn_1_10B0(); fn_1_9A9C(); fn_1_7B58(); + for (i = 0; i < 0x0C; i++) { BoardModelKill(lbl_1_bss_C[i]); lbl_1_bss_C[i] = -1; } + if (lbl_1_data_1E6 != -1) { BoardModelKill(lbl_1_data_1E6); lbl_1_data_1E6 = -1; } + if (lbl_1_data_1E4 != -1) { BoardModelKill(lbl_1_data_1E4); lbl_1_data_1E4 = -1; } + if (lbl_1_data_1E0 != -1) { BoardModelKill(lbl_1_data_1E0); lbl_1_data_1E0 = -1; } + if (lbl_1_data_1E2 != -1) { BoardModelKill(lbl_1_data_1E2); lbl_1_data_1E2 = -1; @@ -250,6 +267,7 @@ s32 fn_1_910(void) { cur_player_index = GWSystem.player_curr; space = GWPlayer[cur_player_index].space_curr; temp_r3 = BoardSpaceFlagGet(0, space); + if (temp_r3 & 0xC000) { if ((BoardPlayerSizeGet(cur_player_index) == 2) || ((u8) (( GWPlayer[cur_player_index].bowser_suit)))) { return 0; @@ -265,18 +283,21 @@ s32 fn_1_910(void) { return fn_1_309C(); } + if (temp_r3 & 0x200) { if ((BoardPlayerSizeGet(cur_player_index) == 2) || ((u8) ((GWPlayer[cur_player_index].bowser_suit)) != 0)) { return 0; } return fn_1_675C(); } + return 0; } s32 fn_1_A74(void) { s16 space = GWPlayer[GWSystem.player_curr].space_curr; u32 var = BoardSpaceFlagGet(0, space) & 0x600000; + if (var + -0x200000 == 0) { fn_1_7BA8(); return; @@ -311,8 +332,10 @@ void fn_1_B5C(s32 arg0) { var_f28 = lbl_1_data_1EC.unk_04; fn_1_63F4(1); } + BoardModelMotionStart(lbl_1_bss_C[0], 0, 0); BoardModelMotionTimeSet(lbl_1_bss_C[0], var_f30); + while (1) { temp = BoardModelMotionTimeGet(lbl_1_bss_C[0]); if (temp >= var_f29) { @@ -320,6 +343,7 @@ void fn_1_B5C(s32 arg0) { } HuPrcVSleep(); } + BoardModelAttrSet(lbl_1_bss_C[0], 0x40000001); BoardModelMotionTimeSet(lbl_1_bss_C[0], var_f31); BoardModelMotionStartEndSet(lbl_1_bss_C[0], var_f31, var_f28); @@ -367,7 +391,8 @@ void fn_1_DEC(void) { BoardCameraPosGet(&sp20); BoardCameraDirGet(&sp14); HuAudFXListnerSetEX(&sp20, &sp14, 4800.0f, 36000.0f, 0.0f, 1200.0f, 1200.0f); - for (i = 0; i < 4; i++) { + + for (i = 0; i < ARRAY_COUNT(lbl_1_data_22C); i++) { sp8.x = lbl_1_data_22C[i].x - 3600.0f; sp8.y = lbl_1_data_22C[i].y; sp8.z = lbl_1_data_22C[i].z - 3600.0f; @@ -410,6 +435,7 @@ void fn_1_10E4(omObjData* arg0) { w03UnkStruct2* temp_r29; temp_r29 = OM_GET_WORK_PTR(arg0, w03UnkStruct2); + if (temp_r29->unk0 != 0 || (BoardIsKill() != 0)) { for (i = 0; i < ARRAY_COUNT(lbl_1_data_21C); i++) { if (lbl_1_data_21C[i] != -1) { @@ -421,6 +447,7 @@ void fn_1_10E4(omObjData* arg0) { omDelObjEx(HuPrcCurrentGet(), arg0); return; } + BoardCameraDirGet(&sp8); BoardCameraTargetGet(&sp14); @@ -433,6 +460,7 @@ void fn_1_10E4(omObjData* arg0) { } sp14.y += 2000.0f; + if (_CheckFlag(0x10010) == 0) { if (lbl_1_bss_8 == 0) { HuAudFXPauseAll(1); @@ -442,5 +470,6 @@ void fn_1_10E4(omObjData* arg0) { HuAudFXPauseAll(0); lbl_1_bss_8 = 0; } + HuAudFXListnerUpdate(&sp14, &sp8); } \ No newline at end of file diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index b06fc7e1..3015eba5 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -6,10 +6,11 @@ #include "game/board/model.h" #include "game/board/player.h" #include "game/board/space.h" +#include "game/minigame_seq.h" +#include "game/hsfdraw.h" +#include "game/pad.h" -extern u16 HuPadBtnDown[4]; -extern s16 lbl_1_bss_C[14]; - +//structs typedef struct someBits3 { //make sure this is defined correctly /* 0x00 */ struct { u8 unk00_bit0 : 1; @@ -63,21 +64,13 @@ void fn_1_9474(s32 arg0); void fn_1_97F8(s32 arg0); void fn_1_9A1C(unkTemp2* arg0); -double sin(double x); -double cos(double x); -double atan2(double y, double x); -extern s16 MGSeqCreate(s32, ...); -u8 MGSeqStatGet(s16); -void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); - -//DATA +//data s32 lbl_1_data_450 = -1; s16 lbl_1_data_454 = -1; s16 lbl_1_data_456 = -1; s16 lbl_1_data_458 = -1; s32 lbl_1_data_45C[] = {0x00770021, 0x00770022, -1}; - //BSS char lbl_1_bss_150[0x30]; s16 lbl_1_bss_14E; @@ -86,7 +79,6 @@ omObjData* lbl_1_bss_148; omObjData* lbl_1_bss_144; Process* lbl_1_bss_140; - void fn_1_7ABC(void) { lbl_1_data_456 = BoardModelCreate(0x770020, lbl_1_data_45C, 0); BoardModelHookSet(lbl_1_bss_C[7], "phei", lbl_1_data_456); @@ -146,24 +138,30 @@ s32 fn_1_7D18(s32 arg0) { f32 arctan; BoardWinCreateChoice(2, 0x160015, 2, 0); + if (GWPlayer[arg0].com != 0) { BoardComKeySetLeft(); } + BoardWinWait(); BoardWinKill(); + if (BoardWinChoiceGet() != 0) { BoardWinCreate(2, 0x160018, 2); BoardWinWait(); BoardWinKill(); return 0; } + BoardAudSeqPause(0, 1, 1000); + sp14.x = 0.0f; sp14.y = 200.0f; sp14.z = 0.0f; sp8.x = -10.0f; sp8.y = 0.0f; sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_C[7], &sp8, &sp14, 1500.0f, -1.0f, 0x15); space = GWPlayer[arg0].space_curr; temp_r28 = BoardSpaceLinkFlagSearch(0, space, 0x02000000); @@ -175,15 +173,19 @@ s32 fn_1_7D18(s32 arg0) { HuPrcSleep(0x1E); model = BoardModelIDGet(lbl_1_bss_C[7]); Hu3DModelObjPosGet(model, "phei", &sp38); + if (GWPlayer[arg0].character == 5) { var_f31 = 54.000004f; } else { var_f31 = 39.0f; } + sp38.x = sp38.x + (var_f31 * sin((M_PI * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0)); sp38.z = sp38.z + (var_f31 * cos((M_PI * (180.0f + BoardModelRotYGet(lbl_1_data_456))) / 180.0)); + BoardPlayerPosGet(arg0, &sp2C); BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x14); + while (GWPlayer[arg0].moving != 0) { BoardModelPosGet(lbl_1_bss_C[10], &sp2C); BoardPlayerPosGet(arg0, &sp38); @@ -192,10 +194,13 @@ s32 fn_1_7D18(s32 arg0) { BoardModelRotYSet(lbl_1_bss_C[10], arctan); HuPrcVSleep(); } + BoardPlayerMotBlendSet(arg0, -0x2D, 7); + while (BoardPlayerMotBlendCheck(arg0) == 0) { HuPrcVSleep(); } + return 1; } @@ -205,14 +210,18 @@ void fn_1_8140(s32 arg0) { fn_1_81E0(arg0); BoardMusStart(1, 0x16, 0x7F, 0); temp_r31 = MGSeqCreate(3, 0); + while (MGSeqStatGet(temp_r31)) { HuPrcVSleep(); } + fn_1_9384(); fn_1_84A8(0); + while (lbl_1_bss_144) { HuPrcVSleep(); } + fn_1_91B8(); } @@ -325,10 +334,12 @@ void fn_1_8530(omObjData* arg0) { omDelObjEx(HuPrcCurrentGet(), arg0); return; } + if (temp_r31->unk1 != 0) { temp_r31->unk1--; return; } + switch (temp_r31->unk00_bit1) { case 0: fn_1_8698(arg0, temp_r31); @@ -364,13 +375,15 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) { arg1->unk_04 = -1; arg1->unk00_bit1 = 1; temp = BoardModelMotionTimeGet(lbl_1_bss_C[7]); + if (temp == 0.0f) { temp = 1.0f; } + if (lbl_1_bss_14E > 30) { lbl_1_bss_14E = 30; } - //temp2 = + OSu16tof32((u16*)&lbl_1_bss_14E, &arg0->rot.x); //?? BoardModelAttrReset(lbl_1_data_456, 0x40000002); BoardModelAttrReset(lbl_1_bss_C[7], 0x40000002); @@ -390,6 +403,7 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) { BoardCameraMotionStartEx(-1, 0, 0, 1900.0f, -1.0f, 0x15); return; } + MGSeqParamSet(arg1->unk_04, 1, arg1->unk2); arg1->unk3 = 60; } @@ -397,8 +411,10 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) { var_r26 = GWPlayer[arg1->unk00_bit5].port; var_r28 = 0; + if ((GWPlayer[arg1->unk00_bit5].com) != 0) { temp_r27 = BoardRandMod(100); + switch (GWPlayer[arg1->unk00_bit5].diff) { case 0: if (temp_r27 < 12) { @@ -422,6 +438,7 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) { } else { var_r28 = HuPadBtnDown[var_r26] & 0x100; } + if ((var_r28 & 0x100)) { arg0->trans.y += 0.5f; if (arg0->trans.y > 2.0f) { @@ -444,19 +461,22 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) { } } } + if ((lbl_1_data_450 != -1) && (HuAudFXStatusGet(lbl_1_data_450) == 0)) { lbl_1_data_450 = -1; } + arg0->trans.x += arg0->trans.y; + if (arg0->trans.x > 3.0f) { arg0->trans.x = 3.0f; } + BoardPlayerMotionSpeedSet(arg1->unk00_bit5, arg0->trans.x); BoardModelMotionSpeedSet(lbl_1_data_456, arg0->trans.x); } s8 lbl_1_data_4B0 = -1; - s32 lbl_1_data_4B4[] = { 0x00000440, 0x00000441, @@ -465,7 +485,6 @@ s32 lbl_1_data_4B4[] = { 0x00000444 }; - void fn_1_8C08(omObjData* arg0, someBits3* arg1) { Point3d spC; f32 temp_f31; @@ -474,6 +493,7 @@ void fn_1_8C08(omObjData* arg0, someBits3* arg1) { BoardModelPosGet(lbl_1_data_456, &spC); spC.y += 1.6666666f; + if (spC.y >= (arg0->trans.z + arg0->rot.y)) { spC.y = arg0->trans.z + arg0->rot.y; BoardModelMotionSpeedSet(lbl_1_bss_C[10], 0.0f); @@ -484,14 +504,17 @@ void fn_1_8C08(omObjData* arg0, someBits3* arg1) { arg1->unk1 = 0x3C; arg1->unk2 = 0; } + BoardModelPosSetV(lbl_1_data_456, &spC); temp_f30 = arg0->scale.x * ((spC.y - arg0->trans.z) / 500.0f); OSf32tos8(&temp_f30, &temp_r27); temp_r27 = temp_r27 / 30; + if (lbl_1_data_4B0 != temp_r27) { lbl_1_data_4B0 = temp_r27; HuAudFXPlay(lbl_1_data_4B4[temp_r27]); } + BoardModelMotionTimeSet(lbl_1_bss_C[7], temp_f30); BoardModelMotionTimeSet(lbl_1_bss_C[10], 0.2f * temp_f30); BoardPlayerMotionTimeSet(arg1->unk00_bit5, 2.0f * temp_f30); @@ -511,9 +534,12 @@ void fn_1_8E44(omObjData* arg0, someBits3* arg1) { } BoardAudSeqFadeOut(1, 0x3E8); } + OSu8tof32(&arg1->unk2, &temp_f31); BoardModelPosGet(lbl_1_data_456, &sp8); + sp8.y = (sp8.y + (-0.08166666666666668 * temp_f31 * temp_f31)); + if (sp8.y < arg0->trans.z) { sp8.y = arg0->trans.z; arg1->unk00_bit1 = 3; @@ -527,6 +553,7 @@ void fn_1_8E44(omObjData* arg0, someBits3* arg1) { HuAudFXPlay(0x449); BoardAudSeqPause(0, 0, 0x3E8); } + arg1->unk2 += 1; BoardModelPosSetV(lbl_1_data_456, &sp8); } @@ -536,6 +563,7 @@ void fn_1_9044(omObjData* arg0, someBits3* arg1) { BoardModelRotGet(lbl_1_data_456, &sp8); arg0->trans.y = BoardDAngleCalc(arg0->trans.y + arg0->trans.z); + if (arg0->trans.y <= 2.0f) { if (arg0->trans.y >= -2.0) { arg0->trans.x *= 0.5f; @@ -547,6 +575,7 @@ void fn_1_9044(omObjData* arg0, someBits3* arg1) { } } } + sp8.z = arg0->trans.x * sin((M_PI * arg0->trans.y) / 180.0); BoardModelRotSetV(lbl_1_data_456, &sp8); } @@ -559,6 +588,7 @@ void fn_1_91B8(void) { if (lbl_1_bss_14E == 0) { lbl_1_bss_14E = 1; } + temp_r3 = lbl_1_bss_14E / 6; lbl_1_bss_14C = lbl_1_data_4C8[temp_r3]; } @@ -576,6 +606,7 @@ void fn_1_9230(s32 arg0) { BoardCameraTargetPlayerSet(arg0); BoardCameraViewSet(1); BoardPlayerPosLerpStart(arg0, &sp20, &sp14, 0x14); + while (GWPlayer[arg0].moving != 0) { BoardModelPosGet(lbl_1_bss_C[10], &sp20); BoardPlayerPosGet(arg0, &sp14); @@ -584,6 +615,7 @@ void fn_1_9230(s32 arg0) { BoardModelRotYSet(lbl_1_bss_C[10], rotY); HuPrcVSleep(); } + BoardModelRotYSet(lbl_1_bss_C[10], 0.0f); BoardCameraMotionWait(); } @@ -608,18 +640,24 @@ void fn_1_9474(s32 arg0) { BoardWinWait(); BoardWinKill(); BoardPlayerMotBlendSet(arg0, 0, 0xF); + while (BoardPlayerMotBlendCheck(arg0) == 0) { HuPrcVSleep(); } + fn_1_97F8(arg0); + while (lbl_1_bss_148) { HuPrcVSleep(); } + BoardPlayerMotionShiftSet(arg0, 7, 0.0f, 8.0f, 0U); HuPrcSleep(8); + while (BoardPlayerMotionEndCheck(arg0) == 0) { HuPrcVSleep(); } + BoardWinCreate(2, 0x160018U, 2); BoardWinWait(); BoardWinKill(); @@ -638,6 +676,7 @@ void fn_1_95B8(omObjData* arg0) { s32 temp; temp_r29 = OM_GET_WORK_PTR(arg0, unkTemp2); + if ((temp_r29->unk00_bit0 != 0) || (BoardIsKill() != 0)) { fn_1_9A1C(temp_r29); HuMemDirectFree((void*)temp_r29->unk_0C); @@ -645,6 +684,7 @@ void fn_1_95B8(omObjData* arg0) { omDelObjEx(HuPrcCurrentGet(), arg0); return; } + var_r30 = temp_r29->unk_0C; for (var_r27 = i = 0; i < 20; i++, var_r30++) { @@ -657,6 +697,7 @@ void fn_1_95B8(omObjData* arg0) { temp_r29->unk00_bit0 = 1; return; } + var_r25 = 0; for (i = 0; i < 20; i++) { var_r30 = &temp_r29->unk_0C[i]; @@ -704,6 +745,7 @@ void fn_1_97F8(s32 arg0) { BoardPlayerPosGet(arg0, &sp8); temp_r30->unk8 = (80.0f + sp8.y); memset(temp_r30->unk_0C, 0, 0x190); + for (i = 0; i < lbl_1_bss_14C; i++) { if (i == 0) { var_f31 = 0.0f; @@ -730,5 +772,3 @@ void fn_1_9A1C(unkTemp2* arg0) { BoardModelKill(temp->unk_02); } } - -char mg_pad[] = "\0\0\0\0\0\0"; \ No newline at end of file diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index b48ff37c..e2958ca9 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -13,10 +13,9 @@ #include "math.h" #include "game/hsfman.h" #include "dolphin/os/OSFastCast.h" - -double sin(double x); -double cos(double x); -double atan2(double y, double x); +#include "game/minigame_seq.h" +#include "game/hsfdraw.h" +#include "game/hsfmotion.h" typedef struct someBits { /* 0x00 */ struct { @@ -63,12 +62,6 @@ extern u16 HuPadBtnDown[4]; //function signatures s32 BoardVecDAngleCalcRange(float *value, float min, float range); -void BoardCameraQuakeSet(s32 duration, float strength); -s16 MGSeqCreate(s32, ...); -u8 MGSeqStatGet(s16); -s32 BoardVecMinDistCheck(Vec *vec1, Vec *vec2, float min_dist); -void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); -s16 Hu3DMotionShiftIDGet(s16 arg0); s32 frand(void); void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix); @@ -102,7 +95,7 @@ s32 fn_1_9CF4(s32 arg0); void fn_1_9F78(void); void fn_1_9FE4(void); -//DATA +//data s16 lbl_1_data_4D8 = -1; s16 lbl_1_data_4DA = -1; s16 lbl_1_data_4DC = -1; @@ -151,37 +144,46 @@ void fn_1_9AA0(void) { BoardDiceDigit2DShowSet(0); lbl_1_bss_180 = HuPrcChildCreate(fn_1_9C8C, 0x2003, 0x2000, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_180, fn_1_9B30); + while (lbl_1_bss_180 != 0) { HuPrcVSleep(); } + BoardDiceDigit2DShowSet(1); } void fn_1_9B30(void) { fn_1_BDAC(); + if (lbl_1_bss_188) { lbl_1_bss_188; } + if (lbl_1_bss_184) { OM_GET_WORK_PTR(lbl_1_bss_184, someBits2)->unk00_bit0 = 1; } + if (lbl_1_data_4E0 != -1) { HuAudFXStop(lbl_1_data_4E0); lbl_1_data_4E0 = -1; } + if (lbl_1_data_4DC != -1) { BoardModelMotionKill(lbl_1_bss_C[11], lbl_1_data_4DC); lbl_1_data_4DC = -1; } + if (lbl_1_data_4DA != -1) { BoardModelMotionKill(lbl_1_bss_C[11], lbl_1_data_4DA); lbl_1_data_4DA = -1; } + if (lbl_1_data_4D8 != -1) { HuWinKill(lbl_1_data_4D8); lbl_1_data_4D8 = -1; } - lbl_1_bss_180 = 0U; + + lbl_1_bss_180 = 0; } void fn_1_9C8C(void) { @@ -189,10 +191,12 @@ void fn_1_9C8C(void) { temp_r31 = GWSystem.player_curr; lbl_1_data_4E0 = -1; + if (fn_1_9CF4(temp_r31) != 0) { fn_1_A44C(temp_r31); fn_1_A5E0(temp_r31); } + HuPrcEnd(); } @@ -211,24 +215,31 @@ s32 fn_1_9CF4(s32 arg0) { BoardWinKill(); return 0; } + BoardWinCreateChoice(2, 0x16001A, 2, 0); + if (GWPlayer[arg0].com != 0) { BoardComKeySetLeft(); } + BoardWinWait(); + if (BoardWinChoiceGet() != 0) { BoardWinCreate(2, 0x16001B, 2); BoardWinWait(); BoardWinKill(); return 0; } + BoardWinKill(); + sp14.x = 0.0f; sp14.y = 200.0f; sp14.z = 0.0f; sp8.x = -10.0f; sp8.y = 0.0f; sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_C[8], &sp8, &sp14, 1500.0f, -1.0f, 0x15); spaceCur = GWPlayer[arg0].space_curr; temp_r29 = BoardSpaceLinkFlagSearch(0, spaceCur, 0x02000000); @@ -236,11 +247,13 @@ s32 fn_1_9CF4(s32 arg0) { BoardSpacePosGet(0, temp_r29, &sp38); PSVECSubtract(&sp38, &sp2C, &sp20); PSVECNormalize(&sp20, &sp20); - BoardPlayerRotYSet(arg0, (f32) (180.0 * (atan2(-sp20.x, -sp20.z) / 3.141592653589793))); + BoardPlayerRotYSet(arg0, (f32) (180.0 * (atan2(-sp20.x, -sp20.z) / M_PI))); BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x14); + while (GWPlayer[arg0].moving != 0) { HuPrcVSleep(); } + BoardPlayerIdleSet(arg0); HuPrcSleep(0x3C); fn_1_B0A4(arg0); @@ -269,26 +282,31 @@ void fn_1_9FE4(void) { sp18.z = (-907.7000122070313 + 200.0 * cos(0.0)); sp18.y = sp24.y; PSVECSubtract(&sp18, &sp24, &spC); - temp_f30 = (atan2(spC.z, spC.x) / 3.141592653589793 * 180.0); + temp_f30 = (atan2(spC.z, spC.x) / M_PI * 180.0); sp8 = BoardModelRotYGet(lbl_1_bss_C[11]); BoardModelMotionShiftSet(lbl_1_bss_C[11], lbl_1_data_4DA, 0.0f, 10.0, 0x40000001); + while (BoardDAngleCalcRange(&sp8, temp_f30, 10.0) == 0) { BoardModelRotYSet(lbl_1_bss_C[11], sp8); HuPrcVSleep(); } + BoardModelRotYSet(lbl_1_bss_C[11], temp_f30); BoardModelMotionSpeedSet(lbl_1_bss_C[11], 2.0f); + spC.x /= 20.0f; spC.z /= 20.0f; spC.y = 0.0f; sp30 = sp24; var_f31 = 0.0f; + while (var_f31 < 20.0f) { PSVECAdd(&sp30, &spC, &sp30); BoardModelPosSetV(lbl_1_bss_C[11], &sp30); HuPrcVSleep(); var_f31 += 1.0f; } + BoardAudSeqPause(0, 1, 0x3E8); HuAudFXPlay(0x450); HuAudFXPlay(0x362); @@ -296,23 +314,28 @@ void fn_1_9FE4(void) { fn_1_B8E8(1); BoardModelMotionShiftSet(lbl_1_bss_C[11], lbl_1_data_4DC, 0.0f, 10.0, 0x40000005); PSVECSubtract(&sp24, &sp30, &spC); + spC.x /= 60.0f; spC.z /= 60.0f; spC.y = 0.0f; var_f31 = 0.0f; + while (var_f31 < 60.0f) { PSVECAdd(&sp30, &spC, &sp30); BoardModelPosSetV(lbl_1_bss_C[11], &sp30); HuPrcVSleep(); var_f31 += 1.0f; } + temp_f30 = 0.0f; sp8 = BoardModelRotYGet(lbl_1_bss_C[11]); BoardModelMotionShiftSet(lbl_1_bss_C[11], lbl_1_data_4DA, 0.0f, 10.0, 0x40000001); + while (BoardDAngleCalcRange(&sp8, temp_f30, 10.0) == 0) { BoardModelRotYSet(lbl_1_bss_C[11], sp8); HuPrcVSleep(); } + BoardModelMotionShiftSet(lbl_1_bss_C[11], 1, 0.0f, 10.0, 0x40000001); } @@ -323,34 +346,44 @@ void fn_1_A44C(s32 arg0) { BoardMusStart(1, 0x17, 0x7F, 0); temp_r30 = MGSeqCreate(3, 0); + while (MGSeqStatGet(temp_r30) != 0) { HuPrcVSleep(); } + fn_1_A7A0(arg0); fn_1_A6B0(); fn_1_ACD8(1); + while (fn_1_AE20() != 0) { HuPrcVSleep(); } + temp_r29 = fn_1_BBC4() + 0x80000; BoardWinCreate(2, 0x16001C, 2); BoardWinInsertMesSet(temp_r29, 0); BoardWinWait(); fn_1_B8E8(4); + while (fn_1_BB48() != 0) { HuPrcVSleep(); } + omVibrate(arg0, 0xC, 6, 6); BoardPlayerItemAdd(arg0, fn_1_BBC4()); fn_1_ACD8(3); temp_r28 = HuAudSStreamPlay(2); + while (HuAudSStreamStatGet(temp_r28) != 0) { HuPrcVSleep(); } - BoardAudSeqPause(0, 0, 0x3E8); + + BoardAudSeqPause(0, 0, 1000); + while (lbl_1_bss_188) { HuPrcVSleep(); } + HuPrcSleep(0x1E); BoardWinCreate(2, 0x16001D, 2); BoardWinWait(); @@ -367,7 +400,7 @@ void fn_1_A5E0(s32 arg0) { BoardSpacePosGet(0, spaceCur, &sp8); BoardCameraTargetPlayerSet(arg0); BoardCameraViewSet(1); - BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 0x14); + BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 20); while (GWPlayer[arg0].moving != 0) { HuPrcVSleep(); } @@ -385,7 +418,7 @@ void fn_1_A6B0(void) { lbl_1_data_4D8 = HuWinCreate(val1, val2, sp8[0], sp8[1], 0); HuWinBGTPLvlSet(lbl_1_data_4D8, 0.0f); HuWinMesSpeedSet(lbl_1_data_4D8, 0); - HuWinMesSet(lbl_1_data_4D8, 0x16001FU); + HuWinMesSet(lbl_1_data_4D8, 0x16001F); } void fn_1_A7A0(s32 arg0) { @@ -414,12 +447,15 @@ void fn_1_A8AC(s32 arg0) { BoardModelPosGet(lbl_1_bss_C[9], &sp8); BoardPlayerPosGet(arg0, &sp14); sp8.y = sp14.y; - BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 0x14); + BoardPlayerPosLerpStart(arg0, &sp14, &sp8, 20); + while (GWPlayer[arg0].moving != 0) { HuPrcVSleep(); } + playerYRot = BoardPlayerRotYGet(arg0) + 180.0f; - BoardPlayerMotBlendSet(arg0, playerYRot, 0xF); + BoardPlayerMotBlendSet(arg0, playerYRot, 15); + while (BoardPlayerMotBlendCheck(arg0) == 0) { HuPrcVSleep(); } @@ -440,6 +476,7 @@ void fn_1_A994(omObjData* arg0) { omDelObjEx(HuPrcCurrentGet(), arg0); return; } + if (temp_r31->unk00_bit6 == 0) { if (temp_r31->unk2 != 0) { temp_r31->unk2--; @@ -453,6 +490,7 @@ void fn_1_A994(omObjData* arg0) { temp_r31->unk2 = 0x3CU; } } + switch (temp_r31->unk00_bit1) { case 1: fn_1_AB18(arg0, temp_r31); @@ -517,6 +555,7 @@ void fn_1_ACD8(s32 arg0) { temp_r31 = (someBits*)&lbl_1_bss_188->work[0]; temp_r31->unk00_bit1 = arg0; + switch (arg0) { case 0: BoardPlayerIdleSet(temp_r31->unk00_bit4); @@ -553,6 +592,7 @@ s32 fn_1_AE4C(s32 arg0, s8* arg1) { temp_r29 = lbl_1_data_4E6[arg1[0]]; temp_r28 = lbl_1_data_4E6[arg1[1]]; temp_r30 = lbl_1_data_4E6[arg1[2]]; + if (temp_r29 > temp_r28) { if (temp_r29 > temp_r30) { var_r31 = 0; @@ -568,6 +608,7 @@ s32 fn_1_AE4C(s32 arg0, s8* arg1) { } else { var_r31 = 0; } + return var_r31; } @@ -579,6 +620,7 @@ u32 fn_1_AF24(s32 arg0) { s8 temp_r0_2; spC = 0; + switch (GWPlayer[arg0].diff) { case 3: var_r30 = 0; @@ -637,7 +679,7 @@ void fn_1_B0A4(s32 arg0) { temp_r30->unk00_bit1 = 0; temp_r30->unk00_bit4 = arg0; - for (i = 0; i < 3;) { + for (i = 0; i < ARRAY_COUNT(spC);) { spC[i] = BoardRandMod(14); if ((spC[i] != 10) && (spC[i] != 13)) { for (j = 0; j < i; j++) { @@ -656,19 +698,22 @@ void fn_1_B0A4(s32 arg0) { fn_1_BBF8(); - for (i = 0; i < 3; i++) { + for (i = 0; i < ARRAY_COUNT(spC); i++) { temp_r29 = spC[i]; temp_r30->unk3[i] = temp_r29; temp_r30->unk_06[i] = BoardModelCreate(lbl_1_data_514[temp_r29], NULL, 0); BoardModelHookSet(lbl_1_bss_C[9], lbl_1_data_508[i], temp_r30->unk_06[i]); BoardModelMotionSpeedSet(temp_r30->unk_06[i], 0.0f); - if (temp_r29 == 0xB) { + + if (temp_r29 == 11) { BoardModelMotionStart(temp_r30->unk_06[i], 0, 0x40000001); } + if (temp_r29 == 5) { PSMTXTrans(sp18, 0.0f, -50.0f, 0.0f); BoardModelMtxSet(temp_r30->unk_06[i], &sp18); } + if ((temp_r29 == 6) || (temp_r29 == 7)) { PSMTXTrans(sp18, 0.0f, 0.0f, 8.0f); BoardModelMtxSet(temp_r30->unk_06[i], &sp18); @@ -681,6 +726,7 @@ void fn_1_B350(omObjData* arg0) { someBits2* temp_r31; temp_r31 = (someBits2*)&arg0->work[0]; + if ((temp_r31->unk00_bit0 != 0) || (BoardIsKill() != 0)) { BoardModelHookReset(lbl_1_bss_C[9]); for (i = 0; i < 3; i++) { @@ -779,7 +825,7 @@ void fn_1_B748(omObjData* arg0, someBits2* arg1) { BoardModelPosSetV(temp_r29, &sp8); BoardModelRotYSet(temp_r29, 8.0f + BoardModelRotYGet(temp_r29)); BoardModelScaleGet(temp_r29, &sp14); - sp14.x = sp14.y = sp14.z = cos(3.141592653589793 * temp_f0 / 180.0); + sp14.x = sp14.y = sp14.z = cos(M_PI * temp_f0 / 180.0); BoardModelScaleSetV(temp_r29, &sp14); arg1->unk1 += 4; return; @@ -802,6 +848,7 @@ void fn_1_B8E8(s32 arg0) { temp_r31 = (someBits2*)&lbl_1_bss_184->work[0]; temp_r31->unk00_bit1 = arg0; + switch (arg0) { case 1: temp_f31 = 0.31666666f; @@ -840,7 +887,7 @@ void fn_1_BB74(s8* arg0) { someBits2* bits = OM_GET_WORK_PTR(lbl_1_bss_184, someBits2); s32 i; - for (i = 0; i < 3; i++) { + for (i = 0; i < ARRAY_COUNT(bits->unk3); i++) { arg0[i] = bits->unk3[i]; } } @@ -886,7 +933,6 @@ void fn_1_BDAC(void) { void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) { Point3d sp8; - f32 temp_f30; f32 temp_f29; f32 temp_f31; @@ -916,8 +962,8 @@ void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) { if (j != particle->unk_30) { temp_f30 = 360.0f * (0.003921569f * (frand() & 0xFF)); temp_f29 = temp_f31 * (20.0f + (60.0f * (0.003921569f * (frand() & 0xFF)))); - var_r31->unk34.x = (sp8.x + (temp_f29 * sin((3.141592653589793 * temp_f30) / 180.0))); - var_r31->unk34.z = (sp8.z + (temp_f29 * cos((3.141592653589793 * temp_f30) / 180.0))); + var_r31->unk34.x = (sp8.x + (temp_f29 * sin((M_PI * temp_f30) / 180.0))); + var_r31->unk34.z = (sp8.z + (temp_f29 * cos((M_PI * temp_f30) / 180.0))); var_r31->unk34.y = (sp8.y + (temp_f31 * (-30.0f + (40.0f * (0.003921569f * (frand() & 0xFF)))))); var_r31->unk08.x = (0.5f + (3.0f * (0.003921569f * (frand() & 0xFF)))); var_r31->unk08.y = (0.3f + (2.0f * (0.003921569f * (frand() & 0xFF)))); @@ -925,6 +971,7 @@ void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) { var_r31->unk2C = (15.0f * temp_f31); } } + var_r31 = particle->unk_48; for (i = 0; i < particle->unk_30; i++, var_r31++) { diff --git a/src/REL/w03Dll/river.c b/src/REL/w03Dll/river.c index 515f2ab6..577e1994 100644 --- a/src/REL/w03Dll/river.c +++ b/src/REL/w03Dll/river.c @@ -4,17 +4,9 @@ #include "game/board/main.h" #include "game/board/model.h" #include "game/board/player.h" +#include "game/hsfdraw.h" -double sin(double x); -double cos(double x); -double atan2(double y, double x); -s16 BoardModelIDGet(s16 model); -void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); - - -extern s16 lbl_1_bss_C[14]; -extern s16 boardPlayerMdl[4]; - +//BSS char lbl_1_bss_130[8]; omObjData* lbl_1_bss_12C; s16 lbl_1_bss_128; @@ -40,7 +32,7 @@ typedef struct unkWorkStruct { f32 unk_04; } unkWorkStruct; -//DATA +//data s32 lbl_1_data_368[] = { 0x00000105, 0x00000145, 0x00000185, 0x000001C5, 0x00000205, 0x00000245, @@ -61,13 +53,15 @@ void fn_1_63F4(s32 arg0) { Vec spC; unkWorkStruct* work = OM_GET_WORK_PTR(lbl_1_bss_12C, unkWorkStruct); -work->unk_04 = 0.0f; + work->unk_04 = 0.0f; + BoardModelPosGet(lbl_1_data_388, &spC); if (arg0 != 0) { spC.y = -185.0f; } else { spC.y = 10.0f; } + BoardModelPosSetV(lbl_1_data_388, &spC); } @@ -82,11 +76,10 @@ void fn_1_6494(void) { BoardModelMotionStart(lbl_1_data_38A, 1, 0x40000001); BoardModelHookSet(lbl_1_data_38A, "itemhook_R", lbl_1_data_38C); BoardModelHookSet(lbl_1_data_388, "hei01", lbl_1_data_38A); - Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[0]), "ikada", &sp14); BoardSpaceFlagPosGet(0, 0x200, &sp8); - sp14.x = sp8.x + (400.0 * sin(-1.5707963267948966)); - sp14.z = sp8.z + (400.0 * cos(-1.5707963267948966)); + sp14.x = sp8.x + (400.0 * sin(-(M_PI / 2))); + sp14.z = sp8.z + (400.0 * cos(-(M_PI / 2))); BoardModelPosSetV(lbl_1_data_388, &sp14); lbl_1_bss_12C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, (void*)fn_1_767C); temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_12C, unkWorkStruct); @@ -101,8 +94,8 @@ s32 fn_1_6698(void) { Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[0]), "ikada", &sp14); BoardSpaceFlagPosGet(0, 0x200, &sp8); - sp14.x = sp8.x + (400.0 * sin(-1.5707963267948966)); - sp14.z = sp8.z + (400.0 * cos(-1.5707963267948966)); + sp14.x = sp8.x + (400.0 * sin(-(M_PI / 2))); + sp14.z = sp8.z + (400.0 * cos(-(M_PI / 2))); BoardModelPosSetV(lbl_1_data_388, (Point3d* ) &sp14); return 1; } @@ -111,9 +104,11 @@ s16 fn_1_675C(void) { BoardDiceDigit2DShowSet(0); lbl_1_bss_120 = HuPrcChildCreate(fn_1_67F8, 0x2003, 0x2000, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_120, fn_1_6884); - while ((u32) lbl_1_bss_120 != 0U) { + + while (lbl_1_bss_120 != 0) { HuPrcVSleep(); } + BoardDiceDigit2DShowSet(1); return lbl_1_bss_128; } @@ -123,12 +118,14 @@ void fn_1_67F8(void) { temp_r31 = GWSystem.player_curr; lbl_1_bss_128 = 0; + if (fn_1_6898(temp_r31) != 0) { fn_1_6F9C(temp_r31); fn_1_6B98(temp_r31); fn_1_735C(temp_r31); lbl_1_bss_128 = 1; } + BoardCameraViewSet(1); BoardCameraMotionWait(); HuPrcEnd(); @@ -170,16 +167,19 @@ s32 fn_1_6898(s32 arg0) { Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_388), "hei01", &sp20); BoardPlayerPosGet(arg0, &sp14); PSVECSubtract(&sp20, &sp14, &sp8); - temp_f31 = 180.0 * (atan2(sp8.x, sp8.z) / 3.141592653589793); + temp_f31 = 180.0 * (atan2(sp8.x, sp8.z) / M_PI); BoardCameraTargetModelSet(lbl_1_data_388); - BoardPlayerMotBlendSet(arg0, temp_f31, 0xF); + BoardPlayerMotBlendSet(arg0, temp_f31, 15); + while (BoardPlayerMotBlendCheck(arg0) == 0) { HuPrcVSleep(); } + BoardCameraTargetModelSet(-1); BoardWinCreate(2, 0x160009, 2); BoardWinWait(); temp_r3 = BoardPlayerCoinsGet(arg0); + if (temp_r3 < 5) { BoardWinCreate(2, 0x16000A, 2); BoardWinWait(); @@ -187,7 +187,7 @@ s32 fn_1_6898(s32 arg0) { return 0; } - for (var_r27 = i = 0; i < 6; i++) { + for (var_r27 = i = 0; i < ARRAY_COUNT(lbl_1_data_3B8); i++) { temp = lbl_1_data_3B8[i].x; temp2 = lbl_1_data_3B8[i].y; if (temp_r3 >= temp) { @@ -197,17 +197,22 @@ s32 fn_1_6898(s32 arg0) { } } } + sprintf(lbl_1_bss_130, "%d", var_r27); + j = 0; while (j == 0) { BoardWinCreateChoice(2, 0x16000B, 2, 0); BoardWinInsertMesSet(lbl_1_bss_130, 2); BoardWinAttrSet(0x10); + if (GWPlayer[arg0].com != 0) { fn_1_77E4(arg0); } + BoardWinWait(); BoardWinKill(); + switch (BoardWinChoiceGet()) { case 0: j = 1; @@ -222,11 +227,13 @@ s32 fn_1_6898(s32 arg0) { BoardViewMapExec(arg0); } } + for (i = 0; i < var_r27; i++) { BoardPlayerCoinsAdd(arg0, -1); HuAudFXPlay(0xE); HuPrcSleep(6); } + HuAudFXPlay(0xF); BoardWinCreate(2, 0x0016000C, 2); BoardWinWait(); @@ -250,17 +257,20 @@ void fn_1_6B98(s32 arg0) { BoardModelMotionShiftSet(lbl_1_data_38A, 2, 0.0f, 10.0f, 0); sp8 = BoardModelRotYGet(lbl_1_data_38A); temp_f31 = sp8 + 180.0f; + while (BoardDAngleCalcRange(&sp8, temp_f31, 3.0f) == 0) { BoardModelRotYSet(lbl_1_data_38A, sp8); HuPrcVSleep(); } + while (BoardModelMotionEndCheck(lbl_1_data_38A) == 0) { HuPrcVSleep(); } + BoardModelPosGet(lbl_1_data_388, &sp24); BoardSpaceFlagPosGet(0, 0x100, &sp30); - sp18.x = sp30.x + (400.0 * sin(1.5707963267948966)); - sp18.z = sp30.z + (400.0 * cos(1.5707963267948966)); + sp18.x = sp30.x + (400.0 * sin(M_PI / 2)); + sp18.z = sp30.z + (400.0 * cos(M_PI / 2)); sp18.y = sp24.y; PSVECSubtract(&sp18, &sp24, &spC); spC.x = spC.x / 120.0f; @@ -269,17 +279,21 @@ void fn_1_6B98(s32 arg0) { BoardCameraTargetModelSet(lbl_1_data_388); BoardModelMotionShiftSet(lbl_1_data_38A, 3, 0.0f, 4.0f, 0x40000001U); HuPrcSleep(4); + var_r31 = 0; for (i = 0; i < 0x78U; i++) { PSVECAdd(&spC, &sp24, &sp24); temp_f1 = BoardModelMotionTimeGet(lbl_1_data_38A); + if ((temp_f1 >= 5.0f) && (temp_f1 < 15.0f) && ((s16) var_r31 == 0)) { HuAudFXPlay(0x451); var_r31 = 1; } + if ((BoardModelMotionTimeGet(lbl_1_data_38A) >= 21.0f) && ((s16) var_r31 != 0)) { var_r31 = 0; } + BoardModelPosSetV(lbl_1_data_388, &sp24); HuPrcVSleep(); } @@ -289,18 +303,21 @@ void fn_1_6B98(s32 arg0) { BoardModelMotionShiftSet(lbl_1_data_38A, 2, 0.0f, 10.0f, 0x40000004U); sp8 = BoardModelRotYGet(lbl_1_data_38A); temp_f31 = 0.0f; + while (BoardDAngleCalcRange(&sp8, temp_f31, 3.0f) == 0) { BoardModelRotYSet(lbl_1_data_38A, sp8); HuPrcVSleep(); } + while (BoardModelMotionEndCheck(lbl_1_data_38A) == 0) { HuPrcVSleep(); } + BoardModelMotionShiftSet(lbl_1_data_38A, 1, 0.0f, 10.0f, 0x40000001U); } extern s32 lbl_1_data_368[]; -extern w03State* lbl_1_bss_0; +// extern w03State* lbl_1_bss_0; void fn_1_6F9C(s32 arg0) { Vec sp20; @@ -316,9 +333,11 @@ void fn_1_6F9C(s32 arg0) { BoardPlayerPosGet(arg0, &sp14); Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_388), "chara01", &sp20); PSVECSubtract(&sp20, &sp14, &sp8); + sp8.x /= 60.0f; sp8.z /= 60.0f; sp8.y = 0.0f; + if (lbl_1_bss_0->unk0 != 0) { var_f30 = 10.0f; var_f29 = 0.21f; @@ -327,16 +346,18 @@ void fn_1_6F9C(s32 arg0) { var_f30 = 0.0f; var_f29 = 0.15f; } + lbl_1_bss_124 = 1; HuAudFXPlay(lbl_1_data_368[GWPlayer[arg0].character]); - BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 10.0f, 0U); + BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 10.0f, 0); + for (var_r30 = 0, var_f31 = 0.0f; var_f31 < 60.0f; var_f31 += 1.0f) { PSVECAdd(&sp14, &sp8, &sp14); sp14.y += 10.0f + var_f30 + (var_f29 * (-0.08166667f * var_f31 * var_f31)); if (sp14.y <= sp20.y) { sp14.y = sp20.y; if (var_r30 == 0) { - BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0U); + BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0); var_r30 = 1; } } @@ -344,14 +365,16 @@ void fn_1_6F9C(s32 arg0) { HuPrcVSleep(); } - BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0U); + BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0); HuPrcSleep(10); BoardPlayerIdleSet(arg0); + if (GWPlayer[arg0].bowser_suit != 0) { BoardModelHookSet(lbl_1_data_388, "chara01", BoardPlayerModelGet(arg0)); } else { BoardModelHookSet(lbl_1_data_388, "chara01", BoardPlayerModelGet(arg0)); } + BoardPlayerPosSet(arg0, 0.0f, 0.0f, 0.0f); lbl_1_bss_124 = 0; } @@ -378,7 +401,7 @@ void fn_1_735C(s32 arg0) { sp8.y = 0.0f; HuAudFXPlay(lbl_1_data_368[GWPlayer[arg0].character]); - BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 10.0f, 0U); + BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 10.0f, 0); if (lbl_1_bss_0->unk0 != 0) { var_f30 = 0.25f; } else { @@ -391,7 +414,7 @@ void fn_1_735C(s32 arg0) { if (sp14.y <= sp20.y && var_f31 > 48.0f) { sp14.y = sp20.y; if (var_r30 == 0) { - BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0U); + BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0); var_r30 = 1; } } @@ -401,10 +424,12 @@ void fn_1_735C(s32 arg0) { BoardPlayerPosSetV(arg0, &sp20); HuPrcSleep(0xA); - BoardPlayerMotBlendSet(arg0, 0, 0xF); + BoardPlayerMotBlendSet(arg0, 0, 15); + while (BoardPlayerMotBlendCheck(arg0) == 0) { HuPrcVSleep(); } + BoardPlayerIdleSet(arg0); GWPlayer[arg0].space_curr = temp_r29; GWPlayer[arg0].space_prev = -1; @@ -421,18 +446,20 @@ void fn_1_767C(omObjData* arg0) { unkWorkStruct* temp_r31; temp_r31 = OM_GET_WORK_PTR(arg0, unkWorkStruct); + if ( (temp_r31->temp1 != 0) || (BoardIsKill() != 0)) { lbl_1_bss_12C = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); return; } + if ((lbl_1_data_388 != -1) && (lbl_1_bss_124 == 0)) { temp_r31->unk_04 += 3.0f; if (temp_r31->unk_04 >= 360.0f) { temp_r31->unk_04 = (f32) (temp_r31->unk_04 - 360.0f); } BoardModelPosGet(lbl_1_data_388, &sp8); - sp8.y = (f32) ((f64) sp8.y + (0.25 * (2.0 * sin((3.141592653589793 * (f64) temp_r31->unk_04) / 180.0)))); + sp8.y = (f32) ((f64) sp8.y + (0.25 * (2.0 * sin((M_PI * (f64) temp_r31->unk_04) / 180.0)))); BoardModelPosSetV(lbl_1_data_388, &sp8); } } @@ -442,14 +469,15 @@ void fn_1_77E4(s32 arg0) { s32 var_r30 = 0; boardIndex = GWSystem.star_pos; + if ((boardIndex == 1) || (boardIndex == 2) || (boardIndex == 3) || (boardIndex == 4)) { var_r30 = 1; } + if (var_r30 != 0) { BoardComKeySetLeft(); return; } + BoardComKeySetRight(); } - -char padRiver[] = "\0\0\0\0"; diff --git a/src/REL/w03Dll/smoke.c b/src/REL/w03Dll/smoke.c index 530dd8c4..ae32fa76 100644 --- a/src/REL/w03Dll/smoke.c +++ b/src/REL/w03Dll/smoke.c @@ -30,16 +30,20 @@ void fn_1_785C(void) { lbl_1_bss_138[0] = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, fn_1_79E0); temp_r31 = (w03UnkWorkStruct*)&lbl_1_bss_138[0]->work[0]; - for (i = 0; i < 5; i++) { + for (i = 0; i < ARRAY_COUNT(temp_r31->unk_00); i++) { temp_r31->unk_00[i] = BoardModelCreate(0x770008, NULL, 0); temp_r29 = kemuri_strings[i]; + if (0.0f == temp_r31->unk_0C) { temp_r31->unk_0C = BoardModelMotionMaxTimeGet(temp_r31->unk_00[i]); } + var_f31 = temp_r31->unk_0C * BoardRandFloat(); + if (var_f31 < 1.0f) { var_f31 = 1.0f; } + BoardModelHookSet(lbl_1_data_1E0, temp_r29, temp_r31->unk_00[i]); BoardModelMotionStart(temp_r31->unk_00[i], 0, 0x40000001); BoardModelMotionTimeSet(temp_r31->unk_00[i], var_f31); @@ -63,14 +67,14 @@ void fn_1_79E0(omObjData* arg0) { omDelObjEx(HuPrcCurrentGet(), arg0); return; } + if (lbl_1_bss_0->unk3 != 0) { var_r29 = 0; } else { var_r29 = 1; } - for (i = 0; i < 5; i++) { + + for (i = 0; i < ARRAY_COUNT(temp_r30->unk_00); i++) { BoardModelVisibilitySet(temp_r30->unk_00[i], var_r29); } } - -char pad[4] = "\0\0\0\0"; \ No newline at end of file diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index 019f4844..595c8a8a 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -28,7 +28,7 @@ void fn_1_2A40(void); void fn_1_2B44(void); double atan2(double y, double x); -//DATA +//data s16 lbl_1_data_280 = -1; s16 lbl_1_data_282 = -1; s16 lbl_1_data_284 = -1; @@ -62,6 +62,7 @@ void fn_1_12C8(void) { while (lbl_1_bss_28) { HuPrcVSleep(); } + BoardDiceDigit2DShowSet(1); } @@ -72,6 +73,7 @@ void fn_1_1358(void) { cur_player_index = GWSystem.player_curr; unkC = GWPlayer[cur_player_index].space_curr; lbl_1_bss_2C = 0; + if ((BoardSpaceFlagGet(0, GWPlayer[cur_player_index].space_curr) & 0x2000)) { lbl_1_bss_6E = 0; lbl_1_bss_6C = lbl_1_bss_C[3]; @@ -79,6 +81,7 @@ void fn_1_1358(void) { lbl_1_bss_6E = 1; lbl_1_bss_6C = lbl_1_bss_C[4]; } + if (fn_1_1650(cur_player_index) != 0) { if (fn_1_1D1C() != 0) { fn_1_1ED4(cur_player_index); @@ -98,6 +101,7 @@ void fn_1_1358(void) { fn_1_26E0(cur_player_index); BoardStatusShowSetAll(1); } + BoardPlayerPostTurnHookSet(cur_player_index, &fn_1_15E8); BoardWinKill(); HuPrcEnd(); @@ -105,24 +109,29 @@ void fn_1_1358(void) { void fn_1_152C(void) { BoardConfettiKill(); + if (lbl_1_data_282 != -1) { BoardPlayerMotionKill(GWSystem.player_curr, lbl_1_data_282); lbl_1_data_282 = -1; } + if (lbl_1_data_280 != -1) { BoardPlayerMotionKill(GWSystem.player_curr, lbl_1_data_280); lbl_1_data_280 = -1; } + fn_1_2AC0(); lbl_1_bss_28 = NULL; } s32 fn_1_15E8(void) { BoardModelVisibilitySet(lbl_1_bss_6C, 1); + if (lbl_1_data_284 != -1) { BoardModelKill(lbl_1_data_284); lbl_1_data_284 = -1; } + return 1; } @@ -148,7 +157,7 @@ s32 fn_1_1650(s32 arg0) { BoardSpacePosGet(0, temp2, &sp38); BoardPlayerPosGet(arg0, &sp2C); PSVECSubtract(&sp38, &sp2C, &sp20); - temp = (atan2(-sp20.x, -sp20.z) / 3.141592653589793) * 180.0f; + temp = (atan2(-sp20.x, -sp20.z) / M_PI) * 180.0f; BoardPlayerRotYSet(arg0, temp); sp14.x = 0.0f; sp14.y = 100.0f; @@ -175,6 +184,7 @@ s32 fn_1_1650(s32 arg0) { BoardWinWait(); BoardWinCreateChoice(0, 0x160002, -1, 0); BoardWinAttrSet(0x10); + if (GWPlayer[arg0].com) { if (BoardRandMod(0x64) > 0x32U) { BoardComKeySetLeft(); @@ -182,6 +192,7 @@ s32 fn_1_1650(s32 arg0) { BoardComKeySetRight(); } } + BoardWinWait(); lbl_1_bss_6F = BoardWinChoiceGet(); BoardWinKill(); @@ -247,6 +258,7 @@ void fn_1_19DC(s32 arg0, s32 arg1) { f32 temp; temp_r30 = GWPlayer[arg0].character; + if (arg1 != 0) { lbl_1_data_282 = BoardPlayerMotionCreate(arg0, lbl_1_data_2B0[temp_r30]); lbl_1_bss_6A = 8; @@ -257,12 +269,15 @@ void fn_1_19DC(s32 arg0, s32 arg1) { lbl_1_bss_68 = 1; var_r29 = lbl_1_data_2D0[GWPlayer[arg0].character]; } + lbl_1_data_280 = BoardPlayerMotionCreate(arg0, lbl_1_data_290[temp_r30]); temp = (180.0f + BoardPlayerRotYGet(arg0)); - BoardPlayerMotBlendSet(arg0, temp, 0xF); + BoardPlayerMotBlendSet(arg0, temp, 15); + while (BoardPlayerMotBlendCheck(arg0) == 0) { HuPrcVSleep(); } + HuAudFXPlay(var_r29); BoardPlayerVoiceEnableSet(arg0, lbl_1_bss_6A, 0); BoardPlayerMotionShiftSet(arg0, lbl_1_bss_6A, 0.0f, 8.0f, 0); @@ -272,7 +287,8 @@ void fn_1_19DC(s32 arg0, s32 arg1) { HuPrcVSleep(); } - HuPrcSleep(0x3C); + + HuPrcSleep(60); if (arg1 != 0) { BoardPlayerMotionShiftSet(arg0, lbl_1_bss_68, 0.0f, 8.0f, 0); @@ -281,16 +297,20 @@ void fn_1_19DC(s32 arg0, s32 arg1) { HuPrcVSleep(); } } + BoardPlayerIdleSet(arg0); HuPrcSleep(0x14); temp = (180.0f + BoardPlayerRotYGet(arg0)); - BoardPlayerMotBlendSet(arg0, temp, 0xF); + BoardPlayerMotBlendSet(arg0, temp, 15); + while (BoardPlayerMotBlendCheck(arg0) == 0) { HuPrcVSleep(); } - BoardAudSeqPause(0, 1, 0x3E8); + + BoardAudSeqPause(0, 1, 1000); BoardPlayerMotionShiftSet(arg0, lbl_1_data_280, 0.0f, 10.0f, 0); - HuPrcSleep(0xB); + HuPrcSleep(11); + while (BoardPlayerMotionEndCheck(arg0) == 0) { HuPrcVSleep(); } @@ -323,16 +343,20 @@ s32 fn_1_1D1C(void) { BoardWinCreate(2, 0x160003, 2); BoardWinWait(); BoardWinKill(); + prevTurn = GWSystem.turn - 1; maxTurn = GWSystem.max_turn; var_r31 = prevTurn / (maxTurn / 3); + if (var_r31 >= 3) { var_r31 = 2; } + modRand = BoardRandMod(100); if (modRand < sp8[var_r31] ) { return 1; } + modRand2 = BoardRandMod(100 - sp8[var_r31]); if (modRand2 < sp14[var_r31][0]) { lbl_1_bss_2C = 3; @@ -341,6 +365,7 @@ s32 fn_1_1D1C(void) { } else { lbl_1_bss_2C = 1; } + return 0; } @@ -373,11 +398,13 @@ void fn_1_1ED4(s32 arg0) { while (BoardFilterFadePauseCheck() == 0) { HuPrcVSleep(); } + BoardPlayerIdleSet(arg0); while (BoardMusStatusGet(1) != 0) { HuPrcVSleep(); } + BoardAudSeqPause(0, 0, 1000); BoardWinCreate(2, 0x160004, 2); BoardWinWait(); @@ -401,10 +428,12 @@ void fn_1_20E0(s32 arg0) { BoardModelPosSetV(lbl_1_data_284, &spC); BoardFilterFadeOut(0x1E); sp8 = BoardModelRotYGet(lbl_1_bss_6C); + while (BoardDAngleCalcRange(&sp8, 0.0f, 30.0f) == 0) { BoardModelRotYSet(lbl_1_data_284, sp8); HuPrcVSleep(); } + omVibrate(arg0, 0xC, 4, 2); BoardModelRotYSet(lbl_1_data_284, 0.0f); BoardModelRotYSet(lbl_1_bss_6C, 0.0f); @@ -426,26 +455,30 @@ void fn_1_20E0(s32 arg0) { if (lbl_1_bss_30 > 128.0f) { lbl_1_bss_30 = 128.0f; } - HuPrcSleep(0x28); + + HuPrcSleep(40); lbl_1_bss_30 = 128.0f; while (lbl_1_bss_30 > 0.0f) { HuPrcVSleep(); lbl_1_bss_30 -= 12.0f; } + if (lbl_1_bss_30 < 0.0f) { lbl_1_bss_30 = 0.0f; } + fn_1_2AC0(); for (i = 0; i < 3; i++) { - BoardCameraMotionStartEx(-1, NULL, 0, 680.0f, -1.0f, 0xD); + BoardCameraMotionStartEx(-1, NULL, 0, 680.0f, -1.0f, 13); BoardCameraMotionWait(); - BoardCameraMotionStartEx(-1, NULL, 0, 1360.0f, -1.0f, 0xD); + BoardCameraMotionStartEx(-1, NULL, 0, 1360.0f, -1.0f, 13); BoardCameraMotionWait(); } BoardPlayerIdleSet(arg0); + while (BoardMusStatusGet(1) != 0) { HuPrcVSleep(); } @@ -476,6 +509,7 @@ void fn_1_20E0(s32 arg0) { } BoardCameraQuakeReset(); + if (lbl_1_data_288 != 0) { HuAudFXStop(lbl_1_data_288); lbl_1_data_288 = -1; @@ -507,14 +541,16 @@ void fn_1_26E0(s32 arg0) { BoardPlayerPosGet(arg0, &sp14); PSVECSubtract(&sp20, &sp14, &sp8); PSVECNormalize(&sp8, &sp8); - temp = (180.0f * (atan2(-sp8.x, -sp8.z) / 3.141592653589793)); + temp = (180.0f * (atan2(-sp8.x, -sp8.z) / M_PI)); BoardPlayerRotYSet(arg0, temp); BoardCameraViewSet(1); BoardCameraTargetPlayerSet(arg0); BoardPlayerPosLerpStart(arg0, &sp14, &sp20, 0x28); + while (GWPlayer[arg0].moving != 0) { HuPrcVSleep(); } + BoardCameraMotionWait(); BoardModelMotionStart(lbl_1_bss_C[1], 0, 0); BoardPlayerIdleSet(arg0); @@ -526,8 +562,9 @@ void fn_1_2818(void) { s16 j; s16 sp8[3] = {0x0002, 0x003E, 0x007A}; - temp_r29 = (4 - lbl_1_bss_2C) * 0x3C; + temp_r29 = (4 - lbl_1_bss_2C) * 60; BoardModelMotionStart(lbl_1_bss_C[1], 0, 0); + while (1) { temp_r30 = BoardModelMotionTimeGet(lbl_1_bss_C[1]); if (temp_r29 > temp_r30) { @@ -548,6 +585,7 @@ void fn_1_2818(void) { s32 fn_1_2930(s32 arg0) { lbl_1_bss_0->unk0--; + if (lbl_1_bss_0->unk0 <= 0) { lbl_1_bss_0->unk2 = 0; lbl_1_bss_0->unk0 = 0; @@ -558,6 +596,7 @@ s32 fn_1_2930(s32 arg0) { fn_1_CF4(); return 1; } + sprintf(lbl_1_bss_38, "%d", lbl_1_bss_0->unk0); BoardWinCreate(0, 0x160007, -1); BoardWinInsertMesSet((s32)lbl_1_bss_38, 1); @@ -579,6 +618,7 @@ void fn_1_2AC0(void) { HuMemDirectFree(lbl_1_bss_34); lbl_1_bss_34 = NULL; } + if (lbl_1_data_286 != -1) { Hu3DModelKill(lbl_1_data_286); lbl_1_data_286 = -1; @@ -640,5 +680,3 @@ void fn_1_2B44(void) { GXPosition2f32(0.0f, 1.0f); GXSetChanMatColor(GX_COLOR0A0, sp1C); } - -f32 const padStatue = 0.0f; diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index 7ebecc57..6386f591 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -20,7 +20,7 @@ void* lbl_1_bss_8; s32 lbl_1_bss_4; W10BoardWork *boardWork; -//DATA +//data unkw10Dll lbl_1_data_0[1] = { 3300.0f, 100.0f, -900.0f, 0.0f, 0.0f, 0.0f, From b51802ea3588497c4fae92703c8142793fe83b72 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Wed, 27 Mar 2024 09:43:19 -0700 Subject: [PATCH 095/106] Matched REL/w01/mg_coin + some data cleanup --- config/GMPE01_00/rels/w01Dll/symbols.txt | 236 ++--- configure.py | 2 +- include/REL/w01Dll.h | 1 + include/game/board/player.h | 2 + src/REL/w01Dll/main.c | 10 +- src/REL/w01Dll/mg_coin.c | 1072 ++++++++++++++++++++++ src/REL/w03Dll/mg_item.c | 3 +- src/REL/w03Dll/statue.c | 36 +- src/game/board/item.c | 363 ++++---- src/game/board/lottery.c | 2 +- 10 files changed, 1402 insertions(+), 325 deletions(-) create mode 100755 src/REL/w01Dll/mg_coin.c diff --git a/config/GMPE01_00/rels/w01Dll/symbols.txt b/config/GMPE01_00/rels/w01Dll/symbols.txt index bd58c480..c6b4e59a 100644 --- a/config/GMPE01_00/rels/w01Dll/symbols.txt +++ b/config/GMPE01_00/rels/w01Dll/symbols.txt @@ -75,31 +75,31 @@ fn_1_9A24 = .text:0x00009A24; // type:function size:0x198 scope:local fn_1_9BBC = .text:0x00009BBC; // type:function size:0x144 scope:local fn_1_9D00 = .text:0x00009D00; // type:function size:0xD8 fn_1_9DD8 = .text:0x00009DD8; // type:function size:0x6E0 -fn_1_A4B8 = .text:0x0000A4B8; // type:function size:0x9C -fn_1_A554 = .text:0x0000A554; // type:function size:0xA8 -fn_1_A5FC = .text:0x0000A5FC; // type:function size:0xE4 -fn_1_A6E0 = .text:0x0000A6E0; // type:function size:0x938 -fn_1_B018 = .text:0x0000B018; // type:function size:0x70 -fn_1_B088 = .text:0x0000B088; // type:function size:0x144 -fn_1_B1CC = .text:0x0000B1CC; // type:function size:0x1EC -fn_1_B3B8 = .text:0x0000B3B8; // type:function size:0xC0 -fn_1_B478 = .text:0x0000B478; // type:function size:0x680 -fn_1_BAF8 = .text:0x0000BAF8; // type:function size:0x1E4 -fn_1_BCDC = .text:0x0000BCDC; // type:function size:0x224 -fn_1_BF00 = .text:0x0000BF00; // type:function size:0x68 -fn_1_BF68 = .text:0x0000BF68; // type:function size:0x98 -fn_1_C000 = .text:0x0000C000; // type:function size:0xFC -fn_1_C0FC = .text:0x0000C0FC; // type:function size:0x160 -fn_1_C25C = .text:0x0000C25C; // type:function size:0x5E8 -fn_1_C844 = .text:0x0000C844; // type:function size:0x50 -fn_1_C894 = .text:0x0000C894; // type:function size:0xB8 -fn_1_C94C = .text:0x0000C94C; // type:function size:0x4C -fn_1_C998 = .text:0x0000C998; // type:function size:0x1AC -fn_1_CB44 = .text:0x0000CB44; // type:function size:0x380 -fn_1_CEC4 = .text:0x0000CEC4; // type:function size:0x170 -fn_1_D034 = .text:0x0000D034; // type:function size:0x48 -fn_1_D07C = .text:0x0000D07C; // type:function size:0x98 -fn_1_D114 = .text:0x0000D114; // type:function size:0x62C +fn_1_A4B8 = .text:0x0000A4B8; // type:function size:0x9C scope:local +fn_1_A554 = .text:0x0000A554; // type:function size:0xA8 scope:local +fn_1_A5FC = .text:0x0000A5FC; // type:function size:0xE4 scope:local +fn_1_A6E0 = .text:0x0000A6E0; // type:function size:0x938 scope:local +fn_1_B018 = .text:0x0000B018; // type:function size:0x70 scope:local +fn_1_B088 = .text:0x0000B088; // type:function size:0x144 scope:local +fn_1_B1CC = .text:0x0000B1CC; // type:function size:0x1EC scope:local +fn_1_B3B8 = .text:0x0000B3B8; // type:function size:0xC0 scope:local +fn_1_B478 = .text:0x0000B478; // type:function size:0x680 scope:local +fn_1_BAF8 = .text:0x0000BAF8; // type:function size:0x1E4 scope:local +fn_1_BCDC = .text:0x0000BCDC; // type:function size:0x224 scope:local +fn_1_BF00 = .text:0x0000BF00; // type:function size:0x68 scope:local +fn_1_BF68 = .text:0x0000BF68; // type:function size:0x98 scope:local +fn_1_C000 = .text:0x0000C000; // type:function size:0xFC scope:local +fn_1_C0FC = .text:0x0000C0FC; // type:function size:0x160 scope:local +fn_1_C25C = .text:0x0000C25C; // type:function size:0x5E8 scope:local +fn_1_C844 = .text:0x0000C844; // type:function size:0x50 scope:local +fn_1_C894 = .text:0x0000C894; // type:function size:0xB8 scope:local +fn_1_C94C = .text:0x0000C94C; // type:function size:0x4C scope:local +fn_1_C998 = .text:0x0000C998; // type:function size:0x1AC scope:local +fn_1_CB44 = .text:0x0000CB44; // type:function size:0x380 scope:local +fn_1_CEC4 = .text:0x0000CEC4; // type:function size:0x170 scope:local +fn_1_D034 = .text:0x0000D034; // type:function size:0x48 scope:local +fn_1_D07C = .text:0x0000D07C; // type:function size:0x98 scope:local +fn_1_D114 = .text:0x0000D114; // type:function size:0x62C scope:local fn_1_D740 = .text:0x0000D740; // type:function size:0x644 fn_1_DD84 = .text:0x0000DD84; // type:function size:0x110 fn_1_DE94 = .text:0x0000DE94; // type:function size:0x26C @@ -220,67 +220,67 @@ lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data: lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 data:float -lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 data:float -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float -lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 data:float -lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 data:float -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 data:float -lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 data:float -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float -lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0xC data:2byte -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 data:double -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x8 data:double -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x8 data:double -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x8 data:double -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 data:float -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 data:double -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 data:float -lbl_1_rodata_224 = .rodata:0x00000224; // type:object size:0x4 data:float -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 data:float -lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 data:float -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float -lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 data:float -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 data:float -lbl_1_rodata_23C = .rodata:0x0000023C; // type:object size:0x4 data:float -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 data:float -lbl_1_rodata_244 = .rodata:0x00000244; // type:object size:0x4 data:float -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x4 data:float -lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 data:float -lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 data:float -lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 data:float -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 data:float -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x8 data:double -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 data:float -lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 data:float -lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 data:float -lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 data:float -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 data:float -lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 data:float -lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 data:float -lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x8 data:double -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 data:double -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x8 data:double -lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 data:float -lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 data:float -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 data:float -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 data:float -lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x8 data:double -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 data:float -lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 data:float -lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float -lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1CC = .rodata:0x000001CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D4 = .rodata:0x000001D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0xC scope:local data:2byte +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x8 scope:local data:double +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x8 scope:local data:double +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:float +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 scope:local data:double +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float +lbl_1_rodata_224 = .rodata:0x00000224; // type:object size:0x4 scope:local data:float +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 scope:local data:float +lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 scope:local data:float +lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 scope:local data:float +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 scope:local data:float +lbl_1_rodata_23C = .rodata:0x0000023C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 scope:local data:float +lbl_1_rodata_244 = .rodata:0x00000244; // type:object size:0x4 scope:local data:float +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24C = .rodata:0x0000024C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x4 scope:local data:float +lbl_1_rodata_254 = .rodata:0x00000254; // type:object size:0x4 scope:local data:float +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x8 scope:local data:double +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 scope:local data:float +lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 scope:local data:float +lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 scope:local data:float +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 scope:local data:float +lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 scope:local data:float +lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x8 scope:local data:double +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 scope:local data:double +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 scope:local data:float lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 data:float lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float @@ -362,12 +362,12 @@ lbl_1_data_62A = .data:0x0000062A; // type:object size:0x5 scope:local data:stri lbl_1_data_62F = .data:0x0000062F; // type:object size:0x4 scope:local data:string lbl_1_data_633 = .data:0x00000633; // type:object size:0x1 scope:local data:byte lbl_1_data_634 = .data:0x00000634; // type:object size:0x24 scope:local -lbl_1_data_658 = .data:0x00000658; // type:object size:0x24 -lbl_1_data_67C = .data:0x0000067C; // type:object size:0x14 -lbl_1_data_690 = .data:0x00000690; // type:object size:0x2D0 -lbl_1_data_960 = .data:0x00000960; // type:object size:0x2D0 -lbl_1_data_C30 = .data:0x00000C30; // type:object size:0x2D0 -lbl_1_data_F00 = .data:0x00000F00; // type:object size:0x8 +lbl_1_data_658 = .data:0x00000658; // type:object size:0x24 scope:local +lbl_1_data_67C = .data:0x0000067C; // type:object size:0x12 scope:local data:2byte +lbl_1_data_690 = .data:0x00000690; // type:object size:0x2D0 scope:local +lbl_1_data_960 = .data:0x00000960; // type:object size:0x2D0 scope:local +lbl_1_data_C30 = .data:0x00000C30; // type:object size:0x2D0 scope:local +lbl_1_data_F00 = .data:0x00000F00; // type:object size:0x3 scope:local data:string lbl_1_data_F08 = .data:0x00000F08; // type:object size:0x38 lbl_1_data_F40 = .data:0x00000F40; // type:object size:0x20 lbl_1_data_F60 = .data:0x00000F60; // type:object size:0x20 @@ -418,32 +418,32 @@ lbl_1_bss_6B4 = .bss:0x000006B4; // type:object size:0x1 scope:local data:byte lbl_1_bss_6B6 = .bss:0x000006B6; // type:object size:0xA scope:local data:2byte lbl_1_bss_6C0 = .bss:0x000006C0; // type:object size:0x4 scope:local data:4byte lbl_1_bss_6C4 = .bss:0x000006C4; // type:object size:0x42 data:2byte -lbl_1_bss_708 = .bss:0x00000708; // type:object size:0x2 data:2byte -lbl_1_bss_70C = .bss:0x0000070C; // type:object size:0x4 data:4byte -lbl_1_bss_710 = .bss:0x00000710; // type:object size:0x4 data:4byte -lbl_1_bss_714 = .bss:0x00000714; // type:object size:0xC -lbl_1_bss_720 = .bss:0x00000720; // type:object size:0x4 data:4byte -lbl_1_bss_724 = .bss:0x00000724; // type:object size:0x4 data:4byte -lbl_1_bss_728 = .bss:0x00000728; // type:object size:0x2 data:2byte -lbl_1_bss_72A = .bss:0x0000072A; // type:object size:0x2 data:2byte -lbl_1_bss_72C = .bss:0x0000072C; // type:object size:0x4 data:4byte -lbl_1_bss_730 = .bss:0x00000730; // type:object size:0x4 data:4byte -lbl_1_bss_734 = .bss:0x00000734; // type:object size:0x4 data:4byte -lbl_1_bss_738 = .bss:0x00000738; // type:object size:0xC data:float -lbl_1_bss_744 = .bss:0x00000744; // type:object size:0x2 data:2byte -lbl_1_bss_748 = .bss:0x00000748; // type:object size:0x4 data:4byte -lbl_1_bss_74C = .bss:0x0000074C; // type:object size:0x4 data:4byte -lbl_1_bss_750 = .bss:0x00000750; // type:object size:0x2 data:2byte -lbl_1_bss_754 = .bss:0x00000754; // type:object size:0x4 data:float -lbl_1_bss_758 = .bss:0x00000758; // type:object size:0x4 data:4byte -lbl_1_bss_75C = .bss:0x0000075C; // type:object size:0x4 data:4byte -lbl_1_bss_760 = .bss:0x00000760; // type:object size:0x28 -lbl_1_bss_788 = .bss:0x00000788; // type:object size:0x2 data:2byte -lbl_1_bss_78A = .bss:0x0000078A; // type:object size:0x6 data:2byte -lbl_1_bss_790 = .bss:0x00000790; // type:object size:0x6 data:2byte -lbl_1_bss_796 = .bss:0x00000796; // type:object size:0x2 data:2byte -lbl_1_bss_798 = .bss:0x00000798; // type:object size:0x4 data:4byte -lbl_1_bss_79C = .bss:0x0000079C; // type:object size:0x4 data:4byte +lbl_1_bss_708 = .bss:0x00000708; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_70C = .bss:0x0000070C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_710 = .bss:0x00000710; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_714 = .bss:0x00000714; // type:object size:0xC scope:local +lbl_1_bss_720 = .bss:0x00000720; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_724 = .bss:0x00000724; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_728 = .bss:0x00000728; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_72A = .bss:0x0000072A; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_72C = .bss:0x0000072C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_730 = .bss:0x00000730; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_734 = .bss:0x00000734; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_738 = .bss:0x00000738; // type:object size:0xC scope:local data:float +lbl_1_bss_744 = .bss:0x00000744; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_748 = .bss:0x00000748; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_74C = .bss:0x0000074C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_750 = .bss:0x00000750; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_754 = .bss:0x00000754; // type:object size:0x4 scope:local data:float +lbl_1_bss_758 = .bss:0x00000758; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_75C = .bss:0x0000075C; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_760 = .bss:0x00000760; // type:object size:0x28 scope:local +lbl_1_bss_788 = .bss:0x00000788; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_78A = .bss:0x0000078A; // type:object size:0x6 scope:local data:2byte +lbl_1_bss_790 = .bss:0x00000790; // type:object size:0x6 scope:local data:2byte +lbl_1_bss_796 = .bss:0x00000796; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_798 = .bss:0x00000798; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_79C = .bss:0x0000079C; // type:object size:0x4 scope:local data:4byte lbl_1_bss_7A0 = .bss:0x000007A0; // type:object size:0x4 data:4byte lbl_1_bss_7A4 = .bss:0x000007A4; // type:object size:0x4 data:4byte lbl_1_bss_7A8 = .bss:0x000007A8; // type:object size:0x2 data:2byte diff --git a/configure.py b/configure.py index 01290ed9..ca087f34 100644 --- a/configure.py +++ b/configure.py @@ -1085,7 +1085,7 @@ config.libs = [ objects = { Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w01Dll/main.c"), - Object(NonMatching, "REL/w01Dll/mg_coin.c"), + Object(Matching, "REL/w01Dll/mg_coin.c"), Object(NonMatching, "REL/w01Dll/mg_item.c"), } ), diff --git a/include/REL/w01Dll.h b/include/REL/w01Dll.h index a2a3af3f..b8535e89 100755 --- a/include/REL/w01Dll.h +++ b/include/REL/w01Dll.h @@ -12,6 +12,7 @@ typedef struct { extern void fn_1_9D00(s32 arg0); extern void fn_1_9DD8(void); + extern void fn_1_D740(s16 *arg0); extern void fn_1_DD84(void); extern void fn_1_DE94(void); diff --git a/include/game/board/player.h b/include/game/board/player.h index 5fef2c61..69aafebc 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -137,11 +137,13 @@ void BoardPlayerMotBlendExec(omObjData*); s32 BoardPlayerAutoSizeGet(s32); void BoardPlayerAutoSizeSet(s32, s32); void BoardPlayerCopyMat(s32); +void BoardBowserSuitInit(s32); void BoardBowserSuitKill(s32); void BoardDiceDigit2DInit(s32, s32); void BoardDiceDigit2DUpdateEnable(s32); void BoardPlayerResizeAnimExec(s32 player, s32 size); s32 BoardPlayerAnimBlendCheck(s32); +s16 BoardBowserSuitPlayerModelGet(void); void BoardBowserSuitMotionSetWait(void); void BoardBowserSuitPlayerModelKill(void); void BoardDiceDigit2DShowSet(s32); diff --git a/src/REL/w01Dll/main.c b/src/REL/w01Dll/main.c index 1737da2e..48239721 100755 --- a/src/REL/w01Dll/main.c +++ b/src/REL/w01Dll/main.c @@ -8,6 +8,7 @@ #include "game/hsfman.h" #include "game/hsfmotion.h" #include "game/object.h" +#include "game/objsub.h" #include "game/pad.h" #include "game/process.h" #include "game/window.h" @@ -647,15 +648,12 @@ static void fn_1_130C(void) { BoardPlayerMotionStart(temp_r31, 1, 0x40000001); } -// TODO: consider moving to gamework_data.h or board/player.h. -static inline s16 GWPlayerCurrSpaceCurrGet(void) { - return GWPlayer[GWSystem.player_curr].space_curr; -} - static s32 fn_1_157C(void) { s32 temp_r31; + s16 temp_curr; - temp_r31 = BoardSpaceFlagGet(0, GWPlayerCurrSpaceCurrGet()) & 0x600000; + temp_curr = GWPlayer[GWSystem.player_curr].space_curr; + temp_r31 = BoardSpaceFlagGet(0, temp_curr) & 0x600000; BoardDiceDigit2DShowSet(0); if (temp_r31 == 0x200000) { fn_1_130C(); diff --git a/src/REL/w01Dll/mg_coin.c b/src/REL/w01Dll/mg_coin.c new file mode 100755 index 00000000..71f92248 --- /dev/null +++ b/src/REL/w01Dll/mg_coin.c @@ -0,0 +1,1072 @@ +#include "REL/w01Dll.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfman.h" +#include "game/memory.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/board/audio.h" +#include "game/board/com.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "math.h" + +typedef struct { + /* 0x00 */ Vec unk00; + /* 0x0C */ float unk0C; +} Data690InnerStruct; // Size 0x10 + +typedef Data690InnerStruct Data690Block[15]; + +typedef struct { + /* 0x00 */ s16 unk00; + /* 0x02 */ s16 unk02; + /* 0x04 */ Vec unk04; + /* 0x10 */ Vec unk10; + /* 0x1C */ u16 unk1C; + /* 0x1E */ char unk1E[2]; + /* 0x20 */ float unk20; + /* 0x24 */ u16 unk24; + /* 0x26 */ s16 unk26; + /* 0x28 */ s16 unk28; + /* 0x2A */ char unk2A[2]; +} Bss720Data; // Size 0x2C + +typedef struct { + /* 0x00 */ char unk00[4]; + /* 0x04 */ Data690Block *unk04; + /* 0x08 */ u16 unk08; + /* 0x0A */ char unk0A[2]; + /* 0x0C */ float unk0C; + /* 0x10 */ float unk10; + /* 0x14 */ float unk14; + /* 0x18 */ float unk18; + /* 0x1C */ float unk1C; + /* 0x20 */ Vec unk20; + /* 0x2C */ Vec unk2C; + /* 0x38 */ float unk38; + /* 0x3C */ float unk3C; + /* 0x40 */ s16 unk40; + /* 0x42 */ char unk42[2]; +} Bss714Data; // Size 0x44 + +static void fn_1_A4B8(omObjData *arg0); +static void fn_1_A554(void); +static void fn_1_A5FC(void); +static void fn_1_A6E0(omObjData *arg0); +static float fn_1_B018(Data690Block *arg0); +static void fn_1_B088(omObjData *arg0); +static void fn_1_B1CC(omObjData *arg0, u16 *arg1, u16 *arg2); +static void fn_1_B3B8(omObjData *arg0); +static void fn_1_B478(omObjData *arg0); +static void fn_1_BAF8(omObjData *arg0); +static void fn_1_BCDC(omObjData *arg0); +static void fn_1_BF00(omObjData *arg0); +static void fn_1_BF68(omObjData *arg0); +static void fn_1_C000(void); +static void fn_1_C0FC(omObjData *arg0); +static void fn_1_C25C(void); +static void fn_1_C844(void); +static void fn_1_C894(omObjData *arg0); +static void fn_1_C94C(Vec *arg0, Vec *arg1, Vec *arg2); +static float fn_1_C998(Vec *arg0); +static u32 fn_1_CB44(Vec *arg0, float arg1); +static void fn_1_CEC4(void); +static void fn_1_D034(void); +static void fn_1_D07C(omObjData *arg0); +static void fn_1_D114(ModelData *model, ParticleData *particle, Mtx matrix); + +static s32 lbl_1_bss_79C; +static s32 lbl_1_bss_798; +static s16 lbl_1_bss_796; +static s16 lbl_1_bss_790[3]; +static s16 lbl_1_bss_78A[3]; +static s16 lbl_1_bss_788; +static s16 lbl_1_bss_760[20]; +static Process *lbl_1_bss_75C; +static omObjData *lbl_1_bss_758; +static float lbl_1_bss_754; +static s16 lbl_1_bss_750; +static s32 lbl_1_bss_74C; +static s32 lbl_1_bss_748; +static s16 lbl_1_bss_744; +static Vec lbl_1_bss_738; +static s32 lbl_1_bss_734; +static s32 lbl_1_bss_730; +static s32 lbl_1_bss_72C; +static u16 lbl_1_bss_72A; +static u16 lbl_1_bss_728; +static s32 lbl_1_bss_724; +static omObjData *lbl_1_bss_720; +static omObjData *lbl_1_bss_714[3]; +static omObjData *lbl_1_bss_710; +static AnimData *lbl_1_bss_70C; +static s16 lbl_1_bss_708; + +static Vec lbl_1_data_658[3] = { + { -50.0f, 238.0f, 0.0f }, + { 0.0f, 275.5f, 0.0f }, + { 50.0f, 238.0f, 0.0f } +}; + +static u16 lbl_1_data_67C[3][3] = { + { 10, 5, 20 }, + { 10, 5, 20 }, + { 5, 20, 10 } +}; + +static Data690Block lbl_1_data_690[3] = { + { + { { -50.0f, -12.0f, 0.0f }, 75.0f }, + { { -50.0f, 63.0f, 0.0f }, 50.0f }, + { { 0.0f, 63.0f, 0.0f }, 25.0f }, + { { 0.0f, 88.0f, 0.0f }, 50.0f }, + { { 50.0f, 88.0f, 0.0f }, 87.5f }, + { { 50.0f, 175.5f, 0.0f }, 0.0f } + }, + { + { { 0.0f, -12.0f, 0.0f }, 75.0f }, + { { 0.0f, 63.0f, 0.0f }, 50.0f }, + { { -50.0f, 63.0f, 0.0f }, 50.0f }, + { { -50.0f, 113.0f, 0.0f }, 50.0f }, + { { 0.0f, 113.0f, 0.0f }, 50.0f }, + { { 0.0f, 163.0f, 0.0f }, 50.0f }, + { { -50.0f, 163.0f, 0.0f }, 12.5f }, + { { -50.0f, 175.5f, 0.0f }, 0.0f } + }, + { + { { 50.0f, -12.0f, 0.0f }, 100.0f }, + { { 50.0f, 88.0f, 0.0f }, 50.0f }, + { { 0.0f, 88.0f, 0.0f }, 25.0f }, + { { 0.0f, 113.0f, 0.0f }, 50.0f }, + { { -50.0f, 113.0f, 0.0f }, 50.0f }, + { { -50.0f, 163.0f, 0.0f }, 50.0f }, + { { 0.0f, 163.0f, 0.0f }, 50.0f }, + { { 0.0f, 213.0f, 0.0f }, 0.0f } + } +}; + +static Data690Block lbl_1_data_960[3] = { + { + { { -50.0f, -12.0f, 0.0f }, 125.0f }, + { { -50.0f, 113.0f, 0.0f }, 50.0f }, + { { 0.0f, 113.0f, 0.0f }, 25.0f }, + { { 0.0f, 138.0f, 0.0f }, 50.0f }, + { { 50.0f, 138.0f, 0.0f }, 37.5f }, + { { 50.0f, 175.5f, 0.0f }, 0.0f } + }, + { + { { 0.0f, -12.0f, 0.0f }, 75.0f }, + { { 0.0f, 63.0f, 0.0f }, 50.0f }, + { { 50.0f, 63.0f, 0.0f }, 75.0f }, + { { 50.0f, 138.0f, 0.0f }, 50.0f }, + { { 0.0f, 138.0f, 0.0f }, 25.0f }, + { { 0.0f, 163.0f, 0.0f }, 50.0f }, + { { -50.0f, 163.0f, 0.0f }, 12.5f }, + { { -50.0f, 175.5f, 0.0f }, 0.0f } + }, + { + { { 50.0f, -12.0f, 0.0f }, 75.0f }, + { { 50.0f, 63.0f, 0.0f }, 50.0f }, + { { 0.0f, 63.0f, 0.0f }, 50.0f }, + { { 0.0f, 113.0f, 0.0f }, 50.0f }, + { { -50.0f, 113.0f, 0.0f }, 50.0f }, + { { -50.0f, 163.0f, 0.0f }, 50.0f }, + { { 0.0f, 163.0f, 0.0f }, 50.0f }, + { { 0.0f, 213.0f, 0.0f }, 0.0f } + } +}; + +static Data690Block lbl_1_data_C30[3] = { + { + { { -50.0f, -12.0f, 0.0f }, 100.0f }, + { { -50.0f, 88.0f, 0.0f }, 50.0f }, + { { 0.0f, 88.0f, 0.0f }, 50.0f }, + { { 0.0f, 138.0f, 0.0f }, 50.0f }, + { { -50.0f, 138.0f, 0.0f }, 37.5f }, + { { -50.0f, 175.5f, 0.0f }, 0.0f } + }, + { + { { 0.0f, -12.0f, 0.0f }, 75.0f }, + { { 0.0f, 63.0f, 0.0f }, 50.0f }, + { { 50.0f, 63.0f, 0.0f }, 100.0f }, + { { 50.0f, 163.0f, 0.0f }, 50.0f }, + { { 0.0f, 163.0f, 0.0f }, 50.0f }, + { { 0.0f, 213.0f, 0.0f }, 0.0f } + }, + { + { { 50.0f, -12.0f, 0.0f }, 75.0f }, + { { 50.0f, 63.0f, 0.0f }, 50.0f }, + { { 0.0f, 63.0f, 0.0f }, 25.0f }, + { { 0.0f, 88.0f, 0.0f }, 50.0f }, + { { -50.0f, 88.0f, 0.0f }, 50.0f }, + { { -50.0f, 138.0f, 0.0f }, 50.0f }, + { { 0.0f, 138.0f, 0.0f }, 25.0f }, + { { 0.0f, 163.0f, 0.0f }, 50.0f }, + { { 50.0f, 163.0f, 0.0f }, 12.5f }, + { { 50.0f, 175.5f, 0.0f }, 0.0f } + } +}; + +void fn_1_9D00(s32 arg0) { + s32 temp_r31; + s32 var_r30; + + temp_r31 = GWSystem.star_pos; + var_r30 = 0; + if (lbl_1_bss_0->unk00_field0 != 0) { + if (temp_r31 == 0 || temp_r31 == 1 || temp_r31 == 7) { + var_r30 = 0; + } else { + var_r30 = 1; + } + } else if (temp_r31 == 0 || temp_r31 == 1 || temp_r31 == 7) { + var_r30 = 1; + } else { + var_r30 = 0; + } + if (BoardPlayerCoinsGet(arg0) < 5) { + var_r30 = 0; + } + if (var_r30 != 0) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } +} + +void fn_1_9DD8(void) { + Vec sp2C[3]; + Vec sp20; + Vec sp14; + Vec sp8; + Bss720Data *temp_r30; + Bss714Data *temp_r29; + s32 i; + + lbl_1_bss_79C = GWPlayer[GWSystem.player_curr].port; + lbl_1_bss_796 = lbl_1_bss_6C4[6]; + lbl_1_bss_790[0] = lbl_1_bss_6C4[7]; + lbl_1_bss_790[1] = lbl_1_bss_6C4[8]; + lbl_1_bss_790[2] = lbl_1_bss_6C4[9]; + lbl_1_bss_78A[0] = lbl_1_bss_6C4[10]; + lbl_1_bss_78A[1] = lbl_1_bss_6C4[11]; + lbl_1_bss_78A[2] = lbl_1_bss_6C4[12]; + BoardModelVisibilitySet(lbl_1_bss_790[0], 0); + BoardModelVisibilitySet(lbl_1_bss_790[1], 0); + BoardModelVisibilitySet(lbl_1_bss_790[2], 0); + lbl_1_bss_734 = rand8() % 3; + BoardModelVisibilitySet(lbl_1_bss_790[lbl_1_bss_734], 1); + BoardModelMotionStart(lbl_1_bss_790[lbl_1_bss_734], 0, 0x40000001); + BoardModelPosGet(lbl_1_bss_796, &sp20); + sp8.x = sp8.y = sp8.z = 1.0f; + for (i = 0; i < 3; i++) { + sp2C[i] = lbl_1_data_690[i][0].unk00; + sp2C[i].y -= -12.0f; + BoardModelPosSet(lbl_1_bss_78A[i], sp20.x + sp2C[i].x, sp20.y + sp2C[i].y, sp20.z + 30.0f); + BoardModelVisibilitySet(lbl_1_bss_78A[i], 1); + BoardModelScaleSetV(lbl_1_bss_78A[i], &sp8); + } + lbl_1_bss_798 = GWSystem.player_curr; + BoardModelPosGet(lbl_1_bss_796, &lbl_1_bss_738); + lbl_1_bss_730 = 1; + BoardModelPosGet(lbl_1_bss_78A[lbl_1_bss_730], &sp14); + BoardPlayerPosGet(lbl_1_bss_798, &sp20); + lbl_1_bss_758 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_A4B8); + lbl_1_bss_720 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B3B8); + lbl_1_bss_720->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Bss720Data), MEMORY_DEFAULT_NUM); + temp_r30 = lbl_1_bss_720->data; + temp_r30->unk02 = 0; + temp_r30->unk04 = sp14; + temp_r30->unk28 = 0; + fn_1_CB44(&sp14, 0.0f); + fn_1_B088(lbl_1_bss_720); + lbl_1_bss_750 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_W01, 19)); + Hu3DModelAttrSet(lbl_1_bss_750, 1); + for (i = 0; i < 3; i++) { + lbl_1_bss_714[i] = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_A6E0); + lbl_1_bss_714[i]->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Bss714Data), MEMORY_DEFAULT_NUM); + lbl_1_bss_714[i]->work[0] = lbl_1_bss_78A[i]; + lbl_1_bss_714[i]->work[1] = 0; + lbl_1_bss_714[i]->work[3] = 0; + temp_r29 = lbl_1_bss_714[i]->data; + if (i == lbl_1_bss_730) { + lbl_1_bss_714[i]->work[2] = 1; + } else { + lbl_1_bss_714[i]->work[2] = 0; + } + temp_r29->unk18 = 1.0f; + temp_r29->unk1C = 0.0f; + } + lbl_1_bss_72C = 0; + lbl_1_bss_74C = 5; + lbl_1_bss_748 = 0x3C; + lbl_1_bss_72A = 0; + fn_1_CEC4(); + lbl_1_bss_788 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 17), NULL, 0); + BoardModelMotionUpdateSet(lbl_1_bss_788, 1); + BoardModelVisibilitySet(lbl_1_bss_788, 0); + for (i = 0; i < 20; i++) { + lbl_1_bss_760[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 1); + BoardModelVisibilitySet(lbl_1_bss_760[i], 0); + } +} + +static void fn_1_A4B8(omObjData *arg0) { + if (lbl_1_bss_72A == 0) { + return; + } + if (BoardMGDoneFlagGet() == 1) { + if (lbl_1_bss_754 <= 0.0f) { + fn_1_A5FC(); + omDelObjEx(HuPrcCurrentGet(), arg0); + } + } + lbl_1_bss_754 -= 1.0f; +} + +static void fn_1_A554(void) { + float temp_f1; + + lbl_1_bss_72A = 1; + BoardMGExit(); + temp_f1 = BoardModelMotionTimeGet(lbl_1_bss_796); + lbl_1_bss_754 = temp_f1; + BoardModelMotionStart(lbl_1_bss_796, 0, 0); + BoardModelMotionTimeSet(lbl_1_bss_796, temp_f1); + BoardModelMotionSpeedSet(lbl_1_bss_796, -1.0f); +} + +static void fn_1_A5FC(void) { + s32 i; + + for (i = 0; i < 3; i++) { + BoardModelVisibilitySet(lbl_1_bss_790[i], 0); + BoardModelVisibilitySet(lbl_1_bss_78A[i], 0); + omDelObjEx(HuPrcCurrentGet(), lbl_1_bss_714[i]); + } + for (i = 0; i < 20; i++) { + BoardModelKill(lbl_1_bss_760[i]); + } + fn_1_D034(); + BoardModelKill(lbl_1_bss_788); + BoardMGDoneFlagSet(0); + Hu3DModelKill(lbl_1_bss_750); +} + +static void fn_1_A6E0(omObjData *arg0) { + Bss714Data *temp_r31; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + + temp_r31 = arg0->data; + BoardModelScaleGet(arg0->work[0], &sp2C); + switch (arg0->work[2]) { + case 1: + if ((sp2C.x += 0.08f) >= 1.5f) { + sp2C.x = 1.5f; + sp2C.y = 1.5f; + if (arg0->work[3] == 1) { + arg0->work[2] = 0; + } else { + arg0->work[2] = 2; + } + } else { + sp2C.y += 0.08f; + } + BoardModelScaleSetV(arg0->work[0], &sp2C); + break; + case 2: + if ((sp2C.x -= 0.08f) <= 1.0f) { + sp2C.x = 1.0f; + sp2C.y = 1.0f; + if (arg0->work[1] == 1) { + arg0->work[2] = 0; + arg0->work[1] = 0; + } else { + arg0->work[2] = 1; + } + } else { + sp2C.y -= 0.08f; + } + BoardModelScaleSetV(arg0->work[0], &sp2C); + break; + case 3: + switch (lbl_1_bss_734) { + case 0: + temp_r31->unk04 = &lbl_1_data_690[lbl_1_bss_730]; + break; + case 1: + temp_r31->unk04 = &lbl_1_data_960[lbl_1_bss_730]; + break; + case 2: + temp_r31->unk04 = &lbl_1_data_C30[lbl_1_bss_730]; + break; + } + BoardModelPosGet(arg0->work[0], &sp14); + sp14.x = lbl_1_bss_738.x + ((*temp_r31->unk04)[0].unk00.x + temp_r31->unk18); + temp_r31->unk18 = -temp_r31->unk18; + BoardModelPosSetV(arg0->work[0], &sp14); + sp14.y += 5.0f; + BoardPlayerPosSetV(lbl_1_bss_798, &sp14); + temp_r31->unk1C += 0.022222223f; + temp_r31->unk38 -= 0.011111111f; + if (temp_r31->unk38 < 0.0f) { + temp_r31->unk38 = 0.0f; + } + Hu3DModelTPLvlSet(lbl_1_bss_750, temp_r31->unk38); + if (temp_r31->unk1C > 1.0f) { + temp_r31->unk1C = 1.0f; + } + PSVECAdd(&temp_r31->unk20, &temp_r31->unk2C, &temp_r31->unk20); + if (temp_r31->unk20.y >= 4.0f) { + temp_r31->unk20.y = 4.0f; + temp_r31->unk2C.y = -0.1f; + } + if (temp_r31->unk20.y < 1.0f) { + temp_r31->unk20.y = 1.0f; + } + Hu3DModelScaleSet(lbl_1_bss_750, temp_r31->unk20.x, temp_r31->unk20.y, temp_r31->unk20.z); + break; + case 4: + Hu3DModelAttrSet(lbl_1_bss_750, 1); + arg0->work[2] = 5; + temp_r31->unk08 = 0; + temp_r31->unk0C = 12.0f; + temp_r31->unk14 = (fn_1_B018(temp_r31->unk04) - temp_r31->unk0C) / 90.0f; + temp_r31->unk10 = temp_r31->unk14 / 20.0f; + HuAudFXPlay(0x406); + HuAudFXPlay(0x407); + HuAudFXStop(lbl_1_bss_724); + break; + case 5: + var_f31 = temp_r31->unk0C + temp_r31->unk10; + temp_r31->unk0C = var_f31; + temp_r31->unk10 *= 1.04f; + if (temp_r31->unk10 > temp_r31->unk14) { + temp_r31->unk10 = temp_r31->unk14; + } + BoardModelPosGet(arg0->work[0], &sp20); + while (var_f31 >= (*temp_r31->unk04)[temp_r31->unk08].unk0C) { + var_f31 -= (*temp_r31->unk04)[temp_r31->unk08].unk0C; + temp_r31->unk08++; + if ((*temp_r31->unk04)[temp_r31->unk08].unk0C == 0.0f) { + omVibrate(lbl_1_bss_798, 12, 6, 6); + var_f31 = 0.0f; + lbl_1_bss_72C = 1; + lbl_1_bss_724 = HuAudFXPlay(0x332); + lbl_1_bss_708 = 0; + arg0->work[2] = 6; + if (sp20.x - lbl_1_bss_738.x < -25.0f) { + temp_r31->unk40 = 0; + lbl_1_bss_728 = 5; + } else if (sp20.x - lbl_1_bss_738.x > 25.0f) { + temp_r31->unk40 = 2; + lbl_1_bss_728 = 10; + } else { + temp_r31->unk40 = 1; + lbl_1_bss_728 = 20; + } + break; + } + } + temp_r31->unk0C = var_f31; + sp14.x = sp14.y = sp14.z = 0.0f; + if (lbl_1_bss_72C == 0) { + fn_1_C94C(&(*temp_r31->unk04)[temp_r31->unk08].unk00, &(*temp_r31->unk04)[temp_r31->unk08 + 1].unk00, &sp8); + sp20.x = lbl_1_bss_738.x + (sp8.x * var_f31 + (*temp_r31->unk04)[temp_r31->unk08].unk00.x); + sp20.y = lbl_1_bss_738.y + (sp8.y * var_f31 + (*temp_r31->unk04)[temp_r31->unk08].unk00.y); + } else { + sp20.x = lbl_1_bss_738.x + (*temp_r31->unk04)[temp_r31->unk08].unk00.x; + sp20.y = lbl_1_bss_738.y + (*temp_r31->unk04)[temp_r31->unk08].unk00.y; + } + BoardModelPosSetV(arg0->work[0], &sp20); + sp20.y += 5.0f; + BoardPlayerPosSetV(lbl_1_bss_798, &sp20); + BoardModelRotSetV(arg0->work[0], &sp14); + BoardPlayerRotSetV(lbl_1_bss_798, &sp14); + break; + case 6: + if (lbl_1_bss_708 == 0 && (HuAudFXStatusGet(lbl_1_bss_724) == 1 || HuAudFXStatusGet(lbl_1_bss_724) == 0)) { + BoardAudSeqPause(0, 0, 1000); + lbl_1_bss_708 = 1; + } + BoardModelVisibilitySet(lbl_1_bss_788, 1); + sp20.x = lbl_1_bss_738.x + lbl_1_data_658[temp_r31->unk40].x; + sp20.y = lbl_1_bss_738.y + lbl_1_data_658[temp_r31->unk40].y; + sp20.z = lbl_1_bss_738.z + lbl_1_data_658[temp_r31->unk40].z; + BoardModelPosSetV(lbl_1_bss_788, &sp20); + temp_r31->unk1C -= 0.05f; + if (temp_r31->unk1C <= 0.0f) { + temp_r31->unk1C = 0.0f; + } + break; + } +} + +static float fn_1_B018(Data690Block *arg0) { + float var_f31; + s32 i; + + var_f31 = 0.0f; + i = 0; + while (TRUE) { + if ((*arg0)[i].unk0C == 0.0f) { + break; + } + var_f31 += (*arg0)[i].unk0C; + i++; + } + return var_f31; +} + +static void fn_1_B088(omObjData *arg0) { + Bss720Data *temp_r31; + u16 sp8[] = { 20, 60, 120, 190 }; + s32 i; + + temp_r31 = arg0->data; + if (rand8() < sp8[GWPlayerCfg[lbl_1_bss_798].diff]) { + for (i = 0; i < 3; i++) { + if (lbl_1_data_67C[lbl_1_bss_734][i] == 20) { + temp_r31->unk26 = i; + } + } + } else { + temp_r31->unk26 = rand8() % 3; + } + temp_r31->unk24 = rand8() % 20 + 20; +} + +static void fn_1_B1CC(omObjData *arg0, u16 *arg1, u16 *arg2) { + Bss720Data *temp_r31; + + temp_r31 = arg0->data; + *arg1 = *arg2 = 0; + if (temp_r31->unk24 != 0) { + temp_r31->unk24--; + return; + } + if (temp_r31->unk28 >= 4 || (rand8() & 1)) { + if (temp_r31->unk26 == lbl_1_bss_730) { + *arg2 |= 0x100; + } else if (temp_r31->unk26 < lbl_1_bss_730) { + *arg1 |= 1; + } else { + *arg1 |= 2; + } + temp_r31->unk24 = rand8() % 10 + 10; + } else { + temp_r31->unk28++; + temp_r31->unk24 = rand8() % 10 + 20; + if (lbl_1_bss_730 == 0) { + *arg1 |= 2; + } else if (lbl_1_bss_730 == 2) { + *arg1 |= 1; + } else if (rand8() & 1) { + *arg1 |= 1; + } else { + *arg1 |= 2; + } + } +} + +static void fn_1_B3B8(omObjData *arg0) { + float temp_f31; + + temp_f31 = BoardModelMotionMaxTimeGet(lbl_1_bss_796); + if (BoardModelMotionTimeGet(lbl_1_bss_796) >= temp_f31) { + lbl_1_bss_744 = MGSeqCreate(1, lbl_1_bss_74C, 0x120, 0x40); + lbl_1_bss_720->func = fn_1_B478; + BoardMusStart(1, 0xF, 0x7F, 0); + lbl_1_bss_724 = HuAudFXPlay(0x408); + } +} + +static void fn_1_B478(omObjData *arg0) { + Bss720Data *temp_r31; + Vec sp18; + Vec spC; + float var_f28; + u16 var_r27; + u16 var_r29; + + temp_r31 = arg0->data; + if ((lbl_1_bss_748 -= 1) == 0) { + if ((lbl_1_bss_74C -= 1) >= 0) { + MGSeqParamSet(lbl_1_bss_744, 1, lbl_1_bss_74C); + } + lbl_1_bss_748 = 60; + } + if (GWPlayerCfg[lbl_1_bss_798].iscom == 1) { + fn_1_B1CC(arg0, &var_r29, &var_r27); + } else { + var_r29 = HuPadDStkRep[lbl_1_bss_79C]; + var_r27 = HuPadBtnDown[lbl_1_bss_79C]; + } + if ((var_r29 & 1) && lbl_1_bss_730 != 0) { + lbl_1_bss_714[lbl_1_bss_730]->work[1] = 1; + lbl_1_bss_714[lbl_1_bss_730]->work[2] = 2; + lbl_1_bss_730--; + lbl_1_bss_714[lbl_1_bss_730]->work[2] = 1; + } + if ((var_r29 & 2) && lbl_1_bss_730 != 2) { + lbl_1_bss_714[lbl_1_bss_730]->work[1] = 1; + lbl_1_bss_714[lbl_1_bss_730]->work[2] = 2; + lbl_1_bss_730++; + lbl_1_bss_714[lbl_1_bss_730]->work[2] = 1; + } + BoardModelPosGet(lbl_1_bss_78A[lbl_1_bss_730], &sp18); + BoardPlayerPosGet(lbl_1_bss_798, &spC); + fn_1_CB44(&sp18, 0.0f); + temp_r31->unk04 = sp18; + if (lbl_1_bss_74C < 0 || (var_r27 & 0x100)) { + MGSeqParamSet(lbl_1_bss_744, 2, -1); + lbl_1_bss_714[lbl_1_bss_730]->work[1] = 1; + BoardPlayerPosGet(lbl_1_bss_798, &spC); + var_f28 = sqrtf((temp_r31->unk04.x - spC.x) * (temp_r31->unk04.x - spC.x) + (temp_r31->unk04.z - spC.z) * (temp_r31->unk04.z - spC.z)); + fn_1_C94C(&spC, &temp_r31->unk04, &temp_r31->unk10); + temp_r31->unk10.y = 0.0f; + temp_r31->unk10.x *= var_f28 / 30.0f; + temp_r31->unk10.z *= var_f28 / 30.0f; + temp_r31->unk00 = 0; + temp_r31->unk20 = 0.0f; + arg0->func = fn_1_BAF8; + } +} + +static void fn_1_BAF8(omObjData *arg0) { + Bss720Data *temp_r31; + Vec sp14; + Vec sp8; + + temp_r31 = arg0->data; + if (lbl_1_bss_714[lbl_1_bss_730]->work[2] != 0) { + return; + } + BoardPlayerMotionStart(lbl_1_bss_798, 4, 0); + BoardPlayerPosGet(lbl_1_bss_798, &sp14); + sp14.x += temp_r31->unk10.x; + sp14.z += temp_r31->unk10.z; + sp14.y = lbl_1_bss_738.y + 80.0 * sin(6.0f * temp_r31->unk20 * M_PI / 180.0); + BoardModelPosGet(lbl_1_bss_714[lbl_1_bss_730]->work[0], &sp8); + if ((temp_r31->unk20 += 1.0f) == 30.0f) { + sp14.y = sp8.y + 5.0f; + BoardPlayerPosSetV(lbl_1_bss_798, &sp14); + BoardPlayerMotionShiftSet(lbl_1_bss_798, 2, 0.0f, 10.0f, 0); + arg0->func = fn_1_BCDC; + } + BoardPlayerPosSetV(lbl_1_bss_798, &sp14); +} + +static void fn_1_BCDC(omObjData *arg0) { + Bss720Data *temp_r29; + Bss714Data *temp_r31; + Vec sp14; + Vec sp8; + + temp_r29 = arg0->data; + BoardPlayerPosGet(lbl_1_bss_798, &sp14); + sp8 = sp14; + sp8.z += 100.0f; + if (fn_1_CB44(&sp8, 10.0f) == 1) { + BoardPlayerMotionShiftSet(lbl_1_bss_798, 1, 0.0f, 10.0f, 0); + temp_r29->unk1C = 90; + lbl_1_bss_710->work[0] = 1; + lbl_1_bss_714[lbl_1_bss_730]->work[2] = 3; + temp_r31 = lbl_1_bss_714[lbl_1_bss_730]->data; + Hu3DModelAttrReset(lbl_1_bss_750, 1); + Hu3DModelPosSet(lbl_1_bss_750, sp14.x, sp14.y, sp14.z); + temp_r31->unk20.x = 1.4f; + temp_r31->unk20.y = 1.4f; + temp_r31->unk20.z = 1.4f; + temp_r31->unk2C.x = 0.055999998f; + temp_r31->unk2C.y = 0.08088889f; + temp_r31->unk2C.z = 0.055999998f; + temp_r31->unk38 = 1.0f; + temp_r31->unk3C = 0.0f; + Hu3DModelScaleSet(lbl_1_bss_750, 1.4f, 1.4f, 1.4f); + arg0->func = fn_1_BF00; + } +} + +static void fn_1_BF00(omObjData *arg0) { + Bss720Data *temp_r31; + + temp_r31 = arg0->data; + if (temp_r31->unk1C == 0) { + lbl_1_bss_714[lbl_1_bss_730]->work[2] = 4; + arg0->func = fn_1_BF68; + } else { + temp_r31->unk1C--; + } +} + +static void fn_1_BF68(omObjData *arg0) { + Bss720Data *sp8; + + sp8 = arg0->data; + if (lbl_1_bss_714[lbl_1_bss_730]->work[2] == 6) { + lbl_1_bss_75C = HuPrcCreate(fn_1_C000, 0x2004, 0x1000, 0); + lbl_1_bss_75C->user_data = arg0; + arg0->func = NULL; + } +} + +static void fn_1_C000(void) { + char sp8[16]; // array size may range between 1 and 16 (inclusive) + omObjData *temp_r30; + Bss720Data *temp_r31; + + BoardAudSeqFadeOut(1, 100); + sprintf(&sp8, "%d", lbl_1_bss_728); + BoardWinCreate(2, MAKE_MESSID(11, 6), 0); + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp8), 0); + BoardWinWait(); + BoardWinKill(); + temp_r30 = HuPrcCurrentGet()->user_data; + temp_r31 = temp_r30->data; + temp_r31->unk10.x = 0.0f; + temp_r31->unk10.y = 10.0f; + temp_r31->unk10.z = 3.0f; + temp_r31->unk20 = 0.0f; + BoardPlayerMotionShiftSet(lbl_1_bss_798, 4, 0.0f, 10.0f, 0); + temp_r30->func = fn_1_C0FC; + HuPrcKill(NULL); + while (TRUE) { + HuPrcVSleep(); + } +} + +static void fn_1_C0FC(omObjData *arg0) { + Bss720Data *temp_r31; + Vec sp8; + + temp_r31 = arg0->data; + BoardPlayerPosGet(lbl_1_bss_798, &sp8); + sp8.x += temp_r31->unk10.x; + sp8.y += temp_r31->unk10.y - 0.029166667f * temp_r31->unk20 * temp_r31->unk20; + sp8.z += temp_r31->unk10.z; + temp_r31->unk20 += 1.0f; + if (sp8.y <= lbl_1_bss_738.y) { + BoardPlayerMotionShiftSet(lbl_1_bss_798, 1, 0.0f, 10.0f, 0x40000001); + sp8.y = lbl_1_bss_738.y; + lbl_1_bss_75C = HuPrcCreate(fn_1_C25C, 0x2004, 0x1000, 0); + lbl_1_bss_75C->user_data = arg0; + arg0->func = NULL; + } + BoardPlayerPosSetV(lbl_1_bss_798, &sp8); +} + +static void fn_1_C25C(void) { + Vec sp11C[20]; + Vec sp2C[20]; + Vec sp20; + Vec sp14; + Vec sp8; + float var_f31; + s16 var_r30; + s16 i; + + var_r30 = 0; + BoardPlayerPosGet(lbl_1_bss_798, &sp20); + sp14.x = sp14.y = sp14.z = 1.0f; + for (i = 0; i < lbl_1_bss_728; i++) { + BoardModelVisibilitySet(lbl_1_bss_760[i], 1); + sp11C[i] = sp20; + sp11C[i].y += 600.0f + i * 120; + sp11C[i].x += -25.0f + 50.0f * (frand() & 0xFF) * 0.003921569f; + sp11C[i].z += -25.0f + 50.0f * (frand() & 0xFF) * 0.003921569f; + sp2C[i].x = sp2C[i].z = 0.0f; + sp2C[i].y = 360.0f * (frand() & 0xFF) * 0.003921569f; + BoardModelPosSetV(lbl_1_bss_760[i], &sp11C[i]); + BoardModelScaleSetV(lbl_1_bss_760[i], &sp14); + BoardModelRotSetV(lbl_1_bss_760[i], &sp2C[i]); + } + var_f31 = -1.0f; + while (TRUE) { + for (i = 0; i < lbl_1_bss_728; i++) { + if (i >= var_r30) { + sp11C[i].y += var_f31; + BoardModelPosSetV(lbl_1_bss_760[i], &sp11C[i]); + sp2C[i].y += 45.0f; + if (sp2C[i].y >= 360.0f) { + sp2C[i].y -= 360.0f; + } + BoardModelRotSetV(lbl_1_bss_760[i], &sp2C[i]); + if (sp11C[i].y <= sp20.y + 80.0f) { + sp8 = sp11C[i]; + CharModelCoinEffectCreate(1, &sp8); + BoardModelVisibilitySet(lbl_1_bss_760[i], 0); + var_r30++; + BoardPlayerCoinsAdd(lbl_1_bss_798, 1); + HuAudFXPlay(7); + omVibrate(lbl_1_bss_798, 0xC, 6, 6); + } + } + } + var_f31 *= 1.05f; + if (var_f31 < -20.0f) { + var_f31 = -20.0f; + } + if (var_r30 == lbl_1_bss_728) { + BoardPlayerMotionShiftSet(lbl_1_bss_798, 7, 0.0f, 10.0f, 0); + break; + } + HuPrcVSleep(); + } + while (!BoardPlayerMotionEndCheck(lbl_1_bss_798)) { + HuPrcVSleep(); + } + lbl_1_bss_75C = HuPrcCreate(fn_1_C844, 0x2004, 0x1000, 0); + lbl_1_bss_75C->user_data = HuPrcCurrentGet()->user_data; + HuPrcKill(NULL); + while (TRUE) { + HuPrcVSleep(); + } +} + +static void fn_1_C844(void) { + omObjData *var_r31; + + BoardWinCreate(2, MAKE_MESSID(11, 7), 0); + BoardWinWait(); + BoardWinKill(); + var_r31 = HuPrcCurrentGet()->user_data; + var_r31->func = fn_1_C894; + HuPrcKill(NULL); + while (TRUE) { + HuPrcVSleep(); + } +} + +static void fn_1_C894(omObjData *arg0) { + float temp_f31; + + lbl_1_bss_72A = 1; + BoardMGExit(); + temp_f31 = BoardModelMotionTimeGet(lbl_1_bss_796); + lbl_1_bss_754 = temp_f31; + BoardModelMotionStart(lbl_1_bss_796, 0, 0); + BoardModelMotionTimeSet(lbl_1_bss_796, temp_f31); + BoardModelMotionSpeedSet(lbl_1_bss_796, -1.0f); + omDelObjEx(HuPrcCurrentGet(), arg0); +} + +static void fn_1_C94C(Vec *arg0, Vec *arg1, Vec *arg2) { + PSVECSubtract(arg1, arg0, arg2); + PSVECNormalize(arg2, arg2); +} + +static float fn_1_C998(Vec *arg0) { + float temp_f31; + + if (arg0->x || arg0->z) { + if (arg0->x == 0.0f) { + if (arg0->z > 0.0f) { + return 0.0f; + } else { + return 180.0f; + } + } + if (arg0->z == 0.0f) { + if (arg0->x > 0.0f) { + return 90.0f; + } else { + return 270.0f; + } + } + temp_f31 = 180.0 * (atan2(arg0->z, arg0->x) / M_PI); + if (arg0->z < 0.0f) { + temp_f31 = 90.0f - temp_f31; + } else { + temp_f31 = 90.0f - temp_f31; + if (temp_f31 < 0.0f) { + temp_f31 += 360.0f; + } + } + return temp_f31; + } + return -1.0f; +} + +static u32 fn_1_CB44(Vec *arg0, float arg1) { + Vec sp24; + Vec sp18; + Vec spC; + float var_f28; + float var_f30; + float var_f31; + + BoardPlayerPosGet(lbl_1_bss_798, &sp18); + PSVECSubtract(arg0, &sp18, &sp24); + PSVECNormalize(&sp24, &sp24); + var_f28 = fn_1_C998(&sp24); + BoardPlayerRotGet(lbl_1_bss_798, &spC); + var_f31 = spC.y; + var_f30 = var_f28 - var_f31; + if (arg1 == 0.0f) { + var_f31 = var_f28; + } else if (fabs(var_f30) > arg1) { + if (var_f30 < 0.0f) { + var_f30 += 360.0f; + } + if (var_f30 < 180.0f) { + if (var_f30 > arg1) { + var_f31 += arg1; + } else { + var_f31 += var_f30; + } + } else if (360.0f - var_f30 > arg1) { + var_f31 -= arg1; + } else { + var_f31 -= 360.0f - var_f30; + } + } else { + var_f31 = var_f28; + } + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + BoardPlayerRotYSet(lbl_1_bss_798, var_f31); + if (var_f31 == var_f28) { + return 1; + } else { + return 0; + } +} + +static void fn_1_CEC4(void) { + lbl_1_bss_70C = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_W01, 20)); + lbl_1_bss_710 = omAddObjEx(boardObjMan, 0x101, 1, 0, -1, fn_1_D07C); + lbl_1_bss_710->data = HuMemDirectMallocNum(HEAP_SYSTEM, 12, MEMORY_DEFAULT_NUM); + lbl_1_bss_710->model[0] = Hu3DParticleCreate(lbl_1_bss_70C, 0x320); + Hu3DParticleColSet(lbl_1_bss_710->model[0], 0xFF, 0, 0); + Hu3DParticleScaleSet(lbl_1_bss_710->model[0], 5.0f); + Hu3DParticleHookSet(lbl_1_bss_710->model[0], fn_1_D114); + Hu3DParticleBlendModeSet(lbl_1_bss_710->model[0], 1); + Hu3DModelAttrSet(lbl_1_bss_710->model[0], 1); + lbl_1_bss_710->work[0] = 0; +} + +static void fn_1_D034(void) { + Hu3DModelKill(lbl_1_bss_710->model[0]); + omDelObjEx(HuPrcCurrentGet(), lbl_1_bss_710); +} + +static void fn_1_D07C(omObjData *arg0) { + void *sp8; + + sp8 = arg0->data; + switch (arg0->work[0]) { + case 0: + break; + case 1: + arg0->work[0] = 2; + Hu3DModelAttrReset(arg0->model[0], 1); + Hu3DModelScaleSet(arg0->model[0], 10.0f, 10.0f, 10.0f); + break; + case 2: + break; + } +} + +static void fn_1_D114(ModelData *model, ParticleData *particle, Mtx matrix) { + Bss714Data *temp_r28; + HsfanimStruct01 *var_r31; + Vec sp8; + float temp_f31; + s32 i; + s32 j; + s32 temp_r26; + + BoardModelPosGet(lbl_1_bss_714[lbl_1_bss_730]->work[0], &sp8); + temp_r28 = lbl_1_bss_714[lbl_1_bss_730]->data; + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + var_r31->unk2C = 0.0f; + } + particle->unk_1C = (void*) 1; + } + if (temp_r28->unk1C > 0.0f) { + for (i = 0; i < 80.0f * temp_r28->unk1C; i++) { + var_r31 = particle->unk_48; + for (j = 0; j < particle->unk_30; j++, var_r31++) { + if (var_r31->unk2C == 0.0f) { + break; + } + } + if (j != particle->unk_30) { + temp_r26 = frand() & 0xFFFF; + temp_f31 = (-15.0f + 30.0f * (temp_r26 / 65536.0f)) * temp_r28->unk1C; + var_r31->unk08.x = sp8.x + temp_f31; + var_r31->unk08.y = sp8.y; + var_r31->unk08.z = sp8.z; + var_r31->unk14.x = 255.0f; + var_r31->unk14.y = 155.0f; + var_r31->unk14.z = 55.0f; + var_r31->unk40.a = 0xFF; + var_r31->unk20 = 0.0f; + var_r31->unk24 = temp_r28->unk1C * (-3.0 + (2.0 * (fabs(temp_f31) / 15.0))); + var_r31->unk28 = 0.0f; + var_r31->unk2C = 7.3f; + } + } + } + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + if (var_r31->unk2C == 0.0f) { + continue; + } + var_r31->unk34.x = var_r31->unk08.x; + var_r31->unk34.y = var_r31->unk08.y; + var_r31->unk34.z = var_r31->unk08.z; + var_r31->unk08.x += var_r31->unk20; + var_r31->unk08.y += var_r31->unk24; + var_r31->unk08.z += var_r31->unk28; + if (var_r31->unk08.y <= lbl_1_bss_738.y) { + var_r31->unk08.y = lbl_1_bss_738.y; + var_r31->unk24 = -var_r31->unk24 - 0.3f; + if (var_r31->unk24 < 0.0f) { + var_r31->unk24 = 0.0f; + } + temp_r26 = 80.0f * (2.0f * ((sp8.x - var_r31->unk08.x) / 15.0f) - rand8() / 255.0f); + var_r31->unk20 = 8.0 * sin(temp_r26 * M_PI / 180.0); + var_r31->unk28 = 8.0 * cos(temp_r26 * M_PI / 180.0); + } + var_r31->unk24 -= 0.35f; + if ((var_r31->unk14.x -= 25.5f) < 0.0f) { + var_r31->unk14.x = 0.0f; + } + if ((var_r31->unk14.y -= 36.42857f) < 0.0f) { + var_r31->unk14.y = 0.0f; + } + if ((var_r31->unk14.z -= 63.75f) < 0.0f) { + var_r31->unk14.z = 0.0f; + } + var_r31->unk40.r = var_r31->unk14.x; + var_r31->unk40.g = var_r31->unk14.y; + var_r31->unk40.b = var_r31->unk14.z; + if (var_r31->unk40.r == 0 && var_r31->unk40.g == 0 && var_r31->unk40.b == 0) { + var_r31->unk2C = 0.0f; + } + } +} diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index e2958ca9..4a958585 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -9,6 +9,7 @@ #include "game/board/space.h" #include "game/object.h" #include "game/objsub.h" +#include "game/sprite.h" #include "game/board/player.h" #include "math.h" #include "game/hsfman.h" @@ -908,7 +909,7 @@ void fn_1_BBF8(void) { void fn_1_BC7C(s16 arg0) { ParticleData* particle; - lbl_1_bss_190 = HuSprAnimRead(HuDataSelHeapReadNum(0x120000, 0x10000000, 2)); + lbl_1_bss_190 = HuSprAnimReadFile(0x120000); HuSprAnimLock(lbl_1_bss_190); lbl_1_data_4E4 = Hu3DParticleCreate(lbl_1_bss_190, 100); Hu3DParticleHookSet(lbl_1_data_4E4, fn_1_BE30); diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index 595c8a8a..4565ab68 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -216,26 +216,26 @@ s32 fn_1_1650(s32 arg0) { return 1; } -s32 lbl_1_data_290[] = { //TODO: make sure this actually uses DATA_MAKE_NUM macro - DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x62), - DATA_MAKE_NUM(DATADIR_LUIGIMOT, 0x62), - DATA_MAKE_NUM(DATADIR_PEACHMOT, 0x62), - DATA_MAKE_NUM(DATADIR_YOSHIMOT, 0x62), - DATA_MAKE_NUM(DATADIR_WARIOMOT, 0x62), - DATA_MAKE_NUM(DATADIR_DONKEYMOT, 0x62), - DATA_MAKE_NUM(DATADIR_DAISYMOT, 0x62), - DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 0x62), +s32 lbl_1_data_290[] = { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 98), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 98), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 98), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 98), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 98), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 98), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 98), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 98) }; -s32 lbl_1_data_2B0[] = { //TODO: make sure this actually uses DATA_MAKE_NUM macro - DATA_MAKE_NUM(DATADIR_MARIOMOT, 0x33), - DATA_MAKE_NUM(DATADIR_LUIGIMOT, 0x33), - DATA_MAKE_NUM(DATADIR_PEACHMOT, 0x33), - DATA_MAKE_NUM(DATADIR_YOSHIMOT, 0x33), - DATA_MAKE_NUM(DATADIR_WARIOMOT, 0x33), - DATA_MAKE_NUM(DATADIR_DONKEYMOT, 0x33), - DATA_MAKE_NUM(DATADIR_DAISYMOT, 0x33), - DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 0x33), +s32 lbl_1_data_2B0[] = { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 51), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 51), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 51), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 51), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 51), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 51), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 51), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 51) }; s32 lbl_1_data_2D0[] = { diff --git a/src/game/board/item.c b/src/game/board/item.c index 914f74de..df42dc9a 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -1,6 +1,7 @@ #include "game/board/item.h" #include "game/audio.h" #include "game/chrman.h" +#include "game/data.h" #include "game/gamework.h" #include "game/gamework_data.h" #include "game/hsfanim.h" @@ -8,6 +9,7 @@ #include "game/objsub.h" #include "game/pad.h" #include "game/process.h" +#include "game/sprite.h" #include "game/window.h" #include "game/wipe.h" #include "game/board/audio.h" @@ -51,8 +53,6 @@ typedef struct { } UnkGenieCameraStruct; // Size 0x1C extern u32 frandmod(u32); -extern void BoardBowserSuitInit(s32); -extern s16 BoardBowserSuitPlayerModelGet(void); static void ItemProcess(void); static void RestoreProcess(void); @@ -111,7 +111,10 @@ static AnimData *genieParticleAnim; static s16 geniePlayerMot[3]; static Process *itemProc; -s32 lbl_801D37A0[2] = { 0x00070075, -1 }; +s32 lbl_801D37A0[2] = { + DATA_MAKE_NUM(DATADIR_BOARD, 117), + -1 +}; static void (*itemFuncTbl[])(void) = { ExecItemMini, @@ -148,20 +151,20 @@ static void (*itemRestoreFuncTbl[])(void) = { }; static s32 itemMdlTbl[] = { - 0x0007006D, - 0x0007006E, - 0x0007006F, - 0x00070070, - 0x00070071, - 0x00070072, - 0x00070073, - 0x00070074, - 0x00070076, - 0x00070077, - 0x00070078, - 0x00070079, - 0x0007007A, - 0x0007007B + DATA_MAKE_NUM(DATADIR_BOARD, 109), + DATA_MAKE_NUM(DATADIR_BOARD, 110), + DATA_MAKE_NUM(DATADIR_BOARD, 111), + DATA_MAKE_NUM(DATADIR_BOARD, 112), + DATA_MAKE_NUM(DATADIR_BOARD, 113), + DATA_MAKE_NUM(DATADIR_BOARD, 114), + DATA_MAKE_NUM(DATADIR_BOARD, 115), + DATA_MAKE_NUM(DATADIR_BOARD, 116), + DATA_MAKE_NUM(DATADIR_BOARD, 118), + DATA_MAKE_NUM(DATADIR_BOARD, 119), + DATA_MAKE_NUM(DATADIR_BOARD, 120), + DATA_MAKE_NUM(DATADIR_BOARD, 121), + DATA_MAKE_NUM(DATADIR_BOARD, 122), + DATA_MAKE_NUM(DATADIR_BOARD, 123) }; static s32 forceMoveSfxTbl[] = { @@ -169,14 +172,14 @@ static s32 forceMoveSfxTbl[] = { }; static s32 callMotTbl[] = { - 0x005F0052, - 0x001A0052, - 0x006D0052, - 0x008A0052, - 0x00850052, - 0x00110052, - 0x000D0052, - 0x00810052 + DATA_MAKE_NUM(DATADIR_MARIOMOT, 82), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 82), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 82), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 82), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 82), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 82), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 82), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 82) }; static char *callHookTbl[] = { @@ -191,32 +194,32 @@ static char *callHookTbl[] = { }; static s32 callAttackMotTbl[] = { - 0x0075001F, - 0x00760005, - 0x0077001D, - 0x00780009, - 0x00790007, - 0x007A0013 + DATA_MAKE_NUM(DATADIR_W01, 31), + DATA_MAKE_NUM(DATADIR_W02, 5), + DATA_MAKE_NUM(DATADIR_W03, 29), + DATA_MAKE_NUM(DATADIR_W04, 9), + DATA_MAKE_NUM(DATADIR_W05, 7), + DATA_MAKE_NUM(DATADIR_W06, 19) }; static s32 callAttackMotTbl2[] = { - 0x00750020, - 0x00760006, - 0x0077001E, - 0x0078000A, - 0x00790008, - 0x007A0014 + DATA_MAKE_NUM(DATADIR_W01, 32), + DATA_MAKE_NUM(DATADIR_W02, 6), + DATA_MAKE_NUM(DATADIR_W03, 30), + DATA_MAKE_NUM(DATADIR_W04, 10), + DATA_MAKE_NUM(DATADIR_W05, 8), + DATA_MAKE_NUM(DATADIR_W06, 20) }; static s32 suitMotTbl[][2] = { - { 0x00040001, 0x00040002 }, - { 0x00040004, 0x00040005 }, - { 0x00040007, 0x00040008 }, - { 0x0004000A, 0x0004000B }, - { 0x0004000D, 0x0004000E }, - { 0x00040010, 0x00040011 }, - { 0x00040013, 0x00040014 }, - { 0x00040016, 0x00040017 } + { DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 1), DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 2) }, + { DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 4), DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 5) }, + { DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 7), DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 8) }, + { DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 10), DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 11) }, + { DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 13), DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 14) }, + { DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 16), DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 17) }, + { DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 19), DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 20) }, + { DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 22), DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 23) } }; void BoardItemStart(s32 arg0, s32 arg1) { @@ -490,7 +493,7 @@ static Process *ItemShowProc(UnkItemShowProcStruct *arg0, Vec *arg1) { sp20.z += 50.0 * cos(sp14.y * M_PI / 180.0); sp20.x += 50.0 * sin(sp14.y * M_PI / 180.0); CharModelEffectCreate(1, &sp20); - HuPrcSleep(0xA); + HuPrcSleep(10); } if (suitMdl >= 0) { BoardModelVisibilitySet(suitMdl, 1); @@ -527,7 +530,7 @@ static s16 ItemGetTarget(void) { var_r28++; } } - HuWinMesMaxSizeGet(1, sp8, 0x12000E); + HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(18, 14)); temp_r29 = HuWinCreate(-10000.0f, -10000.0f, sp8[0], sp8[1], 0); if (!GWPlayer[currItemRestore].com) { winData[temp_r29].active_pad = (1 << GWPlayer[currItemRestore].port); @@ -535,7 +538,7 @@ static s16 ItemGetTarget(void) { for (var_r31 = 0; var_r31 < var_r27; var_r31++) { HuWinInsertMesSet(temp_r29, GWPlayerCfg[sp20[var_r31]].character, var_r31); } - HuWinMesSet(temp_r29, 0x12000E); + HuWinMesSet(temp_r29, MAKE_MESSID(18, 14)); if (GWPlayer[currItemRestore].com) { var_r26 = 0xF; } else { @@ -623,7 +626,7 @@ static void ExecItemMini(void) { omVibrate(currItemRestore, 90, 6, 6); HuAudFXPlay(0x313); ItemSizeSet(1); - HuPrcSleep(0x3C); + HuPrcSleep(60); HuPrcKill(NULL); while (1) { HuPrcVSleep(); @@ -640,7 +643,7 @@ static void ExecItemMega(void) { omVibrate(currItemRestore, 90, 4, 2); HuAudFXPlay(0x311); ItemSizeSet(2); - HuPrcSleep(0x3C); + HuPrcSleep(60); HuPrcKill(NULL); while (1) { HuPrcVSleep(); @@ -657,7 +660,7 @@ static void ExecItemMiniSuper(void) { omVibrate(currItemRestore, 90, 4, 2); HuAudFXPlay(0x313); ItemSizeSet(1); - HuPrcSleep(0x3C); + HuPrcSleep(60); HuPrcKill(NULL); while (1) { HuPrcVSleep(); @@ -674,7 +677,7 @@ static void ExecItemMegaSuper(void) { omVibrate(currItemRestore, 90, 0xC, 0); HuAudFXPlay(0x311); ItemSizeSet(2); - HuPrcSleep(0x3C); + HuPrcSleep(60); HuPrcKill(NULL); while (1) { HuPrcVSleep(); @@ -707,13 +710,13 @@ static void ExecItemHammer(void) { BoardModelScaleSetV(suitMdl, &sp60); sp6C.x = sp6C.y = sp6C.z = 0.0f; BoardUiInlineFunc01(&sp6C); - HuWinMesMaxSizeGet(1, sp10, 0x120011); + HuWinMesMaxSizeGet(1, sp10, MAKE_MESSID(18, 17)); temp_r28 = HuWinCreate(-10000.0f, 320.0f, sp10[0], sp10[1], 0); - HuWinMesSet(temp_r28, 0x120011); + HuWinMesSet(temp_r28, MAKE_MESSID(18, 17)); HuWinBGTPLvlSet(temp_r28, 0.0f); HuWinMesSpeedSet(temp_r28, 0); if (GWPlayer[currItemRestore].com) { - var_r26 = frandmod(0x78) + 0x1E; + var_r26 = frandmod(120) + 30; } for (i = 1; i <= 0x12C; i++) { if (i % 10 == 0) { @@ -740,7 +743,7 @@ static void ExecItemHammer(void) { BoardModelAttrSet(suitMdl, 0x40000002); HuAudFXPlay(0x316); HuWinKill(temp_r28); - omVibrate(temp_r27, 0xC, 6, 6); + omVibrate(temp_r27, 12, 6, 6); if (var_r30 != 0) { BoardPlayerAutoSizeSet(temp_r27, 2); } else { @@ -806,11 +809,11 @@ static void ExecItemPipe(void) { BoardModelPosSetV(sp30[var_r31], &spE4[var_r31]); } if (sp58[0] == sp58[1]) { - HuWinMesMaxSizeGet(1, sp48, 0x120012); + HuWinMesMaxSizeGet(1, sp48, MAKE_MESSID(18, 18)); temp_r28 = HuWinCreate(-10000.0f, -10000.0f, sp48[0], sp48[1], 0); - HuWinMesSet(temp_r28, 0x120012); + HuWinMesSet(temp_r28, MAKE_MESSID(18, 18)); HuWinMesWait(temp_r28); - HuPrcSleep(0xB4); + HuPrcSleep(180); HuWinKill(temp_r28); } else { BoardUiInlineFunc03(sp2C[1]); @@ -819,7 +822,7 @@ static void ExecItemPipe(void) { BoardModelVisibilitySet(sp30[var_r31], 1); BoardPlayerPosGet(sp2C[var_r31], &spCC[var_r31]); } - for (var_r31 = 0; var_r31 < 0x3C; var_r31++) { + for (var_r31 = 0; var_r31 < 60; var_r31++) { sp9C.y += 0.033333335f; for (var_r30 = 0; var_r30 < 2; var_r30++) { BoardModelScaleSetV(sp30[var_r30], &sp9C); @@ -832,7 +835,7 @@ static void ExecItemPipe(void) { for (var_r31 = 0; var_r31 < 2; var_r31++) { BoardModelScaleSetV(sp30[var_r31], &sp9C); } - HuPrcSleep(0xA); + HuPrcSleep(10); HuAudFXPlay(0x35A); omVibrate(sp2C[0], 0xC, 4, 2); var_f30 = 5.0f; @@ -859,7 +862,7 @@ static void ExecItemPipe(void) { HuPrcVSleep(); } WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 0x1E); + WipeCreate(2, 0, 30); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -885,7 +888,7 @@ static void ExecItemPipe(void) { BoardPlayerVoiceEnableSet(sp2C[var_r31], 4, 0); BoardModelVisibilitySet(BoardPlayerModelGet(sp2C[var_r31]), 0); } - WipeCreate(1, 0, 0x1E); + WipeCreate(1, 0, 30); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -944,7 +947,7 @@ static void ExecItemPipe(void) { BoardModelVoiceEnableSet(BoardPlayerModelGet(sp2C[1]), 6, 0); CharModelLayerSetAll(2); BoardPlayerIdleSet(sp2C[0]); - for (var_r31 = 0; var_r31 < 0x2D; var_r31++) { + for (var_r31 = 0; var_r31 < 45; var_r31++) { sp9C.y -= 0.044444446f; for (var_r30 = 0; var_r30 < 2; var_r30++) { BoardModelScaleSetV(sp30[var_r30], &sp9C); @@ -955,7 +958,7 @@ static void ExecItemPipe(void) { BoardModelVisibilitySet(sp30[var_r31], 0); } BoardUiInlineFunc03(sp2C[0]); - BoardWinCreate(2, 0x12001D, -1); + BoardWinCreate(2, MAKE_MESSID(18, 29), -1); BoardWinInsertMesSet(GWPlayerCfg[sp2C[0]].character, 0); BoardWinInsertMesSet(GWPlayerCfg[sp2C[1]].character, 1); BoardWinWait(); @@ -1105,7 +1108,7 @@ static void ExecItemSwap(void) { PSVECScale(&sp6C, &sp6C, 0.033333335f); PSVECSubtract(&sp78, &sp180[var_r31], &sp60); PSVECScale(&sp60, &sp60, 0.033333335f); - for (var_r30 = 0; var_r30 < 0x1E; var_r30++) { + for (var_r30 = 0; var_r30 < 30; var_r30++) { BoardModelPosSetV(sp54[var_r31], &sp1A4[var_r31]); BoardModelPosSetV(sp54[var_r31 + 3], &sp180[var_r31]); PSVECAdd(&sp1A4[var_r31], &sp6C, &sp1A4[var_r31]); @@ -1117,9 +1120,9 @@ static void ExecItemSwap(void) { BoardModelPosSetV(sp54[var_r31], &sp1A4[var_r31]); BoardModelPosSetV(sp54[var_r31 + 3], &sp180[var_r31]); } - omVibrate(currItemRestore, 0xB4, 6, 6); - omVibrate(temp_r24, 0xB4, 6, 6); - for (var_r31 = 0; var_r31 < 0x3C; var_r31++) { + omVibrate(currItemRestore, 180, 6, 6); + omVibrate(temp_r24, 180, 6, 6); + for (var_r31 = 0; var_r31 < 60; var_r31++) { for (var_r30 = 0; var_r30 < var_r28 / 2; var_r30++) { sp6C = sp1A4[var_r30]; sp6C.x += 3.0 * sin((frand() % 360) * M_PI / 180.0); @@ -1154,7 +1157,7 @@ static void ExecItemSwap(void) { PSVECScale(&sp6C, &sp6C, 0.033333335f); PSVECSubtract(&spB4, &sp180[var_r31], &sp60); PSVECScale(&sp60, &sp60, 0.033333335f); - for (var_r30 = 0; var_r30 < 0x1E; var_r30++) { + for (var_r30 = 0; var_r30 < 30; var_r30++) { BoardModelPosSetV(sp54[var_r31], &sp1A4[var_r31]); BoardModelPosSetV(sp54[var_r31 + 3], &sp180[var_r31]); PSVECAdd(&sp1A4[var_r31], &sp6C, &sp1A4[var_r31]); @@ -1211,7 +1214,7 @@ static void ExecItemSpark(void) { s32 i; (void)106.0; - temp_r30 = BoardModelCreate(0x70067, NULL, 0); + temp_r30 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 103), NULL, 0); BoardModelLayerSet(temp_r30, 3); BoardModelVisibilitySet(temp_r30, 0); HuAudFXPlay(0x350); @@ -1271,7 +1274,7 @@ static void ExecItemSpark(void) { HuPrcVSleep(); } for (i = 0; i < 4; i++) { - omVibrate(i, 0xC, 4, 2); + omVibrate(i, 12, 4, 2); } HuAudFXPlay(0x31C); BoardModelVisibilitySet(temp_r30, 1); @@ -1280,7 +1283,7 @@ static void ExecItemSpark(void) { HuPrcVSleep(); } var_f31 = 255.0f; - for (i = 0; i < 0x2D; i++) { + for (i = 0; i < 45; i++) { var_f31 -= 5.6666665f; BoardModelAlphaSet(suitMdl, var_f31); HuPrcVSleep(); @@ -1300,8 +1303,8 @@ static void ExecItemLight(void) { HuAudFXPlay(0x350); ItemShowProc(NULL, NULL); - BoardWinCreateChoice(2, 0x12000F, -1, 0); - BoardWinInsertMesSet(0x80008, 3); + BoardWinCreateChoice(2, DATA_MAKE_NUM(DATADIR_EFFECT, 15), -1, 0); + BoardWinInsertMesSet(MAKE_MESSID(8, 8), 3); if (GWPlayer[currItemRestore].com) { BoardComKeySetRight(); } @@ -1362,9 +1365,9 @@ static void ExecItemWhistle(void) { var_f31 = 0.003921569f * (frand() & 0xFF) * 360.0f; spA8.x = spA8.y = spA8.z = 0.5f; for (var_r31 = 0; var_r31 < 4; var_r31++) { - sp20[var_r31] = BoardModelCreate(0x20027, NULL, 1); + sp20[var_r31] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 39), NULL, 1); BoardModelLayerSet(sp20[var_r31], 2); - temp_r17 = BoardModelMotionCreate(sp20[var_r31], 0x20028); + temp_r17 = BoardModelMotionCreate(sp20[var_r31], DATA_MAKE_NUM(DATADIR_BGUEST, 40)); BoardModelMotionStart(sp20[var_r31], temp_r17, 0x40000001); sp28[var_r31] = 120.0f; spF0[var_r31].x = spB4.x + 120.0 * sin(var_f31 * M_PI / 180.0); @@ -1397,7 +1400,7 @@ static void ExecItemWhistle(void) { PSVECScale(&sp78, &sp78, 0.03448276f); BoardPlayerMotionStart(currItemRestore, temp_r23, 0); BoardPlayerMotionTimeSet(currItemRestore, 1.0f); - for (var_r31 = 0; var_r31 < 0x1D; var_r31++) { + for (var_r31 = 0; var_r31 < 29; var_r31++) { sp90.y += sp78.y; sp90.z += sp78.z; BoardModelPosSetV(suitMdl, &sp90); @@ -1418,7 +1421,7 @@ static void ExecItemWhistle(void) { HuPrcVSleep(); } WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 0x3C); + WipeCreate(2, 0, 60); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -1433,7 +1436,7 @@ static void ExecItemWhistle(void) { for (var_r31 = 0; var_r31 < 4; var_r31++) { BoardModelVisibilitySet(sp20[var_r31], 1); } - WipeCreate(1, 0, 0x3C); + WipeCreate(1, 0, 60); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -1459,7 +1462,7 @@ static void ExecItemWhistle(void) { if (var_r27 == 0) { var_r27 = 1; for (var_r29 = 0; var_r29 < 4; var_r29++) { - omVibrate(var_r29, 0xC, 6, 6); + omVibrate(var_r29, 12, 6, 6); } HuAudFXPlay(0x321); } @@ -1478,7 +1481,7 @@ static void ExecItemWhistle(void) { } BoardModelMotionShiftSet(temp_r28, temp_r20, 0.0f, 5.0f, 0x40000001); HuAudFXPlay(0x322); - for (var_r29 = 0; var_r29 < 0xB4; var_r29++) { + for (var_r29 = 0; var_r29 < 180; var_r29++) { for (var_r31 = 0; var_r31 < 4; var_r31++) { sp38[var_r31] += 4.0f; if (sp38[var_r31] >= 360.0f) { @@ -1495,14 +1498,14 @@ static void ExecItemWhistle(void) { } HuPrcVSleep(); } - for (var_r29 = 0; var_r29 < 0x14; var_r29++) { + for (var_r29 = 0; var_r29 < 20; var_r29++) { for (var_r31 = 0; var_r31 < 4; var_r31++) { spC0[var_r31].y += 4.5f; BoardModelRotSetV(sp20[var_r31], &spC0[var_r31]); } HuPrcVSleep(); } - HuPrcSleep(0x1E); + HuPrcSleep(30); var_f30 = 35.0f; var_r26 = 0; for (var_r31 = 0; var_r31 < 4; var_r31++) { @@ -1536,8 +1539,8 @@ static void ExecItemWhistle(void) { BoardModelPosSetV(temp_r28, &sp9C); var_f30 *= 0.945f; if (sp9C.y >= 500.0f && var_r26 == 0) { - WipeCreate(2, 0, 0x2D); - BoardAudSeqFadeOut(0, 0x3E8); + WipeCreate(2, 0, 45); + BoardAudSeqFadeOut(0, 1000); var_r26 = 1; } } @@ -1572,15 +1575,15 @@ static void ExecItemBowser(void) { BoardBowserSuitInit(currItemRestore); suitMdl = BoardBowserSuitModelGet(); temp_r31 = BoardBowserSuitPlayerModelGet(); - suitMot[0] = BoardModelMotionCreate(suitMdl, 0x4001C); - suitMot[1] = BoardModelMotionCreate(suitMdl, 0x4001D); + suitMot[0] = BoardModelMotionCreate(suitMdl, DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 28)); + suitMot[1] = BoardModelMotionCreate(suitMdl, DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 29)); suitCommonMot[0] = BoardModelMotionCreate(temp_r31, suitMotTbl[GWPlayer[currItemRestore].character][0]); suitCommonMot[1] = BoardModelMotionCreate(temp_r31, suitMotTbl[GWPlayer[currItemRestore].character][1]); BoardModelVisibilitySet(temp_r31, 0); HuAudFXPlay(0x350); sp20.x = sp20.y = sp20.z = 0.3f; ItemShowProc(NULL, &sp20); - for (i = 0; i < 0x1E; i++) { + for (i = 0; i < 30; i++) { sp20.x += 0.023333333f; sp20.y += 0.023333333f; sp20.z += 0.023333333f; @@ -1624,8 +1627,8 @@ static void ExecItemBowser(void) { BoardModelMotionShiftSet(temp_r31, suitCommonMot[0], 0.0f, 5.0f, 0); HuPrcSleep(0x28); HuAudPlayerVoicePlay(currItemRestore, 0x129); - omVibrate(currItemRestore, 0xC, 4, 2); - HuPrcSleep(0x3C); + omVibrate(currItemRestore, 12, 4, 2); + HuPrcSleep(60); BoardModelMotionShiftSet(suitMdl, 0, 0.0f, 5.0f, 0x40000001); HuPrcKill(NULL); while (1) { @@ -1634,8 +1637,8 @@ static void ExecItemBowser(void) { } static s32 booMotTbl[3] = { - 0x00020018, - 0x00020016, + DATA_MAKE_NUM(DATADIR_BGUEST, 24), + DATA_MAKE_NUM(DATADIR_BGUEST, 22), -1 }; @@ -1719,9 +1722,9 @@ static void ExecItemBooBall(void) { s32 var_r30; s32 var_r31; - BoardAudSeqPause(0, 1, 0x3E8); + BoardAudSeqPause(0, 1, 1000); suitMdl = BoardBooCreate(currItemRestore, &sp74); - booBallMdl = BoardModelCreate(0x20012, booMotTbl, 0); + booBallMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 18), booMotTbl, 0); BoardModelMotionStart(booBallMdl, 1, 0x40000001); BoardModelLayerSet(booBallMdl, 2); BoardModelAttrSet(booBallMdl, 2); @@ -1743,11 +1746,11 @@ static void ExecItemBooBall(void) { sp1C = BoardUiInlineFunc05(&sp80); BoardMusStart(1, 1, 0x7F, 0); HuAudFXPlay(0x4C); - BoardWinCreate(2, 0x120015, 3); + BoardWinCreate(2, MAKE_MESSID(18, 21), 3); BoardWinWait(); BoardWinKill(); if (BoardPlayerCoinsGet(currItemRestore) < 5) { - BoardWinCreate(2, 0x120016, 3); + BoardWinCreate(2, MAKE_MESSID(18, 22), 3); BoardWinWait(); BoardWinKill(); } else { @@ -1764,7 +1767,7 @@ static void ExecItemBooBall(void) { } } do { - BoardWinCreateChoice(4, 0x120018, 3, 0); + BoardWinCreateChoice(4, MAKE_MESSID(18, 24), 3, 0); BoardWinAttrSet(0x10); if (BoardPlayerCoinsGet(currItemRestore) < 50 || var_r28 == 0) { BoardWinChoiceDisable(1); @@ -1804,40 +1807,40 @@ static void ExecItemBooBall(void) { ExecItemBooBallInlineFunc02(30); var_r29 = BoardBooStealValueGet(&spC, &spA); if (var_r29 == 0) { - var_r30 = 0x7000B; + var_r30 = MAKE_MESSID(7, 11); } else if (spA == 0) { - var_r30 = 0x70009; + var_r30 = MAKE_MESSID(7, 9); } else if (spA >= 1 && spA <= 3) { - var_r30 = 0x70008; + var_r30 = MAKE_MESSID(7, 8); } else if (spA >= 4 && spA <= 6) { - var_r30 = 0x70007; + var_r30 = MAKE_MESSID(7, 7); } else if (spA >= 7 && spA <= 8) { - var_r30 = 0x70006; + var_r30 = MAKE_MESSID(7, 6); } else { - var_r30 = 0x70005; + var_r30 = MAKE_MESSID(7, 5); } sprintf(booCoinStr, "%d", spC); HuAudFXPlay(0x4C); BoardWinCreate(2, var_r30, 3); - BoardWinInsertMesSet((u32) (booCoinStr), 0); + BoardWinInsertMesSet(MAKE_MESSID_PTR(booCoinStr), 0); BoardWinWait(); BoardWinKill(); BoardStatusShowSetAll(1); if (var_r29 != 0) { BoardPlayerMotionShiftSet(currItemRestore, 7, 0.0f, 8.0f, 0); - HuPrcSleep(0x1E); + HuPrcSleep(30); for (var_r31 = 0; var_r31 < spC; var_r31++) { BoardPlayerCoinsAdd(currItemRestore, 1); HuAudFXPlay(7); HuPrcVSleep(); } BoardPlayerMotionEndWait(currItemRestore); - HuPrcSleep(0xA); + HuPrcSleep(10); BoardPlayerMotionShiftSet(currItemRestore, 1, 0.0f, 8.0f, 0x40000001); } break; case 1: - for (var_r31 = 0; var_r31 < 0x32; var_r31++) { + for (var_r31 = 0; var_r31 < 50; var_r31++) { BoardPlayerCoinsAdd(currItemRestore, -1); HuAudFXPlay(0xE); HuPrcSleep(1); @@ -1856,17 +1859,17 @@ static void ExecItemBooBall(void) { BoardCameraMotionWait(); ExecItemBooBallInlineFunc02(30); if (var_r29 != 0) { - var_r30 = 0x7000A; + var_r30 = MAKE_MESSID(7, 10); } else { - var_r30 = 0x7000B; + var_r30 = MAKE_MESSID(7, 11); } HuAudFXPlay(0x4C); BoardWinCreate(2, var_r30, 3); BoardWinWait(); BoardWinKill(); BoardStatusShowSetAll(1); - BoardAudSeqFadeOut(1, 0x3E8); - HuPrcSleep(0x17); + BoardAudSeqFadeOut(1, 1000); + HuPrcSleep(23); if (var_r29 != 0) { BoardPlayerVoiceEnableSet(currItemRestore, 7, 0); sp18 = HuAudSStreamPlay(6); @@ -1889,28 +1892,28 @@ static void ExecItemBooBall(void) { case 2: case -1: HuAudFXPlay(0x4C); - BoardWinCreate(2, 0x120017, 3); + BoardWinCreate(2, MAKE_MESSID(18, 23), 3); BoardWinWait(); BoardWinKill(); break; } } while (var_r29 == 3); } - BoardAudSeqFadeOut(1, 0x3E8); + BoardAudSeqFadeOut(1, 1000); HuPrcKill(sp1C); BoardModelPosGet(booBallMdl, &booBallPos); HuAudFXPlay(0x34F); ExecItemBooBallInlineFunc01(60); HuPrcKill(temp_r17); - BoardAudSeqPause(0, 0, 0x3E8); + BoardAudSeqPause(0, 0, 1000); CharModelLayerSetAll(3); BoardModelPosGet(suitMdl, &sp74); CharModelEffectCreate(1, &sp74); HuAudFXPlay(0x351); - HuPrcSleep(0xA); + HuPrcSleep(10); BoardModelKill(suitMdl); BoardModelKill(booBallMdl); - HuPrcSleep(0xF); + HuPrcSleep(15); HuPrcKill(NULL); while (1) { HuPrcVSleep(); @@ -2111,36 +2114,36 @@ static void GenieCameraCalc(UnkGenieCameraStruct *arg0, s32 arg1, float arg2, Ve } static s32 armUpMotTbl[] = { - 0x005F005C, - 0x001A005C, - 0x006D005C, - 0x008A005C, - 0x0085005C, - 0x0011005C, - 0x000D005C, - 0x0081005C + DATA_MAKE_NUM(DATADIR_MARIOMOT, 92), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 92), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 92), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 92), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 92), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 92), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 92), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 92) }; static s32 scareMotTbl[] = { - 0x005F001C, - 0x001A001C, - 0x006D001C, - 0x008A001C, - 0x0085001C, - 0x0011001C, - 0x000D001C, - 0x0081001C + DATA_MAKE_NUM(DATADIR_MARIOMOT, 28), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 28), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 28), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 28), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 28), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 28), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 28), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 28) }; static s32 impactMotTbl[] = { - 0x005F005E, - 0x001A005E, - 0x006D005E, - 0x008A005E, - 0x0085005E, - 0x0011005E, - 0x000D005E, - 0x0081005E + DATA_MAKE_NUM(DATADIR_MARIOMOT, 94), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 94), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 94), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 94), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 94), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 94), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 94), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 94) }; static UnkGenieCameraStruct cameraDataTbl[] = { @@ -2158,9 +2161,9 @@ static UnkGenieCameraStruct cameraDataTbl[] = { }; static s32 genieMotTbl[] = { - 0x0007007D, - 0x0007007E, - 0x0007007F, + DATA_MAKE_NUM(DATADIR_BOARD, 125), + DATA_MAKE_NUM(DATADIR_BOARD, 126), + DATA_MAKE_NUM(DATADIR_BOARD, 127), -1 }; @@ -2190,16 +2193,16 @@ static void GenieSceneExec(void) { BoardStatusShowSet(i, 0); } BoardLightResetExec(); - temp_r25 = BoardModelCreate(0x70080, NULL, 0); + temp_r25 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 128), NULL, 0); sp50.x = sp50.y = sp50.z = 0.0f; BoardModelPosSetV(temp_r25, &sp50); BoardModelCameraSet(temp_r25, 2); Hu3DModelAmbSet(BoardModelIDGet(temp_r25), 1.0f, 1.0f, 1.0f); - temp_r24 = BoardModelCreate(0x70081, NULL, 0); + temp_r24 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 129), NULL, 0); BoardModelPosSetV(temp_r24, &sp50); BoardModelCameraSet(temp_r24, 2); Hu3DModelAmbSet(BoardModelIDGet(temp_r24), 1.0f, 1.0f, 1.0f); - temp_r28 = BoardModelCreate(0x7007C, genieMotTbl, 0); + temp_r28 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 124), genieMotTbl, 0); sp50.x = sp50.y = 0.0f; sp50.z = 600.0f; sp44.x = sp44.z = 0.0f; @@ -2244,7 +2247,7 @@ static void GenieSceneExec(void) { Hu3DModelPosSet(temp_r27, booCamPos.x, booCamPos.y, booCamPos.z - 175.0f); temp_r23 = Hu3DData[temp_r27].unk_120; temp_r23->unk_02 = 1; - WipeCreate(1, 0, 0x2D); + WipeCreate(1, 0, 45); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -2252,18 +2255,18 @@ static void GenieSceneExec(void) { while (temp_r23->unk_02 != 0) { HuPrcVSleep(); } - HuPrcSleep(0x2D); + HuPrcSleep(45); HuAudPlayerVoicePlay(currItemRestore, 0x128); BoardPlayerMotionStart(currItemRestore, geniePlayerMot[1], 0); BoardPlayerMotionEndWait(currItemRestore); - HuPrcSleep(0x19); + HuPrcSleep(25); Hu3DModelKill(temp_r27); - for (i = 0; i < 0xA; i++) { + for (i = 0; i < 10; i++) { genieFov += 4.5f; HuPrcVSleep(); } genieFov = 60.0f; - HuPrcSleep(0x5A); + HuPrcSleep(90); var_f31 = 0.0f; var_r26 = 0; while (1) { @@ -2279,7 +2282,7 @@ static void GenieSceneExec(void) { HuPrcVSleep(); } GenieCameraCalc(&cameraDataTbl[0], var_r26, 1.0f, &booCamPos, &booCamUp); - HuPrcSleep(0x96); + HuPrcSleep(150); BoardPlayerIdleSet(currItemRestore); sp2C = booCamPos; sp20 = booCamUp; @@ -2290,7 +2293,7 @@ static void GenieSceneExec(void) { booCamPos.y = booCamUp.y + 950.0f; booCamPos.z = booCamUp.z + cos(-5 * M_PI / 9) * 1100.0; HuAudFXPlay(0x356); - BoardWinCreate(2, 0x12001B, -1); + BoardWinCreate(2, MAKE_MESSID(18, 27), -1); BoardWinWait(); BoardWinKill(); booCamUp = sp20; @@ -2323,7 +2326,7 @@ static void GenieSceneExec(void) { BoardModelPosSetV(temp_r28, &sp50); booCamUp.y = sp38.y + 100.0f; BoardModelMotionStart(temp_r28, 2, 0); - omVibrate(currItemRestore, 0xC, 0xC, 0); + omVibrate(currItemRestore, 12, 0xC, 0); booCamUp.y = 500.0f; HuAudFXPlay(0x35B); HuAudFXPlay((GWPlayer[currItemRestore].character << 6) + 0x123); @@ -2341,8 +2344,8 @@ static void GenieSceneExec(void) { } HuPrcVSleep(); } - WipeCreate(2, 0, 0x2D); - BoardAudSeqFadeOut(1, 0x3E8); + WipeCreate(2, 0, 45); + BoardAudSeqFadeOut(1, 1000); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -2379,7 +2382,7 @@ static void ExecItemGenie(void) { suitMdl = BoardModelCreate(itemMdlTbl[currItem], NULL, 1); BoardModelLayerSet(suitMdl, 2); - genieParticleAnim = HuSprAnimRead(HuDataSelHeapReadNum(0x70069, MEMORY_DEFAULT_NUM, HEAP_DATA)); + genieParticleAnim = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_BOARD, 105)); HuSprAnimLock(genieParticleAnim); geniePlayerMot[0] = BoardPlayerMotionCreate(currItemRestore, armUpMotTbl[GWPlayer[currItemRestore].character]); geniePlayerMot[1] = BoardPlayerMotionCreate(currItemRestore, scareMotTbl[GWPlayer[currItemRestore].character]); @@ -2396,11 +2399,11 @@ static void ExecItemGenie(void) { HuAudFXPlay(0x323); var_r30 = 0; while (1) { - if (var_r30 == 0x69) { + if (var_r30 == 105) { BoardPlayerMotionStart(currItemRestore, geniePlayerMot[0], 0); } BoardModelRotGet(suitMdl, &spC); - if (90.0f - spC.y <= sp24.unk14 && 90.0f - spC.y >= 0.0f && var_r30 >= 0x78) { + if (90.0f - spC.y <= sp24.unk14 && 90.0f - spC.y >= 0.0f && var_r30 >= 120) { break; } HuPrcVSleep(); @@ -2418,13 +2421,13 @@ static void ExecItemGenie(void) { BoardModelPosGet(suitMdl, &spC); Hu3DModelPosSet(temp_r31, spC.x, spC.y, spC.z); sp8 = Hu3DData[temp_r31].unk_120; - omVibrate(currItemRestore, 0xB5, 6, 6); - HuPrcSleep(0x87); - BoardAudSeqPause(0, 1, 0x3E8); + omVibrate(currItemRestore, 181, 6, 6); + HuPrcSleep(135); + BoardAudSeqPause(0, 1, 1000); HuAudFXStop(temp_r25); HuAudFXPauseAll(1); WipeColorSet(0xFF, 0xFF, 0xFF); - WipeCreate(2, 0, 0x2D); + WipeCreate(2, 0, 45); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -2444,8 +2447,8 @@ static void ExecItemGenie(void) { BoardPlayerPosSetV(currItemRestore, &spC); BoardCameraMotionWait(); BoardCameraMoveSet(1); - WipeCreate(1, 0, 0x2D); - HuPrcSleep(0xF); + WipeCreate(1, 0, 45); + HuPrcSleep(15); BoardAudSeqPause(0, 0, 1000); while (WipeStatGet() != 0) { HuPrcVSleep(); @@ -2467,7 +2470,7 @@ static void ExecItemGenie(void) { var_f31 += 1.0f; spC.y += var_f30; if (spC.y <= sp18.y) { - omVibrate(currItemRestore, 0xC, 6, 6); + omVibrate(currItemRestore, 12, 6, 6); spC.y = sp18.y; var_f29 = -var_f30 * 0.2f; if (fabs(var_f29) <= 5.0) { @@ -2626,19 +2629,19 @@ static void ExecItemBag(void) { sp3C.unk1C = 0; HuAudFXPlay(0x350); temp_r24 = ItemShowProc(&sp3C, NULL); - HuWinMesMaxSizeGet(1, sp10, 0x120014); + HuWinMesMaxSizeGet(1, sp10, MAKE_MESSID(18, 20)); temp_r28 = HuWinCreate(-10000.0f, 320.0f, sp10[0], sp10[1], 0); - HuWinMesSet(temp_r28, 0x120014); + HuWinMesSet(temp_r28, MAKE_MESSID(18, 20)); HuWinBGTPLvlSet(temp_r28, 0.0f); HuWinMesSpeedSet(temp_r28, 0); - var_r26 = frandmod(0x28) + 0x1E; + var_r26 = frandmod(40) + 30; var_r30 = 0; sp24.x = sp24.y = sp24.z = 0.0f; while (var_r30 < temp_r27) { if (GWPlayerCfg[currItemRestore].iscom == 1) { if (--var_r26 == 0) { var_r25 = 0x100; - var_r26 = frandmod(0x28) + 0x1E; + var_r26 = frandmod(40) + 30; } } else { var_r25 = HuPadBtnDown[temp_r23]; @@ -2665,7 +2668,7 @@ static void ExecItemBag(void) { HuPrcChildWatch(); BoardPlayerItemAdd(currItemRestore, itemBagItems[var_r30]); BoardPlayerMotionShiftSet(currItemRestore, 1, 0.0f, 10.0f, 0x40000001); - HuPrcSleep(0xA); + HuPrcSleep(10); var_r30++; } } @@ -2674,13 +2677,13 @@ static void ExecItemBag(void) { CharModelLayerSetAll(3); CharModelEffectCreate(1, &sp30); HuAudFXPlay(0x351); - HuPrcSleep(0xA); + HuPrcSleep(10); HuPrcKill(temp_r24); BoardModelKill(suitMdl); for (i = 0; i < temp_r27; i++) { BoardModelKill(sp8[i]); } - HuPrcSleep(0x1E); + HuPrcSleep(30); HuPrcKill(NULL); while (1) { HuPrcVSleep(); @@ -2738,7 +2741,7 @@ static void RestoreItemBowser(void) { s16 temp_r29; s16 i; - temp_r31 = BoardModelCreate(0x70063, NULL, 0); + temp_r31 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 99), NULL, 0); BoardModelVisibilitySet(temp_r31, 0); BoardModelLayerSet(temp_r31, 3); BoardPlayerPosGet(currItemRestore, &sp14); @@ -2752,12 +2755,12 @@ static void RestoreItemBowser(void) { temp_r29 = BoardBowserSuitPlayerModelGet(); BoardModelMotionShiftSet(suitMdl, suitMot[0], 0.0f, 5.0f, 0); BoardModelMotionShiftSet(temp_r29, suitCommonMot[0], 0.0f, 5.0f, 0); - HuPrcSleep(0x28); + HuPrcSleep(40); HuAudPlayerVoicePlay(currItemRestore, 0x129); - HuPrcSleep(0x14); + HuPrcSleep(20); HuAudFXPlay(0x32B); BoardModelVisibilitySet(temp_r31, 1); - for (i = 0; i < 0x3C; i++) { + for (i = 0; i < 60; i++) { sp20.x += 0.15f; sp20.y += 0.15f; sp20.z += 0.15f; @@ -2766,14 +2769,14 @@ static void RestoreItemBowser(void) { } sp20.x = sp20.y = sp20.z = 9.0f; BoardModelScaleSetV(temp_r31, &sp20); - HuPrcSleep(0x3C); + HuPrcSleep(60); HuAudFXPlay(0x313); BoardModelHookReset(suitMdl); BoardBowserSuitKill(currItemRestore); sp8.x = sp8.y = sp8.z = 1.0f; BoardPlayerScaleSetV(currItemRestore, &sp8); BoardModelVisibilitySet(BoardPlayerModelGet(currItemRestore), 1); - for (i = 0; i < 0x3C; i++) { + for (i = 0; i < 60; i++) { sp20.x -= 0.15f; sp20.y -= 0.15f; sp20.z -= 0.15f; diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c index 188ebce5..937ba7c6 100755 --- a/src/game/board/lottery.c +++ b/src/game/board/lottery.c @@ -882,7 +882,7 @@ static void ExecBallGame(void) { DATA_MAKE_NUM(DATADIR_WARIOMOT, 29), DATA_MAKE_NUM(DATADIR_DONKEYMOT, 29), DATA_MAKE_NUM(DATADIR_DAISYMOT, 29), - DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 29), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 29) }; temp_r27 = GWSystem.player_curr; From ec5d98fbe7b6b43a31666d52e351eea502527790 Mon Sep 17 00:00:00 2001 From: Rainchus Date: Sat, 30 Mar 2024 14:04:47 -0500 Subject: [PATCH 096/106] decompile mushroom.c, not linked --- src/game/board/mushroom.c | 567 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 567 insertions(+) create mode 100644 src/game/board/mushroom.c diff --git a/src/game/board/mushroom.c b/src/game/board/mushroom.c new file mode 100644 index 00000000..225a05d3 --- /dev/null +++ b/src/game/board/mushroom.c @@ -0,0 +1,567 @@ +#include "game/process.h" +#include "game/gamework_data.h" +#include "game/board/item.h" +#include "game/object.h" + +void KillMushroom(); +void MushroomMain(); +extern Process* boardMainProc; +extern Process* mushroomProc; + +void BoardMushroomExec(s32 arg0) { + omVibrate(arg0, 0xC, 6, 6); + mushroomProc = HuPrcChildCreate(MushroomMain, 0x2003U, 0x3800U, 0, boardMainProc); + HuPrcDestructorSet2(mushroomProc, KillMushroom); + + while (mushroomProc != NULL) { + HuPrcVSleep(); + } + + GWPlayer[arg0].color = 3; +} + +extern s32 boardTutorialData[4]; + +void MushroomMain(void) { + Point3d sp14[2]; + Point3d sp8; + s32 temp_r0; + s32 temp_r0_2; + s32 var_r30; + s32 curPlayer; + s32 var_r29; + boxObjWork* box; + s32 var_r27; + s32 var_r26; + s32 i; + + var_r29 = -1; + curPlayer = GWSystem.player_curr; + BoardCameraViewSet(3); + HuAudFXPlay(0x34A); + BoardPlayerMotBlendSet(curPlayer, 0, 15); + + while (BoardPlayerMotBlendCheck(curPlayer) == 0) { + HuPrcVSleep(); + } + + BoardCameraMotionWait(); + BoardPlayerIdleSet(curPlayer); + + if (_CheckFlag(0x1000B) != 0) { + BoardTutorialHookExec(13, 0); + boardTutorialData[0] = 0; + } + + if ((GWSystem.max_turn - GWSystem.turn) == 0) { + BoardWinCreate(0, 0x50003U, -1); + BoardWinWait(); + BoardWinKill(); + } else if (BoardPlayerItemCount(curPlayer) == 3) { + BoardWinCreate(0, 0x50000U, -1); + BoardWinWait(); + BoardWinKill(); + } else { + while (1) { + InitBox(curPlayer); + + while (CheckBox() == 0) { + HuPrcVSleep(); + } + + for (i = 0; i < 2; i++) { + box = OM_GET_WORK_PTR(boxObj[i], boxObjWork); + BoardModelPosGet(box->unk_02, &sp8); + Hu3D3Dto2D(&sp8, 1, &sp14[i]); + sp14[i].y += 32.0f; + sp14[i].z = 0.0f; + } + + if (GWPlayer[curPlayer].com != 0) { + BoardRand(); + var_r26 = 0; //inline? + var_r29 = (s8)var_r26; + if (_CheckFlag(0x1000BU) != 0) { + var_r29 = 0; + } + } + + BoardPickerCreate(curPlayer, 2, &sp14[0], var_r29); + BoardPickerBackFlagSet(0); + + while (BoardPickerDoneCheck() == 0) { + HuPrcVSleep(); + } + + pickerChoice = BoardPickerChoiceGet(); + SetBoxShow(pickerChoice); + SetBoxHide(pickerChoice ^ 1); + WaitBoxCenter(pickerChoice); + BoardPlayerMotionStart(curPlayer, 11, 0); + + while (BoardPlayerMotionTimeGet(curPlayer) < 27.0f) { + HuPrcVSleep(); + } + + HuAudFXPlay(0x30C); + StartItemGive(curPlayer); + WaitBoxOpen(pickerChoice); + ShowItemMdl(); + SetBoxCenter(pickerChoice); + + while (BoardPlayerMotionEndCheck(curPlayer) == 0) { + HuPrcVSleep(); + } + + WaitItemGive(); + + if (itemResult != 0) { + var_r27 = 0x50001; + } else { + var_r27 = 0x50002; + } + + BoardPlayerMotionShiftSet(curPlayer, 0xC, lbl_801D581C, 4.0f, 0); + HuPrcSleep(4); + BoardWinCreate(0, var_r27, -1); + BoardWinWait(); + BoardWinKill(); + MarkKillBox(); + BoardPlayerMotionEndWait(curPlayer); + BoardPlayerIdleSet(curPlayer); + if (_CheckFlag(0x1000BU) != 0) { + BoardPlayerIdleSet(curPlayer); + BoardTutorialHookExec(14, 0); + if (++boardTutorialData[0] < 2) { + KillItemMdl(); + continue; + } + } + break; + } + } + HuPrcEnd(); +} + +void KillItemMdl(void); +void MarkKillBox(void); +extern omObjData* itemGiveObj; +extern s32 mushroomProc; + +void KillMushroom(void) { + ItemGiveWork2* temp_r31; + + MarkKillBox(); + + if (itemGiveObj) { + temp_r31 = OM_GET_WORK_PTR(itemGiveObj, ItemGiveWork2); + temp_r31->unk00_field0 = 1; + } + + KillItemMdl(); + mushroomProc = 0; +} + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 1; + u8 unk00_field2 : 3; + u8 unk00_field5 : 2; + u8 unk00_field7 : 1; + }; + char unk01[1]; + s16 unk_02; + s16 unk_04; + s16 unk_06; + f32 unk_08; +} ItemGiveWork2; + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 1; + u8 unk00_field2 : 3; + u8 unk00_field5 : 2; + u8 unk00_field7 : 1; + }; + char unk01[1]; + s16 unk_02; + s16 unk_04; + s16 unk_06; + f32 unk_08; +} boxObjWork; + +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 2; + u8 unk00_field2 : 5; + }; + char unk01[1]; + s16 unk_02; + f32 unk_04; + f32 unk_08; +} itemObjWork; + +void BoardModelPosSet(s16, f32, f32, f32); +void BoardModelRotSet(s16, f32, f32, f32); +void CenterBox(ItemGiveWork2*, omObjData*); +void ExitBox(ItemGiveWork2* arg0, omObjData* arg1); +void HideBox(ItemGiveWork2*, omObjData*); +void ShowBox(ItemGiveWork2*, omObjData*); +omObjData* boxObj[2]; + +void BoxMain(omObjData* arg0) { + s32 temp_r0; + ItemGiveWork2* temp_r30; + + temp_r30 = OM_GET_WORK_PTR(arg0, ItemGiveWork2); + + if ((temp_r30->unk00_field0) || (BoardIsKill() != 0)) { + BoardModelKill(temp_r30->unk_02); + boxObj[temp_r30->unk00_field1] = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + switch (temp_r30->unk00_field2) { + case 0: + ShowBox(temp_r30, arg0); + break; + case 2: + CenterBox(temp_r30, arg0); + break; + case 3: + ExitBox(temp_r30, arg0); + break; + case 4: + HideBox(temp_r30, arg0); + break; + } + BoardModelPosSet(temp_r30->unk_02, arg0->trans.x, arg0->trans.y, arg0->trans.z); + BoardModelRotSet(temp_r30->unk_02, arg0->rot.x, arg0->rot.y, arg0->rot.z); +} + +extern f32 lbl_801D5828; +extern f32 lbl_801D582C; +extern f64 lbl_801D5830; +extern f64 lbl_801D5838; +extern f64 lbl_801D5840; +extern f32 lbl_801D5848; + +void ShowBox(ItemGiveWork2* arg0, omObjData* arg1) { + Point3d sp8; + + BoardPlayerPosGet(arg0->unk00_field5, &sp8); + sp8.y += lbl_801D5828; + + if (arg0->unk_08 >= lbl_801D582C) { + arg0->unk_08 = lbl_801D582C; + arg0->unk00_field7 = 1; + arg0->unk00_field2 = 1; + } + + OSs16tof32(&arg0->unk_06, &arg1->rot.y); + arg1->trans.y = (sp8.y + (lbl_801D5830 * cos((lbl_801D5838 * (f64) arg0->unk_08) / lbl_801D5840))); + arg0->unk_08 += lbl_801D5848; + arg0->unk_06 += 30; +} + +extern f32 lbl_801D581C; + +void ExitBox(ItemGiveWork2* arg0, omObjData* arg1) { + Point3d spC; + s16 sp8; + f32 temp; + + sp8 = (arg0->unk_06 % 360); + OSs16tof32(&sp8, &temp); + BoardPlayerPosGet(arg0->unk00_field5, &spC); + spC.y += lbl_801D5828; + + if (arg0->unk_08 <= lbl_801D581C) { + arg0->unk_08 = lbl_801D581C; + arg0->unk00_field2 = 1; + } + + arg1->trans.y = spC.y + (lbl_801D5830 * cos((lbl_801D5838 * arg0->unk_08) / lbl_801D5840)); + arg1->rot.y = sin((lbl_801D5838 * temp) / lbl_801D5840); + arg0->unk_08 -= lbl_801D5848; + arg0->unk_06 -= 30; +} + +void HideBox(ItemGiveWork2* arg0, omObjData* arg1) { + arg0->unk_04 -= 4; + + if (arg0->unk_04 < 0) { + arg0->unk00_field2 = 1; + arg0->unk_04 = 0; + } + + BoardModelAlphaSet(arg0->unk_02, arg0->unk_04); +} + +extern f32 lbl_801D584C; +extern f32 lbl_801D5850; + +void CenterBox(ItemGiveWork2* arg0, omObjData* arg1) { + Point3d sp20; + Point3d sp14; + Point3d sp8; + + sp14.x = arg1->trans.x; + sp14.y = arg1->trans.y; + sp14.z = arg1->trans.z; + BoardPlayerPosGet(arg0->unk00_field5, &sp20); + PSVECSubtract(&sp20, &sp14, &sp8); + PSVECScale(&sp8, &sp8, lbl_801D584C); + PSVECAdd(&sp8, &sp14, &sp14); + + if (BoardVecMaxDistXZCheck(&sp20, &sp14, lbl_801D5850) != 0) { + arg1->trans.x = sp20.x; + arg1->trans.z = sp20.z; + arg0->unk00_field2 = 1; + } + + arg1->trans.x = sp14.x; + arg1->trans.z = sp14.z; +} + +void InitBox(s32 arg0) { + Point3d sp10; + s32 sp8[2] = {0x0007006D, 0x0007006E}; + s32 var_r29; + s32 var_r28; + s32 var_r27; + s32 i; + boxObjWork* temp_r31; + + BoardPlayerPosGet(arg0, &sp10); + + for (i = 0; i < 2; i++) { + boxObj[i] = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, BoxMain); + temp_r31 = OM_GET_WORK_PTR(boxObj[i], boxObjWork); + temp_r31->unk00_field0 = 0; + temp_r31->unk00_field7 = 0; + temp_r31->unk00_field5 = arg0; + temp_r31->unk00_field1 = i; + temp_r31->unk00_field2 = 0; + temp_r31->unk_06 = 0; + temp_r31->unk_08 = lbl_801D581C; + temp_r31->unk_04 = 0xFF; + boxObj[i]->trans.x = sp10.x + boxOfs[i]; + boxObj[i]->trans.y = lbl_801D585C + sp10.y; + boxObj[i]->trans.z = sp10.z; + boxObj[i]->rot.x = lbl_801D581C; + boxObj[i]->rot.y = lbl_801D5860; + boxObj[i]->rot.z = lbl_801D581C; + temp_r31->unk_02 = BoardModelCreate(0x70005, NULL, 0); + BoardModelPosSet(temp_r31->unk_02, boxObj[i]->trans.x, boxObj[i]->trans.y, boxObj[i]->trans.z); + BoardModelMotionSpeedSet(temp_r31->unk_02, lbl_801D581C); + BoardModelLayerSet(temp_r31->unk_02, 2U); + } + + HuAudFXPlay(0x340); + if (BoardRandFloat() < lbl_801D5864) { + var_r28 = 0; + } else { + var_r28 = 1; + } + itemResult = (s8) var_r28; + if (BoardRandFloat() < lbl_801D5864) { + var_r27 = 0; + } else { + var_r27 = 1; + } + var_r29 = var_r27; + if (GWBoardGet() == 8) { + itemResult = 0; + } + if (_CheckFlag(0x1000BU) != 0) { + itemResult = (boardTutorialData[0] ^ 1); + var_r29 = 0; + } + itemMdl = BoardModelCreate(sp8[itemResult], NULL, 0); + BoardModelVisibilitySet(itemMdl, 0); + temp_r31 = OM_GET_WORK_PTR(boxObj[var_r29], boxObjWork); + BoardModelScaleSet(temp_r31->unk_02, lbl_801D5848, lbl_801D5848, lbl_801D5848); +} + +void MarkKillBox(void) { + s32 i; + boxObjWork* temp_r30; + + for (i = 0; i < ARRAY_COUNT(boxObj); i++) { + if (boxObj[i]) { + temp_r30 = OM_GET_WORK_PTR(boxObj[i], boxObjWork); + temp_r30->unk00_field0 = 1; + } + } +} + +void SetBoxHide(s32 arg0) { + boxObjWork* temp_r31 = OM_GET_WORK_PTR(boxObj[arg0], boxObjWork); + + temp_r31->unk00_field2 = 3; +} + +void SetBoxCenter(s32 arg0) { + boxObjWork* temp_r31 = OM_GET_WORK_PTR(boxObj[arg0], boxObjWork); + + temp_r31->unk00_field2 = 4; + HuAudFXPlay(0x341); +} + +void SetBoxShow(s32 arg0) { + boxObjWork* temp_r31 = OM_GET_WORK_PTR(boxObj[arg0], boxObjWork); + + temp_r31->unk00_field2 = 2; +} + +extern f32 lbl_801D5868; + +void WaitBoxOpen(s32 arg0) { + boxObjWork* temp_r31 = OM_GET_WORK_PTR(boxObj[arg0], boxObjWork); + + BoardModelMotionSpeedSet(temp_r31->unk_02, lbl_801D5868); + do { + HuPrcVSleep(); + } while (BoardModelMotionEndCheck(temp_r31->unk_02) == 0); +} + +void WaitBoxCenter(s32 arg0) { + boxObjWork* temp_r31 = OM_GET_WORK_PTR(boxObj[arg0], boxObjWork); + + while (temp_r31->unk00_field2 != 1) { + HuPrcVSleep(); + } +} + +s32 CheckBox(void) { + s32 i; + boxObjWork* box; + + for (i = 0; i < ARRAY_COUNT(boxObj); i++) { + box = OM_GET_WORK_PTR(boxObj[i], boxObjWork); + if (box->unk00_field7 == 0) { + return 0; + } + } + return 1; +} + +extern f32 lbl_801D5860; +extern s32 lbl_801D586C; +extern s32 lbl_801D5870; +extern f32 lbl_801D5874; +extern f32 lbl_801D5878; +extern f32 lbl_801D587C; +extern f32 lbl_801D5880; +extern f32 lbl_801D5884; +extern s8 itemResult; + +void DoItemGive(omObjData* arg0) { + Point3d sp28; + Point3d sp1C; + Point3d sp10; + s32 sp8[2] = {0, 1}; + itemObjWork* temp_r31; + + temp_r31 = OM_GET_WORK_PTR(arg0, itemObjWork); + + if ((temp_r31->unk00_field0 != 0) || (BoardIsKill() != 0)) { + KillItemMdl(); + itemGiveObj = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + + BoardModelPosGet(itemMdl, &sp28); + BoardModelRotGet(itemMdl, &sp1C); + BoardPlayerPosGet(temp_r31->unk00_field1, &sp10); + sp10.y += lbl_801D5860; + + switch (temp_r31->unk00_field2) { + case 2: + if (temp_r31->unk_02 < 12) { + temp_r31->unk_04 += lbl_801D5874; + sp28.y += temp_r31->unk_04; + } else if (temp_r31->unk_02 <= 24) { + BoardModelRotSet(itemMdl, lbl_801D5878 * temp_r31->unk_02, lbl_801D581C, lbl_801D581C); + } else if (temp_r31->unk_02 > 36) { + temp_r31->unk00_field2 = 0; + return; + } + temp_r31->unk_02++; + break; + case 0: + temp_r31->unk_04 += lbl_801D587C; + + if (temp_r31->unk_08 > lbl_801D5880) { + temp_r31->unk_08 -= lbl_801D5884; + } + + sp28.y += temp_r31->unk_04; + + if (sp10.y > sp28.y) { + BoardModelVisibilitySet(itemMdl, 0); + HuAudFXPlay(0x30D); + BoardPlayerItemAdd(temp_r31->unk00_field1, sp8[itemResult]); + temp_r31->unk00_field2 = 1; + } + /* fallthrough */ + case 1: + default: + break; + } + + BoardModelPosSetV(itemMdl, &sp28); + BoardModelScaleSet(itemMdl, temp_r31->unk_08, temp_r31->unk_08, temp_r31->unk_08); +} + +extern Process *boardObjMan; +void DoItemGive(omObjData*); +extern s16 itemMdl; +extern f32 lbl_801D5890; +extern u8 pickerChoice; + +void StartItemGive(s32 arg0) { + Point3d spC; + itemObjWork* temp_r31; + boxObjWork* box; + + itemGiveObj = omAddObjEx(boardObjMan, 0x102, 0U, 0U, -1, DoItemGive); + temp_r31 = OM_GET_WORK_PTR(itemGiveObj, itemObjWork); + + temp_r31->unk00_field0 = 0; + temp_r31->unk00_field1 = arg0; + temp_r31->unk00_field2 = 1; + temp_r31->unk_02 = 0; + temp_r31->unk_04 = lbl_801D581C; + temp_r31->unk_08 = lbl_801D5890; + box = OM_GET_WORK_PTR(boxObj[pickerChoice], boxObjWork); + BoardModelPosGet(box->unk_02, &spC); + BoardModelPosSetV(itemMdl, &spC); +} + +void KillItemMdl(void) { + if (itemMdl != -1) { + BoardModelKill(itemMdl); + itemMdl = -1; + } +} + +void ShowItemMdl(void) { + itemObjWork* temp_r31 = OM_GET_WORK_PTR(itemGiveObj, itemObjWork); + temp_r31->unk00_field2 = 2; + + BoardModelVisibilitySet(itemMdl, 1); +} + +void WaitItemGive(void) { + itemObjWork* temp_r31 = OM_GET_WORK_PTR(itemGiveObj, itemObjWork); + + while (temp_r31->unk00_field2 != 1) { + HuPrcVSleep(); + } +} \ No newline at end of file From 56895ea8ff7bf53bc18a4f512a526e0ab2ee6b6f Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sat, 30 Mar 2024 14:28:04 -0500 Subject: [PATCH 097/106] Link board/mushroom.c --- configure.py | 2 +- src/game/board/mushroom.c | 275 +++++++++++++++++++------------------- 2 files changed, 135 insertions(+), 142 deletions(-) diff --git a/configure.py b/configure.py index ca087f34..058947fd 100644 --- a/configure.py +++ b/configure.py @@ -380,7 +380,7 @@ config.libs = [ Object(Matching, "game/board/basic_space.c"), Object(Matching, "game/board/warp.c"), Object(Matching, "game/board/char_wheel.c"), - Object(NonMatching, "game/board/mushroom.c"), + Object(Matching, "game/board/mushroom.c"), Object(Matching, "game/board/star.c"), Object(Matching, "game/board/roll.c"), Object(Matching, "game/board/ui.c"), diff --git a/src/game/board/mushroom.c b/src/game/board/mushroom.c index 225a05d3..251e720a 100644 --- a/src/game/board/mushroom.c +++ b/src/game/board/mushroom.c @@ -2,11 +2,31 @@ #include "game/gamework_data.h" #include "game/board/item.h" #include "game/object.h" +#include "game/board/main.h" +#include "game/board/player.h" +#include "game/board/ui.h" +#include "game/board/model.h" -void KillMushroom(); -void MushroomMain(); -extern Process* boardMainProc; -extern Process* mushroomProc; +#include "game/objsub.h" + +#include "math.h" + +extern s32 boardTutorialData[4]; + + +static void KillMushroom(); +static void MushroomMain(); +static void KillItemMdl(void); +static void MarkKillBox(void); +static void InitBox(s32 arg0); + +static const float boxOfs[2] = {-150.0f, 150.0f}; +static omObjData *boxObj[2] = {}; +static s16 itemMdl = -1; +static s8 itemResult; +static u8 pickerChoice; +static omObjData* itemGiveObj; +static Process* mushroomProc; void BoardMushroomExec(s32 arg0) { omVibrate(arg0, 0xC, 6, 6); @@ -20,16 +40,40 @@ void BoardMushroomExec(s32 arg0) { GWPlayer[arg0].color = 3; } -extern s32 boardTutorialData[4]; -void MushroomMain(void) { - Point3d sp14[2]; - Point3d sp8; +typedef struct { + struct { + u8 unk00_field0 : 1; + u8 unk00_field1 : 1; + u8 unk00_field2 : 3; + u8 unk00_field5 : 2; + u8 unk00_field7 : 1; + }; + char unk01[1]; + s16 unk_02; + s16 unk_04; + s16 unk_06; + f32 unk_08; +} boxObjWork; + +static void SetBoxHide(s32 arg0); +static void SetBoxCenter(s32 arg0); +static void SetBoxShow(s32 arg0); +static void WaitBoxOpen(s32 arg0); +static void WaitBoxCenter(s32 arg0); +static s32 CheckBox(void); +static void StartItemGive(s32 arg0); +static void ShowItemMdl(void); +static void WaitItemGive(void); + +static void MushroomMain(void) { + Vec sp14[2]; + Vec sp8; s32 temp_r0; s32 temp_r0_2; s32 var_r30; s32 curPlayer; - s32 var_r29; + s8 var_r29; boxObjWork* box; s32 var_r27; s32 var_r26; @@ -80,7 +124,7 @@ void MushroomMain(void) { if (GWPlayer[curPlayer].com != 0) { BoardRand(); var_r26 = 0; //inline? - var_r29 = (s8)var_r26; + var_r29 = var_r26; if (_CheckFlag(0x1000BU) != 0) { var_r29 = 0; } @@ -121,7 +165,7 @@ void MushroomMain(void) { var_r27 = 0x50002; } - BoardPlayerMotionShiftSet(curPlayer, 0xC, lbl_801D581C, 4.0f, 0); + BoardPlayerMotionShiftSet(curPlayer, 0xC, 0.0f, 4.0f, 0); HuPrcSleep(4); BoardWinCreate(0, var_r27, -1); BoardWinWait(); @@ -143,25 +187,6 @@ void MushroomMain(void) { HuPrcEnd(); } -void KillItemMdl(void); -void MarkKillBox(void); -extern omObjData* itemGiveObj; -extern s32 mushroomProc; - -void KillMushroom(void) { - ItemGiveWork2* temp_r31; - - MarkKillBox(); - - if (itemGiveObj) { - temp_r31 = OM_GET_WORK_PTR(itemGiveObj, ItemGiveWork2); - temp_r31->unk00_field0 = 1; - } - - KillItemMdl(); - mushroomProc = 0; -} - typedef struct { struct { u8 unk00_field0 : 1; @@ -177,20 +202,19 @@ typedef struct { f32 unk_08; } ItemGiveWork2; -typedef struct { - struct { - u8 unk00_field0 : 1; - u8 unk00_field1 : 1; - u8 unk00_field2 : 3; - u8 unk00_field5 : 2; - u8 unk00_field7 : 1; - }; - char unk01[1]; - s16 unk_02; - s16 unk_04; - s16 unk_06; - f32 unk_08; -} boxObjWork; +static void KillMushroom(void) { + ItemGiveWork2* temp_r31; + + MarkKillBox(); + + if (itemGiveObj) { + temp_r31 = OM_GET_WORK_PTR(itemGiveObj, ItemGiveWork2); + temp_r31->unk00_field0 = 1; + } + + KillItemMdl(); + mushroomProc = NULL; +} typedef struct { struct { @@ -204,15 +228,13 @@ typedef struct { f32 unk_08; } itemObjWork; -void BoardModelPosSet(s16, f32, f32, f32); -void BoardModelRotSet(s16, f32, f32, f32); -void CenterBox(ItemGiveWork2*, omObjData*); -void ExitBox(ItemGiveWork2* arg0, omObjData* arg1); -void HideBox(ItemGiveWork2*, omObjData*); -void ShowBox(ItemGiveWork2*, omObjData*); -omObjData* boxObj[2]; +static void CenterBox(ItemGiveWork2*, omObjData*); +static void ExitBox(ItemGiveWork2* arg0, omObjData* arg1); +static void HideBox(ItemGiveWork2*, omObjData*); +static void ShowBox(ItemGiveWork2*, omObjData*); -void BoxMain(omObjData* arg0) { + +static void BoxMain(omObjData* arg0) { s32 temp_r0; ItemGiveWork2* temp_r30; @@ -242,55 +264,47 @@ void BoxMain(omObjData* arg0) { BoardModelRotSet(temp_r30->unk_02, arg0->rot.x, arg0->rot.y, arg0->rot.z); } -extern f32 lbl_801D5828; -extern f32 lbl_801D582C; -extern f64 lbl_801D5830; -extern f64 lbl_801D5838; -extern f64 lbl_801D5840; -extern f32 lbl_801D5848; - -void ShowBox(ItemGiveWork2* arg0, omObjData* arg1) { - Point3d sp8; +static void ShowBox(ItemGiveWork2* arg0, omObjData* arg1) { + Vec sp8; BoardPlayerPosGet(arg0->unk00_field5, &sp8); - sp8.y += lbl_801D5828; + sp8.y += 300.0f; - if (arg0->unk_08 >= lbl_801D582C) { - arg0->unk_08 = lbl_801D582C; + if (arg0->unk_08 >= 90.0f) { + arg0->unk_08 = 90.0f; arg0->unk00_field7 = 1; arg0->unk00_field2 = 1; } OSs16tof32(&arg0->unk_06, &arg1->rot.y); - arg1->trans.y = (sp8.y + (lbl_801D5830 * cos((lbl_801D5838 * (f64) arg0->unk_08) / lbl_801D5840))); - arg0->unk_08 += lbl_801D5848; + arg1->trans.y = (sp8.y + (700.0f * cos((M_PI * (f64) arg0->unk_08) / 180.0))); + arg0->unk_08 += 1.5f; arg0->unk_06 += 30; } -extern f32 lbl_801D581C; -void ExitBox(ItemGiveWork2* arg0, omObjData* arg1) { - Point3d spC; +static void ExitBox(ItemGiveWork2* arg0, omObjData* arg1) { + Vec spC; s16 sp8; f32 temp; sp8 = (arg0->unk_06 % 360); OSs16tof32(&sp8, &temp); BoardPlayerPosGet(arg0->unk00_field5, &spC); - spC.y += lbl_801D5828; + spC.y += 300.0f; - if (arg0->unk_08 <= lbl_801D581C) { - arg0->unk_08 = lbl_801D581C; + if (arg0->unk_08 <= 0.0f) { + arg0->unk_08 = 0.0f; arg0->unk00_field2 = 1; } - arg1->trans.y = spC.y + (lbl_801D5830 * cos((lbl_801D5838 * arg0->unk_08) / lbl_801D5840)); - arg1->rot.y = sin((lbl_801D5838 * temp) / lbl_801D5840); - arg0->unk_08 -= lbl_801D5848; + arg1->trans.y = spC.y + (700.0f * cos((M_PI * arg0->unk_08) / 180.0)); + arg1->rot.y = sin((M_PI * temp) / 180.0); + arg0->unk_08 -= 1.5f; arg0->unk_06 -= 30; } -void HideBox(ItemGiveWork2* arg0, omObjData* arg1) { +static void HideBox(ItemGiveWork2* arg0, omObjData* arg1) { arg0->unk_04 -= 4; if (arg0->unk_04 < 0) { @@ -301,23 +315,20 @@ void HideBox(ItemGiveWork2* arg0, omObjData* arg1) { BoardModelAlphaSet(arg0->unk_02, arg0->unk_04); } -extern f32 lbl_801D584C; -extern f32 lbl_801D5850; - -void CenterBox(ItemGiveWork2* arg0, omObjData* arg1) { - Point3d sp20; - Point3d sp14; - Point3d sp8; +static void CenterBox(ItemGiveWork2* arg0, omObjData* arg1) { + Vec sp20; + Vec sp14; + Vec sp8; sp14.x = arg1->trans.x; sp14.y = arg1->trans.y; sp14.z = arg1->trans.z; BoardPlayerPosGet(arg0->unk00_field5, &sp20); PSVECSubtract(&sp20, &sp14, &sp8); - PSVECScale(&sp8, &sp8, lbl_801D584C); + PSVECScale(&sp8, &sp8, 0.2f); PSVECAdd(&sp8, &sp14, &sp14); - if (BoardVecMaxDistXZCheck(&sp20, &sp14, lbl_801D5850) != 0) { + if (BoardVecMaxDistXZCheck(&sp20, &sp14, 3.0f) != 0) { arg1->trans.x = sp20.x; arg1->trans.z = sp20.z; arg0->unk00_field2 = 1; @@ -327,8 +338,8 @@ void CenterBox(ItemGiveWork2* arg0, omObjData* arg1) { arg1->trans.z = sp14.z; } -void InitBox(s32 arg0) { - Point3d sp10; +static void InitBox(s32 arg0) { + Vec sp10; s32 sp8[2] = {0x0007006D, 0x0007006E}; s32 var_r29; s32 var_r28; @@ -347,28 +358,28 @@ void InitBox(s32 arg0) { temp_r31->unk00_field1 = i; temp_r31->unk00_field2 = 0; temp_r31->unk_06 = 0; - temp_r31->unk_08 = lbl_801D581C; + temp_r31->unk_08 = 0.0f; temp_r31->unk_04 = 0xFF; boxObj[i]->trans.x = sp10.x + boxOfs[i]; - boxObj[i]->trans.y = lbl_801D585C + sp10.y; + boxObj[i]->trans.y = 700.0f + sp10.y; boxObj[i]->trans.z = sp10.z; - boxObj[i]->rot.x = lbl_801D581C; - boxObj[i]->rot.y = lbl_801D5860; - boxObj[i]->rot.z = lbl_801D581C; + boxObj[i]->rot.x = 0.0f; + boxObj[i]->rot.y = 180.0f; + boxObj[i]->rot.z = 0.0f; temp_r31->unk_02 = BoardModelCreate(0x70005, NULL, 0); BoardModelPosSet(temp_r31->unk_02, boxObj[i]->trans.x, boxObj[i]->trans.y, boxObj[i]->trans.z); - BoardModelMotionSpeedSet(temp_r31->unk_02, lbl_801D581C); + BoardModelMotionSpeedSet(temp_r31->unk_02, 0.0f); BoardModelLayerSet(temp_r31->unk_02, 2U); } HuAudFXPlay(0x340); - if (BoardRandFloat() < lbl_801D5864) { + if (BoardRandFloat() < 0.5f) { var_r28 = 0; } else { var_r28 = 1; } itemResult = (s8) var_r28; - if (BoardRandFloat() < lbl_801D5864) { + if (BoardRandFloat() < 0.5f) { var_r27 = 0; } else { var_r27 = 1; @@ -384,14 +395,14 @@ void InitBox(s32 arg0) { itemMdl = BoardModelCreate(sp8[itemResult], NULL, 0); BoardModelVisibilitySet(itemMdl, 0); temp_r31 = OM_GET_WORK_PTR(boxObj[var_r29], boxObjWork); - BoardModelScaleSet(temp_r31->unk_02, lbl_801D5848, lbl_801D5848, lbl_801D5848); + BoardModelScaleSet(temp_r31->unk_02, 1.5f, 1.5f, 1.5f); } -void MarkKillBox(void) { +static void MarkKillBox(void) { s32 i; boxObjWork* temp_r30; - for (i = 0; i < ARRAY_COUNT(boxObj); i++) { + for (i = 0; i < 2; i++) { if (boxObj[i]) { temp_r30 = OM_GET_WORK_PTR(boxObj[i], boxObjWork); temp_r30->unk00_field0 = 1; @@ -399,37 +410,35 @@ void MarkKillBox(void) { } } -void SetBoxHide(s32 arg0) { +static void SetBoxHide(s32 arg0) { boxObjWork* temp_r31 = OM_GET_WORK_PTR(boxObj[arg0], boxObjWork); temp_r31->unk00_field2 = 3; } -void SetBoxCenter(s32 arg0) { +static void SetBoxCenter(s32 arg0) { boxObjWork* temp_r31 = OM_GET_WORK_PTR(boxObj[arg0], boxObjWork); temp_r31->unk00_field2 = 4; HuAudFXPlay(0x341); } -void SetBoxShow(s32 arg0) { +static void SetBoxShow(s32 arg0) { boxObjWork* temp_r31 = OM_GET_WORK_PTR(boxObj[arg0], boxObjWork); temp_r31->unk00_field2 = 2; } -extern f32 lbl_801D5868; - -void WaitBoxOpen(s32 arg0) { +static void WaitBoxOpen(s32 arg0) { boxObjWork* temp_r31 = OM_GET_WORK_PTR(boxObj[arg0], boxObjWork); - BoardModelMotionSpeedSet(temp_r31->unk_02, lbl_801D5868); + BoardModelMotionSpeedSet(temp_r31->unk_02, 2.0f); do { HuPrcVSleep(); } while (BoardModelMotionEndCheck(temp_r31->unk_02) == 0); } -void WaitBoxCenter(s32 arg0) { +static void WaitBoxCenter(s32 arg0) { boxObjWork* temp_r31 = OM_GET_WORK_PTR(boxObj[arg0], boxObjWork); while (temp_r31->unk00_field2 != 1) { @@ -437,11 +446,11 @@ void WaitBoxCenter(s32 arg0) { } } -s32 CheckBox(void) { +static s32 CheckBox(void) { s32 i; boxObjWork* box; - for (i = 0; i < ARRAY_COUNT(boxObj); i++) { + for (i = 0; i < 2; i++) { box = OM_GET_WORK_PTR(boxObj[i], boxObjWork); if (box->unk00_field7 == 0) { return 0; @@ -450,20 +459,10 @@ s32 CheckBox(void) { return 1; } -extern f32 lbl_801D5860; -extern s32 lbl_801D586C; -extern s32 lbl_801D5870; -extern f32 lbl_801D5874; -extern f32 lbl_801D5878; -extern f32 lbl_801D587C; -extern f32 lbl_801D5880; -extern f32 lbl_801D5884; -extern s8 itemResult; - -void DoItemGive(omObjData* arg0) { - Point3d sp28; - Point3d sp1C; - Point3d sp10; +static void DoItemGive(omObjData* arg0) { + Vec sp28; + Vec sp1C; + Vec sp10; s32 sp8[2] = {0, 1}; itemObjWork* temp_r31; @@ -479,15 +478,15 @@ void DoItemGive(omObjData* arg0) { BoardModelPosGet(itemMdl, &sp28); BoardModelRotGet(itemMdl, &sp1C); BoardPlayerPosGet(temp_r31->unk00_field1, &sp10); - sp10.y += lbl_801D5860; + sp10.y += 180.0f; switch (temp_r31->unk00_field2) { case 2: if (temp_r31->unk_02 < 12) { - temp_r31->unk_04 += lbl_801D5874; + temp_r31->unk_04 += 1.47f; sp28.y += temp_r31->unk_04; } else if (temp_r31->unk_02 <= 24) { - BoardModelRotSet(itemMdl, lbl_801D5878 * temp_r31->unk_02, lbl_801D581C, lbl_801D581C); + BoardModelRotSet(itemMdl, 30.0f * temp_r31->unk_02, 0.0f, 0.0f); } else if (temp_r31->unk_02 > 36) { temp_r31->unk00_field2 = 0; return; @@ -495,10 +494,10 @@ void DoItemGive(omObjData* arg0) { temp_r31->unk_02++; break; case 0: - temp_r31->unk_04 += lbl_801D587C; + temp_r31->unk_04 += -1.47f; - if (temp_r31->unk_08 > lbl_801D5880) { - temp_r31->unk_08 -= lbl_801D5884; + if (temp_r31->unk_08 > 0.001f) { + temp_r31->unk_08 -= 0.005f; } sp28.y += temp_r31->unk_04; @@ -519,14 +518,8 @@ void DoItemGive(omObjData* arg0) { BoardModelScaleSet(itemMdl, temp_r31->unk_08, temp_r31->unk_08, temp_r31->unk_08); } -extern Process *boardObjMan; -void DoItemGive(omObjData*); -extern s16 itemMdl; -extern f32 lbl_801D5890; -extern u8 pickerChoice; - -void StartItemGive(s32 arg0) { - Point3d spC; +static void StartItemGive(s32 arg0) { + Vec spC; itemObjWork* temp_r31; boxObjWork* box; @@ -537,28 +530,28 @@ void StartItemGive(s32 arg0) { temp_r31->unk00_field1 = arg0; temp_r31->unk00_field2 = 1; temp_r31->unk_02 = 0; - temp_r31->unk_04 = lbl_801D581C; - temp_r31->unk_08 = lbl_801D5890; + temp_r31->unk_04 = 0.0f; + temp_r31->unk_08 = 1.0f; box = OM_GET_WORK_PTR(boxObj[pickerChoice], boxObjWork); BoardModelPosGet(box->unk_02, &spC); BoardModelPosSetV(itemMdl, &spC); } -void KillItemMdl(void) { +static void KillItemMdl(void) { if (itemMdl != -1) { BoardModelKill(itemMdl); itemMdl = -1; } } -void ShowItemMdl(void) { +static void ShowItemMdl(void) { itemObjWork* temp_r31 = OM_GET_WORK_PTR(itemGiveObj, itemObjWork); temp_r31->unk00_field2 = 2; BoardModelVisibilitySet(itemMdl, 1); } -void WaitItemGive(void) { +static void WaitItemGive(void) { itemObjWork* temp_r31 = OM_GET_WORK_PTR(itemGiveObj, itemObjWork); while (temp_r31->unk00_field2 != 1) { From 38f90eaf60369c3f06ef8a2b5f82cfbf930f5e83 Mon Sep 17 00:00:00 2001 From: Rainchus Date: Sun, 31 Mar 2024 11:25:22 -0500 Subject: [PATCH 098/106] match and link code_8003FF68.c --- configure.py | 2 +- src/game/code_8003FF68.c | 206 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 src/game/code_8003FF68.c diff --git a/configure.py b/configure.py index 058947fd..31af66b1 100644 --- a/configure.py +++ b/configure.py @@ -350,7 +350,7 @@ config.libs = [ Object(Matching, "game/minigame_seq.c"), Object(Matching, "game/ovllist.c"), Object(Matching, "game/esprite.c"), - Object(NonMatching, "game/code_8003FF68.c"), + Object(Matching, "game/code_8003FF68.c"), Object(Matching, "game/ClusterExec.c"), Object(Matching, "game/ShapeExec.c"), Object(Matching, "game/wipe.c"), diff --git a/src/game/code_8003FF68.c b/src/game/code_8003FF68.c new file mode 100644 index 00000000..c53d6934 --- /dev/null +++ b/src/game/code_8003FF68.c @@ -0,0 +1,206 @@ +#include "game/data.h" +#include "game/hsfman.h" +#include "game/process.h" +#include "game/hsfmotion.h" +#include "game/esprite.h" + +#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) + +typedef struct unkArg0 { +/* 0x00 */ u32 unk_00; +/* 0x04 */ s16 unk_04; +/* 0x06 */ s16 unk_06; +/* 0x08 */ s16 unk_08; +/* 0x0A */ s16 unk_0A; +/* 0x0C */ Vec pos; +/* 0x18 */ Vec rot; +/* 0x24 */ Vec scale; +} unkArg0; + +typedef struct unkCode_8003FF68 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; +} unkCode_8003FF68; + +//func signatures +void fn_8004040C(); + +//bss +s16 lbl_80192060[0x80]; +s16 lbl_80192160[0x80]; +s16 lbl_80192260[0x80]; + +//sbss +char lbl_801D3DA0[8]; + +//data +s16 lbl_801D35C0[] = { + 0x000D, 0x0026, + 0x0008, 0x0017 +}; + +s16 lbl_801D35C8[] = { + 0x0005, 0x001E, + 0x0001, 0x000F +}; + +s16 lbl_801D35D0[] = { + 0x000D, 0x0019, + 0x000B, 0x001A +}; + +s16 lbl_801D35D8[] = { + 0x000C, 0x0022, + 0x000A, 0x001B +}; + +s16* lbl_80130100[] = { + lbl_801D35C0, + lbl_801D35C8, + lbl_801D35D0, + lbl_801D35C0, + lbl_801D35D8, + lbl_801D35C0, + lbl_801D35C0, + lbl_801D35C0 +}; + +void fn_8003FF68(unkArg0* arg0) { + ModelData* temp_r27; + s16 model; + s16 j, i; + unkArg0* var_r31; + void* temp; + + var_r31 = arg0; + for (i = 0; i < ARRAY_COUNT(lbl_80192060); i++) { + lbl_80192060[i] = lbl_80192160[i] = -1; + } + + for (j = 0; var_r31->unk_00 != -1U; var_r31++, j++) { + if (var_r31->unk_06 == 0) { + temp = HuDataSelHeapReadNum(var_r31->unk_00, 0x10000000, HEAP_DATA); + model = Hu3DModelCreate(temp); + lbl_80192060[j] = model; + Hu3DModelAttrSet(model, var_r31->unk_04); + Hu3DModelPosSetV(model, &var_r31->pos); + Hu3DModelRotSetV(model, &var_r31->rot); + Hu3DModelScaleSetV(model, &var_r31->scale); + temp_r27 = &Hu3DData[model]; + if (temp_r27->unk_08 != -1) { + lbl_80192160[j] = temp_r27->unk_08; + } + } else if (var_r31->unk_06 == 1) { + temp = HuDataSelHeapReadNum(var_r31->unk_00, 0x10000000, HEAP_DATA); + lbl_80192160[j] = Hu3DMotionCreate(temp); + } + } + + var_r31 = arg0; + + for (j = 0; var_r31->unk_00 != 0; var_r31++, j++) { + if (var_r31->unk_06 == 2) { + model = Hu3DModelLink(lbl_80192060[var_r31->unk_08]); + lbl_80192060[j] = model; + Hu3DModelAttrSet(model, var_r31->unk_04); + Hu3DModelPosSetV(model, &var_r31->pos); + Hu3DModelRotSetV(model, &var_r31->rot); + Hu3DModelScaleSetV(model, &var_r31->scale); + } + if (var_r31->unk_0A != -1) { + Hu3DMotionSet(lbl_80192060[j], lbl_80192160[var_r31->unk_0A]); + } + } + //reg alloc hack + (void)j; + (void)j; + (void)j; +} + +typedef struct unkArg0_2 { + u32 unk0; + s16 unk4; + s16 unk6; + f32 unk8; + f32 unkC; + u8 unk10; + u8 unk11; + u8 unk12; + u8 unk13; +} unkArg0_2; + +void fn_800401D0(unkArg0_2* arg0) { + s16 spr; + s16 j; + s16 i; + unkArg0_2* var_r31; + + var_r31 = arg0; + + for (i = 0; i < ARRAY_COUNT(lbl_80192260); i++) { + lbl_80192260[i] = -1; + } + + for (j = 0; var_r31->unk0 != 0; j++, var_r31++) { + spr = espEntry(var_r31->unk0, 100, 0); + lbl_80192260[j] = spr; + espPosSet(spr, var_r31->unk8, var_r31->unkC); + espColorSet(spr, var_r31->unk10, var_r31->unk11, var_r31->unk12); + espTPLvlSet(spr, var_r31->unk13 / 255.0f); + espPriSet(spr, var_r31->unk6); + espAttrSet(spr, var_r31->unk4); + } +} + +void fn_800402FC(void) { + s16 i; + + for (i = 0; i < ARRAY_COUNT(lbl_80192260); i++) { + if (lbl_80192260[i] != -1) { + espKill(lbl_80192260[i]); + } + } +} + +void fn_80040374(s16 arg0, s16 arg1, s16 arg2, s16 arg3) { + Process* process; + unkCode_8003FF68* temp_r3; + + process = HuPrcChildCreate(fn_8004040C, 1U, 0x1000U, 0, HuPrcCurrentGet()); + temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkCode_8003FF68), 0x10000000); + process->user_data = temp_r3; + temp_r3->unk0 = arg0; + temp_r3->unk2 = arg1; + temp_r3->unk4 = arg2; + temp_r3->unk6 = arg3; +} + +typedef struct UnkUserData { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; +} UnkUserData; + +void fn_8004040C(void) { + ModelData* temp_r30; + s16* temp_r29; + UnkUserData* temp_r31; + Process* process; + + process = HuPrcCurrentGet(); + temp_r31 = (UnkUserData*)process->user_data; + temp_r30 = &Hu3DData[temp_r31->unk4]; + temp_r29 = lbl_80130100[temp_r31->unk0]; + + while (1) { + if (temp_r30->unk_08 == temp_r31->unk6 && + (temp_r30->unk_64 == (temp_r29[temp_r31->unk2 * 2] & 0xFFE) || + temp_r30->unk_64 == (temp_r29[temp_r31->unk2 * 2 + 1] & 0xFFE))) { + HuAudFXPlay(0); + } + HuPrcVSleep(); + } +} \ No newline at end of file From 7ae1c4fb36bdf8cb46267f214cb3aebb3c9da911 Mon Sep 17 00:00:00 2001 From: Rainchus Date: Sun, 31 Mar 2024 13:28:09 -0500 Subject: [PATCH 099/106] wip kerent.c --- config/GMPE01_00/symbols.txt | 1018 +-------- configure.py | 2 +- src/game/code_8003FF68.c | 2 +- src/game/kerent.c | 4074 ++++++++++++++++++++++++++++++++++ 4 files changed, 4077 insertions(+), 1019 deletions(-) create mode 100644 src/game/kerent.c diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index cf031b1b..84e0ce5a 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -3580,1023 +3580,7 @@ msmStreamDvdCallback = .text:0x8011C304; // type:function size:0x4A8 scope:local msmStreamDvdCallback2 = .text:0x8011C7AC; // type:function size:0x188 scope:local msmStreamUpdateFunc = .text:0x8011C934; // type:function size:0x17C scope:local msmStreamSlotInit = .text:0x8011CAB0; // type:function size:0x214 scope:local -fn_8011CCC4 = .text:0x8011CCC4; // type:function size:0x4 -fn_8011CCC8 = .text:0x8011CCC8; // type:function size:0x4 -fn_8011CCCC = .text:0x8011CCCC; // type:function size:0x4 -fn_8011CCD0 = .text:0x8011CCD0; // type:function size:0x4 -fn_8011CCD4 = .text:0x8011CCD4; // type:function size:0x4 -fn_8011CCD8 = .text:0x8011CCD8; // type:function size:0x4 -fn_8011CCDC = .text:0x8011CCDC; // type:function size:0x4 -fn_8011CCE0 = .text:0x8011CCE0; // type:function size:0x4 -fn_8011CCE4 = .text:0x8011CCE4; // type:function size:0x4 -fn_8011CCE8 = .text:0x8011CCE8; // type:function size:0x4 -fn_8011CCEC = .text:0x8011CCEC; // type:function size:0x4 -fn_8011CCF0 = .text:0x8011CCF0; // type:function size:0x4 -fn_8011CCF4 = .text:0x8011CCF4; // type:function size:0x4 -fn_8011CCF8 = .text:0x8011CCF8; // type:function size:0x4 -fn_8011CCFC = .text:0x8011CCFC; // type:function size:0x4 -fn_8011CD00 = .text:0x8011CD00; // type:function size:0x4 -fn_8011CD04 = .text:0x8011CD04; // type:function size:0x4 -fn_8011CD08 = .text:0x8011CD08; // type:function size:0x4 -fn_8011CD0C = .text:0x8011CD0C; // type:function size:0x4 -fn_8011CD10 = .text:0x8011CD10; // type:function size:0x4 -fn_8011CD14 = .text:0x8011CD14; // type:function size:0x4 -fn_8011CD18 = .text:0x8011CD18; // type:function size:0x4 -fn_8011CD1C = .text:0x8011CD1C; // type:function size:0x4 -fn_8011CD20 = .text:0x8011CD20; // type:function size:0x4 -fn_8011CD24 = .text:0x8011CD24; // type:function size:0x4 -fn_8011CD28 = .text:0x8011CD28; // type:function size:0x4 -fn_8011CD2C = .text:0x8011CD2C; // type:function size:0x4 -fn_8011CD30 = .text:0x8011CD30; // type:function size:0x4 -fn_8011CD34 = .text:0x8011CD34; // type:function size:0x4 -fn_8011CD38 = .text:0x8011CD38; // type:function size:0x4 -fn_8011CD3C = .text:0x8011CD3C; // type:function size:0x4 -fn_8011CD40 = .text:0x8011CD40; // type:function size:0x4 -fn_8011CD44 = .text:0x8011CD44; // type:function size:0x4 -fn_8011CD48 = .text:0x8011CD48; // type:function size:0x4 -fn_8011CD4C = .text:0x8011CD4C; // type:function size:0x4 -fn_8011CD50 = .text:0x8011CD50; // type:function size:0x4 -fn_8011CD54 = .text:0x8011CD54; // type:function size:0x4 -fn_8011CD58 = .text:0x8011CD58; // type:function size:0x4 -fn_8011CD5C = .text:0x8011CD5C; // type:function size:0x4 -fn_8011CD60 = .text:0x8011CD60; // type:function size:0x4 -fn_8011CD64 = .text:0x8011CD64; // type:function size:0x4 -fn_8011CD68 = .text:0x8011CD68; // type:function size:0x4 -fn_8011CD6C = .text:0x8011CD6C; // type:function size:0x4 -fn_8011CD70 = .text:0x8011CD70; // type:function size:0x4 -fn_8011CD74 = .text:0x8011CD74; // type:function size:0x4 -fn_8011CD78 = .text:0x8011CD78; // type:function size:0x4 -fn_8011CD7C = .text:0x8011CD7C; // type:function size:0x4 -fn_8011CD80 = .text:0x8011CD80; // type:function size:0x4 -fn_8011CD84 = .text:0x8011CD84; // type:function size:0x4 -fn_8011CD88 = .text:0x8011CD88; // type:function size:0x4 -fn_8011CD8C = .text:0x8011CD8C; // type:function size:0x4 -fn_8011CD90 = .text:0x8011CD90; // type:function size:0x4 -fn_8011CD94 = .text:0x8011CD94; // type:function size:0x4 -fn_8011CD98 = .text:0x8011CD98; // type:function size:0x4 -fn_8011CD9C = .text:0x8011CD9C; // type:function size:0x4 -fn_8011CDA0 = .text:0x8011CDA0; // type:function size:0x4 -fn_8011CDA4 = .text:0x8011CDA4; // type:function size:0x4 -fn_8011CDA8 = .text:0x8011CDA8; // type:function size:0x4 -fn_8011CDAC = .text:0x8011CDAC; // type:function size:0x4 -fn_8011CDB0 = .text:0x8011CDB0; // type:function size:0x4 -fn_8011CDB4 = .text:0x8011CDB4; // type:function size:0x4 -fn_8011CDB8 = .text:0x8011CDB8; // type:function size:0x4 -fn_8011CDBC = .text:0x8011CDBC; // type:function size:0x4 -fn_8011CDC0 = .text:0x8011CDC0; // type:function size:0x4 -fn_8011CDC4 = .text:0x8011CDC4; // type:function size:0x4 -fn_8011CDC8 = .text:0x8011CDC8; // type:function size:0x4 -fn_8011CDCC = .text:0x8011CDCC; // type:function size:0x4 -fn_8011CDD0 = .text:0x8011CDD0; // type:function size:0x4 -fn_8011CDD4 = .text:0x8011CDD4; // type:function size:0x4 -fn_8011CDD8 = .text:0x8011CDD8; // type:function size:0x4 -fn_8011CDDC = .text:0x8011CDDC; // type:function size:0x4 -fn_8011CDE0 = .text:0x8011CDE0; // type:function size:0x4 -fn_8011CDE4 = .text:0x8011CDE4; // type:function size:0x4 -fn_8011CDE8 = .text:0x8011CDE8; // type:function size:0x4 -fn_8011CDEC = .text:0x8011CDEC; // type:function size:0x4 -fn_8011CDF0 = .text:0x8011CDF0; // type:function size:0x4 -fn_8011CDF4 = .text:0x8011CDF4; // type:function size:0x4 -fn_8011CDF8 = .text:0x8011CDF8; // type:function size:0x4 -fn_8011CDFC = .text:0x8011CDFC; // type:function size:0x4 -fn_8011CE00 = .text:0x8011CE00; // type:function size:0x4 -fn_8011CE04 = .text:0x8011CE04; // type:function size:0x4 -fn_8011CE08 = .text:0x8011CE08; // type:function size:0x4 -fn_8011CE0C = .text:0x8011CE0C; // type:function size:0x4 -fn_8011CE10 = .text:0x8011CE10; // type:function size:0x4 -fn_8011CE14 = .text:0x8011CE14; // type:function size:0x4 -fn_8011CE18 = .text:0x8011CE18; // type:function size:0x4 -fn_8011CE1C = .text:0x8011CE1C; // type:function size:0x4 -fn_8011CE20 = .text:0x8011CE20; // type:function size:0x4 -fn_8011CE24 = .text:0x8011CE24; // type:function size:0x4 -fn_8011CE28 = .text:0x8011CE28; // type:function size:0x4 -fn_8011CE2C = .text:0x8011CE2C; // type:function size:0x4 -fn_8011CE30 = .text:0x8011CE30; // type:function size:0x4 -fn_8011CE34 = .text:0x8011CE34; // type:function size:0x4 -fn_8011CE38 = .text:0x8011CE38; // type:function size:0x4 -fn_8011CE3C = .text:0x8011CE3C; // type:function size:0x4 -fn_8011CE40 = .text:0x8011CE40; // type:function size:0x4 -fn_8011CE44 = .text:0x8011CE44; // type:function size:0x4 -fn_8011CE48 = .text:0x8011CE48; // type:function size:0x4 -fn_8011CE4C = .text:0x8011CE4C; // type:function size:0x4 -fn_8011CE50 = .text:0x8011CE50; // type:function size:0x4 -fn_8011CE54 = .text:0x8011CE54; // type:function size:0x4 -fn_8011CE58 = .text:0x8011CE58; // type:function size:0x4 -fn_8011CE5C = .text:0x8011CE5C; // type:function size:0x4 -fn_8011CE60 = .text:0x8011CE60; // type:function size:0x4 -fn_8011CE64 = .text:0x8011CE64; // type:function size:0x4 -fn_8011CE68 = .text:0x8011CE68; // type:function size:0x4 -fn_8011CE6C = .text:0x8011CE6C; // type:function size:0x4 -fn_8011CE70 = .text:0x8011CE70; // type:function size:0x4 -fn_8011CE74 = .text:0x8011CE74; // type:function size:0x4 -fn_8011CE78 = .text:0x8011CE78; // type:function size:0x4 -fn_8011CE7C = .text:0x8011CE7C; // type:function size:0x4 -fn_8011CE80 = .text:0x8011CE80; // type:function size:0x4 -fn_8011CE84 = .text:0x8011CE84; // type:function size:0x4 -fn_8011CE88 = .text:0x8011CE88; // type:function size:0x4 -fn_8011CE8C = .text:0x8011CE8C; // type:function size:0x4 -fn_8011CE90 = .text:0x8011CE90; // type:function size:0x4 -fn_8011CE94 = .text:0x8011CE94; // type:function size:0x4 -fn_8011CE98 = .text:0x8011CE98; // type:function size:0x4 -fn_8011CE9C = .text:0x8011CE9C; // type:function size:0x4 -fn_8011CEA0 = .text:0x8011CEA0; // type:function size:0x4 -fn_8011CEA4 = .text:0x8011CEA4; // type:function size:0x4 -fn_8011CEA8 = .text:0x8011CEA8; // type:function size:0x4 -fn_8011CEAC = .text:0x8011CEAC; // type:function size:0x4 -fn_8011CEB0 = .text:0x8011CEB0; // type:function size:0x4 -fn_8011CEB4 = .text:0x8011CEB4; // type:function size:0x4 -fn_8011CEB8 = .text:0x8011CEB8; // type:function size:0x4 -fn_8011CEBC = .text:0x8011CEBC; // type:function size:0x4 -fn_8011CEC0 = .text:0x8011CEC0; // type:function size:0x4 -fn_8011CEC4 = .text:0x8011CEC4; // type:function size:0x4 -fn_8011CEC8 = .text:0x8011CEC8; // type:function size:0x4 -fn_8011CECC = .text:0x8011CECC; // type:function size:0x4 -fn_8011CED0 = .text:0x8011CED0; // type:function size:0x4 -fn_8011CED4 = .text:0x8011CED4; // type:function size:0x4 -fn_8011CED8 = .text:0x8011CED8; // type:function size:0x4 -fn_8011CEDC = .text:0x8011CEDC; // type:function size:0x4 -fn_8011CEE0 = .text:0x8011CEE0; // type:function size:0x4 -fn_8011CEE4 = .text:0x8011CEE4; // type:function size:0x4 -fn_8011CEE8 = .text:0x8011CEE8; // type:function size:0x4 -fn_8011CEEC = .text:0x8011CEEC; // type:function size:0x4 -fn_8011CEF0 = .text:0x8011CEF0; // type:function size:0x4 -fn_8011CEF4 = .text:0x8011CEF4; // type:function size:0x4 -fn_8011CEF8 = .text:0x8011CEF8; // type:function size:0x4 -fn_8011CEFC = .text:0x8011CEFC; // type:function size:0x4 -fn_8011CF00 = .text:0x8011CF00; // type:function size:0x4 -fn_8011CF04 = .text:0x8011CF04; // type:function size:0x4 -fn_8011CF08 = .text:0x8011CF08; // type:function size:0x4 -fn_8011CF0C = .text:0x8011CF0C; // type:function size:0x4 -fn_8011CF10 = .text:0x8011CF10; // type:function size:0x4 -fn_8011CF14 = .text:0x8011CF14; // type:function size:0x4 -fn_8011CF18 = .text:0x8011CF18; // type:function size:0x4 -fn_8011CF1C = .text:0x8011CF1C; // type:function size:0x4 -fn_8011CF20 = .text:0x8011CF20; // type:function size:0x4 -fn_8011CF24 = .text:0x8011CF24; // type:function size:0x4 -fn_8011CF28 = .text:0x8011CF28; // type:function size:0x4 -fn_8011CF2C = .text:0x8011CF2C; // type:function size:0x4 -fn_8011CF30 = .text:0x8011CF30; // type:function size:0x4 -fn_8011CF34 = .text:0x8011CF34; // type:function size:0x4 -fn_8011CF38 = .text:0x8011CF38; // type:function size:0x4 -fn_8011CF3C = .text:0x8011CF3C; // type:function size:0x4 -fn_8011CF40 = .text:0x8011CF40; // type:function size:0x4 -fn_8011CF44 = .text:0x8011CF44; // type:function size:0x4 -fn_8011CF48 = .text:0x8011CF48; // type:function size:0x4 -fn_8011CF4C = .text:0x8011CF4C; // type:function size:0x4 -fn_8011CF50 = .text:0x8011CF50; // type:function size:0x4 -fn_8011CF54 = .text:0x8011CF54; // type:function size:0x4 -fn_8011CF58 = .text:0x8011CF58; // type:function size:0x4 -fn_8011CF5C = .text:0x8011CF5C; // type:function size:0x4 -fn_8011CF60 = .text:0x8011CF60; // type:function size:0x4 -fn_8011CF64 = .text:0x8011CF64; // type:function size:0x4 -fn_8011CF68 = .text:0x8011CF68; // type:function size:0x4 -fn_8011CF6C = .text:0x8011CF6C; // type:function size:0x4 -fn_8011CF70 = .text:0x8011CF70; // type:function size:0x4 -fn_8011CF74 = .text:0x8011CF74; // type:function size:0x4 -fn_8011CF78 = .text:0x8011CF78; // type:function size:0x4 -fn_8011CF7C = .text:0x8011CF7C; // type:function size:0x4 -fn_8011CF80 = .text:0x8011CF80; // type:function size:0x4 -fn_8011CF84 = .text:0x8011CF84; // type:function size:0x4 -fn_8011CF88 = .text:0x8011CF88; // type:function size:0x4 -fn_8011CF8C = .text:0x8011CF8C; // type:function size:0x4 -fn_8011CF90 = .text:0x8011CF90; // type:function size:0x4 -fn_8011CF94 = .text:0x8011CF94; // type:function size:0x4 -fn_8011CF98 = .text:0x8011CF98; // type:function size:0x4 -fn_8011CF9C = .text:0x8011CF9C; // type:function size:0x4 -fn_8011CFA0 = .text:0x8011CFA0; // type:function size:0x4 -fn_8011CFA4 = .text:0x8011CFA4; // type:function size:0x4 -fn_8011CFA8 = .text:0x8011CFA8; // type:function size:0x4 -fn_8011CFAC = .text:0x8011CFAC; // type:function size:0x4 -fn_8011CFB0 = .text:0x8011CFB0; // type:function size:0x4 -fn_8011CFB4 = .text:0x8011CFB4; // type:function size:0x4 -fn_8011CFB8 = .text:0x8011CFB8; // type:function size:0x4 -fn_8011CFBC = .text:0x8011CFBC; // type:function size:0x4 -fn_8011CFC0 = .text:0x8011CFC0; // type:function size:0x4 -fn_8011CFC4 = .text:0x8011CFC4; // type:function size:0x4 -fn_8011CFC8 = .text:0x8011CFC8; // type:function size:0x4 -fn_8011CFCC = .text:0x8011CFCC; // type:function size:0x4 -fn_8011CFD0 = .text:0x8011CFD0; // type:function size:0x4 -fn_8011CFD4 = .text:0x8011CFD4; // type:function size:0x4 -fn_8011CFD8 = .text:0x8011CFD8; // type:function size:0x4 -fn_8011CFDC = .text:0x8011CFDC; // type:function size:0x4 -fn_8011CFE0 = .text:0x8011CFE0; // type:function size:0x4 -fn_8011CFE4 = .text:0x8011CFE4; // type:function size:0x4 -fn_8011CFE8 = .text:0x8011CFE8; // type:function size:0x4 -fn_8011CFEC = .text:0x8011CFEC; // type:function size:0x4 -fn_8011CFF0 = .text:0x8011CFF0; // type:function size:0x4 -fn_8011CFF4 = .text:0x8011CFF4; // type:function size:0x4 -fn_8011CFF8 = .text:0x8011CFF8; // type:function size:0x4 -fn_8011CFFC = .text:0x8011CFFC; // type:function size:0x4 -fn_8011D000 = .text:0x8011D000; // type:function size:0x4 -fn_8011D004 = .text:0x8011D004; // type:function size:0x4 -fn_8011D008 = .text:0x8011D008; // type:function size:0x4 -fn_8011D00C = .text:0x8011D00C; // type:function size:0x4 -fn_8011D010 = .text:0x8011D010; // type:function size:0x4 -fn_8011D014 = .text:0x8011D014; // type:function size:0x4 -fn_8011D018 = .text:0x8011D018; // type:function size:0x4 -fn_8011D01C = .text:0x8011D01C; // type:function size:0x4 -fn_8011D020 = .text:0x8011D020; // type:function size:0x4 -fn_8011D024 = .text:0x8011D024; // type:function size:0x4 -fn_8011D028 = .text:0x8011D028; // type:function size:0x4 -fn_8011D02C = .text:0x8011D02C; // type:function size:0x4 -fn_8011D030 = .text:0x8011D030; // type:function size:0x4 -fn_8011D034 = .text:0x8011D034; // type:function size:0x4 -fn_8011D038 = .text:0x8011D038; // type:function size:0x4 -fn_8011D03C = .text:0x8011D03C; // type:function size:0x4 -fn_8011D040 = .text:0x8011D040; // type:function size:0x4 -fn_8011D044 = .text:0x8011D044; // type:function size:0x4 -fn_8011D048 = .text:0x8011D048; // type:function size:0x4 -fn_8011D04C = .text:0x8011D04C; // type:function size:0x4 -fn_8011D050 = .text:0x8011D050; // type:function size:0x4 -fn_8011D054 = .text:0x8011D054; // type:function size:0x4 -fn_8011D058 = .text:0x8011D058; // type:function size:0x4 -fn_8011D05C = .text:0x8011D05C; // type:function size:0x4 -fn_8011D060 = .text:0x8011D060; // type:function size:0x4 -fn_8011D064 = .text:0x8011D064; // type:function size:0x4 -fn_8011D068 = .text:0x8011D068; // type:function size:0x4 -fn_8011D06C = .text:0x8011D06C; // type:function size:0x4 -fn_8011D070 = .text:0x8011D070; // type:function size:0x4 -fn_8011D074 = .text:0x8011D074; // type:function size:0x4 -fn_8011D078 = .text:0x8011D078; // type:function size:0x4 -fn_8011D07C = .text:0x8011D07C; // type:function size:0x4 -fn_8011D080 = .text:0x8011D080; // type:function size:0x4 -fn_8011D084 = .text:0x8011D084; // type:function size:0x4 -fn_8011D088 = .text:0x8011D088; // type:function size:0x4 -fn_8011D08C = .text:0x8011D08C; // type:function size:0x4 -fn_8011D090 = .text:0x8011D090; // type:function size:0x4 -fn_8011D094 = .text:0x8011D094; // type:function size:0x4 -fn_8011D098 = .text:0x8011D098; // type:function size:0x4 -fn_8011D09C = .text:0x8011D09C; // type:function size:0x4 -fn_8011D0A0 = .text:0x8011D0A0; // type:function size:0x4 -fn_8011D0A4 = .text:0x8011D0A4; // type:function size:0x4 -fn_8011D0A8 = .text:0x8011D0A8; // type:function size:0x4 -fn_8011D0AC = .text:0x8011D0AC; // type:function size:0x4 -fn_8011D0B0 = .text:0x8011D0B0; // type:function size:0x4 -fn_8011D0B4 = .text:0x8011D0B4; // type:function size:0x4 -fn_8011D0B8 = .text:0x8011D0B8; // type:function size:0x4 -fn_8011D0BC = .text:0x8011D0BC; // type:function size:0x4 -fn_8011D0C0 = .text:0x8011D0C0; // type:function size:0x4 -fn_8011D0C4 = .text:0x8011D0C4; // type:function size:0x4 -fn_8011D0C8 = .text:0x8011D0C8; // type:function size:0x4 -fn_8011D0CC = .text:0x8011D0CC; // type:function size:0x4 -fn_8011D0D0 = .text:0x8011D0D0; // type:function size:0x4 -fn_8011D0D4 = .text:0x8011D0D4; // type:function size:0x4 -fn_8011D0D8 = .text:0x8011D0D8; // type:function size:0x4 -fn_8011D0DC = .text:0x8011D0DC; // type:function size:0x4 -fn_8011D0E0 = .text:0x8011D0E0; // type:function size:0x4 -fn_8011D0E4 = .text:0x8011D0E4; // type:function size:0x4 -fn_8011D0E8 = .text:0x8011D0E8; // type:function size:0x4 -fn_8011D0EC = .text:0x8011D0EC; // type:function size:0x4 -fn_8011D0F0 = .text:0x8011D0F0; // type:function size:0x4 -fn_8011D0F4 = .text:0x8011D0F4; // type:function size:0x4 -fn_8011D0F8 = .text:0x8011D0F8; // type:function size:0x4 -fn_8011D0FC = .text:0x8011D0FC; // type:function size:0x4 -fn_8011D100 = .text:0x8011D100; // type:function size:0x4 -fn_8011D104 = .text:0x8011D104; // type:function size:0x4 -fn_8011D108 = .text:0x8011D108; // type:function size:0x4 -fn_8011D10C = .text:0x8011D10C; // type:function size:0x4 -fn_8011D110 = .text:0x8011D110; // type:function size:0x4 -fn_8011D114 = .text:0x8011D114; // type:function size:0x4 -fn_8011D118 = .text:0x8011D118; // type:function size:0x4 -fn_8011D11C = .text:0x8011D11C; // type:function size:0x4 -fn_8011D120 = .text:0x8011D120; // type:function size:0x4 -fn_8011D124 = .text:0x8011D124; // type:function size:0x4 -fn_8011D128 = .text:0x8011D128; // type:function size:0x4 -fn_8011D12C = .text:0x8011D12C; // type:function size:0x4 -fn_8011D130 = .text:0x8011D130; // type:function size:0x4 -fn_8011D134 = .text:0x8011D134; // type:function size:0x4 -fn_8011D138 = .text:0x8011D138; // type:function size:0x4 -fn_8011D13C = .text:0x8011D13C; // type:function size:0x4 -fn_8011D140 = .text:0x8011D140; // type:function size:0x4 -fn_8011D144 = .text:0x8011D144; // type:function size:0x4 -fn_8011D148 = .text:0x8011D148; // type:function size:0x4 -fn_8011D14C = .text:0x8011D14C; // type:function size:0x4 -fn_8011D150 = .text:0x8011D150; // type:function size:0x4 -fn_8011D154 = .text:0x8011D154; // type:function size:0x4 -fn_8011D158 = .text:0x8011D158; // type:function size:0x4 -fn_8011D15C = .text:0x8011D15C; // type:function size:0x4 -fn_8011D160 = .text:0x8011D160; // type:function size:0x4 -fn_8011D164 = .text:0x8011D164; // type:function size:0x4 -fn_8011D168 = .text:0x8011D168; // type:function size:0x4 -fn_8011D16C = .text:0x8011D16C; // type:function size:0x4 -fn_8011D170 = .text:0x8011D170; // type:function size:0x4 -fn_8011D174 = .text:0x8011D174; // type:function size:0x4 -fn_8011D178 = .text:0x8011D178; // type:function size:0x4 -fn_8011D17C = .text:0x8011D17C; // type:function size:0x4 -fn_8011D180 = .text:0x8011D180; // type:function size:0x4 -fn_8011D184 = .text:0x8011D184; // type:function size:0x4 -fn_8011D188 = .text:0x8011D188; // type:function size:0x4 -fn_8011D18C = .text:0x8011D18C; // type:function size:0x4 -fn_8011D190 = .text:0x8011D190; // type:function size:0x4 -fn_8011D194 = .text:0x8011D194; // type:function size:0x4 -fn_8011D198 = .text:0x8011D198; // type:function size:0x4 -fn_8011D19C = .text:0x8011D19C; // type:function size:0x4 -fn_8011D1A0 = .text:0x8011D1A0; // type:function size:0x4 -fn_8011D1A4 = .text:0x8011D1A4; // type:function size:0x4 -fn_8011D1A8 = .text:0x8011D1A8; // type:function size:0x4 -fn_8011D1AC = .text:0x8011D1AC; // type:function size:0x4 -fn_8011D1B0 = .text:0x8011D1B0; // type:function size:0x4 -fn_8011D1B4 = .text:0x8011D1B4; // type:function size:0x4 -fn_8011D1B8 = .text:0x8011D1B8; // type:function size:0x4 -fn_8011D1BC = .text:0x8011D1BC; // type:function size:0x4 -fn_8011D1C0 = .text:0x8011D1C0; // type:function size:0x4 -fn_8011D1C4 = .text:0x8011D1C4; // type:function size:0x4 -fn_8011D1C8 = .text:0x8011D1C8; // type:function size:0x4 -fn_8011D1CC = .text:0x8011D1CC; // type:function size:0x4 -fn_8011D1D0 = .text:0x8011D1D0; // type:function size:0x4 -fn_8011D1D4 = .text:0x8011D1D4; // type:function size:0x4 -fn_8011D1D8 = .text:0x8011D1D8; // type:function size:0x4 -fn_8011D1DC = .text:0x8011D1DC; // type:function size:0x4 -fn_8011D1E0 = .text:0x8011D1E0; // type:function size:0x4 -fn_8011D1E4 = .text:0x8011D1E4; // type:function size:0x4 -fn_8011D1E8 = .text:0x8011D1E8; // type:function size:0x4 -fn_8011D1EC = .text:0x8011D1EC; // type:function size:0x4 -fn_8011D1F0 = .text:0x8011D1F0; // type:function size:0x4 -fn_8011D1F4 = .text:0x8011D1F4; // type:function size:0x4 -fn_8011D1F8 = .text:0x8011D1F8; // type:function size:0x4 -fn_8011D1FC = .text:0x8011D1FC; // type:function size:0x4 -fn_8011D200 = .text:0x8011D200; // type:function size:0x4 -fn_8011D204 = .text:0x8011D204; // type:function size:0x4 -fn_8011D208 = .text:0x8011D208; // type:function size:0x4 -fn_8011D20C = .text:0x8011D20C; // type:function size:0x4 -fn_8011D210 = .text:0x8011D210; // type:function size:0x4 -fn_8011D214 = .text:0x8011D214; // type:function size:0x4 -fn_8011D218 = .text:0x8011D218; // type:function size:0x4 -fn_8011D21C = .text:0x8011D21C; // type:function size:0x4 -fn_8011D220 = .text:0x8011D220; // type:function size:0x4 -fn_8011D224 = .text:0x8011D224; // type:function size:0x4 -fn_8011D228 = .text:0x8011D228; // type:function size:0x4 -fn_8011D22C = .text:0x8011D22C; // type:function size:0x4 -fn_8011D230 = .text:0x8011D230; // type:function size:0x4 -fn_8011D234 = .text:0x8011D234; // type:function size:0x4 -fn_8011D238 = .text:0x8011D238; // type:function size:0x4 -fn_8011D23C = .text:0x8011D23C; // type:function size:0x4 -fn_8011D240 = .text:0x8011D240; // type:function size:0x4 -fn_8011D244 = .text:0x8011D244; // type:function size:0x4 -fn_8011D248 = .text:0x8011D248; // type:function size:0x4 -fn_8011D24C = .text:0x8011D24C; // type:function size:0x4 -fn_8011D250 = .text:0x8011D250; // type:function size:0x4 -fn_8011D254 = .text:0x8011D254; // type:function size:0x4 -fn_8011D258 = .text:0x8011D258; // type:function size:0x4 -fn_8011D25C = .text:0x8011D25C; // type:function size:0x4 -fn_8011D260 = .text:0x8011D260; // type:function size:0x4 -fn_8011D264 = .text:0x8011D264; // type:function size:0x4 -fn_8011D268 = .text:0x8011D268; // type:function size:0x4 -fn_8011D26C = .text:0x8011D26C; // type:function size:0x4 -fn_8011D270 = .text:0x8011D270; // type:function size:0x4 -fn_8011D274 = .text:0x8011D274; // type:function size:0x4 -fn_8011D278 = .text:0x8011D278; // type:function size:0x4 -fn_8011D27C = .text:0x8011D27C; // type:function size:0x4 -fn_8011D280 = .text:0x8011D280; // type:function size:0x4 -fn_8011D284 = .text:0x8011D284; // type:function size:0x4 -fn_8011D288 = .text:0x8011D288; // type:function size:0x4 -fn_8011D28C = .text:0x8011D28C; // type:function size:0x4 -fn_8011D290 = .text:0x8011D290; // type:function size:0x4 -fn_8011D294 = .text:0x8011D294; // type:function size:0x4 -fn_8011D298 = .text:0x8011D298; // type:function size:0x4 -fn_8011D29C = .text:0x8011D29C; // type:function size:0x4 -fn_8011D2A0 = .text:0x8011D2A0; // type:function size:0x4 -fn_8011D2A4 = .text:0x8011D2A4; // type:function size:0x4 -fn_8011D2A8 = .text:0x8011D2A8; // type:function size:0x4 -fn_8011D2AC = .text:0x8011D2AC; // type:function size:0x4 -fn_8011D2B0 = .text:0x8011D2B0; // type:function size:0x4 -fn_8011D2B4 = .text:0x8011D2B4; // type:function size:0x4 -fn_8011D2B8 = .text:0x8011D2B8; // type:function size:0x4 -fn_8011D2BC = .text:0x8011D2BC; // type:function size:0x4 -fn_8011D2C0 = .text:0x8011D2C0; // type:function size:0x4 -fn_8011D2C4 = .text:0x8011D2C4; // type:function size:0x4 -fn_8011D2C8 = .text:0x8011D2C8; // type:function size:0x4 -fn_8011D2CC = .text:0x8011D2CC; // type:function size:0x4 -fn_8011D2D0 = .text:0x8011D2D0; // type:function size:0x4 -fn_8011D2D4 = .text:0x8011D2D4; // type:function size:0x4 -fn_8011D2D8 = .text:0x8011D2D8; // type:function size:0x4 -fn_8011D2DC = .text:0x8011D2DC; // type:function size:0x4 -fn_8011D2E0 = .text:0x8011D2E0; // type:function size:0x4 -fn_8011D2E4 = .text:0x8011D2E4; // type:function size:0x4 -fn_8011D2E8 = .text:0x8011D2E8; // type:function size:0x4 -fn_8011D2EC = .text:0x8011D2EC; // type:function size:0x4 -fn_8011D2F0 = .text:0x8011D2F0; // type:function size:0x4 -fn_8011D2F4 = .text:0x8011D2F4; // type:function size:0x4 -fn_8011D2F8 = .text:0x8011D2F8; // type:function size:0x4 -fn_8011D2FC = .text:0x8011D2FC; // type:function size:0x4 -fn_8011D300 = .text:0x8011D300; // type:function size:0x4 -fn_8011D304 = .text:0x8011D304; // type:function size:0x4 -fn_8011D308 = .text:0x8011D308; // type:function size:0x4 -fn_8011D30C = .text:0x8011D30C; // type:function size:0x4 -fn_8011D310 = .text:0x8011D310; // type:function size:0x4 -fn_8011D314 = .text:0x8011D314; // type:function size:0x4 -fn_8011D318 = .text:0x8011D318; // type:function size:0x4 -fn_8011D31C = .text:0x8011D31C; // type:function size:0x4 -fn_8011D320 = .text:0x8011D320; // type:function size:0x4 -fn_8011D324 = .text:0x8011D324; // type:function size:0x4 -fn_8011D328 = .text:0x8011D328; // type:function size:0x4 -fn_8011D32C = .text:0x8011D32C; // type:function size:0x4 -fn_8011D330 = .text:0x8011D330; // type:function size:0x4 -fn_8011D334 = .text:0x8011D334; // type:function size:0x4 -fn_8011D338 = .text:0x8011D338; // type:function size:0x4 -fn_8011D33C = .text:0x8011D33C; // type:function size:0x4 -fn_8011D340 = .text:0x8011D340; // type:function size:0x4 -fn_8011D344 = .text:0x8011D344; // type:function size:0x4 -fn_8011D348 = .text:0x8011D348; // type:function size:0x4 -fn_8011D34C = .text:0x8011D34C; // type:function size:0x4 -fn_8011D350 = .text:0x8011D350; // type:function size:0x4 -fn_8011D354 = .text:0x8011D354; // type:function size:0x4 -fn_8011D358 = .text:0x8011D358; // type:function size:0x4 -fn_8011D35C = .text:0x8011D35C; // type:function size:0x4 -fn_8011D360 = .text:0x8011D360; // type:function size:0x4 -fn_8011D364 = .text:0x8011D364; // type:function size:0x4 -fn_8011D368 = .text:0x8011D368; // type:function size:0x4 -fn_8011D36C = .text:0x8011D36C; // type:function size:0x4 -fn_8011D370 = .text:0x8011D370; // type:function size:0x4 -fn_8011D374 = .text:0x8011D374; // type:function size:0x4 -fn_8011D378 = .text:0x8011D378; // type:function size:0x4 -fn_8011D37C = .text:0x8011D37C; // type:function size:0x4 -fn_8011D380 = .text:0x8011D380; // type:function size:0x4 -fn_8011D384 = .text:0x8011D384; // type:function size:0x4 -fn_8011D388 = .text:0x8011D388; // type:function size:0x4 -fn_8011D38C = .text:0x8011D38C; // type:function size:0x4 -fn_8011D390 = .text:0x8011D390; // type:function size:0x4 -fn_8011D394 = .text:0x8011D394; // type:function size:0x4 -fn_8011D398 = .text:0x8011D398; // type:function size:0x4 -fn_8011D39C = .text:0x8011D39C; // type:function size:0x4 -fn_8011D3A0 = .text:0x8011D3A0; // type:function size:0x4 -fn_8011D3A4 = .text:0x8011D3A4; // type:function size:0x4 -fn_8011D3A8 = .text:0x8011D3A8; // type:function size:0x4 -fn_8011D3AC = .text:0x8011D3AC; // type:function size:0x4 -fn_8011D3B0 = .text:0x8011D3B0; // type:function size:0x4 -fn_8011D3B4 = .text:0x8011D3B4; // type:function size:0x4 -fn_8011D3B8 = .text:0x8011D3B8; // type:function size:0x4 -fn_8011D3BC = .text:0x8011D3BC; // type:function size:0x4 -fn_8011D3C0 = .text:0x8011D3C0; // type:function size:0x4 -fn_8011D3C4 = .text:0x8011D3C4; // type:function size:0x4 -fn_8011D3C8 = .text:0x8011D3C8; // type:function size:0x4 -fn_8011D3CC = .text:0x8011D3CC; // type:function size:0x4 -fn_8011D3D0 = .text:0x8011D3D0; // type:function size:0x4 -fn_8011D3D4 = .text:0x8011D3D4; // type:function size:0x4 -fn_8011D3D8 = .text:0x8011D3D8; // type:function size:0x4 -fn_8011D3DC = .text:0x8011D3DC; // type:function size:0x4 -fn_8011D3E0 = .text:0x8011D3E0; // type:function size:0x4 -fn_8011D3E4 = .text:0x8011D3E4; // type:function size:0x4 -fn_8011D3E8 = .text:0x8011D3E8; // type:function size:0x4 -fn_8011D3EC = .text:0x8011D3EC; // type:function size:0x4 -fn_8011D3F0 = .text:0x8011D3F0; // type:function size:0x4 -fn_8011D3F4 = .text:0x8011D3F4; // type:function size:0x4 -fn_8011D3F8 = .text:0x8011D3F8; // type:function size:0x4 -fn_8011D3FC = .text:0x8011D3FC; // type:function size:0x4 -fn_8011D400 = .text:0x8011D400; // type:function size:0x4 -fn_8011D404 = .text:0x8011D404; // type:function size:0x4 -fn_8011D408 = .text:0x8011D408; // type:function size:0x4 -fn_8011D40C = .text:0x8011D40C; // type:function size:0x4 -fn_8011D410 = .text:0x8011D410; // type:function size:0x4 -fn_8011D414 = .text:0x8011D414; // type:function size:0x4 -fn_8011D418 = .text:0x8011D418; // type:function size:0x4 -fn_8011D41C = .text:0x8011D41C; // type:function size:0x4 -fn_8011D420 = .text:0x8011D420; // type:function size:0x4 -fn_8011D424 = .text:0x8011D424; // type:function size:0x4 -fn_8011D428 = .text:0x8011D428; // type:function size:0x4 -fn_8011D42C = .text:0x8011D42C; // type:function size:0x4 -fn_8011D430 = .text:0x8011D430; // type:function size:0x4 -fn_8011D434 = .text:0x8011D434; // type:function size:0x4 -fn_8011D438 = .text:0x8011D438; // type:function size:0x4 -fn_8011D43C = .text:0x8011D43C; // type:function size:0x4 -fn_8011D440 = .text:0x8011D440; // type:function size:0x4 -fn_8011D444 = .text:0x8011D444; // type:function size:0x4 -fn_8011D448 = .text:0x8011D448; // type:function size:0x4 -fn_8011D44C = .text:0x8011D44C; // type:function size:0x4 -fn_8011D450 = .text:0x8011D450; // type:function size:0x4 -fn_8011D454 = .text:0x8011D454; // type:function size:0x4 -fn_8011D458 = .text:0x8011D458; // type:function size:0x4 -fn_8011D45C = .text:0x8011D45C; // type:function size:0x4 -fn_8011D460 = .text:0x8011D460; // type:function size:0x4 -fn_8011D464 = .text:0x8011D464; // type:function size:0x4 -fn_8011D468 = .text:0x8011D468; // type:function size:0x4 -fn_8011D46C = .text:0x8011D46C; // type:function size:0x4 -fn_8011D470 = .text:0x8011D470; // type:function size:0x4 -fn_8011D474 = .text:0x8011D474; // type:function size:0x4 -fn_8011D478 = .text:0x8011D478; // type:function size:0x4 -fn_8011D47C = .text:0x8011D47C; // type:function size:0x4 -fn_8011D480 = .text:0x8011D480; // type:function size:0x4 -fn_8011D484 = .text:0x8011D484; // type:function size:0x4 -fn_8011D488 = .text:0x8011D488; // type:function size:0x4 -fn_8011D48C = .text:0x8011D48C; // type:function size:0x4 -fn_8011D490 = .text:0x8011D490; // type:function size:0x4 -fn_8011D494 = .text:0x8011D494; // type:function size:0x4 -fn_8011D498 = .text:0x8011D498; // type:function size:0x4 -fn_8011D49C = .text:0x8011D49C; // type:function size:0x4 -fn_8011D4A0 = .text:0x8011D4A0; // type:function size:0x4 -fn_8011D4A4 = .text:0x8011D4A4; // type:function size:0x4 -fn_8011D4A8 = .text:0x8011D4A8; // type:function size:0x4 -fn_8011D4AC = .text:0x8011D4AC; // type:function size:0x4 -fn_8011D4B0 = .text:0x8011D4B0; // type:function size:0x4 -fn_8011D4B4 = .text:0x8011D4B4; // type:function size:0x4 -fn_8011D4B8 = .text:0x8011D4B8; // type:function size:0x4 -fn_8011D4BC = .text:0x8011D4BC; // type:function size:0x4 -fn_8011D4C0 = .text:0x8011D4C0; // type:function size:0x4 -fn_8011D4C4 = .text:0x8011D4C4; // type:function size:0x4 -fn_8011D4C8 = .text:0x8011D4C8; // type:function size:0x4 -fn_8011D4CC = .text:0x8011D4CC; // type:function size:0x4 -fn_8011D4D0 = .text:0x8011D4D0; // type:function size:0x4 -fn_8011D4D4 = .text:0x8011D4D4; // type:function size:0x4 -fn_8011D4D8 = .text:0x8011D4D8; // type:function size:0x4 -fn_8011D4DC = .text:0x8011D4DC; // type:function size:0x4 -fn_8011D4E0 = .text:0x8011D4E0; // type:function size:0x4 -fn_8011D4E4 = .text:0x8011D4E4; // type:function size:0x4 -fn_8011D4E8 = .text:0x8011D4E8; // type:function size:0x4 -fn_8011D4EC = .text:0x8011D4EC; // type:function size:0x4 -fn_8011D4F0 = .text:0x8011D4F0; // type:function size:0x4 -fn_8011D4F4 = .text:0x8011D4F4; // type:function size:0x4 -fn_8011D4F8 = .text:0x8011D4F8; // type:function size:0x4 -fn_8011D4FC = .text:0x8011D4FC; // type:function size:0x4 -fn_8011D500 = .text:0x8011D500; // type:function size:0x4 -fn_8011D504 = .text:0x8011D504; // type:function size:0x4 -fn_8011D508 = .text:0x8011D508; // type:function size:0x4 -fn_8011D50C = .text:0x8011D50C; // type:function size:0x4 -fn_8011D510 = .text:0x8011D510; // type:function size:0x4 -fn_8011D514 = .text:0x8011D514; // type:function size:0x4 -fn_8011D518 = .text:0x8011D518; // type:function size:0x4 -fn_8011D51C = .text:0x8011D51C; // type:function size:0x4 -fn_8011D520 = .text:0x8011D520; // type:function size:0x4 -fn_8011D524 = .text:0x8011D524; // type:function size:0x4 -fn_8011D528 = .text:0x8011D528; // type:function size:0x4 -fn_8011D52C = .text:0x8011D52C; // type:function size:0x4 -fn_8011D530 = .text:0x8011D530; // type:function size:0x4 -fn_8011D534 = .text:0x8011D534; // type:function size:0x4 -fn_8011D538 = .text:0x8011D538; // type:function size:0x4 -fn_8011D53C = .text:0x8011D53C; // type:function size:0x4 -fn_8011D540 = .text:0x8011D540; // type:function size:0x4 -fn_8011D544 = .text:0x8011D544; // type:function size:0x4 -fn_8011D548 = .text:0x8011D548; // type:function size:0x4 -fn_8011D54C = .text:0x8011D54C; // type:function size:0x4 -fn_8011D550 = .text:0x8011D550; // type:function size:0x4 -fn_8011D554 = .text:0x8011D554; // type:function size:0x4 -fn_8011D558 = .text:0x8011D558; // type:function size:0x4 -fn_8011D55C = .text:0x8011D55C; // type:function size:0x4 -fn_8011D560 = .text:0x8011D560; // type:function size:0x4 -fn_8011D564 = .text:0x8011D564; // type:function size:0x4 -fn_8011D568 = .text:0x8011D568; // type:function size:0x4 -fn_8011D56C = .text:0x8011D56C; // type:function size:0x4 -fn_8011D570 = .text:0x8011D570; // type:function size:0x4 -fn_8011D574 = .text:0x8011D574; // type:function size:0x4 -fn_8011D578 = .text:0x8011D578; // type:function size:0x4 -fn_8011D57C = .text:0x8011D57C; // type:function size:0x4 -fn_8011D580 = .text:0x8011D580; // type:function size:0x4 -fn_8011D584 = .text:0x8011D584; // type:function size:0x4 -fn_8011D588 = .text:0x8011D588; // type:function size:0x4 -fn_8011D58C = .text:0x8011D58C; // type:function size:0x4 -fn_8011D590 = .text:0x8011D590; // type:function size:0x4 -fn_8011D594 = .text:0x8011D594; // type:function size:0x4 -fn_8011D598 = .text:0x8011D598; // type:function size:0x4 -fn_8011D59C = .text:0x8011D59C; // type:function size:0x4 -fn_8011D5A0 = .text:0x8011D5A0; // type:function size:0x4 -fn_8011D5A4 = .text:0x8011D5A4; // type:function size:0x4 -fn_8011D5A8 = .text:0x8011D5A8; // type:function size:0x4 -fn_8011D5AC = .text:0x8011D5AC; // type:function size:0x4 -fn_8011D5B0 = .text:0x8011D5B0; // type:function size:0x4 -fn_8011D5B4 = .text:0x8011D5B4; // type:function size:0x4 -fn_8011D5B8 = .text:0x8011D5B8; // type:function size:0x4 -fn_8011D5BC = .text:0x8011D5BC; // type:function size:0x4 -fn_8011D5C0 = .text:0x8011D5C0; // type:function size:0x4 -fn_8011D5C4 = .text:0x8011D5C4; // type:function size:0x4 -fn_8011D5C8 = .text:0x8011D5C8; // type:function size:0x4 -fn_8011D5CC = .text:0x8011D5CC; // type:function size:0x4 -fn_8011D5D0 = .text:0x8011D5D0; // type:function size:0x4 -fn_8011D5D4 = .text:0x8011D5D4; // type:function size:0x4 -fn_8011D5D8 = .text:0x8011D5D8; // type:function size:0x4 -fn_8011D5DC = .text:0x8011D5DC; // type:function size:0x4 -fn_8011D5E0 = .text:0x8011D5E0; // type:function size:0x4 -fn_8011D5E4 = .text:0x8011D5E4; // type:function size:0x4 -fn_8011D5E8 = .text:0x8011D5E8; // type:function size:0x4 -fn_8011D5EC = .text:0x8011D5EC; // type:function size:0x4 -fn_8011D5F0 = .text:0x8011D5F0; // type:function size:0x4 -fn_8011D5F4 = .text:0x8011D5F4; // type:function size:0x4 -fn_8011D5F8 = .text:0x8011D5F8; // type:function size:0x4 -fn_8011D5FC = .text:0x8011D5FC; // type:function size:0x4 -fn_8011D600 = .text:0x8011D600; // type:function size:0x4 -fn_8011D604 = .text:0x8011D604; // type:function size:0x4 -fn_8011D608 = .text:0x8011D608; // type:function size:0x4 -fn_8011D60C = .text:0x8011D60C; // type:function size:0x4 -fn_8011D610 = .text:0x8011D610; // type:function size:0x4 -fn_8011D614 = .text:0x8011D614; // type:function size:0x4 -fn_8011D618 = .text:0x8011D618; // type:function size:0x4 -fn_8011D61C = .text:0x8011D61C; // type:function size:0x4 -fn_8011D620 = .text:0x8011D620; // type:function size:0x4 -fn_8011D624 = .text:0x8011D624; // type:function size:0x4 -fn_8011D628 = .text:0x8011D628; // type:function size:0x4 -fn_8011D62C = .text:0x8011D62C; // type:function size:0x4 -fn_8011D630 = .text:0x8011D630; // type:function size:0x4 -fn_8011D634 = .text:0x8011D634; // type:function size:0x4 -fn_8011D638 = .text:0x8011D638; // type:function size:0x4 -fn_8011D63C = .text:0x8011D63C; // type:function size:0x4 -fn_8011D640 = .text:0x8011D640; // type:function size:0x4 -fn_8011D644 = .text:0x8011D644; // type:function size:0x4 -fn_8011D648 = .text:0x8011D648; // type:function size:0x4 -fn_8011D64C = .text:0x8011D64C; // type:function size:0x4 -fn_8011D650 = .text:0x8011D650; // type:function size:0x4 -fn_8011D654 = .text:0x8011D654; // type:function size:0x4 -fn_8011D658 = .text:0x8011D658; // type:function size:0x4 -fn_8011D65C = .text:0x8011D65C; // type:function size:0x4 -fn_8011D660 = .text:0x8011D660; // type:function size:0x4 -fn_8011D664 = .text:0x8011D664; // type:function size:0x4 -fn_8011D668 = .text:0x8011D668; // type:function size:0x4 -fn_8011D66C = .text:0x8011D66C; // type:function size:0x4 -fn_8011D670 = .text:0x8011D670; // type:function size:0x4 -fn_8011D674 = .text:0x8011D674; // type:function size:0x4 -fn_8011D678 = .text:0x8011D678; // type:function size:0x4 -fn_8011D67C = .text:0x8011D67C; // type:function size:0x4 -fn_8011D680 = .text:0x8011D680; // type:function size:0x4 -fn_8011D684 = .text:0x8011D684; // type:function size:0x4 -fn_8011D688 = .text:0x8011D688; // type:function size:0x4 -fn_8011D68C = .text:0x8011D68C; // type:function size:0x4 -fn_8011D690 = .text:0x8011D690; // type:function size:0x4 -fn_8011D694 = .text:0x8011D694; // type:function size:0x4 -fn_8011D698 = .text:0x8011D698; // type:function size:0x4 -fn_8011D69C = .text:0x8011D69C; // type:function size:0x4 -fn_8011D6A0 = .text:0x8011D6A0; // type:function size:0x4 -fn_8011D6A4 = .text:0x8011D6A4; // type:function size:0x4 -fn_8011D6A8 = .text:0x8011D6A8; // type:function size:0x4 -fn_8011D6AC = .text:0x8011D6AC; // type:function size:0x4 -fn_8011D6B0 = .text:0x8011D6B0; // type:function size:0x4 -fn_8011D6B4 = .text:0x8011D6B4; // type:function size:0x4 -fn_8011D6B8 = .text:0x8011D6B8; // type:function size:0x4 -fn_8011D6BC = .text:0x8011D6BC; // type:function size:0x4 -fn_8011D6C0 = .text:0x8011D6C0; // type:function size:0x4 -fn_8011D6C4 = .text:0x8011D6C4; // type:function size:0x4 -fn_8011D6C8 = .text:0x8011D6C8; // type:function size:0x4 -fn_8011D6CC = .text:0x8011D6CC; // type:function size:0x4 -fn_8011D6D0 = .text:0x8011D6D0; // type:function size:0x4 -fn_8011D6D4 = .text:0x8011D6D4; // type:function size:0x4 -fn_8011D6D8 = .text:0x8011D6D8; // type:function size:0x4 -fn_8011D6DC = .text:0x8011D6DC; // type:function size:0x4 -fn_8011D6E0 = .text:0x8011D6E0; // type:function size:0x4 -fn_8011D6E4 = .text:0x8011D6E4; // type:function size:0x4 -fn_8011D6E8 = .text:0x8011D6E8; // type:function size:0x4 -fn_8011D6EC = .text:0x8011D6EC; // type:function size:0x4 -fn_8011D6F0 = .text:0x8011D6F0; // type:function size:0x4 -fn_8011D6F4 = .text:0x8011D6F4; // type:function size:0x4 -fn_8011D6F8 = .text:0x8011D6F8; // type:function size:0x4 -fn_8011D6FC = .text:0x8011D6FC; // type:function size:0x4 -fn_8011D700 = .text:0x8011D700; // type:function size:0x4 -fn_8011D704 = .text:0x8011D704; // type:function size:0x4 -fn_8011D708 = .text:0x8011D708; // type:function size:0x4 -fn_8011D70C = .text:0x8011D70C; // type:function size:0x4 -fn_8011D710 = .text:0x8011D710; // type:function size:0x4 -fn_8011D714 = .text:0x8011D714; // type:function size:0x4 -fn_8011D718 = .text:0x8011D718; // type:function size:0x4 -fn_8011D71C = .text:0x8011D71C; // type:function size:0x4 -fn_8011D720 = .text:0x8011D720; // type:function size:0x4 -fn_8011D724 = .text:0x8011D724; // type:function size:0x4 -fn_8011D728 = .text:0x8011D728; // type:function size:0x4 -fn_8011D72C = .text:0x8011D72C; // type:function size:0x4 -fn_8011D730 = .text:0x8011D730; // type:function size:0x4 -fn_8011D734 = .text:0x8011D734; // type:function size:0x4 -fn_8011D738 = .text:0x8011D738; // type:function size:0x4 -fn_8011D73C = .text:0x8011D73C; // type:function size:0x4 -fn_8011D740 = .text:0x8011D740; // type:function size:0x4 -fn_8011D744 = .text:0x8011D744; // type:function size:0x4 -fn_8011D748 = .text:0x8011D748; // type:function size:0x4 -fn_8011D74C = .text:0x8011D74C; // type:function size:0x4 -fn_8011D750 = .text:0x8011D750; // type:function size:0x4 -fn_8011D754 = .text:0x8011D754; // type:function size:0x4 -fn_8011D758 = .text:0x8011D758; // type:function size:0x4 -fn_8011D75C = .text:0x8011D75C; // type:function size:0x4 -fn_8011D760 = .text:0x8011D760; // type:function size:0x4 -fn_8011D764 = .text:0x8011D764; // type:function size:0x4 -fn_8011D768 = .text:0x8011D768; // type:function size:0x4 -fn_8011D76C = .text:0x8011D76C; // type:function size:0x4 -fn_8011D770 = .text:0x8011D770; // type:function size:0x4 -fn_8011D774 = .text:0x8011D774; // type:function size:0x4 -fn_8011D778 = .text:0x8011D778; // type:function size:0x4 -fn_8011D77C = .text:0x8011D77C; // type:function size:0x4 -fn_8011D780 = .text:0x8011D780; // type:function size:0x4 -fn_8011D784 = .text:0x8011D784; // type:function size:0x4 -fn_8011D788 = .text:0x8011D788; // type:function size:0x4 -fn_8011D78C = .text:0x8011D78C; // type:function size:0x4 -fn_8011D790 = .text:0x8011D790; // type:function size:0x4 -fn_8011D794 = .text:0x8011D794; // type:function size:0x4 -fn_8011D798 = .text:0x8011D798; // type:function size:0x4 -fn_8011D79C = .text:0x8011D79C; // type:function size:0x4 -fn_8011D7A0 = .text:0x8011D7A0; // type:function size:0x4 -fn_8011D7A4 = .text:0x8011D7A4; // type:function size:0x4 -fn_8011D7A8 = .text:0x8011D7A8; // type:function size:0x4 -fn_8011D7AC = .text:0x8011D7AC; // type:function size:0x4 -fn_8011D7B0 = .text:0x8011D7B0; // type:function size:0x4 -fn_8011D7B4 = .text:0x8011D7B4; // type:function size:0x4 -fn_8011D7B8 = .text:0x8011D7B8; // type:function size:0x4 -fn_8011D7BC = .text:0x8011D7BC; // type:function size:0x4 -fn_8011D7C0 = .text:0x8011D7C0; // type:function size:0x4 -fn_8011D7C4 = .text:0x8011D7C4; // type:function size:0x4 -fn_8011D7C8 = .text:0x8011D7C8; // type:function size:0x4 -fn_8011D7CC = .text:0x8011D7CC; // type:function size:0x4 -fn_8011D7D0 = .text:0x8011D7D0; // type:function size:0x4 -fn_8011D7D4 = .text:0x8011D7D4; // type:function size:0x4 -fn_8011D7D8 = .text:0x8011D7D8; // type:function size:0x4 -fn_8011D7DC = .text:0x8011D7DC; // type:function size:0x4 -fn_8011D7E0 = .text:0x8011D7E0; // type:function size:0x4 -fn_8011D7E4 = .text:0x8011D7E4; // type:function size:0x4 -fn_8011D7E8 = .text:0x8011D7E8; // type:function size:0x4 -fn_8011D7EC = .text:0x8011D7EC; // type:function size:0x4 -fn_8011D7F0 = .text:0x8011D7F0; // type:function size:0x4 -fn_8011D7F4 = .text:0x8011D7F4; // type:function size:0x4 -fn_8011D7F8 = .text:0x8011D7F8; // type:function size:0x4 -fn_8011D7FC = .text:0x8011D7FC; // type:function size:0x4 -fn_8011D800 = .text:0x8011D800; // type:function size:0x4 -fn_8011D804 = .text:0x8011D804; // type:function size:0x4 -fn_8011D808 = .text:0x8011D808; // type:function size:0x4 -fn_8011D80C = .text:0x8011D80C; // type:function size:0x4 -fn_8011D810 = .text:0x8011D810; // type:function size:0x4 -fn_8011D814 = .text:0x8011D814; // type:function size:0x4 -fn_8011D818 = .text:0x8011D818; // type:function size:0x4 -fn_8011D81C = .text:0x8011D81C; // type:function size:0x4 -fn_8011D820 = .text:0x8011D820; // type:function size:0x4 -fn_8011D824 = .text:0x8011D824; // type:function size:0x4 -fn_8011D828 = .text:0x8011D828; // type:function size:0x4 -fn_8011D82C = .text:0x8011D82C; // type:function size:0x4 -fn_8011D830 = .text:0x8011D830; // type:function size:0x4 -fn_8011D834 = .text:0x8011D834; // type:function size:0x4 -fn_8011D838 = .text:0x8011D838; // type:function size:0x4 -fn_8011D83C = .text:0x8011D83C; // type:function size:0x4 -fn_8011D840 = .text:0x8011D840; // type:function size:0x4 -fn_8011D844 = .text:0x8011D844; // type:function size:0x4 -fn_8011D848 = .text:0x8011D848; // type:function size:0x4 -fn_8011D84C = .text:0x8011D84C; // type:function size:0x4 -fn_8011D850 = .text:0x8011D850; // type:function size:0x4 -fn_8011D854 = .text:0x8011D854; // type:function size:0x4 -fn_8011D858 = .text:0x8011D858; // type:function size:0x4 -fn_8011D85C = .text:0x8011D85C; // type:function size:0x4 -fn_8011D860 = .text:0x8011D860; // type:function size:0x4 -fn_8011D864 = .text:0x8011D864; // type:function size:0x4 -fn_8011D868 = .text:0x8011D868; // type:function size:0x4 -fn_8011D86C = .text:0x8011D86C; // type:function size:0x4 -fn_8011D870 = .text:0x8011D870; // type:function size:0x4 -fn_8011D874 = .text:0x8011D874; // type:function size:0x4 -fn_8011D878 = .text:0x8011D878; // type:function size:0x4 -fn_8011D87C = .text:0x8011D87C; // type:function size:0x4 -fn_8011D880 = .text:0x8011D880; // type:function size:0x4 -fn_8011D884 = .text:0x8011D884; // type:function size:0x4 -fn_8011D888 = .text:0x8011D888; // type:function size:0x4 -fn_8011D88C = .text:0x8011D88C; // type:function size:0x4 -fn_8011D890 = .text:0x8011D890; // type:function size:0x4 -fn_8011D894 = .text:0x8011D894; // type:function size:0x4 -fn_8011D898 = .text:0x8011D898; // type:function size:0x4 -fn_8011D89C = .text:0x8011D89C; // type:function size:0x4 -fn_8011D8A0 = .text:0x8011D8A0; // type:function size:0x4 -fn_8011D8A4 = .text:0x8011D8A4; // type:function size:0x4 -fn_8011D8A8 = .text:0x8011D8A8; // type:function size:0x4 -fn_8011D8AC = .text:0x8011D8AC; // type:function size:0x4 -fn_8011D8B0 = .text:0x8011D8B0; // type:function size:0x4 -fn_8011D8B4 = .text:0x8011D8B4; // type:function size:0x4 -fn_8011D8B8 = .text:0x8011D8B8; // type:function size:0x4 -fn_8011D8BC = .text:0x8011D8BC; // type:function size:0x4 -fn_8011D8C0 = .text:0x8011D8C0; // type:function size:0x4 -fn_8011D8C4 = .text:0x8011D8C4; // type:function size:0x4 -fn_8011D8C8 = .text:0x8011D8C8; // type:function size:0x4 -fn_8011D8CC = .text:0x8011D8CC; // type:function size:0x4 -fn_8011D8D0 = .text:0x8011D8D0; // type:function size:0x4 -fn_8011D8D4 = .text:0x8011D8D4; // type:function size:0x4 -fn_8011D8D8 = .text:0x8011D8D8; // type:function size:0x4 -fn_8011D8DC = .text:0x8011D8DC; // type:function size:0x4 -fn_8011D8E0 = .text:0x8011D8E0; // type:function size:0x4 -fn_8011D8E4 = .text:0x8011D8E4; // type:function size:0x4 -fn_8011D8E8 = .text:0x8011D8E8; // type:function size:0x4 -fn_8011D8EC = .text:0x8011D8EC; // type:function size:0x4 -fn_8011D8F0 = .text:0x8011D8F0; // type:function size:0x4 -fn_8011D8F4 = .text:0x8011D8F4; // type:function size:0x4 -fn_8011D8F8 = .text:0x8011D8F8; // type:function size:0x4 -fn_8011D8FC = .text:0x8011D8FC; // type:function size:0x4 -fn_8011D900 = .text:0x8011D900; // type:function size:0x4 -fn_8011D904 = .text:0x8011D904; // type:function size:0x4 -fn_8011D908 = .text:0x8011D908; // type:function size:0x4 -fn_8011D90C = .text:0x8011D90C; // type:function size:0x4 -fn_8011D910 = .text:0x8011D910; // type:function size:0x4 -fn_8011D914 = .text:0x8011D914; // type:function size:0x4 -fn_8011D918 = .text:0x8011D918; // type:function size:0x4 -fn_8011D91C = .text:0x8011D91C; // type:function size:0x4 -fn_8011D920 = .text:0x8011D920; // type:function size:0x4 -fn_8011D924 = .text:0x8011D924; // type:function size:0x4 -fn_8011D928 = .text:0x8011D928; // type:function size:0x4 -fn_8011D92C = .text:0x8011D92C; // type:function size:0x4 -fn_8011D930 = .text:0x8011D930; // type:function size:0x4 -fn_8011D934 = .text:0x8011D934; // type:function size:0x4 -fn_8011D938 = .text:0x8011D938; // type:function size:0x4 -fn_8011D93C = .text:0x8011D93C; // type:function size:0x4 -fn_8011D940 = .text:0x8011D940; // type:function size:0x4 -fn_8011D944 = .text:0x8011D944; // type:function size:0x4 -fn_8011D948 = .text:0x8011D948; // type:function size:0x4 -fn_8011D94C = .text:0x8011D94C; // type:function size:0x4 -fn_8011D950 = .text:0x8011D950; // type:function size:0x4 -fn_8011D954 = .text:0x8011D954; // type:function size:0x4 -fn_8011D958 = .text:0x8011D958; // type:function size:0x4 -fn_8011D95C = .text:0x8011D95C; // type:function size:0x4 -fn_8011D960 = .text:0x8011D960; // type:function size:0x4 -fn_8011D964 = .text:0x8011D964; // type:function size:0x4 -fn_8011D968 = .text:0x8011D968; // type:function size:0x4 -fn_8011D96C = .text:0x8011D96C; // type:function size:0x4 -fn_8011D970 = .text:0x8011D970; // type:function size:0x4 -fn_8011D974 = .text:0x8011D974; // type:function size:0x4 -fn_8011D978 = .text:0x8011D978; // type:function size:0x4 -fn_8011D97C = .text:0x8011D97C; // type:function size:0x4 -fn_8011D980 = .text:0x8011D980; // type:function size:0x4 -fn_8011D984 = .text:0x8011D984; // type:function size:0x4 -fn_8011D988 = .text:0x8011D988; // type:function size:0x4 -fn_8011D98C = .text:0x8011D98C; // type:function size:0x4 -fn_8011D990 = .text:0x8011D990; // type:function size:0x4 -fn_8011D994 = .text:0x8011D994; // type:function size:0x4 -fn_8011D998 = .text:0x8011D998; // type:function size:0x4 -fn_8011D99C = .text:0x8011D99C; // type:function size:0x4 -fn_8011D9A0 = .text:0x8011D9A0; // type:function size:0x4 -fn_8011D9A4 = .text:0x8011D9A4; // type:function size:0x4 -fn_8011D9A8 = .text:0x8011D9A8; // type:function size:0x4 -fn_8011D9AC = .text:0x8011D9AC; // type:function size:0x4 -fn_8011D9B0 = .text:0x8011D9B0; // type:function size:0x4 -fn_8011D9B4 = .text:0x8011D9B4; // type:function size:0x4 -fn_8011D9B8 = .text:0x8011D9B8; // type:function size:0x4 -fn_8011D9BC = .text:0x8011D9BC; // type:function size:0x4 -fn_8011D9C0 = .text:0x8011D9C0; // type:function size:0x4 -fn_8011D9C4 = .text:0x8011D9C4; // type:function size:0x4 -fn_8011D9C8 = .text:0x8011D9C8; // type:function size:0x4 -fn_8011D9CC = .text:0x8011D9CC; // type:function size:0x4 -fn_8011D9D0 = .text:0x8011D9D0; // type:function size:0x4 -fn_8011D9D4 = .text:0x8011D9D4; // type:function size:0x4 -fn_8011D9D8 = .text:0x8011D9D8; // type:function size:0x4 -fn_8011D9DC = .text:0x8011D9DC; // type:function size:0x4 -fn_8011D9E0 = .text:0x8011D9E0; // type:function size:0x4 -fn_8011D9E4 = .text:0x8011D9E4; // type:function size:0x4 -fn_8011D9E8 = .text:0x8011D9E8; // type:function size:0x4 -fn_8011D9EC = .text:0x8011D9EC; // type:function size:0x4 -fn_8011D9F0 = .text:0x8011D9F0; // type:function size:0x4 -fn_8011D9F4 = .text:0x8011D9F4; // type:function size:0x4 -fn_8011D9F8 = .text:0x8011D9F8; // type:function size:0x4 -fn_8011D9FC = .text:0x8011D9FC; // type:function size:0x4 -fn_8011DA00 = .text:0x8011DA00; // type:function size:0x4 -fn_8011DA04 = .text:0x8011DA04; // type:function size:0x4 -fn_8011DA08 = .text:0x8011DA08; // type:function size:0x4 -fn_8011DA0C = .text:0x8011DA0C; // type:function size:0x4 -fn_8011DA10 = .text:0x8011DA10; // type:function size:0x4 -fn_8011DA14 = .text:0x8011DA14; // type:function size:0x4 -fn_8011DA18 = .text:0x8011DA18; // type:function size:0x4 -fn_8011DA1C = .text:0x8011DA1C; // type:function size:0x4 -fn_8011DA20 = .text:0x8011DA20; // type:function size:0x4 -fn_8011DA24 = .text:0x8011DA24; // type:function size:0x4 -fn_8011DA28 = .text:0x8011DA28; // type:function size:0x4 -fn_8011DA2C = .text:0x8011DA2C; // type:function size:0x4 -fn_8011DA30 = .text:0x8011DA30; // type:function size:0x4 -fn_8011DA34 = .text:0x8011DA34; // type:function size:0x4 -fn_8011DA38 = .text:0x8011DA38; // type:function size:0x4 -fn_8011DA3C = .text:0x8011DA3C; // type:function size:0x4 -fn_8011DA40 = .text:0x8011DA40; // type:function size:0x4 -fn_8011DA44 = .text:0x8011DA44; // type:function size:0x4 -fn_8011DA48 = .text:0x8011DA48; // type:function size:0x4 -fn_8011DA4C = .text:0x8011DA4C; // type:function size:0x4 -fn_8011DA50 = .text:0x8011DA50; // type:function size:0x4 -fn_8011DA54 = .text:0x8011DA54; // type:function size:0x4 -fn_8011DA58 = .text:0x8011DA58; // type:function size:0x4 -fn_8011DA5C = .text:0x8011DA5C; // type:function size:0x4 -fn_8011DA60 = .text:0x8011DA60; // type:function size:0x4 -fn_8011DA64 = .text:0x8011DA64; // type:function size:0x4 -fn_8011DA68 = .text:0x8011DA68; // type:function size:0x4 -fn_8011DA6C = .text:0x8011DA6C; // type:function size:0x4 -fn_8011DA70 = .text:0x8011DA70; // type:function size:0x4 -fn_8011DA74 = .text:0x8011DA74; // type:function size:0x4 -fn_8011DA78 = .text:0x8011DA78; // type:function size:0x4 -fn_8011DA7C = .text:0x8011DA7C; // type:function size:0x4 -fn_8011DA80 = .text:0x8011DA80; // type:function size:0x4 -fn_8011DA84 = .text:0x8011DA84; // type:function size:0x4 -fn_8011DA88 = .text:0x8011DA88; // type:function size:0x4 -fn_8011DA8C = .text:0x8011DA8C; // type:function size:0x4 -fn_8011DA90 = .text:0x8011DA90; // type:function size:0x4 -fn_8011DA94 = .text:0x8011DA94; // type:function size:0x4 -fn_8011DA98 = .text:0x8011DA98; // type:function size:0x4 -fn_8011DA9C = .text:0x8011DA9C; // type:function size:0x4 -fn_8011DAA0 = .text:0x8011DAA0; // type:function size:0x4 -fn_8011DAA4 = .text:0x8011DAA4; // type:function size:0x4 -fn_8011DAA8 = .text:0x8011DAA8; // type:function size:0x4 -fn_8011DAAC = .text:0x8011DAAC; // type:function size:0x4 -fn_8011DAB0 = .text:0x8011DAB0; // type:function size:0x4 -fn_8011DAB4 = .text:0x8011DAB4; // type:function size:0x4 -fn_8011DAB8 = .text:0x8011DAB8; // type:function size:0x4 -fn_8011DABC = .text:0x8011DABC; // type:function size:0x4 -fn_8011DAC0 = .text:0x8011DAC0; // type:function size:0x4 -fn_8011DAC4 = .text:0x8011DAC4; // type:function size:0x4 -fn_8011DAC8 = .text:0x8011DAC8; // type:function size:0x4 -fn_8011DACC = .text:0x8011DACC; // type:function size:0x4 -fn_8011DAD0 = .text:0x8011DAD0; // type:function size:0x4 -fn_8011DAD4 = .text:0x8011DAD4; // type:function size:0x4 -fn_8011DAD8 = .text:0x8011DAD8; // type:function size:0x4 -fn_8011DADC = .text:0x8011DADC; // type:function size:0x4 -fn_8011DAE0 = .text:0x8011DAE0; // type:function size:0x4 -fn_8011DAE4 = .text:0x8011DAE4; // type:function size:0x4 -fn_8011DAE8 = .text:0x8011DAE8; // type:function size:0x4 -fn_8011DAEC = .text:0x8011DAEC; // type:function size:0x4 -fn_8011DAF0 = .text:0x8011DAF0; // type:function size:0x4 -fn_8011DAF4 = .text:0x8011DAF4; // type:function size:0x4 -fn_8011DAF8 = .text:0x8011DAF8; // type:function size:0x4 -fn_8011DAFC = .text:0x8011DAFC; // type:function size:0x4 -fn_8011DB00 = .text:0x8011DB00; // type:function size:0x4 -fn_8011DB04 = .text:0x8011DB04; // type:function size:0x4 -fn_8011DB08 = .text:0x8011DB08; // type:function size:0x4 -fn_8011DB0C = .text:0x8011DB0C; // type:function size:0x4 -fn_8011DB10 = .text:0x8011DB10; // type:function size:0x4 -fn_8011DB14 = .text:0x8011DB14; // type:function size:0x4 -fn_8011DB18 = .text:0x8011DB18; // type:function size:0x4 -fn_8011DB1C = .text:0x8011DB1C; // type:function size:0x4 -fn_8011DB20 = .text:0x8011DB20; // type:function size:0x4 -fn_8011DB24 = .text:0x8011DB24; // type:function size:0x4 -fn_8011DB28 = .text:0x8011DB28; // type:function size:0x4 -fn_8011DB2C = .text:0x8011DB2C; // type:function size:0x4 -fn_8011DB30 = .text:0x8011DB30; // type:function size:0x4 -fn_8011DB34 = .text:0x8011DB34; // type:function size:0x4 -fn_8011DB38 = .text:0x8011DB38; // type:function size:0x4 -fn_8011DB3C = .text:0x8011DB3C; // type:function size:0x4 -fn_8011DB40 = .text:0x8011DB40; // type:function size:0x4 -fn_8011DB44 = .text:0x8011DB44; // type:function size:0x4 -fn_8011DB48 = .text:0x8011DB48; // type:function size:0x4 -fn_8011DB4C = .text:0x8011DB4C; // type:function size:0x4 -fn_8011DB50 = .text:0x8011DB50; // type:function size:0x4 -fn_8011DB54 = .text:0x8011DB54; // type:function size:0x4 -fn_8011DB58 = .text:0x8011DB58; // type:function size:0x4 -fn_8011DB5C = .text:0x8011DB5C; // type:function size:0x4 -fn_8011DB60 = .text:0x8011DB60; // type:function size:0x4 -fn_8011DB64 = .text:0x8011DB64; // type:function size:0x4 -fn_8011DB68 = .text:0x8011DB68; // type:function size:0x4 -fn_8011DB6C = .text:0x8011DB6C; // type:function size:0x4 -fn_8011DB70 = .text:0x8011DB70; // type:function size:0x4 -fn_8011DB74 = .text:0x8011DB74; // type:function size:0x4 -fn_8011DB78 = .text:0x8011DB78; // type:function size:0x4 -fn_8011DB7C = .text:0x8011DB7C; // type:function size:0x4 -fn_8011DB80 = .text:0x8011DB80; // type:function size:0x4 -fn_8011DB84 = .text:0x8011DB84; // type:function size:0x4 -fn_8011DB88 = .text:0x8011DB88; // type:function size:0x4 -fn_8011DB8C = .text:0x8011DB8C; // type:function size:0x4 -fn_8011DB90 = .text:0x8011DB90; // type:function size:0x4 -fn_8011DB94 = .text:0x8011DB94; // type:function size:0x4 -fn_8011DB98 = .text:0x8011DB98; // type:function size:0x4 -fn_8011DB9C = .text:0x8011DB9C; // type:function size:0x4 -fn_8011DBA0 = .text:0x8011DBA0; // type:function size:0x4 -fn_8011DBA4 = .text:0x8011DBA4; // type:function size:0x4 -fn_8011DBA8 = .text:0x8011DBA8; // type:function size:0x4 -fn_8011DBAC = .text:0x8011DBAC; // type:function size:0x4 -fn_8011DBB0 = .text:0x8011DBB0; // type:function size:0x4 -fn_8011DBB4 = .text:0x8011DBB4; // type:function size:0x4 -fn_8011DBB8 = .text:0x8011DBB8; // type:function size:0x4 -fn_8011DBBC = .text:0x8011DBBC; // type:function size:0x4 -fn_8011DBC0 = .text:0x8011DBC0; // type:function size:0x4 -fn_8011DBC4 = .text:0x8011DBC4; // type:function size:0x4 -fn_8011DBC8 = .text:0x8011DBC8; // type:function size:0x4 -fn_8011DBCC = .text:0x8011DBCC; // type:function size:0x4 -fn_8011DBD0 = .text:0x8011DBD0; // type:function size:0x4 -fn_8011DBD4 = .text:0x8011DBD4; // type:function size:0x4 -fn_8011DBD8 = .text:0x8011DBD8; // type:function size:0x4 -fn_8011DBDC = .text:0x8011DBDC; // type:function size:0x4 -fn_8011DBE0 = .text:0x8011DBE0; // type:function size:0x4 -fn_8011DBE4 = .text:0x8011DBE4; // type:function size:0x4 -fn_8011DBE8 = .text:0x8011DBE8; // type:function size:0x4 -fn_8011DBEC = .text:0x8011DBEC; // type:function size:0x4 -fn_8011DBF0 = .text:0x8011DBF0; // type:function size:0x4 -fn_8011DBF4 = .text:0x8011DBF4; // type:function size:0x4 -fn_8011DBF8 = .text:0x8011DBF8; // type:function size:0x4 -fn_8011DBFC = .text:0x8011DBFC; // type:function size:0x4 -fn_8011DC00 = .text:0x8011DC00; // type:function size:0x4 -fn_8011DC04 = .text:0x8011DC04; // type:function size:0x4 -fn_8011DC08 = .text:0x8011DC08; // type:function size:0x4 -fn_8011DC0C = .text:0x8011DC0C; // type:function size:0x4 -fn_8011DC10 = .text:0x8011DC10; // type:function size:0x4 -fn_8011DC14 = .text:0x8011DC14; // type:function size:0x4 -fn_8011DC18 = .text:0x8011DC18; // type:function size:0x4 -fn_8011DC1C = .text:0x8011DC1C; // type:function size:0x4 -fn_8011DC20 = .text:0x8011DC20; // type:function size:0x4 -fn_8011DC24 = .text:0x8011DC24; // type:function size:0x4 -fn_8011DC28 = .text:0x8011DC28; // type:function size:0x4 -fn_8011DC2C = .text:0x8011DC2C; // type:function size:0x4 -fn_8011DC30 = .text:0x8011DC30; // type:function size:0x4 -fn_8011DC34 = .text:0x8011DC34; // type:function size:0x4 -fn_8011DC38 = .text:0x8011DC38; // type:function size:0x4 -fn_8011DC3C = .text:0x8011DC3C; // type:function size:0x4 -fn_8011DC40 = .text:0x8011DC40; // type:function size:0x4 -fn_8011DC44 = .text:0x8011DC44; // type:function size:0x4 -fn_8011DC48 = .text:0x8011DC48; // type:function size:0x4 -fn_8011DC4C = .text:0x8011DC4C; // type:function size:0x4 -fn_8011DC50 = .text:0x8011DC50; // type:function size:0x4 -fn_8011DC54 = .text:0x8011DC54; // type:function size:0x4 -fn_8011DC58 = .text:0x8011DC58; // type:function size:0x4 -fn_8011DC5C = .text:0x8011DC5C; // type:function size:0x4 -fn_8011DC60 = .text:0x8011DC60; // type:function size:0x4 -fn_8011DC64 = .text:0x8011DC64; // type:function size:0x4 -fn_8011DC68 = .text:0x8011DC68; // type:function size:0x4 -fn_8011DC6C = .text:0x8011DC6C; // type:function size:0x4 -fn_8011DC70 = .text:0x8011DC70; // type:function size:0x4 -fn_8011DC74 = .text:0x8011DC74; // type:function size:0x4 -fn_8011DC78 = .text:0x8011DC78; // type:function size:0x4 -fn_8011DC7C = .text:0x8011DC7C; // type:function size:0x4 -fn_8011DC80 = .text:0x8011DC80; // type:function size:0x4 -fn_8011DC84 = .text:0x8011DC84; // type:function size:0x4 -fn_8011DC88 = .text:0x8011DC88; // type:function size:0x4 -fn_8011DC8C = .text:0x8011DC8C; // type:function size:0x4 -fn_8011DC90 = .text:0x8011DC90; // type:function size:0x4 -fn_8011DC94 = .text:0x8011DC94; // type:function size:0x4 -fn_8011DC98 = .text:0x8011DC98; // type:function size:0x4 -fn_8011DC9C = .text:0x8011DC9C; // type:function size:0x4 -fn_8011DCA0 = .text:0x8011DCA0; // type:function size:0x4 -fn_8011DCA4 = .text:0x8011DCA4; // type:function size:0x4 +kerent = .text:0x8011CCC4; // type:function size:0xFE4 _ctors = .ctors:0x8011DCC0; // type:label scope:global data:4byte __init_cpp_exceptions_reference = .ctors:0x8011DCC0; // type:object size:0x4 scope:global _dtors = .dtors:0x8011DCE0; // type:label scope:global data:4byte diff --git a/configure.py b/configure.py index 31af66b1..9a4b04fa 100644 --- a/configure.py +++ b/configure.py @@ -397,7 +397,7 @@ config.libs = [ Object(Matching, "game/board/pause.c"), Object(Matching, "game/board/com_path.c"), Object(Matching, "game/board/tutorial.c"), - Object(NonMatching, "game/kerent.c"), + Object(Matching, "game/kerent.c"), ], }, DolphinLib( diff --git a/src/game/code_8003FF68.c b/src/game/code_8003FF68.c index c53d6934..e9abbb62 100644 --- a/src/game/code_8003FF68.c +++ b/src/game/code_8003FF68.c @@ -168,7 +168,7 @@ void fn_80040374(s16 arg0, s16 arg1, s16 arg2, s16 arg3) { Process* process; unkCode_8003FF68* temp_r3; - process = HuPrcChildCreate(fn_8004040C, 1U, 0x1000U, 0, HuPrcCurrentGet()); + process = HuPrcChildCreate(fn_8004040C, 1, 0x1000, 0, HuPrcCurrentGet()); temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkCode_8003FF68), 0x10000000); process->user_data = temp_r3; temp_r3->unk0 = arg0; diff --git a/src/game/kerent.c b/src/game/kerent.c new file mode 100644 index 00000000..f83afec2 --- /dev/null +++ b/src/game/kerent.c @@ -0,0 +1,4074 @@ +void OSDumpStopwatch(void); +void PSVECDotProduct(void); +void PSVECDistance(void); +void PSVECSquareDistance(void); +void VIGetDTVStatus(void); +void OSGetProgressiveMode(void); +void OSSetProgressiveMode(void); +void PSVECSubtract(void); +void PSMTXTranspose(void); +void C_VECReflect(void); +void PSMTXInvXpose(void); +void PSMTXRotRad(void); +void PSMTXRotAxisRad(void); +void PSVECMag(void); +void PSVECScale(void); +void PSMTXMultVecSR(void); +void C_QUATRotAxisRad(void); +void C_QUATMtx(void); +void C_QUATAdd(void); +void C_QUATSlerp(void); +void PSQUATAdd(void); +void PSMTXQuat(void); +void PSQUATMultiply(void); +void PSQUATInverse(void); +void PSQUATNormalize(void); +void OSTicksToCalendarTime(void); +void GXWaitDrawDone(void); +void GXProject(void); +void GXSetProjectionv(void); +void GXGetViewportv(void); +void GXPixModeSync(void); +void GXSetIndTexOrder(void); +void GXSetIndTexMtx(void); +void GXSetTevIndWarp(void); +void GXSetTexCoordScaleManually(void); +void GXSetTevIndTile(void); +void GXNtsc480Prog(void); +void omSetStatBit(void); +void MGSeqDoneCheck(void); +void WipeStatGet(void); +void omMakeGroupEx(void); +void omGetGroupMemberListEx(void); +void MGSeqParamSet(void); +void MGSeqKill(void); +void ClusterAdjustObject(void); +void printWin(void); +void print8(void); +void HuSysVWaitSet(void); +void fn_800401D0(void); +void fn_800402FC(void); +void MGSeqInit(void); +void MGSeqCreate(void); +void omDelObjEx(void); +void MGSeqPosSet(void); +void atan2(void); +void atan2f(void); +void cos(void); +void MGSeqStatGet(void); +void Center(void); +void CRotM(void); +void CenterM(void); +void CZoomM(void); +void omOutViewMulti(void); +void omOutView(void); +void omAddObjEx(void); +void omInitObjMan(void); +void frandmod(void); +void fn_80040374(void); +void SetDefLight(void); +void HuSetVecF(void); +void HuSubVecF(void); +void frandf(void); +void MGSeqSprKill(void); +void mtxRotCat(void); +void Hu3DLayerHookSet(void); +void Hu3DNoSyncSet(void); +void Hu3DModelCreate(void); +void Hu3DModelLink(void); +void Hu3DHookFuncCreate(void); +void Hu3DModelPosSet(void); +void Hu3DModelPosSetV(void); +void Hu3DModelRotSet(void); +void Hu3DModelRotSetV(void); +void Hu3DModelScaleSet(void); +void Hu3DModelScaleSetV(void); +void Hu3DModelKill(void); +void Hu3DModelAllKill(void); +void Hu3DModelAttrSet(void); +void Hu3DModelAttrReset(void); +void Hu3DModelAttrGet(void); +void Hu3DModelMotionAttrGet(void); +void Hu3DBGColorSet(void); +void Hu3DModelCameraSet(void); +void Hu3DModelLayerSet(void); +void Hu3DModelTPLvlSet(void); +void Hu3DModelHookSet(void); +void Hu3DModelHookReset(void); +void Hu3DModelHookObjReset(void); +void Hu3DModelAmbSet(void); +void Hu3DModelShadowDispOn(void); +void Hu3DModelShadowDispOff(void); +void Hu3DModelProjectionSet(void); +void Hu3DModelProjectionReset(void); +void Hu3DModelObjPosGet(void); +void Hu3DModelObjMtxGet(void); +void Hu3DModelHiliteTypeSet(void); +void Hu3DModelReflectTypeSet(void); +void Hu3DModelHiliteMapSet(void); +void HuPadInit(void); +void HuPadRead(void); +void HuPadRumbleSet(void); +void HuPadRumbleStop(void); +void HuPadRumbleAllStop(void); +void HuPadStatGet(void); +void HuPadRumbleGet(void); +void Hu3DCameraCreate(void); +void Hu3DCameraPerspectiveSet(void); +void Hu3DCameraViewportSet(void); +void Hu3DCameraScissorSet(void); +void Hu3DCameraPosSet(void); +void Hu3DCameraKill(void); +void Hu3DCameraPosSetV(void); +void Hu3DCameraAllKill(void); +void Hu3DCameraSet(void); +void Hu3DCameraMotionOn(void); +void Hu3DCameraMotionStart(void); +void Hu3DCameraMotionOff(void); +void Hu3DModelCameraCreate(void); +void Hu3DModelCameraInfoSet(void); +void Hu3DLighInit(void); +void Hu3DGLightCreate(void); +void Hu3DGLightCreateV(void); +void Hu3DGLightKill(void); +void Hu3DLightAllKill(void); +void Hu3DLightSet(void); +void Hu3DGLightSpotSet(void); +void Hu3DGLightInfinitytSet(void); +void Hu3DGLightPointSet(void); +void Hu3DGLightColorSet(void); +void Hu3DGLightPosSetV(void); +void Hu3DGLightPosSet(void); +void Hu3DGLightPosAimSetV(void); +void Hu3DGLightPosAimSet(void); +void Hu3DGLightStaticSet(void); +void Hu3DModelLightInfoSet(void); +void Hu3DReflectMapSet(void); +void Hu3DReflectNoSet(void); +void Hu3DFogSet(void); +void Hu3DFogClear(void); +void Hu3DModelObjPtrGet(void); +void Hu3DModelShadowSet(void); +void Hu3DModelShadowReset(void); +void Hu3DShadowCreate(void); +void Hu3DShadowPosSet(void); +void Hu3DShadowTPLvlSet(void); +void Hu3DModelShadowMapSet(void); +void Hu3DModelShadowMapObjSet(void); +void Hu3DShadowSizeSet(void); +void Hu3DMipMapSet(void); +void Hu3DModelClusterAttrSet(void); +void Hu3DModelClusterAttrReset(void); +void Hu3DLLightCreate(void); +void Hu3DLLightCreateV(void); +void Hu3DLLightSpotSet(void); +void Hu3DLLightInfinitytSet(void); +void Hu3DLLightPointSet(void); +void Hu3DLLightKill(void); +void Hu3DLLightColorSet(void); +void Hu3DLLightPosSetV(void); +void Hu3DLLightPosSet(void); +void Hu3DLLightPosAimSetV(void); +void Hu3DLLightPosAimSet(void); +void Hu3DLLightStaticSet(void); +void Hu3DAnimInit(void); +void Hu3DAnimCreate(void); +void Hu3DAnimLink(void); +void Hu3DAnimKill(void); +void Hu3DAnimAllKill(void); +void Hu3DAnimSet(void); +void Hu3DAnimExec(void); +void Hu3DAnimAttrSet(void); +void Hu3DAnimAttrReset(void); +void Hu3DAnimSpeedSet(void); +void Hu3DAnimBankSet(void); +void Hu3DAnmNoSet(void); +void Hu3DTexScrollCreate(void); +void Hu3DTexScrollPosSet(void); +void Hu3DTexScrollPosMoveSet(void); +void Hu3DTexScrollRotSet(void); +void Hu3DTexScrollRotMoveSet(void); +void Hu3DTexScrollKill(void); +void Hu3DTexScrollAllKill(void); +void Hu3DTexScrollPauseDisableSet(void); +void Hu3DParticleCreate(void); +void Hu3DParticleScaleSet(void); +void Hu3DParticleZRotSet(void); +void Hu3DParticleColSet(void); +void Hu3DParticleTPLvlSet(void); +void Hu3DParticleBlendModeSet(void); +void Hu3DParticleHookSet(void); +void Hu3DParticleCntSet(void); +void Hu3DParticleAttrSet(void); +void Hu3DParticleAttrReset(void); +void Hu3DParticleAnimModeSet(void); +void Hu3DParManInit(void); +void Hu3DParManCreate(void); +void Hu3DParManKill(void); +void Hu3DParManAllKill(void); +void Hu3DParManPtrGet(void); +void Hu3DParManAttrSet(void); +void Hu3DParManAttrReset(void); +void Hu3DParManPosSet(void); +void Hu3DParManVecSet(void); +void Hu3DParManRotSet(void); +void Hu3DParManModelIDGet(void); +void Hu3DParManLink(void); +void Hu3DParManTimeLimitSet(void); +void Hu3DParManColorSet(void); +void Hu3DMotionCreate(void); +void Hu3DMotionInit(void); +void Hu3DMotionModelCreate(void); +void Hu3DMotionKill(void); +void Hu3DMotionAllKill(void); +void Hu3DMotionSet(void); +void Hu3DMotionExec(void); +void Hu3DSubMotionExec(void); +void Hu3DMotionNext(void); +void Hu3DMotionTimeSet(void); +void Hu3DMotionTimeGet(void); +void Hu3DMotionMaxTimeGet(void); +void Hu3DMotionStartEndSet(void); +void Hu3DMotionMotionMaxTimeGet(void); +void Hu3DMotionEndCheck(void); +void Hu3DMotionShiftSet(void); +void Hu3DMotionIDGet(void); +void Hu3DMotionShiftIDGet(void); +void Hu3DMotionShiftTimeGet(void); +void Hu3DMotionShiftMaxTimeGet(void); +void Hu3DMotionShiftStartEndSet(void); +void Hu3DMotionShiftSpeedSet(void); +void Hu3DMotionSpeedSet(void); +void Hu3DMotionShapeSpeedSet(void); +void Hu3DMotionShapeTimeSet(void); +void Hu3DMotionNoMotSet(void); +void Hu3DMotionNoMotReset(void); +void Hu3DMotionForceSet(void); +void Hu3DMotionShapeSet(void); +void Hu3DMotionShapeIDGet(void); +void Hu3DMotionShapeMaxTimeGet(void); +void Hu3DMotionClusterSet(void); +void Hu3DMotionClusterNoSet(void); +void Hu3DMotionShapeReset(void); +void Hu3DMotionClusterReset(void); +void Hu3DJointMotion(void); +void Hu3DMotionOverlaySet(void); +void Hu3DMotionOverlayReset(void); +void Hu3DMotionOverlayTimeGet(void); +void Hu3DMotionOverlayTimeSet(void); +void Hu3DMotionOverlaySpeedSet(void); +void Hu3DModelObjDrawInit(void); +void Hu3DModelObjDraw(void); +void Hu3DMotionCalc(void); +void Hu3DMotionShapeStartEndSet(void); +void CamMotionEx(void); +void CamMotionEx2(void); +void Hu3D2Dto3D(void); +void Hu3D3Dto2D(void); +void Hu3DMtxRotGet(void); +void Hu3DMtxTransGet(void); +void Hu3DMtxScaleGet(void); +void Hu3DProjectionCreate(void); +void Hu3DProjectionPosSet(void); +void Hu3DProjectionTPLvlSet(void); +void Hu3DProjectionKill(void); +void HuAudInit(void); +void HuAudStreamPlay(void); +void HuAudAllStop(void); +void HuAudFadeOut(void); +void HuAudStreamPauseOn(void); +void HuAudStreamPauseOff(void); +void HuAudStreamFadeOut(void); +void HuAudStreamVolSet(void); +void HuAudFXPlay(void); +void HuAudFXPlayVol(void); +void HuAudFXPlayVolPan(void); +void HuAudFXStop(void); +void HuAudFXFadeOut(void); +void HuAudFXPanning(void); +void HuAudSeqPlay(void); +void HuAudSeqStop(void); +void HuAudSeqFadeOut(void); +void HuAudSeqMidiCtrlGet(void); +void HuAudFXListnerSet(void); +void HuAudFXListnerUpdate(void); +void HuAudFXEmiterPlay(void); +void HuAudFXEmiterUpDate(void); +void HuAudFXListnerKill(void); +void HuAudFXStatusGet(void); +void HuAudFXPitchSet(void); +void HuAudFXVolSet(void); +void HuAudDllSndGrpSet(void); +void HuAudSndGrpSetSet(void); +void HuAudSndGrpSet(void); +void HuAudSndCommonGrpSet(void); +void HuAudSStreamPlay(void); +void HuAudSStreamStop(void); +void HuAudSStreamFadeOut(void); +void HuAudSStreamAllFadeOut(void); +void HuAudSStreamAllStop(void); +void HuAudSStreamStatGet(void); +void HuAudPlayerVoicePlay(void); +void HuAudCharVoicePlay(void); +void HuAudPlayerVoicePlayPos(void); +void HuAudCharVoicePlayPos(void); +void HuAudPlayerVoicePlayEntry(void); +void HuAudCharVoicePlayEntry(void); +void HuAudAUXSet(void); +void msmMusPlay(void); +void espInit(void); +void espEntry(void); +void espKill(void); +void espGrpIDGet(void); +void espDispOn(void); +void espDispOff(void); +void espAttrSet(void); +void espAttrReset(void); +void espPosSet(void); +void espScaleSet(void); +void espZRotSet(void); +void espTPLvlSet(void); +void espColorSet(void); +void espSpeedSet(void); +void espBankSet(void); +void espDrawNoSet(void); +void espPriSet(void); +void lbl_80192060(void); +void lbl_80192160(void); +void lbl_80192260(void); +void lbl_801D3DA0(void); +void fn_8003FF68(void); +void HuPrcInit(void); +void HuPrcCall(void); +void HuPrcCreate(void); +void HuPrcKill(void); +void HuPrcEnd(void); +void HuPrcWakeup(void); +void HuPrcSleep(void); +void HuPrcVSleep(void); +void HuPrcCurrentGet(void); +void HuPrcDestructorSet(void); +void HuPrcDestructorSet2(void); +void HuPrcChildCreate(void); +void HuPrcChildLink(void); +void HuPrcChildUnlink(void); +void HuPrcChildKill(void); +void HuPrcMemAlloc(void); +void HuPrcMemFree(void); +void Hu3DParManVacumeSet(void); +void HuDataInit(void); +void HuDataDirRead(void); +void HuDataRead(void); +void HuDataReadNum(void); +void HuDataReadMulti(void); +void HuDataDirReadAsync(void); +void HuDataDirReadNumAsync(void); +void HuDataSelHeapRead(void); +void HuDataSelHeapReadNum(void); +void HuDataGetSize(void); +void HuDataDirClose(void); +void HuDataDirCloseNum(void); +void HuDataClose(void); +void HuDataCloseMulti(void); +void HuDataReadNumHeapShortForce(void); +void ARRegisterDMACallback(void); +void ARGetDMAStatus(void); +void ARStartDMA(void); +void ARInit(void); +void ARAlloc(void); +void ARFree(void); +void ARGetSize(void); +void ARSetSize(void); +void HuSprBegin(void); +void HuSprCall(void); +void HuSprFinish(void); +void HuSprAnimRead(void); +void HuSprCreate(void); +void HuSprGrpCreate(void); +void HuSprGrpMemberSet(void); +void HuSprGrpMemberKill(void); +void HuSprGrpKill(void); +void HuSprKill(void); +void HuSprAnimKill(void); +void HuSprAttrSet(void); +void HuSprAttrReset(void); +void HuSprPosSet(void); +void HuSprScaleSet(void); +void HuSprZRotSet(void); +void HuSprGrpPosSet(void); +void HuSprGrpZRotSet(void); +void HuSprGrpScaleSet(void); +void HuSprTPLvlSet(void); +void HuSprColorSet(void); +void HuSprSpeedSet(void); +void HuSprBankSet(void); +void HuSprGrpDrawNoSet(void); +void HuSprDrawNoSet(void); +void HuSprPriSet(void); +void HuSprFuncCreate(void); +void HuSprAnimMake(void); +void HuSprGrpCenterSet(void); +void HuSprAnimLock(void); +void AnimDebug(void); +void HuSprExecLayerSet(void); +void HuSprSprBGSet(void); +void HuSprBGSet(void); +void HuSprGrpScissorSet(void); +void HuSprScissorSet(void); +void HuSprGrpTPLvlSet(void); +void HuARMalloc(void); +void HuARFree(void); +void HuAR_DVDtoARAM(void); +void HuAR_MRAMtoARAM(void); +void HuAR_MRAMtoARAM2(void); +void HuAR_ARAMtoMRAM(void); +void HuAR_ARAMtoMRAMNum(void); +void HuARDMACheck(void); +void HuARDirCheck(void); +void HuARDirFree(void); +void HuAR_ARAMtoMRAMFileRead(void); +void HuAudFXListnerSetEX(void); +void HuWindowInit(void); +void HuWinInit(void); +void HuWinCreate(void); +void HuWinKill(void); +void HuWinAllKill(void); +void HuWinMesSet(void); +void HuWinInsertMesSet(void); +void HuWinChoiceGet(void); +void HuWinChoiceNumGet(void); +void HuWinMesWait(void); +void HuWinSprKill(void); +void HuWinMesRead(void); +void HuWinAnimSet(void); +void HuWinSprSet(void); +void HuWinSprPosSet(void); +void HuWinSprIDGet(void); +void HuWinMesMaxSizeGet(void); +void HuWinInsertMesSizeGet(void); +void HuWinMesMaxSizeBetGet(void); +void HuWinExCreate(void); +void HuWinDispOn(void); +void HuWinDispOff(void); +void HuWinExAnimIn(void); +void HuWinExAnimOut(void); +void HuWinExCleanup(void); +void HuWinExAnimPopIn(void); +void HuWinComKeyWait(void); +void HuWinComKeySet(void); +void HuWinComKeyReset(void); +void HuWinDrawNoSet(void); +void HuWinAttrSet(void); +void HuWinAttrReset(void); +void HuWinBGTPLvlSet(void); +void HuWinMesSpeedSet(void); +void HuWinBGColSet(void); +void HuWinChoiceDisable(void); +void HuWinKeyWaitEntry(void); +void HuWinCenterPosSet(void); +void HuWinPosSet(void); +void HuWinZRotSet(void); +void HuWinScaleSet(void); +void HuWinChoiceNowGet(void); +void HuWinStatGet(void); +void HuWinMesColSet(void); +void HuWinScissorSet(void); +void HuWinExCreateStyled(void); +void HuWinPriSet(void); +void HuWinSprPriSet(void); +void HuWinKeyWaitNumGet(void); +void HuWinMesSizeCancelCRSet(void); +void HuWinMesPalSet(void); +void HuWinHomeClear(void); +void HuWinPushKeySet(void); +void HuWinDisablePlayerSet(void); +void HuWinDisablePlayerReset(void); +void CharManInit(void); +void CharARAMOpen(void); +void CharKill(void); +void CharModelKill(void); +void CharKillAll(void); +void CharModelCreate(void); +void CharModelMotionCreate(void); +void CharModelMotionIndexSet(void); +void CharModelMotionKill(void); +void CharModelMotionDataClose(void); +void CharModelDataClose(void); +void CharAMemPtrGet(void); +void CharModelMotionSet(void); +void CharModelMotionTimeSet(void); +void CharModelMotionTimeGet(void); +void CharModelMotionMaxTimeGet(void); +void CharModelMotionEndCheck(void); +void CharModelMotionShiftIDGet(void); +void CharModelMotionShiftSet(void); +void CharModelMotionShiftTimeGet(void); +void CharModelMotionSpeedSet(void); +void CharModelLayerSetAll(void); +void CharModelItemHookCreate(void); +void CharModelEffectCreate(void); +void CharModelCoinEffectCreate(void); +void fn_8004EC74(void); +void fn_8004EDA4(void); +void fn_8004F13C(void); +void fn_8004F058(void); +void GWCharColorGet(void); +void CharModelLayerSetAll2(void); +void charTexNameTbl(void); +void CharModelTexNameGet(void); +void CharModelVoiceEnableSet(void); +void CharModelEffectNpcInitSilent(void); +void CharModelStepTypeSet(void); +void fn_8004F52C(void); +void CharModelEffectEnableSet(void); +void CharModelEffectNpcInit(void); +void HuPrcSetStat(void); +void HuPrcResetStat(void); +void omGameSysInit(void); +void omResetStatBit(void); +void omCurrentOvlGet(void); +void omPauseChk(void); +void omOvlHisChg(void); +void omOvlHisGet(void); +void omovlevtno(void); +void omovlstat(void); +void AddX(void); +void AddZ(void); +void MapObject(void); +void CharObject(void); +void nMap(void); +void nChar(void); +void MapWall(void); +void MapPos(void); +void HitFaceVec(void); +void HitFace(void); +void HitFaceCount(void); +void GWPlayer(void); +void GWSystem(void); +void HuTHPSprCreateVol(void); +void HuTHPSprCreate(void); +void HuTHP3DCreateVol(void); +void HuTHP3DCreate(void); +void HuTHPStop(void); +void HuTHPClose(void); +void HuTHPRestart(void); +void HuTHPEndCheck(void); +void HuTHPFrameGet(void); +void HuTHPTotalFrameGet(void); +void HuTHPSetVolume(void); +void HuCardCheck(void); +void HuCardMount(void); +void HuCardFormat(void); +void HuCardOpen(void); +void HuCardRead(void); +void HuCardCreate(void); +void HuCardClose(void); +void HuCardWrite(void); +void HuCardDelete(void); +void HuCardSectorSizeGet(void); +void HuCardFreeSpaceGet(void); +void HuCardSlotCheck(void); +void SLFileOpen(void); +void SLFileCreate(void); +void SLFileWrite(void); +void SLFileClose(void); +void SLFileRead(void); +void SLCurSlotNoSet(void); +void SLSaveDataMake(void); +void SLCommonSet(void); +void SLSaveBoard(void); +void SLSaveBoardBackup(void); +void SLSave(void); +void SLLoadGameStat(void); +void SLLoadBoard(void); +void SLLoadBoardBackup(void); +void SLLoad(void); +void SLCurBoxNoSet(void); +void SLSaveFlagSet(void); +void SLSaveFlagGet(void); +void SLCheckSumCheck(void); +void SLSerialNoGet(void); +void SLSerialNoCheck(void); +void saveExecF(void); +void _CheckFlag(void); +void _SetFlag(void); +void _ClearFlag(void); +void mgInfoTbl(void); +void mgTypeCurr(void); +void mgBattleStar(void); +void lbl_801D3E94(void); +void mgTicTacToeGrid(void); +void mgIndexList(void); +void lbl_801D3E94(void); +void mgGameStatBackup(void); +void mgRecordExtra(void); +void mgQuitExtraF(void); +void mgPracticeEnableF(void); +void mgBoardHostEnableF(void); +void omMgIndexGet(void); +void mgInstExitEnableF(void); +void GWMGRecordSet(void); +void GWMGRecordGet(void); +void GWBoardPlayCountAdd(void); +void GWBoardPlayCountSet(void); +void GWBoardPlayCountGet(void); +void GWBoardWinCountInc(void); +void GWBoardWinCountGet(void); +void GWBoardWinCountSet(void); +void GWBoardMaxStarsSet(void); +void GWBoardMaxStarsGet(void); +void GWBoardMaxCoinsSet(void); +void GWBoardMaxCoinsGet(void); +void GWTotalStarsSet(void); +void GWTotalStarsAdd(void); +void GWTotalStarsGet(void); +void GWStarsAdd(void); +void GWStarsGet(void); +void GWStarsSet(void); +void GWCoinsAdd(void); +void GWCoinsSet(void); +void GWCoinsGet(void); +void GWMGCustomReset(void); +void GWMGCustomSet(void); +void GWMGCustomGet(void); +void GWMGAvailGet(void); +void fmod(void); +void _savegpr_15(void); +void _restgpr_15(void); +void _savegpr_16(void); +void _restgpr_16(void); +void __save_gpr(void); +void __restore_gpr(void); +void omDBGMenuButton(void); +void msmSeSetListener(void); +void msmSeUpdataListener(void); +void msmSeGetIndexPtr(void); +void msmMusSetMasterVolume(void); +void msmSysGetOutputMode(void); +void BoardRollExec(void); +void BoardRollKill(void); +void BoardDiceValueSet(void); +void BoardDiceStop(void); +void BoardDicePauseAll(void); +void BoardDiceDoneCheck(void); +void BoardCommonInit(void); +void BoardStoryConfigSet(void); +void BoardPartyConfigSet(void); +void BoardSaveInit(void); +void BoardMGExit(void); +void BoardDAngleCalcVec(void); +void BoardDAngleCalc(void); +void BoardVecMaxDistXZCheck(void); +void BoardIsKill(void); +void BoardKill(void); +void BoardCameraScissorSet(void); +void BoardCameraViewSet(void); +void BoardCameraDirGet(void); +void BoardCameraPointDirGet(void); +void BoardCameraMoveSet(void); +void BoardCameraQuakeSet(void); +void BoardCameraQuakeReset(void); +void BoardCameraTargetSet(void); +void BoardCameraPosGet(void); +void BoardCameraTargetGet(void); +void BoardCameraRotGet(void); +void BoardCameraZoomGet(void); +void BoardCameraPosSet(void); +void BoardCameraXRotZoomSet(void); +void BoardCameraZoomSet(void); +void BoardCameraRotSet(void); +void BoardCameraFovSet(void); +void BoardCameraOffsetSet(void); +void BoardCameraTargetPlayerSet(void); +void BoardCameraTargetModelSet(void); +void BoardCameraTargetSpaceSet(void); +void BoardCameraCullCheck(void); +void BoardCameraMotionIsDone(void); +void BoardCameraMotionStartEx(void); +void BoardCameraMotionStart(void); +void BoardCameraMotionWait(void); +void BoardCameraNearFarSet(void); +void BoardCameraNearFarGet(void); +void BoardEventFlagSet(void); +void BoardEventFlagReset(void); +void BoardEventFlagGet(void); +void BoardMGCreate(void); +void BoardDAngleCalcRange(void); +void BoardVecDistXZCalc(void); +void BoardVecMinDistCheck(void); +void BoardArcSin(void); +void BoardArcCos(void); +void BoardMTXCalcLookAt(void); +void BoardLightSetExec(void); +void BoardLightResetExec(void); +void BoardLightHookSet(void); +void BoardMGDoneFlagSet(void); +void BoardMGDoneFlagGet(void); +void BoardMGSetupExec(void); +void BoardFilterFadeOut(void); +void BoardFilterFadeInit(void); +void BoardFilterFadePauseCheck(void); +void BoardFilterFadeCheck(void); +void BoardConfettiCreate(void); +void BoardConfettiKill(void); +void BoardConfettiStop(void); +void BoardRand(void); +void BoardRandMod(void); +void BoardRandFloat(void); +void boardRandSeed(void); +void BoardViewMoveCheck(void); +void BoardViewMoveEnd(void); +void BoardViewFocusGetPos(void); +void BoardViewMoveStart(void); +void BoardViewFocusSet(void); +void boardTurnFunc(void); +void boardStarShowNextHook(void); +void boardBowserHook(void); +void boardTurnStartFunc(void); +void boardStarGiveHook(void); +void boardMainProc(void); +void boardObjMan(void); +void BoardItemStart(void); +void BoardCharWheelInit(void); +void BoardCharWheelCheck(void); +void BoardCharWheelWait(void); +void BoardCharWheelResultGet(void); +void BoardCharWheelSpeedSet(void); +void BoardSpaceInit(void); +void BoardSpaceDestroy(void); +void BoardSpaceLandExec(void); +void BoardSpaceWalkEventFuncSet(void); +void BoardSpaceWalkMiniEventFuncSet(void); +void BoardSpaceLandEventFuncSet(void); +void BoardSpaceWalkEventExec(void); +void BoardSpaceWalkMiniEventExec(void); +void BoardSpaceBlockExec(void); +void BoardSpaceWalkExec(void); +void BoardSpaceCameraSet(void); +void BoardSpaceCornerPosGet(void); +void BoardSpaceStarGetRandom(void); +void BoardSpaceCountGet(void); +void BoardSpaceGet(void); +void BoardSpaceFlagPosGet(void); +void BoardSpaceFlagGet(void); +void BoardSpaceLinkTypeSearch(void); +void BoardSpacePosGet(void); +void BoardSpaceRotGet(void); +void BoardSpaceRead(void); +void BoardSpaceAttrReset(void); +void BoardSpaceAttrSet(void); +void BoardSpaceLinkTargetListGet(void); +void BoardSpaceFlagSearch(void); +void BoardSpaceTypeGet(void); +void BoardSpaceTypeSet(void); +void BoardSpaceLinkFlagSearch(void); +void BoardSpaceLinkTypeListGet(void); +void BoardSpaceLinkTransformGet(void); +void BoardSpaceHide(void); +void BoardSpaceStarCheck(void); +void BoardSpaceStarMove(void); +void BoardSpaceStarSetIndex(void); +void BoardSpaceStarGetCurr(void); +void BoardSpaceStarGet(void); +void BoardStarHostSet(void); +void BoardStarHostMdlGet(void); +void BoardBooHouseHostSet(void); +void BoardBooHouseHostGet(void); +void BoardLotteryHostSet(void); +void BoardLotteryHostGet(void); +void BoardShopHostSet(void); +void BoardShopHostGet(void); +void BoardPauseActiveCheck(void); +void BoardLotteryInit(void); +void BoardLotteryKill(void); +void BoardLotteryExec(void); +void BoardBooHouseCreate(void); +void BoardBooHouseKill(void); +void BoardBooHouseExec(void); +void BoardLandBlueExec(void); +void BoardLandRedExec(void); +void BoardWarpExec(void); +void BoardMushroomExec(void); +void BoardStarExec(void); +void BoardStarGive(void); +void BoardBattleExec(void); +void BoardShopInit(void); +void BoardShopKill(void); +void BoardShopExec(void); +void BoardModelInit(void); +void BoardModelKillAll(void); +void BoardModelDummyUpdate(void); +void BoardModelVisibilityUpdate(void); +void BoardModelKill(void); +void BoardModelExistCheck(void); +void BoardModelExistDupe(void); +void BoardModelIDGet(void); +void BoardModelAlphaSet(void); +void BoardModelMotionStart(void); +void BoardModelMotionShiftSet(void); +void BoardModelAttrSet(void); +void BoardModelAttrReset(void); +void BoardModelMotionTimeSet(void); +void BoardModelMotionSpeedSet(void); +void BoardModelMotionSpeedGet(void); +void BoardModelMotionStartEndSet(void); +void BoardModelMotionUpdateSet(void); +void BoardModelMotionShapeSet(void); +void BoardModelMotionShapeTimeGet(void); +void BoardModelMotionShapeMaxTimeGet(void); +void BoardModelMotionShapeSpeedSet(void); +void BoardModelMotionShapeSpeedGet(void); +void BoardModelMotionShapeEndCheck(void); +void BoardModelMotionShapeStartEndSet(void); +void BoardModelMtxSet(void); +void BoardModelMtxGet(void); +void BoardModelPosSetV(void); +void BoardModelRotSetV(void); +void BoardModelScaleSetV(void); +void BoardModelPosSet(void); +void BoardModelRotSet(void); +void BoardModelScaleSet(void); +void BoardModelPosGet(void); +void BoardModelRotGet(void); +void BoardModelScaleGet(void); +void fn_8006DDE8(void); +void BoardModelVisibilitySet(void); +void BoardModelVisibilityGet(void); +void BoardModelLayerSet(void); +void BoardModelCameraSet(void); +void BoardModelPassSet(void); +void fn_8006DC1C(void); +void BoardModelHookSet(void); +void BoardModelHookReset(void); +void BoardModelHookObjReset(void); +void BoardModelMotionEndCheck(void); +void BoardModelMotionTimeGet(void); +void BoardModelMotionMaxTimeGet(void); +void BoardModelMotionCreate(void); +void BoardModelMotionKill(void); +void BoardModelCreate(void); +void BoardModelCreateCharacter(void); +void BoardModelCreateParam(void); +void BoardModelLayerSetAll(void); +void BoardModelCameraSetAll(void); +void BoardModelHideSetAll(void); +void BoardModelAmbSet(void); +void BoardModelAmbSetAll(void); +void BoardModelRotYSet(void); +void BoardModelRotYGet(void); +void BoardModelVoiceEnableSet(void); +void BoardPlayerModelInit(void); +void BoardPlayerModelKill(void); +void BoardPlayerInit(void); +void BoardPlayerGetCharMess(void); +void BoardPlayerGetCharName(void); +void BoardPlayerLayerSet(void); +void BoardPlayerCameraSet(void); +void fn_80062A40(void); +void BoardPlayerExistCheck(void); +void BoardPlayerMtxSet(void); +void BoardPlayerPosSet(void); +void BoardPlayerPosSetV(void); +void BoardPlayerPosGet(void); +void BoardPlayerRotSet(void); +void BoardPlayerRotSetV(void); +void BoardPlayerRotGet(void); +void BoardPlayerRotYSet(void); +void BoardPlayerRotYGet(void); +void BoardPlayerScaleSet(void); +void BoardPlayerScaleSetV(void); +void BoardPlayerScaleGet(void); +void BoardPlayerCornerPosSet(void); +void BoardPlayerCornerPosGet(void); +void BoardPlayerSizeGet(void); +void BoardPlayerSizeSet(void); +void BoardPlayerCurrMotionGet(void); +void BoardPlayerMotionEndCheck(void); +void BoardPlayerMotionEndWait(void); +void BoardPlayerMotionMaxTimeGet(void); +void BoardPlayerMotionTimeGet(void); +void BoardPlayerVoiceEnableSet(void); +void BoardPlayerMotionStart(void); +void BoardPlayerMotionShiftSet(void); +void BoardPlayerMotionCreate(void); +void BoardPlayerMotionKill(void); +void BoardPlayerMotionSpeedSet(void); +void BoardPlayerMotionTimeSet(void); +void BoardPlayerMotionStartEndSet(void); +void BoardPlayerModelAttrSet(void); +void BoardPlayerModelAttrReset(void); +void BoardPlayerAmbSet(void); +void BoardPlayerIdleSet(void); +void BoardPlayerMotBlendSet(void); +void BoardPlayerMotBlendCheck(void); +void BoardPlayerRankCalc(void); +void BoardRollTypeGet(void); +void BoardRollTypeSet(void); +void BoardPlayerItemRemove(void); +void BoardPlayerItemFind(void); +void BoardPlayerItemAdd(void); +void BoardPlayerItemCount(void); +void BoardPlayerCoinsAdd(void); +void BoardPlayerCoinsGet(void); +void BoardPlayerCoinsSet(void); +void BoardPlayerStarsAdd(void); +void BoardPlayerSameTeamFind(void); +void BoardPlayerPosLerpStart(void); +void BoardPlayerMoveToAsync(void); +void BoardPlayerDiceJumpStart(void); +void BoardPlayerDiceJumpCheck(void); +void BoardDiceDigit2DInit(void); +void BoardDiceDigit2DUpdateEnable(void); +void BoardDiceDigit2DShowSet(void); +void BoardPlayerBtnDownWait(void); +void BoardPlayerAutoSizeSet(void); +void BoardPlayerAutoSizeGet(void); +void BoardPlayerMoveAwayIsDone(void); +void BoardPlayerMoveAwayStartCurr(void); +void BoardPlayerMoveAwayStart(void); +void BoardPlayerPreTurnHookSet(void); +void BoardPlayerPostTurnHookSet(void); +void BoardPlayerCopyEyeMat(void); +void BoardBowserSuitInit(void); +void BoardBowserSuitKill(void); +void BoardBowserSuitModelGet(void); +void BoardBowserSuitPlayerModelGet(void); +void BoardBowserSuitPlayerModelKill(void); +void BoardBowserSuitMotionSetWait(void); +void BoardBowserSuitMotionSetWalk(void); +void BoardBowserSuitMotionSetWin(void); +void BoardBowserSuitMotionSetJump(void); +void BoardJunctionMaskSet(void); +void BoardJunctionMaskReset(void); +void BoardJunctionMaskZero(void); +void BoardPlayerResizeAnimExec(void); +void BoardWinCreate(void); +void BoardWinCreateChoice(void); +void BoardWinChoiceGet(void); +void BoardWinWait(void); +void BoardWinKill(void); +void BoardWinInit(void); +void BoardWinKillAll(void); +void BoardWinUnusedArraySet(void); +void BoardWinPause(void); +void BoardWinInsertMesSet(void); +void BoardWinAttrSet(void); +void BoardWinAttrReset(void); +void BoardWinChoiceDisable(void); +void BoardWinKeyWait(void); +void BoardWinSpeedGet(void); +void BoardWinSpeedSet(void); +void BoardWinPriSet(void); +void BoardWinChoiceNowGet(void); +void BoardWinChoiceNowGet2(void); +void BoardStatusCreate(void); +void BoardStatusKill(void); +void BoardStatusVisibleGet(void); +void BoardStatusShowSet(void); +void BoardStatusShowSetForce(void); +void BoardStatusGraySet(void); +void BoardStatusShowSetAll(void); +void BoardStatusStopCheck(void); +void BoardSpriteCreate(void); +void BoardStatusTargetPosSet(void); +void BoardStatusPosSet(void); +void BoardStatusPosGet(void); +void BoardStatusItemHideSet(void); +void BoardStatusHammerCreate(void); +void BoardStatusHammerKill(void); +void BoardStatusHammerShowSet(void); +void BoardPickerCreate(void); +void BoardPickerDoneCheck(void); +void BoardPickerChoiceGet(void); +void BoardPickerPosGet(void); +void BoardPickerBackFlagSet(void); +void BoardItemGetDestPos(void); +void BoardItemUseExec(void); +void BoardItemStatusKill(void); +void BoardYourTurnExec(void); +void BoardMusStart(void); +void BoardAudSeqFadeOutFast(void); +void BoardAudSeqFadeOut(void); +void BoardMusLoudSet(void); +void BoardMusVolPanSet(void); +void BoardAudSeqPause(void); +void BoardMusStatusGet(void); +void BoardAudSeqFadeOutAll(void); +void BoardAudFXPlay(void); +void BoardAudFXStop(void); +void BoardComKeySetLeft(void); +void BoardComKeySetUp(void); +void BoardComKeySetRight(void); +void BoardComKeySetDown(void); +void BoardComPreferItemCheck(void); +void BoardComPreferItemGet(void); +void BoardComFarPlayerFind(void); +void boardTutorialData(void); +void BoardTutorialHookSet(void); +void BoardRollTutorialSet(void); +void BoardTutorialDirInputSet(void); +void BoardCharWheelTargetSet(void); +void BoardTutorialBlockSetPos(void); +void BoardTutorialItemSet(void); +void BoardTutorialHostSet(void); +void BoardMGSetupTutorialExec(void); +void BoardShopTutorialExec(void); +void BoardLotteryTutorialExec(void); +void BoardBooHouseTutorialExec(void); +extern void _kerjmp_OSDumpStopwatch(void); +extern void _kerjmp_PSVECDotProduct(void); +extern void _kerjmp_PSVECDistance(void); +extern void _kerjmp_PSVECSquareDistance(void); +extern void _kerjmp_VIGetDTVStatus(void); +extern void _kerjmp_OSGetProgressiveMode(void); +extern void _kerjmp_OSSetProgressiveMode(void); +extern void _kerjmp_PSVECSubtract(void); +extern void _kerjmp_PSMTXTranspose(void); +extern void _kerjmp_C_VECReflect(void); +extern void _kerjmp_PSMTXInvXpose(void); +extern void _kerjmp_PSMTXRotRad(void); +extern void _kerjmp_PSMTXRotAxisRad(void); +extern void _kerjmp_PSVECMag(void); +extern void _kerjmp_PSVECScale(void); +extern void _kerjmp_PSMTXMultVecSR(void); +extern void _kerjmp_C_QUATRotAxisRad(void); +extern void _kerjmp_C_QUATMtx(void); +extern void _kerjmp_C_QUATAdd(void); +extern void _kerjmp_C_QUATSlerp(void); +extern void _kerjmp_PSQUATAdd(void); +extern void _kerjmp_PSMTXQuat(void); +extern void _kerjmp_PSQUATMultiply(void); +extern void _kerjmp_PSQUATInverse(void); +extern void _kerjmp_PSQUATNormalize(void); +extern void _kerjmp_OSTicksToCalendarTime(void); +extern void _kerjmp_GXWaitDrawDone(void); +extern void _kerjmp_GXProject(void); +extern void _kerjmp_GXSetProjectionv(void); +extern void _kerjmp_GXGetViewportv(void); +extern void _kerjmp_GXPixModeSync(void); +extern void _kerjmp_GXSetIndTexOrder(void); +extern void _kerjmp_GXSetIndTexMtx(void); +extern void _kerjmp_GXSetTevIndWarp(void); +extern void _kerjmp_GXSetTexCoordScaleManually(void); +extern void _kerjmp_GXSetTevIndTile(void); +extern void _kerjmp_GXNtsc480Prog(void); +extern void _kerjmp_omSetStatBit(void); +extern void _kerjmp_MGSeqDoneCheck(void); +extern void _kerjmp_WipeStatGet(void); +extern void _kerjmp_omMakeGroupEx(void); +extern void _kerjmp_omGetGroupMemberListEx(void); +extern void _kerjmp_MGSeqParamSet(void); +extern void _kerjmp_MGSeqKill(void); +extern void _kerjmp_ClusterAdjustObject(void); +extern void _kerjmp_printWin(void); +extern void _kerjmp_print8(void); +extern void _kerjmp_HuSysVWaitSet(void); +extern void _kerjmp_fn_800401D0(void); +extern void _kerjmp_fn_800402FC(void); +extern void _kerjmp_MGSeqInit(void); +extern void _kerjmp_MGSeqCreate(void); +extern void _kerjmp_omDelObjEx(void); +extern void _kerjmp_MGSeqPosSet(void); +extern void _kerjmp_atan2(void); +extern void _kerjmp_atan2f(void); +extern void _kerjmp_cos(void); +extern void _kerjmp_MGSeqStatGet(void); +extern void _kerjmp_Center(void); +extern void _kerjmp_CRotM(void); +extern void _kerjmp_CenterM(void); +extern void _kerjmp_CZoomM(void); +extern void _kerjmp_omOutViewMulti(void); +extern void _kerjmp_omOutView(void); +extern void _kerjmp_omAddObjEx(void); +extern void _kerjmp_omInitObjMan(void); +extern void _kerjmp_frandmod(void); +extern void _kerjmp_fn_80040374(void); +extern void _kerjmp_SetDefLight(void); +extern void _kerjmp_HuSetVecF(void); +extern void _kerjmp_HuSubVecF(void); +extern void _kerjmp_frandf(void); +extern void _kerjmp_MGSeqSprKill(void); +extern void _kerjmp_mtxRotCat(void); +extern void _kerjmp_Hu3DLayerHookSet(void); +extern void _kerjmp_Hu3DNoSyncSet(void); +extern void _kerjmp_Hu3DModelCreate(void); +extern void _kerjmp_Hu3DModelLink(void); +extern void _kerjmp_Hu3DHookFuncCreate(void); +extern void _kerjmp_Hu3DModelPosSet(void); +extern void _kerjmp_Hu3DModelPosSetV(void); +extern void _kerjmp_Hu3DModelRotSet(void); +extern void _kerjmp_Hu3DModelRotSetV(void); +extern void _kerjmp_Hu3DModelScaleSet(void); +extern void _kerjmp_Hu3DModelScaleSetV(void); +extern void _kerjmp_Hu3DModelKill(void); +extern void _kerjmp_Hu3DModelAllKill(void); +extern void _kerjmp_Hu3DModelAttrSet(void); +extern void _kerjmp_Hu3DModelAttrReset(void); +extern void _kerjmp_Hu3DModelAttrGet(void); +extern void _kerjmp_Hu3DModelMotionAttrGet(void); +extern void _kerjmp_Hu3DBGColorSet(void); +extern void _kerjmp_Hu3DModelCameraSet(void); +extern void _kerjmp_Hu3DModelLayerSet(void); +extern void _kerjmp_Hu3DModelTPLvlSet(void); +extern void _kerjmp_Hu3DModelHookSet(void); +extern void _kerjmp_Hu3DModelHookReset(void); +extern void _kerjmp_Hu3DModelHookObjReset(void); +extern void _kerjmp_Hu3DModelAmbSet(void); +extern void _kerjmp_Hu3DModelShadowDispOn(void); +extern void _kerjmp_Hu3DModelShadowDispOff(void); +extern void _kerjmp_Hu3DModelProjectionSet(void); +extern void _kerjmp_Hu3DModelProjectionReset(void); +extern void _kerjmp_Hu3DModelObjPosGet(void); +extern void _kerjmp_Hu3DModelObjMtxGet(void); +extern void _kerjmp_Hu3DModelHiliteTypeSet(void); +extern void _kerjmp_Hu3DModelReflectTypeSet(void); +extern void _kerjmp_Hu3DModelHiliteMapSet(void); +extern void _kerjmp_HuPadInit(void); +extern void _kerjmp_HuPadRead(void); +extern void _kerjmp_HuPadRumbleSet(void); +extern void _kerjmp_HuPadRumbleStop(void); +extern void _kerjmp_HuPadRumbleAllStop(void); +extern void _kerjmp_HuPadStatGet(void); +extern void _kerjmp_HuPadRumbleGet(void); +extern void _kerjmp_Hu3DCameraCreate(void); +extern void _kerjmp_Hu3DCameraPerspectiveSet(void); +extern void _kerjmp_Hu3DCameraViewportSet(void); +extern void _kerjmp_Hu3DCameraScissorSet(void); +extern void _kerjmp_Hu3DCameraPosSet(void); +extern void _kerjmp_Hu3DCameraKill(void); +extern void _kerjmp_Hu3DCameraPosSetV(void); +extern void _kerjmp_Hu3DCameraAllKill(void); +extern void _kerjmp_Hu3DCameraSet(void); +extern void _kerjmp_Hu3DCameraMotionOn(void); +extern void _kerjmp_Hu3DCameraMotionStart(void); +extern void _kerjmp_Hu3DCameraMotionOff(void); +extern void _kerjmp_Hu3DModelCameraCreate(void); +extern void _kerjmp_Hu3DModelCameraInfoSet(void); +extern void _kerjmp_Hu3DLighInit(void); +extern void _kerjmp_Hu3DGLightCreate(void); +extern void _kerjmp_Hu3DGLightCreateV(void); +extern void _kerjmp_Hu3DGLightKill(void); +extern void _kerjmp_Hu3DLightAllKill(void); +extern void _kerjmp_Hu3DLightSet(void); +extern void _kerjmp_Hu3DGLightSpotSet(void); +extern void _kerjmp_Hu3DGLightInfinitytSet(void); +extern void _kerjmp_Hu3DGLightPointSet(void); +extern void _kerjmp_Hu3DGLightColorSet(void); +extern void _kerjmp_Hu3DGLightPosSetV(void); +extern void _kerjmp_Hu3DGLightPosSet(void); +extern void _kerjmp_Hu3DGLightPosAimSetV(void); +extern void _kerjmp_Hu3DGLightPosAimSet(void); +extern void _kerjmp_Hu3DGLightStaticSet(void); +extern void _kerjmp_Hu3DModelLightInfoSet(void); +extern void _kerjmp_Hu3DReflectMapSet(void); +extern void _kerjmp_Hu3DReflectNoSet(void); +extern void _kerjmp_Hu3DFogSet(void); +extern void _kerjmp_Hu3DFogClear(void); +extern void _kerjmp_Hu3DModelObjPtrGet(void); +extern void _kerjmp_Hu3DModelShadowSet(void); +extern void _kerjmp_Hu3DModelShadowReset(void); +extern void _kerjmp_Hu3DShadowCreate(void); +extern void _kerjmp_Hu3DShadowPosSet(void); +extern void _kerjmp_Hu3DShadowTPLvlSet(void); +extern void _kerjmp_Hu3DModelShadowMapSet(void); +extern void _kerjmp_Hu3DModelShadowMapObjSet(void); +extern void _kerjmp_Hu3DShadowSizeSet(void); +extern void _kerjmp_Hu3DMipMapSet(void); +extern void _kerjmp_Hu3DModelClusterAttrSet(void); +extern void _kerjmp_Hu3DModelClusterAttrReset(void); +extern void _kerjmp_Hu3DLLightCreate(void); +extern void _kerjmp_Hu3DLLightCreateV(void); +extern void _kerjmp_Hu3DLLightSpotSet(void); +extern void _kerjmp_Hu3DLLightInfinitytSet(void); +extern void _kerjmp_Hu3DLLightPointSet(void); +extern void _kerjmp_Hu3DLLightKill(void); +extern void _kerjmp_Hu3DLLightColorSet(void); +extern void _kerjmp_Hu3DLLightPosSetV(void); +extern void _kerjmp_Hu3DLLightPosSet(void); +extern void _kerjmp_Hu3DLLightPosAimSetV(void); +extern void _kerjmp_Hu3DLLightPosAimSet(void); +extern void _kerjmp_Hu3DLLightStaticSet(void); +extern void _kerjmp_Hu3DAnimInit(void); +extern void _kerjmp_Hu3DAnimCreate(void); +extern void _kerjmp_Hu3DAnimLink(void); +extern void _kerjmp_Hu3DAnimKill(void); +extern void _kerjmp_Hu3DAnimAllKill(void); +extern void _kerjmp_Hu3DAnimSet(void); +extern void _kerjmp_Hu3DAnimExec(void); +extern void _kerjmp_Hu3DAnimAttrSet(void); +extern void _kerjmp_Hu3DAnimAttrReset(void); +extern void _kerjmp_Hu3DAnimSpeedSet(void); +extern void _kerjmp_Hu3DAnimBankSet(void); +extern void _kerjmp_Hu3DAnmNoSet(void); +extern void _kerjmp_Hu3DTexScrollCreate(void); +extern void _kerjmp_Hu3DTexScrollPosSet(void); +extern void _kerjmp_Hu3DTexScrollPosMoveSet(void); +extern void _kerjmp_Hu3DTexScrollRotSet(void); +extern void _kerjmp_Hu3DTexScrollRotMoveSet(void); +extern void _kerjmp_Hu3DTexScrollKill(void); +extern void _kerjmp_Hu3DTexScrollAllKill(void); +extern void _kerjmp_Hu3DTexScrollPauseDisableSet(void); +extern void _kerjmp_Hu3DParticleCreate(void); +extern void _kerjmp_Hu3DParticleScaleSet(void); +extern void _kerjmp_Hu3DParticleZRotSet(void); +extern void _kerjmp_Hu3DParticleColSet(void); +extern void _kerjmp_Hu3DParticleTPLvlSet(void); +extern void _kerjmp_Hu3DParticleBlendModeSet(void); +extern void _kerjmp_Hu3DParticleHookSet(void); +extern void _kerjmp_Hu3DParticleCntSet(void); +extern void _kerjmp_Hu3DParticleAttrSet(void); +extern void _kerjmp_Hu3DParticleAttrReset(void); +extern void _kerjmp_Hu3DParticleAnimModeSet(void); +extern void _kerjmp_Hu3DParManInit(void); +extern void _kerjmp_Hu3DParManCreate(void); +extern void _kerjmp_Hu3DParManKill(void); +extern void _kerjmp_Hu3DParManAllKill(void); +extern void _kerjmp_Hu3DParManPtrGet(void); +extern void _kerjmp_Hu3DParManAttrSet(void); +extern void _kerjmp_Hu3DParManAttrReset(void); +extern void _kerjmp_Hu3DParManPosSet(void); +extern void _kerjmp_Hu3DParManVecSet(void); +extern void _kerjmp_Hu3DParManRotSet(void); +extern void _kerjmp_Hu3DParManModelIDGet(void); +extern void _kerjmp_Hu3DParManLink(void); +extern void _kerjmp_Hu3DParManTimeLimitSet(void); +extern void _kerjmp_Hu3DParManColorSet(void); +extern void _kerjmp_Hu3DMotionCreate(void); +extern void _kerjmp_Hu3DMotionInit(void); +extern void _kerjmp_Hu3DMotionModelCreate(void); +extern void _kerjmp_Hu3DMotionKill(void); +extern void _kerjmp_Hu3DMotionAllKill(void); +extern void _kerjmp_Hu3DMotionSet(void); +extern void _kerjmp_Hu3DMotionExec(void); +extern void _kerjmp_Hu3DSubMotionExec(void); +extern void _kerjmp_Hu3DMotionNext(void); +extern void _kerjmp_Hu3DMotionTimeSet(void); +extern void _kerjmp_Hu3DMotionTimeGet(void); +extern void _kerjmp_Hu3DMotionMaxTimeGet(void); +extern void _kerjmp_Hu3DMotionStartEndSet(void); +extern void _kerjmp_Hu3DMotionMotionMaxTimeGet(void); +extern void _kerjmp_Hu3DMotionEndCheck(void); +extern void _kerjmp_Hu3DMotionShiftSet(void); +extern void _kerjmp_Hu3DMotionIDGet(void); +extern void _kerjmp_Hu3DMotionShiftIDGet(void); +extern void _kerjmp_Hu3DMotionShiftTimeGet(void); +extern void _kerjmp_Hu3DMotionShiftMaxTimeGet(void); +extern void _kerjmp_Hu3DMotionShiftStartEndSet(void); +extern void _kerjmp_Hu3DMotionShiftSpeedSet(void); +extern void _kerjmp_Hu3DMotionSpeedSet(void); +extern void _kerjmp_Hu3DMotionShapeSpeedSet(void); +extern void _kerjmp_Hu3DMotionShapeTimeSet(void); +extern void _kerjmp_Hu3DMotionNoMotSet(void); +extern void _kerjmp_Hu3DMotionNoMotReset(void); +extern void _kerjmp_Hu3DMotionForceSet(void); +extern void _kerjmp_Hu3DMotionShapeSet(void); +extern void _kerjmp_Hu3DMotionShapeIDGet(void); +extern void _kerjmp_Hu3DMotionShapeMaxTimeGet(void); +extern void _kerjmp_Hu3DMotionClusterSet(void); +extern void _kerjmp_Hu3DMotionClusterNoSet(void); +extern void _kerjmp_Hu3DMotionShapeReset(void); +extern void _kerjmp_Hu3DMotionClusterReset(void); +extern void _kerjmp_Hu3DJointMotion(void); +extern void _kerjmp_Hu3DMotionOverlaySet(void); +extern void _kerjmp_Hu3DMotionOverlayReset(void); +extern void _kerjmp_Hu3DMotionOverlayTimeGet(void); +extern void _kerjmp_Hu3DMotionOverlayTimeSet(void); +extern void _kerjmp_Hu3DMotionOverlaySpeedSet(void); +extern void _kerjmp_Hu3DModelObjDrawInit(void); +extern void _kerjmp_Hu3DModelObjDraw(void); +extern void _kerjmp_Hu3DMotionCalc(void); +extern void _kerjmp_Hu3DMotionShapeStartEndSet(void); +extern void _kerjmp_CamMotionEx(void); +extern void _kerjmp_CamMotionEx2(void); +extern void _kerjmp_Hu3D2Dto3D(void); +extern void _kerjmp_Hu3D3Dto2D(void); +extern void _kerjmp_Hu3DMtxRotGet(void); +extern void _kerjmp_Hu3DMtxTransGet(void); +extern void _kerjmp_Hu3DMtxScaleGet(void); +extern void _kerjmp_Hu3DProjectionCreate(void); +extern void _kerjmp_Hu3DProjectionPosSet(void); +extern void _kerjmp_Hu3DProjectionTPLvlSet(void); +extern void _kerjmp_Hu3DProjectionKill(void); +extern void _kerjmp_HuAudInit(void); +extern void _kerjmp_HuAudStreamPlay(void); +extern void _kerjmp_HuAudAllStop(void); +extern void _kerjmp_HuAudFadeOut(void); +extern void _kerjmp_HuAudStreamPauseOn(void); +extern void _kerjmp_HuAudStreamPauseOff(void); +extern void _kerjmp_HuAudStreamFadeOut(void); +extern void _kerjmp_HuAudStreamVolSet(void); +extern void _kerjmp_HuAudFXPlay(void); +extern void _kerjmp_HuAudFXPlayVol(void); +extern void _kerjmp_HuAudFXPlayVolPan(void); +extern void _kerjmp_HuAudFXStop(void); +extern void _kerjmp_HuAudFXFadeOut(void); +extern void _kerjmp_HuAudFXPanning(void); +extern void _kerjmp_HuAudSeqPlay(void); +extern void _kerjmp_HuAudSeqStop(void); +extern void _kerjmp_HuAudSeqFadeOut(void); +extern void _kerjmp_HuAudSeqMidiCtrlGet(void); +extern void _kerjmp_HuAudFXListnerSet(void); +extern void _kerjmp_HuAudFXListnerUpdate(void); +extern void _kerjmp_HuAudFXEmiterPlay(void); +extern void _kerjmp_HuAudFXEmiterUpDate(void); +extern void _kerjmp_HuAudFXListnerKill(void); +extern void _kerjmp_HuAudFXStatusGet(void); +extern void _kerjmp_HuAudFXPitchSet(void); +extern void _kerjmp_HuAudFXVolSet(void); +extern void _kerjmp_HuAudDllSndGrpSet(void); +extern void _kerjmp_HuAudSndGrpSetSet(void); +extern void _kerjmp_HuAudSndGrpSet(void); +extern void _kerjmp_HuAudSndCommonGrpSet(void); +extern void _kerjmp_HuAudSStreamPlay(void); +extern void _kerjmp_HuAudSStreamStop(void); +extern void _kerjmp_HuAudSStreamFadeOut(void); +extern void _kerjmp_HuAudSStreamAllFadeOut(void); +extern void _kerjmp_HuAudSStreamAllStop(void); +extern void _kerjmp_HuAudSStreamStatGet(void); +extern void _kerjmp_HuAudPlayerVoicePlay(void); +extern void _kerjmp_HuAudCharVoicePlay(void); +extern void _kerjmp_HuAudPlayerVoicePlayPos(void); +extern void _kerjmp_HuAudCharVoicePlayPos(void); +extern void _kerjmp_HuAudPlayerVoicePlayEntry(void); +extern void _kerjmp_HuAudCharVoicePlayEntry(void); +extern void _kerjmp_HuAudAUXSet(void); +extern void _kerjmp_msmMusPlay(void); +extern void _kerjmp_espInit(void); +extern void _kerjmp_espEntry(void); +extern void _kerjmp_espKill(void); +extern void _kerjmp_espGrpIDGet(void); +extern void _kerjmp_espDispOn(void); +extern void _kerjmp_espDispOff(void); +extern void _kerjmp_espAttrSet(void); +extern void _kerjmp_espAttrReset(void); +extern void _kerjmp_espPosSet(void); +extern void _kerjmp_espScaleSet(void); +extern void _kerjmp_espZRotSet(void); +extern void _kerjmp_espTPLvlSet(void); +extern void _kerjmp_espColorSet(void); +extern void _kerjmp_espSpeedSet(void); +extern void _kerjmp_espBankSet(void); +extern void _kerjmp_espDrawNoSet(void); +extern void _kerjmp_espPriSet(void); +extern void _kerjmp_lbl_80192060(void); +extern void _kerjmp_lbl_80192160(void); +extern void _kerjmp_lbl_80192260(void); +extern void _kerjmp_lbl_801D3DA0(void); +extern void _kerjmp_fn_8003FF68(void); +extern void _kerjmp_HuPrcInit(void); +extern void _kerjmp_HuPrcCall(void); +extern void _kerjmp_HuPrcCreate(void); +extern void _kerjmp_HuPrcKill(void); +extern void _kerjmp_HuPrcEnd(void); +extern void _kerjmp_HuPrcWakeup(void); +extern void _kerjmp_HuPrcSleep(void); +extern void _kerjmp_HuPrcVSleep(void); +extern void _kerjmp_HuPrcCurrentGet(void); +extern void _kerjmp_HuPrcDestructorSet(void); +extern void _kerjmp_HuPrcDestructorSet2(void); +extern void _kerjmp_HuPrcChildCreate(void); +extern void _kerjmp_HuPrcChildLink(void); +extern void _kerjmp_HuPrcChildUnlink(void); +extern void _kerjmp_HuPrcChildKill(void); +extern void _kerjmp_HuPrcMemAlloc(void); +extern void _kerjmp_HuPrcMemFree(void); +extern void _kerjmp_Hu3DParManVacumeSet(void); +extern void _kerjmp_HuDataInit(void); +extern void _kerjmp_HuDataDirRead(void); +extern void _kerjmp_HuDataRead(void); +extern void _kerjmp_HuDataReadNum(void); +extern void _kerjmp_HuDataReadMulti(void); +extern void _kerjmp_HuDataDirReadAsync(void); +extern void _kerjmp_HuDataDirReadNumAsync(void); +extern void _kerjmp_HuDataSelHeapRead(void); +extern void _kerjmp_HuDataSelHeapReadNum(void); +extern void _kerjmp_HuDataGetSize(void); +extern void _kerjmp_HuDataDirClose(void); +extern void _kerjmp_HuDataDirCloseNum(void); +extern void _kerjmp_HuDataClose(void); +extern void _kerjmp_HuDataCloseMulti(void); +extern void _kerjmp_HuDataReadNumHeapShortForce(void); +extern void _kerjmp_ARRegisterDMACallback(void); +extern void _kerjmp_ARGetDMAStatus(void); +extern void _kerjmp_ARStartDMA(void); +extern void _kerjmp_ARInit(void); +extern void _kerjmp_ARAlloc(void); +extern void _kerjmp_ARFree(void); +extern void _kerjmp_ARGetSize(void); +extern void _kerjmp_ARSetSize(void); +extern void _kerjmp_HuSprBegin(void); +extern void _kerjmp_HuSprCall(void); +extern void _kerjmp_HuSprFinish(void); +extern void _kerjmp_HuSprAnimRead(void); +extern void _kerjmp_HuSprCreate(void); +extern void _kerjmp_HuSprGrpCreate(void); +extern void _kerjmp_HuSprGrpMemberSet(void); +extern void _kerjmp_HuSprGrpMemberKill(void); +extern void _kerjmp_HuSprGrpKill(void); +extern void _kerjmp_HuSprKill(void); +extern void _kerjmp_HuSprAnimKill(void); +extern void _kerjmp_HuSprAttrSet(void); +extern void _kerjmp_HuSprAttrReset(void); +extern void _kerjmp_HuSprPosSet(void); +extern void _kerjmp_HuSprScaleSet(void); +extern void _kerjmp_HuSprZRotSet(void); +extern void _kerjmp_HuSprGrpPosSet(void); +extern void _kerjmp_HuSprGrpZRotSet(void); +extern void _kerjmp_HuSprGrpScaleSet(void); +extern void _kerjmp_HuSprTPLvlSet(void); +extern void _kerjmp_HuSprColorSet(void); +extern void _kerjmp_HuSprSpeedSet(void); +extern void _kerjmp_HuSprBankSet(void); +extern void _kerjmp_HuSprGrpDrawNoSet(void); +extern void _kerjmp_HuSprDrawNoSet(void); +extern void _kerjmp_HuSprPriSet(void); +extern void _kerjmp_HuSprFuncCreate(void); +extern void _kerjmp_HuSprAnimMake(void); +extern void _kerjmp_HuSprGrpCenterSet(void); +extern void _kerjmp_HuSprAnimLock(void); +extern void _kerjmp_AnimDebug(void); +extern void _kerjmp_HuSprExecLayerSet(void); +extern void _kerjmp_HuSprSprBGSet(void); +extern void _kerjmp_HuSprBGSet(void); +extern void _kerjmp_HuSprGrpScissorSet(void); +extern void _kerjmp_HuSprScissorSet(void); +extern void _kerjmp_HuSprGrpTPLvlSet(void); +extern void _kerjmp_HuARMalloc(void); +extern void _kerjmp_HuARFree(void); +extern void _kerjmp_HuAR_DVDtoARAM(void); +extern void _kerjmp_HuAR_MRAMtoARAM(void); +extern void _kerjmp_HuAR_MRAMtoARAM2(void); +extern void _kerjmp_HuAR_ARAMtoMRAM(void); +extern void _kerjmp_HuAR_ARAMtoMRAMNum(void); +extern void _kerjmp_HuARDMACheck(void); +extern void _kerjmp_HuARDirCheck(void); +extern void _kerjmp_HuARDirFree(void); +extern void _kerjmp_HuAR_ARAMtoMRAMFileRead(void); +extern void _kerjmp_HuAudFXListnerSetEX(void); +extern void _kerjmp_HuWindowInit(void); +extern void _kerjmp_HuWinInit(void); +extern void _kerjmp_HuWinCreate(void); +extern void _kerjmp_HuWinKill(void); +extern void _kerjmp_HuWinAllKill(void); +extern void _kerjmp_HuWinMesSet(void); +extern void _kerjmp_HuWinInsertMesSet(void); +extern void _kerjmp_HuWinChoiceGet(void); +extern void _kerjmp_HuWinChoiceNumGet(void); +extern void _kerjmp_HuWinMesWait(void); +extern void _kerjmp_HuWinSprKill(void); +extern void _kerjmp_HuWinMesRead(void); +extern void _kerjmp_HuWinAnimSet(void); +extern void _kerjmp_HuWinSprSet(void); +extern void _kerjmp_HuWinSprPosSet(void); +extern void _kerjmp_HuWinSprIDGet(void); +extern void _kerjmp_HuWinMesMaxSizeGet(void); +extern void _kerjmp_HuWinInsertMesSizeGet(void); +extern void _kerjmp_HuWinMesMaxSizeBetGet(void); +extern void _kerjmp_HuWinExCreate(void); +extern void _kerjmp_HuWinDispOn(void); +extern void _kerjmp_HuWinDispOff(void); +extern void _kerjmp_HuWinExAnimIn(void); +extern void _kerjmp_HuWinExAnimOut(void); +extern void _kerjmp_HuWinExCleanup(void); +extern void _kerjmp_HuWinExAnimPopIn(void); +extern void _kerjmp_HuWinComKeyWait(void); +extern void _kerjmp_HuWinComKeySet(void); +extern void _kerjmp_HuWinComKeyReset(void); +extern void _kerjmp_HuWinDrawNoSet(void); +extern void _kerjmp_HuWinAttrSet(void); +extern void _kerjmp_HuWinAttrReset(void); +extern void _kerjmp_HuWinBGTPLvlSet(void); +extern void _kerjmp_HuWinMesSpeedSet(void); +extern void _kerjmp_HuWinBGColSet(void); +extern void _kerjmp_HuWinChoiceDisable(void); +extern void _kerjmp_HuWinKeyWaitEntry(void); +extern void _kerjmp_HuWinCenterPosSet(void); +extern void _kerjmp_HuWinPosSet(void); +extern void _kerjmp_HuWinZRotSet(void); +extern void _kerjmp_HuWinScaleSet(void); +extern void _kerjmp_HuWinChoiceNowGet(void); +extern void _kerjmp_HuWinStatGet(void); +extern void _kerjmp_HuWinMesColSet(void); +extern void _kerjmp_HuWinScissorSet(void); +extern void _kerjmp_HuWinExCreateStyled(void); +extern void _kerjmp_HuWinPriSet(void); +extern void _kerjmp_HuWinSprPriSet(void); +extern void _kerjmp_HuWinKeyWaitNumGet(void); +extern void _kerjmp_HuWinMesSizeCancelCRSet(void); +extern void _kerjmp_HuWinMesPalSet(void); +extern void _kerjmp_HuWinHomeClear(void); +extern void _kerjmp_HuWinPushKeySet(void); +extern void _kerjmp_HuWinDisablePlayerSet(void); +extern void _kerjmp_HuWinDisablePlayerReset(void); +extern void _kerjmp_CharManInit(void); +extern void _kerjmp_CharARAMOpen(void); +extern void _kerjmp_CharKill(void); +extern void _kerjmp_CharModelKill(void); +extern void _kerjmp_CharKillAll(void); +extern void _kerjmp_CharModelCreate(void); +extern void _kerjmp_CharModelMotionCreate(void); +extern void _kerjmp_CharModelMotionIndexSet(void); +extern void _kerjmp_CharModelMotionKill(void); +extern void _kerjmp_CharModelMotionDataClose(void); +extern void _kerjmp_CharModelDataClose(void); +extern void _kerjmp_CharAMemPtrGet(void); +extern void _kerjmp_CharModelMotionSet(void); +extern void _kerjmp_CharModelMotionTimeSet(void); +extern void _kerjmp_CharModelMotionTimeGet(void); +extern void _kerjmp_CharModelMotionMaxTimeGet(void); +extern void _kerjmp_CharModelMotionEndCheck(void); +extern void _kerjmp_CharModelMotionShiftIDGet(void); +extern void _kerjmp_CharModelMotionShiftSet(void); +extern void _kerjmp_CharModelMotionShiftTimeGet(void); +extern void _kerjmp_CharModelMotionSpeedSet(void); +extern void _kerjmp_CharModelLayerSetAll(void); +extern void _kerjmp_CharModelItemHookCreate(void); +extern void _kerjmp_CharModelEffectCreate(void); +extern void _kerjmp_CharModelCoinEffectCreate(void); +extern void _kerjmp_fn_8004EC74(void); +extern void _kerjmp_fn_8004EDA4(void); +extern void _kerjmp_fn_8004F13C(void); +extern void _kerjmp_fn_8004F058(void); +extern void _kerjmp_GWCharColorGet(void); +extern void _kerjmp_CharModelLayerSetAll2(void); +extern void _kerjmp_charTexNameTbl(void); +extern void _kerjmp_CharModelTexNameGet(void); +extern void _kerjmp_CharModelVoiceEnableSet(void); +extern void _kerjmp_CharModelEffectNpcInitSilent(void); +extern void _kerjmp_CharModelStepTypeSet(void); +extern void _kerjmp_fn_8004F52C(void); +extern void _kerjmp_CharModelEffectEnableSet(void); +extern void _kerjmp_CharModelEffectNpcInit(void); +extern void _kerjmp_HuPrcSetStat(void); +extern void _kerjmp_HuPrcResetStat(void); +extern void _kerjmp_omGameSysInit(void); +extern void _kerjmp_omResetStatBit(void); +extern void _kerjmp_omCurrentOvlGet(void); +extern void _kerjmp_omPauseChk(void); +extern void _kerjmp_omOvlHisChg(void); +extern void _kerjmp_omOvlHisGet(void); +extern void _kerjmp_omovlevtno(void); +extern void _kerjmp_omovlstat(void); +extern void _kerjmp_AddX(void); +extern void _kerjmp_AddZ(void); +extern void _kerjmp_MapObject(void); +extern void _kerjmp_CharObject(void); +extern void _kerjmp_nMap(void); +extern void _kerjmp_nChar(void); +extern void _kerjmp_MapWall(void); +extern void _kerjmp_MapPos(void); +extern void _kerjmp_HitFaceVec(void); +extern void _kerjmp_HitFace(void); +extern void _kerjmp_HitFaceCount(void); +extern void _kerjmp_GWPlayer(void); +extern void _kerjmp_GWSystem(void); +extern void _kerjmp_HuTHPSprCreateVol(void); +extern void _kerjmp_HuTHPSprCreate(void); +extern void _kerjmp_HuTHP3DCreateVol(void); +extern void _kerjmp_HuTHP3DCreate(void); +extern void _kerjmp_HuTHPStop(void); +extern void _kerjmp_HuTHPClose(void); +extern void _kerjmp_HuTHPRestart(void); +extern void _kerjmp_HuTHPEndCheck(void); +extern void _kerjmp_HuTHPFrameGet(void); +extern void _kerjmp_HuTHPTotalFrameGet(void); +extern void _kerjmp_HuTHPSetVolume(void); +extern void _kerjmp_HuCardCheck(void); +extern void _kerjmp_HuCardMount(void); +extern void _kerjmp_HuCardFormat(void); +extern void _kerjmp_HuCardOpen(void); +extern void _kerjmp_HuCardRead(void); +extern void _kerjmp_HuCardCreate(void); +extern void _kerjmp_HuCardClose(void); +extern void _kerjmp_HuCardWrite(void); +extern void _kerjmp_HuCardDelete(void); +extern void _kerjmp_HuCardSectorSizeGet(void); +extern void _kerjmp_HuCardFreeSpaceGet(void); +extern void _kerjmp_HuCardSlotCheck(void); +extern void _kerjmp_SLFileOpen(void); +extern void _kerjmp_SLFileCreate(void); +extern void _kerjmp_SLFileWrite(void); +extern void _kerjmp_SLFileClose(void); +extern void _kerjmp_SLFileRead(void); +extern void _kerjmp_SLCurSlotNoSet(void); +extern void _kerjmp_SLSaveDataMake(void); +extern void _kerjmp_SLCommonSet(void); +extern void _kerjmp_SLSaveBoard(void); +extern void _kerjmp_SLSaveBoardBackup(void); +extern void _kerjmp_SLSave(void); +extern void _kerjmp_SLLoadGameStat(void); +extern void _kerjmp_SLLoadBoard(void); +extern void _kerjmp_SLLoadBoardBackup(void); +extern void _kerjmp_SLLoad(void); +extern void _kerjmp_SLCurBoxNoSet(void); +extern void _kerjmp_SLSaveFlagSet(void); +extern void _kerjmp_SLSaveFlagGet(void); +extern void _kerjmp_SLCheckSumCheck(void); +extern void _kerjmp_SLSerialNoGet(void); +extern void _kerjmp_SLSerialNoCheck(void); +extern void _kerjmp_saveExecF(void); +extern void _kerjmp__CheckFlag(void); +extern void _kerjmp__SetFlag(void); +extern void _kerjmp__ClearFlag(void); +extern void _kerjmp_mgInfoTbl(void); +extern void _kerjmp_mgTypeCurr(void); +extern void _kerjmp_mgBattleStar(void); +extern void _kerjmp_lbl_801D3E94_0(void); +extern void _kerjmp_mgTicTacToeGrid(void); +extern void _kerjmp_mgIndexList(void); +extern void _kerjmp_lbl_801D3E94_1(void); +extern void _kerjmp_mgGameStatBackup(void); +extern void _kerjmp_mgRecordExtra(void); +extern void _kerjmp_mgQuitExtraF(void); +extern void _kerjmp_mgPracticeEnableF(void); +extern void _kerjmp_mgBoardHostEnableF(void); +extern void _kerjmp_omMgIndexGet(void); +extern void _kerjmp_mgInstExitEnableF(void); +extern void _kerjmp_GWMGRecordSet(void); +extern void _kerjmp_GWMGRecordGet(void); +extern void _kerjmp_GWBoardPlayCountAdd(void); +extern void _kerjmp_GWBoardPlayCountSet(void); +extern void _kerjmp_GWBoardPlayCountGet(void); +extern void _kerjmp_GWBoardWinCountInc(void); +extern void _kerjmp_GWBoardWinCountGet(void); +extern void _kerjmp_GWBoardWinCountSet(void); +extern void _kerjmp_GWBoardMaxStarsSet(void); +extern void _kerjmp_GWBoardMaxStarsGet(void); +extern void _kerjmp_GWBoardMaxCoinsSet(void); +extern void _kerjmp_GWBoardMaxCoinsGet(void); +extern void _kerjmp_GWTotalStarsSet(void); +extern void _kerjmp_GWTotalStarsAdd(void); +extern void _kerjmp_GWTotalStarsGet(void); +extern void _kerjmp_GWStarsAdd(void); +extern void _kerjmp_GWStarsGet(void); +extern void _kerjmp_GWStarsSet(void); +extern void _kerjmp_GWCoinsAdd(void); +extern void _kerjmp_GWCoinsSet(void); +extern void _kerjmp_GWCoinsGet(void); +extern void _kerjmp_GWMGCustomReset(void); +extern void _kerjmp_GWMGCustomSet(void); +extern void _kerjmp_GWMGCustomGet(void); +extern void _kerjmp_GWMGAvailGet(void); +extern void _kerjmp_fmod(void); +extern void _kerjmp__savegpr_15(void); +extern void _kerjmp__restgpr_15(void); +extern void _kerjmp__savegpr_16(void); +extern void _kerjmp__restgpr_16(void); +extern void _kerjmp___save_gpr(void); +extern void _kerjmp___restore_gpr(void); +extern void _kerjmp_omDBGMenuButton(void); +extern void _kerjmp_msmSeSetListener(void); +extern void _kerjmp_msmSeUpdataListener(void); +extern void _kerjmp_msmSeGetIndexPtr(void); +extern void _kerjmp_msmMusSetMasterVolume(void); +extern void _kerjmp_msmSysGetOutputMode(void); +extern void _kerjmp_BoardRollExec(void); +extern void _kerjmp_BoardRollKill(void); +extern void _kerjmp_BoardDiceValueSet(void); +extern void _kerjmp_BoardDiceStop(void); +extern void _kerjmp_BoardDicePauseAll(void); +extern void _kerjmp_BoardDiceDoneCheck(void); +extern void _kerjmp_BoardCommonInit(void); +extern void _kerjmp_BoardStoryConfigSet(void); +extern void _kerjmp_BoardPartyConfigSet(void); +extern void _kerjmp_BoardSaveInit(void); +extern void _kerjmp_BoardMGExit(void); +extern void _kerjmp_BoardDAngleCalcVec(void); +extern void _kerjmp_BoardDAngleCalc(void); +extern void _kerjmp_BoardVecMaxDistXZCheck(void); +extern void _kerjmp_BoardIsKill(void); +extern void _kerjmp_BoardKill(void); +extern void _kerjmp_BoardCameraScissorSet(void); +extern void _kerjmp_BoardCameraViewSet(void); +extern void _kerjmp_BoardCameraDirGet(void); +extern void _kerjmp_BoardCameraPointDirGet(void); +extern void _kerjmp_BoardCameraMoveSet(void); +extern void _kerjmp_BoardCameraQuakeSet(void); +extern void _kerjmp_BoardCameraQuakeReset(void); +extern void _kerjmp_BoardCameraTargetSet(void); +extern void _kerjmp_BoardCameraPosGet(void); +extern void _kerjmp_BoardCameraTargetGet(void); +extern void _kerjmp_BoardCameraRotGet(void); +extern void _kerjmp_BoardCameraZoomGet(void); +extern void _kerjmp_BoardCameraPosSet(void); +extern void _kerjmp_BoardCameraXRotZoomSet(void); +extern void _kerjmp_BoardCameraZoomSet(void); +extern void _kerjmp_BoardCameraRotSet(void); +extern void _kerjmp_BoardCameraFovSet(void); +extern void _kerjmp_BoardCameraOffsetSet(void); +extern void _kerjmp_BoardCameraTargetPlayerSet(void); +extern void _kerjmp_BoardCameraTargetModelSet(void); +extern void _kerjmp_BoardCameraTargetSpaceSet(void); +extern void _kerjmp_BoardCameraCullCheck(void); +extern void _kerjmp_BoardCameraMotionIsDone(void); +extern void _kerjmp_BoardCameraMotionStartEx(void); +extern void _kerjmp_BoardCameraMotionStart(void); +extern void _kerjmp_BoardCameraMotionWait(void); +extern void _kerjmp_BoardCameraNearFarSet(void); +extern void _kerjmp_BoardCameraNearFarGet(void); +extern void _kerjmp_BoardEventFlagSet(void); +extern void _kerjmp_BoardEventFlagReset(void); +extern void _kerjmp_BoardEventFlagGet(void); +extern void _kerjmp_BoardMGCreate(void); +extern void _kerjmp_BoardDAngleCalcRange(void); +extern void _kerjmp_BoardVecDistXZCalc(void); +extern void _kerjmp_BoardVecMinDistCheck(void); +extern void _kerjmp_BoardArcSin(void); +extern void _kerjmp_BoardArcCos(void); +extern void _kerjmp_BoardMTXCalcLookAt(void); +extern void _kerjmp_BoardLightSetExec(void); +extern void _kerjmp_BoardLightResetExec(void); +extern void _kerjmp_BoardLightHookSet(void); +extern void _kerjmp_BoardMGDoneFlagSet(void); +extern void _kerjmp_BoardMGDoneFlagGet(void); +extern void _kerjmp_BoardMGSetupExec(void); +extern void _kerjmp_BoardFilterFadeOut(void); +extern void _kerjmp_BoardFilterFadeInit(void); +extern void _kerjmp_BoardFilterFadePauseCheck(void); +extern void _kerjmp_BoardFilterFadeCheck(void); +extern void _kerjmp_BoardConfettiCreate(void); +extern void _kerjmp_BoardConfettiKill(void); +extern void _kerjmp_BoardConfettiStop(void); +extern void _kerjmp_BoardRand(void); +extern void _kerjmp_BoardRandMod(void); +extern void _kerjmp_BoardRandFloat(void); +extern void _kerjmp_boardRandSeed(void); +extern void _kerjmp_BoardViewMoveCheck(void); +extern void _kerjmp_BoardViewMoveEnd(void); +extern void _kerjmp_BoardViewFocusGetPos(void); +extern void _kerjmp_BoardViewMoveStart(void); +extern void _kerjmp_BoardViewFocusSet(void); +extern void _kerjmp_boardTurnFunc(void); +extern void _kerjmp_boardStarShowNextHook(void); +extern void _kerjmp_boardBowserHook(void); +extern void _kerjmp_boardTurnStartFunc(void); +extern void _kerjmp_boardStarGiveHook(void); +extern void _kerjmp_boardMainProc(void); +extern void _kerjmp_boardObjMan(void); +extern void _kerjmp_BoardItemStart(void); +extern void _kerjmp_BoardCharWheelInit(void); +extern void _kerjmp_BoardCharWheelCheck(void); +extern void _kerjmp_BoardCharWheelWait(void); +extern void _kerjmp_BoardCharWheelResultGet(void); +extern void _kerjmp_BoardCharWheelSpeedSet(void); +extern void _kerjmp_BoardSpaceInit(void); +extern void _kerjmp_BoardSpaceDestroy(void); +extern void _kerjmp_BoardSpaceLandExec(void); +extern void _kerjmp_BoardSpaceWalkEventFuncSet(void); +extern void _kerjmp_BoardSpaceWalkMiniEventFuncSet(void); +extern void _kerjmp_BoardSpaceLandEventFuncSet(void); +extern void _kerjmp_BoardSpaceWalkEventExec(void); +extern void _kerjmp_BoardSpaceWalkMiniEventExec(void); +extern void _kerjmp_BoardSpaceBlockExec(void); +extern void _kerjmp_BoardSpaceWalkExec(void); +extern void _kerjmp_BoardSpaceCameraSet(void); +extern void _kerjmp_BoardSpaceCornerPosGet(void); +extern void _kerjmp_BoardSpaceStarGetRandom(void); +extern void _kerjmp_BoardSpaceCountGet(void); +extern void _kerjmp_BoardSpaceGet(void); +extern void _kerjmp_BoardSpaceFlagPosGet(void); +extern void _kerjmp_BoardSpaceFlagGet(void); +extern void _kerjmp_BoardSpaceLinkTypeSearch(void); +extern void _kerjmp_BoardSpacePosGet(void); +extern void _kerjmp_BoardSpaceRotGet(void); +extern void _kerjmp_BoardSpaceRead(void); +extern void _kerjmp_BoardSpaceAttrReset(void); +extern void _kerjmp_BoardSpaceAttrSet(void); +extern void _kerjmp_BoardSpaceLinkTargetListGet(void); +extern void _kerjmp_BoardSpaceFlagSearch(void); +extern void _kerjmp_BoardSpaceTypeGet(void); +extern void _kerjmp_BoardSpaceTypeSet(void); +extern void _kerjmp_BoardSpaceLinkFlagSearch(void); +extern void _kerjmp_BoardSpaceLinkTypeListGet(void); +extern void _kerjmp_BoardSpaceLinkTransformGet(void); +extern void _kerjmp_BoardSpaceHide(void); +extern void _kerjmp_BoardSpaceStarCheck(void); +extern void _kerjmp_BoardSpaceStarMove(void); +extern void _kerjmp_BoardSpaceStarSetIndex(void); +extern void _kerjmp_BoardSpaceStarGetCurr(void); +extern void _kerjmp_BoardSpaceStarGet(void); +extern void _kerjmp_BoardStarHostSet(void); +extern void _kerjmp_BoardStarHostMdlGet(void); +extern void _kerjmp_BoardBooHouseHostSet(void); +extern void _kerjmp_BoardBooHouseHostGet(void); +extern void _kerjmp_BoardLotteryHostSet(void); +extern void _kerjmp_BoardLotteryHostGet(void); +extern void _kerjmp_BoardShopHostSet(void); +extern void _kerjmp_BoardShopHostGet(void); +extern void _kerjmp_BoardPauseActiveCheck(void); +extern void _kerjmp_BoardLotteryInit(void); +extern void _kerjmp_BoardLotteryKill(void); +extern void _kerjmp_BoardLotteryExec(void); +extern void _kerjmp_BoardBooHouseCreate(void); +extern void _kerjmp_BoardBooHouseKill(void); +extern void _kerjmp_BoardBooHouseExec(void); +extern void _kerjmp_BoardLandBlueExec(void); +extern void _kerjmp_BoardLandRedExec(void); +extern void _kerjmp_BoardWarpExec(void); +extern void _kerjmp_BoardMushroomExec(void); +extern void _kerjmp_BoardStarExec(void); +extern void _kerjmp_BoardStarGive(void); +extern void _kerjmp_BoardBattleExec(void); +extern void _kerjmp_BoardShopInit(void); +extern void _kerjmp_BoardShopKill(void); +extern void _kerjmp_BoardShopExec(void); +extern void _kerjmp_BoardModelInit(void); +extern void _kerjmp_BoardModelKillAll(void); +extern void _kerjmp_BoardModelDummyUpdate(void); +extern void _kerjmp_BoardModelVisibilityUpdate(void); +extern void _kerjmp_BoardModelKill(void); +extern void _kerjmp_BoardModelExistCheck(void); +extern void _kerjmp_BoardModelExistDupe(void); +extern void _kerjmp_BoardModelIDGet(void); +extern void _kerjmp_BoardModelAlphaSet(void); +extern void _kerjmp_BoardModelMotionStart(void); +extern void _kerjmp_BoardModelMotionShiftSet(void); +extern void _kerjmp_BoardModelAttrSet(void); +extern void _kerjmp_BoardModelAttrReset(void); +extern void _kerjmp_BoardModelMotionTimeSet(void); +extern void _kerjmp_BoardModelMotionSpeedSet(void); +extern void _kerjmp_BoardModelMotionSpeedGet(void); +extern void _kerjmp_BoardModelMotionStartEndSet(void); +extern void _kerjmp_BoardModelMotionUpdateSet(void); +extern void _kerjmp_BoardModelMotionShapeSet(void); +extern void _kerjmp_BoardModelMotionShapeTimeGet(void); +extern void _kerjmp_BoardModelMotionShapeMaxTimeGet(void); +extern void _kerjmp_BoardModelMotionShapeSpeedSet(void); +extern void _kerjmp_BoardModelMotionShapeSpeedGet(void); +extern void _kerjmp_BoardModelMotionShapeEndCheck(void); +extern void _kerjmp_BoardModelMotionShapeStartEndSet(void); +extern void _kerjmp_BoardModelMtxSet(void); +extern void _kerjmp_BoardModelMtxGet(void); +extern void _kerjmp_BoardModelPosSetV(void); +extern void _kerjmp_BoardModelRotSetV(void); +extern void _kerjmp_BoardModelScaleSetV(void); +extern void _kerjmp_BoardModelPosSet(void); +extern void _kerjmp_BoardModelRotSet(void); +extern void _kerjmp_BoardModelScaleSet(void); +extern void _kerjmp_BoardModelPosGet(void); +extern void _kerjmp_BoardModelRotGet(void); +extern void _kerjmp_BoardModelScaleGet(void); +extern void _kerjmp_fn_8006DDE8(void); +extern void _kerjmp_BoardModelVisibilitySet(void); +extern void _kerjmp_BoardModelVisibilityGet(void); +extern void _kerjmp_BoardModelLayerSet(void); +extern void _kerjmp_BoardModelCameraSet(void); +extern void _kerjmp_BoardModelPassSet(void); +extern void _kerjmp_fn_8006DC1C(void); +extern void _kerjmp_BoardModelHookSet(void); +extern void _kerjmp_BoardModelHookReset(void); +extern void _kerjmp_BoardModelHookObjReset(void); +extern void _kerjmp_BoardModelMotionEndCheck(void); +extern void _kerjmp_BoardModelMotionTimeGet(void); +extern void _kerjmp_BoardModelMotionMaxTimeGet(void); +extern void _kerjmp_BoardModelMotionCreate(void); +extern void _kerjmp_BoardModelMotionKill(void); +extern void _kerjmp_BoardModelCreate(void); +extern void _kerjmp_BoardModelCreateCharacter(void); +extern void _kerjmp_BoardModelCreateParam(void); +extern void _kerjmp_BoardModelLayerSetAll(void); +extern void _kerjmp_BoardModelCameraSetAll(void); +extern void _kerjmp_BoardModelHideSetAll(void); +extern void _kerjmp_BoardModelAmbSet(void); +extern void _kerjmp_BoardModelAmbSetAll(void); +extern void _kerjmp_BoardModelRotYSet(void); +extern void _kerjmp_BoardModelRotYGet(void); +extern void _kerjmp_BoardModelVoiceEnableSet(void); +extern void _kerjmp_BoardPlayerModelInit(void); +extern void _kerjmp_BoardPlayerModelKill(void); +extern void _kerjmp_BoardPlayerInit(void); +extern void _kerjmp_BoardPlayerGetCharMess(void); +extern void _kerjmp_BoardPlayerGetCharName(void); +extern void _kerjmp_BoardPlayerLayerSet(void); +extern void _kerjmp_BoardPlayerCameraSet(void); +extern void _kerjmp_fn_80062A40(void); +extern void _kerjmp_BoardPlayerExistCheck(void); +extern void _kerjmp_BoardPlayerMtxSet(void); +extern void _kerjmp_BoardPlayerPosSet(void); +extern void _kerjmp_BoardPlayerPosSetV(void); +extern void _kerjmp_BoardPlayerPosGet(void); +extern void _kerjmp_BoardPlayerRotSet(void); +extern void _kerjmp_BoardPlayerRotSetV(void); +extern void _kerjmp_BoardPlayerRotGet(void); +extern void _kerjmp_BoardPlayerRotYSet(void); +extern void _kerjmp_BoardPlayerRotYGet(void); +extern void _kerjmp_BoardPlayerScaleSet(void); +extern void _kerjmp_BoardPlayerScaleSetV(void); +extern void _kerjmp_BoardPlayerScaleGet(void); +extern void _kerjmp_BoardPlayerCornerPosSet(void); +extern void _kerjmp_BoardPlayerCornerPosGet(void); +extern void _kerjmp_BoardPlayerSizeGet(void); +extern void _kerjmp_BoardPlayerSizeSet(void); +extern void _kerjmp_BoardPlayerCurrMotionGet(void); +extern void _kerjmp_BoardPlayerMotionEndCheck(void); +extern void _kerjmp_BoardPlayerMotionEndWait(void); +extern void _kerjmp_BoardPlayerMotionMaxTimeGet(void); +extern void _kerjmp_BoardPlayerMotionTimeGet(void); +extern void _kerjmp_BoardPlayerVoiceEnableSet(void); +extern void _kerjmp_BoardPlayerMotionStart(void); +extern void _kerjmp_BoardPlayerMotionShiftSet(void); +extern void _kerjmp_BoardPlayerMotionCreate(void); +extern void _kerjmp_BoardPlayerMotionKill(void); +extern void _kerjmp_BoardPlayerMotionSpeedSet(void); +extern void _kerjmp_BoardPlayerMotionTimeSet(void); +extern void _kerjmp_BoardPlayerMotionStartEndSet(void); +extern void _kerjmp_BoardPlayerModelAttrSet(void); +extern void _kerjmp_BoardPlayerModelAttrReset(void); +extern void _kerjmp_BoardPlayerAmbSet(void); +extern void _kerjmp_BoardPlayerIdleSet(void); +extern void _kerjmp_BoardPlayerMotBlendSet(void); +extern void _kerjmp_BoardPlayerMotBlendCheck(void); +extern void _kerjmp_BoardPlayerRankCalc(void); +extern void _kerjmp_BoardRollTypeGet(void); +extern void _kerjmp_BoardRollTypeSet(void); +extern void _kerjmp_BoardPlayerItemRemove(void); +extern void _kerjmp_BoardPlayerItemFind(void); +extern void _kerjmp_BoardPlayerItemAdd(void); +extern void _kerjmp_BoardPlayerItemCount(void); +extern void _kerjmp_BoardPlayerCoinsAdd(void); +extern void _kerjmp_BoardPlayerCoinsGet(void); +extern void _kerjmp_BoardPlayerCoinsSet(void); +extern void _kerjmp_BoardPlayerStarsAdd(void); +extern void _kerjmp_BoardPlayerSameTeamFind(void); +extern void _kerjmp_BoardPlayerPosLerpStart(void); +extern void _kerjmp_BoardPlayerMoveToAsync(void); +extern void _kerjmp_BoardPlayerDiceJumpStart(void); +extern void _kerjmp_BoardPlayerDiceJumpCheck(void); +extern void _kerjmp_BoardDiceDigit2DInit(void); +extern void _kerjmp_BoardDiceDigit2DUpdateEnable(void); +extern void _kerjmp_BoardDiceDigit2DShowSet(void); +extern void _kerjmp_BoardPlayerBtnDownWait(void); +extern void _kerjmp_BoardPlayerAutoSizeSet(void); +extern void _kerjmp_BoardPlayerAutoSizeGet(void); +extern void _kerjmp_BoardPlayerMoveAwayIsDone(void); +extern void _kerjmp_BoardPlayerMoveAwayStartCurr(void); +extern void _kerjmp_BoardPlayerMoveAwayStart(void); +extern void _kerjmp_BoardPlayerPreTurnHookSet(void); +extern void _kerjmp_BoardPlayerPostTurnHookSet(void); +extern void _kerjmp_BoardPlayerCopyEyeMat(void); +extern void _kerjmp_BoardBowserSuitInit(void); +extern void _kerjmp_BoardBowserSuitKill(void); +extern void _kerjmp_BoardBowserSuitModelGet(void); +extern void _kerjmp_BoardBowserSuitPlayerModelGet(void); +extern void _kerjmp_BoardBowserSuitPlayerModelKill(void); +extern void _kerjmp_BoardBowserSuitMotionSetWait(void); +extern void _kerjmp_BoardBowserSuitMotionSetWalk(void); +extern void _kerjmp_BoardBowserSuitMotionSetWin(void); +extern void _kerjmp_BoardBowserSuitMotionSetJump(void); +extern void _kerjmp_BoardJunctionMaskSet(void); +extern void _kerjmp_BoardJunctionMaskReset(void); +extern void _kerjmp_BoardJunctionMaskZero(void); +extern void _kerjmp_BoardPlayerResizeAnimExec(void); +extern void _kerjmp_BoardWinCreate(void); +extern void _kerjmp_BoardWinCreateChoice(void); +extern void _kerjmp_BoardWinChoiceGet(void); +extern void _kerjmp_BoardWinWait(void); +extern void _kerjmp_BoardWinKill(void); +extern void _kerjmp_BoardWinInit(void); +extern void _kerjmp_BoardWinKillAll(void); +extern void _kerjmp_BoardWinUnusedArraySet(void); +extern void _kerjmp_BoardWinPause(void); +extern void _kerjmp_BoardWinInsertMesSet(void); +extern void _kerjmp_BoardWinAttrSet(void); +extern void _kerjmp_BoardWinAttrReset(void); +extern void _kerjmp_BoardWinChoiceDisable(void); +extern void _kerjmp_BoardWinKeyWait(void); +extern void _kerjmp_BoardWinSpeedGet(void); +extern void _kerjmp_BoardWinSpeedSet(void); +extern void _kerjmp_BoardWinPriSet(void); +extern void _kerjmp_BoardWinChoiceNowGet(void); +extern void _kerjmp_BoardWinChoiceNowGet2(void); +extern void _kerjmp_BoardStatusCreate(void); +extern void _kerjmp_BoardStatusKill(void); +extern void _kerjmp_BoardStatusVisibleGet(void); +extern void _kerjmp_BoardStatusShowSet(void); +extern void _kerjmp_BoardStatusShowSetForce(void); +extern void _kerjmp_BoardStatusGraySet(void); +extern void _kerjmp_BoardStatusShowSetAll(void); +extern void _kerjmp_BoardStatusStopCheck(void); +extern void _kerjmp_BoardSpriteCreate(void); +extern void _kerjmp_BoardStatusTargetPosSet(void); +extern void _kerjmp_BoardStatusPosSet(void); +extern void _kerjmp_BoardStatusPosGet(void); +extern void _kerjmp_BoardStatusItemHideSet(void); +extern void _kerjmp_BoardStatusHammerCreate(void); +extern void _kerjmp_BoardStatusHammerKill(void); +extern void _kerjmp_BoardStatusHammerShowSet(void); +extern void _kerjmp_BoardPickerCreate(void); +extern void _kerjmp_BoardPickerDoneCheck(void); +extern void _kerjmp_BoardPickerChoiceGet(void); +extern void _kerjmp_BoardPickerPosGet(void); +extern void _kerjmp_BoardPickerBackFlagSet(void); +extern void _kerjmp_BoardItemGetDestPos(void); +extern void _kerjmp_BoardItemUseExec(void); +extern void _kerjmp_BoardItemStatusKill(void); +extern void _kerjmp_BoardYourTurnExec(void); +extern void _kerjmp_BoardMusStart(void); +extern void _kerjmp_BoardAudSeqFadeOutFast(void); +extern void _kerjmp_BoardAudSeqFadeOut(void); +extern void _kerjmp_BoardMusLoudSet(void); +extern void _kerjmp_BoardMusVolPanSet(void); +extern void _kerjmp_BoardAudSeqPause(void); +extern void _kerjmp_BoardMusStatusGet(void); +extern void _kerjmp_BoardAudSeqFadeOutAll(void); +extern void _kerjmp_BoardAudFXPlay(void); +extern void _kerjmp_BoardAudFXStop(void); +extern void _kerjmp_BoardComKeySetLeft(void); +extern void _kerjmp_BoardComKeySetUp(void); +extern void _kerjmp_BoardComKeySetRight(void); +extern void _kerjmp_BoardComKeySetDown(void); +extern void _kerjmp_BoardComPreferItemCheck(void); +extern void _kerjmp_BoardComPreferItemGet(void); +extern void _kerjmp_BoardComFarPlayerFind(void); +extern void _kerjmp_boardTutorialData(void); +extern void _kerjmp_BoardTutorialHookSet(void); +extern void _kerjmp_BoardRollTutorialSet(void); +extern void _kerjmp_BoardTutorialDirInputSet(void); +extern void _kerjmp_BoardCharWheelTargetSet(void); +extern void _kerjmp_BoardTutorialBlockSetPos(void); +extern void _kerjmp_BoardTutorialItemSet(void); +extern void _kerjmp_BoardTutorialHostSet(void); +extern void _kerjmp_BoardMGSetupTutorialExec(void); +extern void _kerjmp_BoardShopTutorialExec(void); +extern void _kerjmp_BoardLotteryTutorialExec(void); +extern void _kerjmp_BoardBooHouseTutorialExec(void); + +asm void kerent(void) { + #ifdef __MWERKS__ // clang-format off + nofralloc + entry _kerjmp_OSDumpStopwatch + b OSDumpStopwatch + entry _kerjmp_PSVECDotProduct + b PSVECDotProduct + entry _kerjmp_PSVECDistance + b PSVECDistance + entry _kerjmp_PSVECSquareDistance + b PSVECSquareDistance + entry _kerjmp_VIGetDTVStatus + b VIGetDTVStatus + entry _kerjmp_OSGetProgressiveMode + b OSGetProgressiveMode + entry _kerjmp_OSSetProgressiveMode + b OSSetProgressiveMode + entry _kerjmp_PSVECSubtract + b PSVECSubtract + entry _kerjmp_PSMTXTranspose + b PSMTXTranspose + entry _kerjmp_C_VECReflect + b C_VECReflect + entry _kerjmp_PSMTXInvXpose + b PSMTXInvXpose + entry _kerjmp_PSMTXRotRad + b PSMTXRotRad + entry _kerjmp_PSMTXRotAxisRad + b PSMTXRotAxisRad + entry _kerjmp_PSVECMag + b PSVECMag + entry _kerjmp_PSVECScale + b PSVECScale + entry _kerjmp_PSMTXMultVecSR + b PSMTXMultVecSR + entry _kerjmp_C_QUATRotAxisRad + b C_QUATRotAxisRad + entry _kerjmp_C_QUATMtx + b C_QUATMtx + entry _kerjmp_C_QUATAdd + b C_QUATAdd + entry _kerjmp_C_QUATSlerp + b C_QUATSlerp + entry _kerjmp_PSQUATAdd + b PSQUATAdd + entry _kerjmp_PSMTXQuat + b PSMTXQuat + entry _kerjmp_PSQUATMultiply + b PSQUATMultiply + entry _kerjmp_PSQUATInverse + b PSQUATInverse + entry _kerjmp_PSQUATNormalize + b PSQUATNormalize + entry _kerjmp_OSTicksToCalendarTime + b OSTicksToCalendarTime + entry _kerjmp_GXWaitDrawDone + b GXWaitDrawDone + entry _kerjmp_GXProject + b GXProject + entry _kerjmp_GXSetProjectionv + b GXSetProjectionv + entry _kerjmp_GXGetViewportv + b GXGetViewportv + entry _kerjmp_GXPixModeSync + b GXPixModeSync + entry _kerjmp_GXSetIndTexOrder + b GXSetIndTexOrder + entry _kerjmp_GXSetIndTexMtx + b GXSetIndTexMtx + entry _kerjmp_GXSetTevIndWarp + b GXSetTevIndWarp + entry _kerjmp_GXSetTexCoordScaleManually + b GXSetTexCoordScaleManually + entry _kerjmp_GXSetTevIndTile + b GXSetTevIndTile + entry _kerjmp_GXNtsc480Prog + b GXNtsc480Prog + entry _kerjmp_omSetStatBit + b omSetStatBit + entry _kerjmp_MGSeqDoneCheck + b MGSeqDoneCheck + entry _kerjmp_WipeStatGet + b WipeStatGet + entry _kerjmp_omMakeGroupEx + b omMakeGroupEx + entry _kerjmp_omGetGroupMemberListEx + b omGetGroupMemberListEx + entry _kerjmp_MGSeqParamSet + b MGSeqParamSet + entry _kerjmp_MGSeqKill + b MGSeqKill + entry _kerjmp_ClusterAdjustObject + b ClusterAdjustObject + entry _kerjmp_printWin + b printWin + entry _kerjmp_print8 + b print8 + entry _kerjmp_HuSysVWaitSet + b HuSysVWaitSet + entry _kerjmp_fn_800401D0 + b fn_800401D0 + entry _kerjmp_fn_800402FC + b fn_800402FC + entry _kerjmp_MGSeqInit + b MGSeqInit + entry _kerjmp_MGSeqCreate + b MGSeqCreate + entry _kerjmp_omDelObjEx + b omDelObjEx + entry _kerjmp_MGSeqPosSet + b MGSeqPosSet + entry _kerjmp_atan2 + b atan2 + entry _kerjmp_atan2f + b atan2f + entry _kerjmp_cos + b cos + entry _kerjmp_MGSeqStatGet + b MGSeqStatGet + entry _kerjmp_Center + b Center + entry _kerjmp_CRotM + b CRotM + entry _kerjmp_CenterM + b CenterM + entry _kerjmp_CZoomM + b CZoomM + entry _kerjmp_omOutViewMulti + b omOutViewMulti + entry _kerjmp_omOutView + b omOutView + entry _kerjmp_omAddObjEx + b omAddObjEx + entry _kerjmp_omInitObjMan + b omInitObjMan + entry _kerjmp_frandmod + b frandmod + entry _kerjmp_fn_80040374 + b fn_80040374 + entry _kerjmp_SetDefLight + b SetDefLight + entry _kerjmp_HuSetVecF + b HuSetVecF + entry _kerjmp_HuSubVecF + b HuSubVecF + entry _kerjmp_frandf + b frandf + entry _kerjmp_MGSeqSprKill + b MGSeqSprKill + entry _kerjmp_mtxRotCat + b mtxRotCat + entry _kerjmp_Hu3DLayerHookSet + b Hu3DLayerHookSet + entry _kerjmp_Hu3DNoSyncSet + b Hu3DNoSyncSet + entry _kerjmp_Hu3DModelCreate + b Hu3DModelCreate + entry _kerjmp_Hu3DModelLink + b Hu3DModelLink + entry _kerjmp_Hu3DHookFuncCreate + b Hu3DHookFuncCreate + entry _kerjmp_Hu3DModelPosSet + b Hu3DModelPosSet + entry _kerjmp_Hu3DModelPosSetV + b Hu3DModelPosSetV + entry _kerjmp_Hu3DModelRotSet + b Hu3DModelRotSet + entry _kerjmp_Hu3DModelRotSetV + b Hu3DModelRotSetV + entry _kerjmp_Hu3DModelScaleSet + b Hu3DModelScaleSet + entry _kerjmp_Hu3DModelScaleSetV + b Hu3DModelScaleSetV + entry _kerjmp_Hu3DModelKill + b Hu3DModelKill + entry _kerjmp_Hu3DModelAllKill + b Hu3DModelAllKill + entry _kerjmp_Hu3DModelAttrSet + b Hu3DModelAttrSet + entry _kerjmp_Hu3DModelAttrReset + b Hu3DModelAttrReset + entry _kerjmp_Hu3DModelAttrGet + b Hu3DModelAttrGet + entry _kerjmp_Hu3DModelMotionAttrGet + b Hu3DModelMotionAttrGet + entry _kerjmp_Hu3DBGColorSet + b Hu3DBGColorSet + entry _kerjmp_Hu3DModelCameraSet + b Hu3DModelCameraSet + entry _kerjmp_Hu3DModelLayerSet + b Hu3DModelLayerSet + entry _kerjmp_Hu3DModelTPLvlSet + b Hu3DModelTPLvlSet + entry _kerjmp_Hu3DModelHookSet + b Hu3DModelHookSet + entry _kerjmp_Hu3DModelHookReset + b Hu3DModelHookReset + entry _kerjmp_Hu3DModelHookObjReset + b Hu3DModelHookObjReset + entry _kerjmp_Hu3DModelAmbSet + b Hu3DModelAmbSet + entry _kerjmp_Hu3DModelShadowDispOn + b Hu3DModelShadowDispOn + entry _kerjmp_Hu3DModelShadowDispOff + b Hu3DModelShadowDispOff + entry _kerjmp_Hu3DModelProjectionSet + b Hu3DModelProjectionSet + entry _kerjmp_Hu3DModelProjectionReset + b Hu3DModelProjectionReset + entry _kerjmp_Hu3DModelObjPosGet + b Hu3DModelObjPosGet + entry _kerjmp_Hu3DModelObjMtxGet + b Hu3DModelObjMtxGet + entry _kerjmp_Hu3DModelHiliteTypeSet + b Hu3DModelHiliteTypeSet + entry _kerjmp_Hu3DModelReflectTypeSet + b Hu3DModelReflectTypeSet + entry _kerjmp_Hu3DModelHiliteMapSet + b Hu3DModelHiliteMapSet + entry _kerjmp_HuPadInit + b HuPadInit + entry _kerjmp_HuPadRead + b HuPadRead + entry _kerjmp_HuPadRumbleSet + b HuPadRumbleSet + entry _kerjmp_HuPadRumbleStop + b HuPadRumbleStop + entry _kerjmp_HuPadRumbleAllStop + b HuPadRumbleAllStop + entry _kerjmp_HuPadStatGet + b HuPadStatGet + entry _kerjmp_HuPadRumbleGet + b HuPadRumbleGet + entry _kerjmp_Hu3DCameraCreate + b Hu3DCameraCreate + entry _kerjmp_Hu3DCameraPerspectiveSet + b Hu3DCameraPerspectiveSet + entry _kerjmp_Hu3DCameraViewportSet + b Hu3DCameraViewportSet + entry _kerjmp_Hu3DCameraScissorSet + b Hu3DCameraScissorSet + entry _kerjmp_Hu3DCameraPosSet + b Hu3DCameraPosSet + entry _kerjmp_Hu3DCameraKill + b Hu3DCameraKill + entry _kerjmp_Hu3DCameraPosSetV + b Hu3DCameraPosSetV + entry _kerjmp_Hu3DCameraAllKill + b Hu3DCameraAllKill + entry _kerjmp_Hu3DCameraSet + b Hu3DCameraSet + entry _kerjmp_Hu3DCameraMotionOn + b Hu3DCameraMotionOn + entry _kerjmp_Hu3DCameraMotionStart + b Hu3DCameraMotionStart + entry _kerjmp_Hu3DCameraMotionOff + b Hu3DCameraMotionOff + entry _kerjmp_Hu3DModelCameraCreate + b Hu3DModelCameraCreate + entry _kerjmp_Hu3DModelCameraInfoSet + b Hu3DModelCameraInfoSet + entry _kerjmp_Hu3DLighInit + b Hu3DLighInit + entry _kerjmp_Hu3DGLightCreate + b Hu3DGLightCreate + entry _kerjmp_Hu3DGLightCreateV + b Hu3DGLightCreateV + entry _kerjmp_Hu3DGLightKill + b Hu3DGLightKill + entry _kerjmp_Hu3DLightAllKill + b Hu3DLightAllKill + entry _kerjmp_Hu3DLightSet + b Hu3DLightSet + entry _kerjmp_Hu3DGLightSpotSet + b Hu3DGLightSpotSet + entry _kerjmp_Hu3DGLightInfinitytSet + b Hu3DGLightInfinitytSet + entry _kerjmp_Hu3DGLightPointSet + b Hu3DGLightPointSet + entry _kerjmp_Hu3DGLightColorSet + b Hu3DGLightColorSet + entry _kerjmp_Hu3DGLightPosSetV + b Hu3DGLightPosSetV + entry _kerjmp_Hu3DGLightPosSet + b Hu3DGLightPosSet + entry _kerjmp_Hu3DGLightPosAimSetV + b Hu3DGLightPosAimSetV + entry _kerjmp_Hu3DGLightPosAimSet + b Hu3DGLightPosAimSet + entry _kerjmp_Hu3DGLightStaticSet + b Hu3DGLightStaticSet + entry _kerjmp_Hu3DModelLightInfoSet + b Hu3DModelLightInfoSet + entry _kerjmp_Hu3DReflectMapSet + b Hu3DReflectMapSet + entry _kerjmp_Hu3DReflectNoSet + b Hu3DReflectNoSet + entry _kerjmp_Hu3DFogSet + b Hu3DFogSet + entry _kerjmp_Hu3DFogClear + b Hu3DFogClear + entry _kerjmp_Hu3DModelObjPtrGet + b Hu3DModelObjPtrGet + entry _kerjmp_Hu3DModelShadowSet + b Hu3DModelShadowSet + entry _kerjmp_Hu3DModelShadowReset + b Hu3DModelShadowReset + entry _kerjmp_Hu3DShadowCreate + b Hu3DShadowCreate + entry _kerjmp_Hu3DShadowPosSet + b Hu3DShadowPosSet + entry _kerjmp_Hu3DShadowTPLvlSet + b Hu3DShadowTPLvlSet + entry _kerjmp_Hu3DModelShadowMapSet + b Hu3DModelShadowMapSet + entry _kerjmp_Hu3DModelShadowMapObjSet + b Hu3DModelShadowMapObjSet + entry _kerjmp_Hu3DShadowSizeSet + b Hu3DShadowSizeSet + entry _kerjmp_Hu3DMipMapSet + b Hu3DMipMapSet + entry _kerjmp_Hu3DModelClusterAttrSet + b Hu3DModelClusterAttrSet + entry _kerjmp_Hu3DModelClusterAttrReset + b Hu3DModelClusterAttrReset + entry _kerjmp_Hu3DLLightCreate + b Hu3DLLightCreate + entry _kerjmp_Hu3DLLightCreateV + b Hu3DLLightCreateV + entry _kerjmp_Hu3DLLightSpotSet + b Hu3DLLightSpotSet + entry _kerjmp_Hu3DLLightInfinitytSet + b Hu3DLLightInfinitytSet + entry _kerjmp_Hu3DLLightPointSet + b Hu3DLLightPointSet + entry _kerjmp_Hu3DLLightKill + b Hu3DLLightKill + entry _kerjmp_Hu3DLLightColorSet + b Hu3DLLightColorSet + entry _kerjmp_Hu3DLLightPosSetV + b Hu3DLLightPosSetV + entry _kerjmp_Hu3DLLightPosSet + b Hu3DLLightPosSet + entry _kerjmp_Hu3DLLightPosAimSetV + b Hu3DLLightPosAimSetV + entry _kerjmp_Hu3DLLightPosAimSet + b Hu3DLLightPosAimSet + entry _kerjmp_Hu3DLLightStaticSet + b Hu3DLLightStaticSet + entry _kerjmp_Hu3DAnimInit + b Hu3DAnimInit + entry _kerjmp_Hu3DAnimCreate + b Hu3DAnimCreate + entry _kerjmp_Hu3DAnimLink + b Hu3DAnimLink + entry _kerjmp_Hu3DAnimKill + b Hu3DAnimKill + entry _kerjmp_Hu3DAnimAllKill + b Hu3DAnimAllKill + entry _kerjmp_Hu3DAnimSet + b Hu3DAnimSet + entry _kerjmp_Hu3DAnimExec + b Hu3DAnimExec + entry _kerjmp_Hu3DAnimAttrSet + b Hu3DAnimAttrSet + entry _kerjmp_Hu3DAnimAttrReset + b Hu3DAnimAttrReset + entry _kerjmp_Hu3DAnimSpeedSet + b Hu3DAnimSpeedSet + entry _kerjmp_Hu3DAnimBankSet + b Hu3DAnimBankSet + entry _kerjmp_Hu3DAnmNoSet + b Hu3DAnmNoSet + entry _kerjmp_Hu3DTexScrollCreate + b Hu3DTexScrollCreate + entry _kerjmp_Hu3DTexScrollPosSet + b Hu3DTexScrollPosSet + entry _kerjmp_Hu3DTexScrollPosMoveSet + b Hu3DTexScrollPosMoveSet + entry _kerjmp_Hu3DTexScrollRotSet + b Hu3DTexScrollRotSet + entry _kerjmp_Hu3DTexScrollRotMoveSet + b Hu3DTexScrollRotMoveSet + entry _kerjmp_Hu3DTexScrollKill + b Hu3DTexScrollKill + entry _kerjmp_Hu3DTexScrollAllKill + b Hu3DTexScrollAllKill + entry _kerjmp_Hu3DTexScrollPauseDisableSet + b Hu3DTexScrollPauseDisableSet + entry _kerjmp_Hu3DParticleCreate + b Hu3DParticleCreate + entry _kerjmp_Hu3DParticleScaleSet + b Hu3DParticleScaleSet + entry _kerjmp_Hu3DParticleZRotSet + b Hu3DParticleZRotSet + entry _kerjmp_Hu3DParticleColSet + b Hu3DParticleColSet + entry _kerjmp_Hu3DParticleTPLvlSet + b Hu3DParticleTPLvlSet + entry _kerjmp_Hu3DParticleBlendModeSet + b Hu3DParticleBlendModeSet + entry _kerjmp_Hu3DParticleHookSet + b Hu3DParticleHookSet + entry _kerjmp_Hu3DParticleCntSet + b Hu3DParticleCntSet + entry _kerjmp_Hu3DParticleAttrSet + b Hu3DParticleAttrSet + entry _kerjmp_Hu3DParticleAttrReset + b Hu3DParticleAttrReset + entry _kerjmp_Hu3DParticleAnimModeSet + b Hu3DParticleAnimModeSet + entry _kerjmp_Hu3DParManInit + b Hu3DParManInit + entry _kerjmp_Hu3DParManCreate + b Hu3DParManCreate + entry _kerjmp_Hu3DParManKill + b Hu3DParManKill + entry _kerjmp_Hu3DParManAllKill + b Hu3DParManAllKill + entry _kerjmp_Hu3DParManPtrGet + b Hu3DParManPtrGet + entry _kerjmp_Hu3DParManAttrSet + b Hu3DParManAttrSet + entry _kerjmp_Hu3DParManAttrReset + b Hu3DParManAttrReset + entry _kerjmp_Hu3DParManPosSet + b Hu3DParManPosSet + entry _kerjmp_Hu3DParManVecSet + b Hu3DParManVecSet + entry _kerjmp_Hu3DParManRotSet + b Hu3DParManRotSet + entry _kerjmp_Hu3DParManModelIDGet + b Hu3DParManModelIDGet + entry _kerjmp_Hu3DParManLink + b Hu3DParManLink + entry _kerjmp_Hu3DParManTimeLimitSet + b Hu3DParManTimeLimitSet + entry _kerjmp_Hu3DParManColorSet + b Hu3DParManColorSet + entry _kerjmp_Hu3DMotionCreate + b Hu3DMotionCreate + entry _kerjmp_Hu3DMotionInit + b Hu3DMotionInit + entry _kerjmp_Hu3DMotionModelCreate + b Hu3DMotionModelCreate + entry _kerjmp_Hu3DMotionKill + b Hu3DMotionKill + entry _kerjmp_Hu3DMotionAllKill + b Hu3DMotionAllKill + entry _kerjmp_Hu3DMotionSet + b Hu3DMotionSet + entry _kerjmp_Hu3DMotionExec + b Hu3DMotionExec + entry _kerjmp_Hu3DSubMotionExec + b Hu3DSubMotionExec + entry _kerjmp_Hu3DMotionNext + b Hu3DMotionNext + entry _kerjmp_Hu3DMotionTimeSet + b Hu3DMotionTimeSet + entry _kerjmp_Hu3DMotionTimeGet + b Hu3DMotionTimeGet + entry _kerjmp_Hu3DMotionMaxTimeGet + b Hu3DMotionMaxTimeGet + entry _kerjmp_Hu3DMotionStartEndSet + b Hu3DMotionStartEndSet + entry _kerjmp_Hu3DMotionMotionMaxTimeGet + b Hu3DMotionMotionMaxTimeGet + entry _kerjmp_Hu3DMotionEndCheck + b Hu3DMotionEndCheck + entry _kerjmp_Hu3DMotionShiftSet + b Hu3DMotionShiftSet + entry _kerjmp_Hu3DMotionIDGet + b Hu3DMotionIDGet + entry _kerjmp_Hu3DMotionShiftIDGet + b Hu3DMotionShiftIDGet + entry _kerjmp_Hu3DMotionShiftTimeGet + b Hu3DMotionShiftTimeGet + entry _kerjmp_Hu3DMotionShiftMaxTimeGet + b Hu3DMotionShiftMaxTimeGet + entry _kerjmp_Hu3DMotionShiftStartEndSet + b Hu3DMotionShiftStartEndSet + entry _kerjmp_Hu3DMotionShiftSpeedSet + b Hu3DMotionShiftSpeedSet + entry _kerjmp_Hu3DMotionSpeedSet + b Hu3DMotionSpeedSet + entry _kerjmp_Hu3DMotionShapeSpeedSet + b Hu3DMotionShapeSpeedSet + entry _kerjmp_Hu3DMotionShapeTimeSet + b Hu3DMotionShapeTimeSet + entry _kerjmp_Hu3DMotionNoMotSet + b Hu3DMotionNoMotSet + entry _kerjmp_Hu3DMotionNoMotReset + b Hu3DMotionNoMotReset + entry _kerjmp_Hu3DMotionForceSet + b Hu3DMotionForceSet + entry _kerjmp_Hu3DMotionShapeSet + b Hu3DMotionShapeSet + entry _kerjmp_Hu3DMotionShapeIDGet + b Hu3DMotionShapeIDGet + entry _kerjmp_Hu3DMotionShapeMaxTimeGet + b Hu3DMotionShapeMaxTimeGet + entry _kerjmp_Hu3DMotionClusterSet + b Hu3DMotionClusterSet + entry _kerjmp_Hu3DMotionClusterNoSet + b Hu3DMotionClusterNoSet + entry _kerjmp_Hu3DMotionShapeReset + b Hu3DMotionShapeReset + entry _kerjmp_Hu3DMotionClusterReset + b Hu3DMotionClusterReset + entry _kerjmp_Hu3DJointMotion + b Hu3DJointMotion + entry _kerjmp_Hu3DMotionOverlaySet + b Hu3DMotionOverlaySet + entry _kerjmp_Hu3DMotionOverlayReset + b Hu3DMotionOverlayReset + entry _kerjmp_Hu3DMotionOverlayTimeGet + b Hu3DMotionOverlayTimeGet + entry _kerjmp_Hu3DMotionOverlayTimeSet + b Hu3DMotionOverlayTimeSet + entry _kerjmp_Hu3DMotionOverlaySpeedSet + b Hu3DMotionOverlaySpeedSet + entry _kerjmp_Hu3DModelObjDrawInit + b Hu3DModelObjDrawInit + entry _kerjmp_Hu3DModelObjDraw + b Hu3DModelObjDraw + entry _kerjmp_Hu3DMotionCalc + b Hu3DMotionCalc + entry _kerjmp_Hu3DMotionShapeStartEndSet + b Hu3DMotionShapeStartEndSet + entry _kerjmp_CamMotionEx + b CamMotionEx + entry _kerjmp_CamMotionEx2 + b CamMotionEx2 + entry _kerjmp_Hu3D2Dto3D + b Hu3D2Dto3D + entry _kerjmp_Hu3D3Dto2D + b Hu3D3Dto2D + entry _kerjmp_Hu3DMtxRotGet + b Hu3DMtxRotGet + entry _kerjmp_Hu3DMtxTransGet + b Hu3DMtxTransGet + entry _kerjmp_Hu3DMtxScaleGet + b Hu3DMtxScaleGet + entry _kerjmp_Hu3DProjectionCreate + b Hu3DProjectionCreate + entry _kerjmp_Hu3DProjectionPosSet + b Hu3DProjectionPosSet + entry _kerjmp_Hu3DProjectionTPLvlSet + b Hu3DProjectionTPLvlSet + entry _kerjmp_Hu3DProjectionKill + b Hu3DProjectionKill + entry _kerjmp_HuAudInit + b HuAudInit + entry _kerjmp_HuAudStreamPlay + b HuAudStreamPlay + entry _kerjmp_HuAudAllStop + b HuAudAllStop + entry _kerjmp_HuAudFadeOut + b HuAudFadeOut + entry _kerjmp_HuAudStreamPauseOn + b HuAudStreamPauseOn + entry _kerjmp_HuAudStreamPauseOff + b HuAudStreamPauseOff + entry _kerjmp_HuAudStreamFadeOut + b HuAudStreamFadeOut + entry _kerjmp_HuAudStreamVolSet + b HuAudStreamVolSet + entry _kerjmp_HuAudFXPlay + b HuAudFXPlay + entry _kerjmp_HuAudFXPlayVol + b HuAudFXPlayVol + entry _kerjmp_HuAudFXPlayVolPan + b HuAudFXPlayVolPan + entry _kerjmp_HuAudFXStop + b HuAudFXStop + entry _kerjmp_HuAudFXFadeOut + b HuAudFXFadeOut + entry _kerjmp_HuAudFXPanning + b HuAudFXPanning + entry _kerjmp_HuAudSeqPlay + b HuAudSeqPlay + entry _kerjmp_HuAudSeqStop + b HuAudSeqStop + entry _kerjmp_HuAudSeqFadeOut + b HuAudSeqFadeOut + entry _kerjmp_HuAudSeqMidiCtrlGet + b HuAudSeqMidiCtrlGet + entry _kerjmp_HuAudFXListnerSet + b HuAudFXListnerSet + entry _kerjmp_HuAudFXListnerUpdate + b HuAudFXListnerUpdate + entry _kerjmp_HuAudFXEmiterPlay + b HuAudFXEmiterPlay + entry _kerjmp_HuAudFXEmiterUpDate + b HuAudFXEmiterUpDate + entry _kerjmp_HuAudFXListnerKill + b HuAudFXListnerKill + entry _kerjmp_HuAudFXStatusGet + b HuAudFXStatusGet + entry _kerjmp_HuAudFXPitchSet + b HuAudFXPitchSet + entry _kerjmp_HuAudFXVolSet + b HuAudFXVolSet + entry _kerjmp_HuAudDllSndGrpSet + b HuAudDllSndGrpSet + entry _kerjmp_HuAudSndGrpSetSet + b HuAudSndGrpSetSet + entry _kerjmp_HuAudSndGrpSet + b HuAudSndGrpSet + entry _kerjmp_HuAudSndCommonGrpSet + b HuAudSndCommonGrpSet + entry _kerjmp_HuAudSStreamPlay + b HuAudSStreamPlay + entry _kerjmp_HuAudSStreamStop + b HuAudSStreamStop + entry _kerjmp_HuAudSStreamFadeOut + b HuAudSStreamFadeOut + entry _kerjmp_HuAudSStreamAllFadeOut + b HuAudSStreamAllFadeOut + entry _kerjmp_HuAudSStreamAllStop + b HuAudSStreamAllStop + entry _kerjmp_HuAudSStreamStatGet + b HuAudSStreamStatGet + entry _kerjmp_HuAudPlayerVoicePlay + b HuAudPlayerVoicePlay + entry _kerjmp_HuAudCharVoicePlay + b HuAudCharVoicePlay + entry _kerjmp_HuAudPlayerVoicePlayPos + b HuAudPlayerVoicePlayPos + entry _kerjmp_HuAudCharVoicePlayPos + b HuAudCharVoicePlayPos + entry _kerjmp_HuAudPlayerVoicePlayEntry + b HuAudPlayerVoicePlayEntry + entry _kerjmp_HuAudCharVoicePlayEntry + b HuAudCharVoicePlayEntry + entry _kerjmp_HuAudAUXSet + b HuAudAUXSet + entry _kerjmp_msmMusPlay + b msmMusPlay + entry _kerjmp_espInit + b espInit + entry _kerjmp_espEntry + b espEntry + entry _kerjmp_espKill + b espKill + entry _kerjmp_espGrpIDGet + b espGrpIDGet + entry _kerjmp_espDispOn + b espDispOn + entry _kerjmp_espDispOff + b espDispOff + entry _kerjmp_espAttrSet + b espAttrSet + entry _kerjmp_espAttrReset + b espAttrReset + entry _kerjmp_espPosSet + b espPosSet + entry _kerjmp_espScaleSet + b espScaleSet + entry _kerjmp_espZRotSet + b espZRotSet + entry _kerjmp_espTPLvlSet + b espTPLvlSet + entry _kerjmp_espColorSet + b espColorSet + entry _kerjmp_espSpeedSet + b espSpeedSet + entry _kerjmp_espBankSet + b espBankSet + entry _kerjmp_espDrawNoSet + b espDrawNoSet + entry _kerjmp_espPriSet + b espPriSet + entry _kerjmp_lbl_80192060 + b lbl_80192060 + entry _kerjmp_lbl_80192160 + b lbl_80192160 + entry _kerjmp_lbl_80192260 + b lbl_80192260 + entry _kerjmp_lbl_801D3DA0 + b lbl_801D3DA0 + entry _kerjmp_fn_8003FF68 + b fn_8003FF68 + entry _kerjmp_HuPrcInit + b HuPrcInit + entry _kerjmp_HuPrcCall + b HuPrcCall + entry _kerjmp_HuPrcCreate + b HuPrcCreate + entry _kerjmp_HuPrcKill + b HuPrcKill + entry _kerjmp_HuPrcEnd + b HuPrcEnd + entry _kerjmp_HuPrcWakeup + b HuPrcWakeup + entry _kerjmp_HuPrcSleep + b HuPrcSleep + entry _kerjmp_HuPrcVSleep + b HuPrcVSleep + entry _kerjmp_HuPrcCurrentGet + b HuPrcCurrentGet + entry _kerjmp_HuPrcDestructorSet + b HuPrcDestructorSet + entry _kerjmp_HuPrcDestructorSet2 + b HuPrcDestructorSet2 + entry _kerjmp_HuPrcChildCreate + b HuPrcChildCreate + entry _kerjmp_HuPrcChildLink + b HuPrcChildLink + entry _kerjmp_HuPrcChildUnlink + b HuPrcChildUnlink + entry _kerjmp_HuPrcChildKill + b HuPrcChildKill + entry _kerjmp_HuPrcMemAlloc + b HuPrcMemAlloc + entry _kerjmp_HuPrcMemFree + b HuPrcMemFree + entry _kerjmp_Hu3DParManVacumeSet + b Hu3DParManVacumeSet + entry _kerjmp_HuDataInit + b HuDataInit + entry _kerjmp_HuDataDirRead + b HuDataDirRead + entry _kerjmp_HuDataRead + b HuDataRead + entry _kerjmp_HuDataReadNum + b HuDataReadNum + entry _kerjmp_HuDataReadMulti + b HuDataReadMulti + entry _kerjmp_HuDataDirReadAsync + b HuDataDirReadAsync + entry _kerjmp_HuDataDirReadNumAsync + b HuDataDirReadNumAsync + entry _kerjmp_HuDataSelHeapRead + b HuDataSelHeapRead + entry _kerjmp_HuDataSelHeapReadNum + b HuDataSelHeapReadNum + entry _kerjmp_HuDataGetSize + b HuDataGetSize + entry _kerjmp_HuDataDirClose + b HuDataDirClose + entry _kerjmp_HuDataDirCloseNum + b HuDataDirCloseNum + entry _kerjmp_HuDataClose + b HuDataClose + entry _kerjmp_HuDataCloseMulti + b HuDataCloseMulti + entry _kerjmp_HuDataReadNumHeapShortForce + b HuDataReadNumHeapShortForce + entry _kerjmp_ARRegisterDMACallback + b ARRegisterDMACallback + entry _kerjmp_ARGetDMAStatus + b ARGetDMAStatus + entry _kerjmp_ARStartDMA + b ARStartDMA + entry _kerjmp_ARInit + b ARInit + entry _kerjmp_ARAlloc + b ARAlloc + entry _kerjmp_ARFree + b ARFree + entry _kerjmp_ARGetSize + b ARGetSize + entry _kerjmp_ARSetSize + b ARSetSize + entry _kerjmp_HuSprBegin + b HuSprBegin + entry _kerjmp_HuSprCall + b HuSprCall + entry _kerjmp_HuSprFinish + b HuSprFinish + entry _kerjmp_HuSprAnimRead + b HuSprAnimRead + entry _kerjmp_HuSprCreate + b HuSprCreate + entry _kerjmp_HuSprGrpCreate + b HuSprGrpCreate + entry _kerjmp_HuSprGrpMemberSet + b HuSprGrpMemberSet + entry _kerjmp_HuSprGrpMemberKill + b HuSprGrpMemberKill + entry _kerjmp_HuSprGrpKill + b HuSprGrpKill + entry _kerjmp_HuSprKill + b HuSprKill + entry _kerjmp_HuSprAnimKill + b HuSprAnimKill + entry _kerjmp_HuSprAttrSet + b HuSprAttrSet + entry _kerjmp_HuSprAttrReset + b HuSprAttrReset + entry _kerjmp_HuSprPosSet + b HuSprPosSet + entry _kerjmp_HuSprScaleSet + b HuSprScaleSet + entry _kerjmp_HuSprZRotSet + b HuSprZRotSet + entry _kerjmp_HuSprGrpPosSet + b HuSprGrpPosSet + entry _kerjmp_HuSprGrpZRotSet + b HuSprGrpZRotSet + entry _kerjmp_HuSprGrpScaleSet + b HuSprGrpScaleSet + entry _kerjmp_HuSprTPLvlSet + b HuSprTPLvlSet + entry _kerjmp_HuSprColorSet + b HuSprColorSet + entry _kerjmp_HuSprSpeedSet + b HuSprSpeedSet + entry _kerjmp_HuSprBankSet + b HuSprBankSet + entry _kerjmp_HuSprGrpDrawNoSet + b HuSprGrpDrawNoSet + entry _kerjmp_HuSprDrawNoSet + b HuSprDrawNoSet + entry _kerjmp_HuSprPriSet + b HuSprPriSet + entry _kerjmp_HuSprFuncCreate + b HuSprFuncCreate + entry _kerjmp_HuSprAnimMake + b HuSprAnimMake + entry _kerjmp_HuSprGrpCenterSet + b HuSprGrpCenterSet + entry _kerjmp_HuSprAnimLock + b HuSprAnimLock + entry _kerjmp_AnimDebug + b AnimDebug + entry _kerjmp_HuSprExecLayerSet + b HuSprExecLayerSet + entry _kerjmp_HuSprSprBGSet + b HuSprSprBGSet + entry _kerjmp_HuSprBGSet + b HuSprBGSet + entry _kerjmp_HuSprGrpScissorSet + b HuSprGrpScissorSet + entry _kerjmp_HuSprScissorSet + b HuSprScissorSet + entry _kerjmp_HuSprGrpTPLvlSet + b HuSprGrpTPLvlSet + entry _kerjmp_HuARMalloc + b HuARMalloc + entry _kerjmp_HuARFree + b HuARFree + entry _kerjmp_HuAR_DVDtoARAM + b HuAR_DVDtoARAM + entry _kerjmp_HuAR_MRAMtoARAM + b HuAR_MRAMtoARAM + entry _kerjmp_HuAR_MRAMtoARAM2 + b HuAR_MRAMtoARAM2 + entry _kerjmp_HuAR_ARAMtoMRAM + b HuAR_ARAMtoMRAM + entry _kerjmp_HuAR_ARAMtoMRAMNum + b HuAR_ARAMtoMRAMNum + entry _kerjmp_HuARDMACheck + b HuARDMACheck + entry _kerjmp_HuARDirCheck + b HuARDirCheck + entry _kerjmp_HuARDirFree + b HuARDirFree + entry _kerjmp_HuAR_ARAMtoMRAMFileRead + b HuAR_ARAMtoMRAMFileRead + entry _kerjmp_HuAudFXListnerSetEX + b HuAudFXListnerSetEX + entry _kerjmp_HuWindowInit + b HuWindowInit + entry _kerjmp_HuWinInit + b HuWinInit + entry _kerjmp_HuWinCreate + b HuWinCreate + entry _kerjmp_HuWinKill + b HuWinKill + entry _kerjmp_HuWinAllKill + b HuWinAllKill + entry _kerjmp_HuWinMesSet + b HuWinMesSet + entry _kerjmp_HuWinInsertMesSet + b HuWinInsertMesSet + entry _kerjmp_HuWinChoiceGet + b HuWinChoiceGet + entry _kerjmp_HuWinChoiceNumGet + b HuWinChoiceNumGet + entry _kerjmp_HuWinMesWait + b HuWinMesWait + entry _kerjmp_HuWinSprKill + b HuWinSprKill + entry _kerjmp_HuWinMesRead + b HuWinMesRead + entry _kerjmp_HuWinAnimSet + b HuWinAnimSet + entry _kerjmp_HuWinSprSet + b HuWinSprSet + entry _kerjmp_HuWinSprPosSet + b HuWinSprPosSet + entry _kerjmp_HuWinSprIDGet + b HuWinSprIDGet + entry _kerjmp_HuWinMesMaxSizeGet + b HuWinMesMaxSizeGet + entry _kerjmp_HuWinInsertMesSizeGet + b HuWinInsertMesSizeGet + entry _kerjmp_HuWinMesMaxSizeBetGet + b HuWinMesMaxSizeBetGet + entry _kerjmp_HuWinExCreate + b HuWinExCreate + entry _kerjmp_HuWinDispOn + b HuWinDispOn + entry _kerjmp_HuWinDispOff + b HuWinDispOff + entry _kerjmp_HuWinExAnimIn + b HuWinExAnimIn + entry _kerjmp_HuWinExAnimOut + b HuWinExAnimOut + entry _kerjmp_HuWinExCleanup + b HuWinExCleanup + entry _kerjmp_HuWinExAnimPopIn + b HuWinExAnimPopIn + entry _kerjmp_HuWinComKeyWait + b HuWinComKeyWait + entry _kerjmp_HuWinComKeySet + b HuWinComKeySet + entry _kerjmp_HuWinComKeyReset + b HuWinComKeyReset + entry _kerjmp_HuWinDrawNoSet + b HuWinDrawNoSet + entry _kerjmp_HuWinAttrSet + b HuWinAttrSet + entry _kerjmp_HuWinAttrReset + b HuWinAttrReset + entry _kerjmp_HuWinBGTPLvlSet + b HuWinBGTPLvlSet + entry _kerjmp_HuWinMesSpeedSet + b HuWinMesSpeedSet + entry _kerjmp_HuWinBGColSet + b HuWinBGColSet + entry _kerjmp_HuWinChoiceDisable + b HuWinChoiceDisable + entry _kerjmp_HuWinKeyWaitEntry + b HuWinKeyWaitEntry + entry _kerjmp_HuWinCenterPosSet + b HuWinCenterPosSet + entry _kerjmp_HuWinPosSet + b HuWinPosSet + entry _kerjmp_HuWinZRotSet + b HuWinZRotSet + entry _kerjmp_HuWinScaleSet + b HuWinScaleSet + entry _kerjmp_HuWinChoiceNowGet + b HuWinChoiceNowGet + entry _kerjmp_HuWinStatGet + b HuWinStatGet + entry _kerjmp_HuWinMesColSet + b HuWinMesColSet + entry _kerjmp_HuWinScissorSet + b HuWinScissorSet + entry _kerjmp_HuWinExCreateStyled + b HuWinExCreateStyled + entry _kerjmp_HuWinPriSet + b HuWinPriSet + entry _kerjmp_HuWinSprPriSet + b HuWinSprPriSet + entry _kerjmp_HuWinKeyWaitNumGet + b HuWinKeyWaitNumGet + entry _kerjmp_HuWinMesSizeCancelCRSet + b HuWinMesSizeCancelCRSet + entry _kerjmp_HuWinMesPalSet + b HuWinMesPalSet + entry _kerjmp_HuWinHomeClear + b HuWinHomeClear + entry _kerjmp_HuWinPushKeySet + b HuWinPushKeySet + entry _kerjmp_HuWinDisablePlayerSet + b HuWinDisablePlayerSet + entry _kerjmp_HuWinDisablePlayerReset + b HuWinDisablePlayerReset + entry _kerjmp_CharManInit + b CharManInit + entry _kerjmp_CharARAMOpen + b CharARAMOpen + entry _kerjmp_CharKill + b CharKill + entry _kerjmp_CharModelKill + b CharModelKill + entry _kerjmp_CharKillAll + b CharKillAll + entry _kerjmp_CharModelCreate + b CharModelCreate + entry _kerjmp_CharModelMotionCreate + b CharModelMotionCreate + entry _kerjmp_CharModelMotionIndexSet + b CharModelMotionIndexSet + entry _kerjmp_CharModelMotionKill + b CharModelMotionKill + entry _kerjmp_CharModelMotionDataClose + b CharModelMotionDataClose + entry _kerjmp_CharModelDataClose + b CharModelDataClose + entry _kerjmp_CharAMemPtrGet + b CharAMemPtrGet + entry _kerjmp_CharModelMotionSet + b CharModelMotionSet + entry _kerjmp_CharModelMotionTimeSet + b CharModelMotionTimeSet + entry _kerjmp_CharModelMotionTimeGet + b CharModelMotionTimeGet + entry _kerjmp_CharModelMotionMaxTimeGet + b CharModelMotionMaxTimeGet + entry _kerjmp_CharModelMotionEndCheck + b CharModelMotionEndCheck + entry _kerjmp_CharModelMotionShiftIDGet + b CharModelMotionShiftIDGet + entry _kerjmp_CharModelMotionShiftSet + b CharModelMotionShiftSet + entry _kerjmp_CharModelMotionShiftTimeGet + b CharModelMotionShiftTimeGet + entry _kerjmp_CharModelMotionSpeedSet + b CharModelMotionSpeedSet + entry _kerjmp_CharModelLayerSetAll + b CharModelLayerSetAll + entry _kerjmp_CharModelItemHookCreate + b CharModelItemHookCreate + entry _kerjmp_CharModelEffectCreate + b CharModelEffectCreate + entry _kerjmp_CharModelCoinEffectCreate + b CharModelCoinEffectCreate + entry _kerjmp_fn_8004EC74 + b fn_8004EC74 + entry _kerjmp_fn_8004EDA4 + b fn_8004EDA4 + entry _kerjmp_fn_8004F13C + b fn_8004F13C + entry _kerjmp_fn_8004F058 + b fn_8004F058 + entry _kerjmp_GWCharColorGet + b GWCharColorGet + entry _kerjmp_CharModelLayerSetAll2 + b CharModelLayerSetAll2 + entry _kerjmp_charTexNameTbl + b charTexNameTbl + entry _kerjmp_CharModelTexNameGet + b CharModelTexNameGet + entry _kerjmp_CharModelVoiceEnableSet + b CharModelVoiceEnableSet + entry _kerjmp_CharModelEffectNpcInitSilent + b CharModelEffectNpcInitSilent + entry _kerjmp_CharModelStepTypeSet + b CharModelStepTypeSet + entry _kerjmp_fn_8004F52C + b fn_8004F52C + entry _kerjmp_CharModelEffectEnableSet + b CharModelEffectEnableSet + entry _kerjmp_CharModelEffectNpcInit + b CharModelEffectNpcInit + entry _kerjmp_HuPrcSetStat + b HuPrcSetStat + entry _kerjmp_HuPrcResetStat + b HuPrcResetStat + entry _kerjmp_omGameSysInit + b omGameSysInit + entry _kerjmp_omResetStatBit + b omResetStatBit + entry _kerjmp_omCurrentOvlGet + b omCurrentOvlGet + entry _kerjmp_omPauseChk + b omPauseChk + entry _kerjmp_omOvlHisChg + b omOvlHisChg + entry _kerjmp_omOvlHisGet + b omOvlHisGet + entry _kerjmp_omovlevtno + b omovlevtno + entry _kerjmp_omovlstat + b omovlstat + entry _kerjmp_AddX + b AddX + entry _kerjmp_AddZ + b AddZ + entry _kerjmp_MapObject + b MapObject + entry _kerjmp_CharObject + b CharObject + entry _kerjmp_nMap + b nMap + entry _kerjmp_nChar + b nChar + entry _kerjmp_MapWall + b MapWall + entry _kerjmp_MapPos + b MapPos + entry _kerjmp_HitFaceVec + b HitFaceVec + entry _kerjmp_HitFace + b HitFace + entry _kerjmp_HitFaceCount + b HitFaceCount + entry _kerjmp_GWPlayer + b GWPlayer + entry _kerjmp_GWSystem + b GWSystem + entry _kerjmp_HuTHPSprCreateVol + b HuTHPSprCreateVol + entry _kerjmp_HuTHPSprCreate + b HuTHPSprCreate + entry _kerjmp_HuTHP3DCreateVol + b HuTHP3DCreateVol + entry _kerjmp_HuTHP3DCreate + b HuTHP3DCreate + entry _kerjmp_HuTHPStop + b HuTHPStop + entry _kerjmp_HuTHPClose + b HuTHPClose + entry _kerjmp_HuTHPRestart + b HuTHPRestart + entry _kerjmp_HuTHPEndCheck + b HuTHPEndCheck + entry _kerjmp_HuTHPFrameGet + b HuTHPFrameGet + entry _kerjmp_HuTHPTotalFrameGet + b HuTHPTotalFrameGet + entry _kerjmp_HuTHPSetVolume + b HuTHPSetVolume + entry _kerjmp_HuCardCheck + b HuCardCheck + entry _kerjmp_HuCardMount + b HuCardMount + entry _kerjmp_HuCardFormat + b HuCardFormat + entry _kerjmp_HuCardOpen + b HuCardOpen + entry _kerjmp_HuCardRead + b HuCardRead + entry _kerjmp_HuCardCreate + b HuCardCreate + entry _kerjmp_HuCardClose + b HuCardClose + entry _kerjmp_HuCardWrite + b HuCardWrite + entry _kerjmp_HuCardDelete + b HuCardDelete + entry _kerjmp_HuCardSectorSizeGet + b HuCardSectorSizeGet + entry _kerjmp_HuCardFreeSpaceGet + b HuCardFreeSpaceGet + entry _kerjmp_HuCardSlotCheck + b HuCardSlotCheck + entry _kerjmp_SLFileOpen + b SLFileOpen + entry _kerjmp_SLFileCreate + b SLFileCreate + entry _kerjmp_SLFileWrite + b SLFileWrite + entry _kerjmp_SLFileClose + b SLFileClose + entry _kerjmp_SLFileRead + b SLFileRead + entry _kerjmp_SLCurSlotNoSet + b SLCurSlotNoSet + entry _kerjmp_SLSaveDataMake + b SLSaveDataMake + entry _kerjmp_SLCommonSet + b SLCommonSet + entry _kerjmp_SLSaveBoard + b SLSaveBoard + entry _kerjmp_SLSaveBoardBackup + b SLSaveBoardBackup + entry _kerjmp_SLSave + b SLSave + entry _kerjmp_SLLoadGameStat + b SLLoadGameStat + entry _kerjmp_SLLoadBoard + b SLLoadBoard + entry _kerjmp_SLLoadBoardBackup + b SLLoadBoardBackup + entry _kerjmp_SLLoad + b SLLoad + entry _kerjmp_SLCurBoxNoSet + b SLCurBoxNoSet + entry _kerjmp_SLSaveFlagSet + b SLSaveFlagSet + entry _kerjmp_SLSaveFlagGet + b SLSaveFlagGet + entry _kerjmp_SLCheckSumCheck + b SLCheckSumCheck + entry _kerjmp_SLSerialNoGet + b SLSerialNoGet + entry _kerjmp_SLSerialNoCheck + b SLSerialNoCheck + entry _kerjmp_saveExecF + b saveExecF + entry _kerjmp__CheckFlag + b _CheckFlag + entry _kerjmp__SetFlag + b _SetFlag + entry _kerjmp__ClearFlag + b _ClearFlag + entry _kerjmp_mgInfoTbl + b mgInfoTbl + entry _kerjmp_mgTypeCurr + b mgTypeCurr + entry _kerjmp_mgBattleStar + b mgBattleStar + entry _kerjmp_lbl_801D3E94_0 + b lbl_801D3E94 + entry _kerjmp_mgTicTacToeGrid + b mgTicTacToeGrid + entry _kerjmp_mgIndexList + b mgIndexList + entry _kerjmp_lbl_801D3E94_1 + b lbl_801D3E94 + entry _kerjmp_mgGameStatBackup + b mgGameStatBackup + entry _kerjmp_mgRecordExtra + b mgRecordExtra + entry _kerjmp_mgQuitExtraF + b mgQuitExtraF + entry _kerjmp_mgPracticeEnableF + b mgPracticeEnableF + entry _kerjmp_mgBoardHostEnableF + b mgBoardHostEnableF + entry _kerjmp_omMgIndexGet + b omMgIndexGet + entry _kerjmp_mgInstExitEnableF + b mgInstExitEnableF + entry _kerjmp_GWMGRecordSet + b GWMGRecordSet + entry _kerjmp_GWMGRecordGet + b GWMGRecordGet + entry _kerjmp_GWBoardPlayCountAdd + b GWBoardPlayCountAdd + entry _kerjmp_GWBoardPlayCountSet + b GWBoardPlayCountSet + entry _kerjmp_GWBoardPlayCountGet + b GWBoardPlayCountGet + entry _kerjmp_GWBoardWinCountInc + b GWBoardWinCountInc + entry _kerjmp_GWBoardWinCountGet + b GWBoardWinCountGet + entry _kerjmp_GWBoardWinCountSet + b GWBoardWinCountSet + entry _kerjmp_GWBoardMaxStarsSet + b GWBoardMaxStarsSet + entry _kerjmp_GWBoardMaxStarsGet + b GWBoardMaxStarsGet + entry _kerjmp_GWBoardMaxCoinsSet + b GWBoardMaxCoinsSet + entry _kerjmp_GWBoardMaxCoinsGet + b GWBoardMaxCoinsGet + entry _kerjmp_GWTotalStarsSet + b GWTotalStarsSet + entry _kerjmp_GWTotalStarsAdd + b GWTotalStarsAdd + entry _kerjmp_GWTotalStarsGet + b GWTotalStarsGet + entry _kerjmp_GWStarsAdd + b GWStarsAdd + entry _kerjmp_GWStarsGet + b GWStarsGet + entry _kerjmp_GWStarsSet + b GWStarsSet + entry _kerjmp_GWCoinsAdd + b GWCoinsAdd + entry _kerjmp_GWCoinsSet + b GWCoinsSet + entry _kerjmp_GWCoinsGet + b GWCoinsGet + entry _kerjmp_GWMGCustomReset + b GWMGCustomReset + entry _kerjmp_GWMGCustomSet + b GWMGCustomSet + entry _kerjmp_GWMGCustomGet + b GWMGCustomGet + entry _kerjmp_GWMGAvailGet + b GWMGAvailGet + entry _kerjmp_fmod + b fmod + entry _kerjmp__savegpr_15 + b _savegpr_15 + entry _kerjmp__restgpr_15 + b _restgpr_15 + entry _kerjmp__savegpr_16 + b _savegpr_16 + entry _kerjmp__restgpr_16 + b _restgpr_16 + entry _kerjmp___save_gpr + b __save_gpr + entry _kerjmp___restore_gpr + b __restore_gpr + entry _kerjmp_omDBGMenuButton + b omDBGMenuButton + entry _kerjmp_msmSeSetListener + b msmSeSetListener + entry _kerjmp_msmSeUpdataListener + b msmSeUpdataListener + entry _kerjmp_msmSeGetIndexPtr + b msmSeGetIndexPtr + entry _kerjmp_msmMusSetMasterVolume + b msmMusSetMasterVolume + entry _kerjmp_msmSysGetOutputMode + b msmSysGetOutputMode + entry _kerjmp_BoardRollExec + b BoardRollExec + entry _kerjmp_BoardRollKill + b BoardRollKill + entry _kerjmp_BoardDiceValueSet + b BoardDiceValueSet + entry _kerjmp_BoardDiceStop + b BoardDiceStop + entry _kerjmp_BoardDicePauseAll + b BoardDicePauseAll + entry _kerjmp_BoardDiceDoneCheck + b BoardDiceDoneCheck + entry _kerjmp_BoardCommonInit + b BoardCommonInit + entry _kerjmp_BoardStoryConfigSet + b BoardStoryConfigSet + entry _kerjmp_BoardPartyConfigSet + b BoardPartyConfigSet + entry _kerjmp_BoardSaveInit + b BoardSaveInit + entry _kerjmp_BoardMGExit + b BoardMGExit + entry _kerjmp_BoardDAngleCalcVec + b BoardDAngleCalcVec + entry _kerjmp_BoardDAngleCalc + b BoardDAngleCalc + entry _kerjmp_BoardVecMaxDistXZCheck + b BoardVecMaxDistXZCheck + entry _kerjmp_BoardIsKill + b BoardIsKill + entry _kerjmp_BoardKill + b BoardKill + entry _kerjmp_BoardCameraScissorSet + b BoardCameraScissorSet + entry _kerjmp_BoardCameraViewSet + b BoardCameraViewSet + entry _kerjmp_BoardCameraDirGet + b BoardCameraDirGet + entry _kerjmp_BoardCameraPointDirGet + b BoardCameraPointDirGet + entry _kerjmp_BoardCameraMoveSet + b BoardCameraMoveSet + entry _kerjmp_BoardCameraQuakeSet + b BoardCameraQuakeSet + entry _kerjmp_BoardCameraQuakeReset + b BoardCameraQuakeReset + entry _kerjmp_BoardCameraTargetSet + b BoardCameraTargetSet + entry _kerjmp_BoardCameraPosGet + b BoardCameraPosGet + entry _kerjmp_BoardCameraTargetGet + b BoardCameraTargetGet + entry _kerjmp_BoardCameraRotGet + b BoardCameraRotGet + entry _kerjmp_BoardCameraZoomGet + b BoardCameraZoomGet + entry _kerjmp_BoardCameraPosSet + b BoardCameraPosSet + entry _kerjmp_BoardCameraXRotZoomSet + b BoardCameraXRotZoomSet + entry _kerjmp_BoardCameraZoomSet + b BoardCameraZoomSet + entry _kerjmp_BoardCameraRotSet + b BoardCameraRotSet + entry _kerjmp_BoardCameraFovSet + b BoardCameraFovSet + entry _kerjmp_BoardCameraOffsetSet + b BoardCameraOffsetSet + entry _kerjmp_BoardCameraTargetPlayerSet + b BoardCameraTargetPlayerSet + entry _kerjmp_BoardCameraTargetModelSet + b BoardCameraTargetModelSet + entry _kerjmp_BoardCameraTargetSpaceSet + b BoardCameraTargetSpaceSet + entry _kerjmp_BoardCameraCullCheck + b BoardCameraCullCheck + entry _kerjmp_BoardCameraMotionIsDone + b BoardCameraMotionIsDone + entry _kerjmp_BoardCameraMotionStartEx + b BoardCameraMotionStartEx + entry _kerjmp_BoardCameraMotionStart + b BoardCameraMotionStart + entry _kerjmp_BoardCameraMotionWait + b BoardCameraMotionWait + entry _kerjmp_BoardCameraNearFarSet + b BoardCameraNearFarSet + entry _kerjmp_BoardCameraNearFarGet + b BoardCameraNearFarGet + entry _kerjmp_BoardEventFlagSet + b BoardEventFlagSet + entry _kerjmp_BoardEventFlagReset + b BoardEventFlagReset + entry _kerjmp_BoardEventFlagGet + b BoardEventFlagGet + entry _kerjmp_BoardMGCreate + b BoardMGCreate + entry _kerjmp_BoardDAngleCalcRange + b BoardDAngleCalcRange + entry _kerjmp_BoardVecDistXZCalc + b BoardVecDistXZCalc + entry _kerjmp_BoardVecMinDistCheck + b BoardVecMinDistCheck + entry _kerjmp_BoardArcSin + b BoardArcSin + entry _kerjmp_BoardArcCos + b BoardArcCos + entry _kerjmp_BoardMTXCalcLookAt + b BoardMTXCalcLookAt + entry _kerjmp_BoardLightSetExec + b BoardLightSetExec + entry _kerjmp_BoardLightResetExec + b BoardLightResetExec + entry _kerjmp_BoardLightHookSet + b BoardLightHookSet + entry _kerjmp_BoardMGDoneFlagSet + b BoardMGDoneFlagSet + entry _kerjmp_BoardMGDoneFlagGet + b BoardMGDoneFlagGet + entry _kerjmp_BoardMGSetupExec + b BoardMGSetupExec + entry _kerjmp_BoardFilterFadeOut + b BoardFilterFadeOut + entry _kerjmp_BoardFilterFadeInit + b BoardFilterFadeInit + entry _kerjmp_BoardFilterFadePauseCheck + b BoardFilterFadePauseCheck + entry _kerjmp_BoardFilterFadeCheck + b BoardFilterFadeCheck + entry _kerjmp_BoardConfettiCreate + b BoardConfettiCreate + entry _kerjmp_BoardConfettiKill + b BoardConfettiKill + entry _kerjmp_BoardConfettiStop + b BoardConfettiStop + entry _kerjmp_BoardRand + b BoardRand + entry _kerjmp_BoardRandMod + b BoardRandMod + entry _kerjmp_BoardRandFloat + b BoardRandFloat + entry _kerjmp_boardRandSeed + b boardRandSeed + entry _kerjmp_BoardViewMoveCheck + b BoardViewMoveCheck + entry _kerjmp_BoardViewMoveEnd + b BoardViewMoveEnd + entry _kerjmp_BoardViewFocusGetPos + b BoardViewFocusGetPos + entry _kerjmp_BoardViewMoveStart + b BoardViewMoveStart + entry _kerjmp_BoardViewFocusSet + b BoardViewFocusSet + entry _kerjmp_boardTurnFunc + b boardTurnFunc + entry _kerjmp_boardStarShowNextHook + b boardStarShowNextHook + entry _kerjmp_boardBowserHook + b boardBowserHook + entry _kerjmp_boardTurnStartFunc + b boardTurnStartFunc + entry _kerjmp_boardStarGiveHook + b boardStarGiveHook + entry _kerjmp_boardMainProc + b boardMainProc + entry _kerjmp_boardObjMan + b boardObjMan + entry _kerjmp_BoardItemStart + b BoardItemStart + entry _kerjmp_BoardCharWheelInit + b BoardCharWheelInit + entry _kerjmp_BoardCharWheelCheck + b BoardCharWheelCheck + entry _kerjmp_BoardCharWheelWait + b BoardCharWheelWait + entry _kerjmp_BoardCharWheelResultGet + b BoardCharWheelResultGet + entry _kerjmp_BoardCharWheelSpeedSet + b BoardCharWheelSpeedSet + entry _kerjmp_BoardSpaceInit + b BoardSpaceInit + entry _kerjmp_BoardSpaceDestroy + b BoardSpaceDestroy + entry _kerjmp_BoardSpaceLandExec + b BoardSpaceLandExec + entry _kerjmp_BoardSpaceWalkEventFuncSet + b BoardSpaceWalkEventFuncSet + entry _kerjmp_BoardSpaceWalkMiniEventFuncSet + b BoardSpaceWalkMiniEventFuncSet + entry _kerjmp_BoardSpaceLandEventFuncSet + b BoardSpaceLandEventFuncSet + entry _kerjmp_BoardSpaceWalkEventExec + b BoardSpaceWalkEventExec + entry _kerjmp_BoardSpaceWalkMiniEventExec + b BoardSpaceWalkMiniEventExec + entry _kerjmp_BoardSpaceBlockExec + b BoardSpaceBlockExec + entry _kerjmp_BoardSpaceWalkExec + b BoardSpaceWalkExec + entry _kerjmp_BoardSpaceCameraSet + b BoardSpaceCameraSet + entry _kerjmp_BoardSpaceCornerPosGet + b BoardSpaceCornerPosGet + entry _kerjmp_BoardSpaceStarGetRandom + b BoardSpaceStarGetRandom + entry _kerjmp_BoardSpaceCountGet + b BoardSpaceCountGet + entry _kerjmp_BoardSpaceGet + b BoardSpaceGet + entry _kerjmp_BoardSpaceFlagPosGet + b BoardSpaceFlagPosGet + entry _kerjmp_BoardSpaceFlagGet + b BoardSpaceFlagGet + entry _kerjmp_BoardSpaceLinkTypeSearch + b BoardSpaceLinkTypeSearch + entry _kerjmp_BoardSpacePosGet + b BoardSpacePosGet + entry _kerjmp_BoardSpaceRotGet + b BoardSpaceRotGet + entry _kerjmp_BoardSpaceRead + b BoardSpaceRead + entry _kerjmp_BoardSpaceAttrReset + b BoardSpaceAttrReset + entry _kerjmp_BoardSpaceAttrSet + b BoardSpaceAttrSet + entry _kerjmp_BoardSpaceLinkTargetListGet + b BoardSpaceLinkTargetListGet + entry _kerjmp_BoardSpaceFlagSearch + b BoardSpaceFlagSearch + entry _kerjmp_BoardSpaceTypeGet + b BoardSpaceTypeGet + entry _kerjmp_BoardSpaceTypeSet + b BoardSpaceTypeSet + entry _kerjmp_BoardSpaceLinkFlagSearch + b BoardSpaceLinkFlagSearch + entry _kerjmp_BoardSpaceLinkTypeListGet + b BoardSpaceLinkTypeListGet + entry _kerjmp_BoardSpaceLinkTransformGet + b BoardSpaceLinkTransformGet + entry _kerjmp_BoardSpaceHide + b BoardSpaceHide + entry _kerjmp_BoardSpaceStarCheck + b BoardSpaceStarCheck + entry _kerjmp_BoardSpaceStarMove + b BoardSpaceStarMove + entry _kerjmp_BoardSpaceStarSetIndex + b BoardSpaceStarSetIndex + entry _kerjmp_BoardSpaceStarGetCurr + b BoardSpaceStarGetCurr + entry _kerjmp_BoardSpaceStarGet + b BoardSpaceStarGet + entry _kerjmp_BoardStarHostSet + b BoardStarHostSet + entry _kerjmp_BoardStarHostMdlGet + b BoardStarHostMdlGet + entry _kerjmp_BoardBooHouseHostSet + b BoardBooHouseHostSet + entry _kerjmp_BoardBooHouseHostGet + b BoardBooHouseHostGet + entry _kerjmp_BoardLotteryHostSet + b BoardLotteryHostSet + entry _kerjmp_BoardLotteryHostGet + b BoardLotteryHostGet + entry _kerjmp_BoardShopHostSet + b BoardShopHostSet + entry _kerjmp_BoardShopHostGet + b BoardShopHostGet + entry _kerjmp_BoardPauseActiveCheck + b BoardPauseActiveCheck + entry _kerjmp_BoardLotteryInit + b BoardLotteryInit + entry _kerjmp_BoardLotteryKill + b BoardLotteryKill + entry _kerjmp_BoardLotteryExec + b BoardLotteryExec + entry _kerjmp_BoardBooHouseCreate + b BoardBooHouseCreate + entry _kerjmp_BoardBooHouseKill + b BoardBooHouseKill + entry _kerjmp_BoardBooHouseExec + b BoardBooHouseExec + entry _kerjmp_BoardLandBlueExec + b BoardLandBlueExec + entry _kerjmp_BoardLandRedExec + b BoardLandRedExec + entry _kerjmp_BoardWarpExec + b BoardWarpExec + entry _kerjmp_BoardMushroomExec + b BoardMushroomExec + entry _kerjmp_BoardStarExec + b BoardStarExec + entry _kerjmp_BoardStarGive + b BoardStarGive + entry _kerjmp_BoardBattleExec + b BoardBattleExec + entry _kerjmp_BoardShopInit + b BoardShopInit + entry _kerjmp_BoardShopKill + b BoardShopKill + entry _kerjmp_BoardShopExec + b BoardShopExec + entry _kerjmp_BoardModelInit + b BoardModelInit + entry _kerjmp_BoardModelKillAll + b BoardModelKillAll + entry _kerjmp_BoardModelDummyUpdate + b BoardModelDummyUpdate + entry _kerjmp_BoardModelVisibilityUpdate + b BoardModelVisibilityUpdate + entry _kerjmp_BoardModelKill + b BoardModelKill + entry _kerjmp_BoardModelExistCheck + b BoardModelExistCheck + entry _kerjmp_BoardModelExistDupe + b BoardModelExistDupe + entry _kerjmp_BoardModelIDGet + b BoardModelIDGet + entry _kerjmp_BoardModelAlphaSet + b BoardModelAlphaSet + entry _kerjmp_BoardModelMotionStart + b BoardModelMotionStart + entry _kerjmp_BoardModelMotionShiftSet + b BoardModelMotionShiftSet + entry _kerjmp_BoardModelAttrSet + b BoardModelAttrSet + entry _kerjmp_BoardModelAttrReset + b BoardModelAttrReset + entry _kerjmp_BoardModelMotionTimeSet + b BoardModelMotionTimeSet + entry _kerjmp_BoardModelMotionSpeedSet + b BoardModelMotionSpeedSet + entry _kerjmp_BoardModelMotionSpeedGet + b BoardModelMotionSpeedGet + entry _kerjmp_BoardModelMotionStartEndSet + b BoardModelMotionStartEndSet + entry _kerjmp_BoardModelMotionUpdateSet + b BoardModelMotionUpdateSet + entry _kerjmp_BoardModelMotionShapeSet + b BoardModelMotionShapeSet + entry _kerjmp_BoardModelMotionShapeTimeGet + b BoardModelMotionShapeTimeGet + entry _kerjmp_BoardModelMotionShapeMaxTimeGet + b BoardModelMotionShapeMaxTimeGet + entry _kerjmp_BoardModelMotionShapeSpeedSet + b BoardModelMotionShapeSpeedSet + entry _kerjmp_BoardModelMotionShapeSpeedGet + b BoardModelMotionShapeSpeedGet + entry _kerjmp_BoardModelMotionShapeEndCheck + b BoardModelMotionShapeEndCheck + entry _kerjmp_BoardModelMotionShapeStartEndSet + b BoardModelMotionShapeStartEndSet + entry _kerjmp_BoardModelMtxSet + b BoardModelMtxSet + entry _kerjmp_BoardModelMtxGet + b BoardModelMtxGet + entry _kerjmp_BoardModelPosSetV + b BoardModelPosSetV + entry _kerjmp_BoardModelRotSetV + b BoardModelRotSetV + entry _kerjmp_BoardModelScaleSetV + b BoardModelScaleSetV + entry _kerjmp_BoardModelPosSet + b BoardModelPosSet + entry _kerjmp_BoardModelRotSet + b BoardModelRotSet + entry _kerjmp_BoardModelScaleSet + b BoardModelScaleSet + entry _kerjmp_BoardModelPosGet + b BoardModelPosGet + entry _kerjmp_BoardModelRotGet + b BoardModelRotGet + entry _kerjmp_BoardModelScaleGet + b BoardModelScaleGet + entry _kerjmp_fn_8006DDE8 + b fn_8006DDE8 + entry _kerjmp_BoardModelVisibilitySet + b BoardModelVisibilitySet + entry _kerjmp_BoardModelVisibilityGet + b BoardModelVisibilityGet + entry _kerjmp_BoardModelLayerSet + b BoardModelLayerSet + entry _kerjmp_BoardModelCameraSet + b BoardModelCameraSet + entry _kerjmp_BoardModelPassSet + b BoardModelPassSet + entry _kerjmp_fn_8006DC1C + b fn_8006DC1C + entry _kerjmp_BoardModelHookSet + b BoardModelHookSet + entry _kerjmp_BoardModelHookReset + b BoardModelHookReset + entry _kerjmp_BoardModelHookObjReset + b BoardModelHookObjReset + entry _kerjmp_BoardModelMotionEndCheck + b BoardModelMotionEndCheck + entry _kerjmp_BoardModelMotionTimeGet + b BoardModelMotionTimeGet + entry _kerjmp_BoardModelMotionMaxTimeGet + b BoardModelMotionMaxTimeGet + entry _kerjmp_BoardModelMotionCreate + b BoardModelMotionCreate + entry _kerjmp_BoardModelMotionKill + b BoardModelMotionKill + entry _kerjmp_BoardModelCreate + b BoardModelCreate + entry _kerjmp_BoardModelCreateCharacter + b BoardModelCreateCharacter + entry _kerjmp_BoardModelCreateParam + b BoardModelCreateParam + entry _kerjmp_BoardModelLayerSetAll + b BoardModelLayerSetAll + entry _kerjmp_BoardModelCameraSetAll + b BoardModelCameraSetAll + entry _kerjmp_BoardModelHideSetAll + b BoardModelHideSetAll + entry _kerjmp_BoardModelAmbSet + b BoardModelAmbSet + entry _kerjmp_BoardModelAmbSetAll + b BoardModelAmbSetAll + entry _kerjmp_BoardModelRotYSet + b BoardModelRotYSet + entry _kerjmp_BoardModelRotYGet + b BoardModelRotYGet + entry _kerjmp_BoardModelVoiceEnableSet + b BoardModelVoiceEnableSet + entry _kerjmp_BoardPlayerModelInit + b BoardPlayerModelInit + entry _kerjmp_BoardPlayerModelKill + b BoardPlayerModelKill + entry _kerjmp_BoardPlayerInit + b BoardPlayerInit + entry _kerjmp_BoardPlayerGetCharMess + b BoardPlayerGetCharMess + entry _kerjmp_BoardPlayerGetCharName + b BoardPlayerGetCharName + entry _kerjmp_BoardPlayerLayerSet + b BoardPlayerLayerSet + entry _kerjmp_BoardPlayerCameraSet + b BoardPlayerCameraSet + entry _kerjmp_fn_80062A40 + b fn_80062A40 + entry _kerjmp_BoardPlayerExistCheck + b BoardPlayerExistCheck + entry _kerjmp_BoardPlayerMtxSet + b BoardPlayerMtxSet + entry _kerjmp_BoardPlayerPosSet + b BoardPlayerPosSet + entry _kerjmp_BoardPlayerPosSetV + b BoardPlayerPosSetV + entry _kerjmp_BoardPlayerPosGet + b BoardPlayerPosGet + entry _kerjmp_BoardPlayerRotSet + b BoardPlayerRotSet + entry _kerjmp_BoardPlayerRotSetV + b BoardPlayerRotSetV + entry _kerjmp_BoardPlayerRotGet + b BoardPlayerRotGet + entry _kerjmp_BoardPlayerRotYSet + b BoardPlayerRotYSet + entry _kerjmp_BoardPlayerRotYGet + b BoardPlayerRotYGet + entry _kerjmp_BoardPlayerScaleSet + b BoardPlayerScaleSet + entry _kerjmp_BoardPlayerScaleSetV + b BoardPlayerScaleSetV + entry _kerjmp_BoardPlayerScaleGet + b BoardPlayerScaleGet + entry _kerjmp_BoardPlayerCornerPosSet + b BoardPlayerCornerPosSet + entry _kerjmp_BoardPlayerCornerPosGet + b BoardPlayerCornerPosGet + entry _kerjmp_BoardPlayerSizeGet + b BoardPlayerSizeGet + entry _kerjmp_BoardPlayerSizeSet + b BoardPlayerSizeSet + entry _kerjmp_BoardPlayerCurrMotionGet + b BoardPlayerCurrMotionGet + entry _kerjmp_BoardPlayerMotionEndCheck + b BoardPlayerMotionEndCheck + entry _kerjmp_BoardPlayerMotionEndWait + b BoardPlayerMotionEndWait + entry _kerjmp_BoardPlayerMotionMaxTimeGet + b BoardPlayerMotionMaxTimeGet + entry _kerjmp_BoardPlayerMotionTimeGet + b BoardPlayerMotionTimeGet + entry _kerjmp_BoardPlayerVoiceEnableSet + b BoardPlayerVoiceEnableSet + entry _kerjmp_BoardPlayerMotionStart + b BoardPlayerMotionStart + entry _kerjmp_BoardPlayerMotionShiftSet + b BoardPlayerMotionShiftSet + entry _kerjmp_BoardPlayerMotionCreate + b BoardPlayerMotionCreate + entry _kerjmp_BoardPlayerMotionKill + b BoardPlayerMotionKill + entry _kerjmp_BoardPlayerMotionSpeedSet + b BoardPlayerMotionSpeedSet + entry _kerjmp_BoardPlayerMotionTimeSet + b BoardPlayerMotionTimeSet + entry _kerjmp_BoardPlayerMotionStartEndSet + b BoardPlayerMotionStartEndSet + entry _kerjmp_BoardPlayerModelAttrSet + b BoardPlayerModelAttrSet + entry _kerjmp_BoardPlayerModelAttrReset + b BoardPlayerModelAttrReset + entry _kerjmp_BoardPlayerAmbSet + b BoardPlayerAmbSet + entry _kerjmp_BoardPlayerIdleSet + b BoardPlayerIdleSet + entry _kerjmp_BoardPlayerMotBlendSet + b BoardPlayerMotBlendSet + entry _kerjmp_BoardPlayerMotBlendCheck + b BoardPlayerMotBlendCheck + entry _kerjmp_BoardPlayerRankCalc + b BoardPlayerRankCalc + entry _kerjmp_BoardRollTypeGet + b BoardRollTypeGet + entry _kerjmp_BoardRollTypeSet + b BoardRollTypeSet + entry _kerjmp_BoardPlayerItemRemove + b BoardPlayerItemRemove + entry _kerjmp_BoardPlayerItemFind + b BoardPlayerItemFind + entry _kerjmp_BoardPlayerItemAdd + b BoardPlayerItemAdd + entry _kerjmp_BoardPlayerItemCount + b BoardPlayerItemCount + entry _kerjmp_BoardPlayerCoinsAdd + b BoardPlayerCoinsAdd + entry _kerjmp_BoardPlayerCoinsGet + b BoardPlayerCoinsGet + entry _kerjmp_BoardPlayerCoinsSet + b BoardPlayerCoinsSet + entry _kerjmp_BoardPlayerStarsAdd + b BoardPlayerStarsAdd + entry _kerjmp_BoardPlayerSameTeamFind + b BoardPlayerSameTeamFind + entry _kerjmp_BoardPlayerPosLerpStart + b BoardPlayerPosLerpStart + entry _kerjmp_BoardPlayerMoveToAsync + b BoardPlayerMoveToAsync + entry _kerjmp_BoardPlayerDiceJumpStart + b BoardPlayerDiceJumpStart + entry _kerjmp_BoardPlayerDiceJumpCheck + b BoardPlayerDiceJumpCheck + entry _kerjmp_BoardDiceDigit2DInit + b BoardDiceDigit2DInit + entry _kerjmp_BoardDiceDigit2DUpdateEnable + b BoardDiceDigit2DUpdateEnable + entry _kerjmp_BoardDiceDigit2DShowSet + b BoardDiceDigit2DShowSet + entry _kerjmp_BoardPlayerBtnDownWait + b BoardPlayerBtnDownWait + entry _kerjmp_BoardPlayerAutoSizeSet + b BoardPlayerAutoSizeSet + entry _kerjmp_BoardPlayerAutoSizeGet + b BoardPlayerAutoSizeGet + entry _kerjmp_BoardPlayerMoveAwayIsDone + b BoardPlayerMoveAwayIsDone + entry _kerjmp_BoardPlayerMoveAwayStartCurr + b BoardPlayerMoveAwayStartCurr + entry _kerjmp_BoardPlayerMoveAwayStart + b BoardPlayerMoveAwayStart + entry _kerjmp_BoardPlayerPreTurnHookSet + b BoardPlayerPreTurnHookSet + entry _kerjmp_BoardPlayerPostTurnHookSet + b BoardPlayerPostTurnHookSet + entry _kerjmp_BoardPlayerCopyEyeMat + b BoardPlayerCopyEyeMat + entry _kerjmp_BoardBowserSuitInit + b BoardBowserSuitInit + entry _kerjmp_BoardBowserSuitKill + b BoardBowserSuitKill + entry _kerjmp_BoardBowserSuitModelGet + b BoardBowserSuitModelGet + entry _kerjmp_BoardBowserSuitPlayerModelGet + b BoardBowserSuitPlayerModelGet + entry _kerjmp_BoardBowserSuitPlayerModelKill + b BoardBowserSuitPlayerModelKill + entry _kerjmp_BoardBowserSuitMotionSetWait + b BoardBowserSuitMotionSetWait + entry _kerjmp_BoardBowserSuitMotionSetWalk + b BoardBowserSuitMotionSetWalk + entry _kerjmp_BoardBowserSuitMotionSetWin + b BoardBowserSuitMotionSetWin + entry _kerjmp_BoardBowserSuitMotionSetJump + b BoardBowserSuitMotionSetJump + entry _kerjmp_BoardJunctionMaskSet + b BoardJunctionMaskSet + entry _kerjmp_BoardJunctionMaskReset + b BoardJunctionMaskReset + entry _kerjmp_BoardJunctionMaskZero + b BoardJunctionMaskZero + entry _kerjmp_BoardPlayerResizeAnimExec + b BoardPlayerResizeAnimExec + entry _kerjmp_BoardWinCreate + b BoardWinCreate + entry _kerjmp_BoardWinCreateChoice + b BoardWinCreateChoice + entry _kerjmp_BoardWinChoiceGet + b BoardWinChoiceGet + entry _kerjmp_BoardWinWait + b BoardWinWait + entry _kerjmp_BoardWinKill + b BoardWinKill + entry _kerjmp_BoardWinInit + b BoardWinInit + entry _kerjmp_BoardWinKillAll + b BoardWinKillAll + entry _kerjmp_BoardWinUnusedArraySet + b BoardWinUnusedArraySet + entry _kerjmp_BoardWinPause + b BoardWinPause + entry _kerjmp_BoardWinInsertMesSet + b BoardWinInsertMesSet + entry _kerjmp_BoardWinAttrSet + b BoardWinAttrSet + entry _kerjmp_BoardWinAttrReset + b BoardWinAttrReset + entry _kerjmp_BoardWinChoiceDisable + b BoardWinChoiceDisable + entry _kerjmp_BoardWinKeyWait + b BoardWinKeyWait + entry _kerjmp_BoardWinSpeedGet + b BoardWinSpeedGet + entry _kerjmp_BoardWinSpeedSet + b BoardWinSpeedSet + entry _kerjmp_BoardWinPriSet + b BoardWinPriSet + entry _kerjmp_BoardWinChoiceNowGet + b BoardWinChoiceNowGet + entry _kerjmp_BoardWinChoiceNowGet2 + b BoardWinChoiceNowGet2 + entry _kerjmp_BoardStatusCreate + b BoardStatusCreate + entry _kerjmp_BoardStatusKill + b BoardStatusKill + entry _kerjmp_BoardStatusVisibleGet + b BoardStatusVisibleGet + entry _kerjmp_BoardStatusShowSet + b BoardStatusShowSet + entry _kerjmp_BoardStatusShowSetForce + b BoardStatusShowSetForce + entry _kerjmp_BoardStatusGraySet + b BoardStatusGraySet + entry _kerjmp_BoardStatusShowSetAll + b BoardStatusShowSetAll + entry _kerjmp_BoardStatusStopCheck + b BoardStatusStopCheck + entry _kerjmp_BoardSpriteCreate + b BoardSpriteCreate + entry _kerjmp_BoardStatusTargetPosSet + b BoardStatusTargetPosSet + entry _kerjmp_BoardStatusPosSet + b BoardStatusPosSet + entry _kerjmp_BoardStatusPosGet + b BoardStatusPosGet + entry _kerjmp_BoardStatusItemHideSet + b BoardStatusItemHideSet + entry _kerjmp_BoardStatusHammerCreate + b BoardStatusHammerCreate + entry _kerjmp_BoardStatusHammerKill + b BoardStatusHammerKill + entry _kerjmp_BoardStatusHammerShowSet + b BoardStatusHammerShowSet + entry _kerjmp_BoardPickerCreate + b BoardPickerCreate + entry _kerjmp_BoardPickerDoneCheck + b BoardPickerDoneCheck + entry _kerjmp_BoardPickerChoiceGet + b BoardPickerChoiceGet + entry _kerjmp_BoardPickerPosGet + b BoardPickerPosGet + entry _kerjmp_BoardPickerBackFlagSet + b BoardPickerBackFlagSet + entry _kerjmp_BoardItemGetDestPos + b BoardItemGetDestPos + entry _kerjmp_BoardItemUseExec + b BoardItemUseExec + entry _kerjmp_BoardItemStatusKill + b BoardItemStatusKill + entry _kerjmp_BoardYourTurnExec + b BoardYourTurnExec + entry _kerjmp_BoardMusStart + b BoardMusStart + entry _kerjmp_BoardAudSeqFadeOutFast + b BoardAudSeqFadeOutFast + entry _kerjmp_BoardAudSeqFadeOut + b BoardAudSeqFadeOut + entry _kerjmp_BoardMusLoudSet + b BoardMusLoudSet + entry _kerjmp_BoardMusVolPanSet + b BoardMusVolPanSet + entry _kerjmp_BoardAudSeqPause + b BoardAudSeqPause + entry _kerjmp_BoardMusStatusGet + b BoardMusStatusGet + entry _kerjmp_BoardAudSeqFadeOutAll + b BoardAudSeqFadeOutAll + entry _kerjmp_BoardAudFXPlay + b BoardAudFXPlay + entry _kerjmp_BoardAudFXStop + b BoardAudFXStop + entry _kerjmp_BoardComKeySetLeft + b BoardComKeySetLeft + entry _kerjmp_BoardComKeySetUp + b BoardComKeySetUp + entry _kerjmp_BoardComKeySetRight + b BoardComKeySetRight + entry _kerjmp_BoardComKeySetDown + b BoardComKeySetDown + entry _kerjmp_BoardComPreferItemCheck + b BoardComPreferItemCheck + entry _kerjmp_BoardComPreferItemGet + b BoardComPreferItemGet + entry _kerjmp_BoardComFarPlayerFind + b BoardComFarPlayerFind + entry _kerjmp_boardTutorialData + b boardTutorialData + entry _kerjmp_BoardTutorialHookSet + b BoardTutorialHookSet + entry _kerjmp_BoardRollTutorialSet + b BoardRollTutorialSet + entry _kerjmp_BoardTutorialDirInputSet + b BoardTutorialDirInputSet + entry _kerjmp_BoardCharWheelTargetSet + b BoardCharWheelTargetSet + entry _kerjmp_BoardTutorialBlockSetPos + b BoardTutorialBlockSetPos + entry _kerjmp_BoardTutorialItemSet + b BoardTutorialItemSet + entry _kerjmp_BoardTutorialHostSet + b BoardTutorialHostSet + entry _kerjmp_BoardMGSetupTutorialExec + b BoardMGSetupTutorialExec + entry _kerjmp_BoardShopTutorialExec + b BoardShopTutorialExec + entry _kerjmp_BoardLotteryTutorialExec + b BoardLotteryTutorialExec + entry _kerjmp_BoardBooHouseTutorialExec + b BoardBooHouseTutorialExec + #endif +} \ No newline at end of file From b3c0b00c76ef024f2bac08284ead0e6e8b652d8b Mon Sep 17 00:00:00 2001 From: Rainchus Date: Sun, 31 Mar 2024 13:50:06 -0500 Subject: [PATCH 100/106] match kerent.c --- config/GMPE01_00/config.yml | 2 +- config/GMPE01_00/symbols.txt | 2 +- src/game/kerent.c | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/config/GMPE01_00/config.yml b/config/GMPE01_00/config.yml index 2c8e44d5..8e687a60 100644 --- a/config/GMPE01_00/config.yml +++ b/config/GMPE01_00/config.yml @@ -4,7 +4,7 @@ symbols: config/GMPE01_00/symbols.txt splits: config/GMPE01_00/splits.txt quick_analysis: true # Faster re-runs after initial analysis mw_comment_version: 10 # GC 2.6 linker -force_active: [__register_global_object, lbl_801D40D0] +force_active: [__register_global_object, lbl_801D40D0, _kerent] modules: - object: orig/GMPE01_00/files/dll/_minigameDll.rel diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index 84e0ce5a..76969889 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -3580,7 +3580,7 @@ msmStreamDvdCallback = .text:0x8011C304; // type:function size:0x4A8 scope:local msmStreamDvdCallback2 = .text:0x8011C7AC; // type:function size:0x188 scope:local msmStreamUpdateFunc = .text:0x8011C934; // type:function size:0x17C scope:local msmStreamSlotInit = .text:0x8011CAB0; // type:function size:0x214 scope:local -kerent = .text:0x8011CCC4; // type:function size:0xFE4 +_kerent = .text:0x8011CCC4; // type:function size:0xFE4 scope:global _ctors = .ctors:0x8011DCC0; // type:label scope:global data:4byte __init_cpp_exceptions_reference = .ctors:0x8011DCC0; // type:object size:0x4 scope:global _dtors = .dtors:0x8011DCE0; // type:label scope:global data:4byte diff --git a/src/game/kerent.c b/src/game/kerent.c index f83afec2..fb99d976 100644 --- a/src/game/kerent.c +++ b/src/game/kerent.c @@ -1,3 +1,4 @@ +//fake function signatures void OSDumpStopwatch(void); void PSVECDotProduct(void); void PSVECDistance(void); @@ -2033,7 +2034,7 @@ extern void _kerjmp_BoardShopTutorialExec(void); extern void _kerjmp_BoardLotteryTutorialExec(void); extern void _kerjmp_BoardBooHouseTutorialExec(void); -asm void kerent(void) { +asm void _kerent(void) { #ifdef __MWERKS__ // clang-format off nofralloc entry _kerjmp_OSDumpStopwatch From 02bece5afa1602baddceeb1cb3732a8216201e3c Mon Sep 17 00:00:00 2001 From: Rainchus Date: Sun, 31 Mar 2024 14:00:19 -0500 Subject: [PATCH 101/106] update readme, rename repo --- README.example.md => README.md | 10 +++++----- get_rel_function_names.py | 25 ------------------------- 2 files changed, 5 insertions(+), 30 deletions(-) rename README.example.md => README.md (94%) delete mode 100644 get_rel_function_names.py diff --git a/README.example.md b/README.md similarity index 94% rename from README.example.md rename to README.md index af8f9a17..9bb02ec2 100644 --- a/README.example.md +++ b/README.md @@ -29,9 +29,9 @@ URL encoded then appended to: https://img.shields.io/endpoint?label=RELs&url= Replace with your Discord server's ID and invite URL. --> [Discord Badge]: https://img.shields.io/discord/727908905392275526?color=%237289DA&logo=discord&logoColor=%23FFFFFF -[discord]: https://discord.gg/hKx3FJJgrV +[discord]: https://discord.gg/T4faGveujK -A work-in-progress decompilation of Some Game. +A work-in-progress decompilation of Mario Party 4. This repository does **not** contain any game assets or assembly whatsoever. An existing copy of the game is required. @@ -80,9 +80,9 @@ Building - Clone the repository: ``` - git clone https://github.com/my/repo.git + git clone https://github.com/Rainchus/mp4-dtk.git ``` -- Using [Dolphin Emulator](https://dolphin-emu.org/), extract your game to `orig/GAMEID`. +- Using [Dolphin Emulator](https://dolphin-emu.org/), extract your game to `orig/GMPE01`. ![](assets/dolphin-extract.png) - To save space, the only necessary files are the following. Any others can be deleted. - `sys/main.dol` @@ -91,7 +91,7 @@ Building ``` python configure.py ``` - To use a version other than `GAMEID` (USA), specify it with `--version`. + To use a version other than `GMPE01` (USA), specify it with `--version`. - Build: ``` ninja diff --git a/get_rel_function_names.py b/get_rel_function_names.py deleted file mode 100644 index 910afaa0..00000000 --- a/get_rel_function_names.py +++ /dev/null @@ -1,25 +0,0 @@ -import os -import sys - -if len(sys.argv) != 2: - print("Usage: python script.py ") - sys.exit(1) - -file_path = sys.argv[1] -lines_starting_with_fn = "" - -with open(file_path, 'r') as file: - for line in file: - # Remove leading and trailing whitespaces - line = line.strip() - - if line.startswith(".fn fn_"): - # Remove ".fn " from the beginning of the line - line = line[len(".fn "):] - - # Remove ", global" from the end of the line - line = line.rstrip(', global') - - lines_starting_with_fn += "// " + line + '\n\n' - -print(lines_starting_with_fn) From be5edfd064c8811940fa8ef242e9b517bfb360ea Mon Sep 17 00:00:00 2001 From: Rainchus Date: Sun, 31 Mar 2024 14:05:14 -0500 Subject: [PATCH 102/106] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9bb02ec2..60577b3f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Some Game +Mario Party 4 [![Build Status]][actions] ![Progress] ![DOL Progress] ![RELs Progress] [![Discord Badge]][discord] ============= From 9dcac2c15684e78eb8a2e4b95e1e832833135f2d Mon Sep 17 00:00:00 2001 From: mrshigure Date: Sun, 31 Mar 2024 17:59:41 -0700 Subject: [PATCH 103/106] Matched REL/w01/mg_item + some data cleanup --- config/GMPE01_00/rels/w01Dll/symbols.txt | 232 +++--- configure.py | 2 +- include/game/hsfanim.h | 2 +- src/REL/w01Dll/main.c | 4 +- src/REL/w01Dll/mg_item.c | 947 +++++++++++++++++++++++ src/REL/w03Dll/condor.c | 4 +- src/REL/w03Dll/mg_coin.c | 4 +- src/REL/w03Dll/mg_item.c | 2 +- src/REL/w03Dll/statue.c | 10 +- src/game/board/item.c | 6 +- src/game/board/lottery.c | 8 +- src/game/board/main.c | 2 +- src/game/board/mg_setup.c | 2 +- src/game/board/shop.c | 4 +- src/game/board/star.c | 92 ++- src/game/board/start.c | 2 +- src/game/board/view.c | 2 +- src/game/hsfanim.c | 14 +- 18 files changed, 1142 insertions(+), 197 deletions(-) create mode 100755 src/REL/w01Dll/mg_item.c diff --git a/config/GMPE01_00/rels/w01Dll/symbols.txt b/config/GMPE01_00/rels/w01Dll/symbols.txt index c6b4e59a..83c6fcbc 100644 --- a/config/GMPE01_00/rels/w01Dll/symbols.txt +++ b/config/GMPE01_00/rels/w01Dll/symbols.txt @@ -103,37 +103,37 @@ fn_1_D114 = .text:0x0000D114; // type:function size:0x62C scope:local fn_1_D740 = .text:0x0000D740; // type:function size:0x644 fn_1_DD84 = .text:0x0000DD84; // type:function size:0x110 fn_1_DE94 = .text:0x0000DE94; // type:function size:0x26C -fn_1_E100 = .text:0x0000E100; // type:function size:0x54 -fn_1_E154 = .text:0x0000E154; // type:function size:0x164 -fn_1_E2B8 = .text:0x0000E2B8; // type:function size:0x194 -fn_1_E44C = .text:0x0000E44C; // type:function size:0x4C8 -fn_1_E914 = .text:0x0000E914; // type:function size:0x3C0 -fn_1_ECD4 = .text:0x0000ECD4; // type:function size:0x1CC -fn_1_EEA0 = .text:0x0000EEA0; // type:function size:0x38 -fn_1_EED8 = .text:0x0000EED8; // type:function size:0x1C4 -fn_1_F09C = .text:0x0000F09C; // type:function size:0x2AC -fn_1_F348 = .text:0x0000F348; // type:function size:0xB0 -fn_1_F3F8 = .text:0x0000F3F8; // type:function size:0x2F0 -fn_1_F6E8 = .text:0x0000F6E8; // type:function size:0x1A8 -fn_1_F890 = .text:0x0000F890; // type:function size:0x18C -fn_1_FA1C = .text:0x0000FA1C; // type:function size:0xA0 -fn_1_FABC = .text:0x0000FABC; // type:function size:0x9C -fn_1_FB58 = .text:0x0000FB58; // type:function size:0xE4 -fn_1_FC3C = .text:0x0000FC3C; // type:function size:0xB0 -fn_1_FCEC = .text:0x0000FCEC; // type:function size:0x50 -fn_1_FD3C = .text:0x0000FD3C; // type:function size:0x108 -fn_1_FE44 = .text:0x0000FE44; // type:function size:0x8C -fn_1_FED0 = .text:0x0000FED0; // type:function size:0x14C -fn_1_1001C = .text:0x0001001C; // type:function size:0x19C -fn_1_101B8 = .text:0x000101B8; // type:function size:0x4AC -fn_1_10664 = .text:0x00010664; // type:function size:0x1BC -fn_1_10820 = .text:0x00010820; // type:function size:0x2C8 -fn_1_10AE8 = .text:0x00010AE8; // type:function size:0xC8 -fn_1_10BB0 = .text:0x00010BB0; // type:function size:0x140 -fn_1_10CF0 = .text:0x00010CF0; // type:function size:0x1C8 -fn_1_10EB8 = .text:0x00010EB8; // type:function size:0x1AC -fn_1_11064 = .text:0x00011064; // type:function size:0x420 -fn_1_11484 = .text:0x00011484; // type:function size:0x56C +fn_1_E100 = .text:0x0000E100; // type:function size:0x54 scope:local +fn_1_E154 = .text:0x0000E154; // type:function size:0x164 scope:local +fn_1_E2B8 = .text:0x0000E2B8; // type:function size:0x194 scope:local +fn_1_E44C = .text:0x0000E44C; // type:function size:0x4C8 scope:local +fn_1_E914 = .text:0x0000E914; // type:function size:0x3C0 scope:local +fn_1_ECD4 = .text:0x0000ECD4; // type:function size:0x1CC scope:local +fn_1_EEA0 = .text:0x0000EEA0; // type:function size:0x38 scope:local +fn_1_EED8 = .text:0x0000EED8; // type:function size:0x1C4 scope:local +fn_1_F09C = .text:0x0000F09C; // type:function size:0x2AC scope:local +fn_1_F348 = .text:0x0000F348; // type:function size:0xB0 scope:local +fn_1_F3F8 = .text:0x0000F3F8; // type:function size:0x2F0 scope:local +fn_1_F6E8 = .text:0x0000F6E8; // type:function size:0x1A8 scope:local +fn_1_F890 = .text:0x0000F890; // type:function size:0x18C scope:local +fn_1_FA1C = .text:0x0000FA1C; // type:function size:0xA0 scope:local +fn_1_FABC = .text:0x0000FABC; // type:function size:0x9C scope:local +fn_1_FB58 = .text:0x0000FB58; // type:function size:0xE4 scope:local +fn_1_FC3C = .text:0x0000FC3C; // type:function size:0xB0 scope:local +fn_1_FCEC = .text:0x0000FCEC; // type:function size:0x50 scope:local +fn_1_FD3C = .text:0x0000FD3C; // type:function size:0x108 scope:local +fn_1_FE44 = .text:0x0000FE44; // type:function size:0x8C scope:local +fn_1_FED0 = .text:0x0000FED0; // type:function size:0x14C scope:local +fn_1_1001C = .text:0x0001001C; // type:function size:0x19C scope:local +fn_1_101B8 = .text:0x000101B8; // type:function size:0x4AC scope:local +fn_1_10664 = .text:0x00010664; // type:function size:0x1BC scope:local +fn_1_10820 = .text:0x00010820; // type:function size:0x2C8 scope:local +fn_1_10AE8 = .text:0x00010AE8; // type:function size:0xC8 scope:local +fn_1_10BB0 = .text:0x00010BB0; // type:function size:0x140 scope:local +fn_1_10CF0 = .text:0x00010CF0; // type:function size:0x1C8 scope:local +fn_1_10EB8 = .text:0x00010EB8; // type:function size:0x1AC scope:local +fn_1_11064 = .text:0x00011064; // type:function size:0x420 scope:local +fn_1_11484 = .text:0x00011484; // type:function size:0x56C scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float @@ -281,59 +281,59 @@ lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x4 scope:local data: lbl_1_rodata_2BC = .rodata:0x000002BC; // type:object size:0x4 scope:local data:float lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 scope:local data:float lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 scope:local data:float -lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float -lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 data:float -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 data:double -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 data:float -lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 data:float -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 data:float -lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 data:float -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 data:double -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x8 data:double -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 data:float -lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 data:float -lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 data:float -lbl_1_rodata_314 = .rodata:0x00000314; // type:object size:0x4 data:float -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 data:float -lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 data:float -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 data:float -lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 data:float -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 data:float -lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 data:float -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 data:float -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 data:float -lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 data:float -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 data:float -lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 data:float -lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 data:float -lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 data:float -lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 data:float -lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 data:float -lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 data:float -lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x8 data:double -lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 data:float -lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x8 data:double -lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x8 data:double -lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x8 data:double -lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 data:float -lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 data:float -lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 data:float -lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 data:float -lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 data:float -lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 data:float -lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 data:float -lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 data:float -lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 data:float -lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 data:float -lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 data:float -lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 data:float -lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float -lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float -lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float +lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x8 scope:local data:double +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x4 scope:local data:float +lbl_1_rodata_314 = .rodata:0x00000314; // type:object size:0x4 scope:local data:float +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 scope:local data:float +lbl_1_rodata_31C = .rodata:0x0000031C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x4 scope:local data:float +lbl_1_rodata_324 = .rodata:0x00000324; // type:object size:0x4 scope:local data:float +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x4 scope:local data:float +lbl_1_rodata_32C = .rodata:0x0000032C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float +lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 scope:local data:float +lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 scope:local data:float +lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 scope:local data:float +lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 scope:local data:float +lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 scope:local data:float +lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x8 scope:local data:double +lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 scope:local data:float +lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x8 scope:local data:double +lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x8 scope:local data:double +lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x8 scope:local data:double +lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 scope:local data:float +lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 scope:local data:float +lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 scope:local data:float +lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x528 scope:local lbl_1_data_528 = .data:0x00000528; // type:object size:0x2 scope:local data:2byte lbl_1_data_52A = .data:0x0000052A; // type:object size:0x2 scope:local data:2byte @@ -368,15 +368,15 @@ lbl_1_data_690 = .data:0x00000690; // type:object size:0x2D0 scope:local lbl_1_data_960 = .data:0x00000960; // type:object size:0x2D0 scope:local lbl_1_data_C30 = .data:0x00000C30; // type:object size:0x2D0 scope:local lbl_1_data_F00 = .data:0x00000F00; // type:object size:0x3 scope:local data:string -lbl_1_data_F08 = .data:0x00000F08; // type:object size:0x38 -lbl_1_data_F40 = .data:0x00000F40; // type:object size:0x20 -lbl_1_data_F60 = .data:0x00000F60; // type:object size:0x20 -lbl_1_data_F80 = .data:0x00000F80; // type:object size:0x7 data:string -lbl_1_data_F87 = .data:0x00000F87; // type:object size:0x5 data:string -lbl_1_data_F8C = .data:0x00000F8C; // type:object size:0x5 data:string -lbl_1_data_F91 = .data:0x00000F91; // type:object size:0x5 data:string -lbl_1_data_F96 = .data:0x00000F96; // type:object size:0x6 -lbl_1_data_F9C = .data:0x00000F9C; // type:object size:0x10 data:4byte +lbl_1_data_F08 = .data:0x00000F08; // type:object size:0x38 scope:local +lbl_1_data_F40 = .data:0x00000F40; // type:object size:0x20 scope:local +lbl_1_data_F60 = .data:0x00000F60; // type:object size:0x20 scope:local +lbl_1_data_F80 = .data:0x00000F80; // type:object size:0x7 scope:local data:string +lbl_1_data_F87 = .data:0x00000F87; // type:object size:0x5 scope:local data:string +lbl_1_data_F8C = .data:0x00000F8C; // type:object size:0x5 scope:local data:string +lbl_1_data_F91 = .data:0x00000F91; // type:object size:0x5 scope:local data:string +lbl_1_data_F96 = .data:0x00000F96; // type:object size:0x5 scope:local data:string +lbl_1_data_F9C = .data:0x00000F9C; // type:object size:0x10 scope:local data:4byte lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 scope:local data:4byte @@ -444,26 +444,26 @@ lbl_1_bss_790 = .bss:0x00000790; // type:object size:0x6 scope:local data:2byte lbl_1_bss_796 = .bss:0x00000796; // type:object size:0x2 scope:local data:2byte lbl_1_bss_798 = .bss:0x00000798; // type:object size:0x4 scope:local data:4byte lbl_1_bss_79C = .bss:0x0000079C; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_7A0 = .bss:0x000007A0; // type:object size:0x4 data:4byte -lbl_1_bss_7A4 = .bss:0x000007A4; // type:object size:0x4 data:4byte -lbl_1_bss_7A8 = .bss:0x000007A8; // type:object size:0x2 data:2byte -lbl_1_bss_7AA = .bss:0x000007AA; // type:object size:0x2 data:2byte -lbl_1_bss_7AC = .bss:0x000007AC; // type:object size:0x8 data:4byte -lbl_1_bss_7B4 = .bss:0x000007B4; // type:object size:0x2 data:2byte -lbl_1_bss_7B8 = .bss:0x000007B8; // type:object size:0x4 data:4byte -lbl_1_bss_7BC = .bss:0x000007BC; // type:object size:0x8 data:4byte -lbl_1_bss_7C4 = .bss:0x000007C4; // type:object size:0xC data:float -lbl_1_bss_7D0 = .bss:0x000007D0; // type:object size:0x2 data:2byte -lbl_1_bss_7D2 = .bss:0x000007D2; // type:object size:0x2 data:2byte -lbl_1_bss_7D4 = .bss:0x000007D4; // type:object size:0x2 data:2byte -lbl_1_bss_7D6 = .bss:0x000007D6; // type:object size:0x2 data:2byte -lbl_1_bss_7D8 = .bss:0x000007D8; // type:object size:0xC data:4byte -lbl_1_bss_7E4 = .bss:0x000007E4; // type:object size:0x4 data:4byte -lbl_1_bss_7E8 = .bss:0x000007E8; // type:object size:0x4 data:float -lbl_1_bss_7EC = .bss:0x000007EC; // type:object size:0x4 data:float -lbl_1_bss_7F0 = .bss:0x000007F0; // type:object size:0x4 data:4byte -lbl_1_bss_7F4 = .bss:0x000007F4; // type:object size:0x4 data:4byte -lbl_1_bss_7F8 = .bss:0x000007F8; // type:object size:0x4 data:4byte -lbl_1_bss_7FC = .bss:0x000007FC; // type:object size:0x10 data:4byte -lbl_1_bss_80C = .bss:0x0000080C; // type:object size:0xC data:float -lbl_1_bss_818 = .bss:0x00000818; // type:object size:0x4 data:4byte +lbl_1_bss_7A0 = .bss:0x000007A0; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_7A4 = .bss:0x000007A4; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_7A8 = .bss:0x000007A8; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_7AA = .bss:0x000007AA; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_7AC = .bss:0x000007AC; // type:object size:0x8 scope:local data:4byte +lbl_1_bss_7B4 = .bss:0x000007B4; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_7B8 = .bss:0x000007B8; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_7BC = .bss:0x000007BC; // type:object size:0x8 scope:local data:4byte +lbl_1_bss_7C4 = .bss:0x000007C4; // type:object size:0xC scope:local data:float +lbl_1_bss_7D0 = .bss:0x000007D0; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_7D2 = .bss:0x000007D2; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_7D4 = .bss:0x000007D4; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_7D6 = .bss:0x000007D6; // type:object size:0x2 scope:local data:2byte +lbl_1_bss_7D8 = .bss:0x000007D8; // type:object size:0xC scope:local data:4byte +lbl_1_bss_7E4 = .bss:0x000007E4; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_7E8 = .bss:0x000007E8; // type:object size:0x4 scope:local data:float +lbl_1_bss_7EC = .bss:0x000007EC; // type:object size:0x4 scope:local data:float +lbl_1_bss_7F0 = .bss:0x000007F0; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_7F4 = .bss:0x000007F4; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_7F8 = .bss:0x000007F8; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_7FC = .bss:0x000007FC; // type:object size:0x10 scope:local data:4byte +lbl_1_bss_80C = .bss:0x0000080C; // type:object size:0xC scope:local data:float +lbl_1_bss_818 = .bss:0x00000818; // type:object size:0x4 scope:local data:4byte diff --git a/configure.py b/configure.py index 9a4b04fa..6ca637cb 100644 --- a/configure.py +++ b/configure.py @@ -1086,7 +1086,7 @@ config.libs = [ Object(Matching, "REL/board_executor.c"), Object(Matching, "REL/w01Dll/main.c"), Object(Matching, "REL/w01Dll/mg_coin.c"), - Object(NonMatching, "REL/w01Dll/mg_item.c"), + Object(Matching, "REL/w01Dll/mg_item.c"), } ), Rel('w02Dll', diff --git a/include/game/hsfanim.h b/include/game/hsfanim.h index 63015b06..edfe1862 100644 --- a/include/game/hsfanim.h +++ b/include/game/hsfanim.h @@ -103,7 +103,7 @@ void Hu3DAnimAttrSet(s16 arg0, u16 arg1); void Hu3DAnimAttrReset(s16 arg0, s32 arg1); void Hu3DAnimSpeedSet(s16 arg0, float arg1); void Hu3DAnimBankSet(s16 arg0, s32 arg1); -void Hu3DAnmNoSet(s16 arg0, s32 arg1); +void Hu3DAnmNoSet(s16 arg0, u16 arg1); s32 Hu3DAnimSet(ModelData *arg0, HsfAttribute *arg1, s16 arg2); void Hu3DAnimExec(void); s16 Hu3DTexScrollCreate(s16 arg0, char *arg1); diff --git a/src/REL/w01Dll/main.c b/src/REL/w01Dll/main.c index 48239721..93728c99 100755 --- a/src/REL/w01Dll/main.c +++ b/src/REL/w01Dll/main.c @@ -1097,7 +1097,7 @@ static void fn_1_3624(void) { sp30.x = -40.0f; sp30.z = 0.0f; sp30.y = -lbl_1_bss_63C; - BoardCameraMotionStartEx(lbl_1_bss_6C4[0], &sp30, 0, 150.0f, -1.0f, 2); + BoardCameraMotionStartEx(lbl_1_bss_6C4[0], &sp30, NULL, 150.0f, -1.0f, 2); BoardCameraMotionWait(); BoardModelPosGet(lbl_1_bss_6C4[0], &lbl_1_bss_618); lbl_1_bss_630.x = lbl_1_bss_618.x + 1000.0 * (sin(sp30.y * M_PI / 180.0) * cos(sp30.x * M_PI / 180.0)); @@ -1980,7 +1980,7 @@ static void fn_1_7A64(void) { var_r20 = BoardSpaceFlagSearch(1, 0x2000); } lbl_1_bss_654 = sp34; - BoardCameraMotionStartEx(lbl_1_bss_6C4[0], 0, 0, 2400.0f, -1.0f, 2); + BoardCameraMotionStartEx(lbl_1_bss_6C4[0], NULL, NULL, 2400.0f, -1.0f, 2); PSMTXRotRad(lbl_1_bss_678, 'y', MTXDegToRad(lbl_1_bss_63C)); BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); BoardModelRotSet(lbl_1_bss_6C4[0], 0.0f, 0.0f, 0.0f); diff --git a/src/REL/w01Dll/mg_item.c b/src/REL/w01Dll/mg_item.c new file mode 100755 index 00000000..5a1b133a --- /dev/null +++ b/src/REL/w01Dll/mg_item.c @@ -0,0 +1,947 @@ +#include "REL/w01Dll.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/gamework_data.h" +#include "game/hsfanim.h" +#include "game/hsfdraw.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/minigame_seq.h" +#include "game/object.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/process.h" +#include "game/sprite.h" +#include "game/window.h" +#include "game/board/audio.h" +#include "game/board/main.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/ui.h" +#include "game/board/window.h" + +#include "dolphin.h" +#include "math.h" + +static void fn_1_E100(void); +static void fn_1_E154(void); +static void fn_1_E2B8(omObjData *arg0); +static void fn_1_E44C(omObjData *arg0); +static void fn_1_E914(omObjData *arg0); +static void fn_1_ECD4(omObjData *arg0); +static void fn_1_EEA0(omObjData *arg0, u16 *arg1); +static void fn_1_EED8(omObjData *arg0); +static void fn_1_F09C(omObjData *arg0); +static void fn_1_F348(omObjData *arg0); +static void fn_1_F3F8(omObjData *arg0); +static void fn_1_F6E8(omObjData *arg0); +static void fn_1_F890(omObjData *arg0); +static void fn_1_FA1C(omObjData *arg0); +static void fn_1_FABC(omObjData *arg0); +static void fn_1_FB58(void); +static void fn_1_FC3C(omObjData *arg0); +static void fn_1_FCEC(void); +static void fn_1_FD3C(omObjData *arg0); +static void fn_1_FE44(omObjData *arg0); +static void fn_1_FED0(omObjData *arg0); +static s16 fn_1_1001C(u32 arg0); +static void fn_1_101B8(s16 arg0); +static void fn_1_10664(omObjData *arg0); +static void fn_1_10820(omObjData *arg0); +static void fn_1_10AE8(omObjData *arg0); +static float fn_1_10BB0(u32 arg0); +static void fn_1_10CF0(u32 arg0); +static float fn_1_10EB8(Vec *arg0); +static void fn_1_11064(ModelData *model, ParticleData *particle, Mtx matrix); +static void fn_1_11484(ModelData *model, ParticleData *particle, Mtx matrix); + +static void *lbl_1_bss_818; +static Vec lbl_1_bss_80C; +static omObjData *lbl_1_bss_7FC[4]; +static omObjData *lbl_1_bss_7F8; +static omObjData *lbl_1_bss_7F4; +static omObjData *lbl_1_bss_7F0; +static float lbl_1_bss_7EC; +static float lbl_1_bss_7E8; +static s32 lbl_1_bss_7E4; +static Vec lbl_1_bss_7D8; +static s16 lbl_1_bss_7D6; +static s16 lbl_1_bss_7D4; +static s16 lbl_1_bss_7D2; +static s16 lbl_1_bss_7D0; +static Vec lbl_1_bss_7C4; +static s32 lbl_1_bss_7C0_pad; +static s32 lbl_1_bss_7BC; +static s32 lbl_1_bss_7B8; +static s16 lbl_1_bss_7B4; +static s32 lbl_1_bss_7B0_pad; +static s32 lbl_1_bss_7AC; +static s16 lbl_1_bss_7AA; +static s16 lbl_1_bss_7A8; +static s32 lbl_1_bss_7A4; +static AnimData *lbl_1_bss_7A0; + +static s32 lbl_1_data_F08[] = { + DATA_MAKE_NUM(DATADIR_BOARD, 109), + DATA_MAKE_NUM(DATADIR_BOARD, 110), + DATA_MAKE_NUM(DATADIR_BOARD, 111), + DATA_MAKE_NUM(DATADIR_BOARD, 112), + DATA_MAKE_NUM(DATADIR_BOARD, 113), + DATA_MAKE_NUM(DATADIR_BOARD, 114), + DATA_MAKE_NUM(DATADIR_BOARD, 115), + DATA_MAKE_NUM(DATADIR_BOARD, 116), + DATA_MAKE_NUM(DATADIR_BOARD, 118), + DATA_MAKE_NUM(DATADIR_BOARD, 119), + DATA_MAKE_NUM(DATADIR_BOARD, 120), + DATA_MAKE_NUM(DATADIR_BOARD, 121), + DATA_MAKE_NUM(DATADIR_BOARD, 122), + DATA_MAKE_NUM(DATADIR_BOARD, 123) +}; + +static s32 lbl_1_data_F40[8] = { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 23), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 23), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 23), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 23), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 23), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 23), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 23), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 23) +}; + +static s32 lbl_1_data_F60[8] = { + DATA_MAKE_NUM(DATADIR_MARIOMOT, 64), + DATA_MAKE_NUM(DATADIR_LUIGIMOT, 64), + DATA_MAKE_NUM(DATADIR_PEACHMOT, 64), + DATA_MAKE_NUM(DATADIR_YOSHIMOT, 64), + DATA_MAKE_NUM(DATADIR_WARIOMOT, 64), + DATA_MAKE_NUM(DATADIR_DONKEYMOT, 64), + DATA_MAKE_NUM(DATADIR_DAISYMOT, 64), + DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 64) +}; + +void fn_1_D740(s16 *arg0) { + s16 sp10[14]; + s16 sp8[4]; + float temp_f30; + float temp_f29; + float var_f31; + s32 var_r28; + s32 var_r30; + s32 i; + s32 j; + + lbl_1_bss_818 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_W01, 28), MEMORY_DEFAULT_NUM, HEAP_DATA); + BoardModelPosGet(lbl_1_bss_6C4[16], &lbl_1_bss_80C); + sp8[0] = BoardModelIDGet(lbl_1_bss_6C4[19]); + BoardModelVisibilitySet(lbl_1_bss_6C4[19], 1); + for (i = 1; i < 4; i++) { + sp8[i] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_W01, 24)); + } + var_r30 = 0; + for (i = 0; i < 4; i++) { + lbl_1_bss_7FC[i] = omAddObjEx(boardObjMan, 0x165, 2, 0, -1, NULL); + if (arg0[i] != -1) { + lbl_1_bss_7FC[var_r30++]->work[1] = arg0[i]; + } + } + while (var_r30 != 4) { + var_r28 = 0; + for (i = 0; i < 14; i++) { + for (j = 0; j < var_r30; j++) { + if (i == lbl_1_bss_7FC[j]->work[1]) { + break; + } + } + if (j == var_r30) { + sp10[var_r28++] = i; + } + } + lbl_1_bss_7FC[var_r30++]->work[1] = sp10[rand8() % var_r28]; + } + temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[18]); + temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]); + for (i = 0; i < 4; i++) { + lbl_1_bss_7FC[i]->model[0] = sp8[i]; + lbl_1_bss_7FC[i]->model[1] = Hu3DModelCreateFile(lbl_1_data_F08[lbl_1_bss_7FC[i]->work[1]]); + if (lbl_1_bss_7FC[i]->work[1] == 5) { + Hu3DData[lbl_1_bss_7FC[i]->model[1]].unk_F0[1][3] = -50.0f; + } + if (lbl_1_bss_7FC[i]->work[1] == 11) { + Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], 0x40000001); + } + if (lbl_1_bss_7FC[i]->work[1] == 4) { + Hu3DMotionSpeedSet(lbl_1_bss_7FC[i]->model[1], 0.0f); + } + Hu3DModelAttrReset(sp8[i], 1); + Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], 1); + Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], 0x40000002); + omSetTra(lbl_1_bss_7FC[i], lbl_1_bss_80C.x, lbl_1_bss_80C.y + 66.0f, lbl_1_bss_80C.z); + var_f31 = 90.0f - 90.0f * i + 360.0f * (temp_f30 / temp_f29); + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + omSetRot(lbl_1_bss_7FC[i], 0.0f, var_f31, 0.0f); + lbl_1_bss_7FC[i]->work[0] = Hu3DAnimCreate(lbl_1_bss_818, lbl_1_bss_7FC[i]->model[0], "item01"); + Hu3DAnimAttrSet(lbl_1_bss_7FC[i]->work[0], 1); + lbl_1_bss_7FC[i]->work[2] = i; + } + for (i = 0; i < 4; i++) { + Hu3DAnmNoSet(lbl_1_bss_7FC[i]->work[0], lbl_1_bss_7FC[i]->work[1]); + } +} + +void fn_1_DD84(void) { + s32 i; + + for (i = 0; i < 4; i++) { + if (i != 0) { + Hu3DModelKill(lbl_1_bss_7FC[i]->model[0]); + } else { + BoardModelVisibilitySet(lbl_1_bss_6C4[19], 0); + Hu3DAnimKill(lbl_1_bss_7FC[i]->work[0]); + } + Hu3DModelKill(lbl_1_bss_7FC[i]->model[1]); + omDelObjEx(boardObjMan, lbl_1_bss_7FC[i]); + } + if (lbl_1_bss_7A0) { + HuSprAnimKill(lbl_1_bss_7A0); + lbl_1_bss_7A0 = NULL; + } +} + +void fn_1_DE94(void) { + s32 i; + + BoardModelPosGet(lbl_1_bss_6C4[16], &lbl_1_bss_80C); + for (i = 0; i < 4; i++) { + lbl_1_bss_7FC[i]->func = fn_1_FED0; + } + lbl_1_bss_7F4 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_E2B8); + lbl_1_bss_7F8 = omAddObjEx(boardObjMan, 0x133, 0, 0, -1, fn_1_E44C); + lbl_1_bss_7F8->work[3] = rand8() % 200 + 10; + lbl_1_bss_7E4 = GWSystem.player_curr; + BoardPlayerPosGet(lbl_1_bss_7E4, &lbl_1_bss_7C4); + lbl_1_bss_7EC = 1.0f; + lbl_1_bss_7E8 = 1.0f; + lbl_1_bss_7AA = 0; + lbl_1_bss_7BC = BoardPlayerMotionCreate(lbl_1_bss_7E4, lbl_1_data_F40[GWPlayer[lbl_1_bss_7E4].character]); + lbl_1_bss_7B8 = BoardPlayerMotionCreate(lbl_1_bss_7E4, lbl_1_data_F60[GWPlayer[lbl_1_bss_7E4].character]); + lbl_1_bss_7A0 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0)); + HuSprAnimLock(lbl_1_bss_7A0); + lbl_1_bss_7B4 = 0; +} + +static void fn_1_E100(void) { + lbl_1_bss_7AA = 1; + BoardMGExit(); + HuAudFXPlay(0x40F); + BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0x40000004); +} + +static void fn_1_E154(void) { + fn_1_DD84(); + BoardPlayerMotionKill(lbl_1_bss_7E4, lbl_1_bss_7BC); + BoardPlayerMotionKill(lbl_1_bss_7E4, lbl_1_bss_7B8); + BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0); + BoardMGDoneFlagSet(0); +} + +static void fn_1_E2B8(omObjData *arg0) { + if (lbl_1_bss_7AA == 1 && BoardMGDoneFlagGet() == 1) { + fn_1_E154(); + omDelObjEx(HuPrcCurrentGet(), arg0); + } +} + +static char *lbl_1_data_F9C[] = { + "uma1", "uma2", "uma3", "uma4" +}; + +static void fn_1_E44C(omObjData *arg0) { + Vec sp18; + Vec spC; + float temp_f27; + float var_f29; + float temp_f28; + float var_f26; + float var_f24; + s32 i; + + temp_f28 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]); + var_f29 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]); + if (var_f29 >= temp_f28) { + var_f29 -= temp_f28; + } + var_f24 = fmod(var_f29, temp_f28 / 4); + if (var_f24 >= temp_f28 / 4 - 30.0f && lbl_1_bss_7B4 == 0) { + lbl_1_bss_7B4 = 1; + lbl_1_bss_7A8 = 90; + } + if (lbl_1_bss_7B4 != 0) { + lbl_1_bss_7EC *= 0.97f; + lbl_1_bss_7A8--; + } + if (lbl_1_bss_7EC != 1.0f && lbl_1_bss_7A8 == 0) { + lbl_1_bss_7EC = 0.0f; + BoardAudSeqPause(0, 1, 1000); + BoardPlayerPosGet(lbl_1_bss_7E4, &sp18); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[0], &spC); + var_f26 = PSVECSquareDistance(&sp18, &spC); + arg0->work[2] = 0; + for (i = 1; i < 4; i++) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[i], &spC); + temp_f27 = PSVECSquareDistance(&sp18, &spC); + if (temp_f27 < var_f26) { + var_f26 = temp_f27; + arg0->work[2] = i; + } + } + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[arg0->work[2]], &lbl_1_bss_7D8); + PSVECSubtract(&lbl_1_bss_7D8, &sp18, &spC); + PSVECNormalize(&spC, &spC); + arg0->trans.x = spC.x; + arg0->trans.y = spC.y; + arg0->trans.z = spC.z; + arg0->rot.x = sqrtf((lbl_1_bss_7D8.x - sp18.x) * (lbl_1_bss_7D8.x - sp18.x) + (lbl_1_bss_7D8.z - sp18.z) * (lbl_1_bss_7D8.z - sp18.z)); + arg0->rot.y = 10.0f; + arg0->rot.z = sp18.y; + arg0->scale.x = 0.0f; + BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 4, 0.0f, 5.0f, 0); + arg0->func = fn_1_E914; + } + BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], lbl_1_bss_7EC); +} + +static void fn_1_E914(omObjData *arg0) { + Vec spC; + s32 i; + + BoardPlayerPosGet(lbl_1_bss_7E4, &spC); + spC.x += arg0->trans.x * arg0->rot.x / 32.760002f; + spC.z += arg0->trans.z * arg0->rot.x / 32.760002f; + spC.y += arg0->rot.y - 0.016666668f * arg0->scale.x * arg0->scale.x; + arg0->scale.x += 1.0f; + if (sqrtf((lbl_1_bss_7D8.x - spC.x) * (lbl_1_bss_7D8.x - spC.x) + (lbl_1_bss_7D8.z - spC.z) * (lbl_1_bss_7D8.z - spC.z)) < 2.0f) { + spC = lbl_1_bss_7D8; + BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, fn_1_10BB0(arg0->work[2]), 0.0f); + lbl_1_bss_7EC = 0.05f; + lbl_1_bss_7E8 = 0.05f; + BoardModelAttrReset(lbl_1_bss_6C4[18], 0x40000002); + BoardModelAttrSet(lbl_1_bss_6C4[18], 0x40000001); + BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], 0.0f); + for (i = 0; i < 4; i++) { + lbl_1_bss_7FC[i]->func = fn_1_FED0; + } + BoardPlayerMotionShiftSet(lbl_1_bss_7E4, lbl_1_bss_7B8, 0.0f, 5.0f, 0x40000001); + lbl_1_bss_7D6 = MGSeqCreate(3, 0); + BoardMusStart(1, 0xE, 0x7F, 0); + arg0->func = fn_1_ECD4; + } + BoardPlayerPosSetV(lbl_1_bss_7E4, &spC); +} + +static void fn_1_ECD4(omObjData *arg0) { + lbl_1_bss_7EC *= 1.05f; + lbl_1_bss_7E8 *= 1.05f; + if (lbl_1_bss_7EC > 2.0f) { + lbl_1_bss_7EC = 2.0f; + } + if (lbl_1_bss_7E8 > 4.0f) { + lbl_1_bss_7E8 = 4.0f; + } + if (MGSeqStatGet(lbl_1_bss_7D6) == 0) { + lbl_1_bss_7EC = 2.0f; + lbl_1_bss_7E8 = 4.0f; + arg0->func = fn_1_EED8; + lbl_1_bss_7D2 = 5; + lbl_1_bss_7D0 = 60; + lbl_1_bss_7D4 = MGSeqCreate(1, lbl_1_bss_7D2, 0x120, 0x40); + } + BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], lbl_1_bss_7EC); + BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], lbl_1_bss_7E8); + fn_1_10CF0(arg0->work[2]); +} + +static void fn_1_EEA0(omObjData *arg0, u16 *arg1) { + *arg1 = 0; + if (arg0->work[3] != 0) { + arg0->work[3]--; + } else { + *arg1 |= 0x100; + } +} + +static void fn_1_EED8(omObjData *arg0) { + s16 temp_r29; + u16 var_r30; + + fn_1_10CF0(arg0->work[2]); + temp_r29 = GWPlayer[lbl_1_bss_7E4].port; + if ((lbl_1_bss_7D0 -= 1) == 0) { + if ((lbl_1_bss_7D2 -= 1) >= 0) { + MGSeqParamSet(lbl_1_bss_7D4, 1, lbl_1_bss_7D2); + } + lbl_1_bss_7D0 = 60; + } + if (GWPlayerCfg[lbl_1_bss_7E4].iscom == 1) { + fn_1_EEA0(arg0, &var_r30); + } else { + var_r30 = HuPadBtnDown[temp_r29]; + } + if (lbl_1_bss_7D2 < 0 || (var_r30 & 0x100)) { + BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], 0.0f); + MGSeqParamSet(lbl_1_bss_7D4, 2, -1); + arg0->scale.y = 0.0f; + arg0->func = fn_1_F09C; + } +} + +static void fn_1_F09C(omObjData *arg0) { + float temp_f31; + float var_f30; + + temp_f31 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]); + arg0->scale.y += lbl_1_bss_7E8; + if (arg0->scale.y >= temp_f31 - 150.0f) { + lbl_1_bss_7E8 *= 0.9745f; + if (lbl_1_bss_7E8 < 0.08f) { + lbl_1_bss_7E8 = 0.08f; + } + } + BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], lbl_1_bss_7E8); + if (arg0->scale.y >= temp_f31) { + BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], 0.0f); + var_f30 = arg0->scale.y - temp_f31 + BoardModelMotionTimeGet(lbl_1_bss_6C4[18]); + if (var_f30 > temp_f31) { + var_f30 -= temp_f31; + } + BoardModelMotionTimeSet(lbl_1_bss_6C4[18], var_f30); + arg0->work[0] = fn_1_1001C(arg0->work[2]); + BoardModelVisibilitySet(lbl_1_bss_6C4[20], 1); + BoardModelPosSet(lbl_1_bss_6C4[20], lbl_1_bss_7FC[arg0->work[0]]->trans.x, lbl_1_bss_7FC[arg0->work[0]]->trans.y + 1.0f, lbl_1_bss_7FC[arg0->work[0]]->trans.z); + BoardModelRotSet(lbl_1_bss_6C4[20], lbl_1_bss_7FC[arg0->work[0]]->rot.x, lbl_1_bss_7FC[arg0->work[0]]->rot.y + 1.0f, lbl_1_bss_7FC[arg0->work[0]]->rot.z); + arg0->work[1] = 60; + BoardAudSeqFadeOut(1, 100); + arg0->func = fn_1_F348; + HuAudFXPlay(0x40A); + } +} + +static void fn_1_F348(omObjData *arg0) { + if ((arg0->work[1] / 4) & 1) { + BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0); + } else { + BoardModelVisibilitySet(lbl_1_bss_6C4[20], 1); + } + if ((arg0->work[1] -= 1) == 0) { + BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0); + fn_1_101B8(arg0->work[0]); + HuAudFXPlay(0x310); + arg0->func = fn_1_F3F8; + } +} + +static void fn_1_F3F8(omObjData *arg0) { + Vec sp18; + Vec spC; + + if (lbl_1_bss_7F0->work[0] != 1) { + return; + } + BoardPlayerPosGet(lbl_1_bss_7E4, &sp18); + PSVECSubtract(&lbl_1_bss_7C4, &sp18, &spC); + PSVECNormalize(&spC, &spC); + arg0->trans.x = spC.x; + arg0->trans.y = spC.y; + arg0->trans.z = spC.z; + arg0->rot.x = sqrtf((lbl_1_bss_7C4.x - sp18.x) * (lbl_1_bss_7C4.x - sp18.x) + (lbl_1_bss_7C4.z - sp18.z) * (lbl_1_bss_7C4.z - sp18.z)); + arg0->scale.y = 20.0f + 40.0f * (arg0->rot.x / 445.0f); + arg0->rot.y = 0.016666668f * (arg0->scale.y / 2) * (arg0->scale.y / 2); + arg0->rot.z = sp18.y; + arg0->scale.x = 0.0f; + BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 4, 0.0f, 5.0f, 0); + PSVECSubtract(&lbl_1_bss_7C4, &sp18, &spC); + PSVECNormalize(&spC, &spC); + BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, fn_1_10EB8(&spC), 0.0f); + arg0->func = fn_1_F6E8; +} + +static void fn_1_F6E8(omObjData *arg0) { + Vec sp8; + + BoardPlayerPosGet(lbl_1_bss_7E4, &sp8); + sp8.x += arg0->trans.x * arg0->rot.x / arg0->scale.y; + sp8.z += arg0->trans.z * arg0->rot.x / arg0->scale.y; + sp8.y += arg0->rot.y - 0.016666668f * arg0->scale.x * arg0->scale.x; + arg0->scale.x += 1.0f; + if (sp8.y < lbl_1_bss_80C.y || arg0->scale.x >= arg0->scale.y) { + sp8.y = lbl_1_bss_80C.y; + BoardCameraMotionStart(BoardPlayerModelGet(lbl_1_bss_7E4), NULL, 700.0f, -1.0f); + BoardPlayerMotionStart(lbl_1_bss_7E4, 2, 0x40000001); + arg0->func = fn_1_F890; + } + BoardPlayerPosSetV(lbl_1_bss_7E4, &sp8); +} + +static void fn_1_F890(omObjData *arg0) { + Vec sp8; + + BoardPlayerRotGet(lbl_1_bss_7E4, &sp8); + if (sp8.y == 0.0f) { + BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 1, 0.0f, 10.0f, 0x40000001); + lbl_1_bss_7F0->work[0] = 0; + lbl_1_bss_7F0->func = fn_1_10820; + arg0->func = fn_1_FA1C; + } else if (sp8.y > 180.0f) { + if (360.0f - sp8.y < 3.0f) { + sp8.y = 0.0f; + } else { + sp8.y += 3.0f; + } + } else { + if (sp8.y < 3.0f) { + sp8.y = 0.0f; + } else { + sp8.y -= 3.0f; + } + } + BoardPlayerRotSetV(lbl_1_bss_7E4, &sp8); +} + +static void fn_1_FA1C(omObjData *arg0) { + if (lbl_1_bss_7F0->work[0] == 1) { + BoardPlayerMotionShiftSet(lbl_1_bss_7E4, lbl_1_bss_7BC, 0.0f, 10.0f, 0); + arg0->work[0] = 30; + lbl_1_bss_7A4 = HuAudSStreamPlay(2); + arg0->func = fn_1_FABC; + } +} + +static void fn_1_FABC(omObjData *arg0) { + Process *var_r30; + + if (arg0->work[0] == 0) { + if (HuAudSStreamStatGet(lbl_1_bss_7A4) == 0) { + var_r30 = HuPrcCreate(fn_1_FB58, 0x2004, 0x1000, 0); + var_r30->user_data = arg0; + BoardAudSeqPause(0, 0, 1000); + arg0->func = NULL; + } + } else { + arg0->work[0]--; + } +} + +static void fn_1_FB58(void) { + omObjData *temp_r31; + + BoardWinCreate(2, MAKE_MESSID(10, 6), 0); + BoardWinInsertMesSet(MAKE_MESSID(8, lbl_1_bss_7F0->work[1]), 0); + BoardWinWait(); + BoardWinKill(); + temp_r31 = HuPrcCurrentGet()->user_data; + BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 1, 0.0f, 10.0f, 0); + lbl_1_bss_7F0->work[0] = 0; + HuAudFXPlay(0x30D); + HuAudFXFadeOut(lbl_1_bss_7AC, 1000); + lbl_1_bss_7F0->func = fn_1_10AE8; + temp_r31->func = fn_1_FC3C; + HuPrcKill(NULL); + while (TRUE) { + HuPrcVSleep(); + } +} + +static void fn_1_FC3C(omObjData *arg0) { + Process *var_r31; + + if (lbl_1_bss_7F0->work[0] == 1) { + BoardPlayerItemAdd(lbl_1_bss_7E4, lbl_1_bss_7F0->work[1]); + omVibrate(lbl_1_bss_7E4, 12, 6, 6); + var_r31 = HuPrcCreate(fn_1_FCEC, 0x2004, 0x1000, 0); + var_r31->user_data = arg0; + arg0->func = NULL; + } +} + +static void fn_1_FCEC(void) { + omObjData *var_r31; + + BoardWinCreate(2, MAKE_MESSID(10, 7), 0); + BoardWinWait(); + BoardWinKill(); + var_r31 = HuPrcCurrentGet()->user_data; + var_r31->func = fn_1_FD3C; + HuPrcKill(NULL); + while (TRUE) { + HuPrcVSleep(); + } +} + +static void fn_1_FD3C(omObjData *arg0) { + BoardStatusShowSetAll(1); + BoardCameraTargetModelSet(lbl_1_bss_6C4[21]); + BoardCameraOffsetSet(0.0f, 0.0f, 0.0f); + BoardCameraXRotZoomSet(1200.0f, -45.0f); + BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], 1.0f); + Hu3DModelKill(lbl_1_bss_7F0->model[0]); + Hu3DModelKill(lbl_1_bss_7F0->model[1]); + Hu3DModelKill(lbl_1_bss_7F0->model[2]); + omDelObjEx(HuPrcCurrentGet(), lbl_1_bss_7F0); + arg0->func = fn_1_FE44; +} + +static void fn_1_FE44(omObjData *arg0) { + if (BoardStatusStopCheck(lbl_1_bss_7E4) && BoardCameraMotionIsDone()) { + lbl_1_bss_7AA = 1; + BoardMGExit(); + HuAudFXPlay(0x40F); + BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0x40000004); + arg0->func = NULL; + } +} + +static void fn_1_FED0(omObjData *arg0) { + float temp_f30; + float var_f31; + float var_f29; + + temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[18]); + var_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]); + var_f31 = 90.0f - 90.0f * arg0->work[2] + 360.0f * (temp_f30 / var_f29); + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + omSetRot(arg0, 0.0f, var_f31, 0.0f); +} + +static s16 fn_1_1001C(u32 arg0) { + float var_f29; + float var_f28; + float temp_f27; + float temp_f26; + float var_f31; + float var_f30; + + temp_f26 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]); + temp_f27 = 360.0f - 360.0f * (BoardModelMotionTimeGet(lbl_1_bss_6C4[18]) / temp_f26); + var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]); + var_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]); + var_f30 = var_f30 - (var_f29 / 4) * arg0; + if (var_f30 < 0.0f) { + var_f30 += var_f29; + } + var_f28 = 360.0f * (var_f30 / var_f29); + var_f31 = var_f28 - temp_f27; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + var_f31 /= 90.0f; + return var_f31; +} + +static void fn_1_101B8(s16 arg0) { + omObjData *var_r31; + float *var_r30; + float var_f27; + float temp_f26; + float temp_f30; + float temp_f29; + float temp_f28; + float var_f31; + + var_r31 = lbl_1_bss_7F0 = omAddObjEx(boardObjMan, 0x165, 3, 0, -1, fn_1_10664); + var_r31->model[0] = lbl_1_bss_7FC[arg0]->model[1]; + Hu3DModelAttrReset(var_r31->model[0], 1); + lbl_1_bss_7F0->work[1] = lbl_1_bss_7FC[arg0]->work[1]; + lbl_1_bss_7F0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 3 * sizeof(float), MEMORY_DEFAULT_NUM); + var_r30 = lbl_1_bss_7F0->data; + omSetRot(var_r31, 0.0f, 0.0f, 0.0f); + omSetSca(var_r31, 0.0f, 0.0f, 0.0f); + temp_f26 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]); + var_f27 = 360.0f - 360.0f * (BoardModelMotionTimeGet(lbl_1_bss_6C4[18]) / temp_f26); + var_f31 = 45.0f + var_f27 + 90.0f * arg0; + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + temp_f30 = lbl_1_bss_80C.x - 100.0 * cos(var_f31 * M_PI / 180.0); + temp_f28 = lbl_1_bss_80C.z - 100.0 * sin(var_f31 * M_PI / 180.0); + temp_f29 = lbl_1_bss_80C.y + 66.0f + 1.0f; + omSetTra(var_r31, temp_f30, temp_f29, temp_f28); + var_r31->work[0] = 0; + var_r30[0] = 0.1f; + var_r30[2] = 20.0f; + var_r30[1] = 0.0f; + var_r31->model[1] = Hu3DParticleCreate(lbl_1_bss_7A0, 200); + var_r31->model[2] = Hu3DParticleCreate(lbl_1_bss_7A0, 100); + Hu3DParticleHookSet(var_r31->model[1], fn_1_11064); + Hu3DParticleHookSet(var_r31->model[2], fn_1_11484); + Hu3DParticleColSet(var_r31->model[1], 0xFF, 0xFF, 0); + Hu3DParticleColSet(var_r31->model[2], 0xFF, 0xFF, 0); + Hu3DModelPosSet(var_r31->model[1], 0.0f, 0.0f, 0.0f); + Hu3DModelPosSet(var_r31->model[2], temp_f30, temp_f29, temp_f28); + Hu3DParticleBlendModeSet(var_r31->model[1], 1); + Hu3DParticleBlendModeSet(var_r31->model[2], 1); + Hu3DModelLayerSet(var_r31->model[1], 3); + Hu3DModelLayerSet(var_r31->model[2], 3); + lbl_1_bss_7AC = HuAudFXPlay(0x35F); +} + +static void fn_1_10664(omObjData *arg0) { + float *temp_r31; + float var_f31; + + temp_r31 = arg0->data; + var_f31 = temp_r31[0]; + if (arg0->work[0] == 0) { + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } else { + temp_r31[0] += 0.025f; + } + arg0->trans.y += temp_r31[2]; + temp_r31[2] -= 1.0f; + if (temp_r31[2] < 0.0f && arg0->trans.y < lbl_1_bss_80C.y + 66.0f + 1.0f + 90.0f) { + arg0->work[0] = 1; + } + omSetSca(arg0, var_f31, var_f31, var_f31); + } else { + arg0->trans.y += sin(temp_r31[1] * M_PI / 180.0); + temp_r31[1] += 4.0f; + if (temp_r31[1] >= 360.0f) { + temp_r31[1] -= 360.0f; + } + } +} + +static void fn_1_10820(omObjData *arg0) { + Vec sp24; + Vec sp18; + Vec spC; + float var_f28; + float *temp_r30; + + temp_r30 = arg0->data; + if (arg0->work[0] == 0) { + BoardPlayerPosGet(lbl_1_bss_7E4, &sp24); + sp18.x = arg0->trans.x; + sp18.y = 0.0f; + sp18.z = arg0->trans.z; + sp24.y = 0.0f; + PSVECSubtract(&sp24, &sp18, &spC); + PSVECNormalize(&spC, &spC); + var_f28 = sqrtf((sp24.x - sp18.x) * (sp24.x - sp18.x) + (sp24.z - sp18.z) * (sp24.z - sp18.z)); + if (var_f28 < 8.0f) { + arg0->trans.x = sp24.x; + arg0->trans.z = sp24.z; + arg0->work[0] = 1; + } else { + arg0->trans.x += 8.0f * spC.x; + arg0->trans.z += 8.0f * spC.z; + } + } + arg0->trans.y += sin(temp_r30[1] * M_PI / 180.0); + temp_r30[1] += 4.0f; + if (temp_r30[1] >= 360.0f) { + temp_r30[1] -= 360.0f; + } +} + +static void fn_1_10AE8(omObjData *arg0) { + float *temp_r31; + + temp_r31 = arg0->data; + if (arg0->work[0] == 0) { + temp_r31[0] -= 0.016666668f; + if (temp_r31[0] <= 0.0f) { + temp_r31[0] = 0.0f; + arg0->work[0] = 1; + HuAudFXStop(lbl_1_bss_7AC); + } + arg0->trans.y -= 2.1666667f; + } + omSetSca(arg0, temp_r31[0], temp_r31[0], temp_r31[0]); +} + +static float fn_1_10BB0(u32 arg0) { + float var_f30; + float temp_f29; + float var_f31; + + var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]); + temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]); + var_f30 = var_f30 - (temp_f29 / 4) * arg0; + if (var_f30 < 0.0f) { + var_f30 += temp_f29; + } + var_f31 = 180.0f + -360.0f * (var_f30 / temp_f29); + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + return var_f31; +} + +static void fn_1_10CF0(u32 arg0) { + float var_f30; + float temp_f29; + float var_f31; + float var_f28; + + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[arg0], &lbl_1_bss_7D8); + BoardPlayerPosSetV(lbl_1_bss_7E4, &lbl_1_bss_7D8); + var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]); + temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]); + var_f30 = var_f30 - (temp_f29 / 4) * arg0; + if (var_f30 < 0.0f) { + var_f30 += temp_f29; + } + var_f31 = 180.0f + -360.0f * (var_f30 / temp_f29); + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + var_f28 = var_f31; + BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, var_f28, 0.0f); +} + +static float fn_1_10EB8(Vec *arg0) { + float var_f31; + + if (arg0->x || arg0->z) { + if (arg0->x == 0.0f) { + if (arg0->z > 0.0f) { + return 0.0f; + } else { + return 180.0f; + } + } + if (arg0->z == 0.0f) { + if (arg0->x > 0.0f) { + return 90.0f; + } else { + return 270.0f; + } + } + var_f31 = 180.0 * (atan2(arg0->z, arg0->x) / M_PI); + if (arg0->z < 0.0f) { + var_f31 = 90.0f - var_f31; + } else { + var_f31 = 90.0f - var_f31; + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + } + return var_f31; + } + return -1.0f; +} + +static void fn_1_11064(ModelData *model, ParticleData *particle, Mtx matrix) { + HsfanimStruct01 *var_r31; + float temp_f30; + float temp_f29; + float temp_f31; + s32 var_r28; + s32 i; + + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + var_r31->unk40.a = 0; + var_r31->unk2C = 0.0f; + } + particle->unk_00 = 0; + } + temp_f31 = lbl_1_bss_7F0->scale.x; + for (i = 0; i < 30; i++) { + var_r31 = particle->unk_48; + for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + if (var_r31->unk2C == 0.0f) { + break; + } + } + if (var_r28 != particle->unk_30) { + temp_f30 = 0.003921569f * (frand() & 0xFF) * 360.0f; + temp_f29 = 0.003921569f * (frand() & 0xFF) * 70.0f * temp_f31; + var_r31->unk34.x = lbl_1_bss_7F0->trans.x + temp_f29 * sin(temp_f30 * M_PI / 180.0); + var_r31->unk34.z = lbl_1_bss_7F0->trans.z + temp_f29 * cos(temp_f30 * M_PI / 180.0); + var_r31->unk34.y = lbl_1_bss_7F0->trans.y + temp_f31 * (-30.0f + 0.003921569f * (frand() & 0xFF) * 60.0f); + var_r31->unk08.x = 0.5f + 0.003921569f * (frand() & 0xFF) * 3.0f; + var_r31->unk08.y = 0.3f + 0.003921569f * (frand() & 0xFF) * 2.0f; + var_r31->unk40.a = 0xB4; + var_r31->unk2C = 15.0f * temp_f31; + } + } + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, var_r31++) { + if (var_r31->unk2C != 0.0f) { + var_r31->unk34.y -= var_r31->unk08.x; + var_r31->unk2C -= var_r31->unk08.y; + if (var_r31->unk2C <= 0.0f) { + var_r31->unk2C = 0.0f; + } + } + } +} + +static void fn_1_11484(ModelData *model, ParticleData *particle, Mtx matrix) { + HsfanimStruct01 *var_r31; + float temp_f29; + float temp_f30; + float temp_f31; + s32 var_r28; + s32 var_r29; + + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + var_r31->unk40.a = 0; + var_r31->unk2C = 0.0f; + } + particle->unk_00 = 0; + } + if (particle->unk_00 == 0) { + var_r31 = particle->unk_48; + for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + temp_f30 = 0.003921569f * (frand() & 0xFF) * 360.0f; + temp_f31 = 0.003921569f * (frand() & 0xFF) * 50.0f; + var_r31->unk08.x = temp_f31 * cos(temp_f30 * M_PI / 180.0); + var_r31->unk08.y = 2.0f + 0.003921569f * (frand() & 0xFF) * 4.0f; + var_r31->unk08.z = temp_f31 * sin(temp_f30 * M_PI / 180.0); + temp_f29 = 60.0f + 20.0f * (frand() & 0xFF) * 0.003921569f; + temp_f31 = 4.0f + 5.0f * (frand() & 0xFF) * 0.003921569f; + var_r31->unk14.x = temp_f31 * sin(temp_f30 * M_PI / 180.0) * cos(temp_f29 * M_PI / 180.0); + var_r31->unk14.y = temp_f31 * sin(temp_f29 * M_PI / 180.0); + var_r31->unk14.z = temp_f31 * cos(temp_f30 * M_PI / 180.0) * cos(temp_f29 * M_PI / 180.0); + var_r31->unk20 = 1.0f; + var_r31->unk40.a = 0xB4; + var_r31->unk2C = 9.0f + 0.003921569f * (frand() & 0xFF) * 4.0f; + } + particle->unk_00 = 1; + } + var_r31 = particle->unk_48; + for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + if (var_r31->unk2C != 0.0f) { + var_r31->unk34.x = var_r31->unk08.x + var_r31->unk14.x * var_r31->unk20; + var_r31->unk34.z = var_r31->unk08.z + var_r31->unk14.z * var_r31->unk20; + var_r31->unk34.y = var_r31->unk08.y + var_r31->unk14.y * var_r31->unk20 - 0.2f * var_r31->unk20 * var_r31->unk20; + var_r31->unk2C -= 0.25f; + var_r31->unk20 += 1.0f; + if (var_r31->unk2C <= 0.0f) { + var_r31->unk2C = 0.0f; + } + } + } +} diff --git a/src/REL/w03Dll/condor.c b/src/REL/w03Dll/condor.c index af07abe7..983d3752 100644 --- a/src/REL/w03Dll/condor.c +++ b/src/REL/w03Dll/condor.c @@ -206,7 +206,7 @@ s32 fn_1_3478(s32 arg0) { sp8.y = 0.0f; sp8.z = 0.0f; - BoardCameraMotionStartEx(lbl_1_data_310, &sp8, &sp14, 1900.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(lbl_1_data_310, &sp8, &sp14, 1900.0f, -1.0f, 21); temp_r28 = GWPlayer[arg0].space_curr; BoardPlayerPosGet(arg0, &sp2C); temp = BoardSpaceLinkFlagSearch(0, temp_r28, 0x02000000); @@ -392,7 +392,7 @@ void fn_1_3968(s32 arg0) { sp18.y = 180.0f; sp18.z = 0.0f; - BoardCameraMotionStartEx(lbl_1_data_310, &sp18, 0, 4000.0f, -1.0f, 0x150); + BoardCameraMotionStartEx(lbl_1_data_310, &sp18, NULL, 4000.0f, -1.0f, 336); for (var_r28 = 0, sp8 = 0; ; sp8++) { if (var_r28 == 0) { diff --git a/src/REL/w03Dll/mg_coin.c b/src/REL/w03Dll/mg_coin.c index 3015eba5..e9238dc7 100644 --- a/src/REL/w03Dll/mg_coin.c +++ b/src/REL/w03Dll/mg_coin.c @@ -162,7 +162,7 @@ s32 fn_1_7D18(s32 arg0) { sp8.y = 0.0f; sp8.z = 0.0f; - BoardCameraMotionStartEx(lbl_1_bss_C[7], &sp8, &sp14, 1500.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(lbl_1_bss_C[7], &sp8, &sp14, 1500.0f, -1.0f, 21); space = GWPlayer[arg0].space_curr; temp_r28 = BoardSpaceLinkFlagSearch(0, space, 0x02000000); BoardPlayerPosGet(arg0, &sp2C); @@ -400,7 +400,7 @@ void fn_1_8698(omObjData* arg0, someBits3* arg1) { arg0->rot.y = 16.666666f * arg0->rot.x; arg0->scale.x = BoardModelMotionMaxTimeGet(lbl_1_bss_C[7]); HuWinDispOff(lbl_1_data_454); - BoardCameraMotionStartEx(-1, 0, 0, 1900.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(-1, NULL, NULL, 1900.0f, -1.0f, 21); return; } diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index 4a958585..ad3ed8e1 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -241,7 +241,7 @@ s32 fn_1_9CF4(s32 arg0) { sp8.y = 0.0f; sp8.z = 0.0f; - BoardCameraMotionStartEx(lbl_1_bss_C[8], &sp8, &sp14, 1500.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(lbl_1_bss_C[8], &sp8, &sp14, 1500.0f, -1.0f, 21); spaceCur = GWPlayer[arg0].space_curr; temp_r29 = BoardSpaceLinkFlagSearch(0, spaceCur, 0x02000000); BoardPlayerPosGet(arg0, &sp2C); diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index 4565ab68..da943a80 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -165,7 +165,7 @@ s32 fn_1_1650(s32 arg0) { sp8.x = -20.0f; sp8.y = 0.0f; sp8.z = 0.0f; - BoardCameraMotionStartEx(lbl_1_bss_6C, &sp8, &sp14, 1360.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(lbl_1_bss_6C, &sp8, &sp14, 1360.0f, -1.0f, 21); BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 0x28); while (GWPlayer[arg0].moving) { @@ -471,9 +471,9 @@ void fn_1_20E0(s32 arg0) { fn_1_2AC0(); for (i = 0; i < 3; i++) { - BoardCameraMotionStartEx(-1, NULL, 0, 680.0f, -1.0f, 13); + BoardCameraMotionStartEx(-1, NULL, NULL, 680.0f, -1.0f, 13); BoardCameraMotionWait(); - BoardCameraMotionStartEx(-1, NULL, 0, 1360.0f, -1.0f, 13); + BoardCameraMotionStartEx(-1, NULL, NULL, 1360.0f, -1.0f, 13); BoardCameraMotionWait(); } @@ -498,7 +498,7 @@ void fn_1_20E0(s32 arg0) { sp18.x = -20.0f; sp18.y = 0.0f; sp18.z = 0.0f; - BoardCameraMotionStartEx(lbl_1_bss_C[1], &sp18, &sp24, 3000.0f, -1.0f, 0x3C); + BoardCameraMotionStartEx(lbl_1_bss_C[1], &sp18, &sp24, 3000.0f, -1.0f, 60); BoardCameraMotionWait(); omVibrate(arg0, 0x1E, 6, 6); HuPrcSleep(0x1E); @@ -526,7 +526,7 @@ void fn_1_20E0(s32 arg0) { sp18.x = -20.0f; sp18.y = 0.0f; sp18.z = 0.0f; - BoardCameraMotionStartEx(lbl_1_bss_6C, &sp18, &sp24, 1360.0f, -1.0f, 0x3C); + BoardCameraMotionStartEx(lbl_1_bss_6C, &sp18, &sp24, 1360.0f, -1.0f, 60); BoardCameraMotionWait(); HuPrcSleep(0x3C); } diff --git a/src/game/board/item.c b/src/game/board/item.c index df42dc9a..0d68d60e 100755 --- a/src/game/board/item.c +++ b/src/game/board/item.c @@ -1303,7 +1303,7 @@ static void ExecItemLight(void) { HuAudFXPlay(0x350); ItemShowProc(NULL, NULL); - BoardWinCreateChoice(2, DATA_MAKE_NUM(DATADIR_EFFECT, 15), -1, 0); + BoardWinCreateChoice(2, MAKE_MESSID(18, 15), -1, 0); BoardWinInsertMesSet(MAKE_MESSID(8, 8), 3); if (GWPlayer[currItemRestore].com) { BoardComKeySetRight(); @@ -1800,7 +1800,7 @@ static void ExecItemBooBall(void) { sp68.x = 0.0f; sp68.y = 0.0f; sp68.z = 0.0f; - BoardCameraMotionStartEx(suitMdl, 0, &sp68, 325.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(suitMdl, NULL, &sp68, 325.0f, -1.0f, 21); BoardBooStealMain(); BoardCameraViewSet(2); BoardCameraMotionWait(); @@ -1852,7 +1852,7 @@ static void ExecItemBooBall(void) { sp68.x = 0.0f; sp68.y = 0.0f; sp68.z = 0.0f; - BoardCameraMotionStartEx(suitMdl, 0, &sp68, 325.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(suitMdl, NULL, &sp68, 325.0f, -1.0f, 21); BoardBooStealMain(); var_r29 = BoardBooStealLightCheck(); BoardCameraViewSet(2); diff --git a/src/game/board/lottery.c b/src/game/board/lottery.c index 937ba7c6..d417f8bc 100755 --- a/src/game/board/lottery.c +++ b/src/game/board/lottery.c @@ -525,7 +525,7 @@ static void ExecLottery(void) { sp8.x = 0.0f; sp8.y = 200.0f; sp8.z = 0.0f; - BoardCameraMotionStartEx(lotteryMdl[0], &sp14, &sp8, 1300.0f, -1.0f, 0x1B); + BoardCameraMotionStartEx(lotteryMdl[0], &sp14, &sp8, 1300.0f, -1.0f, 27); if (BoardPlayerSizeGet(temp_r31) == 1) { BoardModelVisibilitySet(lotteryMdl[3], 1); } @@ -890,7 +890,7 @@ static void ExecBallGame(void) { sp4C.x = 0.0f; sp4C.y = 210.0f; sp4C.z = 0.0f; - BoardCameraMotionStartEx(lotteryMdl[0], NULL, &sp4C, 980.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(lotteryMdl[0], NULL, &sp4C, 980.0f, -1.0f, 21); LotteryInlineFunc00(0, 0); BoardCameraMotionWait(); BoardWinCreate(2, lotteryMessBase + 1, BoardWinPortraitGet()); @@ -1836,7 +1836,7 @@ static void ExecPrize(void) { sp14.x = 0.0f; sp14.y = 200.0f; sp14.z = 0.0f; - BoardCameraMotionStartEx(lotteryMdl[0], 0, &sp14, 1300.0f, -1.0f, 21); + BoardCameraMotionStartEx(lotteryMdl[0], NULL, &sp14, 1300.0f, -1.0f, 21); temp_r30 = GWSystem.player_curr; BoardStatusShowSetForce(temp_r30); BoardStatusShowSet(temp_r30, 1); @@ -2039,7 +2039,7 @@ void BoardLotteryTutorialExec(void) { sp8.x = 0.0f; sp8.y = 200.0f; sp8.z = 0.0f; - BoardCameraMotionStartEx(lotteryMdl[0], &sp14, &sp8, 1300.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(lotteryMdl[0], &sp14, &sp8, 1300.0f, -1.0f, 21); HuAudFXPlay(0x331); HuAudFXPlay(0x344); BoardModelMotionStart(lotteryMdl[0], 0, 0); diff --git a/src/game/board/main.c b/src/game/board/main.c index 2d1249ff..5f89b9a2 100644 --- a/src/game/board/main.c +++ b/src/game/board/main.c @@ -1059,7 +1059,7 @@ void BoardCameraNearFarGet(float *near, float *far) void BoardCameraMotionStart(s16 model_target, Vec *rot_target, float zoom_target, float fov_target) { - BoardCameraMotionStartEx(model_target, rot_target, 0, zoom_target, fov_target, 21); + BoardCameraMotionStartEx(model_target, rot_target, NULL, zoom_target, fov_target, 21); } void BoardCameraMotionStartEx(s16 model_target, Vec *rot_target, Vec *offset_end, float zoom_target, float fov_target, s16 max_time) diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index 7a1a8ad8..97442928 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -175,7 +175,7 @@ static void ExecMGSetup(void) { sp54.x = 0.0f; sp54.y = 150.0f; sp54.z = 0.0f; - BoardCameraMotionStartEx(-1, NULL, &sp54, 1300.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(-1, NULL, &sp54, 1300.0f, -1.0f, 21); BoardCameraMotionWait(); WipeCreate(1, 0, 0x15); diff --git a/src/game/board/shop.c b/src/game/board/shop.c index fb28fcda..71cc0b2f 100755 --- a/src/game/board/shop.c +++ b/src/game/board/shop.c @@ -269,7 +269,7 @@ static void ExecShop(void) { sp8.x = 0.0f; sp8.y = 170.0f; sp8.z = 0.0f; - BoardCameraMotionStartEx(shopMdlPtr[0], &sp14, &sp8, 1360.0f, -1.0f, 0x1B); + BoardCameraMotionStartEx(shopMdlPtr[0], &sp14, &sp8, 1360.0f, -1.0f, 27); HuAudFXPlay(0x330); HuAudFXPlay(0x32D); PopupShop(); @@ -1144,7 +1144,7 @@ void BoardShopTutorialExec(s32 arg0) { sp18.x = 0.0f; sp18.y = 170.0f; sp18.z = 0.0f; - BoardCameraMotionStartEx(shopMdlPtr[0], &sp24, &sp18, 1360.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(shopMdlPtr[0], &sp24, &sp18, 1360.0f, -1.0f, 21); HuAudFXPlay(0x330); HuAudFXPlay(0x32D); PopupShop(); diff --git a/src/game/board/star.c b/src/game/board/star.c index aab8fa90..d2613730 100755 --- a/src/game/board/star.c +++ b/src/game/board/star.c @@ -8,6 +8,7 @@ #include "game/hsfman.h" #include "game/msm.h" #include "game/objsub.h" +#include "game/window.h" #include "game/wipe.h" #include "game/board/audio.h" #include "game/board/com.h" @@ -72,27 +73,27 @@ static s16 starParman = -1; static s16 hostMdl = -1; const s32 lbl_8011E040[9] = { - 0x000C0000, - 0x000C0009, - 0x000C0012, - 0x000C001B, - 0x000C0024, - 0x000C002D, - 0x000C0000, - 0x000C0000, - 0x000C0000 + MAKE_MESSID(12, 0), + MAKE_MESSID(12, 9), + MAKE_MESSID(12, 18), + MAKE_MESSID(12, 27), + MAKE_MESSID(12, 36), + MAKE_MESSID(12, 45), + MAKE_MESSID(12, 0), + MAKE_MESSID(12, 0), + MAKE_MESSID(12, 0) }; const s32 lbl_8011E064[9][2] = { - { 0x00150022, 0x00150028 }, - { 0x00150023, 0x00150029 }, - { 0x00150024, 0x0015002A }, - { 0x00150025, 0x0015002B }, - { 0x00150026, 0x0015002C }, - { 0x00150027, 0x0015002D }, - { 0x00150022, 0x00150028 }, - { 0x00150022, 0x00150028 }, - { 0x00150022, 0x00150028 } + { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, + { MAKE_MESSID(21, 35), MAKE_MESSID(21, 41) }, + { MAKE_MESSID(21, 36), MAKE_MESSID(21, 42) }, + { MAKE_MESSID(21, 37), MAKE_MESSID(21, 43) }, + { MAKE_MESSID(21, 38), MAKE_MESSID(21, 44) }, + { MAKE_MESSID(21, 39), MAKE_MESSID(21, 45) }, + { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, + { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) }, + { MAKE_MESSID(21, 34), MAKE_MESSID(21, 40) } }; s32 boardStarSndTbl[] = { @@ -106,16 +107,13 @@ s32 boardStarSndTbl[] = { 0x000002E0 }; -static s32 hostMotTbl[][2] = { - { 0x00750021, 0x0007009D }, - { 0x00760007, 0x0007009E }, - { 0x0077001F, 0x0007009F }, - { 0x0078000B, 0x000700A0 }, - { 0x00790009, 0x000700A1 }, - { 0x007A0015, 0x000700A2 }, - { 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000 }, - { 0x00000000, 0x00000000 } +static s32 hostMotTbl[9][2] = { + { DATA_MAKE_NUM(DATADIR_W01, 33), DATA_MAKE_NUM(DATADIR_BOARD, 157) }, + { DATA_MAKE_NUM(DATADIR_W02, 7), DATA_MAKE_NUM(DATADIR_BOARD, 158) }, + { DATA_MAKE_NUM(DATADIR_W03, 31), DATA_MAKE_NUM(DATADIR_BOARD, 159) }, + { DATA_MAKE_NUM(DATADIR_W04, 11), DATA_MAKE_NUM(DATADIR_BOARD, 160) }, + { DATA_MAKE_NUM(DATADIR_W05, 9), DATA_MAKE_NUM(DATADIR_BOARD, 161) }, + { DATA_MAKE_NUM(DATADIR_W06, 21), DATA_MAKE_NUM(DATADIR_BOARD, 162) } }; static HsfanimStruct00 starEffParam = { @@ -219,9 +217,9 @@ static void ExecStar(void) { var_f28 = BoardDAngleCalc(temp_f30 - temp_f29); } if (var_f28 > 90.0f) { - var_r25 = 0x1E; + var_r25 = 30; } else { - var_r25 = 0xF; + var_r25 = 15; } BoardPlayerMotBlendSet(temp_r31, temp_f30, var_r25); temp_f27 = BoardModelRotYGet(temp_r30); @@ -340,9 +338,9 @@ block_A: } _SetFlag(0x10017); BoardModelMotionShiftSet(temp_r30, hostMot[0], 0.0f, 10.0f, 0); - HuPrcSleep(0x1E); + HuPrcSleep(30); starDoneF = 1; - BoardAudSeqFadeOut(0, 0x3E8); + BoardAudSeqFadeOut(0, 1000); BoardModelPosGet(temp_r30, &sp24); sp24.y += 130.0f; BoardStarGive(temp_r31, &sp24); @@ -438,7 +436,7 @@ static void UpdateStarAngle(GiveStarWork *arg0, omObjData *arg1) { if (arg0->unk02 < 16.0f) { arg0->unk02 += 2.0f; if (arg0->unk02 > 16.0f) { - arg0->unk02 = 0x10; + arg0->unk02 = 16; } } OSs8tof32(&arg0->unk02, &var_f31); @@ -472,7 +470,7 @@ static void MoveGiveStar(GiveStarWork *arg0, omObjData *arg1) { BoardPlayerPosGet(arg0->unk00_field3, &sp8); if (arg0->unk00_field2 == 0) { if (BoardModelMotionTimeGet(arg0->unk0C) >= 50.0f) { - BoardModelMotionStartEndSet(arg0->unk0C, 0x32, 0x96); + BoardModelMotionStartEndSet(arg0->unk0C, 50, 150); arg0->unk00_field2 = 1; } } @@ -520,7 +518,7 @@ static void ShrinkGiveStar(GiveStarWork *arg0, omObjData *arg1) { arg1->scale.y = arg1->scale.x; arg1->scale.z = arg1->scale.x; } else { - omVibrate(arg0->unk00_field3, 0xC, 0xC, 0); + omVibrate(arg0->unk00_field3, 12, 0xC, 0); arg0->unk00_field0 = 1; arg0->unk01 = 4; arg1->scale.x = arg1->scale.y = arg1->scale.z = 0.001f; @@ -542,7 +540,7 @@ static void InitGiveStarEffect(void) { s16 temp_r3; void *var_r30; - var_r30 = HuDataSelHeapReadNum(0x120001, MEMORY_DEFAULT_NUM, HEAP_DATA); + var_r30 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_EFFECT, 1), MEMORY_DEFAULT_NUM, HEAP_DATA); starEffAnim = HuSprAnimRead(var_r30); starParman = Hu3DParManCreate(starEffAnim, 0x64, &starEffParam); Hu3DParManAttrSet(starParman, 0x64); @@ -550,7 +548,7 @@ static void InitGiveStarEffect(void) { temp_r3 = Hu3DParManModelIDGet(starParman); Hu3DParticleBlendModeSet(temp_r3, 1); Hu3DModelLayerSet(temp_r3, 2); - HuDataDirClose(0x120000); + HuDataDirClose(DATADIR_EFFECT); } static void KillGiveStarEffect(void) { @@ -579,7 +577,7 @@ static inline void StarInlineFunc02(void) { GiveStarWork *temp_r29 = OM_GET_WORK_PTR(giveStarObj, GiveStarWork); temp_r29->unk00_field1 = 1; - temp_r29->unk04 = 0x2D; + temp_r29->unk04 = 45; temp_r29->unk08 = 0; temp_r29->unk01 = 2; } @@ -605,7 +603,7 @@ void BoardStarGive(s32 arg0, Vec *arg1) { temp_r31->unk06 = 0; temp_r31->unk02 = 0; temp_r31->unk08 = 0; - temp_r31->unk0C = BoardModelCreate(0x7000B, NULL, 0); + temp_r31->unk0C = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 11), NULL, 0); BoardModelVisibilitySet(temp_r31->unk0C, 0); BoardModelPassSet(temp_r31->unk0C, 0); BoardModelMotionSpeedSet(temp_r31->unk0C, 0.0f); @@ -628,7 +626,7 @@ void BoardStarGive(s32 arg0, Vec *arg1) { HuAudFXPlay(boardStarSndTbl[GWPlayer[arg0].character]); BoardPlayerStarsAdd(arg0, 1); HuAudFXPlay(8); - HuPrcSleep(0xA); + HuPrcSleep(10); if (_CheckFlag(0x1000B)) { BoardPlayerMotionEndWait(arg0); } else { @@ -665,12 +663,12 @@ void BoardStarShowNext(s32 arg0) { var_r26 = &wipeData; if (var_r26->mode == 0) { WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 0x15); + WipeCreate(2, 0, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } } else { - HuPrcSleep(0x12); + HuPrcSleep(18); } BoardStatusItemSet(0); if (GWBoardGet() == 5 && BoardRollTypeGet() != 9 && boardStarGiveHook) { @@ -729,7 +727,7 @@ void BoardStarShowNext(s32 arg0) { BoardCameraMotionWait(); BoardCameraMoveSet(1); HuPrcSleep(1); - WipeCreate(1, 0, 0x15); + WipeCreate(1, 0, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -744,7 +742,7 @@ void BoardStarShowNext(s32 arg0) { while (!BoardViewMoveCheck()) { HuPrcVSleep(); } - HuPrcSleep(0x1E); + HuPrcSleep(30); BoardWinKill(); HuPrcSleep(3); if (var_r28 == 0) { @@ -758,9 +756,9 @@ void BoardStarShowNext(s32 arg0) { if (GWBoardGet() == 5 && BoardRollTypeGet() != 9 && boardStarShowNextHook) { boardStarShowNextHook(); } - BoardAudSeqFadeOut(1, 0x3E8); + BoardAudSeqFadeOut(1, 1000); WipeColorSet(0, 0, 0); - WipeCreate(2, 0, 0x15); + WipeCreate(2, 0, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } @@ -776,7 +774,7 @@ void BoardStarShowNext(s32 arg0) { BoardCameraMotionWait(); BoardCameraMoveSet(1); BoardStatusItemSet(1); - WipeCreate(1, 0, 0x15); + WipeCreate(1, 0, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } diff --git a/src/game/board/start.c b/src/game/board/start.c index 0487136c..0f0ea6a7 100755 --- a/src/game/board/start.c +++ b/src/game/board/start.c @@ -293,7 +293,7 @@ static void FocusStart(void) { sp8.x = -22.0f; sp8.y = 0.0f; sp8.z = 0.0f; - BoardCameraMotionStartEx(camFocus, &sp8, 0, 1500.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(camFocus, &sp8, NULL, 1500.0f, -1.0f, 21); } static void CreatePlayerStart(void) { diff --git a/src/game/board/view.c b/src/game/board/view.c index ddc738a8..edbe9ccb 100755 --- a/src/game/board/view.c +++ b/src/game/board/view.c @@ -364,7 +364,7 @@ static void SetTargetView(void) { sp8.x = -45.0f; sp8.y = 0.0f; sp8.z = 0.0f; - BoardCameraMotionStartEx(focusMdl, &sp8, NULL, 3000.0f, -1.0f, 0x15); + BoardCameraMotionStartEx(focusMdl, &sp8, NULL, 3000.0f, -1.0f, 21); BoardCameraMotionWait(); } else { BoardModelPosSet(focusMdl, 0.0f, 0.0f, 0.0f); diff --git a/src/game/hsfanim.c b/src/game/hsfanim.c index 0c45106f..a04903fb 100755 --- a/src/game/hsfanim.c +++ b/src/game/hsfanim.c @@ -74,7 +74,7 @@ s16 Hu3DAnimCreate(void *arg0, s16 arg1, char *arg2) { var_r29 = temp_r27->attribute; for (i = var_r25 = 0; i < temp_r27->attributeCnt; i++, var_r29++) { if (strcmp(arg2, var_r29->bitmap->name) == 0) { - if (var_r29->unk04 == 0) { + if (!var_r29->unk04) { var_r30 = HuMemDirectMallocNum(HEAP_DATA, sizeof(HsfanimStruct01), (u32) Hu3DData[arg1].unk_48); var_r29->unk04 = var_r30; var_r30->unk00 = 0; @@ -92,7 +92,7 @@ s16 Hu3DAnimCreate(void *arg0, s16 arg1, char *arg2) { OSReport("Error: Not Found TexAnim Name\n"); return -1; } - if (arg0 == 0) { + if (!arg0) { var_r31->unk10 = NULL; } else { var_r31->unk10 = HuSprAnimRead(arg0); @@ -131,7 +131,7 @@ s16 Hu3DAnimLink(s16 arg0, s16 arg1, char *arg2) { var_r29 = temp_r27->attribute; for (i = var_r25 = 0; i < temp_r27->attributeCnt; i++, var_r29++) { if (strcmp(arg2, var_r29->bitmap->name) == 0) { - if (var_r29->unk04 == 0) { + if (!var_r29->unk04) { var_r30 = HuMemDirectMallocNum(HEAP_DATA, sizeof(HsfanimStruct01), (u32) Hu3DData[arg1].unk_48); var_r29->unk04 = var_r30; } else { @@ -234,7 +234,7 @@ void Hu3DAnimBankSet(s16 arg0, s32 arg1) { temp_r31->unk04 = temp_r31->unk08 = 0.0f; } -void Hu3DAnmNoSet(s16 arg0, s32 arg1) { +void Hu3DAnmNoSet(s16 arg0, u16 arg1) { Hu3DTexAnimDataStruct *temp_r31 = &Hu3DTexAnimData[arg0]; temp_r31->unk04 = arg1; @@ -378,7 +378,7 @@ s16 Hu3DTexScrollCreate(s16 arg0, char *arg1) { var_r29 = temp_r27->attribute; for (i = var_r25 = 0; i < temp_r27->attributeCnt; i++, var_r29++) { if (strcmp(arg1, var_r29->bitmap->name) == 0) { - if (var_r29->unk04 == 0) { + if (!var_r29->unk04) { var_r30 = HuMemDirectMallocNum(HEAP_DATA, sizeof(HsfanimStruct01), (u32) Hu3DData[arg0].unk_48); var_r29->unk04 = var_r30; var_r30->unk00 = 0; @@ -865,7 +865,7 @@ s16 Hu3DParManCreate(AnimData *arg0, s16 arg1, HsfanimStruct00 *arg2) { s16 var_r30; for (var_r30 = 0; var_r30 < 64; var_r30++) { - if (parManProc[var_r30] == 0) { + if (!parManProc[var_r30]) { break; } } @@ -907,7 +907,7 @@ s16 Hu3DParManLink(s16 arg0, HsfanimStruct00 *arg1) { s16 var_r30; for (var_r30 = 0; var_r30 < 64; var_r30++) { - if (parManProc[var_r30] == 0) { + if (!parManProc[var_r30]) { break; } } From cd8bacbe8667630da6fd03e64d217cd181927582 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 31 Mar 2024 21:34:19 -0500 Subject: [PATCH 104/106] Label map objects --- config/GMPE01_00/rels/w10Dll/symbols.txt | 6 +- include/REL/w01Dll.h | 6 +- include/REL/w03Dll.h | 11 +-- include/REL/w10Dll.h | 18 ++--- include/game/board/map_object.h | 13 ++++ src/REL/w01Dll/main.c | 94 ++++++++++++------------ src/REL/w03Dll/main.c | 49 ++++++------ src/REL/w03Dll/mg_item.c | 5 +- src/REL/w03Dll/statue.c | 4 +- src/REL/w10Dll/main.c | 67 +++++++++-------- src/REL/w10Dll/tutorial.c | 6 +- 11 files changed, 140 insertions(+), 139 deletions(-) create mode 100644 include/game/board/map_object.h diff --git a/config/GMPE01_00/rels/w10Dll/symbols.txt b/config/GMPE01_00/rels/w10Dll/symbols.txt index 896a61e1..ef3391a9 100644 --- a/config/GMPE01_00/rels/w10Dll/symbols.txt +++ b/config/GMPE01_00/rels/w10Dll/symbols.txt @@ -84,14 +84,14 @@ lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:f lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 scope:local data:double -lbl_1_data_0 = .data:0x00000000; // type:object size:0x28 data:float +mapObjTbl = .data:0x00000000; // type:object size:0x28 scope:local data:float bgMdl = .data:0x00000028; // type:object size:0x2 scope:local data:2byte fgMdl = .data:0x0000002A; // type:object size:0x2 scope:local data:2byte boardStarHostMdl = .data:0x0000002C; // type:object size:0x2 data:2byte boardShopHostMdl = .data:0x0000002E; // type:object size:0x2 data:2byte boardLotteryHostMdl = .data:0x00000030; // type:object size:0x2 data:2byte boardBooHouseHostMdl = .data:0x00000032; // type:object size:0x2 data:2byte -lbl_1_data_34 = .data:0x00000034; // type:object size:0x20 data:4byte +charMotDirTbl = .data:0x00000034; // type:object size:0x20 scope:local data:4byte starHostMot = .data:0x00000054; // type:object size:0x8 scope:local shopHostMot = .data:0x0000005C; // type:object size:0x8 scope:local lotteryHostMot = .data:0x00000064; // type:object size:0x8 scope:local @@ -105,7 +105,7 @@ lbl_1_data_258 = .data:0x00000258; // type:object size:0x50 scope:local data:str tutorialSprTbl = .data:0x000002A8; // type:object size:0x2C scope:local boardWork = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte -lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte +motTbl = .bss:0x00000008; // type:object size:0x4 scope:local data:4byte tutorialDoneF = .bss:0x0000000C; // type:object size:0x2 data:2byte w10ExitWin = .bss:0x0000000E; // type:object size:0x2 data:2byte lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x8 data:2byte diff --git a/include/REL/w01Dll.h b/include/REL/w01Dll.h index b8535e89..c4b99ff0 100755 --- a/include/REL/w01Dll.h +++ b/include/REL/w01Dll.h @@ -3,6 +3,10 @@ #include "dolphin/types.h" +enum { + MAPOBJ_MAX = 33 +}; + typedef struct { /* 0x00 */ struct { u8 unk00_field0 : 1; @@ -17,7 +21,7 @@ extern void fn_1_D740(s16 *arg0); extern void fn_1_DD84(void); extern void fn_1_DE94(void); -extern s16 lbl_1_bss_6C4[33]; +extern s16 lbl_1_bss_6C4[MAPOBJ_MAX]; extern UnkBoardDataStruct *lbl_1_bss_0; #endif diff --git a/include/REL/w03Dll.h b/include/REL/w03Dll.h index 8962d5e1..bce4bba4 100644 --- a/include/REL/w03Dll.h +++ b/include/REL/w03Dll.h @@ -7,12 +7,9 @@ #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) -typedef struct w03StructUnk0 { -/* 0x00 */ Vec unk_00; -/* 0x0C */ Vec unk_0C; -/* 0x18 */ Vec unk_18; -/* 0x24 */ s32 datanum; -} w03StructUnk0; +enum { + MAPOBJ_MAX = 12 +}; typedef struct w03UnkStruct2{ u8 unk0 : 1; @@ -29,4 +26,4 @@ typedef struct w03State { } w03State; extern w03State* lbl_1_bss_0; -extern s16 lbl_1_bss_C[14]; +extern s16 lbl_1_bss_C[MAPOBJ_MAX]; diff --git a/include/REL/w10Dll.h b/include/REL/w10Dll.h index b0c81b94..c2730003 100644 --- a/include/REL/w10Dll.h +++ b/include/REL/w10Dll.h @@ -4,7 +4,10 @@ #include "game/process.h" #include "game/window.h" -#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) +enum { + MAPOBJ_MELON = 0, + MAPOBJ_MAX, +}; typedef struct w10_board_work { /* 0x00 */ s32 scene; @@ -13,13 +16,6 @@ typedef struct w10_board_work { /* 0x08 */ s16 focus_mdl; } W10BoardWork; -typedef struct unkw10Dll { - Vec unk0; - Vec unk0C; - Vec unk18; - s32 unk24; -} unkw10Dll; //sizeof 0x28 - typedef void (*TutorialSceneFunc)(void); typedef struct tutorial_scene { @@ -83,11 +79,9 @@ void TutorialLotteryExec(void); void TutorialBooHouseExec(void); extern W10BoardWork *boardWork; -extern s16 lbl_1_bss_10[1]; -extern void* lbl_1_bss_8; //unknown type +extern s16 boardMapObjMdl[MAPOBJ_MAX]; extern s16 tutorialDoneF; -extern s16 w10ExitWin; -extern unkw10Dll lbl_1_data_0[1]; +extern s16 tutorialExitWin; extern s16 boardStarHostMdl; extern s16 boardShopHostMdl; diff --git a/include/game/board/map_object.h b/include/game/board/map_object.h new file mode 100644 index 00000000..11930878 --- /dev/null +++ b/include/game/board/map_object.h @@ -0,0 +1,13 @@ +#ifndef _BOARD_MAPOBJECT_H +#define _BOARD_MAPOBJECT_H + +#include "dolphin.h" + +typedef struct board_map_object { + Vec pos; + Vec rot; + Vec scale; + s32 data_num; +} BoardMapObject; + +#endif \ No newline at end of file diff --git a/src/REL/w01Dll/main.c b/src/REL/w01Dll/main.c index 93728c99..416acabf 100755 --- a/src/REL/w01Dll/main.c +++ b/src/REL/w01Dll/main.c @@ -26,17 +26,11 @@ #include "game/board/ui.h" #include "game/board/view.h" #include "game/board/window.h" +#include "game/board/map_object.h" #include "dolphin.h" #include "math.h" -typedef struct { - /* 0x00 */ Vec unk00; - /* 0x0C */ Vec unk0C; - /* 0x18 */ Vec unk18; - /* 0x24 */ s32 unk24; -} UnkW01Struct; // Size 0x28 - typedef struct { struct { u8 unk00_field0 : 1; @@ -168,7 +162,45 @@ static void fn_1_9920(omObjData *arg0); static void fn_1_9A24(Bss20Work *arg0); static void fn_1_9BBC(Bss20Work *arg0); + +static BoardMapObject lbl_1_data_0[33] = { + { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 8) }, + { { 0.0f, 700.0f, 300.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 9) }, + { { -2025.0f, 100.0f, 1950.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, + { { 1725.0f, 200.0f, -1650.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, + { { 2757.974f, 200.0f, -536.781f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, + { { -2750.0f, 300.0f, -2150.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 12) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 13) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 14) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 15) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 17) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 18) }, + { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 18) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 21) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 22) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 23) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 24) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 25) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 26) }, + { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 27) }, + { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 3) }, + { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 5) }, + { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 3) }, + { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, + { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 5) } +}; + s16 lbl_1_bss_6C4[33]; + static s32 *lbl_1_bss_6C0; static s16 lbl_1_bss_6B6[5]; static s8 lbl_1_bss_6B4; @@ -211,42 +243,6 @@ static Process *lbl_1_bss_8; static Process *lbl_1_bss_4; UnkBoardDataStruct *lbl_1_bss_0; -static UnkW01Struct lbl_1_data_0[33] = { - { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 8) }, - { { 0.0f, 700.0f, 300.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 9) }, - { { -2025.0f, 100.0f, 1950.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, - { { 1725.0f, 200.0f, -1650.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, - { { 2757.974f, 200.0f, -536.781f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, - { { -2750.0f, 300.0f, -2150.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, - { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 12) }, - { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 13) }, - { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 14) }, - { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 15) }, - { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) }, - { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) }, - { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 16) }, - { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 17) }, - { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 18) }, - { { -2550.0f, 300.0f, -2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 18) }, - { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 21) }, - { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 22) }, - { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 23) }, - { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 24) }, - { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 25) }, - { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 26) }, - { { 3000.0f, 200.0f, -450.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 27) }, - { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 3) }, - { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, - { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, - { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, - { { 1200.0f, 0.0f, 1200.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 5) }, - { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 3) }, - { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, - { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, - { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, - { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 5) } -}; - static s16 lbl_1_data_528 = -1; static s16 lbl_1_data_52A = -1; static s16 lbl_1_data_52C = -1; @@ -264,7 +260,7 @@ static s32 lbl_1_data_53C[] = { }; void BoardCreate(void) { - UnkW01Struct *temp_r30; + BoardMapObject *temp_r30; s32 sp8; s32 i; @@ -290,16 +286,16 @@ void BoardCreate(void) { BoardLightHookSet(fn_1_730, fn_1_774); for (i = 0; i < 33; i++) { temp_r30 = &lbl_1_data_0[i]; - if (temp_r30->unk24 != -1) { + if (temp_r30->data_num != -1) { if (i == 2 || i == 3 || i == 4 || i == 5) { lbl_1_bss_6C0 = lbl_1_data_53C; } else { lbl_1_bss_6C0 = NULL; } - lbl_1_bss_6C4[i] = BoardModelCreate(temp_r30->unk24, lbl_1_bss_6C0, 0); - BoardModelPosSetV(lbl_1_bss_6C4[i], &temp_r30->unk00); - BoardModelRotSetV(lbl_1_bss_6C4[i], &temp_r30->unk0C); - BoardModelScaleSetV(lbl_1_bss_6C4[i], &temp_r30->unk18); + lbl_1_bss_6C4[i] = BoardModelCreate(temp_r30->data_num, lbl_1_bss_6C0, 0); + BoardModelPosSetV(lbl_1_bss_6C4[i], &temp_r30->pos); + BoardModelRotSetV(lbl_1_bss_6C4[i], &temp_r30->rot); + BoardModelScaleSetV(lbl_1_bss_6C4[i], &temp_r30->scale); BoardModelVisibilitySet(lbl_1_bss_6C4[i], 1); } } diff --git a/src/REL/w03Dll/main.c b/src/REL/w03Dll/main.c index bfcaf2c4..a9141553 100644 --- a/src/REL/w03Dll/main.c +++ b/src/REL/w03Dll/main.c @@ -16,6 +16,8 @@ #include "game/board/star.h" #include "game/object.h" #include "game/board/player.h" +#include "game/board/map_object.h" + #include "math.h" #include "game/hsfman.h" @@ -37,20 +39,22 @@ typedef void (*VoidFunc)(void); extern const VoidFunc _ctors[]; extern const VoidFunc _dtors[]; -//data -w03StructUnk0 lbl_1_data_0[] = { -{{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0004)}, -{{145.0988f, 65.6173f, -2004.14f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0005)}, -{{-1548.14f, -1148.76f, -1095.54f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0006)}, -{{1050.0f, 50.0f, -1810.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x000B)}, -{{-1950.0f, 50.0f, 1790.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x000B)}, -{{1050.0f, 0.0f, -1750.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x000A)}, -{{-1950.0f, 0.0f, 1850.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x000A)}, -{{1950.0f, 0.0f, -1800.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0010)}, -{{-3150.0f, 0.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0011)}, -{{-3150.0f, 270.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 0x0012)}, -{{2080.0f, 0.0f, -1635.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_BGUEST, 0x000D)}, -{{-3000.0f, 0.0f, -500.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_BGUEST, 0x000D)}, +//Map Objects +s16 lbl_1_bss_C[MAPOBJ_MAX]; + +BoardMapObject lbl_1_data_0[MAPOBJ_MAX] = { + {{0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 4)}, + {{145.0988f, 65.6173f, -2004.14f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 5)}, + {{-1548.14f, -1148.76f, -1095.54f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 6)}, + {{1050.0f, 50.0f, -1810.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 11)}, + {{-1950.0f, 50.0f, 1790.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 11)}, + {{1050.0f, 0.0f, -1750.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 10)}, + {{-1950.0f, 0.0f, 1850.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 0.914f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 10)}, + {{1950.0f, 0.0f, -1800.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 16)}, + {{-3150.0f, 0.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 17)}, + {{-3150.0f, 270.0f, -600.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_W03, 18)}, + {{2080.0f, 0.0f, -1635.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_BGUEST, 13)}, + {{-3000.0f, 0.0f, -500.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(DATADIR_BGUEST, 13)}, }; s16 lbl_1_data_1E0 = -1; @@ -103,10 +107,7 @@ s32 lbl_1_data_26C[] = { 0x0000044C, 0x0000043A, 0x0000043A, 0x0000044E }; -s32 pad_27C[] = {0}; - //BSS -s16 lbl_1_bss_C[14]; s32 lbl_1_bss_8; omObjData* lbl_1_bss_4; w03State* lbl_1_bss_0; @@ -119,7 +120,7 @@ void BoardCreate(void) { f32 var_f31; s32 var_r31; s32 var_r31_2; - w03StructUnk0* temp_r30; + BoardMapObject* temp_r30; s32 i; lbl_1_bss_0 = (w03State*)&GWSystem.board_data; @@ -149,18 +150,18 @@ void BoardCreate(void) { BoardModelPosSet(lbl_1_data_1E6, 0.0f, 0.0f, 0.0f); BoardModelMotionStart(lbl_1_data_1E6, 1, 0x40000001); - for (i = 0; i < ARRAY_COUNT(lbl_1_data_0); i++) { + for (i = 0; i < MAPOBJ_MAX; i++) { temp_r30 = &lbl_1_data_0[i]; - if (temp_r30->datanum != -1) { + if (temp_r30->data_num != -1) { if ((i == 10) || (i == 11)) { var_r29 = lbl_1_data_214; } else { var_r29 = NULL; } - lbl_1_bss_C[i]= BoardModelCreate(temp_r30->datanum, var_r29, 0); - BoardModelPosSetV(lbl_1_bss_C[i], &temp_r30->unk_00); - BoardModelRotSetV(lbl_1_bss_C[i], &temp_r30->unk_0C); - BoardModelScaleSetV(lbl_1_bss_C[i], &temp_r30->unk_18); + lbl_1_bss_C[i]= BoardModelCreate(temp_r30->data_num, var_r29, 0); + BoardModelPosSetV(lbl_1_bss_C[i], &temp_r30->pos); + BoardModelRotSetV(lbl_1_bss_C[i], &temp_r30->rot); + BoardModelScaleSetV(lbl_1_bss_C[i], &temp_r30->scale); BoardModelVisibilitySet(lbl_1_bss_C[i], 1); } } diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index ad3ed8e1..ea7c19b3 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -17,6 +17,7 @@ #include "game/minigame_seq.h" #include "game/hsfdraw.h" #include "game/hsfmotion.h" +#include "game/pad.h" typedef struct someBits { /* 0x00 */ struct { @@ -56,9 +57,7 @@ typedef struct w03UnkMG { } w03UnkMG; //external symbols -extern Process *boardMainProc; -extern s16 lbl_1_bss_C[14]; -extern Process *boardObjMan; + extern u16 HuPadBtnDown[4]; //function signatures diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index da943a80..a26deec9 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -36,9 +36,7 @@ s16 lbl_1_data_286 = -1; s32 lbl_1_data_288 = -1; //BSS Extern -extern w03State* lbl_1_bss_0; -extern Process *boardMainProc; -extern s16 lbl_1_bss_C[14]; + //BSS s8 lbl_1_bss_6F; diff --git a/src/REL/w10Dll/main.c b/src/REL/w10Dll/main.c index 6386f591..a9eaff17 100644 --- a/src/REL/w10Dll/main.c +++ b/src/REL/w10Dll/main.c @@ -9,25 +9,25 @@ #include "game/board/tutorial.h" #include "game/board/main.h" #include "game/board/boo_house.h" +#include "game/board/map_object.h" #include "math.h" -//BSS -s16 lbl_1_bss_10[1]; -s16 w10ExitWin; -s16 tutorialDoneF; -void* lbl_1_bss_8; -s32 lbl_1_bss_4; -W10BoardWork *boardWork; - -//data -unkw10Dll lbl_1_data_0[1] = { +//Map Objects +static BoardMapObject mapObjTbl[MAPOBJ_MAX] = { 3300.0f, 100.0f, -900.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, DATA_MAKE_NUM(DATADIR_W10, 3) }; +s16 boardMapObjMdl[MAPOBJ_MAX]; + +s16 tutorialExitWin; +s16 tutorialDoneF; +static s32 *motTbl; +s32 lbl_1_bss_4; +W10BoardWork *boardWork; static s16 bgMdl = -1; static s16 fgMdl = -1; @@ -36,8 +36,7 @@ s16 boardShopHostMdl = -1; s16 boardLotteryHostMdl = -1; s16 boardBooHouseHostMdl = -1; -//unused? -s32 lbl_1_data_34[] = { +static s32 charMotDirTbl[] = { DATADIR_MARIOMOT, DATADIR_LUIGIMOT, DATADIR_PEACHMOT, DATADIR_YOSHIMOT, DATADIR_WARIOMOT, DATADIR_DONKEYMOT, @@ -76,7 +75,7 @@ void BoardCreate(void) float size[2]; s32 i; - unkw10Dll* temp_r30; + BoardMapObject *temp_r30; s32 space; s32 board; @@ -111,21 +110,21 @@ void BoardCreate(void) boardLotteryHostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 13), booHouseHostMot, 0); BoardModelMotionStart(boardLotteryHostMdl, 1, 0x40000001); BoardLightHookSet(LightSetHook, LightResetHook); - for (i = 0; i < ARRAY_COUNT(lbl_1_data_0); i++) { - temp_r30 = &lbl_1_data_0[i]; - if (temp_r30->unk24 != -1) { - lbl_1_bss_8 = NULL; - lbl_1_bss_10[i] = BoardModelCreate(temp_r30->unk24, lbl_1_bss_8, 0); - BoardModelPosSetV(lbl_1_bss_10[i], &temp_r30->unk0); - BoardModelRotSetV(lbl_1_bss_10[i], &temp_r30->unk0C); - BoardModelScaleSetV(lbl_1_bss_10[i], &temp_r30->unk18); - BoardModelVisibilitySet(lbl_1_bss_10[i], 1); - if (lbl_1_bss_8 != NULL) { - BoardModelMotionStart(lbl_1_bss_10[i], 0, 0x40000001); + for (i = 0; i < MAPOBJ_MAX; i++) { + temp_r30 = &mapObjTbl[i]; + if (temp_r30->data_num != -1) { + motTbl = NULL; + boardMapObjMdl[i] = BoardModelCreate(temp_r30->data_num, motTbl, 0); + BoardModelPosSetV(boardMapObjMdl[i], &temp_r30->pos); + BoardModelRotSetV(boardMapObjMdl[i], &temp_r30->rot); + BoardModelScaleSetV(boardMapObjMdl[i], &temp_r30->scale); + BoardModelVisibilitySet(boardMapObjMdl[i], 1); + if (motTbl != NULL) { + BoardModelMotionStart(boardMapObjMdl[i], 0, 0x40000001); } } } - BoardModelVisibilitySet(lbl_1_bss_10[0], 0); + BoardModelVisibilitySet(boardMapObjMdl[MAPOBJ_MELON], 0); boardWork->focus_mdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 0); BoardModelVisibilitySet(boardWork->focus_mdl, 0); BoardSpaceWalkEventFuncSet(WalkEvent); @@ -136,20 +135,20 @@ void BoardCreate(void) BoardShopHostSet(boardShopHostMdl); BoardLotteryHostSet(boardLotteryHostMdl); HuWinMesMaxSizeGet(1, size, 0x2E003A); - w10ExitWin = HuWinCreate(-10000.0f, 390.0f, size[0], size[1], 1); - HuWinMesSet(w10ExitWin, 0x2E003A); - HuWinMesSpeedSet(w10ExitWin, 0); - HuWinPriSet(w10ExitWin, 1); - HuWinMesPalSet(w10ExitWin, 7, 0, 0, 0); + tutorialExitWin = HuWinCreate(-10000.0f, 390.0f, size[0], size[1], 1); + HuWinMesSet(tutorialExitWin, 0x2E003A); + HuWinMesSpeedSet(tutorialExitWin, 0); + HuWinPriSet(tutorialExitWin, 1); + HuWinMesPalSet(tutorialExitWin, 7, 0, 0, 0); } void BoardDestroy(void) { s32 i; for (i = 0; i < 1; i++) { - if (lbl_1_bss_10[i] != 0) { - BoardModelKill(lbl_1_bss_10[i]); - lbl_1_bss_10[i] = 0; + if (boardMapObjMdl[i] != 0) { + BoardModelKill(boardMapObjMdl[i]); + boardMapObjMdl[i] = 0; } } if (boardBooHouseHostMdl != -1) { @@ -178,7 +177,7 @@ void BoardDestroy(void) } BoardModelKill(boardWork->focus_mdl); TutorialSprKill(); - HuWinKill(w10ExitWin); + HuWinKill(tutorialExitWin); BoardSpaceDestroy(); } diff --git a/src/REL/w10Dll/tutorial.c b/src/REL/w10Dll/tutorial.c index ca6cd09d..d282e3c1 100644 --- a/src/REL/w10Dll/tutorial.c +++ b/src/REL/w10Dll/tutorial.c @@ -8,16 +8,16 @@ static s16 sprList[11]; static s16 sprCurr; -void CloseTutorial(void) { +static void CloseTutorial(void) { s32 port; s32 i; if (tutorialDoneF == 0) { if (WipeStatGet() != 0) { - HuWinDispOff(w10ExitWin); + HuWinDispOff(tutorialExitWin); return; } - HuWinDispOn(w10ExitWin); + HuWinDispOn(tutorialExitWin); if (BoardIsKill() != 0) { return; } From aeb40550aadc0b6ac3ded14adc5315c47e60654a Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 31 Mar 2024 21:35:27 -0500 Subject: [PATCH 105/106] Use MAPOBJ_MAX in w01 --- src/REL/w01Dll/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/REL/w01Dll/main.c b/src/REL/w01Dll/main.c index 416acabf..6c7cf52f 100755 --- a/src/REL/w01Dll/main.c +++ b/src/REL/w01Dll/main.c @@ -163,7 +163,7 @@ static void fn_1_9A24(Bss20Work *arg0); static void fn_1_9BBC(Bss20Work *arg0); -static BoardMapObject lbl_1_data_0[33] = { +static BoardMapObject lbl_1_data_0[MAPOBJ_MAX] = { { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 8) }, { { 0.0f, 700.0f, 300.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 9) }, { { -2025.0f, 100.0f, 1950.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, @@ -199,7 +199,7 @@ static BoardMapObject lbl_1_data_0[33] = { { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 5) } }; -s16 lbl_1_bss_6C4[33]; +s16 lbl_1_bss_6C4[MAPOBJ_MAX]; static s32 *lbl_1_bss_6C0; static s16 lbl_1_bss_6B6[5]; @@ -284,7 +284,7 @@ void BoardCreate(void) { lbl_1_data_530 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 11), NULL, 0); BoardModelMotionStart(lbl_1_data_530, 0, 0x40000001); BoardLightHookSet(fn_1_730, fn_1_774); - for (i = 0; i < 33; i++) { + for (i = 0; i < MAPOBJ_MAX; i++) { temp_r30 = &lbl_1_data_0[i]; if (temp_r30->data_num != -1) { if (i == 2 || i == 3 || i == 4 || i == 5) { From bce4e4f2b9aadff4503686610eac5ce1a7eb9028 Mon Sep 17 00:00:00 2001 From: mrshigure Date: Mon, 1 Apr 2024 07:52:30 -0700 Subject: [PATCH 106/106] Matched REL/w06/main --- config/GMPE01_00/rels/w06Dll/symbols.txt | 56 ++-- config/GMPE01_00/rels/w10Dll/symbols.txt | 2 +- configure.py | 4 +- include/REL/w01Dll.h | 2 +- include/REL/w06Dll.h | 36 +++ src/REL/w06Dll/main.c | 325 +++++++++++++++++++++++ 6 files changed, 393 insertions(+), 32 deletions(-) create mode 100755 include/REL/w06Dll.h create mode 100755 src/REL/w06Dll/main.c diff --git a/config/GMPE01_00/rels/w06Dll/symbols.txt b/config/GMPE01_00/rels/w06Dll/symbols.txt index 6cea2169..d4839302 100644 --- a/config/GMPE01_00/rels/w06Dll/symbols.txt +++ b/config/GMPE01_00/rels/w06Dll/symbols.txt @@ -3,14 +3,14 @@ _prolog = .text:0x00000030; // type:function size:0x64 scope:global _epilog = .text:0x00000094; // type:function size:0x4C scope:global BoardCreate = .text:0x000000E0; // type:function size:0x4C4 BoardDestroy = .text:0x000005A4; // type:function size:0x18C -fn_1_730 = .text:0x00000730; // type:function size:0x6C -fn_1_79C = .text:0x0000079C; // type:function size:0x20 -fn_1_7BC = .text:0x000007BC; // type:function size:0x144 -fn_1_900 = .text:0x00000900; // type:function size:0x84 -fn_1_984 = .text:0x00000984; // type:function size:0x3C -fn_1_9C0 = .text:0x000009C0; // type:function size:0x168 -fn_1_B28 = .text:0x00000B28; // type:function size:0x34 -fn_1_B5C = .text:0x00000B5C; // type:function size:0x214 +fn_1_730 = .text:0x00000730; // type:function size:0x6C scope:local +fn_1_79C = .text:0x0000079C; // type:function size:0x20 scope:local +fn_1_7BC = .text:0x000007BC; // type:function size:0x144 scope:local +fn_1_900 = .text:0x00000900; // type:function size:0x84 scope:local +fn_1_984 = .text:0x00000984; // type:function size:0x3C scope:local +fn_1_9C0 = .text:0x000009C0; // type:function size:0x168 scope:local +fn_1_B28 = .text:0x00000B28; // type:function size:0x34 scope:local +fn_1_B5C = .text:0x00000B5C; // type:function size:0x214 scope:local fn_1_D70 = .text:0x00000D70; // type:function size:0x1FC fn_1_F6C = .text:0x00000F6C; // type:function size:0xE8 fn_1_1054 = .text:0x00001054; // type:function size:0x90 @@ -121,16 +121,16 @@ fn_1_CC90 = .text:0x0000CC90; // type:function size:0x7C fn_1_CD0C = .text:0x0000CD0C; // type:function size:0x398 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x8 data:4byte -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x8 data:4byte -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x8 scope:local data:4byte +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x8 scope:local data:4byte +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float @@ -268,14 +268,14 @@ lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x8 data:double lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0xF0 -lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x2 data:2byte -lbl_1_data_F2 = .data:0x000000F2; // type:object size:0x2 data:2byte -lbl_1_data_F4 = .data:0x000000F4; // type:object size:0x2 data:2byte -lbl_1_data_F6 = .data:0x000000F6; // type:object size:0x2 data:2byte -lbl_1_data_F8 = .data:0x000000F8; // type:object size:0x8 -lbl_1_data_100 = .data:0x00000100; // type:object size:0x8 -lbl_1_data_108 = .data:0x00000108; // type:object size:0xA0 +lbl_1_data_0 = .data:0x00000000; // type:object size:0xF0 scope:local +lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x2 scope:local data:2byte +lbl_1_data_F2 = .data:0x000000F2; // type:object size:0x2 scope:local data:2byte +lbl_1_data_F4 = .data:0x000000F4; // type:object size:0x2 scope:local data:2byte +lbl_1_data_F6 = .data:0x000000F6; // type:object size:0x2 scope:local data:2byte +lbl_1_data_F8 = .data:0x000000F8; // type:object size:0x8 scope:local +lbl_1_data_100 = .data:0x00000100; // type:object size:0x8 scope:local +lbl_1_data_108 = .data:0x00000108; // type:object size:0xA0 scope:local lbl_1_data_1A8 = .data:0x000001A8; // type:object size:0x2 data:2byte lbl_1_data_1AA = .data:0x000001AA; // type:object size:0x1 data:byte lbl_1_data_1AD = .data:0x000001AD; // type:object size:0x3 @@ -333,8 +333,8 @@ lbl_1_data_510 = .data:0x00000510; // type:object size:0x20 lbl_1_data_530 = .data:0x00000530; // type:object size:0x6 data:string lbl_1_data_536 = .data:0x00000536; // type:object size:0xB data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte -lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte +lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte +lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 scope:local data:4byte lbl_1_bss_C = .bss:0x0000000C; // type:object size:0xC data:2byte lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x1 data:byte diff --git a/config/GMPE01_00/rels/w10Dll/symbols.txt b/config/GMPE01_00/rels/w10Dll/symbols.txt index ef3391a9..b263cb2d 100644 --- a/config/GMPE01_00/rels/w10Dll/symbols.txt +++ b/config/GMPE01_00/rels/w10Dll/symbols.txt @@ -107,7 +107,7 @@ boardWork = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte motTbl = .bss:0x00000008; // type:object size:0x4 scope:local data:4byte tutorialDoneF = .bss:0x0000000C; // type:object size:0x2 data:2byte -w10ExitWin = .bss:0x0000000E; // type:object size:0x2 data:2byte +tutorialExitWin = .bss:0x0000000E; // type:object size:0x2 data:2byte lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x8 data:2byte hostProc = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte hostPos = .bss:0x0000001C; // type:object size:0x2 scope:local data:2byte diff --git a/configure.py b/configure.py index 6ca637cb..b134b594 100644 --- a/configure.py +++ b/configure.py @@ -1135,10 +1135,10 @@ config.libs = [ Object(NonMatching, "REL/w05Dll/mg_coin.c"), } ), - Rel('w05Dll', + Rel('w06Dll', objects = { Object(Matching, "REL/board_executor.c"), - Object(NonMatching, "REL/w06Dll/main.c"), + Object(Matching, "REL/w06Dll/main.c"), Object(NonMatching, "REL/w06Dll/mg_item.c"), Object(NonMatching, "REL/w06Dll/mg_coin.c"), Object(NonMatching, "REL/w06Dll/fire.c"), diff --git a/include/REL/w01Dll.h b/include/REL/w01Dll.h index c4b99ff0..f3e1e5d6 100755 --- a/include/REL/w01Dll.h +++ b/include/REL/w01Dll.h @@ -4,7 +4,7 @@ #include "dolphin/types.h" enum { - MAPOBJ_MAX = 33 + MAPOBJ_MAX = 33 }; typedef struct { diff --git a/include/REL/w06Dll.h b/include/REL/w06Dll.h new file mode 100755 index 00000000..ed13f799 --- /dev/null +++ b/include/REL/w06Dll.h @@ -0,0 +1,36 @@ +#ifndef REL_W06_H +#define REL_W06_H + +#include "dolphin/types.h" + +enum { + MAPOBJ_MAX = 6 +}; + +extern void fn_1_D70(void); +extern void fn_1_F6C(void); +extern void fn_1_1054(void); // return s32? + +extern void fn_1_4878(void); +extern void fn_1_4A10(void); +extern void fn_1_4A60(void); // return s32? + +extern void fn_1_6EF0(void); // return s32? + +extern void fn_1_7BB0(void); +extern void fn_1_7F3C(void); +extern void fn_1_8264(s32 arg0, s16 arg1); + +extern void fn_1_8F20(void); +extern void fn_1_91D8(void); +extern void fn_1_9294(s32 arg0, s32 arg1); +extern s32 fn_1_92D8(s32 arg0, s32 arg1); +extern void fn_1_C108(s32 arg0); +extern void fn_1_C2B4(void); +extern void fn_1_CC90(void); +extern void fn_1_CD0C(void); + +extern s16 lbl_1_bss_C[MAPOBJ_MAX]; +extern void *lbl_1_bss_0; + +#endif diff --git a/src/REL/w06Dll/main.c b/src/REL/w06Dll/main.c new file mode 100755 index 00000000..ed7eb0a7 --- /dev/null +++ b/src/REL/w06Dll/main.c @@ -0,0 +1,325 @@ +#include "REL/w06Dll.h" +#include "REL/board_executor.h" +#include "game/audio.h" +#include "game/data.h" +#include "game/flag.h" +#include "game/hsfman.h" +#include "game/object.h" +#include "game/process.h" +#include "game/board/boo_house.h" +#include "game/board/lottery.h" +#include "game/board/main.h" +#include "game/board/map_object.h" +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/shop.h" +#include "game/board/space.h" +#include "game/board/star.h" + +#include "dolphin.h" + +typedef struct { + struct { + u8 unk00_field0 : 1; + }; + s8 unk01[10]; +} Bss8Work; + +typedef struct { + /* 0x00 */ s32 unk00; + /* 0x04 */ Vec unk04; +} Data108Struct; // Size 0x10 + +static void fn_1_730(void); +static void fn_1_79C(void); +static s32 fn_1_7BC(void); +static s32 fn_1_900(void); +static s32 fn_1_984(void); +static void fn_1_9C0(void); +static void fn_1_B28(void); +static void fn_1_B5C(omObjData *arg0); + +s16 lbl_1_bss_C[MAPOBJ_MAX]; + +static BoardMapObject lbl_1_data_0[MAPOBJ_MAX] = { + { { 450.0f, 200.0f, -2950.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 6) }, + { { -1650.0f, 0.0f, 2100.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 8) }, + { { 2700.0f, 100.0f, -1950.0f }, { 0.0f, -89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 5) }, + { { -3000.0f, 0.0f, 2550.0f }, { 0.0f, 89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 5) }, + { { -1800.0f, 0.0f, 2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 33) }, + { { 300.0f, 200.0f, -2850.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 33) } +}; + +static omObjData *lbl_1_bss_8; +static s32 lbl_1_bss_4; +void *lbl_1_bss_0; + +static s16 lbl_1_data_F0 = -1; +static s16 lbl_1_data_F2 = -1; +static s16 lbl_1_data_F4 = -1; +static s16 lbl_1_data_F6 = -1; + +static s32 lbl_1_data_F8[] = { + DATA_MAKE_NUM(DATADIR_W06, 18), + -1 +}; + +static s32 lbl_1_data_100[] = { + DATA_MAKE_NUM(DATADIR_BGUEST, 34), + -1 +}; + +static Data108Struct lbl_1_data_108[] = { + 0x00000002, { -3359.9998f, 170.0f, -3559.9998f }, + 0x0000002A, { 3540.0002f, 170.0f, 1320.0f }, + 0x00000052, { -710.0f, 170.0f, -4580.0f }, + 0x0000007A, { -3670.0f, 170.0f, 1020.0f }, + 0x000000A2, { 1970.0001f, 170.0f, -3840.0002f }, + 0x000000CA, { -3160.0f, 170.0f, -3770.0f }, + 0x000000F2, { -3500.0f, 170.0f, -2340.0f }, + 0x0000011A, { -3700.0f, 170.0f, -810.00005f }, + 0x00000142, { 100.0f, 170.0f, -4100.0f }, + 0x0000016A, { 3290.0002f, 170.0f, -340.0f } +}; + +void BoardCreate(void) { + BoardMapObject *temp_r30; + s32 *var_r29; + s32 i; + + lbl_1_bss_0 = GWSystem.board_data; + BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W06, 0)); + lbl_1_data_F0 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 1), NULL, 0); + fn_8006DDE8(lbl_1_data_F0, -1.0f); + BoardModelMotionStart(lbl_1_data_F0, 0, 0x40000001); + lbl_1_data_F2 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 2), NULL, 0); + fn_8006DDE8(lbl_1_data_F2, -1.0f); + BoardModelPosSet(lbl_1_data_F2, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_F2, 0, 0x40000001); + lbl_1_data_F4 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 17), lbl_1_data_F8, 0); + BoardModelPosSet(lbl_1_data_F4, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_F4, 1, 0x40000001); + lbl_1_data_F6 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 33), lbl_1_data_100, 0); + BoardModelPosSet(lbl_1_data_F6, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_F6, 1, 0x40000001); + for (i = 0; i < MAPOBJ_MAX; i++) { + temp_r30 = &lbl_1_data_0[i]; + if (temp_r30->data_num != -1) { + if (i == 4 || i == 5) { + var_r29 = lbl_1_data_100; + } else { + var_r29 = NULL; + } + lbl_1_bss_C[i] = BoardModelCreate(temp_r30->data_num, var_r29, 0); + BoardModelPosSetV(lbl_1_bss_C[i], &temp_r30->pos); + BoardModelRotSetV(lbl_1_bss_C[i], &temp_r30->rot); + BoardModelScaleSetV(lbl_1_bss_C[i], &temp_r30->scale); + BoardModelVisibilitySet(lbl_1_bss_C[i], 1); + } + } + BoardModelMotionStart(lbl_1_bss_C[4], 1, 0x40000001); + BoardModelMotionStart(lbl_1_bss_C[5], 1, 0x40000001); + BoardModelMotionStart(lbl_1_bss_C[2], 0, 0); + BoardModelMotionSpeedSet(lbl_1_bss_C[2], 0.0f); + BoardModelLayerSet(lbl_1_bss_C[2], 1); + BoardModelMotionStart(lbl_1_bss_C[3], 0, 0); + BoardModelMotionSpeedSet(lbl_1_bss_C[3], 0.0f); + BoardModelLayerSet(lbl_1_bss_C[3], 1); + fn_1_D70(); + fn_1_4878(); + fn_1_7BB0(); + fn_1_8F20(); + BoardLightHookSet(fn_1_730, fn_1_79C); + BoardSpaceWalkEventFuncSet(fn_1_7BC); + BoardSpaceWalkMiniEventFuncSet(fn_1_900); + BoardSpaceLandEventFuncSet(fn_1_984); + BoardStarHostSet(lbl_1_data_F4); + BoardBooHouseHostSet(lbl_1_data_F6); + BoardLotteryHostSet(lbl_1_data_F6); + BoardShopHostSet(lbl_1_data_F6); + BoardJunctionMaskSet(0x3000); + boardTurnFunc = fn_1_C2B4; + boardStarShowNextHook = fn_1_CD0C; + boardTurnStartFunc = fn_1_9294; + boardStarGiveHook = fn_1_CC90; + boardBowserHook = fn_1_C108; + fn_1_9C0(); +} + +void BoardDestroy(void) { + s32 i; + + fn_1_B28(); + boardTurnFunc + = (void*) boardStarShowNextHook + = (void*) boardTurnStartFunc + = (void*) boardStarGiveHook + = (void*) boardBowserHook = NULL; + fn_1_91D8(); + fn_1_7F3C(); + fn_1_F6C(); + fn_1_4A10(); + for (i = 0; i < MAPOBJ_MAX; i++) { + BoardModelKill(lbl_1_bss_C[i]); + lbl_1_bss_C[i] = -1; + } + if (lbl_1_data_F6 != -1) { + BoardModelKill(lbl_1_data_F6); + lbl_1_data_F6 = -1; + } + if (lbl_1_data_F4 != -1) { + BoardModelKill(lbl_1_data_F4); + lbl_1_data_F4 = -1; + } + if (lbl_1_data_F0 != -1) { + BoardModelKill(lbl_1_data_F0); + lbl_1_data_F0 = -1; + } + if (lbl_1_data_F2 != -1) { + BoardModelKill(lbl_1_data_F2); + lbl_1_data_F2 = -1; + } +} + +static void fn_1_730(void) { + s16 var_r31; + + var_r31 = BoardModelIDGet(lbl_1_data_F0); + Hu3DModelLightInfoSet(var_r31, 1); + Hu3DFogSet(4200.0f, 30000.0f, 0xF8, 0x30, 0); +} + +static void fn_1_79C(void) { + Hu3DFogClear(); +} + +static s32 fn_1_7BC(void) { + s32 sp10[] = { 0, 1 }; + s32 sp8[] = { 0x300, 0xC0 }; + BoardSpace *temp_r31; + s16 temp_r28; + s32 temp_r27; + s32 i; + s32 j; + + temp_r27 = GWSystem.player_curr; + temp_r28 = GWPlayer[temp_r27].space_curr; + if (fn_1_92D8(temp_r27, temp_r28) != 0) { + return 1; + } + for (i = 0; i < 2; i++) { + if (BoardSpaceLinkFlagSearch(0, temp_r28, sp8[i]) == -1) { + continue; + } + temp_r31 = BoardSpaceGet(0, temp_r28); + for (j = 0; j < temp_r31->link_cnt; j++) { + if ((BoardSpaceFlagGet(0, temp_r31->link[j]) & 0x04000000) == 0) { + fn_1_8264(sp10[i], temp_r31->link[j]); + return 1; + } + } + } + return 0; +} + +static s32 fn_1_900(void) { + s16 var_r30; + s32 temp_r31; + + var_r30 = GWPlayer[GWSystem.player_curr].space_curr; + temp_r31 = BoardSpaceFlagGet(0, var_r30) & 0x600000; + if (temp_r31 == 0x200000) { + fn_1_1054(); // TODO: return? + } else if (temp_r31 == 0x400000) { + fn_1_4A60(); // TODO: return? + } +} + +static s32 fn_1_984(void) { + if (BoardPlayerSizeGet(GWSystem.player_curr) != 2) { + fn_1_6EF0(); // TODO: return? + } +} + +static void fn_1_9C0(void) { + Vec sp14; + Vec sp8; + omObjData *temp_r3; + Bss8Work *temp_r30; + s32 i; + + temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B5C); + lbl_1_bss_8 = temp_r3; + temp_r30 = OM_GET_WORK_PTR(temp_r3, Bss8Work); + temp_r30->unk00_field0 = 0; + BoardCameraPosGet(&sp14); + BoardCameraDirGet(&sp8); + HuAudFXListnerSetEX(&sp14, &sp8, 6600.0f, 36000.0f, 0.0f, 1650.0f, 1650.0f); + for (i = 0; i < 10; i++) { + temp_r30->unk01[i] = 0; + } + if (!_CheckFlag(0x10010)) { + if (lbl_1_bss_4 == 0) { + HuAudFXPauseAll(1); + lbl_1_bss_4 = 1; + } + } else if (lbl_1_bss_4 != 0) { + HuAudFXPauseAll(0); + lbl_1_bss_4 = 0; + } +} + +static void fn_1_B28(void) { + if (lbl_1_bss_8) { + OM_GET_WORK_PTR(lbl_1_bss_8, Bss8Work)->unk00_field0 = 1; + } +} + +static void fn_1_B5C(omObjData *arg0) { + Bss8Work *temp_r30; + Vec sp14; + Vec sp8; + s16 temp_r28; + s16 var_r29; + s16 i; + + temp_r30 = OM_GET_WORK_PTR(arg0, Bss8Work); + if (temp_r30->unk00_field0 != 0 || BoardIsKill()) { + HuAudFXListnerKill(); + lbl_1_bss_8 = NULL; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + temp_r28 = BoardModelMotionTimeGet(lbl_1_data_F0); + BoardCameraDirGet(&sp8); + BoardCameraTargetGet(&sp14); + sp14.y += 2000.0f; + if (!_CheckFlag(0x10010)) { + if (lbl_1_bss_4 == 0) { + HuAudFXPauseAll(1); + lbl_1_bss_4 = 1; + } + } else if (lbl_1_bss_4 != 0) { + HuAudFXPauseAll(0); + lbl_1_bss_4 = 0; + } + if (!_CheckFlag(0x1001C)) { + for (var_r29 = i = 0; i < 10; i++) { + if (temp_r30->unk01[i] != 0) { + var_r29++; + } else if (temp_r28 == lbl_1_data_108[i].unk00) { + HuAudFXEmiterPlay(0x4A1, &lbl_1_data_108[i].unk04); + temp_r30->unk01[i] = 1; + goto block_20; + } + } + if (var_r29 < 10) { + return; + } + for (i = 0; i < 10; i++) { + temp_r30->unk01[i] = 0; + } + } +block_20: + HuAudFXListnerUpdate(&sp14, &sp8); +}