From a00bec938afed43202dfcba09e07e993e20d586b Mon Sep 17 00:00:00 2001 From: Rainchus Date: Sun, 21 Jan 2024 03:13:38 -0600 Subject: [PATCH] match river.c in w03Dll --- config/GMPE01_00/rels/w03Dll/splits.txt | 3 +- config/GMPE01_00/rels/w03Dll/symbols.txt | 66 ++-- configure.py | 2 +- src/REL/w03Dll/main.c | 4 +- src/REL/w03Dll/river.c | 477 +++++++++++++++++++++++ src/REL/w03Dll/smoke.c | 8 +- src/REL/w03Dll/statue.c | 4 +- 7 files changed, 523 insertions(+), 41 deletions(-) create mode 100644 src/REL/w03Dll/river.c diff --git a/config/GMPE01_00/rels/w03Dll/splits.txt b/config/GMPE01_00/rels/w03Dll/splits.txt index 77b0aab0..63affcf8 100644 --- a/config/GMPE01_00/rels/w03Dll/splits.txt +++ b/config/GMPE01_00/rels/w03Dll/splits.txt @@ -31,12 +31,13 @@ REL/w03Dll/river.c: .text start:0x000063F4 end:0x0000785C .rodata start:0x00000218 end:0x000002A8 .data start:0x00000368 end:0x00000410 - .bss start:0x00000120 end:0x00000140 + .bss start:0x00000120 end:0x00000138 REL/w03Dll/smoke.c: .text start:0x0000785C end:0x00007ABC .rodata start:0x000002A8 end:0x000002B0 .data start:0x00000410 end:0x00000450 + .bss start:0x00000138 end:0x00000140 REL/w03Dll/mg_coin.c: .text start:0x00007ABC end:0x00009A7C diff --git a/config/GMPE01_00/rels/w03Dll/symbols.txt b/config/GMPE01_00/rels/w03Dll/symbols.txt index ef56fe08..4efe98c4 100644 --- a/config/GMPE01_00/rels/w03Dll/symbols.txt +++ b/config/GMPE01_00/rels/w03Dll/symbols.txt @@ -222,34 +222,34 @@ 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_218 = .rodata:0x00000218; // type:object size:0x4 data:float -lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 data:float -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 data:float -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 data:double -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x8 data:double -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 data:double -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 data:double -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:0x8 data:double -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 data:float -lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 data:float -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 data:float -lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 data:float -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_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_rodata_290 = .rodata:0x00000290; // type:object size:0x4 data:float -lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 data:float -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x8 data:double -lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x8 data:double +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 +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x8 scope:local data:double +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x8 scope:local data:double +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:double +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 scope:local data:float +lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 scope:local data:float +lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 scope:local data:float +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_284 = .rodata:0x00000284; // type:object size:0x4 scope:local data:float +lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28C = .rodata:0x0000028C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 scope:local data:float +lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 scope:local data:float +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x8 scope:local data:double 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:0x4 data:float @@ -366,12 +366,12 @@ lbl_1_data_388 = .data:0x00000388; // type:object size:0x2 data:2byte lbl_1_data_38A = .data:0x0000038A; // type:object size:0x2 data:2byte lbl_1_data_38C = .data:0x0000038C; // type:object size:0x2 data:2byte lbl_1_data_390 = .data:0x00000390; // type:object size:0x10 -lbl_1_data_3A0 = .data:0x000003A0; // type:object size:0xB data:string -lbl_1_data_3AB = .data:0x000003AB; // type:object size:0x6 data:string -lbl_1_data_3B1 = .data:0x000003B1; // type:object size:0x7 +lbl_1_data_3A0 = .data:0x000003A0; // type:object size:0xB scope:local data:string +lbl_1_data_3AB = .data:0x000003AB; // type:object size:0x6 scope:local data:string +lbl_1_data_3B1 = .data:0x000003B1; // type:object size:0x7 scope:local lbl_1_data_3B8 = .data:0x000003B8; // type:object size:0x48 -lbl_1_data_400 = .data:0x00000400; // type:object size:0x3 data:string -lbl_1_data_403 = .data:0x00000403; // type:object size:0xD +lbl_1_data_400 = .data:0x00000400; // type:object size:0x3 scope:local data:string +lbl_1_data_403 = .data:0x00000403; // type:object size:0xD scope:local lbl_1_data_410 = .data:0x00000410; // type:object size:0x8 scope:local data:string lbl_1_data_418 = .data:0x00000418; // type:object size:0x8 scope:local data:string lbl_1_data_420 = .data:0x00000420; // type:object size:0x8 scope:local data:string diff --git a/configure.py b/configure.py index 90a845be..f3c6f0f2 100644 --- a/configure.py +++ b/configure.py @@ -994,7 +994,7 @@ config.libs = [ Object(Matching, "REL/w03Dll/main.c"), Object(Matching, "REL/w03Dll/statue.c"), Object(NonMatching, "REL/w03Dll/condor.c"), - Object(NonMatching, "REL/w03Dll/river.c"), + Object(Matching, "REL/w03Dll/river.c"), Object(Matching, "REL/w03Dll/smoke.c"), Object(NonMatching, "REL/w03Dll/mg_coin.c"), Object(Matching, "REL/w03Dll/mg_item.c"), diff --git a/src/REL/w03Dll/main.c b/src/REL/w03Dll/main.c index 2e140c42..697b0d50 100644 --- a/src/REL/w03Dll/main.c +++ b/src/REL/w03Dll/main.c @@ -448,4 +448,6 @@ void fn_1_10E4(omObjData* arg0) { lbl_1_bss_8 = 0; } HuAudFXListnerUpdate(&sp14, &sp8); -} \ No newline at end of file +} + +f32 const padMain = 0.0f; \ No newline at end of file diff --git a/src/REL/w03Dll/river.c b/src/REL/w03Dll/river.c new file mode 100644 index 00000000..160e0a18 --- /dev/null +++ b/src/REL/w03Dll/river.c @@ -0,0 +1,477 @@ +#include "dolphin.h" +#include "game/object.h" +#include "REL/w03Dll.h" +#include "board_unsplit.h" +#include "game/board/main.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); +void BoardPlayerMotBlendSet(s32, s32, s32); +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); +void BoardPlayerMotionShiftSet(s32, s32, f32, f32, s32); + + +#define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0]))) + +extern s16 lbl_1_bss_C[14]; +extern s16 boardPlayerMdl[4]; + +char lbl_1_bss_130[8]; +omObjData* lbl_1_bss_12C; +s16 lbl_1_bss_128; +s32 lbl_1_bss_124; +Process* lbl_1_bss_120; + +//function signatures +void fn_1_67F8(void); +void fn_1_6884(void); +void fn_1_767C(omObjData* arg0); +s32 fn_1_6898(s32 arg0); +void fn_1_6B98(s32 arg0); +void fn_1_6F9C(s32 arg0); +void fn_1_767C(omObjData* arg0); +void fn_1_735C(s32 arg0); +void fn_1_77E4(s32 arg0); + +typedef struct unkWorkStruct { + struct { + u8 temp1 : 1; + }; + s8 unk_01[3]; + f32 unk_04; +} unkWorkStruct; + +//DATA +s32 lbl_1_data_368[] = { + 0x00000105, 0x00000145, 0x00000185, + 0x000001C5, 0x00000205, 0x00000245, + 0x00000285, 0x000002C5 +}; + +s16 lbl_1_data_388 = -1; +s16 lbl_1_data_38A = -1; +s16 lbl_1_data_38C = -1; +s32 lbl_1_data_390[] = { + 0x00770026, + 0x00770027, + 0x00770028, + -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); + +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); +} + +void fn_1_6494(void) { + Vec sp14; + Vec sp8; + unkWorkStruct* temp_r31; + + lbl_1_data_388 = BoardModelCreate(0x77000E, NULL, 0); + 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); + + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[0]), ikadaString, &sp14); + BoardSpaceFlagPosGet(0, 0x200, &sp8); + sp14.x = sp8.x + (400.0 * sin(-1.5707963267948966)); + sp14.z = sp8.z + (400.0 * cos(-1.5707963267948966)); + 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); + temp_r31->temp1 = 0; + temp_r31->unk_04 = 0.0f; + lbl_1_bss_124 = 0; +} + +s32 fn_1_6698(void) { + Vec sp14; + Vec sp8; + + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_C[0]), ikadaString, &sp14); + BoardSpaceFlagPosGet(0, 0x200, &sp8); + sp14.x = sp8.x + (400.0 * sin(-1.5707963267948966)); + sp14.z = sp8.z + (400.0 * cos(-1.5707963267948966)); + BoardModelPosSetV(lbl_1_data_388, (Point3d* ) &sp14); + return 1; +} + +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) { + HuPrcVSleep(); + } + BoardDiceDigit2DShowSet(1); + return lbl_1_bss_128; +} + +void fn_1_67F8(void) { + s32 temp_r31; + + 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(); +} + +void fn_1_6884(void) { + lbl_1_bss_120 = 0; +} + +s32 fn_1_6898(s32 arg0) { + Vec sp20; + Vec sp14; + Vec sp8; + f32 temp_f31; + s32 var_r27; + s32 temp_r3; + s32 i, j; + s32 temp, temp2; + + BoardRotateDiceNumbers(arg0); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_388), hei01String, &sp20); + BoardPlayerPosGet(arg0, &sp14); + PSVECSubtract(&sp20, &sp14, &sp8); + temp_f31 = 180.0 * (atan2(sp8.x, sp8.z) / 3.141592653589793); + BoardCameraTargetModelSet(lbl_1_data_388); + BoardPlayerMotBlendSet(arg0, temp_f31, 0xF); + 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(); + BoardWinKill(); + return 0; + } + + for (var_r27 = i = 0; i < 6; i++) { + temp = lbl_1_data_3B8[i].x; + temp2 = lbl_1_data_3B8[i].y; + if (temp_r3 >= temp) { + if (temp_r3 <= temp2) { + var_r27 = lbl_1_data_3B8[i].z; + break; + } + } + } + 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; + break; + case 1: + case -1: + BoardWinCreate(2, 0x16000E, 2); + BoardWinWait(); + BoardWinKill(); + return 0; + default: + BoardViewMapExec(arg0); + } + } + for (i = 0; i < var_r27; i++) { + BoardPlayerCoinsAdd(arg0, -1); + HuAudFXPlay(0xE); + HuPrcSleep(6); + } + HuAudFXPlay(0xF); + BoardWinCreate(2, 0x0016000C, 2); + BoardWinWait(); + BoardWinKill(); + 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; + Point3d sp24; + Vec sp18; + Point3d spC; + f32 sp8; + f32 temp_f1; + f32 temp_f31; + s16 var_r31; + s16 i; + + 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.y = sp24.y; + PSVECSubtract(&sp18, &sp24, &spC); + spC.x = spC.x / 120.0f; + spC.y /= 120.0f; + spC.z = spC.z / 120.0f; + 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(); + } + + BoardModelPosSetV(lbl_1_data_388, &sp18); + BoardCameraTargetModelSet(-1); + 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; + +static inline PlayerState *BoardPlayerGet(s32 player) { + return &GWPlayer[player]; +} + +static inline s16 BoardPlayerModelGet(s32 player) { + PlayerState *player_ptr = BoardPlayerGet(player); + return boardPlayerMdl[player_ptr->player_idx]; +} + +void fn_1_6F9C(s32 arg0) { + Vec sp20; + Vec sp14; + Vec sp8; + f32 var_f30; + f32 var_f29; + f32 var_f31; + s32 temp_r4; + s32 var_r30; + s16 model; + + 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; + sp14.y += sp20.y; + } else { + 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); + 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); + var_r30 = 1; + } + } + BoardPlayerPosSetV(arg0, &sp14); + HuPrcVSleep(); + } + + BoardPlayerMotionShiftSet(arg0, 5, 0.0f, 8.0f, 0U); + HuPrcSleep(10); + BoardRotateDiceNumbers(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; +} + +void fn_1_735C(s32 arg0) { + Vec sp20; + Vec sp14; + Point3d sp8; + f32 temp_f1; + f32 var_f30; + f32 var_f31; + s32 temp_r29; + s32 temp_r4; + s32 var_r30; + + temp_r29 = BoardSpaceFlagPosGet(0, 0x100, &sp20); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_388), "chara01", &sp14); + BoardPlayerPosSetV(arg0, &sp14); + BoardModelHookObjReset(lbl_1_data_388, "chara01"); + PSVECSubtract(&sp20, &sp14, &sp8); + + sp8.x = sp8.x / 60.0f; + sp8.z = sp8.z / 60.0f; + sp8.y = 0.0f; + + HuAudFXPlay(lbl_1_data_368[GWPlayer[arg0].character]); + BoardPlayerMotionShiftSet(arg0, 4, 0.0f, 10.0f, 0U); + if (lbl_1_bss_0->unk0 != 0) { + var_f30 = 0.25f; + } else { + var_f30 = 0.2f; + } + + for (var_r30 = 0, var_f31 = 0.0f; var_f31 < 60.0f; var_f31 += 1.0f) { + PSVECAdd(&sp14, &sp8, &sp14); + sp14.y += 20.0f + (var_f30 * (-0.08166667f * var_f31 * var_f31)); + 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); + var_r30 = 1; + } + } + BoardPlayerPosSetV(arg0, &sp14); + HuPrcVSleep(); + } + + BoardPlayerPosSetV(arg0, &sp20); + HuPrcSleep(0xA); + BoardPlayerMotBlendSet(arg0, 0, 0xF); + while (BoardPlayerMotBlendCheck(arg0) == 0) { + HuPrcVSleep(); + } + BoardRotateDiceNumbers(arg0); + GWPlayer[arg0].space_curr = temp_r29; + GWPlayer[arg0].space_prev = -1; + BoardPlayerPostTurnHookSet(arg0, fn_1_6698); + BoardWinCreate(2, 0x16000D, 2); + BoardWinWait(); + BoardWinKill(); +} + + +void fn_1_767C(omObjData* arg0) { + Point3d sp8; + s32 temp_r30; + 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)))); + BoardModelPosSetV(lbl_1_data_388, &sp8); + } +} + +void fn_1_77E4(s32 arg0) { + s32 boardIndex; + 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"; \ No newline at end of file diff --git a/src/REL/w03Dll/smoke.c b/src/REL/w03Dll/smoke.c index 8f8f0f9c..65a1088e 100644 --- a/src/REL/w03Dll/smoke.c +++ b/src/REL/w03Dll/smoke.c @@ -11,7 +11,7 @@ typedef struct w03UnkWorkStruct { } w03UnkWorkStruct; extern w03State* lbl_1_bss_0; -extern omObjData* lbl_1_bss_138; +omObjData* lbl_1_bss_138[2]; extern Process *boardObjMan; extern s16 lbl_1_data_1E0; @@ -35,8 +35,8 @@ void fn_1_785C(void) { w03UnkWorkStruct* temp_r31; char* temp_r29; - lbl_1_bss_138 = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, fn_1_79E0); - temp_r31 = (w03UnkWorkStruct*)&lbl_1_bss_138->work[0]; + 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++) { temp_r31->unk_00[i] = BoardModelCreate(0x770008, NULL, 0); temp_r29 = kemuri_strings[i]; @@ -66,7 +66,7 @@ void fn_1_79E0(omObjData* arg0) { for (i = 0; i < 5; i++) { BoardModelKill(temp_r30->unk_00[i]); } - lbl_1_bss_138 = NULL; + lbl_1_bss_138[0] = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); return; } diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index bbdc1c31..511a4913 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -646,4 +646,6 @@ void fn_1_2B44(void) { GXPosition2u16(temp_f28, temp_f29); GXPosition2f32(0.0f, 1.0f); GXSetChanMatColor(GX_COLOR0A0, sp1C); -} \ No newline at end of file +} + +f32 const padStatue = 0.0f; \ No newline at end of file