diff --git a/config/GMPE01_00/rels/w05Dll/symbols.txt b/config/GMPE01_00/rels/w05Dll/symbols.txt index 456a94ae..c094add8 100644 --- a/config/GMPE01_00/rels/w05Dll/symbols.txt +++ b/config/GMPE01_00/rels/w05Dll/symbols.txt @@ -87,18 +87,18 @@ fn_1_B2B0 = .text:0x0000B2B0; // type:function size:0x114 fn_1_B3C4 = .text:0x0000B3C4; // type:function size:0x280 _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_38 = .rodata:0x00000038; // type:object size:0x8 data:double -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_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_38 = .rodata:0x00000038; // type:object size:0x8 scope:local data:double +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 data:float lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 data:double lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double diff --git a/configure.py b/configure.py index dc33a548..a330d6af 100644 --- a/configure.py +++ b/configure.py @@ -1127,7 +1127,7 @@ config.libs = [ Rel('w05Dll', objects = { Object(Matching, "REL/board_executor.c"), - Object(NonMatching, "REL/w05Dll/main.c"), + Object(Matching, "REL/w05Dll/main.c"), Object(NonMatching, "REL/w05Dll/hotel.c"), Object(NonMatching, "REL/w05Dll/monkey.c"), Object(NonMatching, "REL/w05Dll/dolphin.c"), diff --git a/include/game/board/space.h b/include/game/board/space.h index 8c7aa9d5..37a0fe66 100644 --- a/include/game/board/space.h +++ b/include/game/board/space.h @@ -51,6 +51,7 @@ void BoardSpaceLandExec(s32 player, s32 space); void BoardSpaceCameraSet(u16 mask); void BoardSpaceBlockPosSet(void); void BoardSpaceInit(s32 data_num); +void BoardSpaceDestroy(void); extern s16 boardSpaceStarTbl[8]; diff --git a/src/REL/w05Dll/main.c b/src/REL/w05Dll/main.c new file mode 100644 index 00000000..d1cdcf17 --- /dev/null +++ b/src/REL/w05Dll/main.c @@ -0,0 +1,485 @@ +#include "dolphin.h" + +#include "game/gamework_data.h" +#include "game/chrman.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/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 "REL/w05Dll/mg_item.h" +extern void fn_1_96B4(void); +// #include "REL/w05Dll/mg_coin.h" +extern u32 fn_1_8884(void); + +// data +BoardMapObject lbl_1_data_0[7] = { + { { 3300.0f, 100.0f, -900.0f }, + { 0.0f, 0.0f, 0.0f }, + { 1.0f, 1.0f, 1.0f }, + 0x790011 + }, + { { -2550.0f, 0.0f, 1350.0f }, + { 0.0f, 0.0f, 0.0f }, + { 1.0f, 1.0f, 1.0f }, + 0x790014 + }, + { { -3000.0f, 100.0f, -1050.0f }, + { 0.0f, 0.0f, 0.0f }, + { 1.0f, 1.0f, 1.0f }, + 0x79001A + }, + { { 2100.0f, 100.0f, -450.0f }, + { 0.0f, 0.0f, 0.0f }, + { 1.0f, 1.0f, 1.0f }, + 0x79001B + }, + { { -450.0f, 100.0f, -750.0f }, + { 0.0f, 0.0f, 0.0f }, + { 1.0f, 1.0f, 1.0f }, + 0x79000A + }, + { { -2710.0f, 0.0f, 1315.0f }, + { 0.0f, 0.0f, 0.0f }, + { 1.0f, 1.0f, 1.0f }, + 0x79000A + }, + { { 3055.0f, 100.0f, -815.0f }, + { 0.0f, 0.0f, 0.0f }, + { 1.0f, 1.0f, 1.0f }, + 0x79000A + }, +}; + +s16 lbl_1_data_118 = 0xFFFF; +s16 lbl_1_data_11A = 0xFFFF; +s16 lbl_1_data_11C = 0xFFFF; +s16 lbl_1_data_11E = 0xFFFF; +s16 lbl_1_data_120 = 0xFFFF; +s32 lbl_1_data_124[9] = {0x5F0000, 0x1A0000, 0x6D0000, 0x8A0000, 0x850000, 0x110000, 0xD0000, 0x810000, 0x790006}; +s32 lbl_1_data_144 = 0xFFFFFFFF; +s32 lbl_1_data_14C = 0xFFFFFFFF; + +// bss +s16 lbl_1_bss_14[7]; +s32* lbl_1_bss_10; +s16 lbl_1_bss_8[4]; +Process* lbl_1_bss_4; +u8* lbl_1_bss_0; + +// functions +void BoardCreate(void); +void BoardDestroy(void); +void fn_1_744(void); +void fn_1_788(void); +s32 fn_1_78C(void); +s32 fn_1_82C(void); +void fn_1_92C(void); +void fn_1_950(void); +void fn_1_954(void); +void fn_1_D4C(void); +void fn_1_D84(void); +void fn_1_E04(void); +void fn_1_E40(void); +s32 fn_1_1114(void); +s32 fn_1_1208(s16 arg0, f32 arg8, f32 arg9); + +void BoardCreate(void) { + s32 sp8; + s32 var_r31; + BoardMapObject* temp_r30; + + sp8 = GWBoardGet(); + lbl_1_bss_0 = GWSystem.board_data; + BoardSpaceInit(0x790000); + lbl_1_data_118 = BoardModelCreate(0x790001, NULL, 0); + lbl_1_data_120 = BoardModelCreate(0x790002, NULL, 0); + fn_8006DDE8(lbl_1_data_118, -1.0f); + BoardModelPosSet(lbl_1_data_118, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_118, 0, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_data_118, 1.0f); + fn_8006DDE8(lbl_1_data_120, -1.0f); + BoardModelPosSet(lbl_1_data_120, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_120, 0, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_data_120, 1.0f); + BoardModelLayerSet(lbl_1_data_120, 1); + lbl_1_data_11A = BoardModelCreate(0x790003, NULL, 0); + fn_8006DDE8(lbl_1_data_11A, -1.0f); + BoardModelPosSet(lbl_1_data_11A, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_11A, 0, 0x40000001); + lbl_1_data_11C = BoardModelCreate(0x790005, &lbl_1_data_144, 0); + BoardModelPosSet(lbl_1_data_11C, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_11C, 1, 0x40000001); + lbl_1_data_11E = BoardModelCreate(0x2001C, &lbl_1_data_14C, 0); + BoardModelMotionStart(lbl_1_data_11E, 1, 0x40000001); + BoardLightHookSet(fn_1_744, fn_1_788); + + for (var_r31 = 0; var_r31 < 7; var_r31++) { + temp_r30 = &lbl_1_data_0[var_r31]; + if (temp_r30->data_num != -1) { + if ((var_r31 == 4) || (var_r31 == 5) || (var_r31 == 6)) { + lbl_1_bss_10 = &lbl_1_data_14C; + } else { + lbl_1_bss_10 = NULL; + } + lbl_1_bss_14[var_r31] = BoardModelCreate(temp_r30->data_num, lbl_1_bss_10, 0); + BoardModelPosSetV(lbl_1_bss_14[var_r31], &temp_r30->pos); + BoardModelRotSetV(lbl_1_bss_14[var_r31], &temp_r30->rot); + BoardModelScaleSetV(lbl_1_bss_14[var_r31], &temp_r30->scale); + BoardModelVisibilitySet(lbl_1_bss_14[var_r31], 1); + if (lbl_1_bss_10 != NULL) { + BoardModelMotionStart(lbl_1_bss_14[var_r31], 0, 0x40000001); + } + } + } + fn_1_92C(); + fn_1_13D4(); + fn_1_2B40(); + BoardSpaceWalkEventFuncSet(fn_1_82C); + BoardSpaceWalkMiniEventFuncSet(&fn_1_1114); + BoardSpaceLandEventFuncSet(fn_1_78C); + BoardStarHostSet(lbl_1_data_11C); + BoardBooHouseHostSet(lbl_1_data_11E); + BoardShopHostSet(lbl_1_data_11E); + BoardLotteryHostSet(lbl_1_data_11E); +} + +void BoardDestroy(void) { + s32 var_r31; + + for (var_r31 = 0; var_r31 < 7; var_r31++) { + if (lbl_1_bss_14[var_r31] != 0) { + BoardModelKill(lbl_1_bss_14[var_r31]); + lbl_1_bss_14[var_r31] = 0; + } + } + if (lbl_1_data_11E != -1) { + BoardModelKill(lbl_1_data_11E); + lbl_1_data_11E = -1; + } + if (lbl_1_data_11C != -1) { + BoardModelKill(lbl_1_data_11C); + lbl_1_data_11C = -1; + } + if (lbl_1_data_118 != -1) { + BoardModelKill(lbl_1_data_118); + lbl_1_data_118 = -1; + } + if (lbl_1_data_120 != -1) { + BoardModelKill(lbl_1_data_120); + lbl_1_data_120 = -1; + } + if (lbl_1_data_11A != -1) { + BoardModelKill(lbl_1_data_11A); + lbl_1_data_11A = -1; + } + BoardSpaceDestroy(); +} + +void fn_1_744(void) { + s16 var_r31 = BoardModelIDGet(lbl_1_data_118); + Hu3DModelLightInfoSet(var_r31, 1); +} + +void fn_1_788(void) { +} + +s32 fn_1_78C(void) { + s32 var_r30 = GWSystem.player_curr; + s32 var_r29 = GWPlayer[var_r30].space_curr; + s32 var_r28; + u32 temp_r3; + + temp_r3 = BoardSpaceFlagGet(0, var_r29); + if ((temp_r3 & 2) != 0) { + fn_1_1E44(); + return; + } + if ((temp_r3 & 0x40) != 0) { + var_r28 = (temp_r3 & 0x38) >> 3; + fn_1_4034(var_r28); + } +} + +s32 fn_1_82C(void) { + s32 temp_r30; + BoardSpace* temp_r3; + + temp_r30 = GWSystem.player_curr; + temp_r3 = BoardSpaceGet(0, GWPlayer[temp_r30].space_curr); + if ((temp_r3->flag & 1) != 0) { + fn_1_2C7C(0); + return 1; + } + if ((temp_r3->flag & 0x800) != 0) { + fn_1_2C7C(1); + return 1; + } + if (BoardPlayerSizeGet(temp_r30) == 2) { + return 0; + } + if (GWPlayer[temp_r30].bowser_suit != 0) { + return 0; + } + if ((u32) (temp_r3->flag & 4) != 0) { + fn_1_155C(); + return 1; + } + return 0; +} + +void fn_1_92C(void) { + fn_1_6B28(); + fn_1_9680(); +} + +void fn_1_950(void) { +} + +void fn_1_954(void) { + Vec sp14; + Vec sp8; + s32 var_r26; + u32 var_r28; + s32 temp_r27; + s32 var_r29; + s32 var_r31; + s32 temp_r30; + + temp_r30 = GWSystem.player_curr; + if (BoardPlayerItemCount(temp_r30) == 3) { + BoardWinCreate(2, 0x270009, 7); + BoardWinWait(); + BoardWinKill(); + HuPrcEnd(); + } + lbl_1_bss_8[0] = 0; + + for (var_r31 = 1; var_r31 < 3;) { + lbl_1_bss_8[var_r31] = frandmod(0xE); + if ((lbl_1_bss_8[var_r31] == 0xA) || (lbl_1_bss_8[var_r31] == 0xD)) { + continue; + } + for (var_r29 = 0; var_r29 < var_r31; var_r29++) { + if (lbl_1_bss_8[var_r31] == lbl_1_bss_8[var_r29]) { + lbl_1_bss_8[var_r31] = -1; + } + } + if (lbl_1_bss_8[var_r31] == -1) { + continue; + } + var_r31++; + } + fn_1_74D0(&lbl_1_bss_8); + BoardWinCreateChoice(2, 0x27000A, 7, 0); + if (GWPlayer[temp_r30].com != 0) { + if (BoardComPreferItemCheck(temp_r30, lbl_1_bss_8[0], lbl_1_bss_8[1], lbl_1_bss_8[2]) != -1) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + BoardWinKill(); + var_r28 = BoardWinChoiceGet(); + if (var_r28 == 1 || var_r28 == -1) { + while ((u32) (fn_1_8884() & 0x10) == 0) { + HuPrcVSleep(); + } + BoardWinCreate(2, 0x27000B, 7); + BoardWinWait(); + BoardWinKill(); + BoardMGExit(); + fn_1_88B8(); + fn_1_77B0(); + fn_1_7314(); + while (BoardMGDoneFlagGet() != 1) { + HuPrcVSleep(); + } + BoardMGDoneFlagSet(0); + HuPrcEnd(); + } + sp14.x = -30.0f; + sp14.y = sp14.z = 0.0f; + sp8.x = 0.0f; + sp8.y = 0.0f; + sp8.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[0], &sp14, &sp8, 1250.0f, 25.0f, 0x15); + + while ((fn_1_8884() & 0x10) == 0) { + HuPrcVSleep(); + } + temp_r27 = GWPlayer[temp_r30].space_curr; + var_r26 = BoardSpaceLinkFlagSearch(0, temp_r27, 0x02000000); + BoardPlayerMoveBetween(temp_r30, temp_r27, var_r26); + + while (GWPlayer[temp_r30].moving != 0) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r30, 1, 0x40000001); + fn_1_6B7C(); + + while (BoardEventFlagGet() != 0) { + HuPrcVSleep(); + } + while ((GWPlayer[temp_r30].moving) != 0) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r30, 1, 0x40000001); + HuPrcEnd(); +} + +void fn_1_D4C(void) { + BoardWinKill(); + CharModelDataClose(-1); + lbl_1_bss_4 = NULL; +} + +void fn_1_D84(void) { + lbl_1_bss_4 = HuPrcChildCreate(fn_1_954, 0x2003U, 0x3000U, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_4, fn_1_D4C); + + while (lbl_1_bss_4 != 0) { + HuPrcVSleep(); + } +} + +void fn_1_E04(void) { + HuPrcSleep(0x3C); + BoardMusStart(1, 0x23, 0x7F, 0); + HuPrcEnd(); +} + +void fn_1_E40(void) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 temp_r30; + s32 temp_r29; + s32 temp_r3_2; + s32 temp_r31; + + temp_r31 = GWSystem.player_curr; + fn_1_96B4(); + BoardWinCreateChoice(2, 0x27000F, 7, 0); + if (GWPlayer[temp_r31].com != 0) { + if ((frand() & 1) != 0) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + BoardWinKill(); + temp_r30 = BoardWinChoiceGet(); + if ((temp_r30 == 1) || (temp_r30 == -1)) { + fn_1_9760(); + BoardWinCreate(2, 0x270010, 7); + BoardWinWait(); + BoardWinKill(); + BoardMGExit(); + + while (BoardMGDoneFlagGet() != 1) { + HuPrcVSleep(); + } + BoardMGDoneFlagSet(0); + return; + } + BoardAudSeqPause(0, 1, 0x3E8); + HuPrcChildCreate(fn_1_E04, 0x2003, 0x1000, 0, boardMainProc); + sp20.x = -35.0f; + sp20.y = sp20.z = 0.0f; + sp14.x = 0.0f; + sp14.y = 0.0f; + sp14.z = -250.0f; + BoardCameraMotionStartEx(lbl_1_bss_14[1], &sp20, &sp14, 1550.0f, 25.0f, 0x15); + temp_r29 = GWPlayer[temp_r31].space_curr; + temp_r3_2 = BoardSpaceLinkFlagSearch(0, temp_r29, 0x02000000); + BoardSpacePosGet(0, temp_r3_2, &sp8); + BoardPlayerMoveBetween(temp_r31, temp_r29, temp_r3_2); + while (GWPlayer[temp_r31].moving != 0) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); + fn_1_97AC(); + while (GWPlayer[temp_r31].moving != 0) { + HuPrcVSleep(); + } + while (BoardEventFlagGet() != 0) { + HuPrcVSleep(); + } + while (GWPlayer[temp_r31].moving != 0) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(temp_r31, 1, 0x40000001); +} + +s32 fn_1_1114(void) { + u32 temp_r31; + s16 var_r30 = GWPlayer[GWSystem.player_curr].space_curr; + + temp_r31 = BoardSpaceFlagGet(0, var_r30) & 0x600000; + BoardDiceDigit2DShowSet(0); + if ((temp_r31 & 0x200000) != 0) { + lbl_1_bss_4 = HuPrcChildCreate(fn_1_954, 0x2003U, 0x3000U, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_4, fn_1_D4C); + + while (lbl_1_bss_4 != 0) { + HuPrcVSleep(); + } + } else if ((temp_r31 & 0x400000) != 0) { + fn_1_E40(); + } + BoardDiceDigit2DShowSet(1); +} + +s32 fn_1_1208(s16 arg0, f32 arg8, f32 arg9) { + f32 var_f29; + f32 var_f31; + s32 var_r31; + + var_r31 = 0; + var_f31 = BoardModelRotYGet(arg0); + arg8 = fmod(arg8, 360.0); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (arg8 < 0.0f) { + arg8 += 360.0f; + } + if (var_f31 != arg8) { + var_f29 = arg8 - var_f31; + if (var_f29 < 0.0f) { + var_f29 += 360.0f; + } + if (var_f29 < 180.0f) { + if (var_f29 > arg9) { + var_f31 = var_f31 + arg9; + } else { + var_f31 = arg8; + } + } else if ((360.0f - var_f29) > arg9) { + var_f31 = var_f31 - arg9; + } else { + var_f31 = arg8; + } + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } + BoardModelRotYSet(arg0, var_f31); + } else { + var_r31 = 1; + } + return var_r31; +}