From 0dd411eb7d49f79c316d52049d8a746aa7c5918e Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sun, 28 Apr 2024 15:02:37 -0400 Subject: [PATCH] Complete w05Dll --- config/GMPE01_00/rels/w05Dll/symbols.txt | 82 ++-- configure.py | 2 +- include/REL/w05Dll.h | 130 +++++- include/game/board/model.h | 1 + src/REL/w05Dll/main.c | 26 +- src/REL/w05Dll/mg_coin.c | 534 +++++++++++++++++++++++ src/REL/w05Dll/mg_item.c | 40 +- 7 files changed, 706 insertions(+), 109 deletions(-) create mode 100644 src/REL/w05Dll/mg_coin.c diff --git a/config/GMPE01_00/rels/w05Dll/symbols.txt b/config/GMPE01_00/rels/w05Dll/symbols.txt index 52d9757c..f8aa4f06 100644 --- a/config/GMPE01_00/rels/w05Dll/symbols.txt +++ b/config/GMPE01_00/rels/w05Dll/symbols.txt @@ -213,38 +213,38 @@ lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 scope:local data: 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 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:0x8 data:double -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 data:double -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 data:float -lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float -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_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_2F8 = .rodata:0x000002F8; // type:object size:0x8 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_284 = .rodata:0x00000284; // 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:0x4 scope:local data:float +lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 scope:local data:float +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:0x4 scope:local data:float +lbl_1_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float +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 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_2F8 = .rodata:0x000002F8; // type:object size:0x8 scope:local data:double lbl_1_data_0 = .data:0x00000000; // type:object size:0x118 lbl_1_data_118 = .data:0x00000118; // type:object size:0x2 data:2byte lbl_1_data_11A = .data:0x0000011A; // type:object size:0x2 data:2byte @@ -294,21 +294,21 @@ lbl_1_data_343 = .data:0x00000343; // type:object size:0xD scope:local data:stri lbl_1_data_350 = .data:0x00000350; // type:object size:0x38 lbl_1_data_388 = .data:0x00000388; // type:object size:0xB8 lbl_1_data_440 = .data:0x00000440; // type:object size:0xC -lbl_1_data_450 = .data:0x00000450; // type:object size:0x6 data:string -lbl_1_data_456 = .data:0x00000456; // type:object size:0x7 data:string -lbl_1_data_45D = .data:0x0000045D; // type:object size:0x7 data:string +lbl_1_data_450 = .data:0x00000450; // type:object size:0x6 scope:local data:string +lbl_1_data_456 = .data:0x00000456; // type:object size:0x7 scope:local data:string +lbl_1_data_45D = .data:0x0000045D; // type:object size:0x7 scope:local data:string lbl_1_data_464 = .data:0x00000464; // type:object size:0xC lbl_1_data_470 = .data:0x00000470; // type:object size:0xC lbl_1_data_47C = .data:0x0000047C; // type:object size:0xC -lbl_1_data_488 = .data:0x00000488; // type:object size:0x3 data:string -lbl_1_data_48B = .data:0x0000048B; // type:object size:0x4 data:string -lbl_1_data_48F = .data:0x0000048F; // type:object size:0x5 +lbl_1_data_488 = .data:0x00000488; // type:object size:0x3 scope:local data:string +lbl_1_data_48B = .data:0x0000048B; // type:object size:0x4 scope:local data:string +lbl_1_data_48F = .data:0x0000048F; // type:object size:0x5 scope:local data:string lbl_1_data_494 = .data:0x00000494; // type:object size:0xC -lbl_1_data_4A0 = .data:0x000004A0; // type:object size:0xD data:string -lbl_1_data_4AD = .data:0x000004AD; // type:object size:0x5 data:string +lbl_1_data_4A0 = .data:0x000004A0; // type:object size:0xD scope:local data:string +lbl_1_data_4AD = .data:0x000004AD; // type:object size:0x5 scope:local data:string lbl_1_data_4B2 = .data:0x000004B2; // type:object size:0x6 lbl_1_data_4B8 = .data:0x000004B8; // type:object size:0xC -lbl_1_data_4C4 = .data:0x000004C4; // type:object size:0x3 data:string +lbl_1_data_4C4 = .data:0x000004C4; // type:object size:0x3 scope:local 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:0x8 data:2byte diff --git a/configure.py b/configure.py index 8af7f133..87df7122 100644 --- a/configure.py +++ b/configure.py @@ -1415,7 +1415,7 @@ config.libs = [ Object(Matching, "REL/w05Dll/monkey.c"), Object(Matching, "REL/w05Dll/dolphin.c"), Object(Matching, "REL/w05Dll/mg_item.c"), - Object(NonMatching, "REL/w05Dll/mg_coin.c"), + Object(Matching, "REL/w05Dll/mg_coin.c"), } ), Rel('w06Dll', diff --git a/include/REL/w05Dll.h b/include/REL/w05Dll.h index ac413078..a326cb65 100644 --- a/include/REL/w05Dll.h +++ b/include/REL/w05Dll.h @@ -2,6 +2,36 @@ #include "game/board/main.h" #include "game/board/map_object.h" +#include "game/board/player.h" + +// structs +typedef struct bitcopy { + u32 unk_00; + s8 unk_04; +} bitcopy; + +typedef struct _dataCopy { + s16 unk_00; + s16 unk_02; + s16 unk_04; + s16 unk_06; + s16 unk_08; + s16 unk_0A[3]; + s16 unk_10; + s16 unk_12; +} dataCopy; + +typedef struct _dataCopy2 { + s16 unk_00; + s16 unk_02; + s16 unk_04; + s16 unk_06; + s16 unk_08; + s16 unk_0A; + Vec unk_0C[3]; + s16 unk_30; + s16 unk_32; +} dataCopy2; // functions void BoardCreate(void); @@ -50,19 +80,51 @@ void fn_1_6670(void); omObjData* fn_1_66C0(u32, Vec*); void fn_1_6914(omObjData*); -// unknown -void fn_1_62AC(s32, Vec*); -void fn_1_64BC(); -void fn_1_65E8(); -void fn_1_6670(); -omObjData* fn_1_66C0(u32, Vec*); -void fn_1_6914(omObjData*); +void fn_1_6B28(void); +void fn_1_6B7C(void); +void fn_1_7284(omObjData*); +void fn_1_72E4(void); +void fn_1_7314(void); +void fn_1_73C0(void); +void fn_1_74D0(s16[3]); +void fn_1_77B0(void); +void fn_1_78A0(omObjData*); +void fn_1_7928(omObjData*); +void fn_1_799C(void); +void fn_1_7E4C(omObjData*); +void fn_1_7E94(dataCopy*); +void fn_1_7F04(omObjData*); +void fn_1_80D8(omObjData*); +void fn_1_8410(omObjData*); +void fn_1_850C(omObjData*); +void fn_1_8668(omObjData*); +void fn_1_8798(dataCopy*, s32*, s32*, s32*); +void* fn_1_8884(void); +void fn_1_88B8(void); +void fn_1_896C(void); +void fn_1_91DC(void); +void fn_1_9268(ModelData*, ParticleData*, f32[3][4]); -// structs -typedef struct bitcopy { - u32 unk_00; - s8 unk_04; -} bitcopy; +void fn_1_9680(void); +void fn_1_96B4(void); +void fn_1_9760(void); +void fn_1_97AC(void); +void fn_1_9A68(omObjData*); +void fn_1_9AC0(void); +void fn_1_9AF0(void); +void fn_1_9B74(void); +void fn_1_9C24(omObjData*); +void fn_1_9C98(dataCopy2*); +void fn_1_9D0C(omObjData*); +void fn_1_9F24(omObjData*); +void fn_1_A224(omObjData*); +void fn_1_A4F8(omObjData*); +void fn_1_A5B0(omObjData*); +void fn_1_A990(omObjData*); +void fn_1_AB24(void); +void fn_1_B214(omObjData*); +void fn_1_B2B0(omObjData*, u16*, s16*); +void fn_1_B3C4(omObjData*); // data extern BoardMapObject lbl_1_data_0[7]; @@ -94,7 +156,51 @@ extern Vec lbl_1_data_2A4[6]; extern s32 lbl_1_data_2EC[2]; extern s32 lbl_1_data_2F4[6]; +extern s32 lbl_1_data_310[2]; +extern char *lbl_1_data_330[3]; +extern s32 lbl_1_data_350[14]; +extern s32 lbl_1_data_350[14]; +extern s16 lbl_1_data_388[92]; +extern f32 lbl_1_data_440[3]; + +extern char *lbl_1_data_464[3]; +extern s32 lbl_1_data_470[3]; +extern s32 lbl_1_data_47C[3]; +extern char *lbl_1_data_494[3]; +extern s16 lbl_1_data_4B2[3]; +extern s32 lbl_1_data_4B8[3]; + // bss +extern s16 lbl_1_bss_102[3]; +extern s16 lbl_1_bss_100; +extern s16 lbl_1_bss_FE; +extern s16 lbl_1_bss_D6[20]; +extern s16 lbl_1_bss_D4; +extern omObjData* lbl_1_bss_D0; +extern omObjData* lbl_1_bss_CC; +extern omObjData* lbl_1_bss_C8; +extern s16 lbl_1_bss_C6; +extern s16 lbl_1_bss_C4; +extern s16 lbl_1_bss_C2; +extern s16 lbl_1_bss_C0; +extern u32 lbl_1_bss_BC; +extern s32 lbl_1_bss_B8; + +extern s16 lbl_1_bss_B6; +extern s16 lbl_1_bss_B0[3]; +extern s16 lbl_1_bss_AA[3]; +extern s16 lbl_1_bss_A4[3]; +extern s16 lbl_1_bss_A2; +extern s16 lbl_1_bss_9E[2]; +extern s16 lbl_1_bss_9C; +extern Process* lbl_1_bss_98; +extern omObjData* lbl_1_bss_94; +extern omObjData* lbl_1_bss_90; +extern omObjData* lbl_1_bss_8C; +extern s32 lbl_1_bss_88; +extern s32 lbl_1_bss_7C[3]; +extern AnimData* lbl_1_bss_78; + extern s16 lbl_1_bss_72[2]; extern s16 lbl_1_bss_6C[3]; extern s32 lbl_1_bss_68; diff --git a/include/game/board/model.h b/include/game/board/model.h index c967db5d..a570836d 100644 --- a/include/game/board/model.h +++ b/include/game/board/model.h @@ -46,6 +46,7 @@ s32 BoardModelAttrReset(s16 model, u32 attr); s32 BoardModelMotionTimeSet(s16 model, float time); float BoardModelMotionTimeGet(s16 model); float BoardModelMotionMaxTimeGet(s16 model); +float BoardModelMotionSpeedGet(s16 model); s32 BoardModelMotionSpeedSet(s16 model, float speed); s32 BoardModelMotionEndCheck(s16 model); s32 BoardModelAlphaSet(s16 model, u8 alpha); diff --git a/src/REL/w05Dll/main.c b/src/REL/w05Dll/main.c index 641816f2..8f26e941 100644 --- a/src/REL/w05Dll/main.c +++ b/src/REL/w05Dll/main.c @@ -2,6 +2,7 @@ #include "game/gamework_data.h" #include "game/chrman.h" +#include "game/frand.h" #include "game/board/audio.h" #include "game/board/boo_house.h" @@ -14,21 +15,6 @@ #include "game/board/star.h" #include "game/board/window.h" -// frand.h -extern u32 frandmod(u32); -// #include "REL/w05Dll/mg_item.h" -extern void fn_1_6B28(void); -extern void fn_1_6B7C(void); -extern void fn_1_7314(void); -extern void fn_1_77B0(void); -extern void fn_1_88B8(void); -// #include "REL/w05Dll/mg_coin.h" -extern u32 fn_1_8884(void); -extern void fn_1_9680(void); -extern void fn_1_96B4(void); -extern void fn_1_9760(void); -extern void fn_1_97AC(void); - // data BoardMapObject lbl_1_data_0[7] = { { { 3300.0f, 100.0f, -900.0f }, @@ -255,7 +241,7 @@ void fn_1_954(void) { lbl_1_bss_8[0] = 0; for (var_r31 = 1; var_r31 < 3;) { - lbl_1_bss_8[var_r31] = frandmod(0xE); + lbl_1_bss_8[var_r31] = (u32)frandmod(0xE); if ((lbl_1_bss_8[var_r31] == 0xA) || (lbl_1_bss_8[var_r31] == 0xD)) { continue; } @@ -269,7 +255,7 @@ void fn_1_954(void) { } var_r31++; } - fn_1_74D0(&lbl_1_bss_8); + 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) { @@ -282,7 +268,7 @@ void fn_1_954(void) { BoardWinKill(); var_r28 = BoardWinChoiceGet(); if (var_r28 == 1 || var_r28 == -1) { - while ((fn_1_8884() & 0x10) == 0) { + while (((u32)fn_1_8884() & 0x10) == 0) { HuPrcVSleep(); } BoardWinCreate(2, 0x27000B, 7); @@ -305,7 +291,7 @@ void fn_1_954(void) { sp8.z = 0.0f; BoardCameraMotionStartEx(lbl_1_bss_14[0], &sp14, &sp8, 1250.0f, 25.0f, 0x15); - while ((fn_1_8884() & 0x10) == 0) { + while (((u32)fn_1_8884() & 0x10) == 0) { HuPrcVSleep(); } temp_r27 = GWPlayer[temp_r30].space_curr; @@ -362,7 +348,7 @@ void fn_1_E40(void) { fn_1_96B4(); BoardWinCreateChoice(2, 0x27000F, 7, 0); if (GWPlayer[temp_r31].com != 0) { - if ((frand() & 1) != 0) { + if (((s32)frand() & 1) != 0) { BoardComKeySetLeft(); } else { BoardComKeySetRight(); diff --git a/src/REL/w05Dll/mg_coin.c b/src/REL/w05Dll/mg_coin.c new file mode 100644 index 00000000..9a6c2890 --- /dev/null +++ b/src/REL/w05Dll/mg_coin.c @@ -0,0 +1,534 @@ +#include "REL/w05Dll.h" + +#include "game/hsfdraw.h" +#include "game/audio.h" +#include "game/objsub.h" +#include "game/frand.h" +#include "game/chrman.h" +#include "game/pad.h" +#include "game/minigame_seq.h" + +#include "game/board/model.h" +#include "game/board/window.h" +#include "game/board/audio.h" + +s16 lbl_1_bss_102[3]; +s16 lbl_1_bss_100; +s16 lbl_1_bss_FE; +s16 lbl_1_bss_D6[20]; +s16 lbl_1_bss_D4; +omObjData* lbl_1_bss_D0; +omObjData* lbl_1_bss_CC; +omObjData* lbl_1_bss_C8; +s16 lbl_1_bss_C6; +s16 lbl_1_bss_C4; +s16 lbl_1_bss_C2; +s16 lbl_1_bss_C0; +u32 lbl_1_bss_BC; +s32 lbl_1_bss_B8; + +char *lbl_1_data_464[3] = { "gyoei", "gyoei1", "gyoei2" }; +s32 lbl_1_data_470[3] = { 0x7B, 0x7C, 0x7D }; +s32 lbl_1_data_47C[3] = { 0x00790016, 0x00790017, 0x00790018 }; +char *lbl_1_data_494[3] = { "uo", "uo1", "uo2" }; + +void fn_1_9680(void) { + BoardModelAttrSet(lbl_1_bss_14[1], 0x40000002U); +} + +void fn_1_96B4(void) { + BoardModelAttrReset(lbl_1_bss_14[1], 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_14[1], 0.0f); + + while (BoardModelMotionTimeGet(lbl_1_bss_14[1]) < 60.0f) { + HuPrcVSleep(); + } + BoardModelAttrSet(lbl_1_bss_14[1], 0x40000001); + BoardModelMotionStartEndSet(lbl_1_bss_14[1], 0x3C, 0x64); +} + +void fn_1_9760(void) { + BoardModelAttrReset(lbl_1_bss_14[1], 0x40000001); + BoardModelMotionStartEndSet(lbl_1_bss_14[1], 0, 0xA0); +} + +void fn_1_97AC(void) { + Vec sp8; + s32 var_r31; + + lbl_1_bss_C0 = GWSystem.player_curr; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + lbl_1_bss_102[var_r31] = BoardPlayerMotionCreate(lbl_1_bss_C0, lbl_1_data_470[var_r31] | lbl_1_data_124[GWPlayer[lbl_1_bss_C0].character]); + } + sp8.x = sp8.y = sp8.z = 1.0f; + lbl_1_bss_100 = BoardModelCreate(0x790015, NULL, 0); + BoardModelScaleSetV(lbl_1_bss_100, &sp8); + BoardModelVisibilitySet(lbl_1_bss_100, 0); + lbl_1_bss_D4 = BoardModelCreate(0x79002C, NULL, 0); + BoardModelVisibilitySet(lbl_1_bss_D4, 0); + lbl_1_bss_C2 = frandmod(3U); + lbl_1_bss_FE = BoardModelCreate(lbl_1_data_47C[lbl_1_bss_C2], NULL, 0); + BoardModelVisibilitySet(lbl_1_bss_FE, 0); + + for (var_r31 = 0; var_r31 < 0x14; var_r31++) { + lbl_1_bss_D6[var_r31] = BoardModelCreate(0x7000A, NULL, 1); + BoardModelVisibilitySet(lbl_1_bss_D6[var_r31], 0); + } + BoardPlayerPostTurnHookSet(lbl_1_bss_C0, (s32 (*)())fn_1_9B74); + lbl_1_bss_CC = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, fn_1_9A68); + lbl_1_bss_D0 = omAddObjEx(boardObjMan, 0x101, 0U, 0U, -1, fn_1_9C24); + lbl_1_bss_C6 = 0; + lbl_1_bss_C4 = 0; +} + +void fn_1_9A68(omObjData* arg0) { + if ((lbl_1_bss_C4 != 0) && (BoardMGDoneFlagGet() == 1)) { + fn_1_9AF0(); + omDelObjEx(boardObjMan, arg0); + } +} + +void fn_1_9AC0(void) { + lbl_1_bss_C4 = 1; + BoardMGExit(); +} + +void fn_1_9AF0(void) { + s32 var_r31; + + omDelObjEx(boardObjMan, lbl_1_bss_D0); + + for (var_r31 = 0; var_r31 < 0x14; var_r31++) { + BoardModelKill(lbl_1_bss_D6[var_r31]); + } + BoardModelKill(lbl_1_bss_D4); + BoardMGDoneFlagSet(0); +} + +void fn_1_9B74(void) { + HsfObject *var_r31; + omDelObjEx(boardObjMan, lbl_1_bss_C8); + BoardModelKill(lbl_1_bss_FE); + var_r31 = Hu3DModelObjPtrGet(BoardModelIDGet(lbl_1_bss_14[1]), lbl_1_data_464[lbl_1_bss_B8]); + var_r31->type = lbl_1_bss_BC; + BoardModelAttrReset(lbl_1_bss_14[1], 0x40000004); +} + +void fn_1_9C24(omObjData* arg0) { + if (arg0->work[0] == 0) { + arg0->work[0] = MGSeqCreate(3, 0); + return; + } + if (MGSeqStatGet(arg0->work[0]) == 0) { + arg0->func = fn_1_9D0C; + } +} + +void fn_1_9C98(dataCopy2* arg0) { + Vec sp8; + Vec temp_r4; + + sp8 = arg0->unk_0C[arg0->unk_08]; + sp8.y += 50.0f; + BoardModelPosSetV(arg0->unk_0A, &sp8); +} + +void fn_1_9D0C(omObjData* arg0) { + Vec sp1C; + Vec sp10; + f32 spC; + f32 sp8; + s32 var_r30; + dataCopy2* temp_r31; + + arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x34, 0x10000000); + temp_r31 = arg0->data; + temp_r31->unk_02 = 5; + temp_r31->unk_04 = 0x3C; + temp_r31->unk_00 = MGSeqCreate(1, temp_r31->unk_02, 0x120, 0x40); + HuWinMesMaxSizeGet(1, &sp8, 0x27000E); + temp_r31->unk_06 = HuWinCreate(-10000.0f, 368.0f, sp8, spC, 0); + HuWinMesSet(temp_r31->unk_06, 0x27000E); + HuWinBGTPLvlSet(temp_r31->unk_06, 0.0f); + HuWinMesSpeedSet(temp_r31->unk_06, 0); + temp_r31->unk_08 = 1; + temp_r31->unk_30 = frandmod(0x1EU) + 15; + temp_r31->unk_32 = 0; + + for (var_r30 = 0; var_r30 < 3; var_r30++) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[1]), lbl_1_data_494[var_r30], &temp_r31->unk_0C[var_r30]); + } + temp_r31->unk_0A = BoardModelCreate(0x790019, NULL, 0); + BoardModelAttrSet(temp_r31->unk_0A, 0x40000001); + sp1C.x = sp1C.y = sp1C.z = 1.5f; + BoardModelScaleSetV(temp_r31->unk_0A, &sp1C); + sp10 = temp_r31->unk_0C[temp_r31->unk_08]; + sp10.y += 50.0f; + BoardModelPosSetV(temp_r31->unk_0A, &sp10); + arg0->func = fn_1_9F24; +} + +void fn_1_9F24(omObjData* arg0) { + Vec sp24; + Vec sp18; + Vec spC; + u16 spA; + s16 sp8; + f32 var_f31; + u16 temp_r29; + dataCopy2* temp_r31; + + temp_r31 = arg0->data; + if (--temp_r31->unk_04 == 0) { + temp_r31->unk_04 = 0x3C; + if (--temp_r31->unk_02 >= 0) { + MGSeqParamSet(temp_r31->unk_00, 1, temp_r31->unk_02); + } + } + BoardPlayerPosGet(lbl_1_bss_C0, &sp24); + temp_r29 = GWPlayer[lbl_1_bss_C0].port; + if (GWPlayer[lbl_1_bss_C0].com != 0) { + fn_1_B2B0(arg0, &spA, &sp8); + } else { + sp8 = HuPadDStkRep[temp_r29]; + spA = HuPadBtnDown[temp_r29]; + } + if (((spA & 0x100) != 0) || (temp_r31->unk_02 < 0)) { + HuAudFXPlay(2); + MGSeqParamSet(temp_r31->unk_00, 2, -1); + HuWinKill(temp_r31->unk_06); + BoardModelKill(temp_r31->unk_0A); + BoardPlayerMotionStart(lbl_1_bss_C0, lbl_1_bss_102[0], 0); + BoardPlayerMotionSpeedSet(lbl_1_bss_C0, 0.5f); + arg0->func = fn_1_A224; + } else if ((temp_r31->unk_08 != 0) && ((sp8 & 1) != 0)) { + HuAudFXPlay(0); + temp_r31->unk_08--; + } else if ((temp_r31->unk_08 != 2) && ((sp8 & 2) != 0)) { + HuAudFXPlay(0); + temp_r31->unk_08++; + } + sp18 = temp_r31->unk_0C[temp_r31->unk_08]; + var_f31 = (180.0 * (atan2((sp18.x - sp24.x), (sp18.z - sp24.z)) / M_PI)); + BoardPlayerRotYSet(lbl_1_bss_C0, var_f31); + spC = temp_r31->unk_0C[temp_r31->unk_08]; + spC.y += 50.0f; + BoardModelPosSetV(temp_r31->unk_0A, &spC); +} + +void fn_1_A224(omObjData* arg0) { + Vec sp14; + Vec sp8; + f32 temp_f31; + + temp_f31 = BoardPlayerMotionMaxTimeGet(lbl_1_bss_C0); + if (BoardPlayerMotionTimeGet(lbl_1_bss_C0) >= temp_f31) { + HuAudFXPlay(0x350); + BoardPlayerPosGet(lbl_1_bss_C0, &sp14); + Hu3DModelObjPosGet(BoardModelIDGet(BoardPlayerModelGet(lbl_1_bss_C0)), "a-itemhook-r", &sp8); + sp8.x -= 20.0f; + sp8.y += 25.0f; + sp8.z += 80.0f; + CharModelLayerSetAll(7); + CharModelEffectCreate(-1, &sp8); + BoardModelVisibilitySet(lbl_1_bss_100, 1); + BoardModelMotionTimeSet(lbl_1_bss_100, 0.0f); + BoardModelAttrSet(lbl_1_bss_100, 0x40000002); + BoardModelHookSet(BoardPlayerModelGet(lbl_1_bss_C0), "a-itemhook-r", lbl_1_bss_100); + BoardModelMotionSpeedSet(lbl_1_bss_100, 1.5f); + BoardPlayerMotionStart(lbl_1_bss_C0, lbl_1_bss_102[1], 0); + BoardPlayerMotionSpeedSet(lbl_1_bss_C0, 0.5f); + switch (lbl_1_bss_C2) { + case 0: + omVibrate(lbl_1_bss_C0, 0x7FFF, 0xC, 0); + break; + case 1: + omVibrate(lbl_1_bss_C0, 0x7FFF, 4, 2); + break; + case 2: + omVibrate(lbl_1_bss_C0, 0x7FFF, 6, 6); + break; + } + arg0->func = fn_1_A4F8; + } +} + +void fn_1_A4F8(omObjData* arg0) { + f32 temp_f31; + + temp_f31 = BoardPlayerMotionMaxTimeGet(lbl_1_bss_C0); + if ((6.0f + BoardPlayerMotionTimeGet(lbl_1_bss_C0)) >= temp_f31) { + BoardModelMotionTimeSet(lbl_1_bss_100, 0.0f); + BoardModelAttrReset(lbl_1_bss_100, 0x40000002); + arg0->func = fn_1_A5B0; + } +} + +void fn_1_A5B0(omObjData* arg0) { + Vec sp14; + Vec sp8; + HsfObject* temp_r28; + dataCopy2* temp_r30; + omObjData* temp_r29; + Vec* temp_r31; + f32 temp_f30; + f32 var_f31; + + temp_r30 = arg0->data; + temp_f30 = BoardModelMotionMaxTimeGet(lbl_1_bss_100); + if (BoardModelMotionTimeGet(lbl_1_bss_100) >= temp_f30) { + BoardAudSeqFadeOut(1, 0x64); + HuAudFXPlay(0x485); + temp_r28 = Hu3DModelObjPtrGet(BoardModelIDGet(lbl_1_bss_14[1]), lbl_1_data_464[temp_r30->unk_08]); + lbl_1_bss_BC = temp_r28->type; + lbl_1_bss_B8 = temp_r30->unk_08; + temp_r28->type = -1; + BoardModelAttrSet(lbl_1_bss_100, 0x40000004); + HuPadRumbleStop(GWPlayer[lbl_1_bss_C0].port); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[1]), lbl_1_data_494[temp_r30->unk_08], &sp14); + BoardModelPosSetV(lbl_1_bss_FE, &sp14); + BoardModelAttrSet(lbl_1_bss_FE, 0x40000001); + BoardModelVisibilitySet(lbl_1_bss_FE, 1); + sp8.x = sp8.y = sp8.z = 0.8f; + BoardModelScaleSetV(lbl_1_bss_D4, &sp8); + BoardModelPosSetV(lbl_1_bss_D4, &sp14); + BoardModelVisibilitySet(lbl_1_bss_D4, 1); + BoardModelMotionTimeSet(lbl_1_bss_D4, 110.0f); + lbl_1_bss_C8 = temp_r29 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B3C4); + temp_r29->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0xC, 0x10000000); + temp_r31 = temp_r29->data; + lbl_1_bss_C8->work[1] = 1; + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[1]), "fish", &sp14); + BoardModelPosGet(lbl_1_bss_FE, &sp8); + sp14.y = sp8.y; + PSVECSubtract(&sp14, &sp8, temp_r31); + var_f31 = PSVECMag(temp_r31); + PSVECNormalize(temp_r31, temp_r31); + var_f31 /= 38.0f; + PSVECScale(temp_r31, temp_r31, var_f31); + temp_r31->y = 25.0f; + temp_r29->trans.x = var_f31; + BoardPlayerMotionStart(lbl_1_bss_C0, lbl_1_bss_102[2], 0); + BoardPlayerMotionSpeedSet(lbl_1_bss_C0, 0.5f); + BoardModelAttrReset(lbl_1_bss_14[1], 0x40000001); + BoardModelMotionStartEndSet(lbl_1_bss_14[1], 0, 0xA0); + arg0->func = fn_1_A990; + return; + } + var_f31 = BoardModelMotionSpeedGet(lbl_1_bss_100); + var_f31 -= 0.1f; + if (var_f31 < 1.0f) { + var_f31 = 1.0f; + } + BoardModelMotionSpeedSet(lbl_1_bss_100, var_f31); +} + +void fn_1_A990(omObjData* arg0) { + Vec sp8; + Process *var_r31; + + if (BoardModelMotionTimeGet(lbl_1_bss_100) <= 0.0f) { + Hu3DModelObjPosGet(BoardModelIDGet(BoardPlayerModelGet(lbl_1_bss_C0)), "a-itemhook-r", &sp8); + sp8.x += 20.0f; + sp8.y += 25.0f; + sp8.z += 80.0f; + CharModelLayerSetAll(7); + HuAudFXPlay(0x351); + CharModelEffectCreate(-1, &sp8); + BoardModelHookReset(BoardPlayerModelGet(lbl_1_bss_C0)); + BoardModelKill(lbl_1_bss_100); + var_r31 = HuPrcCreate(fn_1_AB24, 0x2004, 0x1800, 0); + var_r31->user_data = arg0; + arg0->func = NULL; + } +} + +s16 lbl_1_data_4B2[3] = { 20, 10, 5 }; +s32 lbl_1_data_4B8[3] = { 0x00270013, 0x00270014, 0x00270015 }; + +void fn_1_AB24(void) { + Vec sp124[20]; + Vec sp34[20]; + Vec sp28; + Vec sp1C; + Vec sp10; + void *spC; + char sp8; + f32 var_f31; + omObjData *temp_r30; + s32 var_r29; + s32 var_r31; + f32 var_f30; + Vec* temp_r4; + + temp_r30 = HuPrcCurrentGet()->user_data; + spC = temp_r30->data; + BoardPlayerPosGet(lbl_1_bss_C0, &sp28); + BoardModelPosGet(lbl_1_bss_14[5], &sp1C); + var_f30 = (180.0 * (atan2((sp1C.z - sp28.z), (sp1C.x - sp28.x)) / M_PI)); + BoardPlayerMotBlendSet(lbl_1_bss_C0, var_f30, 0xF); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_C0) == 0) { + HuPrcVSleep(); + } + HuPrcSleep(0x1E); + lbl_1_bss_C6 = lbl_1_data_4B2[lbl_1_bss_C2]; + BoardAudSeqPause(0, 0, 0x3E8); + sprintf(&sp8, "%d", lbl_1_bss_C6); + BoardWinCreate(2, 0x270011, 7); + BoardWinInsertMesSet((u32)&sp8, 0); + BoardWinInsertMesSet(lbl_1_data_4B8[lbl_1_bss_C2], 1); + BoardWinWait(); + BoardWinKill(); + BoardPlayerMotBlendSet(lbl_1_bss_C0, 0, 0xF); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_C0) == 0) { + HuPrcVSleep(); + } + BoardPlayerPosGet(lbl_1_bss_C0, &sp28); + + for (var_r31 = 0; var_r31 < lbl_1_bss_C6; var_r31++) { + BoardModelVisibilitySet(lbl_1_bss_D6[var_r31], 1); + sp124[var_r31] = sp28; + sp124[var_r31].y += (800.0f + (var_r31 * 0x78)); + sp124[var_r31].x += (-25.0f + (0.003921569f * (50.0f * (s32)(u8)frand()))); + sp124[var_r31].z += (-25.0f + (0.003921569f * (50.0f * (s32)(u8)frand()))); + sp34[var_r31].x = sp34[var_r31].z = 0.0f; + sp34[var_r31].y = 0.003921569f * (360.0f * (s32)(u8)frand()); + BoardModelPosSetV(lbl_1_bss_D6[var_r31], &sp124[var_r31]); + BoardModelRotSetV(lbl_1_bss_D6[var_r31], &sp34[var_r31]); + } + var_f31 = -1.0f; + var_r29 = 0; + +loop_10: + for (var_r31 = 0; var_r31 < lbl_1_bss_C6; var_r31++) { + if (var_r31 >= var_r29) { + sp124[var_r31].y += var_f31; + BoardModelPosSetV(lbl_1_bss_D6[var_r31], &sp124[var_r31]); + sp34[var_r31].y += 45.0f; + if (sp34[var_r31].y >= 360.0f) { + sp34[var_r31].y -= 360.0f; + } + BoardModelRotSetV(lbl_1_bss_D6[var_r31], &sp34[var_r31]); + if (sp124[var_r31].y <= (80.0f + sp28.y)) { + sp10 = sp124[var_r31]; + CharModelCoinEffectCreate(1, &sp10); + BoardModelVisibilitySet(lbl_1_bss_D6[var_r31], 0); + var_r29++; + BoardPlayerCoinsAdd(lbl_1_bss_C0, 1); + HuAudFXPlay(7); + omVibrate(lbl_1_bss_C0, 0xC, 6, 6); + } + } + } + var_f31 *= 1.05f; + if (var_f31 < -20.0f) { + var_f31 = -20.0f; + } + if (var_r29 == lbl_1_bss_C6) { + BoardPlayerMotionShiftSet(lbl_1_bss_C0, 7, 0.0f, 10.0f, 0); + } else { + HuPrcVSleep(); + goto loop_10; + } + + while (BoardPlayerMotionEndCheck(lbl_1_bss_C0) == 0) { + HuPrcVSleep(); + } + BoardWinCreate(2, 0x270012, 7); + BoardWinWait(); + BoardWinKill(); + temp_r30->func = fn_1_B214; + HuPrcEnd(); +} + +void fn_1_B214(omObjData* arg0) { + s32 var_r31; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + BoardPlayerMotionKill(lbl_1_bss_C0, lbl_1_bss_102[var_r31]); + } + lbl_1_bss_C4 = 1; + BoardMGExit(); + lbl_1_bss_C8->work[1] = 0; + omDelObjEx(boardObjMan, arg0); +} + +void fn_1_B2B0(omObjData* arg0, u16* arg1, s16* arg2) { + dataCopy2* temp_r31; + + temp_r31 = arg0->data; + *arg1 = 0; + *arg2 = 0; + if (temp_r31->unk_30 != 0) { + temp_r31->unk_30 -= 1; + return; + } + temp_r31->unk_30 = (frandmod(0x32U) + 15); + if (temp_r31->unk_32 == 4) { + *arg1 = 0x100; + return; + } + if ((s32)frandmod(0xAU) < 2) { + *arg1 = 0x100; + return; + } + if (temp_r31->unk_08 == 0) { + *arg2 = 2; + return; + } + if (temp_r31->unk_08 == 2) { + *arg2 = 1; + return; + } + if (((s32)frand() & 1) != 0) { + *arg2 = 1; + return; + } + *arg2 = 2; +} + +void fn_1_B3C4(omObjData* arg0) { + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + f32 temp_f30; + f32 temp_f29; + f32 temp_f31; + + if (BoardIsKill() == 0) { + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[1]), "fish", &sp14); + sp2C = *(Vec *)arg0->data; + temp_f31 = arg0->work[0]; + temp_f30 = sp2C.y; + sp2C.y = temp_f30 - (0.11666667f * (0.25f * (temp_f31 * temp_f31))); + BoardModelPosGet(lbl_1_bss_FE, &sp20); + sp8.x = 0.0f; + sp8.y = 180.0f; + sp8.z = 0.0f; + BoardModelRotSetV(lbl_1_bss_FE, &sp8); + PSVECAdd(&sp20, &sp2C, &sp20); + sp14.y = sp20.y; + PSVECSubtract(&sp14, &sp20, &sp14); + temp_f29 = PSVECMag(&sp14); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[1]), "fish", &sp14); + if (temp_f29 <= arg0->trans.x) { + sp20.x = sp14.x; + sp20.z = sp14.z; + sp2C.x = sp2C.z = 0.0f; + *(Vec *)arg0->data = sp2C; + } + if ((sp20.y <= sp14.y) && (sp2C.y < 0.0f)) { + sp20.y = sp14.y; + if ((0.0f == BoardModelMotionTimeGet(lbl_1_bss_FE)) && (arg0->work[1] != 0)) { + HuAudFXPlay(0x484); + } + } else { + arg0->work[0] += 1; + } + BoardModelPosSetV(lbl_1_bss_FE, &sp20); + } +} \ No newline at end of file diff --git a/src/REL/w05Dll/mg_item.c b/src/REL/w05Dll/mg_item.c index 1ff66dfc..776e554d 100644 --- a/src/REL/w05Dll/mg_item.c +++ b/src/REL/w05Dll/mg_item.c @@ -9,21 +9,9 @@ #include "game/minigame_seq.h" #include "game/board/model.h" -#include "game/board/player.h" #include "game/board/window.h" #include "game/board/audio.h" -typedef struct UnkStruct { - s16 unk_00; - s16 unk_02; - s16 unk_04; - s16 unk_06; - s16 unk_08; - s16 unk_0A[3]; - s16 unk_10; - s16 unk_12; -} unkStruct; - // data s32 lbl_1_data_310[2] = { 0x79, 0x7A }; char *lbl_1_data_330[3] = { "suika1", "suika2", "suika3" }; @@ -44,24 +32,6 @@ s32 lbl_1_bss_88; s32 lbl_1_bss_7C[3]; AnimData* lbl_1_bss_78; -// prototypes -void fn_1_7284(omObjData*); -void fn_1_7314(void); -void fn_1_73C0(void); -void fn_1_77B0(void); -void fn_1_78A0(omObjData*); -void fn_1_799C(void); -void fn_1_7E4C(omObjData*); -void fn_1_7F04(omObjData*); -void fn_1_80D8(omObjData*); -void fn_1_8410(omObjData*); -void fn_1_850C(omObjData*); -void fn_1_8668(omObjData*); -void fn_1_8798(unkStruct*, s32*, s32*, s32*); -void fn_1_88B8(void); -void fn_1_896C(void); -void fn_1_91DC(void); -void fn_1_9268(ModelData*, ParticleData*, f32[3][4]); void fn_1_6B28(void) { BoardModelAttrSet(*lbl_1_bss_14, 0x40000002U); @@ -392,7 +362,7 @@ void fn_1_7E4C(omObjData* arg0) { omDelObjEx(boardObjMan, arg0); } -void fn_1_7E94(unkStruct* arg0) { +void fn_1_7E94(dataCopy* arg0) { if (--arg0->unk_02 == 0) { arg0->unk_02 = 0x3C; if (--arg0->unk_00 >= 0) { @@ -406,7 +376,7 @@ void fn_1_7F04(omObjData* arg0) { f32 sp8; s32 var_r30; s32 var_r28; - unkStruct* temp_r31; + dataCopy* temp_r31; temp_r31 = arg0->data; temp_r31->unk_00 = 5; @@ -447,7 +417,7 @@ void fn_1_80D8(omObjData* arg0) { f32 var_f31; s32 temp_r30; s32 var_r29; - unkStruct* temp_r31; + dataCopy* temp_r31; temp_r31 = arg0->data; fn_1_7E94(temp_r31); @@ -490,7 +460,7 @@ void fn_1_80D8(omObjData* arg0) { void fn_1_8410(omObjData* arg0) { s32 temp_r30; - unkStruct* temp_r31; + dataCopy* temp_r31; temp_r31 = arg0->data; if (BoardPlayerMotionTimeGet(lbl_1_bss_B6) >= 30.0f) { @@ -544,7 +514,7 @@ void fn_1_8668(omObjData* arg0) { arg0->work[0] -= 1; } -void fn_1_8798(unkStruct* arg0, s32* arg1, s32* arg2, s32* arg3) { +void fn_1_8798(dataCopy* arg0, s32* arg1, s32* arg2, s32* arg3) { *arg1 = *arg2 = *arg3 = 0; if (arg0->unk_10 != 0) { arg0->unk_10 -= 1;