#include "REL/w06Dll.h" #include "game/audio.h" #include "game/data.h" #include "game/gamework_data.h" #include "game/hsfanim.h" #include "game/hsfman.h" #include "game/minigame_seq.h" #include "game/object.h" #include "game/pad.h" #include "game/process.h" #include "game/sprite.h" #include "game/window.h" #include "game/frand.h" #include "game/board/audio.h" #include "game/board/com.h" #include "game/board/main.h" #include "game/board/model.h" #include "game/board/player.h" #include "game/board/space.h" #include "game/board/ui.h" #include "game/board/window.h" #include "dolphin.h" #include "ext_math.h" typedef struct { struct { u8 unk00_field0 : 1; u8 unk00_field1 : 2; u8 unk00_field2 : 2; u8 unk00_field3 : 1; u8 unk00_field4 : 1; }; u8 unk01; s8 unk02; s8 unk03; char unk04[2]; s16 unk06; s16 unk08; char unk0A[2]; s32 unk0C; } Data1B4Work; typedef struct { struct { u8 unk00_field0 : 1; u8 unk00_field1 : 2; u8 unk00_field2 : 1; }; s8 unk01; s8 unk02; s8 unk03; } Bss24Work; typedef struct { struct { u8 unk00_field0 : 1; u8 unk00_field1 : 3; u8 unk00_field2 : 1; u8 unk00_field3 : 1; }; s8 unk01[2]; s8 unk03; u8 unk04; char unk05[1]; s16 unk06; s16 unk08; s16 unk0A; } Bss28Work; typedef struct { struct { u8 unk00_field0 : 1; }; u8 unk01; u8 unk02; char unk03[1]; s16 unk04; } Bss2CWork; static void fn_1_10E4(void); static void fn_1_1148(void); static void fn_1_11B0(void); static s32 fn_1_12A0(s32 arg0); static void fn_1_15CC(s32 arg0); static void fn_1_1BE0(s32 arg0, s32 arg1); static void fn_1_1CB0(s32 arg0); static void fn_1_1D5C(s32 arg0); static void fn_1_1E30(s32 arg0); static void fn_1_1F08(s32 arg0); static void fn_1_2048(s32 arg0, s32 arg1); static void fn_1_20CC(s32 arg0); static s32 fn_1_2174(s32 arg0); static s16 fn_1_21CC(s32 arg0); static void fn_1_2220(s32 arg0, s32 arg1, s32 arg2); static void fn_1_243C(omObjData *arg0); static s32 fn_1_2A1C(s32 arg0); static void fn_1_2B60(s32 arg0); static void fn_1_2C18(void); static void fn_1_2D90(s32 arg0); static s32 fn_1_2DD0(void); static u32 fn_1_2E18(Bss24Work *arg0); static void fn_1_2EF4(omObjData *arg0); static void fn_1_3470(void); static void fn_1_3560(s32 arg0); static s32 fn_1_35BC(void); static void fn_1_3604(s32 arg0); static void fn_1_3698(s8 arg0); static void fn_1_3974(omObjData *arg0); static void fn_1_4070(void); static void fn_1_4124(void); static void fn_1_4194(omObjData *arg0); static void fn_1_42AC(s16 arg0); static void fn_1_43DC(void); static void fn_1_4460(ModelData *model, ParticleData *particle, Mtx matrix); static s16 lbl_1_bss_3C[3]; static s16 lbl_1_bss_36[3]; static s16 lbl_1_bss_34; static s8 lbl_1_bss_33; static s8 lbl_1_bss_30[3]; static omObjData *lbl_1_bss_2C; static omObjData *lbl_1_bss_28; static omObjData *lbl_1_bss_24; static AnimData *lbl_1_bss_20; static s8 lbl_1_bss_1C; static Process *lbl_1_bss_18; static s16 lbl_1_data_1A8 = -1; static s8 lbl_1_data_1AA[3] = { -1, -1, -1 }; static s8 lbl_1_data_1AD[3] = { 0, 0, 0 }; static s16 lbl_1_data_1B0 = -1; static omObjData *lbl_1_data_1B4[3] = { NULL, NULL, NULL }; void fn_1_D70(void) { Vec sp20; Vec sp14; Vec sp8; s32 i; BoardModelPosGet(lbl_1_bss_C[1], &sp20); sp8.x = sp20.x; sp8.y = sp20.y + 60.0f; sp8.z = sp20.z + -50.0f; BoardModelPosSetV(lbl_1_bss_C[4], &sp8); for (i = 0; i < 3; i++) { lbl_1_bss_3C[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 9), NULL, 0); sp14.x = sp20.x + 150.0f * (i - 1.0f); sp14.y = sp20.y; sp14.z = sp20.z + 100.0f; BoardModelPosSetV(lbl_1_bss_3C[i], &sp14); BoardModelMotionSpeedSet(lbl_1_bss_3C[i], 0.0f); lbl_1_data_1AD[i] = 0; lbl_1_bss_36[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 10), NULL, 0); BoardModelVisibilitySet(lbl_1_bss_36[i], 0); BoardModelHookSet(lbl_1_bss_3C[i], "batu", lbl_1_bss_36[i]); } } void fn_1_F6C(void) { s32 i; for (i = 0; i < 3; i++) { BoardModelHookReset(lbl_1_bss_3C[i]); if (lbl_1_bss_3C[i] != -1) { BoardModelKill(lbl_1_bss_3C[i]); lbl_1_bss_3C[i] = -1; } if (lbl_1_bss_36[i] != -1) { BoardModelKill(lbl_1_bss_36[i]); lbl_1_bss_36[i] = -1; } } } void fn_1_1054(void) { BoardRollDispSet(0); lbl_1_bss_18 = HuPrcChildCreate(fn_1_1148, 0x2003, 0x3800, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_18, fn_1_10E4); while (lbl_1_bss_18) { HuPrcVSleep(); } BoardRollDispSet(1); } static void fn_1_10E4(void) { fn_1_43DC(); if (lbl_1_data_1A8 != -1) { HuWinKill(lbl_1_data_1A8); lbl_1_data_1A8 = -1; } lbl_1_bss_18 = NULL; } static void fn_1_1148(void) { s32 temp_r3; s32 temp_r31; temp_r31 = GWSystem.player_curr; temp_r3 = fn_1_12A0(temp_r31); if (temp_r3 != 0) { fn_1_15CC(temp_r31); } fn_1_1BE0(temp_r31, temp_r3); HuPrcEnd(); } static void fn_1_11B0(void) { float sp8[2]; float var_f31; float var_f30; HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(48, 25)); var_f31 = -10000.0f; var_f30 = 352.0f; lbl_1_data_1A8 = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 0); HuWinBGTPLvlSet(lbl_1_data_1A8, 0.0f); HuWinMesSpeedSet(lbl_1_data_1A8, 0); HuWinMesSet(lbl_1_data_1A8, MAKE_MESSID(48, 25)); } static s32 fn_1_12A0(s32 arg0) { Vec sp38; Vec sp2C; Vec sp20; Vec sp14; Vec sp8; s16 var_r30; if (BoardPlayerItemCount(arg0) == 3) { BoardWinCreate(2, MAKE_MESSID(48, 17), 6); BoardWinWait(); BoardWinKill(); return 0; } HuAudFXPlay(0x362); fn_1_1D5C(0); fn_1_1D5C(2); fn_1_1D5C(1); fn_1_1CB0(0); fn_1_1CB0(1); fn_1_1CB0(2); lbl_1_bss_30[0] = lbl_1_bss_30[1] = lbl_1_bss_30[2] = 0; fn_1_1F08(arg0); BoardWinCreateChoice(2, MAKE_MESSID(48, 18), 6, 0); if (GWPlayer[arg0].com) { BoardComKeySetLeft(); } BoardWinWait(); if (BoardWinChoiceGet() != 0) { BoardWinCreate(2, MAKE_MESSID(48, 19), 6); BoardWinWait(); BoardWinKill(); fn_1_2048(-1, 1); while (fn_1_2174(0) != 0) { HuPrcVSleep(); } fn_1_1E30(0); fn_1_1E30(2); fn_1_1E30(1); return 0; } BoardWinKill(); BoardAudSeqPause(0, 1, 1000); sp14.x = 0.0f; sp14.y = 100.0f; sp14.z = 0.0f; sp8.x = -20.0f; sp8.y = 0.0f; sp8.z = 0.0f; BoardCameraMotionStartEx(lbl_1_bss_C[1], &sp8, &sp14, 1600.0f, -1.0f, 21); var_r30 = GWPlayer[arg0].space_curr; lbl_1_bss_34 = BoardSpaceLinkFlagSearch(0, var_r30, 0x02000000); BoardPlayerPosGet(arg0, &sp2C); BoardSpacePosGet(0, lbl_1_bss_34, &sp38); VECSubtract(&sp38, &sp2C, &sp20); VECNormalize(&sp20, &sp20); BoardPlayerRotYSet(arg0, atan2d(-sp20.x, -sp20.z)); BoardPlayerPosLerpStart(arg0, &sp2C, &sp38, 20); while (GWPlayer[arg0].moving) { HuPrcVSleep(); } BoardPlayerIdleSet(arg0); HuPrcSleep(60); return 1; } static void fn_1_15CC(s32 arg0) { s8 sp8[] = { 80, 50 }; s32 var_r28; s16 temp_r26; s32 temp_r25; s32 var_r30; s32 var_r31; BoardMusStart(1, 0x26, 0x7F, 0); temp_r26 = MGSeqStartCreate(); while (MGSeqStatGet(temp_r26) != 0) { HuPrcVSleep(); } fn_1_2048(-1, 1); while (fn_1_2174(0) != 0) { HuPrcVSleep(); } fn_1_1E30(0); fn_1_1E30(2); fn_1_1E30(1); fn_1_1CB0(0); fn_1_1CB0(1); fn_1_1CB0(2); lbl_1_bss_30[0] = lbl_1_bss_30[1] = lbl_1_bss_30[2] = 0; fn_1_3470(); fn_1_2B60(arg0); for (var_r30 = 0; var_r30 < 2; var_r30++) { fn_1_4070(); fn_1_11B0(); fn_1_2D90(2); fn_1_2C18(); while (fn_1_2DD0() != 3) { HuPrcVSleep(); } fn_1_4124(); HuWinDispOff(lbl_1_data_1A8); fn_1_3560(1); fn_1_3698(lbl_1_bss_33); while (fn_1_35BC() != 0) { HuPrcVSleep(); } BoardWinCreate(2, MAKE_MESSID(48, 20), 6); BoardWinWait(); var_r28 = (BoardRandMod(100) >= sp8[var_r30]) ? 1 : 0; HuPrcSleep(60); if (var_r28 != 0) { break; } BoardWinCreate(2, MAKE_MESSID(48, 21), 6); BoardWinWait(); lbl_1_bss_30[lbl_1_bss_33] = 1; BoardModelVisibilitySet(lbl_1_bss_36[lbl_1_bss_33], 1); HuAudFXPlay(0xB); HuPrcSleep(60); if (var_r30 == 0) { BoardWinCreate(2, MAKE_MESSID(48, 41), 6); BoardWinWait(); BoardWinKill(); } else { for (var_r31 = 0; var_r31 < 3; var_r31++) { if (lbl_1_bss_30[var_r31] == 0) { lbl_1_bss_33 = var_r31; break; } } fn_1_3560(1); fn_1_3698(lbl_1_bss_33); while (fn_1_35BC() != 0) { HuPrcVSleep(); } break; } } fn_1_2D90(4); BoardAudSeqFadeOut(1, 1000); fn_1_1D5C(lbl_1_bss_33); fn_1_42AC(fn_1_21CC(lbl_1_bss_33)); fn_1_1CB0(lbl_1_bss_33); fn_1_20CC(lbl_1_bss_33); fn_1_2048(lbl_1_bss_33, 2); BoardWinCreate(2, MAKE_MESSID(48, 23), 6); BoardWinInsertMesSet(MAKE_MESSID(8, lbl_1_data_1AA[lbl_1_bss_33]), 0); BoardWinWait(); BoardWinKill(); fn_1_3560(1); fn_1_3698(1); BoardPlayerMotBlendSet(arg0, 0, 0xF); while (!BoardPlayerMotBlendCheck(arg0)) { HuPrcVSleep(); } fn_1_2048(lbl_1_bss_33, 3); temp_r25 = HuAudSStreamPlay(2); BoardPlayerMotionShiftSet(arg0, 7, 0.0f, 8.0f, HU3D_MOTATTR_NONE); HuPrcSleep(8); while (!BoardPlayerMotionEndCheck(arg0)) { HuPrcVSleep(); } while (HuAudSStreamStatGet(temp_r25) != 0) { HuPrcVSleep(); } BoardAudSeqPause(0, 0, 1000); BoardPlayerItemAdd(arg0, lbl_1_data_1AA[lbl_1_bss_33]); while (fn_1_35BC() != 0) { HuPrcVSleep(); } BoardWinCreate(2, MAKE_MESSID(48, 24), 6); BoardWinWait(); BoardWinKill(); fn_1_1E30(lbl_1_bss_33); fn_1_1CB0(lbl_1_bss_33); for (var_r31 = 0; var_r31 < 3; var_r31++) { BoardModelVisibilitySet(lbl_1_bss_36[var_r31], 0); } } static void fn_1_1BE0(s32 arg0, s32 arg1) { Vec sp18; Vec spC; s16 temp_r30; temp_r30 = GWPlayer[arg0].space_curr; BoardPlayerPosGet(arg0, &sp18); BoardSpacePosGet(0, temp_r30, &spC); BoardCameraTargetPlayerSet(arg0); BoardCameraViewSet(1); if (arg1 != 0) { BoardPlayerPosLerpStart(arg0, &sp18, &spC, 40); while (GWPlayer[arg0].moving) { HuPrcVSleep(); } } BoardCameraMotionWait(); fn_1_2048(-1, 4); } static void fn_1_1CB0(s32 arg0) { while (!BoardModelMotionEndCheck(lbl_1_bss_3C[arg0])) { HuPrcVSleep(); } if (lbl_1_data_1AD[arg0] == 0) { BoardModelAttrReset(lbl_1_bss_3C[arg0], 0x40000004); BoardModelAttrSet(lbl_1_bss_3C[arg0], 0x40000002); } } static void fn_1_1D5C(s32 arg0) { s8 spC[] = { 0x20, 0x40, 0x60 }; s16 sp10[] = { -100, 0, 100 }; s32 sp8; if (lbl_1_data_1AD[arg0] == 0) { sp8 = HuAudFXPlayVolPan(0x4A4, 0x7F, spC[arg0]); BoardModelMotionStart(lbl_1_bss_3C[arg0], 0, 0); lbl_1_data_1AD[arg0] = 1; } } static void fn_1_1E30(s32 arg0) { s8 spC[] = { 0x20, 0x40, 0x60 }; s16 sp10[] = { -100, 0, 100 }; s32 sp8; if (lbl_1_data_1AD[arg0] != 0) { sp8 = HuAudFXPlayVolPan(0x4A5, 0x7F, spC[arg0]); BoardModelMotionStart(lbl_1_bss_3C[arg0], 0, 0x40000004); lbl_1_data_1AD[arg0] = 0; } } static void fn_1_1F08(s32 arg0) { s32 i; s32 j; i = 0; while (i < 3) { lbl_1_data_1AA[i] = frandmod(14); if (lbl_1_data_1AA[i] != 10 && lbl_1_data_1AA[i] != 13) { for (j = 0; j < i; j++) { if (lbl_1_data_1AA[i] == lbl_1_data_1AA[j]) { lbl_1_data_1AA[i] = -1; } } if (lbl_1_data_1AA[i] != -1) { i++; } } } for (i = 0; i < 3; i++) { fn_1_2220(arg0, i, lbl_1_data_1AA[i]); } } static void fn_1_2048(s32 arg0, s32 arg1) { Data1B4Work *temp_r30; s32 i; for (i = 0; i < 3; i++) { if ((arg0 == i || arg0 == -1) && lbl_1_data_1B4[i]) { temp_r30 = OM_GET_WORK_PTR(lbl_1_data_1B4[i], Data1B4Work); temp_r30->unk02 = arg1; temp_r30->unk08 = 0; } } } static void fn_1_20CC(s32 arg0) { Data1B4Work *temp_r30; s32 i; for (i = 0; i < 3; i++) { if ((arg0 == i || arg0 == -1) && lbl_1_data_1B4[i]) { temp_r30 = OM_GET_WORK_PTR(lbl_1_data_1B4[i], Data1B4Work); if (temp_r30->unk0C == -1) { temp_r30->unk0C = HuAudFXPlay(0x35F); } } } } static s32 fn_1_2174(s32 arg0) { Data1B4Work *temp_r31; if (!lbl_1_data_1B4[arg0]) { return -1; } temp_r31 = OM_GET_WORK_PTR(lbl_1_data_1B4[arg0], Data1B4Work); return temp_r31->unk02; } static s16 fn_1_21CC(s32 arg0) { Data1B4Work *temp_r31; if (!lbl_1_data_1B4[arg0]) { return -1; } temp_r31 = OM_GET_WORK_PTR(lbl_1_data_1B4[arg0], Data1B4Work); return temp_r31->unk06; } static void fn_1_2220(s32 arg0, s32 arg1, s32 arg2) { Mtx sp18; Vec spC; omObjData *temp_r3; Data1B4Work *temp_r31; s32 var_r28; temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_243C); lbl_1_data_1B4[arg1] = temp_r3; temp_r31 = OM_GET_WORK_PTR(temp_r3, Data1B4Work); temp_r31->unk00_field0 = 0; temp_r31->unk02 = 2; temp_r31->unk03 = 0; temp_r31->unk00_field2 = arg1; temp_r31->unk08 = 0; temp_r31->unk01 = 0; temp_r31->unk00_field4 = 0; temp_r31->unk00_field3 = 0; temp_r31->unk00_field1 = arg0; temp_r31->unk0C = -1; var_r28 = BoardItemModelGet(arg2); temp_r31->unk06 = BoardModelCreate(var_r28, NULL, 0); BoardModelMotionSpeedSet(temp_r31->unk06, 0.0f); BoardModelPosGet(lbl_1_bss_3C[arg1], &spC); temp_r3->trans.x = spC.x; temp_r3->trans.y = spC.y; temp_r3->trans.z = spC.z; temp_r3->rot.x = 0.0f; temp_r3->rot.y = 0.0f; temp_r3->rot.z = 0.0f; if (arg2 == 5) { PSMTXTrans(sp18, 0.0f, -50.0f, 0.0f); BoardModelMtxSet(temp_r31->unk06, &sp18); } BoardModelPosSet(temp_r31->unk06, temp_r3->trans.x, temp_r3->trans.y, temp_r3->trans.z); BoardModelScaleSet(temp_r31->unk06, 0.1f, 0.1f, 0.1f); BoardModelLayerSet(temp_r31->unk06, 2); } static void fn_1_243C(omObjData *arg0) { Vec sp14; Vec sp8; Data1B4Work *temp_r31; temp_r31 = OM_GET_WORK_PTR(arg0, Data1B4Work); if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { if (temp_r31->unk0C != -1) { HuAudFXStop(temp_r31->unk0C); temp_r31->unk0C = -1; } BoardModelKill(temp_r31->unk06); lbl_1_data_1B4[temp_r31->unk00_field2] = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); return; } if (temp_r31->unk01 != 0) { temp_r31->unk01--; return; } switch (temp_r31->unk02) { case 2: if (temp_r31->unk00_field3 == 0) { BoardModelPosGet(temp_r31->unk06, &sp14); if (temp_r31->unk08 == 0) { BoardModelPosGet(lbl_1_bss_3C[temp_r31->unk00_field2], &sp8); sp8.y += 200.0f; arg0->trans.y = (sp8.y - sp14.y) / 30.0f; arg0->rot.z = 0.01f; } else { arg0->rot.z += 0.033333335f; if (arg0->rot.z > 1.0f) { arg0->rot.z = 1.0f; } sp14.y += arg0->trans.y; } BoardModelPosSetV(temp_r31->unk06, &sp14); BoardModelScaleSet(temp_r31->unk06, arg0->rot.z, arg0->rot.z, arg0->rot.z); temp_r31->unk08++; if (temp_r31->unk08 >= 31) { temp_r31->unk00_field3 = 1; } return; } fn_1_2048(temp_r31->unk00_field2, 0); break; case 1: if (temp_r31->unk00_field3 != 0) { BoardModelPosGet(temp_r31->unk06, &sp14); if (temp_r31->unk08 == 0) { HuAudFXPlay(0x30D); BoardModelPosGet(lbl_1_bss_3C[temp_r31->unk00_field2], &sp8); arg0->trans.y = (sp8.y - sp14.y) / 30.0f; arg0->rot.z = 1.0f; } else { arg0->rot.z -= 0.033333335f; if (arg0->rot.z < 0.001f) { arg0->rot.z = 0.001f; } sp14.y += arg0->trans.y; } BoardModelPosSetV(temp_r31->unk06, &sp14); BoardModelScaleSet(temp_r31->unk06, arg0->rot.z, arg0->rot.z, arg0->rot.z); temp_r31->unk08++; if (temp_r31->unk08 >= 31) { if (temp_r31->unk0C != -1) { HuAudFXStop(temp_r31->unk0C); temp_r31->unk0C = -1; } temp_r31->unk00_field3 = 0; } return; } fn_1_2048(temp_r31->unk00_field2, 0); break; case 3: BoardModelPosGet(temp_r31->unk06, &sp14); if (temp_r31->unk08 == 0) { BoardPlayerPosGet(temp_r31->unk00_field1, &sp8); arg0->rot.x = (sp8.x - sp14.x) / 30.0f; arg0->rot.z = (sp8.z - sp14.z) / 30.0f; } else if (temp_r31->unk08 < 30) { sp14.x += arg0->rot.x; sp14.z += arg0->rot.z; BoardModelPosSetV(temp_r31->unk06, &sp14); } else { BoardPlayerPosGet(temp_r31->unk00_field1, &sp8); arg0->trans.x = sp8.x; arg0->trans.y = sp8.y; arg0->trans.z = sp8.z; temp_r31->unk01 = 30; temp_r31->unk08 = 0; arg0->rot.z = 1.0f; fn_1_2048(temp_r31->unk00_field2, 1); break; } temp_r31->unk08++; break; case 4: temp_r31->unk00_field0 = 1; break; case 0: break; } } static s8 lbl_1_data_1C5[14] = { 1, 1, 3, 3, 2, 2, 2, 1, 2, 3, 0, 4, 5, 0 }; static s32 fn_1_2A1C(s32 arg0) { s32 var_r29; s32 var_r28; s32 var_r30; s32 var_r31; var_r29 = lbl_1_data_1C5[lbl_1_data_1AA[0]]; var_r28 = lbl_1_data_1C5[lbl_1_data_1AA[1]]; var_r30 = lbl_1_data_1C5[lbl_1_data_1AA[2]]; if (lbl_1_bss_30[0] != 0) { var_r29 = 0; } if (lbl_1_bss_30[1] != 0) { var_r28 = 0; } if (lbl_1_bss_30[2] != 0) { var_r30 = 0; } if (var_r29 > var_r28) { if (var_r29 > var_r30) { var_r31 = 0; } else if (var_r30 > var_r28) { var_r31 = 2; } else { var_r31 = 1; } } else { if (var_r28 > var_r30) { var_r31 = 1; } else if (var_r30 > var_r29) { var_r31 = 2; } else { var_r31 = 0; } } return var_r31; } static void fn_1_2B60(s32 arg0) { omObjData *temp_r3; Bss24Work *temp_r31; temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_2EF4); lbl_1_bss_24 = temp_r3; temp_r31 = OM_GET_WORK_PTR(temp_r3, Bss24Work); temp_r31->unk00_field0 = 0; temp_r31->unk00_field2 = 0; temp_r31->unk00_field1 = arg0; temp_r31->unk01 = 0; temp_r31->unk03 = 0; temp_r31->unk02 = 1; } static void fn_1_2C18(void) { Bss24Work *var_r27; if (lbl_1_bss_24) { var_r27 = OM_GET_WORK_PTR(lbl_1_bss_24, Bss24Work); var_r27->unk03 = fn_1_2A1C(var_r27->unk00_field1); } } static void fn_1_2D90(s32 arg0) { Bss24Work *var_r31; if (lbl_1_bss_24) { var_r31 = OM_GET_WORK_PTR(lbl_1_bss_24, Bss24Work); var_r31->unk01 = arg0; } } static s32 fn_1_2DD0(void) { Bss24Work *var_r31; if (!lbl_1_bss_24) { return 4; } var_r31 = OM_GET_WORK_PTR(lbl_1_bss_24, Bss24Work); return var_r31->unk01; } static u32 fn_1_2E18(Bss24Work *arg0) { s32 temp_r31; s32 var_r30; if (GWPlayer[arg0->unk00_field1].com) { if (arg0->unk02 == arg0->unk03) { return 0x100; } if (arg0->unk02 > arg0->unk03) { return 1; } return 2; } temp_r31 = GWPlayer[arg0->unk00_field1].port; var_r30 = HuPadDStk[temp_r31] | HuPadBtnDown[temp_r31]; return var_r30; } static void fn_1_2EF4(omObjData *arg0) { Vec sp14; Vec sp8; float var_f30; s32 var_r28; s32 temp_r19; s32 var_r26; s32 var_r25; u32 var_r29; Bss24Work *temp_r30; var_r29 = 0; temp_r30 = OM_GET_WORK_PTR(arg0, Bss24Work); if (temp_r30->unk00_field0 != 0 || BoardIsKill()) { lbl_1_bss_24 = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); return; } if (lbl_1_bss_30[0] != 0) { var_r25 = 1; } else { var_r25 = 0; } if (lbl_1_bss_30[2] != 0) { var_r26 = 1; } else { var_r26 = 2; } switch (temp_r30->unk01) { case 2: var_r29 = fn_1_2E18(temp_r30); if (var_r29 == 0x100 || lbl_1_bss_1C != 0) { if (lbl_1_bss_30[temp_r30->unk02] == 0) { HuAudFXPlay(2); lbl_1_bss_33 = temp_r30->unk02; fn_1_2D90(3); return; } if (lbl_1_bss_1C == 0) { HuAudFXPlay(4); break; } if (temp_r30->unk02 == 1) { if (lbl_1_bss_30[0] == 0 && lbl_1_bss_30[1] == 0) { if (BoardRandMod(100) < 50) { var_r29 = 1; } else { var_r29 = 2; } } else { if (lbl_1_bss_30[0] == 0) { var_r29 = 2; } else if (lbl_1_bss_30[1] == 0) { var_r29 = 1; } } } if (temp_r30->unk02 == 0) { var_r29 = 2; } if (temp_r30->unk02 == 2) { var_r29 = 1; } } temp_r19 = temp_r30->unk02; var_r28 = 0; if (var_r29 & 1) { var_r28 = -1; } if (var_r29 & 2) { var_r28 = 1; } temp_r30->unk02 += var_r28; if (temp_r30->unk02 == 1 && lbl_1_bss_30[1] != 0) { temp_r30->unk02 += var_r28; } if (temp_r30->unk02 > var_r26) { temp_r30->unk02 = var_r26; } if (temp_r30->unk02 < var_r25) { temp_r30->unk02 = var_r25; } if (temp_r30->unk02 == temp_r19) { break; } fn_1_2D90(1); BoardSpacePosGet(0, lbl_1_bss_34, &sp8); BoardPlayerPosGet(temp_r30->unk00_field1, &sp14); OSs8tof32(&temp_r30->unk02, &var_f30); sp8.x += 150.0f * (var_f30 - 1.0f); BoardPlayerPosLerpStart(temp_r30->unk00_field1, &sp14, &sp8, 20); break; case 0: break; case 1: if (!GWPlayer[temp_r30->unk00_field1].moving) { fn_1_2D90(2); BoardPlayerRotYSet(temp_r30->unk00_field1, 180.0f); BoardPlayerIdleSet(temp_r30->unk00_field1); } break; case 3: fn_1_2D90(0); break; case 4: temp_r30->unk00_field0 = 1; break; } } static void fn_1_3470(void) { omObjData *temp_r3; Bss28Work *temp_r31; temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_3974); lbl_1_bss_28 = temp_r3; temp_r31 = OM_GET_WORK_PTR(temp_r3, Bss28Work); temp_r31->unk00_field0 = 0; temp_r31->unk00_field1 = 0; temp_r31->unk03 = 0; temp_r31->unk00_field2 = 0; temp_r31->unk04 = 0; temp_r31->unk06 = 0; temp_r31->unk08 = BoardModelMotionCreate(lbl_1_bss_C[4], DATA_MAKE_NUM(DATADIR_W06, 22)); temp_r31->unk0A = BoardModelMotionCreate(lbl_1_bss_C[4], DATA_MAKE_NUM(DATADIR_W06, 23)); } static void fn_1_3560(s32 arg0) { Bss28Work *temp_r31; if (!lbl_1_bss_28) { return; } temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_28, Bss28Work); temp_r31->unk00_field1 = arg0; if (arg0 != 1) { (void) 0; } else { temp_r31->unk06 = 20; } } static s32 fn_1_35BC(void) { Bss28Work *temp_r31; if (!lbl_1_bss_28) { return 5; } temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_28, Bss28Work); return temp_r31->unk00_field1; } static void fn_1_3604(s32 arg0) { Bss28Work *temp_r31; if (!lbl_1_bss_28) { return; } temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_28, Bss28Work); switch (arg0) { case 0: temp_r31->unk01[0] = 1; temp_r31->unk01[1] = 2; break; case 2: temp_r31->unk01[0] = 1; temp_r31->unk01[1] = 0; break; default: temp_r31->unk01[0] = 0; temp_r31->unk01[1] = 2; break; } } static void fn_1_3698(s8 arg0) { Vec sp24; Vec sp18; Vec spC; float temp_f31; float var_f30; Bss28Work *temp_r31; if (!lbl_1_bss_28) { return; } temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_28, Bss28Work); BoardModelPosGet(lbl_1_bss_C[4], &sp24); BoardModelPosGet(lbl_1_bss_3C[1], &sp18); lbl_1_bss_28->trans.x = arg0 - 1; sp18.x += 150.0f * lbl_1_bss_28->trans.x; sp18.y = sp24.y; sp18.z = sp24.z; temp_f31 = sp18.x - sp24.x; if (ABS(temp_f31) < 1.0f) { BoardModelMotionShiftSet(lbl_1_bss_C[4], 1, 0.0f, 8.0f, HU3D_MOTATTR_LOOP); lbl_1_bss_28->trans.y = 0.0f; return; } if (ABS(temp_f31) >= 300.0f) { var_f30 = 40.0f; temp_r31->unk06 *= 2; } else { var_f30 = 20.0f; } VECSubtract(&sp18, &sp24, &spC); lbl_1_bss_28->trans.y = temp_f31 / var_f30; BoardModelRotYSet(lbl_1_bss_C[4], atan2d(spC.x, spC.z)); BoardModelMotionShiftSet(lbl_1_bss_C[4], temp_r31->unk08, 0.0f, 8.0f, HU3D_MOTATTR_LOOP); BoardModelMotionSpeedSet(lbl_1_bss_C[4], 2.0f); } static void fn_1_3974(omObjData *arg0) { Vec sp30; Vec sp24; s32 sp8; Bss28Work *temp_r31; sp8 = 0; temp_r31 = OM_GET_WORK_PTR(arg0, Bss28Work); if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { lbl_1_bss_28 = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); return; } if (temp_r31->unk04 != 0) { temp_r31->unk04--; return; } switch (temp_r31->unk00_field1) { case 0: break; case 3: if (temp_r31->unk03 >= 2) { if (BoardRandMod(100) < 60) { fn_1_3560(4); return; } } else { temp_r31->unk03++; } fn_1_3560(1); temp_r31->unk00_field2 ^= 1; fn_1_3698(temp_r31->unk01[temp_r31->unk00_field2]); temp_r31->unk00_field3 = 1; break; case 1: if (temp_r31->unk06 != 0) { BoardModelPosGet(lbl_1_bss_C[4], &sp30); sp30.x += arg0->trans.y; BoardModelPosSetV(lbl_1_bss_C[4], &sp30); temp_r31->unk06--; break; } if (temp_r31->unk00_field3 != 0) { fn_1_3560(2); temp_r31->unk06 = 0; temp_r31->unk04 = 10; break; } fn_1_3560(0); temp_r31->unk06 = 0; BoardModelRotYSet(lbl_1_bss_C[4], 0.0f); BoardModelMotionShiftSet(lbl_1_bss_C[4], 1, 0.0f, 10.0f, HU3D_MOTATTR_LOOP); break; case 2: if (temp_r31->unk06++ == 0) { BoardModelMotionShiftSet(lbl_1_bss_C[4], temp_r31->unk0A, 0.0f, 10.0f, HU3D_MOTATTR_LOOP); break; } if (temp_r31->unk06 < 50) { BoardModelRotYSet(lbl_1_bss_C[4], 0.0f); break; } fn_1_3560(3); break; case 4: temp_r31->unk00_field3 = 0; lbl_1_bss_33 = temp_r31->unk01[temp_r31->unk00_field2]; BoardModelMotionShiftSet(lbl_1_bss_C[4], 1, 0.0f, 10.0f, HU3D_MOTATTR_LOOP); fn_1_3560(0); break; case 5: temp_r31->unk00_field0 = 1; break; } } static void fn_1_4070(void) { Bss2CWork *temp_r31; lbl_1_bss_1C = 0; lbl_1_bss_2C = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_4194); temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_2C, Bss2CWork); temp_r31->unk00_field0 = 0; temp_r31->unk01 = 5; temp_r31->unk02 = 60; temp_r31->unk04 = MGSeqTimerCreateXY(temp_r31->unk01, 288, 64); } static void fn_1_4124(void) { Bss2CWork *temp_r31; if (!lbl_1_bss_2C) { return; } temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_2C, Bss2CWork); MGSeqParamSet(temp_r31->unk04, 2, -1); temp_r31->unk04 = -1; temp_r31->unk00_field0 = 1; } static void fn_1_4194(omObjData *arg0) { Bss2CWork *temp_r31; temp_r31 = OM_GET_WORK_PTR(arg0, Bss2CWork); if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { if (temp_r31->unk04 != -1) { MGSeqParamSet(temp_r31->unk04, 2, -1); } lbl_1_bss_2C = NULL; omDelObjEx(HuPrcCurrentGet(), arg0); return; } if (temp_r31->unk04 == -1) { return; } if (temp_r31->unk02 != 0) { temp_r31->unk02--; return; } if (temp_r31->unk01 != 0) { temp_r31->unk01--; } else { MGSeqParamSet(temp_r31->unk04, 2, -1); temp_r31->unk04 = -1; lbl_1_bss_1C = 1; return; } MGSeqParamSet(temp_r31->unk04, 1, temp_r31->unk01); temp_r31->unk02 = 60; } static void fn_1_42AC(s16 arg0) { ParticleData *var_r31; lbl_1_bss_20 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0)); HuSprAnimLock(lbl_1_bss_20); lbl_1_data_1B0 = Hu3DParticleCreate(lbl_1_bss_20, 100); Hu3DParticleHookSet(lbl_1_data_1B0, fn_1_4460); Hu3DParticleColSet(lbl_1_data_1B0, 0xFF, 0xFF, 0); Hu3DModelPosSet(lbl_1_data_1B0, 0.0f, 0.0f, 0.0f); Hu3DParticleBlendModeSet(lbl_1_data_1B0, 1); Hu3DModelLayerSet(lbl_1_data_1B0, 2); var_r31 = Hu3DData[lbl_1_data_1B0].unk_120; var_r31->unk_02 = arg0; } static void fn_1_43DC(void) { if (lbl_1_data_1B0 != -1) { Hu3DModelKill(lbl_1_data_1B0); lbl_1_data_1B0 = -1; } if (lbl_1_bss_20) { HuSprAnimKill(lbl_1_bss_20); lbl_1_bss_20 = NULL; } } static void fn_1_4460(ModelData *model, ParticleData *particle, Mtx matrix) { HsfanimStruct01 *var_r31; Vec sp8; float var_f31; float temp_f30; float temp_f29; s32 i; s32 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); var_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 (var_r31->unk2C == 0.0f) { break; } } if (j != particle->unk_30) { temp_f30 = 0.003921569f * frand8() * 360.0f; temp_f29 = var_f31 * (20.0f + 0.003921569f * frand8() * 60.0f); 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 + var_f31 * (-30.0f + 0.003921569f * frand8() * 40.0f); var_r31->unk08.x = 0.5f + 0.003921569f * frand8() * 3.0f; var_r31->unk08.y = 0.3f + 0.003921569f * frand8() * 2.0f; var_r31->unk40.a = 0xB4; var_r31->unk2C = 15.0f * var_f31; } } var_r31 = particle->unk_48; for (i = 0; i < particle->unk_30; i++, var_r31++) { if (var_r31->unk2C != 0.0f) { 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; } } } }