diff --git a/config/GMPE01_00/rels/w02Dll/symbols.txt b/config/GMPE01_00/rels/w02Dll/symbols.txt index 81c1bca4..239369db 100644 --- a/config/GMPE01_00/rels/w02Dll/symbols.txt +++ b/config/GMPE01_00/rels/w02Dll/symbols.txt @@ -198,52 +198,52 @@ lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data: 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 -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 data:float -lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 data:float -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:0x8 data:double -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 data:double -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_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_288 = .rodata:0x00000288; // type:object size:0x8 data:double -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 data:float -lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 data:float -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size: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_2C0 = .rodata:0x000002C0; // type:object size:0x8 data:double -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_2DC = .rodata:0x000002DC; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 data:float -lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 data:float -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x8 data:double +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 scope:local data:byte +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float +lbl_1_rodata_224 = .rodata:0x00000224; // type:object size:0x4 scope:local data:float +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 scope:local data:float +lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 scope:local data:float +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:0x8 scope:local data:double +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 scope:local data:double +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 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_288 = .rodata:0x00000288; // type:object size:0x8 scope:local data:double +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 scope:local data:float +lbl_1_rodata_294 = .rodata:0x00000294; // type:object size:0x4 scope:local data:float +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size: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_2C0 = .rodata:0x000002C0; // type:object size:0x8 scope:local data:double +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_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data:float +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 @@ -385,9 +385,9 @@ 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 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 -lbl_1_data_46B = .data:0x0000046B; // type:object size:0x9 +lbl_1_data_460 = .data:0x00000460; // type:object size:0x5 scope:local data:string +lbl_1_data_465 = .data:0x00000465; // type:object size:0x6 scope:local data:string +lbl_1_data_46B = .data:0x0000046B; // type:object size:0x9 scope:local lbl_1_data_474 = .data:0x00000474; // type:object size:0xC lbl_1_data_480 = .data:0x00000480; // type:object size:0x10 lbl_1_data_490 = .data:0x00000490; // type:object size:0x20 diff --git a/configure.py b/configure.py index 9633618d..89f2bba3 100644 --- a/configure.py +++ b/configure.py @@ -1487,7 +1487,7 @@ config.libs = [ Object(Matching, "REL/w02Dll/gendice.c"), Object(Matching, "REL/w02Dll/gamble.c"), Object(Matching, "REL/w02Dll/mg_coin.c"), - Object(NonMatching, "REL/w02Dll/mg_item.c"), + Object(Matching, "REL/w02Dll/mg_item.c"), Object(NonMatching, "REL/w02Dll/shuffleboard.c"), Object(Matching, "REL/w02Dll/roulette.c"), }, diff --git a/include/REL/w02Dll.h b/include/REL/w02Dll.h index 4a09e43f..ca42e815 100644 --- a/include/REL/w02Dll.h +++ b/include/REL/w02Dll.h @@ -72,8 +72,8 @@ extern void fn_1_39F4(); extern void fn_1_5CF8(); extern void fn_1_5D28(); extern void fn_1_5F90(); -extern void fn_1_79BC(s16* itemList); -extern void fn_1_8244(s32); +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 void fn_1_BC1C(); diff --git a/src/REL/w02Dll/mg_item.c b/src/REL/w02Dll/mg_item.c new file mode 100644 index 00000000..895e3a69 --- /dev/null +++ b/src/REL/w02Dll/mg_item.c @@ -0,0 +1,1000 @@ +#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 "game/hsfdraw.h" + +#include "ext_math.h" + +#include "game/minigame_seq.h" + +s32 lbl_1_data_428[14] = { + 0x0007006D, + 0x0007006E, + 0x0007006F, + 0x00070070, + 0x00070071, + 0x00070072, + 0x00070073, + 0x00070074, + 0x00070076, + 0x00070077, + 0x00070078, + 0x00070079, + 0x0007007A, + 0x0007007B +}; + +char *lbl_1_data_474[3] = { + "item", + "item1", + "item2" +}; + +s32 lbl_1_data_480[] = { + 0x760018, + 0x760019, + 0x76001A, + -1 +}; + +u16 lbl_1_bss_198; +s16 lbl_1_bss_196; +s16 lbl_1_bss_190[3]; +s16 lbl_1_bss_18A[3]; +s16 lbl_1_bss_184[3]; +Vec lbl_1_bss_160[3]; +Vec lbl_1_bss_13C[3]; +Vec lbl_1_bss_118[3]; +float lbl_1_bss_114; +float lbl_1_bss_110; +omObjData *lbl_1_bss_10C; +omObjData *lbl_1_bss_108; +omObjData *lbl_1_bss_104; +Process *lbl_1_bss_100; +Vec lbl_1_bss_DC[3]; +s32 lbl_1_bss_D8; +s32 lbl_1_bss_CC[3]; +AnimData *lbl_1_bss_C8; + +void fn_1_5CF8(void) +{ + BoardModelVisibilitySet(lbl_1_bss_30[10], 1); +} + +typedef struct work_mgitem { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s16 unkC; +} WorkMGItem; + +typedef struct work_mgitem_player { + Vec unk0[3]; + s16 unk24[3]; + s16 unk2A[3]; + float unk30[2]; + float unk38[2]; + s16 unk40[2]; + Vec unk44[3]; + s16 unk68; +} WorkMGItemPlayer; + +void fn_1_8570(void); + +void fn_1_5F08(omObjData *object); +void fn_1_606C(omObjData *object); + +void fn_1_5D28(void) +{ + Vec spC; + WorkMGItem *sp8; + lbl_1_bss_196 = GWSystem.player_curr; + BoardPlayerPosGet(lbl_1_bss_196, &spC); + BoardPlayerPosLerpStart(lbl_1_bss_196, &spC, &lbl_1_bss_DC[1], 20); + while(GWPlayer[lbl_1_bss_196].moving) { + HuPrcVSleep(); + } + BoardPlayerIdleSet(lbl_1_bss_196); + HuPrcSleep(120); + BoardAudSeqPause(0, 1, 1000); + HuAudFXPlay(781); + fn_1_8570(); + HuPrcSleep(60); + lbl_1_bss_104 = omAddObjEx(boardObjMan, 257, 0, 0, -1, fn_1_5F08); + lbl_1_bss_108 = omAddObjEx(boardObjMan, 257, 0, 0, -1, fn_1_606C); + lbl_1_bss_10C = omAddObjEx(boardObjMan, 257, 0, 0, -1, NULL); + lbl_1_bss_108->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkMGItemPlayer), MEMORY_DEFAULT_NUM); + lbl_1_bss_10C->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkMGItem), MEMORY_DEFAULT_NUM); + sp8 = lbl_1_bss_10C->data; + lbl_1_bss_198 = 0; +} + +void fn_1_602C(void); + +void fn_1_5F08(omObjData *object) +{ + if(lbl_1_bss_198 && BoardMGDoneFlagGet() == 1) { + fn_1_602C(); + omDelObjEx(boardObjMan, object); + } +} + +void fn_1_5F60(void) +{ + lbl_1_bss_198 = 1; + BoardMGExit(); +} + +void fn_1_5F90(void) +{ + s32 i; + for(i=0; i<3; i++) { + BoardModelKill(lbl_1_bss_184[i]); + BoardModelKill(lbl_1_bss_18A[i]); + } + if(lbl_1_bss_C8) { + HuSprAnimKill(lbl_1_bss_C8); + lbl_1_bss_C8 = NULL; + } +} + +void fn_1_602C(void) +{ + omDelObjEx(boardObjMan, lbl_1_bss_10C); + BoardMGDoneFlagSet(0); +} + +void fn_1_6248(omObjData *object); + +void fn_1_606C(omObjData *object) +{ + WorkMGItemPlayer *temp_r31 = object->data; + temp_r31->unk24[0] = lbl_1_bss_18A[0]; + temp_r31->unk24[1] = lbl_1_bss_18A[1]; + temp_r31->unk24[2] = lbl_1_bss_18A[2]; + BoardModelPosGet(lbl_1_bss_18A[1], &temp_r31->unk44[0]); + temp_r31->unk44[0].x -= lbl_1_bss_110; + BoardModelPosGet(lbl_1_bss_18A[1], &temp_r31->unk44[1]); + temp_r31->unk44[1].x += lbl_1_bss_110; + BoardModelPosGet(lbl_1_bss_18A[1], &temp_r31->unk44[2]); + BoardMusStart(1, 19, 127, 0); + object->work[0] = 300; + object->work[1] = 0; + object->func = fn_1_6248; +} + +void fn_1_616C(s16 arg0, s16 arg1) +{ + s32 temp; + temp = lbl_1_bss_190[arg0]; + lbl_1_bss_190[arg0] = lbl_1_bss_190[arg1]; + lbl_1_bss_190[arg1] = temp; + temp = lbl_1_bss_184[arg0]; + lbl_1_bss_184[arg0] = lbl_1_bss_184[arg1]; + lbl_1_bss_184[arg1] = temp; +} + +void fn_1_6AB0(omObjData *object); + +void fn_1_6248(omObjData *object) +{ + float temp_f31; + float temp_f30; + Vec sp34; + Vec sp28; + Vec sp1C; + Vec sp10; + u8 sp8[8] = { + 0, 1, 1, 2, + 0, 1, 0, 2 + }; + WorkMGItemPlayer *temp_r31 = object->data; + s32 temp_r30; + s32 temp_r28; + if(object->work[0]) { + object->work[0]--; + } + if(object->work[1] == 0) { + if(object->work[0] == 0) { + object->func = fn_1_6AB0; + } + temp_r28 = sp8[frand() & 0x7]; + switch(temp_r28) { + case 0: + temp_r31->unk2A[0] = temp_r31->unk24[0]; + temp_r31->unk2A[1] = temp_r31->unk24[1]; + sp28 = lbl_1_bss_160[0]; + sp34 = lbl_1_bss_160[1]; + temp_f31 = 15; + break; + + case 1: + temp_r31->unk2A[0] = temp_r31->unk24[1]; + temp_r31->unk2A[1] = temp_r31->unk24[2]; + sp28 = lbl_1_bss_160[1]; + sp34 = lbl_1_bss_160[2]; + temp_f31 = 15; + break; + + case 2: + temp_r31->unk2A[0] = temp_r31->unk24[0]; + temp_r31->unk2A[1] = temp_r31->unk24[2]; + temp_f31 = 22.5f; + break; + } + temp_r31->unk68 = temp_r28; + temp_r31->unk30[0] = 180; + temp_r31->unk30[1] = 0; + if(temp_r28 != 2) { + temp_r31->unk40[0] = frandmod(3); + temp_r31->unk40[1] = frandmod(3); + while(temp_r31->unk40[1] == temp_r31->unk40[0]) { + temp_r31->unk40[1] = frandmod(3); + } + VECSubtract(&sp34, &sp28, &temp_r31->unk0[0]); + VECScale(&temp_r31->unk0[0], &temp_r31->unk0[0], 1.0f/temp_f31); + VECSubtract(&sp28, &sp34, &temp_r31->unk0[1]); + VECScale(&temp_r31->unk0[1], &temp_r31->unk0[1], 1.0f/temp_f31); + } else { + temp_r31->unk40[0] = frandmod(2); + temp_r31->unk40[1] = temp_r31->unk40[0]^1; + } + for(temp_r30=0; temp_r30<2; temp_r30++) { + if(temp_r31->unk40[temp_r30] == 0) { + temp_r31->unk38[temp_r30] = 180.0f/temp_f31; + } else { + temp_r31->unk38[temp_r30] = -180.0f/temp_f31; + } + if(temp_r30 == 1) { + temp_r31->unk38[temp_r30] = -temp_r31->unk38[temp_r30]; + } + } + object->work[2] = temp_f31; + object->work[1] = 1; + BoardModelMotionStart(temp_r31->unk2A[temp_r30], 2, 0x40000001); + BoardModelMotionSpeedSet(temp_r31->unk2A[temp_r30], 3.0f); + } else { + for(temp_r30=0; temp_r30<2; temp_r30++) { + BoardModelPosGet(temp_r31->unk2A[temp_r30], &sp1C); + sp10 = sp1C; + if(temp_r31->unk68 != 2) { + temp_f30 = lbl_1_bss_110; + } else { + temp_f30 = 2.0f*lbl_1_bss_110; + } + if(temp_r31->unk40[temp_r30] != 2) { + sp1C.x = temp_r31->unk44[temp_r31->unk68].x+(temp_f30*cosd(temp_r31->unk30[temp_r30])); + sp1C.z = temp_r31->unk44[temp_r31->unk68].z+(temp_f30*sind(temp_r31->unk30[temp_r30])); + temp_r31->unk30[temp_r30] += temp_r31->unk38[temp_r30]; + } else { + VECAdd(&sp1C, &temp_r31->unk0[temp_r30], &sp1C); + } + BoardModelPosSetV(temp_r31->unk2A[temp_r30], &sp1C); + VECSubtract(&sp1C, &sp10, &sp10); + BoardModelRotGet(temp_r31->unk2A[temp_r30], &sp1C); + sp1C.y = atan2d(sp10.x, sp10.z); + BoardModelRotSetV(temp_r31->unk2A[temp_r30], &sp1C); + } + if(--object->work[2] == 0) { + object->work[1] = 0; + BoardModelMotionStart(temp_r31->unk2A[temp_r30], 1, 0x40000001); + BoardModelMotionSpeedSet(temp_r31->unk2A[temp_r30], 1.0f); + for(temp_r30=0; temp_r30<2; temp_r30++) { + if(temp_r31->unk40[temp_r30] == 0) { + BoardModelRotGet(temp_r31->unk2A[temp_r30], &sp1C); + sp1C.y = 0; + BoardModelRotSetV(temp_r31->unk2A[temp_r30], &sp1C); + } else if(temp_r31->unk40[temp_r30] == 1) { + BoardModelRotGet(temp_r31->unk2A[temp_r30], &sp1C); + sp1C.y = 180; + BoardModelRotSetV(temp_r31->unk2A[temp_r30], &sp1C); + } + } + switch(temp_r31->unk68) { + case 0: + temp_r31->unk24[0] = temp_r31->unk2A[1]; + temp_r31->unk24[1] = temp_r31->unk2A[0]; + fn_1_616C(0, 1); + break; + + case 1: + temp_r31->unk24[1] = temp_r31->unk2A[1]; + temp_r31->unk24[2] = temp_r31->unk2A[0]; + fn_1_616C(1, 2); + break; + + case 2: + temp_r31->unk24[0] = temp_r31->unk2A[1]; + temp_r31->unk24[2] = temp_r31->unk2A[0]; + fn_1_616C(0, 2); + break; + } + for(temp_r30=0; temp_r30<3; temp_r30++) { + BoardModelPosSetV(temp_r31->unk24[temp_r30], &lbl_1_bss_160[temp_r30]); + } + } + } +} + +void fn_1_6CA4(omObjData *object); + +void fn_1_6AB0(omObjData *object) +{ + Vec sp8; + s32 temp_r31; + s32 temp_r30; + temp_r30 = 0; + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelRotGet(lbl_1_bss_18A[temp_r31], &sp8); + if(sp8.y < 0.0f) { + sp8.y += 360.0f; + } + if(0.0f == sp8.y) { + temp_r30++; + continue; + } + if(sp8.y < 180.0f) { + if(sp8.y < -10.0f) { + sp8.y = 0; + } else { + sp8.y -= 10.0f; + } + } else { + if(360.0f-sp8.y < 10.0f) { + sp8.y = 0; + } else { + sp8.y += 10.0f; + } + } + BoardModelRotSetV(lbl_1_bss_18A[temp_r31], &sp8); + } + if(temp_r30 == 3) { + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelPosSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_160[temp_r31]); + } + object->work[0] = MGSeqStartCreate(); + object->func = fn_1_6CA4; + } +} + +void fn_1_73C8(omObjData *object); + +void fn_1_6CA4(omObjData *object) +{ + if(!MGSeqStatGet(object->work[0])) { + lbl_1_bss_10C->func = fn_1_73C8; + object->func = NULL; + } +} + +void fn_1_6E34(omObjData *object); +void fn_1_85FC(void); +void fn_1_8DAC(void); + +void fn_1_6D04(omObjData *object) +{ + Vec sp8; + BoardModelRotGet(lbl_1_bss_18A[object->work[0]], &sp8); + sp8.y += 8.0f; + if(sp8.y >= 360.0f) { + sp8.y = 0.0f; + HuAudFXPlay(784); + lbl_1_bss_100 = HuPrcCreate(fn_1_85FC, 8196, 8192, 0); + HuPrcDestructorSet2(lbl_1_bss_100, fn_1_8DAC); + *((u32 *)&lbl_1_bss_100->user_data) = (1 << object->work[0])|0x10000000; + lbl_1_bss_D8 = HuAudFXPlay(863); + object->func = fn_1_6E34; + } + BoardModelRotSetV(lbl_1_bss_18A[object->work[0]], &sp8); +} + +void fn_1_6EA8(void); + +void fn_1_6E34(omObjData *object) +{ + Process *temp_r31; + if((u32)lbl_1_bss_100->user_data & 0x40000000) { + temp_r31 = HuPrcCreate(fn_1_6EA8, 8196, 6144, 0); + temp_r31->user_data = object; + object->func = NULL; + } +} + +void fn_1_72E4(omObjData *object); + +void fn_1_6EA8(void) +{ + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + float temp_f31; + float temp_f30; + float temp_f29; + s32 temp_r31; + s32 temp_r30; + s32 temp_r29; + s32 temp_r28; + + temp_r31 = lbl_1_bss_108->work[0]; + BoardWinCreate(2, 0x130018, 4); + BoardWinInsertMesSet(lbl_1_bss_190[temp_r31]+0x80000, 1); + BoardWinWait(); + BoardWinKill(); + BoardPlayerPosGet(lbl_1_bss_196, &sp20); + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp2C); + sp20.y = sp2C.y = 0; + VECSubtract(&sp20, &sp2C, &sp14); + temp_f30 = VECMag(&sp14); + VECScale(&sp14, &sp14, 1.0f/60.0f); + for(temp_r30=0; temp_r30<60; temp_r30++) { + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp2C); + VECAdd(&sp2C, &sp14, &sp2C); + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp2C); + HuPrcVSleep(); + } + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp2C); + sp2C.x = sp20.x; + sp2C.z = sp20.z; + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp2C); + BoardPlayerMotBlendSet(lbl_1_bss_196, 0, 15); + while(!BoardPlayerMotBlendCheck(lbl_1_bss_196)) { + HuPrcVSleep(); + } + HuPrcKill(lbl_1_bss_100); + lbl_1_bss_100 = NULL; + HuPrcVSleep(); + HuAudFXPlay(781); + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp2C); + BoardModelScaleGet(lbl_1_bss_184[temp_r31], &sp8); + temp_f31 = sp8.x; + temp_f29 = -0.04f; + temp_f30 = (sp20.y-sp2C.y)/30.0f; + temp_r29 = 0; + HuAudFXFadeOut(lbl_1_bss_D8, 499); + while(!temp_r29) { + sp2C.y += temp_f30; + temp_f31 += temp_f29; + if(temp_f31 < 0.0f) { + temp_f31 = 0.0f; + temp_r29 = 1; + } + sp8.x = sp8.y = sp8.z = temp_f31; + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp2C); + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp8); + HuPrcVSleep(); + } + HuAudFXStop(lbl_1_bss_D8); + BoardModelVisibilitySet(lbl_1_bss_184[temp_r31], 0); + BoardPlayerItemAdd(lbl_1_bss_196, lbl_1_bss_190[temp_r31]); + omVibrate(lbl_1_bss_196, 12, 6, 6); + temp_r28 = HuAudSStreamPlay(2); + BoardPlayerMotionShiftSet(lbl_1_bss_196, 7, 0, 5, 0); + while(!BoardPlayerMotionEndCheck(lbl_1_bss_196)) { + HuPrcVSleep(); + } + HuPrcSleep(30); + while(HuAudSStreamStatGet(temp_r28)) { + HuPrcVSleep(); + } + BoardAudSeqPause(0, 0, 1000); + HuAudFXPlay(68); + fn_1_121C(0x130019); + lbl_1_bss_108->func = fn_1_72E4; + HuPrcKill(NULL); + while(1) { + HuPrcVSleep(); + } +} + +void fn_1_72E4(omObjData *object) +{ + fn_1_5F60(); + omDelObjEx(boardObjMan, object); +} + +void fn_1_732C(s32 arg0) +{ + lbl_1_bss_108->work[0] = arg0; + lbl_1_bss_108->func = fn_1_6D04; +} + +void fn_1_7358(WorkMGItem *arg0) +{ + if(--arg0->unk2 == 0) { + arg0->unk2 = 60; + if(--arg0->unk0 >= 0) { + MGSeqParamSet(arg0->unk4, 1, arg0->unk0); + } + } +} + +void fn_1_74E4(omObjData *object); + +void fn_1_73C8(omObjData *object) +{ + float sp8[2]; + WorkMGItem *temp_r31; + temp_r31 = object->data; + temp_r31->unk0 = 5; + temp_r31->unk2 = 60; + temp_r31->unk4 = MGSeqTimerCreateXY(temp_r31->unk0, 288, 64); + HuWinMesMaxSizeGet(1, sp8, 0x13001B); + temp_r31->unk6 = HuWinCreate(-10000, 368, sp8[0], sp8[1], 0); + HuWinMesSet(temp_r31->unk6, 0x13001B); + HuWinBGTPLvlSet(temp_r31->unk6, 0); + HuWinMesSpeedSet(temp_r31->unk6, 0); + temp_r31->unk8 = 1; + temp_r31->unkA = frandmod(30)+15; + temp_r31->unkC = 0; + object->func = fn_1_74E4; +} + +void fn_1_7898(omObjData *arg0, s32 *arg1, s32 *arg2); + +void fn_1_7750(omObjData *object); +void fn_1_7818(omObjData *object); + +void fn_1_74E4(omObjData *object) +{ + s32 spC; + s32 sp8; + WorkMGItem *temp_r31; + s32 temp_r29; + temp_r31 = object->data; + fn_1_7358(temp_r31); + temp_r29 = GWPlayer[lbl_1_bss_196].port; + if(GWPlayer[lbl_1_bss_196].com) { + fn_1_7898(object, &spC, &sp8); + } else { + spC = HuPadDStkRep[temp_r29]; + sp8 = HuPadBtnDown[temp_r29]; + } + if((sp8 & PAD_BUTTON_A) || temp_r31->unk0 < 0) { + MGSeqParamSet(temp_r31->unk4, 2, -1); + HuWinKill(temp_r31->unk6); + BoardPlayerMotBlendSet(lbl_1_bss_196, 180, 10); + BoardAudSeqFadeOut(1, 1000); + object->func = fn_1_7818; + } else if(spC & PAD_BUTTON_LEFT) { + if(temp_r31->unk8 != 0) { + temp_r31->unk8--; + BoardPlayerPosLerpStart(lbl_1_bss_196, &lbl_1_bss_DC[temp_r31->unk8+1], &lbl_1_bss_DC[temp_r31->unk8], 12); + object->func = fn_1_7750; + } + } else if(spC & PAD_BUTTON_RIGHT) { + if(temp_r31->unk8 != 2) { + temp_r31->unk8++; + BoardPlayerPosLerpStart(lbl_1_bss_196, &lbl_1_bss_DC[temp_r31->unk8-1], &lbl_1_bss_DC[temp_r31->unk8], 12); + object->func = fn_1_7750; + } + } +} + +void fn_1_7750(omObjData *object) +{ + WorkMGItem *temp_r31 = object->data; + fn_1_7358(temp_r31); + if(!GWPlayer[lbl_1_bss_196].moving) { + BoardPlayerIdleSet(lbl_1_bss_196); + object->func = fn_1_74E4; + } +} + +void fn_1_7818(omObjData *object) +{ + if(BoardPlayerMotBlendCheck(lbl_1_bss_196)) { + fn_1_732C(((WorkMGItem *)object->data)->unk8); + object->func = NULL; + } +} + +void fn_1_7898(omObjData *arg0, s32 *arg1, s32 *arg2) +{ + WorkMGItem *temp_r31; + s32 temp_r28; + temp_r31 = arg0->data; + *arg1 = *arg2 = 0; + if(temp_r31->unkA) { + temp_r31->unkA--; + } else { + temp_r31->unkA = frandmod(30)+15; + if(temp_r31->unkC == 4) { + *arg2 |= PAD_BUTTON_A; + } else if((s32)frandmod(10) < 4) { + *arg2 |= PAD_BUTTON_A; + } else { + temp_r28 = frandBool(); + if((temp_r28 == 0 && temp_r31->unk8 != 2) || temp_r31->unk8 == 0) { + *arg1 |= PAD_BUTTON_RIGHT; + } else if((temp_r28 == 1 && temp_r31->unk8 != 0) || temp_r31->unk8 == 2) { + *arg1 |= PAD_BUTTON_LEFT; + } + temp_r31->unkC++; + } + } +} + +static inline void WriteTrans(s32 index, float value) +{ + Hu3DData[BoardModelIDGet(lbl_1_bss_184[index])].unk_F0[1][3] = value; +} + +void fn_1_79BC(s16 *arg0) +{ + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f25; + Vec sp8; + s32 temp_r31; + s32 temp_r29; + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_190[temp_r31] = arg0[temp_r31]; + lbl_1_bss_184[temp_r31] = BoardModelCreate(lbl_1_data_428[lbl_1_bss_190[temp_r31]], NULL, 0); + if(lbl_1_bss_190[temp_r31] == 5) { + WriteTrans(temp_r31, -50.0f); + } + if(arg0[temp_r31] == 4) { + BoardModelMotionSpeedSet(lbl_1_bss_184[temp_r31], 0); + } + BoardModelVisibilitySet(lbl_1_bss_184[temp_r31], 0); + if(arg0[temp_r31] == 11) { + BoardModelAttrSet(lbl_1_bss_184[temp_r31], 0x40000001); + } + } + if(lbl_1_bss_C8 == NULL) { + lbl_1_bss_C8 = HuSprAnimReadFile(0x120000); + HuSprAnimLock(lbl_1_bss_C8); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_18A[temp_r31] = BoardModelCreate(0x760017, lbl_1_data_480, 0); + lbl_1_bss_118[temp_r31].x = lbl_1_bss_118[temp_r31].z = 0.1f; + lbl_1_bss_118[temp_r31].y = 0.1f; + lbl_1_bss_13C[temp_r31].x = 0; + lbl_1_bss_13C[temp_r31].y = lbl_1_bss_13C[temp_r31].z = 0; + Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_30[10]), lbl_1_data_474[temp_r31], &lbl_1_bss_160[temp_r31]); + BoardModelPosSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_160[temp_r31]); + BoardModelRotSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_13C[temp_r31]); + BoardModelScaleSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_118[temp_r31]); + } + lbl_1_bss_114 = lbl_1_bss_160[0].y; + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelPosGet(lbl_1_bss_30[10], &lbl_1_bss_DC[temp_r31]); + lbl_1_bss_DC[temp_r31].x = lbl_1_bss_160[temp_r31].x; + lbl_1_bss_DC[temp_r31].z = lbl_1_bss_160[temp_r31].z+200.0f; + BoardModelMotionStart(lbl_1_bss_18A[temp_r31], 3, 0); + } + lbl_1_bss_110 = fabs(lbl_1_bss_160[0].x-lbl_1_bss_160[1].x)/2; + temp_f31 = 0; + temp_f29 = 20; + sp8.x = 0.04f; + sp8.y = 0.04f; + sp8.z = 0.04f; + for(temp_r29=0; temp_r29<3;) { + temp_f30 = temp_f29-((7.0f/60.0f)*(0.25f*(temp_f31*temp_f31))); + temp_f31++; + temp_r29 = 0; + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_160[temp_r31].y += temp_f30; + if(lbl_1_bss_160[temp_r31].y < lbl_1_bss_114) { + lbl_1_bss_160[temp_r31].y = lbl_1_bss_114; + temp_r29++; + } + BoardModelPosSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_160[temp_r31]); + VECAdd(&lbl_1_bss_118[temp_r31], &sp8, &lbl_1_bss_118[temp_r31]); + if(lbl_1_bss_118[temp_r31].x > 0.7f) { + lbl_1_bss_118[temp_r31].x = 0.7f; + } + if(lbl_1_bss_118[temp_r31].y > 0.7f) { + lbl_1_bss_118[temp_r31].y = 0.7f; + } + if(lbl_1_bss_118[temp_r31].z > 0.7f) { + lbl_1_bss_118[temp_r31].z = 0.7f; + } + BoardModelScaleSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_118[temp_r31]); + } + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_118[temp_r31].x = lbl_1_bss_118[temp_r31].y = lbl_1_bss_118[temp_r31].z = 0.7f; + BoardModelScaleSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_118[temp_r31]); + BoardModelMotionStart(lbl_1_bss_18A[temp_r31], 1, 0x40000001); + } + lbl_1_bss_100 = HuPrcCreate(fn_1_85FC, 8196, 8192, 0); + HuPrcDestructorSet2(lbl_1_bss_100, fn_1_8DAC); + *((u32 *)&lbl_1_bss_100->user_data) = 7; + HuAudFXPlay(866); + while(((u32)lbl_1_bss_100->user_data & 0x40000000) == 0) { + HuPrcVSleep(); + } +} + +void fn_1_8244(u16 arg0) +{ + float temp_f31; + float temp_f30; + float temp_f29; + Vec spC; + + s32 temp_r31; + s32 temp_r30; + if(arg0) { + fn_1_8570(); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelMotionStart(lbl_1_bss_18A[temp_r31], 3, 0); + } + temp_f31 = 0; + temp_f29 = 20; + spC.x = -0.02f; + spC.y = -0.02f; + spC.z = -0.02f; + for(temp_r30=0; temp_r30<3;) { + temp_f30 = temp_f29-((7.0f/60.0f)*(0.25f*(temp_f31*temp_f31))); + temp_f31++; + temp_r30 = 0; + for(temp_r31=0; temp_r31<3; temp_r31++) { + lbl_1_bss_160[temp_r31].y += temp_f30; + BoardModelPosSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_160[temp_r31]); + if(temp_f30 < 0.0f) { + VECAdd(&lbl_1_bss_118[temp_r31], &spC, &lbl_1_bss_118[temp_r31]); + if(lbl_1_bss_118[temp_r31].x < 0.0f) { + lbl_1_bss_118[temp_r31].x = 0.0f; + } + if(lbl_1_bss_118[temp_r31].y < 0.0f) { + lbl_1_bss_118[temp_r31].y = 0.0f; + } + if(lbl_1_bss_118[temp_r31].z < 0.0f) { + lbl_1_bss_118[temp_r31].z = 0.0f; + } + BoardModelScaleSetV(lbl_1_bss_18A[temp_r31], &lbl_1_bss_118[temp_r31]); + if(lbl_1_bss_118[temp_r31].x == 0.0f) { + temp_r30++; + } + } + + + } + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + BoardModelVisibilitySet(lbl_1_bss_18A[temp_r31], 0); + } +} + +void fn_1_8570(void) +{ + u32 temp_r31; + temp_r31 = (u32)lbl_1_bss_100->user_data; + temp_r31 |= 0x20000000; + *(u32 *)&lbl_1_bss_100->user_data = temp_r31; + while(((u32)lbl_1_bss_100->user_data & 0x80000000) == 0) { + HuPrcVSleep(); + } + HuPrcKill(lbl_1_bss_100); + lbl_1_bss_100 = NULL; +} + +void fn_1_8E38(ModelData *model, ParticleData *particle, Mtx matrix); + +void fn_1_85FC(void) +{ + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + + Vec sp20[3]; + Vec sp14; + float sp8[3]; + s32 temp_r31; + u32 temp_r30; + u32 temp_r29; + s32 temp_r28; + ParticleData *temp_r27; + temp_r30 = (u32)HuPrcCurrentGet()->user_data; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + BoardModelPosGet(lbl_1_bss_18A[temp_r31], &sp20[temp_r31]); + sp20[temp_r31].y += 50.0f; + sp8[temp_r31] = 0.0f; + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp14.x = sp14.y = sp14.z = sp8[temp_r31]; + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp14); + BoardModelVisibilitySet(lbl_1_bss_184[temp_r31], 1); + temp_f28 = 130.0f+sp20[temp_r31].y; + if(temp_r30 & 0x10000000) { + lbl_1_bss_CC[temp_r31] = Hu3DParticleCreate(lbl_1_bss_C8, 100); + temp_r27 = Hu3DData[lbl_1_bss_CC[temp_r31]].unk_120; + temp_r27->unk_02 = lbl_1_bss_184[temp_r31]; + Hu3DParticleHookSet(lbl_1_bss_CC[temp_r31], fn_1_8E38); + Hu3DParticleColSet(lbl_1_bss_CC[temp_r31], 255, 255, 0); + Hu3DModelPosSet(lbl_1_bss_CC[temp_r31], 0, 0, 0); + Hu3DParticleBlendModeSet(lbl_1_bss_CC[temp_r31], 1); + Hu3DModelLayerSet(lbl_1_bss_CC[temp_r31], 2); + } + } + } + temp_f31 = 12; + temp_f29 = 0.05f; + while(1) { + temp_r28 = 0; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + temp_r28++; + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp20[temp_r31].y += temp_f31; + if(sp20[temp_r31].y >= temp_f28) { + sp20[temp_r31].y = temp_f28; + temp_r28--; + } + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp8[temp_r31] += temp_f29; + if(sp8[temp_r31] > 1.0f) { + sp8[temp_r31] = 1.0f; + } + sp14.x = sp14.y = sp14.z = sp8[temp_r31]; + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp14); + } + } + temp_f31 *= 0.92f; + if(temp_r28 == 0) { + break; + } + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + sp8[temp_r31] = 1.0f; + sp14.x = sp14.y = sp14.z = sp8[temp_r31]; + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp14); + } + } + temp_r30 |= 0x40000000; + *((u32 *)&HuPrcCurrentGet()->user_data) = temp_r30; + temp_f30 = 0; + while(1) { + + temp_r30 = (u32)HuPrcCurrentGet()->user_data; + if(temp_r30 & 0x20000000) { + break; + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp20[temp_r31].y += sind(temp_f30)*0.25f; + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + } + + } + temp_f30 += 5.0f; + if(temp_f30 >= 360.0f) { + temp_f30 -= 360.0f; + } + + HuPrcVSleep(); + } + temp_f31 = -12; + temp_f29 = -0.05f; + while(1) { + temp_r28 = 0; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + temp_r28++; + BoardModelPosGet(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp20[temp_r31].y += temp_f31; + BoardModelPosSetV(lbl_1_bss_184[temp_r31], &sp20[temp_r31]); + sp8[temp_r31] += temp_f29; + if(sp8[temp_r31] < 0.0f) { + sp8[temp_r31] = 0.0f; + } + if(sp8[temp_r31] == 0.0f) { + temp_r28--; + } + sp14.x = sp14.y = sp14.z = sp8[temp_r31]; + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp14); + } + } + temp_f31 *= 0.92f; + if(temp_r28 == 0) { + break; + } + HuPrcVSleep(); + } + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + sp14.x = sp14.y = sp14.z = 1.0f; + BoardModelScaleSetV(lbl_1_bss_184[temp_r31], &sp14); + BoardModelVisibilitySet(lbl_1_bss_184[temp_r31], 0); + } + } + temp_r30 |= 0x80000000; + *((u32 *)&HuPrcCurrentGet()->user_data) = temp_r30; + while(1) { + HuPrcVSleep(); + } +} + +void fn_1_8DAC(void) +{ + s32 temp_r31; + u32 temp_r30 = (u32)HuPrcCurrentGet()->user_data; + u32 temp_r29; + if(temp_r30 & 0x10000000) { + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r29 = 1 << temp_r31; + if(temp_r30 & temp_r29) { + Hu3DModelKill(lbl_1_bss_CC[temp_r31]); + } + } + } +} + +void fn_1_8E38(ModelData *model, ParticleData *particle, Mtx matrix) +{ + Vec sp8; + f32 temp_f30; + f32 temp_f29; + f32 temp_f31; + HsfanimStruct01* var_r31; + s32 i, j; + + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, 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 (i = 0; i < 22; i++) { + var_r31 = particle->unk_48; + for (j = 0; j < particle->unk_30; j++, var_r31++) { + if (0.0f == var_r31->unk2C) { + break; + } + } + if (j != particle->unk_30) { + temp_f30 = 360.0f * ((1.0f/255.0f) * frand8()); + temp_f29 = temp_f31 * (20.0f + (60.0f * ((1.0f/255.0f) * frand8()))); + var_r31->unk34.x = (sp8.x + (temp_f29 * sind(temp_f30))); + var_r31->unk34.z = (sp8.z + (temp_f29 * cosd(temp_f30))); + var_r31->unk34.y = (sp8.y + (temp_f31 * (-30.0f + (40.0f * ((1.0f/255.0f) * frand8()))))); + var_r31->unk08.x = (0.5f + (3.0f * ((1.0f/255.0f) * frand8()))); + var_r31->unk08.y = (0.3f + (2.0f * ((1.0f/255.0f) * frand8()))); + var_r31->unk40.a = 180; + var_r31->unk2C = (15.0f * temp_f31); + } + } + + var_r31 = particle->unk_48; + + for (i = 0; i < particle->unk_30; i++, var_r31++) { + if (0.0f != var_r31->unk2C) { + var_r31->unk34.y = (var_r31->unk34.y - var_r31->unk08.x); + var_r31->unk2C = (var_r31->unk2C - var_r31->unk08.y); + if (var_r31->unk2C <= 0.0f) { + var_r31->unk2C = 0.0f; + } + } + } +} diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index afb983f6..e672440f 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -19,6 +19,7 @@ #include "game/hsfmotion.h" #include "game/pad.h" #include "game/frand.h" +#include "ext_math.h" typedef struct someBits { /* 0x00 */ struct { @@ -939,7 +940,7 @@ void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) { HsfanimStruct01* var_r31; s32 i, j; - if (particle->unk_34 == 0U) { + if (particle->unk_34 == 0) { var_r31 = particle->unk_48; for (i = 0; i < particle->unk_30; i++, var_r31++) { var_r31->unk40.a = 0; @@ -952,7 +953,7 @@ void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) { temp_f31 = sp8.x; BoardModelPosGet(particle->unk_02, &sp8); - for (i = 0; i < 0x16; i++) { + for (i = 0; i < 22; i++) { var_r31 = particle->unk_48; for (j = 0; j < particle->unk_30; j++, var_r31++) { if (0.0f == var_r31->unk2C) { @@ -960,13 +961,13 @@ void fn_1_BE30(ModelData *model, ParticleData *particle, Mtx matrix) { } } if (j != particle->unk_30) { - temp_f30 = 360.0f * (0.003921569f * frand8()); - temp_f29 = temp_f31 * (20.0f + (60.0f * (0.003921569f * frand8()))); - 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 * frand8()))))); - var_r31->unk08.x = (0.5f + (3.0f * (0.003921569f * frand8()))); - var_r31->unk08.y = (0.3f + (2.0f * (0.003921569f * frand8()))); + temp_f30 = 360.0f * ((1.0f/255.0f) * frand8()); + temp_f29 = temp_f31 * (20.0f + (60.0f * ((1.0f/255.0f) * frand8()))); + var_r31->unk34.x = (sp8.x + (temp_f29 * sind(temp_f30))); + var_r31->unk34.z = (sp8.z + (temp_f29 * cosd(temp_f30))); + var_r31->unk34.y = (sp8.y + (temp_f31 * (-30.0f + (40.0f * ((1.0f/255.0f) * frand8()))))); + var_r31->unk08.x = (0.5f + (3.0f * ((1.0f/255.0f) * frand8()))); + var_r31->unk08.y = (0.3f + (2.0f * ((1.0f/255.0f) * frand8()))); var_r31->unk40.a = 180; var_r31->unk2C = (15.0f * temp_f31); }