From 74e1c14c3961bc5cdb7ee285d66d40eb8020d8ff Mon Sep 17 00:00:00 2001 From: CreateSource Date: Wed, 24 Apr 2024 10:30:52 -0400 Subject: [PATCH] complete w05Dll/mg_item.c --- config/GMPE01_00/rels/w05Dll/symbols.txt | 96 +-- configure.py | 2 +- src/REL/w05Dll/mg_item.c | 805 ++++++++++++++++++++++- 3 files changed, 853 insertions(+), 50 deletions(-) diff --git a/config/GMPE01_00/rels/w05Dll/symbols.txt b/config/GMPE01_00/rels/w05Dll/symbols.txt index ba96e087..52d9757c 100644 --- a/config/GMPE01_00/rels/w05Dll/symbols.txt +++ b/config/GMPE01_00/rels/w05Dll/symbols.txt @@ -171,48 +171,48 @@ lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x8 scope:local data: lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 scope:local data:4byte 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 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_1E0 = .rodata:0x000001E0; // type:object size:0x8 data:double -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_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:0x8 data:double -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 data:float -lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 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: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_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_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_1E0 = .rodata:0x000001E0; // type:object size:0x8 scope:local data:double +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_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:0x8 scope:local data:double +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:float +lbl_1_rodata_214 = .rodata:0x00000214; // type:object size:0x4 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 +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double +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_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 @@ -285,12 +285,12 @@ lbl_1_data_2A4 = .data:0x000002A4; // type:object size:0x48 lbl_1_data_2EC = .data:0x000002EC; // type:object size:0x8 lbl_1_data_2F4 = .data:0x000002F4; // type:object size:0x18 lbl_1_data_310 = .data:0x00000310; // type:object size:0x8 -lbl_1_data_318 = .data:0x00000318; // type:object size:0x7 data:string -lbl_1_data_31F = .data:0x0000031F; // type:object size:0x7 data:string -lbl_1_data_326 = .data:0x00000326; // type:object size:0xA +lbl_1_data_318 = .data:0x00000318; // type:object size:0x7 scope:local data:string +lbl_1_data_31F = .data:0x0000031F; // type:object size:0x7 scope:local data:string +lbl_1_data_326 = .data:0x00000326; // type:object size:0xA scope:local data:string lbl_1_data_330 = .data:0x00000330; // type:object size:0xC -lbl_1_data_33C = .data:0x0000033C; // type:object size:0x7 data:string -lbl_1_data_343 = .data:0x00000343; // type:object size:0xD data:string +lbl_1_data_33C = .data:0x0000033C; // type:object size:0x7 scope:local data:string +lbl_1_data_343 = .data:0x00000343; // type:object size:0xD scope:local data:string 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 @@ -335,7 +335,7 @@ lbl_1_bss_90 = .bss:0x00000090; // type:object size:0x4 data:4byte lbl_1_bss_94 = .bss:0x00000094; // type:object size:0x4 data:4byte lbl_1_bss_98 = .bss:0x00000098; // type:object size:0x4 data:4byte lbl_1_bss_9C = .bss:0x0000009C; // type:object size:0x2 data:2byte -lbl_1_bss_9E = .bss:0x0000009E; // type:object size:0x2 data:2byte +lbl_1_bss_9E = .bss:0x0000009E; // type:object size:0x4 data:2byte lbl_1_bss_A2 = .bss:0x000000A2; // type:object size:0x2 data:2byte lbl_1_bss_A4 = .bss:0x000000A4; // type:object size:0x6 lbl_1_bss_AA = .bss:0x000000AA; // type:object size:0x6 diff --git a/configure.py b/configure.py index c4996de3..8af7f133 100644 --- a/configure.py +++ b/configure.py @@ -1414,7 +1414,7 @@ config.libs = [ Object(Matching, "REL/w05Dll/hotel.c"), Object(Matching, "REL/w05Dll/monkey.c"), Object(Matching, "REL/w05Dll/dolphin.c"), - Object(NonMatching, "REL/w05Dll/mg_item.c"), + Object(Matching, "REL/w05Dll/mg_item.c"), Object(NonMatching, "REL/w05Dll/mg_coin.c"), } ), diff --git a/src/REL/w05Dll/mg_item.c b/src/REL/w05Dll/mg_item.c index a222501b..1ff66dfc 100644 --- a/src/REL/w05Dll/mg_item.c +++ b/src/REL/w05Dll/mg_item.c @@ -5,6 +5,7 @@ #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" @@ -12,5 +13,807 @@ #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" }; \ No newline at end of file +char *lbl_1_data_330[3] = { "suika1", "suika2", "suika3" }; + +// bss +s16 lbl_1_bss_B6; +s16 lbl_1_bss_B0[3]; +s16 lbl_1_bss_AA[3]; +s16 lbl_1_bss_A4[3]; +s16 lbl_1_bss_A2; +s16 lbl_1_bss_9E[2]; +s16 lbl_1_bss_9C; +Process* lbl_1_bss_98; +omObjData* lbl_1_bss_94; +omObjData* lbl_1_bss_90; +omObjData* lbl_1_bss_8C; +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); + lbl_1_bss_98 = NULL; + lbl_1_bss_78 = NULL; +} + +void fn_1_6B7C(void) { + Vec sp1C; + Vec sp10; + s32 spC; + s32 var_r31; + + lbl_1_bss_B6 = GWSystem.player_curr; + spC = GWPlayer[lbl_1_bss_B6].character; + + for (var_r31 = 0; var_r31 < 2; var_r31++) { + lbl_1_bss_9E[var_r31] = BoardPlayerMotionCreate(lbl_1_bss_B6, lbl_1_data_310[var_r31] | lbl_1_data_124[GWPlayer[lbl_1_bss_B6].character]); + } + lbl_1_bss_A2 = BoardModelCreate(0x790013, NULL, 0); + BoardModelVisibilitySet(lbl_1_bss_A2, 0); + sp1C.x = sp1C.y = sp1C.z = 3.33333f; + BoardModelScaleSetV(lbl_1_bss_A2, &sp1C); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[0]), "chara1", &sp1C); + BoardPlayerPosGet(lbl_1_bss_B6, &sp10); + BoardPlayerPosLerpStart(lbl_1_bss_B6, &sp10, &sp1C, 0x1E); + + while (GWPlayer[lbl_1_bss_B6].moving != 0) { + HuPrcVSleep(); + } + BoardPlayerMotBlendSet(lbl_1_bss_B6, 0, 0xF); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_B6) == 0) { + HuPrcVSleep(); + } + + HuPrcSleep(0x3C); + BoardAudSeqPause(0, 1, 0x3E8); + HuAudFXPlay(0x30D); + fn_1_88B8(); + HuAudFXPlay(0x491); + omVibrate(lbl_1_bss_B6, 0x7FFF, 6, 6); + BoardModelHookSet(lbl_1_bss_14[0], "chara1", BoardPlayerModelGet(lbl_1_bss_B6)); + BoardModelMotionStartEndSet(lbl_1_bss_14[0], 0x1E, 0x5A); + BoardModelAttrReset(lbl_1_bss_14[0], 0x40000002); + BoardMusStart(1, 0x22, 0x7F, 0); + BoardPlayerMotionShiftSet(lbl_1_bss_B6, lbl_1_bss_9E[0], 0.0f, 30.0f, 0x40000001); + HuPrcSleep(0x1E); + BoardModelVisibilitySet(lbl_1_bss_A2, 1); + BoardModelHookSet(BoardPlayerModelGet(lbl_1_bss_B6), "a-itemhook-r", lbl_1_bss_A2); + Hu3DModelObjPosGet(BoardModelIDGet(*lbl_1_bss_14), "chara1", &sp10); + Hu3DModelObjPosGet(BoardModelIDGet(BoardPlayerModelGet(lbl_1_bss_B6)), "a-itemhook-r", &sp1C); + PSVECAdd(&sp1C, &sp10, &sp1C); + sp1C.y += 25.0f; + CharModelLayerSetAll(7); + CharModelEffectCreate(-1, &sp1C); + HuPadRumbleStop(GWPlayer[lbl_1_bss_B6].port); + BoardModelAttrSet(lbl_1_bss_14[0], 0x40000002); + HuPrcSleep(0x1E); + BoardModelAttrReset(lbl_1_bss_14[0], 0x40000002); + omVibrate(lbl_1_bss_B6, 0x7FFF, 6, 6); + HuAudFXPlay(0x492); + + while (BoardModelMotionTimeGet(lbl_1_bss_14[0]) < 90.0f) { + HuPrcVSleep(); + } + BoardModelMotionTimeSet(lbl_1_bss_14[0], 90.0f); + HuPadRumbleStop(GWPlayer[lbl_1_bss_B6].port); + BoardModelHookReset(lbl_1_bss_14[0]); + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + BoardModelHookSet(lbl_1_bss_14[0], lbl_1_data_330[var_r31], lbl_1_bss_AA[var_r31]); + } + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[0]), "chara1", &sp10); + BoardPlayerPosSetV(lbl_1_bss_B6, &sp10); + HuPrcSleep(0x3C); + lbl_1_bss_94 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_7284); + lbl_1_bss_8C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_78A0); + lbl_1_bss_90 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, NULL); + lbl_1_bss_90->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x14, 0x10000000U); + if (lbl_1_bss_78 == NULL) { + lbl_1_bss_78 = HuSprAnimRead(HuDataSelHeapReadNum(0x120000, 0x10000000, HEAP_DATA)); + HuSprAnimLock(lbl_1_bss_78); + } + lbl_1_bss_9C = 0; +} + +void fn_1_7284(omObjData* arg0) { + if ((lbl_1_bss_9C != 0) && (BoardMGDoneFlagGet() == 1)) { + fn_1_77B0(); + fn_1_7314(); + fn_1_73C0(); + omDelObjEx(boardObjMan, arg0); + } +} + +void fn_1_72E4(void) { + lbl_1_bss_9C = 1; + BoardMGExit(); +} + +void fn_1_7314(void) { + s32 var_r31; + + BoardModelHookReset(lbl_1_bss_14[0]); + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + BoardModelKill(lbl_1_bss_A4[var_r31]); + BoardModelKill(lbl_1_bss_AA[var_r31]); + } + if (lbl_1_bss_78 != 0) { + HuSprAnimKill(lbl_1_bss_78); + lbl_1_bss_78 = NULL; + } +} + +void fn_1_73C0(void) { + omDelObjEx(boardObjMan, lbl_1_bss_90); + BoardMGDoneFlagSet(0); +} + +void fn_1_7400(void) { + + while (BoardModelMotionTimeGet(lbl_1_bss_14[0]) < 30.0f) { + HuPrcVSleep(); + } + BoardModelAttrSet(lbl_1_bss_14[0], 0x40000002U); + BoardModelMotionTimeSet(lbl_1_bss_14[0], 30.0f); + lbl_1_bss_98 = HuPrcCreate(fn_1_896C, 0x2004, 0x1000, 0); + HuPrcDestructorSet2(lbl_1_bss_98, fn_1_91DC); + lbl_1_bss_98->user_data = (void* )7; + HuPrcEnd(); +} + +s32 lbl_1_data_350[14] = { + 0x0007006D, 0x0007006E, 0x0007006F, 0x00070070, + 0x00070071, 0x00070072, 0x00070073, 0x00070074, + 0x00070076, 0x00070077, 0x00070078, 0x00070079, + 0x0007007A, 0x0007007B +}; + +s16 lbl_1_data_388[92] = { + 0, 1, -1, 2, 0, -1, 1, 2, + 0, -1, 2, 1, 0, 2, -1, 1, + 0, 2, 1, -1, 1, 2, -1, 0, + 1, 2, 0, -1, 1, -1, 0, 2, + 1, -1, 2, 0, 1, 0, 2, -1, + 1, 0, -1, 2, 2, -1, 0, 1, + 2, -1, 1, 0, 2, 0, 1, -1, + 2, 0, -1, 1, 2, 1, -1, 0, + 2, 1, 0, -1, -1, 0, 1, 2, + -1, 0, 2, 1, -1, 1, 2, 0, + -1, 1, 0, 2, -1, 2, 0, 1, + -1, 2, 1, 0 +}; + +f32 lbl_1_data_440[3] = {-90.0f, 0.0f, 90.0f}; + +void fn_1_74D0(s16 arg0[3]) { + f32 temp_f31; + s32 var_r31; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + lbl_1_bss_B0[var_r31] = arg0[var_r31]; + } + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + lbl_1_bss_A4[var_r31] = BoardModelCreate(lbl_1_data_350[lbl_1_bss_B0[var_r31]], NULL, 0); + if (lbl_1_bss_B0[var_r31] == 0xB) { + BoardModelAttrSet(lbl_1_bss_A4[var_r31], 0x40000001U); + } + if (lbl_1_bss_B0[var_r31] == 5) { + temp_f31 = -50.0f; + Hu3DData[BoardModelIDGet(lbl_1_bss_A4[var_r31])].unk_F0[1][3] = temp_f31; + } + if (lbl_1_bss_B0[var_r31] == 4) { + BoardModelMotionSpeedSet(lbl_1_bss_A4[var_r31], 0.0f); + } + BoardModelVisibilitySet(lbl_1_bss_A4[var_r31], 0); + } + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + lbl_1_bss_AA[var_r31] = BoardModelCreate(0x790012, NULL, 1); + BoardModelHookSet(lbl_1_bss_14[0], lbl_1_data_330[var_r31], lbl_1_bss_AA[var_r31]); + BoardModelAttrSet(lbl_1_bss_AA[var_r31], 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_AA[var_r31], 10.0f); + } + + HuAudFXPlay(0x488); + BoardModelMotionTimeSet(lbl_1_bss_14[0], 0.0f); + BoardModelMotionStartEndSet(lbl_1_bss_14[0], 0, 0x1E); + BoardModelAttrReset(lbl_1_bss_14[0], 0x40000002); + HuPrcCreate(fn_1_7400, 0x2004, 0x1000, 0); +} + +void fn_1_77B0(void) { + HuAudFXPlay(0x489); + BoardModelMotionStartEndSet(lbl_1_bss_14[0], 0x5A, 0x78); + BoardModelMotionTimeSet(lbl_1_bss_14[0], 90.0f); + BoardModelAttrReset(lbl_1_bss_14[0], 0x40000002); + + while (BoardModelMotionEndCheck(lbl_1_bss_14[0]) == 0) { + fn_1_1208(lbl_1_bss_14[6], 0.0f, 6.0f); + HuPrcVSleep(); + } + + while (fn_1_1208(lbl_1_bss_14[6], 0.0f, 6.0f) == 0) { + HuPrcVSleep(); + } +} + +void fn_1_78A0(omObjData* arg0) { + if (arg0->work[0] == 0) { + arg0->work[0] = MGSeqCreate(3, 0); + return; + } + if (MGSeqStatGet(arg0->work[0]) == 0) { + arg0->func = NULL; + lbl_1_bss_90->func = fn_1_7F04; + } +} + +void fn_1_7928(omObjData* arg0) { + Process *temp; + if (((u32)lbl_1_bss_98->user_data & 0x10) != 0) { + temp = HuPrcCreate(fn_1_799C, 0x2004, 0x1800, 0); + temp->user_data = arg0; + arg0->func = NULL; + } +} + +void fn_1_799C(void) { + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + f32 temp_f29; + f32 temp_f30; + f32 var_f31; + s32 temp_r27; + s32 temp_r31; + s32 var_r28; + s32 var_r29; + omObjData* temp_r30; + + temp_r30 = HuPrcCurrentGet()->user_data; + BoardPlayerPosGet(lbl_1_bss_B6, &sp2C); + temp_r31 = temp_r30->work[0]; + BoardModelPosGet(lbl_1_bss_A4[temp_r31], &sp20); + sp2C.y = sp20.y = 0.0f; + PSVECSubtract(&sp2C, &sp20, &sp14); + temp_f30 = PSVECMag(&sp14); + PSVECScale(&sp14, &sp14, 0.016666668); + + for (var_r29 = 0; var_r29 < 0x3C; var_r29++) { + BoardModelPosGet(lbl_1_bss_A4[temp_r31], &sp20); + PSVECAdd(&sp20, &sp14, &sp20); + BoardModelPosSetV(lbl_1_bss_A4[temp_r31], &sp20); + HuPrcVSleep(); + } + BoardModelPosGet(lbl_1_bss_A4[temp_r31], &sp20); + sp20.x = sp2C.x; + sp20.z = sp2C.z; + BoardModelPosSetV(lbl_1_bss_A4[temp_r31], &sp20); + BoardPlayerMotBlendSet(lbl_1_bss_B6, 0, 0xF); + + while (BoardPlayerMotBlendCheck(lbl_1_bss_B6) == 0) { + fn_1_1208(lbl_1_bss_14[6], 90.0f, 6.0f); + HuPrcVSleep(); + } + + while (fn_1_1208(lbl_1_bss_14[6], 90.0f, 6.0f) == 0) { + HuPrcVSleep(); + } + BoardWinCreate(2, 0x27000C, 7); + BoardWinInsertMesSet(lbl_1_bss_B0[temp_r31] + 0x80000, 0); + BoardWinWait(); + BoardWinKill(); + HuPrcKill(lbl_1_bss_98); + lbl_1_bss_98 = NULL; + HuPrcVSleep(); + HuAudFXPlay(0x30D); + BoardModelPosGet(lbl_1_bss_A4[temp_r31], &sp20); + BoardModelScaleGet(lbl_1_bss_A4[temp_r31], &sp8); + var_f31 = sp8.x; + temp_f29 = -0.075f; + temp_f30 = (sp2C.y - sp20.y) / 30.0f; + var_r28 = 0; + HuAudFXFadeOut(lbl_1_bss_88, 0x1F3); + while (var_r28 == 0) { + sp20.y += temp_f30; + var_f31 += temp_f29; + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + var_r28 = 1; + } + sp8.x = sp8.y = sp8.z = var_f31; + BoardModelPosSetV(lbl_1_bss_A4[temp_r31], &sp20); + BoardModelScaleSetV(lbl_1_bss_A4[temp_r31], &sp8); + HuPrcVSleep(); + } + HuAudFXStop(lbl_1_bss_88); + BoardModelVisibilitySet(lbl_1_bss_A4[temp_r31], 0); + BoardPlayerItemAdd(lbl_1_bss_B6, lbl_1_bss_B0[temp_r31]); + omVibrate(lbl_1_bss_B6, 0xC, 6, 6); + temp_r27 = HuAudSStreamPlay(2); + BoardPlayerMotionShiftSet(lbl_1_bss_B6, 7, 0.0f, 5.0f, 0); + + while (BoardPlayerMotionEndCheck(lbl_1_bss_B6) == 0) { + HuPrcVSleep(); + } + HuPrcSleep(0x1E); + + while (HuAudSStreamStatGet(temp_r27) != 0) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 0x3E8); + BoardWinCreate(2, 0x27000D, 7); + BoardWinWait(); + BoardWinKill(); + temp_r30->func = &fn_1_7E4C; + HuPrcEnd(); +} + +void fn_1_7E4C(omObjData* arg0) { + lbl_1_bss_9C = 1; + BoardMGExit(); + omDelObjEx(boardObjMan, arg0); +} + +void fn_1_7E94(unkStruct* arg0) { + if (--arg0->unk_02 == 0) { + arg0->unk_02 = 0x3C; + if (--arg0->unk_00 >= 0) { + MGSeqParamSet(arg0->unk_04, 1, arg0->unk_00); + } + } +} + +void fn_1_7F04(omObjData* arg0) { + f32 spC; + f32 sp8; + s32 var_r30; + s32 var_r28; + unkStruct* temp_r31; + + temp_r31 = arg0->data; + temp_r31->unk_00 = 5; + temp_r31->unk_02 = 0x3C; + temp_r31->unk_04 = MGSeqCreate(1, temp_r31->unk_00, 0x120, 0x40); + HuWinMesMaxSizeGet(1, &sp8, 0x27000E); + temp_r31->unk_06 = HuWinCreate(-10000.0f, 344.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; + + for (var_r30 = 0; var_r30 < 3; var_r30++) { + temp_r31->unk_0A[var_r30] = -1; + } + + for (var_r30 = 0; var_r30 < 2; var_r30++) { + do { + var_r28 = frandmod(3); + } while (temp_r31->unk_0A[var_r28] != -1); + temp_r31->unk_0A[var_r28] = var_r30; + } + + for (var_r30 = 0; var_r30 < 3; var_r30++) { + if (temp_r31->unk_0A[var_r30] == -1) { + temp_r31->unk_0A[var_r30] = 2; + } + } + temp_r31->unk_12 = frandmod(5); + temp_r31->unk_10 = (frandmod(0x1E) + 0xF); + arg0->func = fn_1_80D8; +} + +void fn_1_80D8(omObjData* arg0) { + s32 sp10; + s32 spC; + s32 sp8; + f32 var_f31; + s32 temp_r30; + s32 var_r29; + unkStruct* temp_r31; + + temp_r31 = arg0->data; + fn_1_7E94(temp_r31); + temp_r30 = GWPlayer[lbl_1_bss_B6].port; + if (GWPlayer[lbl_1_bss_B6].com != 0) { + fn_1_8798(temp_r31, &sp10, &spC, &sp8); + } else { + sp10 = HuPadStkX[temp_r30]; + spC = HuPadStkY[temp_r30]; + sp8 = HuPadBtnDown[temp_r30]; + } + + if (((sp8 & 0x100) != 0) || (temp_r31->unk_00 < 0)) { + MGSeqParamSet(temp_r31->unk_04, 2, -1); + HuWinKill(temp_r31->unk_06); + BoardPlayerMotionStart(lbl_1_bss_B6, lbl_1_bss_9E[1], 0); + arg0->func = fn_1_8410; + return; + } + if ((spC != 0) || (sp10 != 0)) { + var_r29 = -1; + var_f31 = (180.0 * (atan2(spC, sp10) / M_PI)); + if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + + if ((var_f31 > 170.0f) && (var_f31 < 190.0f)) { + var_r29 = 0; + } else if ((var_f31 > 260.0f) && (var_f31 < 280.0f)) { + var_r29 = 1; + } else if ((var_f31 < 10.0f) || (var_f31 > 350.0f)) { + var_r29 = 2; + } + if (var_r29 != -1) { + temp_r31->unk_08 = temp_r31->unk_0A[var_r29]; + BoardPlayerRotYSet(lbl_1_bss_B6, lbl_1_data_440[temp_r31->unk_08]); + } + } +} + +void fn_1_8410(omObjData* arg0) { + s32 temp_r30; + unkStruct* temp_r31; + + temp_r31 = arg0->data; + if (BoardPlayerMotionTimeGet(lbl_1_bss_B6) >= 30.0f) { + BoardAudSeqFadeOut(1, 0x64); + HuAudFXPlay(0x486); + HuAudFXPlay(0x487); + temp_r30 = (1 << temp_r31->unk_08); + temp_r30 |= 0x1C0; + lbl_1_bss_98 = HuPrcCreate(fn_1_896C, 0x2004, 0x4000, 0); + HuPrcDestructorSet2(lbl_1_bss_98, fn_1_91DC); + lbl_1_bss_98->user_data = (void*)temp_r30; + lbl_1_bss_8C->work[0] = temp_r31->unk_08; + arg0->func = fn_1_850C; + } +} + +void fn_1_850C(omObjData* arg0) { + Vec sp14; + Vec sp8; + f32 temp_f31; + + temp_f31 = BoardPlayerMotionMaxTimeGet(lbl_1_bss_B6); + if (BoardPlayerMotionTimeGet(lbl_1_bss_B6) >= temp_f31) { + BoardPlayerMotionStart(lbl_1_bss_B6, lbl_1_bss_9E[0], 0x40000001); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[0]), "chara1", &sp8); + Hu3DModelObjPosGet(BoardModelIDGet(BoardPlayerModelGet(lbl_1_bss_B6)), "a-itemhook-r", &sp14); + PSVECAdd(&sp14, &sp8, &sp14); + sp14.y += 25.0f; + CharModelLayerSetAll(7); + CharModelEffectCreate(-1, &sp14); + arg0->work[0] = 0xA; + arg0->func = fn_1_8668; + } +} + +void fn_1_8668(omObjData* arg0) { + s32 var_r30; + + if (arg0->work[0] == 0) { + BoardModelHookReset(BoardPlayerModelGet(lbl_1_bss_B6)); + BoardPlayerMotionShiftSet(lbl_1_bss_B6, 1, 0.0f, 5.0f, 0x40000001); + arg0->func = NULL; + lbl_1_bss_8C->func = fn_1_7928; + BoardModelKill(lbl_1_bss_A2); + + for (var_r30 = 0; var_r30 < 2; var_r30++) { + BoardPlayerMotionKill(lbl_1_bss_B6, lbl_1_bss_9E[var_r30]); + } + return; + } + arg0->work[0] -= 1; +} + +void fn_1_8798(unkStruct* arg0, s32* arg1, s32* arg2, s32* arg3) { + *arg1 = *arg2 = *arg3 = 0; + if (arg0->unk_10 != 0) { + arg0->unk_10 -= 1; + return; + } + arg0->unk_10 = frandmod(0xF) + 10; + if (arg0->unk_12 == 0) { + *arg3 = 0x100; + return; + } + arg0->unk_12 -= 1; + if (((s32)frand() & 1) != 0) { + *arg1 = ((frand() & 1) * 0x8C) - 0x46; + return; + } + *arg2 = ((frand() & 1) * 0x8C) - 0x46; +} + +void* fn_1_8884(void) { + if (lbl_1_bss_98 == NULL) { + return NULL; + } + return lbl_1_bss_98->user_data; +} + +void fn_1_88B8(void) { + s32 userData = (s32)lbl_1_bss_98->user_data; + userData |= 8; + lbl_1_bss_98->user_data = (void* ) (userData); + + while (((u32)fn_1_8884() & 0x20) == 0) { + HuPrcVSleep(); + } + HuPrcKill(lbl_1_bss_98); + lbl_1_bss_98 = NULL; +} + +void fn_1_896C(void) { + Vec sp18; + Vec spC; + f32 sp8; + f32 temp_f29; + f32 var_f30; + f32 var_f31; + u32 temp_r30; + s32 var_r28; + s32 var_r31; + s32 var_r29; + ParticleData *var_r27; + + temp_r30 = (u32)HuPrcCurrentGet()->user_data; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_r29 = (1 << var_r31); + if ((temp_r30 & var_r29) != 0) { + BoardModelAttrReset(lbl_1_bss_AA[var_r31], 0x40000002); + if ((temp_r30 & 0x80) != 0) { + BoardModelMotionStartEndSet(lbl_1_bss_AA[var_r31], 0, 0x28); + BoardModelMotionTimeSet(lbl_1_bss_AA[var_r31], 0.0f); + } else { + BoardModelMotionStartEndSet(lbl_1_bss_AA[var_r31], 0xA, 0x28); + BoardModelMotionTimeSet(lbl_1_bss_AA[var_r31], 10.0f); + } + } + } + if ((temp_r30 & 0x80) != 0) { + HuPrcSleep(0x19); + } else { + HuPrcSleep(0xF); + } + spC.x = spC.y = spC.z = 0.0f; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_r29 = (1 << var_r31); + if ((temp_r30 & var_r29) != 0) { + BoardModelVisibilitySet(lbl_1_bss_A4[var_r31], 1); + BoardModelScaleSetV(lbl_1_bss_A4[var_r31], &spC); + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_14[0]), lbl_1_data_330[var_r31], &sp18); + BoardModelPosSetV(lbl_1_bss_A4[var_r31], &sp18); + if ((temp_r30 & 0x40) != 0) { + lbl_1_bss_7C[var_r31] = Hu3DParticleCreate(lbl_1_bss_78, 0x64); + var_r27 = Hu3DData[lbl_1_bss_7C[var_r31]].unk_120; + var_r27->unk_02 = lbl_1_bss_A4[var_r31]; + Hu3DParticleHookSet(lbl_1_bss_7C[var_r31], fn_1_9268); + Hu3DParticleColSet(lbl_1_bss_7C[var_r31], 0xFF, 0xFF, 0); + Hu3DModelPosSet(lbl_1_bss_7C[var_r31], 0.0f, 0.0f, 0.0f); + Hu3DParticleBlendModeSet(lbl_1_bss_7C[var_r31], 1); + Hu3DModelLayerSet(lbl_1_bss_7C[var_r31], 2); + } + if ((temp_r30 & 0x100) != 0) { + lbl_1_bss_88 = HuAudFXPlay(0x35F); + HuAudFXPlay(0x310); + } else { + HuAudFXPlay(0x362); + } + } + } + temp_f29 = 150.0f + sp18.y; + sp8 = 0.0f; + var_f31 = 12.0f; + +loop_20: + for (var_r28 = 0, var_r31 = 0; var_r31 < 3; var_r31++) { + var_r29 = (1 << var_r31); + if ((temp_r30 & var_r29) != 0) { + var_r28++; + sp8 += 0.1f; + if (sp8 > 1.0f) { + sp8 = 1.0f; + } + + spC.x = spC.y = spC.z = sp8; + BoardModelScaleSetV(lbl_1_bss_A4[var_r31], (Vec* ) &sp8); //! + BoardModelPosGet(lbl_1_bss_A4[var_r31], &sp18); + sp18.y += var_f31; + if (sp18.y >= temp_f29) { + sp18.y = temp_f29; + var_r28 -= 1; + } + BoardModelPosSetV(lbl_1_bss_A4[var_r31], &sp18); + } + } + var_f31 *= 0.95f; + if (var_r28 > 0) { + HuPrcVSleep(); + goto loop_20; + } + spC.x = spC.y = spC.z = 1.0f; + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_r29 = (1 << var_r31); + if ((temp_r30 & var_r29) != 0) { + BoardModelScaleSetV(lbl_1_bss_A4[var_r31], &spC); + } + } + temp_r30 = (u32) HuPrcCurrentGet()->user_data | 0x10; + HuPrcCurrentGet()->user_data = (void*)temp_r30; + var_f30 = 0.0f; + +loop_37: + temp_r30 = (u32) HuPrcCurrentGet()->user_data; + if ((temp_r30 & 8) == 0) { + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_r29 = (1 << var_r31); + if ((temp_r30 & var_r29) != 0) { + BoardModelPosGet(lbl_1_bss_A4[var_r31], &sp18); + sp18.y = (sp18.y + (0.25 * sin((M_PI * var_f30) / 180.0))); + BoardModelPosSetV(lbl_1_bss_A4[var_r31], &sp18); + } + } + var_f30 += 5.0f; + if (var_f30 >= 360.0f) { + var_f30 -= 360.0f; + } + HuPrcVSleep(); + goto loop_37; + } + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + BoardModelMotionStartEndSet(lbl_1_bss_AA[var_r31], 0x28, 0x46); + } + HuPrcSleep(0xD); + var_f31 = -8.0f; +loop_50: + for (var_r28 = 0, var_r31 = 0; var_r31 < 3; var_r31++) { + var_r29 = (1 << var_r31); + if ((temp_r30 & var_r29) != 0) { + var_r28++; + sp8 -= 0.02f; + if (sp8 < 0.0f) { + sp8 = 0.0f; + } + spC.x = spC.y = spC.z = sp8; + BoardModelScaleSetV(lbl_1_bss_A4[var_r31], (Vec* ) &sp8); //! + BoardModelPosGet(lbl_1_bss_A4[var_r31], &sp18); + sp18.y += var_f31; + if (sp18.y <= (temp_f29 - 150.0f)) { + sp18.y = temp_f29 - 150.0f; + } + if (BoardModelMotionTimeGet(lbl_1_bss_AA[var_r31]) >= 70.0f) { + var_r28--; + } + BoardModelPosSetV(lbl_1_bss_A4[var_r31], &sp18); + } + } + var_f31 *= 0.98f; + if (var_r28 > 0) { + HuPrcVSleep(); + goto loop_50; + } + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_r29 = (1 << var_r31); + if ((temp_r30 & var_r29) != 0) { + spC.x = spC.y = spC.z = 1.0f; + BoardModelScaleSetV(lbl_1_bss_A4[var_r31], &spC); + BoardModelVisibilitySet(lbl_1_bss_A4[var_r31], 0); + } + } + temp_r30 = (u32)HuPrcCurrentGet()->user_data; + temp_r30 |= 0x20; + HuPrcCurrentGet()->user_data = (void*)temp_r30; + while (1) { + HuPrcVSleep(); + } +} + +void fn_1_91DC(void) { + u32 temp_r30; + s32 var_r29; + s32 var_r31; + + temp_r30 = (u32)HuPrcCurrentGet()->user_data; + if ((temp_r30 & 0x40) != 0) { + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_r29 = (1 << var_r31); + if ((temp_r30 & var_r29) != 0) { + Hu3DModelKill(lbl_1_bss_7C[var_r31]); + } + } + } +} + +void fn_1_9268(ModelData* model, ParticleData* particle, f32 (*matrix)[4]) { + Vec sp8; + HsfanimStruct01* var_r31; + f32 temp_f30; + f32 temp_f29; + f32 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; + } + BoardModelScaleGet(particle->unk_02, &sp8); + temp_f31 = sp8.x; + BoardModelPosGet(particle->unk_02, &sp8); + + for (var_r29 = 0; var_r29 < 0x16; var_r29++) { + 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 = 360.0f * (0.003921569f * (s32)(frand() & 0xFF)); + temp_f29 = temp_f31 * (20.0f + (60.0f * (0.003921569f * (s32)(frand() & 0xFF)))); + 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 * (s32)(frand() & 0xFF))))); + var_r31->unk08.x = 0.5f + (3.0f * (0.003921569f * (s32)(frand() & 0xFF))); + var_r31->unk08.y = 0.3f + (2.0f * (0.003921569f * (s32)(frand() & 0xFF))); + var_r31->unk40.a = 0xB4; + var_r31->unk2C = 15.0f * temp_f31; + } + } + var_r31 = particle->unk_48; + for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + if (0.0f != var_r31->unk2C) { + 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; + } + } + } +} \ No newline at end of file