#include "REL/m403Dll.h" #include "REL/executor.h" #include "game/audio.h" #include "game/chrman.h" #include "game/data.h" #include "game/frand.h" #include "game/gamework.h" #include "game/gamework_data.h" #include "game/hsfanim.h" #include "game/hsfman.h" #include "game/memory.h" #include "game/minigame_seq.h" #include "game/object.h" #include "game/objsub.h" #include "game/pad.h" #include "game/sprite.h" #include "game/wipe.h" #include "ext_math.h" #include "rel_sqrt_consts.h" typedef struct { /* 0x000 */ u8 unk00; /* 0x001 */ char unk01[3]; /* 0x004 */ Vec unk04; /* 0x010 */ Vec unk10; /* 0x01C */ Vec unk1C; /* 0x028 */ Vec unk28; /* 0x034 */ Vec unk34; /* 0x040 */ Vec unk40; /* 0x04C */ Vec unk4C; /* 0x058 */ Vec unk58; /* 0x064 */ Vec unk64; /* 0x070 */ Vec unk70; /* 0x07C */ Vec unk7C; /* 0x088 */ float unk88[3][3]; /* 0x0AC */ Vec unkAC; /* 0x0B8 */ Vec unkB8; /* 0x0C4 */ Vec unkC4; /* 0x0D0 */ float unkD0[3][3]; /* 0x0F4 */ float unkF4[3]; /* 0x100 */ float unk100[3]; /* 0x10C */ float unk10C[3]; /* 0x118 */ float unk118[3]; /* 0x124 */ float unk124[3]; /* 0x130 */ float unk130; /* 0x134 */ float unk134; /* 0x138 */ float unk138; /* 0x13C */ float unk13C; /* 0x140 */ float unk140; /* 0x144 */ float unk144; /* 0x148 */ float unk148; } Unkm403Struct_00; // Size 0x14C typedef struct { /* 0x00 */ u8 unk00; /* 0x01 */ u8 unk01; /* 0x02 */ u8 unk02; /* 0x03 */ u8 unk03; /* 0x04 */ u8 unk04; /* 0x05 */ u8 unk05; /* 0x06 */ u8 unk06; /* 0x07 */ u8 unk07; /* 0x08 */ char unk08[2]; /* 0x0A */ u8 unk0A; /* 0x0B */ char unk0B[1]; /* 0x0C */ u8 unk0C; /* 0x0D */ u8 unk0D; /* 0x0E */ u8 unk0E; /* 0x0F */ char unk0F[1]; /* 0x10 */ s16 unk10; /* 0x12 */ s16 unk12; /* 0x14 */ s16 unk14; /* 0x16 */ s16 unk16; /* 0x18 */ s16 unk18; /* 0x1A */ s16 unk1A; /* 0x1C */ float unk1C; /* 0x20 */ float unk20; /* 0x24 */ float unk24; /* 0x28 */ float unk28; /* 0x2C */ Vec unk2C; /* 0x38 */ float unk38; /* 0x3C */ float unk3C; /* 0x40 */ float unk40; /* 0x44 */ float unk44; /* 0x48 */ float unk48; /* 0x4C */ float unk4C; /* 0x50 */ Vec unk50; /* 0x5C */ s16 unk5C; // Start of a struct of size 0x40 (memset)? /* 0x5E */ s16 unk5E; /* 0x60 */ float unk60; /* 0x64 */ float unk64; /* 0x68 */ char unk68[0x34]; /* 0x9C */ u8 unk9C; /* 0x9D */ char unk9D[3]; /* 0xA0 */ s32 unkA0; } Unkm403Struct_01; // Size 0xA4 static void fn_1_424(omObjData *arg0); static void fn_1_444(omObjData *arg0); static void fn_1_82C(omObjData *arg0); static void fn_1_1214(omObjData *arg0); static void fn_1_1274(omObjData *arg0); static void fn_1_1460(omObjData *arg0); static void fn_1_16D8(omObjData *arg0); static void fn_1_17DC(omObjData *arg0); static void fn_1_1A50(float arg0, Vec *arg1, Vec *arg2, float arg3); static void fn_1_1AF0(float arg0, Vec *arg1, Vec *arg2, float arg3, Vec *arg4, Vec *arg5, float arg6); static void fn_1_1DA8(float arg0); static void fn_1_1DD0(omObjData *arg0); static void fn_1_2158(omObjData *arg0); static void fn_1_22A4(omObjData *arg0); static void fn_1_2598(omObjData *arg0); static void fn_1_2FDC(omObjData *arg0); static void fn_1_3800(void); static s32 fn_1_3894(void); static void fn_1_3B80(omObjData *arg0); static void fn_1_3D6C(Vec *arg0, Vec *arg1); static void fn_1_3E4C(omObjData *arg0); static s16 fn_1_400C(s32 arg0, s16 arg1, ParticleHook arg2); static void fn_1_40A8(ModelData *model, ParticleData *particle, Mtx matrix); static s32 fn_1_4528(void); static float fn_1_457C(float arg0, float arg1, float arg2); static void fn_1_46E4(Mtx arg0, float arg1, float arg2, float arg3); static void fn_1_4804(float *arg0, float *arg1); static float fn_1_4B10(float arg0, float arg1, float arg2, float arg3); static void fn_1_4B88(float *arg0, float *arg1, float *arg2, float *arg3, float arg4); static float fn_1_4CA4(float arg0, float arg1, float arg2, float arg3); static void fn_1_4D1C(float *arg0, float *arg1, float *arg2, float *arg3, float arg4); static void fn_1_4FF4(float *arg0, float *arg1, float *arg2, s32 arg3); static float fn_1_52AC(float arg0, float *arg1, float *arg2, float *arg3, s32 arg4); static void fn_1_5400(float *arg0, Vec *arg1, float arg2[][3], s32 arg3); static void fn_1_57E0(float arg0, Vec *arg1, float *arg2, Vec *arg3, float arg4[][3], s32 arg5); static float fn_1_59F4(Vec *arg0); static void fn_1_5B8C(Vec arg0, Vec arg1, Vec *arg2, float arg3); static float fn_1_5C64(Vec arg0, Vec arg1, Vec arg2); static float fn_1_5D20(Vec *arg0, Vec *arg1, Vec *arg2); static float fn_1_605C(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3, Vec *arg4); static omObjData *lbl_1_bss_50; static omObjData *lbl_1_bss_4C; static omObjData *lbl_1_bss_48; static omObjData *lbl_1_bss_44; static omObjData *lbl_1_bss_34[4]; static u16 lbl_1_bss_30; static s16 lbl_1_bss_2E; static s16 lbl_1_bss_2C; static s16 lbl_1_bss_2A; static s16 lbl_1_bss_28; static s16 lbl_1_bss_1C[6]; static s16 lbl_1_bss_18[2]; static u8 lbl_1_bss_10_unused[8]; static s32 lbl_1_bss_C; static u8 lbl_1_bss_6_unused[6]; static s16 lbl_1_bss_4; static s16 lbl_1_bss_2; static s16 lbl_1_bss_0; static s16 lbl_1_data_0 = -1; static Vec lbl_1_data_4 = { 0.0f, 4000.0f, 4000.0f }; static Vec lbl_1_data_10 = { 0.0f, -0.7f, -0.6f }; static GXColor lbl_1_data_1C = { 0xFF, 0xFF, 0xFF, 0xFF }; static Vec lbl_1_data_20_unused = { 0.0f, 4000.0f, -2000.0f }; static Vec lbl_1_data_2C_unused = { 0.0f, 1.0f, 0.0f }; static u8 lbl_1_data_38_unused[0xC] = { 0 }; void ObjectSetup(void) { LightData *var_r28; Process *temp_r31; omObjData *var_r29; s32 temp_r27; s32 var_r26; s32 i; OSReport("******* M403ObjectSetup *********\n"); Hu3DLighInit(); var_r26 = Hu3DGLightCreateV(&lbl_1_data_4, &lbl_1_data_10, &lbl_1_data_1C); Hu3DGLightInfinitytSet(var_r26); var_r28 = &Hu3DGlobalLight[0]; var_r28->unk_00 |= 0x8000; temp_r31 = omInitObjMan(50, 0x2000); temp_r27 = frand() & 0x1F; for (i = 0; i < temp_r27; i++) { fn_1_4528(); } CRot.x = -23.5f; CRot.y = 0.0f; CRot.z = 0.0f; Center.x = 0.0f; Center.y = 320.0f; Center.z = 147.0f; CZoom = 1720.0f; Hu3DCameraCreate(1); Hu3DCameraPerspectiveSet(1, 45.0f, 400.0f, 10000.0f, 1.2f); Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); lbl_1_bss_4C = omAddObjEx(temp_r31, 0x7FDA, 0, 0, -1, omOutView); lbl_1_bss_50 = omAddObjEx(temp_r31, 0x10, 8, 0, -1, fn_1_424); lbl_1_bss_44 = omAddObjEx(temp_r31, 0x20, 16, 0, -1, fn_1_1274); lbl_1_bss_48 = omAddObjEx(temp_r31, 0x50, 16, 0, -1, fn_1_16D8); omAddObjEx(temp_r31, 0x60, 0, 0, -1, fn_1_3B80); fn_1_650C(temp_r31); fn_1_7C50(3); omMakeGroupEx(temp_r31, 0, 4); omGetGroupMemberListEx(temp_r31, 0); for (i = 0; i < 4; i++) { var_r29 = omAddObjEx(temp_r31, 0x30, 2, 8, 0, fn_1_1DD0); lbl_1_bss_34[i] = var_r29; var_r29->work[0] = i; var_r29->work[1] = i; } omGameSysInit(temp_r31); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); HuAudSndGrpSet(0x1C); lbl_1_bss_2 = 0; if (GWMGRecordGet(9) == 0) { GWMGRecordSet(9, 5); } } static void fn_1_424(omObjData *arg0) { lbl_1_bss_30 = 0; arg0->func = fn_1_444; } static void fn_1_444(omObjData *arg0) { Vec sp2C; Vec sp20; Vec sp14; Vec sp8; float var_f31; float var_f30; switch (lbl_1_bss_30) { case 0: sp2C.x = 0.0f; sp2C.y = 0.0f; sp2C.z = -50.0f; sp20.x = -90.0f; sp20.y = 90.0f; sp20.z = 0.0f; var_f31 = 2200.0f; fn_1_1A50(1.0f, &sp2C, &sp20, var_f31); lbl_1_bss_28 = 60; lbl_1_bss_30++; break; case 1: if (--lbl_1_bss_28 == 0) { lbl_1_bss_30++; } break; case 2: if (lbl_1_bss_28 == 0) { fn_1_7C60(); lbl_1_bss_28 = 90; sp2C.x = 200.0f; sp2C.y = 100.0f; sp2C.z = -50.0f; sp20.x = -50.0f; sp20.y = 90.0f; sp20.z = 0.0f; var_f31 = 2000.0f; sp14.x = 0.0f; sp14.y = 320.0f; sp14.z = 147.0f; sp8.x = -23.5f; sp8.y = 0.0f; sp8.z = 0.0f; var_f30 = 1720.0f; fn_1_1AF0(180.0f, &sp14, &sp8, var_f30, &sp2C, &sp20, var_f31); } if (--lbl_1_bss_28 == 0) { lbl_1_bss_30++; } break; case 3: if (lbl_1_bss_28 == 0) { lbl_1_bss_28 = 90; } if (--lbl_1_bss_28 == 0) { lbl_1_bss_30++; } break; case 4: lbl_1_bss_30 = 5; lbl_1_bss_2E = lbl_1_bss_2C = -1; arg0->func = fn_1_82C; HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M403, 19), MEMORY_DEFAULT_NUM)); break; } if (omSysExitReq != 0 && WipeStatGet() == 0) { WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); arg0->func = fn_1_1214; } } static s32 lbl_1_data_68 = -1; s32 lbl_1_data_6C[] = { DATA_MAKE_NUM(DATADIR_MGCONST, 0), DATA_MAKE_NUM(DATADIR_MGCONST, 1), DATA_MAKE_NUM(DATADIR_MGCONST, 2), DATA_MAKE_NUM(DATADIR_MGCONST, 3), DATA_MAKE_NUM(DATADIR_MGCONST, 4), DATA_MAKE_NUM(DATADIR_MGCONST, 5), DATA_MAKE_NUM(DATADIR_MGCONST, 6), DATA_MAKE_NUM(DATADIR_MGCONST, 7) }; static void fn_1_82C(omObjData *arg0) { Vec sp1C; Vec sp10; float var_f31; s16 sp8[4]; s32 var_r30; s32 var_r27; s32 var_r29; s32 i; switch (lbl_1_bss_30) { case 5: if (lbl_1_bss_2C == -1) { lbl_1_bss_2A = 1800; lbl_1_bss_2C = MGSeqStartCreate(); MGSeqPosSet(lbl_1_bss_2C, 320.0f, 240.0f); } else if (MGSeqStatGet(lbl_1_bss_2C) == 0) { lbl_1_bss_2C = -1; lbl_1_bss_30++; lbl_1_bss_28 = 0; lbl_1_data_0 = 4; if (lbl_1_bss_2 != 0) { sp1C.x = 476.0f; sp1C.y = 64.0f; var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 51), 2, 0); lbl_1_bss_1C[0] = var_r30; espPosSet(var_r30, sp1C.x + 32.0f, sp1C.y); var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 51), 2, 0); lbl_1_bss_1C[1] = var_r30; espPosSet(var_r30, sp1C.x + 56.0f, sp1C.y); var_r30 = espEntry(lbl_1_data_6C[GWPlayerCfg[lbl_1_bss_4].character], 1, 0); lbl_1_bss_1C[2] = var_r30; espPosSet(var_r30, sp1C.x, sp1C.y); var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 22), 3, 0); lbl_1_bss_1C[3] = var_r30; espPosSet(var_r30, sp1C.x + 36.0f, sp1C.y); var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 23), 4, 0); lbl_1_bss_1C[4] = var_r30; espColorSet(var_r30, 0, 0, 0); espTPLvlSet(var_r30, 0.5); espPosSet(var_r30, sp1C.x + 36.0f, sp1C.y); } } if (lbl_1_data_68 == -1 && (MGSeqStatGet(lbl_1_bss_2C) & 0x10)) { lbl_1_data_68 = HuAudSeqPlay(0x48); } break; case 6: var_r29 = 0; if (lbl_1_bss_2 != 0) { if (((Unkm403Struct_01*) lbl_1_bss_34[lbl_1_bss_4]->data)->unk07 == 0 && fn_1_8264() == 0) { var_r29++; } } else if (lbl_1_data_0 <= 1 && fn_1_8264() == 0) { var_r29++; } if (lbl_1_bss_2 != 0) { espBankSet(lbl_1_bss_1C[0], lbl_1_bss_0 / 10); espBankSet(lbl_1_bss_1C[1], lbl_1_bss_0 % 10); } if (var_r29 != 0) { lbl_1_bss_30++; } break; case 7: if (lbl_1_bss_2C == -1) { lbl_1_bss_2C = MGSeqFinishCreate(); MGSeqPosSet(lbl_1_bss_2C, 320.0f, 240.0f); MGSeqKill(lbl_1_bss_2E); HuAudSeqFadeOut(lbl_1_data_68, 100); break; } if (MGSeqStatGet(lbl_1_bss_2C) == 0) { lbl_1_bss_2C = -1; if (lbl_1_bss_2 == 0) { if (lbl_1_data_0 != 0) { for (i = 0; i < 4; i++) { if (((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk07 != 0) { break; } } sp1C.x = lbl_1_bss_34[i]->trans.x; sp1C.y = 100.0f; sp1C.z = lbl_1_bss_34[i]->trans.z; sp10.x = -18.0f; sp10.y = 0.0f; sp10.z = 0.0f; var_f31 = 600.0f; fn_1_1A50(45.0f, &sp1C, &sp10, var_f31); } lbl_1_bss_30 = 9; lbl_1_bss_28 = 90; break; } if (GWMGRecordGet(9) < lbl_1_bss_0 - 1) { GWMGRecordSet(9, lbl_1_bss_0 - 1); lbl_1_bss_30 = 8; break; } lbl_1_bss_2C = -1; lbl_1_bss_30 = 11; lbl_1_bss_28 = 150; } break; case 8: if (lbl_1_bss_2C == -1) { lbl_1_bss_2C = MGSeqRecordCreate(lbl_1_bss_0 - 1); break; } if (MGSeqStatGet(lbl_1_bss_2C) == 0) { lbl_1_bss_2C = -1; lbl_1_bss_28 = 150; lbl_1_bss_30 = 11; } break; case 9: if (--lbl_1_bss_28 == 0) { lbl_1_bss_30++; } break; case 10: if (lbl_1_bss_2C == -1) { if (lbl_1_data_0 == 0) { lbl_1_bss_2C = MGSeqDrawCreate(); HuAudSStreamPlay(4); } else { for (i = 0; i < 4; i++) { sp8[i] = -1; } for (i = 0, var_r27 = 0; i < 4; i++) { if (((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk07 != 0) { GWPlayerCoinWinAdd(i, 10); sp8[var_r27++] = GWPlayerCfg[i].character; } } lbl_1_bss_2C = MGSeqWinCreate(sp8[0], sp8[1], sp8[2], sp8[3]); HuAudSStreamPlay(1); } } lbl_1_bss_2C = -1; lbl_1_bss_28 = 210; lbl_1_bss_30++; break; case 11: if (--lbl_1_bss_28 == 0) { WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); arg0->func = fn_1_1214; } break; } if (omSysExitReq != 0 && WipeStatGet() == 0) { WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); arg0->func = fn_1_1214; } } static void fn_1_1214(omObjData *arg0) { if (WipeStatGet() == 0) { fn_1_676C(); CharModelKill(-1); MGSeqKill(lbl_1_bss_2E); MGSeqKillAll(); HuAudFadeOut(1); omOvlReturnEx(1, 1); } } static void fn_1_1274(omObjData *arg0) { Hu3DLightAllKill(); lbl_1_bss_18[0] = Hu3DGLightCreateV(&lbl_1_data_4, &lbl_1_data_10, &lbl_1_data_1C); Hu3DGLightStaticSet(lbl_1_bss_18[0], 1); Hu3DGLightInfinitytSet(lbl_1_bss_18[0]); lbl_1_bss_18[1] = Hu3DGLightCreate(0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0, 0, 0); Hu3DGLightStaticSet(lbl_1_bss_18[1], 1); Hu3DGLightPointSet(lbl_1_bss_18[1], 0.0f, 0.0f, 3); Hu3DGLightColorSet(lbl_1_bss_18[0], 0, 0, 0, 0xFF); Hu3DGLightPosSet(lbl_1_bss_18[1], -1470.0f, 800.0f, -2000.0f, 0.0f, -1.0f, 0.0f); Hu3DGLightColorSet(lbl_1_bss_18[1], 0, 0, 0, 0xFF); Hu3DGLightPointSet(lbl_1_bss_18[1], 1200.0f, 0.6f, 3); arg0->func = fn_1_1460; } static void fn_1_1460(omObjData *arg0) { s8 sp11[] = { 1, 0, 2, 1, 0, 3, 2, 1, 0 }; s8 sp8[] = { 1, 1, 2, 2, 2, 3, 3, 3, 3 }; s32 var_r30; switch (lbl_1_bss_30) { case 0: break; case 1: Hu3DGLightColorSet(lbl_1_bss_18[0], 0xF0, 0xF0, 0xF0, 0xFF); break; case 2: break; case 3: Hu3DGLightColorSet(lbl_1_bss_18[1], 0xFF, 0xE0, 0xD0, 0xFF); break; case 4: break; case 5: arg0->work[0] = 30; arg0->work[1] = 17; lbl_1_bss_C = 1; break; case 6: if (fn_1_8264() != 0) { break; } if (lbl_1_bss_C == 0) { lbl_1_bss_C = 30; lbl_1_bss_0++; } lbl_1_bss_C--; if (lbl_1_bss_C == 0) { var_r30 = (arg0->work[1] - 2) / 2; if (var_r30 < 0) { var_r30 = 0; } fn_1_8670(sp11[var_r30]); fn_1_7C50(sp8[var_r30]); fn_1_7C30(0.01f * arg0->work[0]); arg0->work[0] += 5; if (arg0->work[1] > 2) { arg0->work[1]--; } } break; } } static void fn_1_16D8(omObjData *arg0) { Unkm403Struct_00 *temp_r3; temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r3), MEMORY_DEFAULT_NUM); arg0->data = temp_r3; temp_r3->unk148 = temp_r3->unk144 = 0.0f; temp_r3->unk140 = 1.0f; temp_r3->unk10.x = temp_r3->unk28.x = -23.5f; temp_r3->unk10.y = temp_r3->unk28.y = 0.0f; temp_r3->unk10.z = temp_r3->unk28.z = 0.0f; temp_r3->unk04.x = temp_r3->unk1C.x = 0.0f; temp_r3->unk04.y = temp_r3->unk1C.y = 320.0f; temp_r3->unk04.z = temp_r3->unk1C.z = 147.0f; temp_r3->unk130 = temp_r3->unk134 = 1720.0f; arg0->func = fn_1_17DC; } static void fn_1_17DC(omObjData *arg0) { Unkm403Struct_00 *temp_r31; float temp_f31; temp_r31 = arg0->data; if (temp_r31->unk148 > 0.0f) { temp_r31->unk148 -= temp_r31->unk140; temp_f31 = (temp_r31->unk144 - temp_r31->unk148) / temp_r31->unk144; temp_f31 = sind(90.0f * temp_f31); if (temp_r31->unk00 == 0) { temp_r31->unk04.x = temp_r31->unk1C.x + temp_f31 * (temp_r31->unk34.x - temp_r31->unk1C.x); temp_r31->unk04.y = temp_r31->unk1C.y + temp_f31 * (temp_r31->unk34.y - temp_r31->unk1C.y); temp_r31->unk04.z = temp_r31->unk1C.z + temp_f31 * (temp_r31->unk34.z - temp_r31->unk1C.z); temp_r31->unk10.x = temp_r31->unk28.x + temp_f31 * (temp_r31->unk40.x - temp_r31->unk28.x); temp_r31->unk10.y = temp_r31->unk28.y + temp_f31 * (temp_r31->unk40.y - temp_r31->unk28.y); temp_r31->unk10.z = temp_r31->unk28.z + temp_f31 * (temp_r31->unk40.z - temp_r31->unk28.z); temp_r31->unk130 = temp_r31->unk134 + temp_f31 * (temp_r31->unk138 - temp_r31->unk134); } else { fn_1_57E0(2.0f * temp_f31, &temp_r31->unk04, temp_r31->unkF4, &temp_r31->unk64, temp_r31->unk88, 3); fn_1_57E0(2.0f * temp_f31, &temp_r31->unk10, temp_r31->unk100, &temp_r31->unkAC, temp_r31->unkD0, 3); temp_r31->unk130 = fn_1_52AC(2.0f * temp_f31, temp_r31->unk124, temp_r31->unk10C, temp_r31->unk118, 3); } } CRot.x = temp_r31->unk10.x; CRot.y = temp_r31->unk10.y; CRot.z = temp_r31->unk10.z; Center.x = temp_r31->unk04.x; Center.y = temp_r31->unk04.y; Center.z = temp_r31->unk04.z; CZoom = temp_r31->unk130; } static void fn_1_1A50(float arg0, Vec *arg1, Vec *arg2, float arg3) { Unkm403Struct_00 *temp_r31; temp_r31 = lbl_1_bss_48->data; temp_r31->unk00 = 0; temp_r31->unk144 = arg0; temp_r31->unk148 = arg0; temp_r31->unk1C = temp_r31->unk04; temp_r31->unk34.x = arg1->x; temp_r31->unk34.y = arg1->y; temp_r31->unk34.z = arg1->z; temp_r31->unk28 = temp_r31->unk10; temp_r31->unk40.x = arg2->x; temp_r31->unk40.y = arg2->y; temp_r31->unk40.z = arg2->z; temp_r31->unk134 = temp_r31->unk130; temp_r31->unk138 = arg3; } static void fn_1_1AF0(float arg0, Vec *arg1, Vec *arg2, float arg3, Vec *arg4, Vec *arg5, float arg6) { Unkm403Struct_00 *temp_r31; temp_r31 = lbl_1_bss_48->data; temp_r31->unk00 = 1; temp_r31->unk148 = temp_r31->unk144 = arg0; temp_r31->unk1C = temp_r31->unk04; temp_r31->unk34.x = arg1->x; temp_r31->unk34.y = arg1->y; temp_r31->unk34.z = arg1->z; temp_r31->unk4C.x = arg4->x; temp_r31->unk4C.y = arg4->y; temp_r31->unk4C.z = arg4->z; temp_r31->unk28 = temp_r31->unk10; temp_r31->unk40.x = arg2->x; temp_r31->unk40.y = arg2->y; temp_r31->unk40.z = arg2->z; temp_r31->unk58.x = arg5->x; temp_r31->unk58.y = arg5->y; temp_r31->unk58.z = arg5->z; temp_r31->unk134 = temp_r31->unk130; temp_r31->unk138 = arg3; temp_r31->unk13C = arg6; temp_r31->unk64 = temp_r31->unk1C; temp_r31->unk70 = temp_r31->unk4C; temp_r31->unk7C = temp_r31->unk34; temp_r31->unkAC = temp_r31->unk28; temp_r31->unkB8 = temp_r31->unk58; temp_r31->unkC4 = temp_r31->unk40; temp_r31->unk10C[0] = temp_r31->unk134; temp_r31->unk10C[1] = temp_r31->unk13C; temp_r31->unk10C[2] = temp_r31->unk138; temp_r31->unk124[0] = 0.0f; temp_r31->unk124[1] = ABS(temp_r31->unk10C[1] - temp_r31->unk10C[0]); temp_r31->unk124[2] = ABS(temp_r31->unk10C[2] - temp_r31->unk10C[1]) + temp_r31->unk124[1]; fn_1_5400(temp_r31->unkF4, &temp_r31->unk64, temp_r31->unk88, 3); fn_1_5400(temp_r31->unk100, &temp_r31->unkAC, temp_r31->unkD0, 3); fn_1_4FF4(temp_r31->unk124, temp_r31->unk10C, temp_r31->unk118, 3); } static void fn_1_1DA8(float arg0) { Unkm403Struct_00 *temp_r31; temp_r31 = lbl_1_bss_48->data; temp_r31->unk140 = arg0; } static s32 lbl_1_data_C4[] = { 0, 2, 3, 8, 10, 9, 23, 24 }; static Vec lbl_1_data_E4[] = { { -300.0f, 2200.0f, 0.0f }, { -100.0f, 2200.0f, 0.0f }, { 100.0f, 2200.0f, 0.0f }, { 300.0f, 2200.0f, 0.0f } }; static float lbl_1_data_114[] = { 40.0f, 40.0f, 40.0f, 40.0f, 40.0f, 100.0f, 40.0f, 80.0f }; static float lbl_1_data_134[] = { 160.0f, 160.0f, 180.0f, 160.0f, 160.0f, 180.0f, 180.0f, 200.0f }; static u32 lbl_1_data_154 = 0x41C64E6D; static void fn_1_1DD0(omObjData *arg0) { Unkm403Struct_01 *temp_r3; s32 temp_r27; s32 i; s32 temp_r28; temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r3), MEMORY_DEFAULT_NUM); arg0->data = temp_r3; temp_r3->unk00 = arg0->work[0]; temp_r3->unk01 = GWPlayerCfg[temp_r3->unk00].character; temp_r3->unk02 = temp_r3->unk00 >> 1; temp_r3->unk03 = temp_r3->unk00 & 1; temp_r3->unk04 = GWPlayerCfg[temp_r3->unk00].pad_idx; temp_r3->unk05 = GWPlayerCfg[temp_r3->unk00].iscom; temp_r3->unk06 = GWPlayerCfg[temp_r3->unk00].diff; temp_r3->unk18 = temp_r3->unk1A = 0; temp_r3->unk07 = 1; temp_r3->unk0C = 1; temp_r3->unk0D = 0; temp_r3->unk0E = 0; temp_r3->unk0A = 0; temp_r3->unk9C = 0; temp_r27 = arg0->work[1]; temp_r3->unk2C.x = lbl_1_data_E4[temp_r27].x; temp_r3->unk2C.y = lbl_1_data_E4[temp_r27].y + 100.0f * ((fn_1_4528() - 0x8000) / 32768.0f); temp_r3->unk2C.z = lbl_1_data_E4[temp_r27].z; temp_r3->unk44 = temp_r3->unk48 = temp_r3->unk4C = 0.0f; temp_r3->unk38 = temp_r3->unk3C = temp_r3->unk40 = 0.0f; temp_r3->unk20 = temp_r3->unk3C; temp_r3->unk24 = 0.0f; temp_r3->unk1C = 0.0f; temp_r3->unk28 = 1.0f; memset(&temp_r3->unk5C, 0, 0x40); temp_r3->unkA0 = 1; if (lbl_1_bss_2 != 0 && temp_r3->unk05 == 0) { lbl_1_bss_4 = temp_r3->unk00; } temp_r28 = CharModelCreate(temp_r3->unk01, 4); arg0->model[0] = temp_r28; Hu3DModelAttrSet(temp_r28, 0x40000001); Hu3DModelShadowSet(temp_r28); for (i = 0; i < 8; i++) { arg0->motion[i] = CharModelMotionCreate(temp_r3->unk01, lbl_1_data_C4[i]); } CharModelMotionDataClose(temp_r3->unk01); CharModelMotionSet(temp_r3->unk01, arg0->motion[temp_r3->unk18]); omSetTra(arg0, temp_r3->unk2C.x, temp_r3->unk2C.y, temp_r3->unk2C.z); Hu3DModelPosSet(temp_r28, temp_r3->unk2C.x, temp_r3->unk2C.y, temp_r3->unk2C.z); Hu3DModelRotSet(temp_r28, 0.0f, 30.0f, 0.0f); CharModelStepTypeSet(temp_r3->unk01, 1); CharModelVoiceEnableSet(temp_r3->unk01, arg0->motion[3], 0); arg0->func = fn_1_2158; } static void fn_1_2158(omObjData *arg0) { Unkm403Struct_01 *temp_r31; s32 sp8; sp8 = arg0->model[0]; temp_r31 = arg0->data; temp_r31->unk10 = temp_r31->unk12 = 0; temp_r31->unk14 = temp_r31->unk16 = 0; switch (lbl_1_bss_30) { case 3: break; case 2: if (lbl_1_bss_28 < 60.0f) { break; } /* fallthrough */ case 1: temp_r31->unk18 = 3; temp_r31->unk48 = 0.0f; temp_r31->unk0C = 0; break; case 5: arg0->func = fn_1_22A4; break; } if (temp_r31->unk2C.y < 10.0f) { omVibrate(temp_r31->unk00, 12, 6, 6); temp_r31->unk2C.y = 10.0f; temp_r31->unk0C = 1; } fn_1_2FDC(arg0); } static void fn_1_22A4(omObjData *arg0) { Unkm403Struct_01 *temp_r31; s32 temp_r29; s32 temp_r28; temp_r29 = arg0->model[0]; temp_r31 = arg0->data; if (temp_r31->unk07 != 0) { if (lbl_1_bss_30 == 6 && !(temp_r31->unk07 & 2)) { if (temp_r31->unk05 != 0) { fn_1_2598(arg0); } else { temp_r31->unk10 = HuPadStkX[temp_r31->unk04]; temp_r31->unk12 = HuPadStkY[temp_r31->unk04]; temp_r31->unk14 = HuPadBtnDown[temp_r31->unk04]; temp_r31->unk16 = HuPadBtn[temp_r31->unk04]; } } else { temp_r31->unk10 = temp_r31->unk12 = 0; temp_r31->unk14 = temp_r31->unk16 = 0; } switch (lbl_1_bss_30) { case 5: case 6: break; case 7: case 9: arg0->scale.y += 0.2f * (1.0f - arg0->scale.y); temp_r31->unk3C = fn_1_457C(temp_r31->unk3C, 0.0f, 0.9f); break; case 10: if (temp_r31->unk18 != 6) { temp_r31->unk18 = 6; } break; } if (temp_r31->unk07 & 2) { temp_r31->unk10 = temp_r31->unk12 = 0; temp_r31->unk14 = temp_r31->unk16 = 0; if (arg0->scale.y < 0.2f) { omVibrate(temp_r31->unk00, 12, 4, 2); HuAudFXPlay(0x523); temp_r31->unk07 = 0; Hu3DModelShadowReset(temp_r29); Hu3DModelAttrSet(temp_r29, 1); lbl_1_data_0--; temp_r28 = fn_1_400C(DATA_MAKE_NUM(DATADIR_M403, 19), 100, fn_1_40A8); Hu3DModelPosSet(temp_r28, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z); Hu3DModelLayerSet(temp_r28, 2); } } if (fn_1_8264() != 0) { temp_r31->unkA0 = 0; } else if (!(temp_r31->unk07 & 2) && temp_r31->unkA0 == 0) { omVibrate(temp_r31->unk00, 12, 6, 6); temp_r31->unkA0 = 1; } fn_1_2FDC(arg0); } } static void fn_1_2598(omObjData *arg0) { Vec sp38[6]; Vec sp14; Vec sp8; float sp20[6]; float var_f31; float var_f30; float temp_f29; float var_f28; Unkm403Struct_01 *temp_r31; s16 var_r27; s16 var_r26; s16 var_r21; s16 var_r20; s16 temp_r28; s32 var_r23; s32 var_r22; s32 var_r25; s32 temp_r24; s32 var_r29; s32 i; var_r22 = 0; for (i = 0, var_r29 = 0; i < 4; i++) { temp_r31 = lbl_1_bss_34[i]->data; if (temp_r31->unk05 == 0 && temp_r31->unk07 != 0) { break; } } temp_r31 = arg0->data; if (i >= 4 && temp_r31->unk9C == 0) { var_r22 = 1; } temp_r28 = temp_r31->unk06; var_r27 = var_r26 = var_r21 = var_r20 = 0; switch (temp_r31->unk5C) { case 0: if (fn_1_8264() != 0) { temp_r31->unk5C = 1; } break; case 1: temp_r31->unk5C = 2; temp_r31->unk5E = (s32) (60.0f * (1.2f - 0.2f * temp_r28) * (fn_1_4528() / 65536.0f)); temp_r31->unk60 = 500.0f * ((fn_1_4528() - 0x8000) / 32768.0f); temp_r31->unk64 = 200.0f * ((fn_1_4528() - 0x8000) / 32768.0f); var_r27 = temp_r31->unk10; var_r26 = temp_r31->unk12; break; case 2: sp8.x = temp_r31->unk60 - temp_r31->unk2C.x; sp8.y = 0.0f; sp8.z = temp_r31->unk64 - temp_r31->unk2C.z; var_f31 = fn_1_59F4(&sp8); if (var_f31 < 20.0f) { temp_r31->unk5C = 3; } else { if (var_f31 >= 100.0f) { var_f28 = 0.8f; } else { var_f28 = 0.4f; } var_f30 = fn_1_457C(temp_r31->unk3C, atan2d(sp8.x, sp8.z), var_f28); temp_f29 = 48.0f + 4.0f * temp_r28; var_r27 = temp_f29 * sind(var_f30); var_r26 = temp_f29 * -cosd(var_f30); if (fn_1_8264() == 0) { temp_r31->unk5C = 0; if (temp_r31->unk5E == 0) { temp_r31->unk5E = -1; } } else if (temp_r31->unk5E >= 0) { if (temp_r31->unk5E == 0) { if (var_f31 < 150.0f && temp_r31->unk0E != 0) { temp_r31->unk5C = 3; } else if ((s32) ((temp_r28 + 2) * (fn_1_4528() / 65536.0f)) != 0 && var_r22 == 0) { temp_r31->unk5C = 4; } else { temp_r31->unk5C = 1; } } else { temp_r31->unk5E--; } } } break; case 3: sp8.x = temp_r31->unk60 - temp_r31->unk2C.x; sp8.y = 0.0f; sp8.z = temp_r31->unk64 - temp_r31->unk2C.z; if (fn_1_59F4(&sp8) >= 30.000002f && temp_r31->unk0E == 0) { temp_r31->unk5C = 2; } else if (fn_1_8264() == 0) { temp_r31->unk5C = 0; } else { if (temp_r31->unk5E > 0) { temp_r31->unk5E--; } if (temp_r31->unk5E == 0) { if ((s32) ((temp_r28 + 2) * (fn_1_4528() / 65536.0f)) != 0 && var_r22 == 0) { temp_r31->unk5C = 4; } else { temp_r31->unk5C = 1; } } } break; case 4: temp_r24 = fn_1_82D0(&sp38[0]); for (i = 0; i < temp_r24; i++) { VECSubtract(&sp38[i], &temp_r31->unk2C, &sp8); sp20[i] = VECMag(&sp8); } for (i = 0; i < temp_r24 - 1; i++) { for (var_r29 = i + 1; var_r29 < temp_r24; var_r29++) { if (sp20[i] > sp20[var_r29]) { sp14 = sp38[i]; sp38[i] = sp38[var_r29]; sp38[var_r29] = sp14; var_f31 = sp20[i]; sp20[i] = sp20[var_r29]; sp20[var_r29] = var_f31; } } } var_r25 = 1000; var_r23 = var_r25 * (fn_1_4528() / 65536.0f); for (i = 0; i < temp_r24 - 1; i++) { var_r25 = var_r25 * (5.0f + temp_r28) * 0.1f; var_r23 -= var_r25; if (var_r23 < 0) { break; } } temp_r31->unk60 = sp38[i].x + 100.0f * (0.5f - 0.15f * temp_r28) * ((fn_1_4528() - 0x8000) / 32768.0f); temp_r31->unk64 = sp38[i].z + 100.0f * (0.5f - 0.15f * temp_r28) * ((fn_1_4528() - 0x8000) / 32768.0f); temp_r31->unk5C = 2; temp_r31->unk5E = -1; var_r27 = temp_r31->unk10; var_r26 = temp_r31->unk12; break; } temp_r31->unk10 = var_r27; temp_r31->unk12 = var_r26; temp_r31->unk14 = var_r21; temp_r31->unk16 = var_r20; } static void fn_1_2FDC(omObjData *arg0) { float var_f29; Unkm403Struct_01 *temp_r31; s32 temp_r25; s16 var_r27; s16 var_r28; s16 temp_r30; s16 temp_r29; s16 spA; s16 sp8; temp_r31 = arg0->data; temp_r25 = arg0->model[0]; var_r28 = temp_r31->unk18; temp_r31->unk50 = temp_r31->unk2C; temp_r30 = temp_r31->unk10; temp_r29 = temp_r31->unk12; spA = temp_r31->unk14; sp8 = temp_r31->unk16; switch (temp_r31->unk18) { case 0: case 1: case 2: temp_r31->unk1C = 0.14f * sqrtf(temp_r30 * temp_r30 + temp_r29 * temp_r29); if (temp_r31->unk1C > 0.1f) { if (temp_r31->unk1C >= 6.0f) { var_r28 = 2; var_r27 = 1; } else { var_r28 = 1; var_r27 = 1; } var_f29 = atan2d(temp_r30, -temp_r29); temp_r31->unk3C = fn_1_457C(temp_r31->unk3C, var_f29, 0.5f); temp_r31->unk20 = temp_r31->unk3C; temp_r31->unk24 += 1.0f; if (temp_r31->unk24 >= 0.5f * temp_r31->unk28) { temp_r31->unk24 -= 0.5f * temp_r31->unk28; } temp_r31->unk1C *= 1.0 + 0.25 * cosd(90.0f * (temp_r31->unk24 / (0.5f * temp_r31->unk28))); } else { temp_r31->unk24 = 0.0f; temp_r31->unk1C = 0.0f; var_r28 = 0; var_r27 = 1; } temp_r31->unk48 = -2.4333334f; break; case 3: var_r27 = 0; if (Hu3DData[temp_r25].unk_0C == -1 && CharModelMotionEndCheck(temp_r31->unk01)) { temp_r31->unk48 += -2.4333334f; } else { temp_r31->unk48 = 0.0f; } if (temp_r31->unk0C != 0) { if (temp_r31->unk0D != 0) { temp_r31->unk48 = 0.0f; temp_r31->unk0D = 0; var_r28 = 5; var_r27 = 0; } else { temp_r31->unk48 *= -0.1f; temp_r31->unk0C = 0; var_r28 = 4; var_r27 = 0; } } break; case 4: temp_r31->unk48 += -2.4333334f; if (temp_r31->unk0C != 0 && CharModelMotionEndCheck(temp_r31->unk01)) { var_r28 = 5; var_r27 = 0; } break; case 5: if (CharModelMotionEndCheck(temp_r31->unk01)) { var_r28 = 0; var_r27 = 1; } break; case 6: case 7: var_r27 = 0; temp_r31->unk48 = -2.4333334f; break; } if (temp_r31->unk07 & 4) { if (temp_r31->unk0A & 2) { Hu3DModelAttrSet(temp_r25, 1); } else { Hu3DModelAttrReset(temp_r25, 1); } if (--temp_r31->unk0A == 0) { temp_r31->unk07 &= ~4; } } temp_r31->unk44 = temp_r31->unk1C * sind(temp_r31->unk20); temp_r31->unk4C = temp_r31->unk1C * cosd(temp_r31->unk20); temp_r31->unk2C.x += temp_r31->unk44; if (temp_r31->unk0C == 0) { temp_r31->unk2C.y += temp_r31->unk48; } temp_r31->unk2C.z += temp_r31->unk4C; if (var_r28 != temp_r31->unk1A) { temp_r31->unk1A = var_r28; temp_r31->unk18 = var_r28; CharModelMotionShiftSet(temp_r31->unk01, arg0->motion[temp_r31->unk18], 0.0f, 8.0f, var_r27); temp_r31->unk28 = CharModelMotionMaxTimeGet(temp_r31->unk01); } omSetTra(arg0, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z); omSetRot(arg0, temp_r31->unk38, temp_r31->unk3C, temp_r31->unk40); } static void fn_1_3800(void) { s32 var_r29; s32 i; Unkm403Struct_01 *temp_r30; var_r29 = 0; for (i = 0; i < 4; i++) { temp_r30 = lbl_1_bss_34[i]->data; if (temp_r30->unk07 != 0) { temp_r30->unk0E = 0; } } while (fn_1_3894() != 0 && var_r29 < 50) { var_r29++; } } static s32 fn_1_3894(void) { Vec sp14[4]; Vec sp8; float var_f31; float var_f30; s32 var_r26; omObjData* temp_r25; Unkm403Struct_01 *temp_r28; Unkm403Struct_01 *temp_r27; Unkm403Struct_01 *temp_r31; s32 i; s32 j; var_r26 = 0; for (i = 0; i < 4; i++) { sp14[i].x = sp14[i].y = sp14[i].z = 0.0f; } for (i = 0; i < 3; i++) { temp_r28 = lbl_1_bss_34[i]->data; if (temp_r28->unk07 != 0) { for (j = i + 1; j < 4; j++) { temp_r27 = lbl_1_bss_34[j]->data; if (temp_r27->unk07 != 0) { VECSubtract(&temp_r28->unk2C, &temp_r27->unk2C, &sp8); var_f31 = VECMag(&sp8); if (var_f31 < 80.0f) { VECNormalize(&sp8, &sp8); var_f30 = 0.0001f + 0.5f * (80.0f - var_f31); VECScale(&sp8, &sp8, var_f30); VECAdd(&sp14[i], &sp8, &sp14[i]); VECSubtract(&sp14[j], &sp8, &sp14[j]); temp_r28->unk0E++; temp_r27->unk0E++; var_r26++; } } } } } for (i = 0; i < 4; i++) { temp_r25 = lbl_1_bss_34[i]; temp_r31 = temp_r25->data; if (temp_r31->unk07 != 0) { VECAdd(&temp_r31->unk2C, &sp14[i], &temp_r31->unk2C); if (temp_r31->unk2C.x > 660.0f) { temp_r31->unk2C.x = 660.0f; } if (temp_r31->unk2C.x < -660.0f) { temp_r31->unk2C.x = -660.0f; } if (temp_r31->unk2C.z > 360.0f) { temp_r31->unk2C.z = 360.0f; } if (temp_r31->unk2C.z < -360.0f) { temp_r31->unk2C.z = -360.0f; } omSetTra(temp_r25, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z); } } return var_r26; } static void fn_1_3B80(omObjData *arg0) { s32 sp8[4]; s32 var_r30; s32 i; if (lbl_1_bss_30 < 6) { return; } if (fn_1_8264() != 0) { for (i = 0; i < 4; i++) { fn_1_3E4C(lbl_1_bss_34[i]); } } else { for (i = 0, var_r30 = 0; i < 4; i++) { ((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk9C = 0; if (((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk07 != 0) { sp8[var_r30++] = i; } } if (var_r30 != 0) { i = sp8[(s32) (var_r30 * (fn_1_4528() / 65536.0f))]; ((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk9C = 1; } } fn_1_3800(); } static void fn_1_3D6C(Vec *arg0, Vec *arg1) { Vec sp18[6]; Vec spC; float var_f31; float var_f30; s32 temp_r30; s32 i; temp_r30 = fn_1_8470(sp18); var_f31 = 2000.0f; for (i = 0; i < temp_r30; i++) { VECSubtract(&sp18[i], arg0, &spC); var_f30 = VECMag(&spC); if (var_f30 >= var_f31) { continue; } var_f31 = var_f30; *arg1 = sp18[i]; } } static void fn_1_3E4C(omObjData *arg0) { Vec sp8; float var_f30; float var_f31; Unkm403Struct_01 *temp_r31; temp_r31 = arg0->data; if (temp_r31->unk07 != 0) { var_f30 = fn_1_80D4(&temp_r31->unk2C, lbl_1_data_114[temp_r31->unk01]) - 10.0f; if (var_f30 < 0.0f) { var_f30 = 0.0f; } if (!(temp_r31->unk07 & 2)) { var_f31 = 1.0f; if (var_f30 < lbl_1_data_134[temp_r31->unk01]) { if (fn_1_86A0(&temp_r31->unk2C, &sp8) != 0) { temp_r31->unk2C.x = sp8.x; temp_r31->unk2C.z = sp8.z; } else { if (fn_1_7F78(temp_r31->unk2C.x, temp_r31->unk2C.z) - 10.0f < 100.0f) { temp_r31->unk07 |= 2; } var_f31 = var_f30 / lbl_1_data_134[temp_r31->unk01]; } } } else { var_f31 = var_f30 / lbl_1_data_134[temp_r31->unk01]; } if (arg0->scale.y < var_f31) { var_f31 = arg0->scale.y + 0.2f * (var_f31 - arg0->scale.y); } arg0->scale.y = var_f31; } } static s16 fn_1_400C(s32 arg0, s16 arg1, ParticleHook arg2) { AnimData *var_r29; ParticleData *temp_r31; s32 temp_r30; var_r29 = HuSprAnimRead(HuDataReadNum(arg0, MEMORY_DEFAULT_NUM)); temp_r30 = Hu3DParticleCreate(var_r29, arg1); Hu3DParticleHookSet(temp_r30, arg2); temp_r31 = Hu3DData[temp_r30].unk_120; temp_r31->unk_2E = temp_r30; temp_r31->unk_00 = temp_r31->unk_02 = 0; return temp_r30; } static void fn_1_40A8(ModelData *model, ParticleData *particle, Mtx matrix) { float temp_f31; float temp_f30; float temp_f29; HsfanimStruct01 *var_r31; s16 sp8; s32 i; sp8 = 0; switch (particle->unk_00) { case 0: temp_f29 = 360.0f / particle->unk_30; var_r31 = particle->unk_48; for (i = 0; i < particle->unk_30; i++, var_r31++) { var_r31->unk08.x = sind(temp_f29 * i) * (1.0f + 6.0f * ((fn_1_4528() - 0x8000) / 32768.0f) * 0.1f); var_r31->unk08.y = 0.0f; var_r31->unk08.z = cosd(temp_f29 * i) * (1.0f + 6.0f * ((fn_1_4528() - 0x8000) / 32768.0f) * 0.1f); var_r31->unk34.x = 0.0f; var_r31->unk34.y = 0.0f; var_r31->unk34.z = 0.0f; } particle->unk_02 = 30; particle->unk_00++; /* fallthrough */ case 1: particle->unk_02--; temp_f31 = (30.0f - particle->unk_02) / 30.0f; temp_f30 = particle->unk_02 / 30.0f; var_r31 = particle->unk_48; for (i = 0; i < particle->unk_30; i++, var_r31++) { var_r31->unk34.x += 5.0f * temp_f30 * var_r31->unk08.x; var_r31->unk34.y = 20.0f; var_r31->unk34.z += 5.0f * temp_f30 * var_r31->unk08.z; var_r31->unk2C = 20.0f + 60.0f * temp_f31; var_r31->unk40.r = var_r31->unk40.g = var_r31->unk40.b = 0xFF; var_r31->unk40.a = 64.0f * (1.0f - temp_f31 * temp_f31); } if (particle->unk_02 == 0) { particle->unk_00++; } break; case 2: Hu3DModelKill(particle->unk_2E); return; } DCFlushRange(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01)); } static s32 fn_1_4528(void) { lbl_1_data_154 *= 0x41C64E6D; lbl_1_data_154 += 0x3039; return lbl_1_data_154 >> 16; } static float fn_1_457C(float arg0, float arg1, float arg2) { float var_f31; if (arg0 > 180.0f) { arg0 -= 360.0f; } else if (arg0 <= -180.0f) { arg0 += 360.0f; } if (arg1 > 180.0f) { arg1 -= 360.0f; } else if (arg1 <= -180.0f) { arg1 += 360.0f; } var_f31 = arg0 - arg1; if (var_f31 > 180.0f) { var_f31 -= 360.0f; } else if (var_f31 <= -180.0f) { var_f31 += 360.0f; } arg0 = arg1 + var_f31 * arg2; if (arg0 > 180.0f) { arg0 -= 360.0f; } else if (arg0 <= -180.0f) { arg0 += 360.0f; } return arg0; } static void fn_1_46E4(Mtx arg0, float arg1, float arg2, float arg3) { Mtx sp38; Mtx sp8; if (arg3 != 0.0f) { PSMTXRotRad(arg0, 'Z', MTXDegToRad(arg3)); } else { PSMTXIdentity(arg0); } if (arg1 != 0.0f) { PSMTXRotRad(sp38, 'X', MTXDegToRad(arg1)); PSMTXConcat(sp38, arg0, arg0); } if (arg2 != 0.0f) { PSMTXRotRad(sp8, 'Y', MTXDegToRad(arg2)); PSMTXConcat(sp8, arg0, arg0); } } static void fn_1_4804(float *arg0, float *arg1) { float temp_f29; float var_f28; double var_f30; arg1[0] = atan2d(arg0[10], arg0[6]); arg1[2] = atan2d(arg0[0], arg0[1]); temp_f29 = -arg0[2]; if (1.0 - temp_f29 * temp_f29 < 0.0) { var_f30 = -(1.0 - temp_f29 * temp_f29); } else { var_f30 = 1.0 - temp_f29 * temp_f29; } var_f28 = sqrtf(var_f30); if (arg1[0] > 90.0f && arg1[0] < 270.0f && arg1[2] > 90.0f && arg1[2] < 270.0f) { arg1[0] = fmod(180.0f + arg1[0], 360.0); arg1[2] = fmod(180.0f + arg1[2], 360.0); var_f28 = -var_f28; } arg1[1] = atan2d(var_f28, temp_f29); } static float fn_1_4B10(float arg0, float arg1, float arg2, float arg3) { float temp_f31; float var_f30; temp_f31 = 1.0 - arg0; var_f30 = temp_f31 * temp_f31 * arg1 + temp_f31 * arg0 * arg2 * 2.0 + arg0 * arg0 * arg3; return var_f30; } static void fn_1_4B88(float *arg0, float *arg1, float *arg2, float *arg3, float arg4) { s32 i; for (i = 0; i < 3; i++) { *(arg3++) = fn_1_4B10(arg4, *(arg0++), *(arg1++), *(arg2++)); } } static float fn_1_4CA4(float arg0, float arg1, float arg2, float arg3) { float var_f31 = 2.0 * ((arg0 - 1.0) * arg1 + (1.0 - 2.0 * arg0) * arg2 + arg0 * arg3); return var_f31; } static void fn_1_4D1C(float *arg0, float *arg1, float *arg2, float *arg3, float arg4) { float spC[3]; float var_f29; s32 i; for (i = 0; i < 3; i++) { spC[i] = fn_1_4CA4(arg4, *(arg0++), *(arg1++), *(arg2++)); } var_f29 = VECMagPoint(spC[0], spC[1], spC[2]); if (var_f29) { var_f29 = 1.0 / var_f29; for (i = 0; i < 3; i++) { *(arg3++) = var_f29 * spC[i]; } } else { *(arg3++) = 0.0f; *(arg3++) = 0.0f; *(arg3++) = 1.0f; } } static void fn_1_4FF4(float *arg0, float *arg1, float *arg2, s32 arg3) { float sp48[16]; float sp8[16]; double temp_f31; s32 i; arg2[0] = 0.0f; arg2[arg3 - 1] = 0.0f; for (i = 0; i < arg3 - 1; i++) { sp48[i] = arg0[i + 1] - arg0[i]; if (sp48[i] == 0.0f) { sp8[i + 1] = 0.0f; } else { sp8[i + 1] = (arg1[i + 1] - arg1[i]) / sp48[i]; } } arg2[1] = sp8[2] - sp8[1]; sp8[1] = 2.0f * (arg0[2] - arg0[0]); for (i = 1; i < arg3 - 2; i++) { temp_f31 = sp48[i] / sp8[i]; arg2[i + 1] = sp8[i + 2] - sp8[i + 1] - temp_f31 * arg2[i]; sp8[i + 1] = 2.0f * (arg0[i + 2] - arg0[i]) - temp_f31 * sp48[i]; } arg2[arg3 - 2] -= sp48[arg3 - 2] * arg2[arg3 - 1]; for (i = arg3 - 2; i > 0; i--) { if (sp8[i] == 0.0f) { arg2[i] = 0.0f; } else { arg2[i] = (arg2[i] - sp48[i] * arg2[i + 1]) / sp8[i]; } } } static float fn_1_52AC(float arg0, float *arg1, float *arg2, float *arg3, s32 arg4) { float temp_f31; float temp_f30; float var_f29; s32 temp_r31; temp_r31 = arg0; arg0 -= temp_r31; temp_f31 = arg1[temp_r31 + 1] - arg1[temp_r31]; temp_f30 = temp_f31 * arg0; var_f29 = arg2[temp_r31] + temp_f30 * (temp_f30 * (3.0f * arg3[temp_r31] + temp_f30 * (arg3[temp_r31 + 1] - arg3[temp_r31]) / temp_f31) + ((arg2[temp_r31 + 1] - arg2[temp_r31]) / temp_f31 - temp_f31 * (2.0f * arg3[temp_r31] + arg3[temp_r31 + 1]))); if (temp_f31 == 0.0f) { var_f29 = arg2[temp_r31]; } return var_f29; } static void fn_1_5400(float *arg0, Vec *arg1, float arg2[][3], s32 arg3) { Vec sp8; float temp_f31; float spD4[16]; float sp94[16]; s32 j; s32 i; arg0[0] = 0.0f; for (i = 1; i < arg3; i++) { VECSubtract(&arg1[i], &arg1[i - 1], &sp8); arg0[i] = arg0[i - 1] + VECMag(&sp8); } for (j = 0; j < 3; j++) { for (i = 0; i < arg3; i++) { spD4[i] = ((float*) &arg1[i])[j]; } fn_1_4FF4(arg0, spD4, sp94, arg3); for (i = 0; i < arg3; i++) { arg2[i][j] = sp94[i]; } } } static void fn_1_57E0(float arg0, Vec *arg1, float *arg2, Vec *arg3, float arg4[][3], s32 arg5) { float sp48[16]; float sp8[16]; s32 i; s32 j; for (i = 0; i < 3; i++) { for (j = 0; j < arg5; j++) { sp48[j] = ((float*) &arg3[j])[i]; sp8[j] = arg4[j][i]; } ((float*) arg1)[i] = fn_1_52AC(arg0, arg2, sp48, sp8, arg5); } } static float fn_1_59F4(Vec *arg0) { float var_f30; float var_f29; var_f30 = arg0->x * arg0->x + arg0->y * arg0->y + arg0->z * arg0->z; var_f30 = sqrtf(var_f30); if (var_f30 != 0.0f) { var_f29 = 1.0f / var_f30; arg0->x *= var_f29; arg0->y *= var_f29; arg0->z *= var_f29; } else { arg0->x = arg0->y = arg0->z = 0.0f; } return var_f30; } static void fn_1_5B8C(Vec arg0, Vec arg1, Vec *arg2, float arg3) { if (arg3 <= 0.0f) { arg2->x = arg0.x; arg2->y = arg0.y; arg2->z = arg0.z; arg3 = 0.0f; } else if (arg3 >= 1.0f) { arg2->x = arg0.x + arg1.x; arg2->y = arg0.y + arg1.y; arg2->z = arg0.z + arg1.z; arg3 = 1.0f; } else { arg2->x = arg0.x + arg3 * arg1.x; arg2->y = arg0.y + arg3 * arg1.y; arg2->z = arg0.z + arg3 * arg1.z; } } static float fn_1_5C64(Vec arg0, Vec arg1, Vec arg2) { float var_f31; float temp_f30; var_f31 = arg2.x * (arg1.x - arg0.x) + arg2.y * (arg1.y - arg0.y) + arg2.z * (arg1.z - arg0.z); temp_f30 = -(arg2.x * arg2.x + arg2.y * arg2.y + arg2.z * arg2.z); if (temp_f30 != 0.0f) { var_f31 /= temp_f30; } return var_f31; } static float fn_1_5D20(Vec *arg0, Vec *arg1, Vec *arg2) { Vec sp44; float var_f31; if (arg2->x * arg2->x + arg2->y * arg2->y + arg2->z * arg2->z == 0.0f) { return (arg0->x - arg1->x) * (arg0->x - arg1->x) + (arg0->y - arg1->y) * (arg0->y - arg1->y) + (arg0->z - arg1->z) * (arg0->z - arg1->z); } var_f31 = fn_1_5C64(*arg0, *arg1, *arg2); fn_1_5B8C(*arg1, *arg2, &sp44, var_f31); return (arg0->x - sp44.x) * (arg0->x - sp44.x) + (arg0->y - sp44.y) * (arg0->y - sp44.y) + (arg0->z - sp44.z) * (arg0->z - sp44.z); } static float fn_1_605C(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3, Vec *arg4) { float var_f27; if (arg2->x * arg2->x + arg2->y * arg2->y + arg2->z * arg2->z == 0.0f) { return (arg0->x - arg1->x) * (arg0->x - arg1->x) + (arg0->y - arg1->y) * (arg0->y - arg1->y) + (arg0->z - arg1->z) * (arg0->z - arg1->z); } var_f27 = fn_1_5C64(*arg0, *arg1, *arg2); fn_1_5B8C(*arg1, *arg2, arg3, var_f27); arg4->x = arg3->x - arg0->x; arg4->y = arg3->y - arg0->y; arg4->z = arg3->z - arg0->z; return fn_1_59F4(arg4); }