From 9c237c8992c2b95f8520bc03a3abc767702af7a7 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 6 Apr 2024 14:24:01 -0400 Subject: [PATCH] Create w05Dll header, decomp hotel.c (nonmatching) --- include/REL/w05Dll.h | 43 ++++ include/game/board/player.h | 1 - src/REL/w05Dll/hotel.c | 430 ++++++++++++++++++++++++++++++++++++ src/REL/w05Dll/main.c | 7 - 4 files changed, 473 insertions(+), 8 deletions(-) diff --git a/include/REL/w05Dll.h b/include/REL/w05Dll.h index b6615e2a..1915bf2c 100644 --- a/include/REL/w05Dll.h +++ b/include/REL/w05Dll.h @@ -1,5 +1,9 @@ #include "dolphin/types.h" +#include "game/board/main.h" +#include "game/board/map_object.h" + +// functions void BoardCreate(void); void BoardDestroy(void); void fn_1_744(void); @@ -15,3 +19,42 @@ void fn_1_E04(void); void fn_1_E40(void); s32 fn_1_1114(void); s32 fn_1_1208(s16, f32, f32); + +void fn_1_13D4(void); +void fn_1_14D0(void); +s16 fn_1_14FC(void); +void fn_1_155C(void); +void fn_1_1E44(void); + +// structs +typedef struct bitcopy { + u32 unk_00; + s8 unk_04; +} bitcopy; + +// data +extern BoardMapObject lbl_1_data_0[7]; +extern s16 lbl_1_data_118; +extern s16 lbl_1_data_11A; +extern s16 lbl_1_data_11C; +extern s16 lbl_1_data_11E; +extern s16 lbl_1_data_120; +extern s32 lbl_1_data_124[8]; +extern s32 lbl_1_data_144[2]; +extern s32 lbl_1_data_14C; +extern s32 lbl_1_data_150[5]; +extern s16 lbl_1_data_164; +extern u32 lbl_1_data_170[4]; +extern s32 lbl_1_data_180; +extern s16 lbl_1_data_184; +extern s32 lbl_1_data_188[4]; +extern s32 lbl_1_data_198[2]; + +// bss +extern s16 lbl_1_bss_28; + +extern s16 lbl_1_bss_14[7]; +extern s32* lbl_1_bss_10; +extern s16 lbl_1_bss_8[4]; +extern Process* lbl_1_bss_4; +extern bitcopy* lbl_1_bss_0; diff --git a/include/game/board/player.h b/include/game/board/player.h index 69aafebc..cad3fb39 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -9,7 +9,6 @@ #include "game/object.h" #include "game/hsfman.h" #include "game/hsfmotion.h" -#include "game/gamework_data.h" #include "game/board/main.h" #include "game/board/space.h" #include "game/board/ui.h" diff --git a/src/REL/w05Dll/hotel.c b/src/REL/w05Dll/hotel.c index e69de29b..811bc1c2 100644 --- a/src/REL/w05Dll/hotel.c +++ b/src/REL/w05Dll/hotel.c @@ -0,0 +1,430 @@ +#include "REL/w05Dll.h" + +#include "game/hsfdraw.h" +#include "game/audio.h" +#include "game/pad.h" +#include "game/objsub.h" +#include "game/wipe.h" + +#include "game/board/model.h" +#include "game/board/player.h" +#include "game/board/window.h" + +// data +s32 lbl_1_data_150[5] = { + 0x790021, 0x790022, 0x790023, 0x790024, 0x790025, +}; +s16 lbl_1_data_164 = 0xFFFF; + +// bss +s16 lbl_1_bss_28; + +void fn_1_13D4(void) { + Vec sp8; + ModelData* temp_r31; + + lbl_1_data_164 = BoardModelCreate(lbl_1_data_150[lbl_1_bss_0->unk_04], NULL, 0); + BoardModelAttrSet(lbl_1_data_164, 0x40000001); + temp_r31 = &Hu3DData[BoardModelIDGet(lbl_1_data_118)]; + Hu3DMotionExec(BoardModelIDGet(lbl_1_data_118), temp_r31->unk_08, 0.0f, 0); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "hotel1", &sp8); + BoardModelPosSetV(lbl_1_data_164, &sp8); +} + +void fn_1_14D0(void) { + BoardModelKill(lbl_1_data_164); +} + +u32 lbl_1_data_170[4] = { 0, 10, 25, 40 }; +s32 lbl_1_data_180 = 0x79000C; + +s16 fn_1_14FC(void) { + s16 var_r31; + + for (var_r31 = 0; var_r31 < 4;var_r31++) { + if (lbl_1_bss_0->unk_00 <= lbl_1_data_170[var_r31]) { + break; + } + } + return var_r31; +} + +void fn_1_155C(void) { + Vec sp64; + Vec sp58; + Vec sp4C; + Vec sp40; + Vec sp34; + Vec sp28; + char sp18[16]; + Vec spC; + char sp8[4]; + s32 var_r27; + ModelData* temp_r25; + f32 temp_f30; + f32 temp_f31; + s16 var_r26; + s16 temp_r28; + s16 var_r30; + u32 var_r31; + + lbl_1_bss_28 = GWSystem.player_curr; + BoardDiceDigit2DShowSet(0); + temp_r28 = BoardModelMotionCreate(lbl_1_bss_14[4], lbl_1_data_180); + temp_f30 = BoardPlayerRotYGet(lbl_1_bss_28); + BoardPlayerPosGet(lbl_1_bss_28, &sp58); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "hotel1", &sp64); + temp_f31 = 180.0 * (atan2((sp64.x - sp58.x), (sp64.z - sp58.z)) / M_PI); + BoardPlayerMotBlendSet(lbl_1_bss_28, temp_f31, 0xF); + BoardCameraViewSet(2); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + BoardModelPosGet(lbl_1_bss_14[4], &sp4C); + + sp40 = sp28 = sp4C; + if (sp58.x > sp28.x) { + sp28.x += 650.0f; + BoardModelRotYSet(lbl_1_bss_14[4], 90.0f); + } else { + sp28.x -= 650.0f; + BoardModelRotYSet(lbl_1_bss_14[4], -90.0f); + } + BoardModelMotionStart(lbl_1_bss_14[4], temp_r28, 0x40000001); + PSVECSubtract(&sp28, &sp40, &sp34); + PSVECScale(&sp34, &sp34, 0.018518519f); + + for (var_r31 = 0; var_r31 < 0x36; var_r31++) { + PSVECAdd(&sp40, &sp34, &sp40); + BoardModelPosSetV(lbl_1_bss_14[4], &sp40); + HuPrcVSleep(); + } + BoardModelPosSetV(lbl_1_bss_14[4], &sp28); + temp_f31 = (180.0 * (atan2((sp58.x - sp28.x), (sp58.z - sp28.z)) / M_PI)); + + while (fn_1_1208(lbl_1_bss_14[4], temp_f31, 10.0f) == 0) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, 0x40000001); + var_r30 = BoardPlayerCoinsGet(lbl_1_bss_28); + sprintf(sp18, "%d", lbl_1_bss_0->unk_00); + if (var_r30 > 0) { + if (var_r30 >= 5) { + var_r27 = 0x270001; + var_r30 = 5; + } else { + var_r27 = 0x270002; + } + sprintf(sp8, "%d", var_r30); + BoardWinCreate(2, var_r27, 7); + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp8), 1); + } else { + BoardWinCreate(2, 0x270003, 7); + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp18), 0); + } + BoardWinWait(); + BoardWinKill(); + if (var_r30 > 0) { + for (var_r31 = 0; (s32) var_r31 < var_r30; var_r31++) { + BoardPlayerCoinsAdd(lbl_1_bss_28, -1); + HuAudFXPlay(0xE); + HuPrcSleep(6); + } + HuAudFXPlay(0xF); + lbl_1_bss_0->unk_00 += var_r30; + sprintf(sp18, "%d", lbl_1_bss_0->unk_00); + BoardWinCreate(2, 0x270016, 7); + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp18), 0); + BoardWinWait(); + BoardWinKill(); + } + + var_r26 = fn_1_14FC(); + if (var_r26 != lbl_1_bss_0->unk_04) { + lbl_1_bss_0->unk_04 = var_r26; + BoardCameraTargetModelSet(lbl_1_data_164); + BoardCameraOffsetSet(0.0f, 200.0f, 0.0f); + BoardCameraMotionWait(); + HuPrcSleep(0x3C); + WipeColorSet(0, 0, 0); + WipeCreate(2, 0, 0x30); + + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + fn_1_14D0(); + fn_1_13D4(); + WipeCreate(1, 0, 0x30); + + while (WipeStatGet() != 0) { + HuPrcVSleep(); + } + HuPrcSleep(0x3C); + BoardCameraTargetPlayerSet(lbl_1_bss_28); + BoardCameraMotionWait(); + } + BoardPlayerMotBlendSet(lbl_1_bss_28, temp_f30, 0xF); + BoardModelPosGet(lbl_1_bss_14[4], &sp40); + sp28 = sp4C; + if (sp58.x > sp28.x) { + BoardModelRotYSet(lbl_1_bss_14[4], -90.0f); + } else { + BoardModelRotYSet(lbl_1_bss_14[4], 90.0f); + } + BoardModelMotionStart(lbl_1_bss_14[4], temp_r28, 0x40000001); + PSVECSubtract(&sp28, &sp40, &sp34); + PSVECScale(&sp34, &sp34, 0.033333335f); + + for (var_r31 = 0; var_r31 < 0x1E; var_r31++) { + PSVECAdd(&sp40, &sp34, &sp40); + BoardModelPosSetV(lbl_1_bss_14[4], &sp40); + HuPrcVSleep(); + } + BoardModelPosSetV(lbl_1_bss_14[4], &sp28); + + while (fn_1_1208(lbl_1_bss_14[4], 0.0f, 15.0f) == 0) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, 0x40000001); + BoardCameraViewSet(1); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + BoardModelMotionKill(lbl_1_bss_14[4], temp_r28); + BoardDiceDigit2DShowSet(1); +} + +s16 lbl_1_data_184 = 0x2564; +s32 lbl_1_data_188[4] = { 0x79000C, 0x79000E, 0x79000F, 0x790010 }; +s32 lbl_1_data_198[2] = { 28, 25 }; + +void fn_1_1E44(void) { + char sp84[0x10]; + char sp74[0x10]; + Vec sp68; + f32 sp64; + f32 sp60; + Vec sp5C; + Vec sp50; + Vec sp44; + Vec sp38; + f32 sp34; + f32 sp30; + Vec sp2C; + s16 sp1C[4][2]; + Vec sp10; + s16 sp8[4]; + ModelData* temp_r25; + f32 temp_f31; + f32 temp; + s16 temp_r3; + s16 var_r26; + s16 var_r27; + s32 var_r28; + s32 var_r31; + s32 temp_r24; + s32 var_r30; + + lbl_1_bss_28 = GWSystem.player_curr; + BoardDiceDigit2DShowSet(0); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + sp8[var_r31] = BoardModelMotionCreate(lbl_1_bss_14[4], lbl_1_data_188[var_r31]); + } + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + for (var_r30 = 0; var_r30 < 2; var_r30++) { + sp1C[var_r31][var_r30] = BoardPlayerMotionCreate(var_r31, lbl_1_data_198[var_r30] | lbl_1_data_124[GWPlayer[var_r31].character]); + } + } + BoardCameraViewSet(2); + BoardCameraMotionWait(); + BoardPlayerPosGet(lbl_1_bss_28, &sp50); + BoardModelPosGet(lbl_1_bss_14[4], &sp38); + sp5C = sp2C = sp38; + if (sp50.x > sp2C.x) { + sp2C.x += 520.0f; + BoardModelRotYSet(lbl_1_bss_14[4], 90.0f); + } else { + sp2C.x -= 520.0f; + BoardModelRotYSet(lbl_1_bss_14[4], -90.0f); + } + BoardModelMotionStart(lbl_1_bss_14[4], sp8[0], 0x40000001); + PSVECSubtract(&sp2C, &sp5C, &sp44); + PSVECScale(&sp44, &sp44, 0.018518519f); + + for (var_r31 = 0; var_r31 < 0x36U; var_r31++) { + PSVECAdd(&sp5C, &sp44, &sp5C); + BoardModelPosSetV(lbl_1_bss_14[4], &sp5C); + HuPrcVSleep(); + } + BoardModelPosSetV(lbl_1_bss_14[4], &sp2C); + temp_f31 = (180.0 * (atan2((sp50.x - sp2C.x), (sp50.z - sp2C.z)) / M_PI)); + + while (fn_1_1208(lbl_1_bss_14[4], temp_f31, 10.0f) == 0) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, 0x40000001); + temp_f31 = 180.0 * (atan2((sp2C.x - sp50.x), (sp2C.z - sp50.z)) / M_PI); + BoardPlayerMotBlendSet(lbl_1_bss_28, temp_f31, 0xF); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) { + HuPrcVSleep(); + } + if (lbl_1_bss_0->unk_00 == 0) { + BoardWinCreate(2, 0x270005, 7); + BoardWinWait(); + BoardWinKill(); + } else { + temp_r3 = BoardModelCreate(0x790004, NULL, 0); + BoardModelVisibilitySet(temp_r3, 0); + BoardModelLayerSet(temp_r3, 2U); + if (lbl_1_bss_0->unk_00 > BoardPlayerCoinsGet(lbl_1_bss_28)) { + var_r28 = BoardPlayerCoinsGet(lbl_1_bss_28); + } else { + var_r28 = lbl_1_bss_0->unk_00; + } + if (var_r28 < 0x14) { + var_r26 = 6; + } else if (var_r28 < 0x32) { + var_r26 = 3; + } else if (var_r28 < 0x64) { + var_r26 = 2; + } else { + var_r26 = 0; + } + sprintf(&sp84, "%d", lbl_1_bss_0->unk_00); + sprintf(&sp74, "%d", var_r28); + if (var_r28 == lbl_1_bss_0->unk_00) { + BoardWinCreate(2, 0x270004, 7); + } else { + BoardWinCreate(2, 0x270017, 7); + } + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp84), 0); + BoardWinInsertMesSet(MAKE_MESSID_PTR(sp74), 1); + BoardWinWait(); + BoardWinKill(); + + for (var_r31 = 0; var_r31 < var_r28; var_r31++) { + BoardPlayerCoinsAdd(lbl_1_bss_28, -1); + HuAudFXPlay(0xE); + HuPrcSleep(var_r26); + } + HuAudFXPlay(0xF); + HuPrcSleep(0x1E); + BoardCameraViewSet(1); + BoardCameraTargetModelSet(lbl_1_data_164); + BoardCameraMotionWait(); + HuPrcSleep(0x1E); + omVibrate(lbl_1_bss_28, 0x7FFF, 0xC, 0); + BoardCameraQuakeSet(0x8C, 250.0f); + temp_r24 = HuAudFXPlay(0x482); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardPlayerMotBlendSet(var_r31, 0, 0xF); + } + + while (fn_1_1208(lbl_1_bss_14[4], 0.0f, 15.0f) == 0) { + HuPrcVSleep(); + } + BoardModelMotionStart(lbl_1_bss_14[4], sp8[1], 0U); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardPlayerVoiceEnableSet(var_r31, sp1C[var_r31][0], 0); + BoardPlayerMotionStart(var_r31, sp1C[var_r31][0], 0); + } + HuAudPlayerVoicePlay(lbl_1_bss_28, 0x12E); + HuPrcSleep(0x5A); + HuAudFXStop(temp_r24); + HuAudFXPlay(0x483); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "tunami1", &sp68); + BoardModelPosSetV(temp_r3, &sp68); + BoardModelVisibilitySet(temp_r3, 1); + BoardModelMotionTimeSet(temp_r3, 0.0f); + HuPrcSleep(0x1E); + lbl_1_bss_0->unk_00 = 0; + + lbl_1_bss_0->unk_04 = fn_1_14FC(); + BoardModelKill(lbl_1_data_164); + lbl_1_data_164 = BoardModelCreate(lbl_1_data_150[lbl_1_bss_0->unk_04], NULL, 0); + BoardModelAttrSet(lbl_1_data_164, 0x40000001); + temp_r25 = &Hu3DData[BoardModelIDGet(lbl_1_data_118)]; + Hu3DMotionExec(BoardModelIDGet(lbl_1_data_118), temp_r25->unk_08, 0.0f, 0); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "hotel1", &sp10); + BoardModelPosSetV(lbl_1_data_164, &sp10); + BoardModelMotionStart(lbl_1_bss_14[4], sp8[2], 0x40000001U); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardPlayerVoiceEnableSet(var_r31, sp1C[var_r31][0], 1); + if (var_r31 != lbl_1_bss_28) { + BoardPlayerVoiceEnableSet(var_r31, 6, 0); + } + BoardPlayerMotionStart(var_r31, 6, 0x40000001); + } + while (BoardModelMotionTimeGet(temp_r3) < BoardModelMotionMaxTimeGet(temp_r3)) { + HuPrcVSleep(); + } + BoardModelKill(temp_r3); + HuPadRumbleStop(GWPlayer[lbl_1_bss_28].port); + BoardWinCreate(0, 0x270006, -1); + BoardWinWait(); + BoardWinKill(); + HuPrcSleep(0x1E); + BoardModelMotionShiftSet(lbl_1_bss_14[4], sp8[3], 0.0f, 5.0f, 0U); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardPlayerMotionShiftSet(var_r31, sp1C[var_r31][1], 0.0f, 5.0f, 0); + BoardPlayerVoiceEnableSet(var_r31, 6, 1); + } + HuPrcSleep(0x23); + BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, 0x40000001); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardPlayerMotionShiftSet(var_r31, 1, 0.0f, 5.0f, 0x40000001); + } + } + BoardCameraViewSet(1); + BoardPlayerPosGet(lbl_1_bss_28, &sp50); + BoardModelPosGet(lbl_1_bss_14[4], &sp5C); + sp2C = sp38; + if (sp50.x > sp2C.x) { + BoardModelRotYSet(lbl_1_bss_14[4], -90.0f); + } else { + BoardModelRotYSet(lbl_1_bss_14[4], 90.0f); + } + BoardModelMotionStart(lbl_1_bss_14[4], sp8[0], 0x40000001U); + PSVECSubtract(&sp38, &sp5C, &sp44); + PSVECScale(&sp44, &sp44, 0.055555556); + + for (var_r31 = 0; var_r31 < 0x12U; var_r31++) { + PSVECAdd(&sp5C, &sp44, &sp5C); + BoardModelPosSetV(lbl_1_bss_14[4], &sp5C); + HuPrcVSleep(); + } + BoardModelPosSetV(lbl_1_bss_14[4], &sp38); + + while (fn_1_1208(lbl_1_bss_14[4], 0.0f, 15.0f) == 0) { + HuPrcVSleep(); + } + BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, 0x40000001U); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + BoardModelMotionKill(lbl_1_bss_14[4], sp8[var_r31]); + } + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + for (var_r30 = 0; var_r30 < 2; var_r30++) { + BoardPlayerMotionKill(var_r31, sp1C[var_r31][var_r30]); + } + } + BoardCameraMotionWait(); + BoardPlayerMotBlendSet(lbl_1_bss_28, 0, 0xF); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) { + HuPrcVSleep(); + } +} diff --git a/src/REL/w05Dll/main.c b/src/REL/w05Dll/main.c index ee45d27d..9d06b01e 100644 --- a/src/REL/w05Dll/main.c +++ b/src/REL/w05Dll/main.c @@ -7,8 +7,6 @@ #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" @@ -18,10 +16,6 @@ // frand.h extern u32 frandmod(u32); -// #include "REL/w05Dll/hotel.h" -extern void fn_1_13D4(void); -extern void fn_1_155C(void); -extern void fn_1_1E44(void); // #include "REL/w05Dll/monkey.h" extern void fn_1_2B40(void); extern void fn_1_2C7C(s32); @@ -78,7 +72,6 @@ BoardMapObject lbl_1_data_0[7] = { 0x79000A }, }; - s16 lbl_1_data_118 = 0xFFFF; s16 lbl_1_data_11A = 0xFFFF; s16 lbl_1_data_11C = 0xFFFF;