From 4b631c2770fa36a2bf648508e3dc9074fab9d18e Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Mon, 10 Jun 2024 23:48:49 -0500 Subject: [PATCH] Decompile mg_coin.c Progress is 33.33% or 1/3rd --- config/GMPE01_00/rels/w02Dll/symbols.txt | 71 +-- configure.py | 2 +- src/REL/w02Dll/mg_coin.c | 683 +++++++++++++++++++++++ 3 files changed, 720 insertions(+), 36 deletions(-) create mode 100644 src/REL/w02Dll/mg_coin.c diff --git a/config/GMPE01_00/rels/w02Dll/symbols.txt b/config/GMPE01_00/rels/w02Dll/symbols.txt index bc6f7e5e..81c1bca4 100644 --- a/config/GMPE01_00/rels/w02Dll/symbols.txt +++ b/config/GMPE01_00/rels/w02Dll/symbols.txt @@ -165,39 +165,39 @@ lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data: lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 scope:local data:float lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data:double -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 data:double -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 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_1C8 = .rodata:0x000001C8; // type:object size:0x8 data:double -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 data:double -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 data:double -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float -lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 data:float -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float -lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 data:float -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_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x8 scope:local data:double +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 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_1C8 = .rodata:0x000001C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 scope:local data:float +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:0x4 scope:local data:float +lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float +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:0x8 data:byte lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 data:float lbl_1_rodata_224 = .rodata:0x00000224; // type:object size:0x4 data:float @@ -383,7 +383,7 @@ lbl_1_data_39C = .data:0x0000039C; // type:object size:0x24 lbl_1_data_3C0 = .data:0x000003C0; // type:object size:0x24 lbl_1_data_3E4 = .data:0x000003E4; // type:object size:0x20 lbl_1_data_404 = .data:0x00000404; // type:object size:0x20 -lbl_1_data_424 = .data:0x00000424; // type:object size:0x4 +lbl_1_data_424 = .data:0x00000424; // type:object size:0x4 scope:local lbl_1_data_428 = .data:0x00000428; // type:object size:0x38 lbl_1_data_460 = .data:0x00000460; // type:object size:0x5 data:string lbl_1_data_465 = .data:0x00000465; // type:object size:0x6 data:string @@ -408,7 +408,8 @@ lbl_1_bss_54 = .bss:0x00000054; // type:object size:0x4 data:4byte lbl_1_bss_58 = .bss:0x00000058; // type:object size:0x4 data:4byte lbl_1_bss_5C = .bss:0x0000005C; // type:object size:0x28 data:2byte lbl_1_bss_84 = .bss:0x00000084; // type:object size:0x2 data:2byte -lbl_1_bss_86 = .bss:0x00000086; // type:object size:0xE data:2byte +lbl_1_bss_86 = .bss:0x00000086; // type:object size:0x2 data:2byte +lbl_1_bss_88 = .bss:0x00000088; // type:object size:0xC data:4byte lbl_1_bss_94 = .bss:0x00000094; // type:object size:0xC data:4byte lbl_1_bss_A0 = .bss:0x000000A0; // type:object size:0x2 data:2byte lbl_1_bss_A4 = .bss:0x000000A4; // type:object size:0x4 data:4byte diff --git a/configure.py b/configure.py index fd82e277..97b5852e 100644 --- a/configure.py +++ b/configure.py @@ -1486,7 +1486,7 @@ config.libs = [ Object(Matching, "REL/w02Dll/main.c"), Object(Matching, "REL/w02Dll/gendice.c"), Object(Matching, "REL/w02Dll/gamble.c"), - Object(NonMatching, "REL/w02Dll/mg_coin.c"), + Object(Matching, "REL/w02Dll/mg_coin.c"), Object(NonMatching, "REL/w02Dll/mg_item.c"), Object(NonMatching, "REL/w02Dll/shuffleboard.c"), Object(Matching, "REL/w02Dll/roulette.c"), diff --git a/src/REL/w02Dll/mg_coin.c b/src/REL/w02Dll/mg_coin.c new file mode 100644 index 00000000..d1cf3755 --- /dev/null +++ b/src/REL/w02Dll/mg_coin.c @@ -0,0 +1,683 @@ +#include "REL/w02Dll.h" +#include "game/audio.h" +#include "game/pad.h" +#include "game/objsub.h" +#include "game/frand.h" +#include "game/objsub.h" +#include "game/chrman.h" + +#include "ext_math.h" + +#include "game/minigame_seq.h" + +s16 lbl_1_bss_C2[3]; +s16 lbl_1_bss_BC[3]; +float lbl_1_bss_B0[3]; +omObjData *lbl_1_bss_AC; +omObjData *lbl_1_bss_A8; +omObjData *lbl_1_bss_A4; +u16 lbl_1_bss_A0; +Vec lbl_1_bss_94; +Vec lbl_1_bss_88; +s16 lbl_1_bss_86; +s16 lbl_1_bss_84; +s16 lbl_1_bss_5C[20]; +s32 lbl_1_bss_58; + +Vec lbl_1_data_378[3] = { + { -45, 155, 108 }, + { 0, 155, 108 }, + { 45, 155, 108 } +}; + +Vec lbl_1_data_39C[3] = { + { -45, 25, 200 }, + { 0, 25, 200 }, + { 45, 25, 200 } +}; + +s32 lbl_1_data_3C0[9] = { + 5, 10, 20, + 5, 10, 20, + 5, 10, 20 +}; + +s32 lbl_1_data_3E4[8] = { + 0x5F0008, + 0x1A0008, + 0x6D0008, + 0x8A0008, + 0x850008, + 0x110008, + 0x0D0008, + 0x810008 +}; + +s32 lbl_1_data_404[8] = { + 0x5F000A, + 0x1A000A, + 0x6D000A, + 0x8A000A, + 0x85000A, + 0x11000A, + 0x0D000A, + 0x81000A +}; + +void fn_1_51B4(Vec *arg0); + +void fn_1_39F4(void) +{ + Vec sp8; + s32 temp_r31; + BoardModelVisibilitySet(lbl_1_bss_30[7], 1); + BoardModelVisibilitySet(lbl_1_bss_30[8], 1); + BoardModelVisibilitySet(lbl_1_bss_30[9], 0); + BoardModelAttrSet(lbl_1_bss_30[8], 0x40000002); + BoardModelAttrSet(lbl_1_bss_30[9], 0x40000003); + BoardModelAttrSet(lbl_1_bss_30[7], 0x40000001); + BoardModelPosGet(lbl_1_bss_30[8], &lbl_1_bss_94); + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_C2[temp_r31] = BoardModelCreate(0x760013, NULL, 1); + lbl_1_bss_BC[temp_r31] = BoardModelCreate(0x760014, NULL, 1); + BoardModelAttrSet(lbl_1_bss_BC[temp_r31], 0x40000002); + lbl_1_bss_B0[temp_r31] = (s32)frandmod(9)*40.0f; + sp8.x = lbl_1_bss_B0[temp_r31]; + sp8.y = sp8.z = 0; + BoardModelRotSetV(lbl_1_bss_C2[temp_r31], &sp8); + } + BoardModelPosSetV(lbl_1_bss_30[7], &lbl_1_bss_94); + fn_1_51B4(&lbl_1_bss_94); +} + +void fn_1_3F0C(omObjData *object); +void fn_1_4050(omObjData *object); + +typedef struct work_mgcoin_player { + float unk0[3]; + float unkC[3]; + float unk18[3]; + s16 unk24[3]; +} WorkMGCoinPlayer; + +typedef struct work_mgcoin { + float unk0; + float unk4; + s16 unk8; + Vec unkC; + s16 unk18; + s16 unk1A; + s16 unk1C; + s16 unk1E; + s16 unk20; +} WorkMGCoin; + +void fn_1_3BF4(void) +{ + Vec sp8; + + s32 temp_r31; + WorkMGCoinPlayer *temp_r30; + lbl_1_bss_86 = GWSystem.player_curr; + lbl_1_bss_AC = omAddObjEx(boardObjMan, 257, 0, 0, -1, fn_1_3F0C); + lbl_1_bss_A4 = omAddObjEx(boardObjMan, 257, 0, 0, -1, fn_1_4050); + lbl_1_bss_A8 = omAddObjEx(boardObjMan, 257, 0, 2, -1, NULL); + lbl_1_bss_A8->motion[0] = BoardPlayerMotionCreate(lbl_1_bss_86, lbl_1_data_3E4[GWPlayer[lbl_1_bss_86].character]); + lbl_1_bss_A8->motion[1] = BoardPlayerMotionCreate(lbl_1_bss_86, lbl_1_data_404[GWPlayer[lbl_1_bss_86].character]); + lbl_1_bss_A4->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkMGCoinPlayer), MEMORY_DEFAULT_NUM); + temp_r30 = lbl_1_bss_A4->data; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r30->unk0[temp_r31] = lbl_1_bss_B0[temp_r31]; + temp_r30->unkC[temp_r31] = 0; + temp_r30->unk18[temp_r31] = 0; + temp_r30->unk24[temp_r31] = 0; + } + lbl_1_bss_A8->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkMGCoin), MEMORY_DEFAULT_NUM); + BoardPlayerPosGet(lbl_1_bss_86, &sp8); + lbl_1_bss_A8->trans.x = sp8.x; + lbl_1_bss_A8->trans.y = sp8.y; + lbl_1_bss_A8->trans.z = sp8.z; + for(temp_r31=0; temp_r31<20; temp_r31++) { + lbl_1_bss_5C[temp_r31] = BoardModelCreate(0x7000A, NULL, 1); + BoardModelVisibilitySet(lbl_1_bss_5C[temp_r31], 0); + } + lbl_1_bss_A0 = 0; +} + +void fn_1_3F94(void); + +void fn_1_3F0C(omObjData *object) +{ + if(lbl_1_bss_A0 && BoardMGDoneFlagGet() == 1) { + fn_1_3F94(); + omDelObjEx(boardObjMan, object); + } +} + +void fn_1_3F64(void) +{ + lbl_1_bss_A0 = 1; + BoardMGExit(); +} + +void fn_1_3F94(void) +{ + s32 temp_r31; + BoardPlayerMotionKill(lbl_1_bss_86, lbl_1_bss_A8->motion[0]); + BoardPlayerMotionKill(lbl_1_bss_86, lbl_1_bss_A8->motion[1]); + omDelObjEx(boardObjMan, lbl_1_bss_A8); + for(temp_r31=0; temp_r31<20; temp_r31++) { + BoardModelKill(lbl_1_bss_5C[temp_r31]); + } + BoardMGDoneFlagSet(0); +} + +void fn_1_4100(omObjData *object); + +void fn_1_4050(omObjData *object) +{ + if(object->work[0] == 0) { + object->work[0] = MGSeqStartCreate(); + return; + } + if(MGSeqStatGet(object->work[0])) { + return; + } + object->func = fn_1_4100; + BoardModelMotionTimeSet(lbl_1_bss_30[8], 0); + BoardModelAttrReset(lbl_1_bss_30[8], 0x40000006); + HuAudFXPlay(1062); +} + +void fn_1_41B8(omObjData *object); + +void fn_1_4100(omObjData *object) +{ + if(BoardModelMotionTimeGet(lbl_1_bss_30[8]) >= BoardModelMotionMaxTimeGet(lbl_1_bss_30[8])) { + object->work[0] = 0; + object->work[1] = 0; + object->work[2] = 1; + object->work[3] = 0; + object->func = fn_1_41B8; + BoardModelAttrSet(lbl_1_bss_30[8], 0x40000004); + lbl_1_bss_58 = HuAudFXPlay(1063); + } +} + +void fn_1_4378(omObjData *object); +void fn_1_5290(omObjData *object); + +void fn_1_41B8(omObjData *object) +{ + Vec sp8; + WorkMGCoinPlayer *temp_r30; + s32 temp_r29; + s32 temp_r28; + u32 temp_r27; + temp_r30 = object->data; + if(object->work[1] == 0) { + object->work[0] |= object->work[2]; + object->work[1] = 12; + object->work[2] <<= 1; + } else { + object->work[1]--; + } + sp8.y = sp8.z = 0; + temp_r28 = 0; + for(temp_r29=0; temp_r29<3; temp_r29++) { + temp_r27 = 1 << temp_r29; + if(object->work[0] & temp_r27) { + temp_r30->unkC[temp_r29] += 0.25f; + if(temp_r30->unkC[temp_r29] > 5.0f) { + temp_r30->unkC[temp_r29] = 5.0f; + temp_r28++; + } + temp_r30->unk0[temp_r29] += temp_r30->unkC[temp_r29]; + if(temp_r30->unk0[temp_r29] >= 360.0f) { + temp_r30->unk0[temp_r29] -= 360.0f; + } + sp8.x = temp_r30->unk0[temp_r29]; + BoardModelRotSetV(lbl_1_bss_C2[temp_r29], &sp8); + } + } + if(temp_r28 == 3) { + object->func = fn_1_4378; + lbl_1_bss_A8->func = fn_1_5290; + } + +} + +void fn_1_4698(omObjData *object); + +void fn_1_46E8(void); + +void fn_1_4378(omObjData *object) +{ + Vec sp8; + float temp_f31; + WorkMGCoinPlayer *temp_r31; + s32 temp_r30; + s32 temp_r28; + Process *temp_r27; + temp_r31 = object->data; + sp8.y = sp8.z = 0; + for(temp_r30=0; temp_r30<3; temp_r30++) { + temp_r28 = 1<work[0] & temp_r28) { + if(object->work[3] & temp_r28) { + temp_r31->unk18[temp_r30] = 360; + temp_r31->unk24[temp_r30] = 1; + object->work[3] &= ~temp_r28; + } + if(temp_r31->unk24[temp_r30]) { + if(0.0f == temp_r31->unk18[temp_r30]) { + temp_f31 = fmod(temp_r31->unk0[temp_r30], 40.0); + if(temp_f31+temp_r31->unkC[temp_r30] >= 40.0f) { + temp_r31->unk0[temp_r30] += (temp_f31+temp_r31->unkC[temp_r30])-40.0f; + temp_f31 = 0; + } + if(0.0f == temp_f31) { + HuAudFXPlay(1067); + object->work[0] &= ~temp_r28; + temp_r31->unkC[temp_r30] = 0; + lbl_1_bss_A8->work[2] = 60; + if(temp_r30 != 2) { + lbl_1_bss_A8->func = fn_1_5290; + } else { + BoardAudSeqFadeOut(1, 100); + temp_r27 = HuPrcCreate(fn_1_46E8, 8196, 6144, 0); + temp_r27->user_data = object; + HuAudFXStop(lbl_1_bss_58); + object->func = fn_1_4698; + } + } + } else { + temp_r31->unk18[temp_r30] -= temp_r31->unkC[temp_r30]; + if(temp_r31->unk18[temp_r30] < 0.0f) { + temp_r31->unk18[temp_r30] = 0.0f; + } + } + } + temp_r31->unk0[temp_r30] += temp_r31->unkC[temp_r30]; + if(temp_r31->unk0[temp_r30] >= 360.0f) { + temp_r31->unk0[temp_r30] -= 360.0f; + } + } + sp8.x = temp_r31->unk0[temp_r30]; + BoardModelRotSetV(lbl_1_bss_C2[temp_r30], &sp8); + } +} + +void fn_1_4698(omObjData *object) +{ + if(msmMusGetStatus(1) == 0) { + BoardAudSeqPause(0, 0, 1000); + object->func = NULL; + } +} + +void fn_1_511C(omObjData *object); + +void fn_1_46E8(void) +{ + Vec sp21C[20]; + Vec sp12C[20]; + Vec sp3C[20]; + s32 sp30[3]; + Vec sp24; + Vec sp18; + Vec spC; + char sp8[4]; + float temp_f31; + s32 temp_r31; + s32 temp_r30; + s32 temp_r29; + s32 temp_r28; + omObjData *temp_r27; + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelRotGet(lbl_1_bss_C2[temp_r31], &sp24); + sp30[temp_r31] = lbl_1_data_3C0[(int)(sp24.x/40.0f)]; + } + if(sp30[0] == sp30[1] && sp30[0] == sp30[2]) { + lbl_1_bss_84 = sp30[0]; + } else { + lbl_1_bss_84 = 1; + } + if(lbl_1_bss_84 != 1) { + BoardModelVisibilitySet(lbl_1_bss_30[9], 1); + BoardModelAttrReset(lbl_1_bss_30[9], 0x40000002); + } + sprintf(sp8, "%d", lbl_1_bss_84); + BoardWinCreate(2, 0x130013, 4); + BoardWinInsertMesSet((u32)sp8, 0); + BoardWinWait(); + BoardWinKill(); + BoardCameraTargetModelSet(-1); + temp_r30 = 0; + temp_r29 = 45; + temp_f31 = 0; + sp18 = lbl_1_bss_94; + HuAudFXPlay(1065); + while(1) { + temp_r28 = 0; + if(temp_r29 == 0 && temp_r30 < lbl_1_bss_84) { + HuAudFXPlay(18); + BoardModelVisibilitySet(lbl_1_bss_5C[temp_r30], 1); + sp21C[temp_r30].x = -5.0f+((1.0f/255.0f)*(10.0f*frand8())); + sp21C[temp_r30].y = 212.5f; + sp21C[temp_r30].z = 130.0f; + VECAdd(&sp21C[temp_r30], &sp18, &sp21C[temp_r30]); + BoardModelPosSetV(lbl_1_bss_5C[temp_r30], &sp21C[temp_r30]); + sp12C[temp_r30].x = -1.0f+((1.0f/255.0f)*(2.0f*frand8())); + sp12C[temp_r30].y = 18.0f; + sp12C[temp_r30].z = 0.0f; + temp_r29 = frandmod(3)+5; + temp_r30++; + } else { + temp_r29--; + } + for(temp_r31=0; temp_r31= 500.0f) { + BoardModelVisibilitySet(lbl_1_bss_5C[temp_r31], 0); + temp_r28++; + } else { + VECAdd(&sp21C[temp_r31], &sp12C[temp_r31], &sp21C[temp_r31]); + } + BoardModelPosSetV(lbl_1_bss_5C[temp_r31], &sp21C[temp_r31]); + } + sp18.y += 0.8f*sind(temp_f31); + temp_f31 += 45.0f; + if(temp_f31 >= 360.0f) { + temp_f31 -= 360.0f; + } + fn_1_51B4(&sp18); + if(temp_r28 == lbl_1_bss_84) { + break; + } + HuPrcVSleep(); + } + fn_1_51B4(&lbl_1_bss_94); + BoardModelAttrSet(lbl_1_bss_30[9], 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_30[9], 0); + BoardModelVisibilitySet(lbl_1_bss_30[9], 0); + BoardPlayerPosGet(lbl_1_bss_86, &sp18); + for(temp_r31=0; temp_r31= 360.0f) { + sp3C[temp_r31].y -= 360.0f; + } + BoardModelRotSetV(lbl_1_bss_5C[temp_r31], &sp3C[temp_r31]); + if(sp21C[temp_r31].y <= 80.0f+sp18.y) { + spC = sp21C[temp_r31]; + CharModelCoinEffectCreate(1, &spC); + BoardModelVisibilitySet(lbl_1_bss_5C[temp_r31], 0); + temp_r30++; + BoardPlayerCoinsAdd(lbl_1_bss_86, 1); + HuAudFXPlay(7); + omVibrate(lbl_1_bss_86, 12, 6, 6); + } + } + temp_f31 *= 1.05f; + if(temp_f31 < -20.0f) { + temp_f31 = -20.0f; + } + if(temp_r30 == lbl_1_bss_84) { + BoardPlayerMotionShiftSet(lbl_1_bss_86, 7, 0, 10, 0); + break; + } + HuPrcVSleep(); + } + while(!BoardPlayerMotionEndCheck(lbl_1_bss_86)) { + HuPrcVSleep(); + } + fn_1_121C(0x130014); + temp_r27 = HuPrcCurrentGet()->user_data; + temp_r27->func = fn_1_511C; + HuPrcEnd(); +} + +void fn_1_511C(omObjData *object) +{ + Vec spC; + s32 temp_r31; + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelRotGet(lbl_1_bss_C2[temp_r31], &spC); + lbl_1_bss_B0[temp_r31] = spC.x; + } + fn_1_3F64(); + omDelObjEx(boardObjMan, object); +} + +void fn_1_51B4(Vec *arg0) +{ + s32 temp_r31; + Vec sp8; + BoardModelPosSetV(lbl_1_bss_30[8], arg0); + BoardModelPosSetV(lbl_1_bss_30[9], arg0); + for(temp_r31=0; temp_r31<3; temp_r31++) { + VECAdd(arg0, &lbl_1_data_378[temp_r31], &sp8); + BoardModelPosSetV(lbl_1_bss_C2[temp_r31], &sp8); + VECAdd(arg0, &lbl_1_data_39C[temp_r31], &sp8); + BoardModelPosSetV(lbl_1_bss_BC[temp_r31], &sp8); + } +} + +void fn_1_53B8(omObjData *object); + +void fn_1_5290(omObjData *object) +{ + WorkMGCoin *temp_r31; + float sp8[2]; + if(object->work[2] == 0) { + temp_r31 = object->data; + temp_r31->unk18 = 5; + temp_r31->unk1A = 60; + temp_r31->unk1C = MGSeqTimerCreateXY(temp_r31->unk18, 288, 64); + HuWinMesMaxSizeGet(1, sp8, 0x130015); + temp_r31->unk1E = HuWinCreate(-10000, 400, sp8[0], sp8[1], 0); + HuWinMesSet(temp_r31->unk1E, 0x130015); + HuWinBGTPLvlSet(temp_r31->unk1E, 0); + HuWinMesSpeedSet(temp_r31->unk1E, 0); + temp_r31->unk20 = frandmod(100)+20; + object->func = fn_1_53B8; + } else { + object->work[2]--; + } +} + +void fn_1_5634(omObjData *object); + +void fn_1_53B8(omObjData *object) +{ + Vec sp14; + Vec sp8; + WorkMGCoin *temp_r31; + s32 temp_r29; + s32 temp_r28; + temp_r31 = object->data; + temp_r28 = GWPlayer[lbl_1_bss_86].port; + if(--temp_r31->unk1A == 0) { + temp_r31->unk1A = 60; + if(--temp_r31->unk18 >= 0) { + MGSeqParamSet(temp_r31->unk1C, 1, temp_r31->unk18); + } + } + if(!GWPlayer[lbl_1_bss_86].com) { + temp_r29 = HuPadBtnDown[temp_r28]; + } else { + if(--temp_r31->unk20 == 0) { + temp_r29 = PAD_BUTTON_A; + } + } + if((temp_r29 & PAD_BUTTON_A) || temp_r31->unk18 < 0) { + MGSeqParamSet(temp_r31->unk1C, 2, -1); + HuWinKill(temp_r31->unk1E); + BoardPlayerMotionShiftSet(lbl_1_bss_86, 4, 0, 5, 0); + temp_r31->unk0 = 10; + temp_r31->unk4 = 0; + if(lbl_1_bss_A4->work[0] & 0x1) { + temp_r31->unk8 = 0; + } else { + if(lbl_1_bss_A4->work[0] & 0x2) { + temp_r31->unk8 = 1; + } else { + temp_r31->unk8 = 2; + } + } + BoardPlayerPosGet(lbl_1_bss_86, &sp14); + sp8 = lbl_1_bss_94; + VECAdd(&sp8, &lbl_1_data_39C[temp_r31->unk8], &sp8); + VECSubtract(&sp8, &sp14, &temp_r31->unkC); + VECScale(&temp_r31->unkC, &temp_r31->unkC, 0.05f); + object->work[0] = 1; + object->func = fn_1_5634; + } +} + +void fn_1_5868(omObjData *object); + +void fn_1_5634(omObjData *object) +{ + Vec sp14; + Vec sp8; + float temp_f31; + WorkMGCoin *temp_r31; + temp_r31 = object->data; + if(object->work[0] == 1) { + BoardPlayerPosGet(lbl_1_bss_86, &sp14); + temp_r31->unkC.y = temp_r31->unk0-(0.075f*(0.25f*(temp_r31->unk4*temp_r31->unk4))); + temp_r31->unk4++; + VECAdd(&sp14, &temp_r31->unkC, &sp14); + if(sp14.y <= lbl_1_bss_94.y) { + sp14.y = lbl_1_bss_94.y; + } + BoardPlayerPosSetV(lbl_1_bss_86, &sp14); + sp8 = lbl_1_bss_94; + VECAdd(&sp8, &lbl_1_data_39C[temp_r31->unk8], &sp8); + sp8.y = sp14.y = 0; + VECSubtract(&sp8, &sp14, &sp14); + temp_f31 = VECMag(&sp14); + if(temp_f31 <= 1.0f) { + BoardPlayerMotionStart(lbl_1_bss_86, object->motion[0], 0); + object->work[0] = 0; + } + } else { + if(BoardPlayerMotionTimeGet(lbl_1_bss_86) >= BoardPlayerMotionMaxTimeGet(lbl_1_bss_86)) { + temp_r31->unk0 = -5; + temp_r31->unk4 = 0; + temp_r31->unkC.x = temp_r31->unkC.z = 0; + object->func = fn_1_5868; + } + } +} + +void fn_1_5AC0(omObjData *object); + +void fn_1_5868(omObjData *object) +{ + Vec sp14; + Vec sp8; + WorkMGCoin *temp_r31; + temp_r31 = object->data; + BoardPlayerPosGet(lbl_1_bss_86, &sp14); + temp_r31->unkC.y = temp_r31->unk0-(0.075f*(0.25f*(temp_r31->unk4*temp_r31->unk4))); + temp_r31->unk4++; + VECAdd(&sp14, &temp_r31->unkC, &sp14); + sp8 = lbl_1_bss_94; + VECAdd(&sp8, &lbl_1_data_39C[temp_r31->unk8], &sp8); + sp8.y += 16.0f; + if(sp14.y <= sp8.y) { + sp14.y = sp8.y; + } + BoardPlayerPosSetV(lbl_1_bss_86, &sp14); + if(sp14.y == sp8.y) { + BoardModelMotionTimeSet(lbl_1_bss_BC[temp_r31->unk8], 0); + BoardModelAttrReset(lbl_1_bss_BC[temp_r31->unk8], 0x40000002); + BoardPlayerMotionShiftSet(lbl_1_bss_86, object->motion[1], 0, 5, 0); + lbl_1_bss_A4->work[3] |= 1 << temp_r31->unk8; + temp_r31->unk0 = 5; + temp_r31->unk4 = 0; + sp8.x = object->trans.x; + sp8.y = object->trans.y; + sp8.z = object->trans.z; + VECSubtract(&sp8, &sp14, &temp_r31->unkC); + VECScale(&temp_r31->unkC, &temp_r31->unkC, 0.03f); + HuAudFXPlay(1064); + object->func = fn_1_5AC0; + + } +} + +void fn_1_5C84(omObjData *object); + +void fn_1_5AC0(omObjData *object) +{ + float temp_f31; + float temp_f30; + Vec sp14; + Vec sp8; + WorkMGCoin *temp_r30; + temp_r30 = object->data; + BoardPlayerPosGet(lbl_1_bss_86, &sp14); + temp_r30->unkC.y = temp_r30->unk0-(0.075f*(0.25f*(temp_r30->unk4*temp_r30->unk4))); + temp_r30->unk4++; + VECAdd(&sp14, &temp_r30->unkC, &sp14); + sp8.x = object->trans.x; + sp8.y = 0; + sp8.z = object->trans.z; + temp_f30 = sp14.y; + sp14.y = 0; + VECSubtract(&sp8, &sp14, &sp8); + sp14.y = temp_f30; + temp_f31 = VECMag(&sp8); + if(temp_f31 <= 1.0f) { + temp_r30->unkC.x = temp_r30->unkC.z = 0; + } + if(sp14.y <= object->trans.y) { + sp14.x = object->trans.x; + sp14.y = object->trans.y; + sp14.z = object->trans.z; + BoardPlayerIdleSet(lbl_1_bss_86); + if(temp_r30->unk8 != 2) { + object->func = NULL; + } else { + object->work[1] = 8; + object->func = fn_1_5C84; + } + } + BoardPlayerPosSetV(lbl_1_bss_86, &sp14); +} + +void fn_1_5C84(omObjData *object) +{ + WorkMGCoin *sp8; + sp8 = object->data; + if(object->work[1] != 0) { + if(--object->work[1] == 0) { + BoardPlayerMotBlendSet(lbl_1_bss_86, 0, 15); + object->func = NULL; + } + (void)object; + } else { + (void)object; + } +} \ No newline at end of file