From d06c30c46e32816ce45fc0dbe84b13d2ba5b57e8 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Tue, 11 Jun 2024 13:12:18 -0500 Subject: [PATCH] Finish w02dll --- config/GMPE01_00/rels/w02Dll/symbols.txt | 116 ++--- configure.py | 2 +- include/REL/w02Dll.h | 8 +- src/REL/w02Dll/main.c | 4 +- src/REL/w02Dll/shuffleboard.c | 585 +++++++++++++++++++++++ 5 files changed, 652 insertions(+), 63 deletions(-) create mode 100644 src/REL/w02Dll/shuffleboard.c diff --git a/config/GMPE01_00/rels/w02Dll/symbols.txt b/config/GMPE01_00/rels/w02Dll/symbols.txt index 239369db..8aa80e00 100644 --- a/config/GMPE01_00/rels/w02Dll/symbols.txt +++ b/config/GMPE01_00/rels/w02Dll/symbols.txt @@ -244,64 +244,64 @@ lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data: lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 scope:local data:float lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 scope:local data:float lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 scope:local data:double -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 data:float -lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 data:float -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x4 data:float -lbl_1_rodata_2FC = .rodata:0x000002FC; // type:object size:0x4 data:float -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 data:float -lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 data:float -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 data:float -lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x8 data:double -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x8 data:double -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 data:double -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 data:double -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 data:float -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 data:float -lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 data:float -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 data:float -lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 data:float -lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 data:float -lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 data:float -lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 data:float -lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 data:float -lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 data:float -lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 data:float -lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x8 data:double -lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x8 data:double -lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 data:float -lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 data:float -lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 data:float -lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 data:float -lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 data:float -lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 data:float -lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x8 data:double -lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 data:float -lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 data:float -lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 data:float -lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 data:float -lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 data:float -lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 data:float -lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 data:float -lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 data:float -lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 data:float -lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 data:float -lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float -lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float -lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float -lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 data:float -lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 data:float -lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x8 data:double -lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x8 data:double -lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x8 data:double -lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 data:float -lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 data:float -lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 data:float -lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 data:float -lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 data:float -lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 data:float -lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 data:float -lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 data:float +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F4 = .rodata:0x000002F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2FC = .rodata:0x000002FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 scope:local data:float +lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 scope:local data:float +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 scope:local data:float +lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x8 scope:local data:double +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x8 scope:local data:double +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 scope:local data:double +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 scope:local data:double +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float +lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 scope:local data:float +lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 scope:local data:float +lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x4 scope:local data:float +lbl_1_rodata_354 = .rodata:0x00000354; // type:object size:0x4 scope:local data:float +lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 scope:local data:float +lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x8 scope:local data:double +lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x8 scope:local data:double +lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 scope:local data:float +lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 scope:local data:float +lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 scope:local data:float +lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 scope:local data:float +lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 scope:local data:float +lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x8 scope:local data:double +lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 scope:local data:float +lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 scope:local data:float +lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 scope:local data:float +lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3EC = .rodata:0x000003EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x4 scope:local data:float +lbl_1_rodata_404 = .rodata:0x00000404; // type:object size:0x4 scope:local data:float lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 scope:local data:float lbl_1_rodata_40C = .rodata:0x0000040C; // type:object size:0x4 scope:local data:float lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x4 scope:local data:float diff --git a/configure.py b/configure.py index 89f2bba3..b86ac90e 100644 --- a/configure.py +++ b/configure.py @@ -1488,7 +1488,7 @@ config.libs = [ Object(Matching, "REL/w02Dll/gamble.c"), Object(Matching, "REL/w02Dll/mg_coin.c"), Object(Matching, "REL/w02Dll/mg_item.c"), - Object(NonMatching, "REL/w02Dll/shuffleboard.c"), + Object(Matching, "REL/w02Dll/shuffleboard.c"), Object(Matching, "REL/w02Dll/roulette.c"), }, ), diff --git a/include/REL/w02Dll.h b/include/REL/w02Dll.h index ca42e815..b62d4a44 100644 --- a/include/REL/w02Dll.h +++ b/include/REL/w02Dll.h @@ -45,6 +45,10 @@ typedef struct m02_dice { } m02GenDice; +extern s16 lbl_1_bss_2E; +extern s16 lbl_1_bss_2C; +extern Vec lbl_1_bss_20; +extern Vec lbl_1_bss_14; extern s16 lbl_1_bss_30[0x10]; // Model List extern s16 lbl_1_data_286; @@ -74,8 +78,8 @@ extern void fn_1_5D28(); extern void fn_1_5F90(); extern void fn_1_79BC(s16 *arg0); extern void fn_1_8244(u16 arg0); -extern void fn_1_9250(); -extern void fn_1_93C8(s32 spaceFlag); +extern s32 fn_1_9250(); +extern void fn_1_93C8(u32 arg0); extern void fn_1_BC1C(); extern s32 fn_1_BE88(); extern s32 fn_1_C108(s32); diff --git a/src/REL/w02Dll/main.c b/src/REL/w02Dll/main.c index d50f3d08..af50d141 100644 --- a/src/REL/w02Dll/main.c +++ b/src/REL/w02Dll/main.c @@ -23,8 +23,8 @@ s16 lbl_1_bss_30[0x10]; // Model List s16 lbl_1_bss_2E; s16 lbl_1_bss_2C; -Point3d lbl_1_bss_20; -Point3d lbl_1_bss_14; +Vec lbl_1_bss_20; +Vec lbl_1_bss_14; s32* lbl_1_bss_10; s16 lbl_1_bss_8[4]; // Item List Process* lbl_1_bss_4; diff --git a/src/REL/w02Dll/shuffleboard.c b/src/REL/w02Dll/shuffleboard.c new file mode 100644 index 00000000..2d3d0ff9 --- /dev/null +++ b/src/REL/w02Dll/shuffleboard.c @@ -0,0 +1,585 @@ +#include "REL/w02Dll.h" +#include "game/audio.h" +#include "game/pad.h" +#include "game/objsub.h" +#include "game/frand.h" +#include "game/chrman.h" + +#include "ext_math.h" + + +Process *lbl_1_bss_378; +Process *lbl_1_bss_374; +s16 lbl_1_bss_370; +s16 lbl_1_bss_36E; +s16 lbl_1_bss_36C; +s16 lbl_1_bss_36A; +s16 lbl_1_bss_34C[15]; +Vec lbl_1_bss_298[15]; +Vec lbl_1_bss_1E4[15]; +s16 lbl_1_bss_1C4[15]; +s16 lbl_1_bss_1C0[2]; +float lbl_1_bss_1BC; +Vec lbl_1_bss_1B0; +s16 lbl_1_bss_1AC; +Vec lbl_1_bss_1A0; + +s32 lbl_1_data_490[8] = { + 0x0076002E, + 0x0076002F, + 0x00760030, + 0x00760031, + 0x00760032, + 0x00760033, + 0x00760034, + 0x00760035 +}; + +s32 lbl_1_data_4B0[8] = { + 0x00760026, + 0x00760027, + 0x00760028, + 0x00760029, + 0x0076002A, + 0x0076002B, + 0x0076002C, + 0x0076002D +}; + +s32 fn_1_9250(void) +{ + s32 temp_r31; + Vec sp14; + Vec sp8; + BoardModelVisibilitySet(lbl_1_bss_30[13], 1); + BoardModelVisibilitySet(lbl_1_bss_30[14], 1); + sp8.x = sp8.y = sp8.z = 0; + BoardModelRotSetV(lbl_1_bss_30[13], &sp8); + BoardModelRotSetV(lbl_1_bss_30[14], &sp8); + BoardModelPosSetV(lbl_1_bss_30[13], &lbl_1_bss_20); + BoardModelPosSetV(lbl_1_bss_30[14], &lbl_1_bss_14); + BoardModelVisibilitySet(lbl_1_bss_2E, 1); + BoardModelVisibilitySet(lbl_1_bss_2C, 1); + temp_r31 = BoardSpaceFlagSearch(0, 0x200); + BoardSpacePosGet(0, temp_r31, &sp14); + BoardModelPosSetV(lbl_1_bss_2E, &sp14); + BoardModelRotSetV(lbl_1_bss_2E, &sp8); + temp_r31 = BoardSpaceFlagSearch(0, 0x400); + BoardSpacePosGet(0, temp_r31, &sp14); + BoardModelPosSetV(lbl_1_bss_2C, &sp14); + BoardModelRotSetV(lbl_1_bss_2C, &sp8); + return 1; +} + +s32 fn_1_94AC(void); +void fn_1_94C0(void); + +void fn_1_93C8(u32 arg0) +{ + BoardEventFlagSet(); + if(arg0 < 2) { + lbl_1_bss_370 = 0; + } else { + lbl_1_bss_370 = 1; + } + lbl_1_bss_36E = GWSystem.player_curr; + BoardPlayerPostTurnHookSet(lbl_1_bss_36E, fn_1_9250); + lbl_1_bss_378 = HuPrcCreate(fn_1_94C0, 8196, 8192, 0); + HuPrcDestructorSet2(lbl_1_bss_378, (void *)fn_1_94AC); + while(lbl_1_bss_378) { + HuPrcVSleep(); + } + BoardEventFlagReset(); +} + +s32 fn_1_94AC(void) +{ + lbl_1_bss_378 = NULL; +} + +void fn_1_98D8(void); +void fn_1_9EC4(void); +void fn_1_A558(void); +void fn_1_A8E8(void); +void fn_1_B450(s32 arg0); + +void fn_1_94C0(void) +{ + s32 temp_r31; + s32 temp_r30; + Vec sp10; + float sp8[2]; + if(lbl_1_bss_370) { + BoardModelVisibilitySet(lbl_1_bss_2E, 0); + BoardModelVisibilitySet(lbl_1_bss_30[13], 0); + lbl_1_bss_36A = lbl_1_bss_30[14]; + lbl_1_bss_36C = lbl_1_bss_2C; + sp10.x = sp10.z = 0; + sp10.y = -90; + temp_r30 = BoardSpaceFlagSearch(0, 0x40); + } else { + BoardModelVisibilitySet(lbl_1_bss_2C, 0); + BoardModelVisibilitySet(lbl_1_bss_30[14], 0); + lbl_1_bss_36A = lbl_1_bss_30[13]; + lbl_1_bss_36C = lbl_1_bss_2E; + sp10.x = sp10.z = 0; + sp10.y = 90; + temp_r30 = BoardSpaceFlagSearch(0, 0x100); + } + lbl_1_bss_1C0[0] = BoardPlayerMotionCreate(lbl_1_bss_36E, lbl_1_data_490[GWPlayer[lbl_1_bss_36E].character]); + lbl_1_bss_1C0[1] = BoardPlayerMotionCreate(lbl_1_bss_36E, lbl_1_data_4B0[GWPlayer[lbl_1_bss_36E].character]); + fn_1_98D8(); + BoardModelRotSetV(lbl_1_bss_36A, &sp10); + BoardCameraMoveSet(0); + BoardCameraTargetPlayerSet(lbl_1_bss_36E); + BoardCameraRotSet(-10, -sp10.y); + BoardCameraZoomSet(900); + BoardStatusShowSetAll(0); + HuWinMesMaxSizeGet(1, sp8, 0x13001C); + lbl_1_bss_1AC = HuWinCreate(-10000, 400, sp8[0], sp8[1], 0); + HuWinMesSet(lbl_1_bss_1AC, 0x13001C); + HuWinBGTPLvlSet(lbl_1_bss_1AC, 0); + HuWinMesSpeedSet(lbl_1_bss_1AC, 0); + fn_1_9EC4(); + BoardAudSeqPause(0, 1, 1000); + HuPrcSleep(45); + BoardCameraTargetGet(&lbl_1_bss_1A0); + BoardCameraTargetModelSet(-1); + fn_1_A558(); + HuAudPlayerVoicePlay(lbl_1_bss_36E, 291); + fn_1_A8E8(); + HuPrcKill(lbl_1_bss_374); + for(temp_r31=0; temp_r31<15; temp_r31++) { + BoardModelKill(lbl_1_bss_34C[temp_r31]); + + } + BoardStatusShowSetAll(1); + BoardCameraMoveSet(0); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + BoardCameraMoveSet(1); + BoardAudSeqPause(0, 0, 1000); + fn_1_B450(temp_r30); + BoardPlayerMotionKill(lbl_1_bss_36E, lbl_1_bss_1C0[0]); + BoardPlayerMotionKill(lbl_1_bss_36E, lbl_1_bss_1C0[1]); + HuPrcEnd(); +} + +void fn_1_98D8(void) +{ + Vec sp1C; + Vec sp10; + float temp_f27; + float temp_f26; + float temp_f23; + float temp_f22; + BoardModelPosGet(lbl_1_bss_36C, &lbl_1_bss_1B0); + BoardPlayerPosGet(lbl_1_bss_36E, &sp1C); + temp_f23 = atan2d(lbl_1_bss_1B0.x-sp1C.x, lbl_1_bss_1B0.z-sp1C.z); + BoardPlayerMotBlendSet(lbl_1_bss_36E, temp_f23, 15); + while(!BoardPlayerMotBlendCheck(lbl_1_bss_36E)) { + HuPrcVSleep(); + } + BoardCameraTargetModelSet(-1); + temp_f26 = VECDistanceXZ(&lbl_1_bss_1B0, &sp1C); + VECSubtract(&lbl_1_bss_1B0, &sp1C, &sp10); + VECNormalize(&sp10, &sp10); + VECScale(&sp10, &sp10, temp_f26/45.0f); + BoardPlayerMotionStart(lbl_1_bss_36E, 4, 0); + + temp_f27 = 0; + temp_f22 = 15; + while(1) { + sp10.y = temp_f22-(0.075f*(0.25f*(temp_f27*temp_f27))); + temp_f27++; + VECAdd(&sp1C, &sp10, &sp1C); + temp_f26 = VECDistanceXZ(&lbl_1_bss_1B0, &sp1C); + if(temp_f26 < 5.0f) { + sp10.x = sp10.z = 0; + sp1C.x = lbl_1_bss_1B0.x; + sp1C.z = lbl_1_bss_1B0.z; + } + if(sp1C.y <= lbl_1_bss_1B0.y+8.5f) { + sp1C.y = lbl_1_bss_1B0.y+8.5f; + break; + } + BoardPlayerPosSetV(lbl_1_bss_36E, &sp1C); + HuPrcVSleep(); + } + BoardPlayerPosSetV(lbl_1_bss_36E, &sp1C); + BoardPlayerIdleSet(lbl_1_bss_36E); + HuPrcSleep(8); + if(lbl_1_bss_370) { + BoardPlayerMotBlendSet(lbl_1_bss_36E, -90, 15); + } else { + BoardPlayerMotBlendSet(lbl_1_bss_36E, 90, 15); + } + while(!BoardPlayerMotBlendCheck(lbl_1_bss_36E)) { + HuPrcVSleep(); + } + BoardPlayerMotionShiftSet(lbl_1_bss_36E, lbl_1_bss_1C0[0], 0, 10, 0x40000001); + HuPrcSleep(20); + +} + +void fn_1_BB30(void); + +void fn_1_9EC4(void) +{ + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + float temp_f27; + + s32 sp80[15]; + float sp44[15]; + float sp8[15]; + s32 temp_r31; + s32 temp_r30; + for(temp_r31=0; temp_r31<15; temp_r31++) { + lbl_1_bss_34C[temp_r31] = BoardModelCreate(0x7000A, NULL, 1); + BoardModelVisibilitySet(lbl_1_bss_34C[temp_r31], 0); + lbl_1_bss_1C4[temp_r31] = 1; + } + temp_f31 = ((1.0f/255.0f)*(90.0f*frand8()))+45; + if(frandBool()) { + temp_f31 += 180.0f; + } + if(lbl_1_bss_370) { + temp_f30 = 1430; + temp_f29 = -1730; + } else { + temp_f30 = -1730; + temp_f29 = 1430; + } + temp_f27 = (temp_f29-temp_f30)/15.0f; + for(temp_r31=0; temp_r31<15; temp_r31++) { + lbl_1_bss_298[temp_r31].x = temp_f30+(temp_f27*temp_r31); + lbl_1_bss_298[temp_r31].z = -2100+(190*sind(temp_f31)); + lbl_1_bss_298[temp_r31].y = (500.0f+(50.0f+lbl_1_bss_1B0.y))+(temp_r31*50)+(400.0f*((1.0f/255.0f)*frand8())); + temp_f31 += 60.0f; + lbl_1_bss_1E4[temp_r31].x = lbl_1_bss_1E4[temp_r31].z = 0; + lbl_1_bss_1E4[temp_r31].y = (360.0f*((1.0f/255.0f)*frand8())); + BoardModelVisibilitySet(lbl_1_bss_34C[temp_r31], 1); + BoardModelPosSetV(lbl_1_bss_34C[temp_r31], &lbl_1_bss_298[temp_r31]); + BoardModelRotSetV(lbl_1_bss_34C[temp_r31], &lbl_1_bss_1E4[temp_r31]); + } + lbl_1_bss_374 = HuPrcCreate(fn_1_BB30, 8196, 2048, 0); + for(temp_r31=0; temp_r31<15; temp_r31++) { + sp8[temp_r31] = sp44[temp_r31] = 0; + sp80[temp_r31] = 1; + } + while(1) { + temp_r30 = 0; + for(temp_r31=0; temp_r31<15; temp_r31++) { + if(sp80[temp_r31] == 1) { + temp_f28 = sp44[temp_r31]-((1.0f/15.0f)*(0.25f*(sp8[temp_r31]*sp8[temp_r31]))); + lbl_1_bss_298[temp_r31].y += temp_f28; + if(lbl_1_bss_298[temp_r31].y <= 50.0f+lbl_1_bss_1B0.y) { + lbl_1_bss_298[temp_r31].y = 50.0f+lbl_1_bss_1B0.y; + sp44[temp_r31] = -temp_f28*0.2f; + sp8[temp_r31] = 0; + if(sp44[temp_r31] < 5.0f) { + sp44[temp_r31] = 0; + sp80[temp_r31] = 0; + } + HuAudFXPlay(18); + } + BoardModelPosSetV(lbl_1_bss_34C[temp_r31], &lbl_1_bss_298[temp_r31]); + sp8[temp_r31]++; + } else { + temp_r30++; + } + } + if(temp_r30 == 15) { + break; + } + HuPrcVSleep(); + } +} + +void fn_1_A558(void) +{ + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f31; + s32 temp_r31; + BoardMusStart(1, 20, 127, 0); + BoardModelPosGet(lbl_1_bss_36A, &sp2C); + BoardModelMotionStart(lbl_1_bss_36A, 2, 0x40000001); + for(temp_r31=0; temp_r31<60; temp_r31++) { + if(lbl_1_bss_370) { + sp2C.x += 5.0f; + } else { + sp2C.x -= 5.0f; + } + BoardModelPosSetV(lbl_1_bss_36A, &sp2C); + HuPrcVSleep(); + } + BoardModelRotGet(lbl_1_bss_36A, &sp14); + BoardPlayerPosGet(lbl_1_bss_36E, &sp20); + VECSubtract(&sp20, &sp2C, &sp8); + temp_f31 = VECMag(&sp8); + sp14.y = atan2d(lbl_1_bss_298[0].x-sp20.x, lbl_1_bss_298[0].z-sp20.z); + sp2C.x = sp20.x+(temp_f31*sind(sp14.y-180.0f)); + sp2C.z = sp20.z+(temp_f31*cosd(sp14.y-180.0f)); + BoardModelPosSetV(lbl_1_bss_36A, &sp2C); + BoardModelRotSetV(lbl_1_bss_36A, &sp14); + lbl_1_bss_1BC = sp14.y; + HuPrcSleep(20); + BoardModelMotionStart(lbl_1_bss_36A, 3, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_bss_36A, 4.0f); + VECSubtract(&sp20, &sp2C, &sp8); + temp_f31 = ((VECMag(&sp8)-50)-50)/20; + VECNormalize(&sp8, &sp8); + VECScale(&sp8, &sp8, temp_f31); + for(temp_r31=0; temp_r31<20; temp_r31++) { + VECAdd(&sp2C, &sp8, &sp2C); + BoardModelPosSetV(lbl_1_bss_36A, &sp2C); + HuPrcVSleep(); + } + BoardModelMotionStart(lbl_1_bss_36A, 1, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_bss_36A, 1.0f); + omVibrate(lbl_1_bss_36E, 12, 4, 2); + HuAudFXPlay(1069); +} + +void fn_1_B8A8(s8 *arg0); + +void fn_1_A8E8(void) +{ + Vec sp28; + Vec sp1C; + Vec sp10; + s8 sp8; + float temp_f29; + float temp_f28; + float temp_f27; + float temp_f26; + float temp_f25; + s16 temp_r31; + s8 temp_r30; + s16 temp_r29; + temp_r29 = GWPlayer[lbl_1_bss_36E].port; + if(lbl_1_bss_370) { + temp_f27 = 2430; + temp_f26 = -1830; + } else { + temp_f27 = -2730; + temp_f26 = 1530; + } + temp_f25 = (temp_f26-temp_f27)/2; + while(1) { + temp_r30 = 0; + BoardPlayerPosGet(lbl_1_bss_36E, &sp28); + if(GWPlayer[lbl_1_bss_36E].com) { + fn_1_B8A8(&sp8); + } else { + sp8 = HuPadStkX[temp_r29]; + } + temp_f28 = -sp8*0.025f; + if(lbl_1_bss_370) { + if(lbl_1_bss_1BC < -90.0f) { + lbl_1_bss_1BC += temp_f28; + if(lbl_1_bss_1BC < -165.0f) { + lbl_1_bss_1BC = -165.0f; + } + if(lbl_1_bss_1BC > -105.0f) { + lbl_1_bss_1BC = -105.0f; + } + } else { + lbl_1_bss_1BC += temp_f28; + if(lbl_1_bss_1BC < -75.0f) { + lbl_1_bss_1BC = -75.0f; + } + if(lbl_1_bss_1BC > -15.0f) { + lbl_1_bss_1BC = -15.0f; + } + } + } else { + if(lbl_1_bss_1BC > 90.0f) { + lbl_1_bss_1BC += temp_f28; + if(lbl_1_bss_1BC > 165.0f) { + lbl_1_bss_1BC = 165.0f; + } + if(lbl_1_bss_1BC < 105.0f) { + lbl_1_bss_1BC = 105.0f; + } + } else { + lbl_1_bss_1BC += temp_f28; + if(lbl_1_bss_1BC > 75.0f) { + lbl_1_bss_1BC = 75.0f; + } + if(lbl_1_bss_1BC < 15.0f) { + lbl_1_bss_1BC = 15.0f; + } + } + } + temp_f29 = 4.0+(15.0*(1.0-fabs((sp28.x-(temp_f25+temp_f27))/temp_f25))); + sp28.x += temp_f29*sind(lbl_1_bss_1BC); + sp28.z += temp_f29*cosd(lbl_1_bss_1BC); + if(lbl_1_bss_370) { + if(sp28.z-50 < -2340) { + sp28.z = -2290; + lbl_1_bss_1BC = (-90-lbl_1_bss_1BC)+-90; + temp_r30 = 1; + } else if(sp28.z+50 > -1860) { + lbl_1_bss_1BC = (-90-lbl_1_bss_1BC)+-90; + sp28.z = -1910; + temp_r30 = 1; + } + } else { + if(sp28.z-50 < -2340) { + sp28.z = -2290; + lbl_1_bss_1BC = (90-lbl_1_bss_1BC)+90; + temp_r30 = 1; + } else if(sp28.z+50 > -1860) { + lbl_1_bss_1BC = (90-lbl_1_bss_1BC)+90; + sp28.z = -1910; + temp_r30 = 1; + } + } + BoardPlayerPosSetV(lbl_1_bss_36E, &sp28); + sp28.y -= 8.5f; + BoardModelPosSetV(lbl_1_bss_36C, &sp28); + if(temp_r30) { + HuAudFXPlay(1060); + } + BoardPlayerRotGet(lbl_1_bss_36E, &sp1C); + sp1C.y += 1.25f*temp_f29; + if(sp1C.y >= 360.0f) { + sp1C.y -= 360.0f; + } + BoardPlayerRotSetV(lbl_1_bss_36E, &sp1C); + BoardModelRotGet(lbl_1_bss_36C, &sp1C); + sp1C.y += 1.25f*temp_f29; + if(sp1C.y >= 360.0f) { + sp1C.y -= 360.0f; + } + BoardModelRotSetV(lbl_1_bss_36C, &sp1C); + for(temp_r31=0; temp_r31<15; temp_r31++) { + if(lbl_1_bss_1C4[temp_r31] == 0) { + continue; + } + BoardModelPosGet(lbl_1_bss_34C[temp_r31], &sp10); + if(VECDistanceXZ(&sp10, &sp28) < 100.0f) { + lbl_1_bss_1C4[temp_r31] = 0; + BoardModelVisibilitySet(lbl_1_bss_34C[temp_r31], 0); + CharModelCoinEffectCreate(1, &sp10); + BoardPlayerCoinsAdd(lbl_1_bss_36E, 1); + HuAudFXPlay(7); + } + } + lbl_1_bss_1A0.x = sp28.x; + BoardCameraTargetSet(lbl_1_bss_1A0.x, lbl_1_bss_1A0.y, lbl_1_bss_1A0.z); + if(temp_f29 <= 3.0f) { + break; + } + HuPrcVSleep(); + } + HuWinKill(lbl_1_bss_1AC); + BoardPlayerMotionStart(lbl_1_bss_36E, lbl_1_bss_1C0[1], 0); + BoardPlayerMotionEndWait(lbl_1_bss_36E); + BoardPlayerMotionShiftSet(lbl_1_bss_36E, 6, 0, 15, 0x40000001); + HuPrcSleep(40); + BoardAudSeqFadeOut(1, 1000); + HuPrcSleep(70); + BoardPlayerMotBlendSet(lbl_1_bss_36E, 0, 1); +} + +void fn_1_B450(s32 arg0) +{ + float temp_f27; + float temp_f26; + float temp_f23; + Vec sp28; + Vec sp1C; + Vec sp10; + BoardSpacePosGet(0, arg0, &sp28); + BoardPlayerPosGet(lbl_1_bss_36E, &sp1C); + HuAudPlayerVoicePlay(lbl_1_bss_36E, 290); + temp_f26 = VECDistanceXZ(&sp28, &sp1C); + VECSubtract(&sp28, &sp1C, &sp10); + VECNormalize(&sp10, &sp10); + VECScale(&sp10, &sp10, temp_f26/45.0f); + BoardPlayerMotionStart(lbl_1_bss_36E, 4, 0); + temp_f27 = 0; + temp_f23 = 15; + while(1) { + sp10.y = temp_f23-(0.075f*(0.25f*(temp_f27*temp_f27))); + temp_f27++; + VECAdd(&sp1C, &sp10, &sp1C); + temp_f26 = VECDistanceXZ(&sp28, &sp1C); + if(temp_f26 < 5.0f) { + sp10.x = sp10.z = 0; + sp1C.x = sp28.x; + sp1C.z = sp28.z; + } + if(sp1C.y <= sp28.y) { + sp1C.y = sp28.y; + break; + } + BoardPlayerPosSetV(lbl_1_bss_36E, &sp1C); + HuPrcVSleep(); + } + BoardPlayerPosSetV(lbl_1_bss_36E, &sp1C); + GWPlayer[lbl_1_bss_36E].space_curr = arg0; + BoardPlayerIdleSet(lbl_1_bss_36E); + HuPrcSleep(8); + HuPrcSleep(20); +} + +void fn_1_B8A8(s8 *arg0) +{ + float temp_f29; + float temp_f28; + Vec spC; + s32 temp_r31; + s32 temp_r29; + *arg0 = 0; + BoardPlayerPosGet(lbl_1_bss_36E, &spC); + temp_f29 = -1000; + temp_r29 = -1; + for(temp_r31=0; temp_r31<15; temp_r31++) { + if(lbl_1_bss_1C4[temp_r31] == 0) { + continue; + } + temp_f28 = VECDistanceXZ(&spC, &lbl_1_bss_298[temp_r31]); + if(temp_f28 > temp_f29) { + temp_f29 = temp_f28; + temp_r29 = temp_r31; + } + } + if(temp_r29 >= 0) { + if(spC.z > lbl_1_bss_298[temp_r31].z) { + *arg0 = -70; + } else { + *arg0 = 70; + } + if(lbl_1_bss_370) { + *arg0 = -(*arg0); + } + } +} + +void fn_1_BB30(void) +{ + s32 temp_r31; + while(1) { + for(temp_r31=0; temp_r31<15; temp_r31++) { + if(lbl_1_bss_1C4[temp_r31] == 0) { + continue; + } + lbl_1_bss_1E4[temp_r31].y += 10.0f; + if(lbl_1_bss_1E4[temp_r31].y >= 360.0f) { + lbl_1_bss_1E4[temp_r31].y -= 360.0f; + } + BoardModelRotSetV(lbl_1_bss_34C[temp_r31], &lbl_1_bss_1E4[temp_r31]); + } + HuPrcVSleep(); + } + +} \ No newline at end of file