#define HUSPR_USE_OLD_DEFS #include "dolphin/gx/GXEnum.h" #include "dolphin/gx/GXStruct.h" #include "dolphin/gx/GXVert.h" #include "ext_math.h" #include "game/audio.h" #include "game/chrman.h" #include "game/esprite.h" #include "game/flag.h" #include "game/frand.h" #include "game/gamework_data.h" #include "game/hsfanim.h" #include "game/hsfdraw.h" #include "game/hsfman.h" #include "game/hsfmotion.h" #include "game/memory.h" #include "game/minigame_seq.h" #include "game/object.h" #include "game/objsub.h" #include "game/pad.h" #include "game/printfunc.h" #include "game/sprite.h" #include "game/window.h" #include "game/wipe.h" #include "math.h" #include "string.h" #include "REL/m425Dll.h" extern u8 texMtxTbl[]; // TODO maybe put in hsfdraw.h? typedef struct M425DllWork { u8 unk_00; u8 unk_01; u8 unk_02; u8 unk_03; u8 unk_04; u8 unk_05; u8 unk_06; char unk07[2]; u8 unk_09; u8 unk_0A; u8 unk_0B; u8 unk_0C; char unk0D; s16 unk_0E; float unk_10; float unk_14; Vec unk_18; Vec unk_24; Vec unk_30; float unk_3C[8]; s32 unk_5C; float unk_60; s32 unk_64; s32 unk_68; } M425DllWork; /* size = 0x6C */ typedef struct M425DllWork2 { char unk00[4]; Vec unk_04; Vec unk_10; Vec unk_1C; Vec unk_28; float unk_34; float unk_38; float unk_3C; float unk_40; float unk_44; float unk_48; char unk4C[0x18]; float unk_64; float unk_68; float unk_6C; char unk70[4]; s16 unk_74; s16 unk_76; } M425DllWork2; /* size = 0x78 */ typedef struct M425DllUnkStruct { s16 unk_00; s16 unk_02; s16 unk_04; char unk06[0x42]; } M425DllUnkStruct; /* size = 0x48 */ typedef struct M425DllUnkStruct2 { AnimData *unk_00; s16 unk_04; Vec unk_08; Mtx unk_14; Vec2f *unk_44; s16 unk_48; } M425DllUnkStruct2; /* size = 0x4C */ typedef struct M425DllUnkStruct3 { char unk00[0xC]; s16 unk_0C; void *unk_10; Vec *unk_14; GXColor *unk_18; Vec *unk_1C; GXColor unk_20; GXColor unk_24; s16 unk_28; s16 unk_2A; M425DllUnkStruct2 *unk_2C; } M425DllUnkStruct3; /* size = 0x30 */ typedef struct M425DllUnkBss10Struct { /* 0x00 */ u8 unk_00; /* 0x01 */ char pad_01[1]; /* 0x02 */ u8 unk_02; /* 0x03 */ u8 unk_03; /* 0x04 */ float unk_04; /* 0x08 */ Vec unk_08; /* 0x14 */ float unk_14; /* 0x18 */ float unk_18; /* 0x1C */ float unk_1C; /* 0x20 */ float unk_20; /* 0x24 */ float unk_24; /* 0x28 */ float unk_28; /* 0x2C */ float unk_2C; /* 0x30 */ float unk_30; /* 0x34 */ float unk_34; /* 0x38 */ float unk_38; /* 0x3C */ float unk_3C; /* 0x40 */ float unk_40; union { /* 0x44 */ s16 unk_44[0x20]; struct { float unk_44f; float unk_48; char unk4C[4]; float unk_50; char unk54[0x30]; }; }; } M425DllUnkBss10Struct; /* size = 0x84 */ void fn_1_1B40(omObjData *object); void fn_1_2784(omObjData *object); void fn_1_2870(omObjData *object); void fn_1_2A94(s16 arg0, Vec *arg1, Vec *arg2, float arg8); void fn_1_2B2C(omObjData *object); void fn_1_2E78(omObjData *object); void fn_1_33E0(omObjData *object); void fn_1_3764(omObjData *object); s16 fn_1_3ED0(s32 arg0, s16 arg1, ParticleHook arg2); void fn_1_3F80(ModelData *model, ParticleData *particle, Mtx matrix); void fn_1_460(omObjData *object); void fn_1_480(omObjData *object); void fn_1_4A88(ModelData *model, ParticleData *particle, Mtx matrix); void fn_1_5044(s16 arg0); void fn_1_573C(Vec2f **arg0, s16 arg1, Vec2f *arg2); void fn_1_57D4(ModelData *model, Mtx matrix); void fn_1_5C20(ModelData *model, Mtx matrix); s32 fn_1_64D4(void); void fn_1_8E4(omObjData *object); void fn_1_F48(omObjData *object); void fn_1_FA8(omObjData *object); s16 lbl_1_data_0 = -1; Vec lbl_1_data_4 = { -200.0f, 2500.0f, 1200.0f }; Vec lbl_1_data_10 = { 0.2f, -0.8f, -0.2f }; float lbl_1_data_1C[9] = { 0.0f, 2500.0f, 1500.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }; GXColor lbl_1_data_40 = { 0xFF, 0xFF, 0xFF, 0xFF }; omObjData *lbl_1_bss_668; omObjData *lbl_1_bss_664; // M425DllWork2 omObjData *lbl_1_bss_660; omObjData *lbl_1_bss_65C; // M425DllWork omObjData *lbl_1_bss_64C[4]; u16 lbl_1_bss_648; s16 lbl_1_bss_646; s16 lbl_1_bss_644; s16 lbl_1_bss_642; s16 lbl_1_bss_640; M425DllUnkBss10Struct lbl_1_bss_10[0xC]; float lbl_1_bss_C; float lbl_1_bss_8; float lbl_1_bss_4; char lbl_1_bss_0[4]; void ObjectSetup(void) { s32 var_r31; Process *process; omObjData *object; s32 var_r28; LightData *var_r27; CameraData *var_r26; s32 var_r25; s32 var_r24; s32 sp8[4] = { 0, 0, 0, 0 }; OSReport("******* M425ObjectSetup *********\n"); Hu3DLighInit(); var_r24 = Hu3DGLightCreateV(&lbl_1_data_4, &lbl_1_data_10, &lbl_1_data_40); Hu3DGLightInfinitytSet(var_r24); var_r27 = Hu3DGlobalLight; var_r27->unk_00 |= 0x8000; process = omInitObjMan(0x32, 0x2000); var_r25 = frand() & 0x1F; for (var_r31 = 0; var_r31 < var_r25; var_r31++) { fn_1_64D4(); } CRot.x = 8.0f; CRot.y = 0.0f; CRot.z = 0.0f; Center.x = 0.0f; Center.y = 430.0f; Center.z = -400.0f; CZoom = 1650.0f; Hu3DCameraCreate(1); Hu3DCameraPerspectiveSet(1, 45.0f, 100.0f, 50000.0f, 1.2f); Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); lbl_1_bss_664 = omAddObjEx(process, 0x7FDA, 0, 0, -1, omOutView); var_r26 = Hu3DCamera; var_r26->fov = -1.0f; lbl_1_bss_668 = omAddObjEx(process, 0x10, 8, 0, -1, fn_1_460); lbl_1_bss_65C = omAddObjEx(process, 0x20, 0x10, 0, -1, fn_1_FA8); lbl_1_bss_660 = omAddObjEx(process, 0x50, 0x10, 0, -1, fn_1_2784); fn_1_6A0C(process, 0x40); omMakeGroupEx(process, 0, 4); omGetGroupMemberListEx(process, 0); for (var_r31 = 0; var_r31 < 4; var_r31++) { object = omAddObjEx(process, 0x30, 2, 0xA, 0, fn_1_2B2C); lbl_1_bss_64C[var_r31] = object; object->work[0] = var_r31; object->work[1] = GWPlayerCfg[var_r31].group; for (var_r28 = object->work[1] * 2; var_r28 < 4; var_r28++) { if (sp8[var_r28] == 0) { object->work[1] = var_r28; sp8[var_r28]++; break; } } } omGameSysInit(process); HuAudSndGrpSet(0x32); } void fn_1_460(omObjData *object) { lbl_1_bss_648 = 0; object->func = fn_1_480; } void fn_1_480(omObjData *object) { Vec sp14; Vec sp8; float var_f31; CameraData *var_r30; switch (lbl_1_bss_648) { case 0: sp14.x = -250.0f; sp14.y = 225.0f; sp14.z = 200.0f; sp8.x = 22.0f; sp8.y = 10.0f; sp8.z = 0.0f; var_f31 = 500.0f; fn_1_2A94(1, &sp14, &sp8, var_f31); lbl_1_bss_C = -4.866667f; lbl_1_bss_8 = 600.0f; sp14.x = -300.0f; sp14.y = lbl_1_bss_8; sp14.z = 0.0f; fn_1_6CD0(0, &sp14); sp14.x = 300.0f; fn_1_6CD0(1, &sp14); var_r30 = Hu3DCamera; var_r30->fov = 45.0f; WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); lbl_1_bss_648++; break; case 1: lbl_1_bss_8 += lbl_1_bss_C; lbl_1_bss_C += -2.4333334f; if (lbl_1_bss_8 < 0.0f) { lbl_1_bss_8 = 0.0f; lbl_1_bss_648++; lbl_1_bss_640 = 0x3C; fn_1_10DB4(0); fn_1_10DB4(1); fn_1_10E3C(0); } sp14.x = -300.0f; sp14.y = lbl_1_bss_8; sp14.z = 0.0f; fn_1_6CD0(0, &sp14); sp14.x = 300.0f; fn_1_6CD0(1, &sp14); break; case 2: if (--lbl_1_bss_640 == 0) { sp14.x = 0.0f; sp14.y = 430.0f; sp14.z = -400.0f; sp8.x = 8.0f; sp8.y = 0.0f; sp8.z = 0.0f; var_f31 = 1650.0f; lbl_1_bss_640 = 0x48; fn_1_2A94(0x3C, &sp14, &sp8, var_f31); lbl_1_bss_648++; } break; case 3: if (--lbl_1_bss_640 == 0) { lbl_1_bss_648 = 4; object->func = fn_1_8E4; lbl_1_bss_646 = lbl_1_bss_644 = -1; } break; } if ((omSysExitReq != 0) && (WipeStatGet() == 0)) { WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); object->func = fn_1_F48; } } s32 lbl_1_data_68 = -1; s32 lbl_1_data_6C[0xA] = { 0, 2, 3, 5, 6, 8, 0xA, 9, 0x17, 0x18 }; Vec lbl_1_data_94[4] = { { -350.0f, 800.0f, 100.0f }, { -200.0f, 1000.0f, 0.0f }, { 200.0f, 1200.0f, 0.0f }, { 350.0f, 1400.0f, 100.0f }, }; void fn_1_8E4(omObjData *object) { s16 sp8[2]; float var_f31; s32 var_r31; s32 var_r30; s32 var_r29; s32 var_r28; s16 var_r26; s16 var_r25; switch (lbl_1_bss_648) { case 4: if (lbl_1_bss_644 == -1) { lbl_1_bss_642 = 0x708; lbl_1_bss_644 = MGSeqCreate(3, 0); MGSeqPosSet(lbl_1_bss_644, 320.0f, 240.0f); } else { if (MGSeqStatGet(lbl_1_bss_644) == 0) { lbl_1_bss_644 = -1; lbl_1_bss_648++; lbl_1_bss_646 = MGSeqCreate(1, lbl_1_bss_642 / 60, -1, -1); } } if ((lbl_1_data_68 == -1) && ((MGSeqStatGet(lbl_1_bss_644) & 0x10) != 0)) { lbl_1_data_68 = HuAudSeqPlay(0x48); } break; case 5: var_r30 = 0; lbl_1_bss_642--; var_r28 = (lbl_1_bss_642 + 0x3B) / 60; if (var_r28 < 0) { var_r28 = 0; } MGSeqParamSet(lbl_1_bss_646, 1, var_r28); if (lbl_1_bss_642 < -1) { var_r30++; if ((fn_1_10CF4(0) == 1000.0f) && (fn_1_10CF4(1) == 1000.0f)) { lbl_1_data_0 = -1; } else { var_f31 = fn_1_10CF4(1); if (fn_1_10CF4(0) <= var_f31) { lbl_1_data_0 = 0; } else { lbl_1_data_0 = 1; } } } for (var_r31 = 0; var_r31 < 2; var_r31++) { if (!(fn_1_10CF4(var_r31) > 0.0f)) { lbl_1_data_0 = var_r31; var_r30++; } } if (var_r30 != 0) { lbl_1_bss_648++; } break; case 6: if (lbl_1_bss_644 == -1) { lbl_1_bss_644 = MGSeqCreate(3, 1); MGSeqPosSet(lbl_1_bss_644, 320.0f, 240.0f); MGSeqParamSet(lbl_1_bss_646, 2, -1); HuAudSeqFadeOut(lbl_1_data_68, 0x64); } else if (MGSeqStatGet(lbl_1_bss_644) == 0) { lbl_1_bss_644 = -1; lbl_1_bss_640 = 1; lbl_1_bss_648++; } break; case 7: if (--lbl_1_bss_640 <= 0) { lbl_1_bss_644 = -1; lbl_1_bss_648++; } break; case 8: if (lbl_1_data_0 != -1) { for (var_r31 = 0, var_r29 = 0; var_r31 < 4; var_r31++) { if (lbl_1_data_0 == OM_GET_DATA_PTR(lbl_1_bss_64C[var_r31], M425DllWork)->unk_02) { sp8[var_r29] = OM_GET_DATA_PTR(lbl_1_bss_64C[var_r31], M425DllWork)->unk_01; var_r29++; GWPlayerCoinWinAdd(var_r31, 10); } } lbl_1_bss_644 = MGSeqCreate(5, 3, sp8[0], sp8[1], -1, -1); HuAudSStreamPlay(1); } else { lbl_1_bss_644 = MGSeqCreate(3, 2); HuAudSStreamPlay(4); } lbl_1_bss_640 = 0xD2; lbl_1_bss_648++; break; case 9: if (--lbl_1_bss_640 <= 0) { WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); object->func = fn_1_F48; } break; } if ((omSysExitReq != 0) && (WipeStatGet() == 0)) { WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); object->func = fn_1_F48; } } void fn_1_F48(omObjData *object) { if (WipeStatGet() == 0) { CharModelKill(-1); MGSeqKill(lbl_1_bss_646); MGSeqKillAll(); fn_1_6C08(); HuAudFadeOut(1); omOvlReturnEx(1, 1); } } void fn_1_FA8(omObjData *object) { M425DllUnkBss10Struct *var_r31; s32 var_r30; s16 *var_r28; s32 var_r27; s32 var_r26; Vec sp8[] = { { 475.0f, 800.0f, -1400.0f }, { -300.0f, 900.0f, -1400.0f }, { 300.0f, 875.0f, -1450.0f }, { -575.0f, 850.0f, -1550.0f }, { 350.0f, 750.0f, -1500.0f }, { -450.0f, 775.0f, -1550.0f }, { 325.0f, 725.0f, -1450.0f }, { -525.0f, 725.0f, -1500.0f }, { 575.0f, 850.0f, -1550.0f }, { -350.0f, 750.0f, -1500.0f }, { 450.0f, 775.0f, -1550.0f }, { -325.0f, 725.0f, -1450.0f }, { 525.0f, 725.0f, -1500.0f }, { -475.0f, 800.0f, -1400.0f }, { 300.0f, 900.0f, -1400.0f }, { -300.0f, 875.0f, -1450.0f }, }; var_r30 = Hu3DModelCreateFile(0x380000); object->model[0] = var_r30; var_r30 = Hu3DModelCreateFile(0x380001); object->model[1] = var_r30; Hu3DModelAttrSet(var_r30, HU3D_MOTATTR_LOOP); var_r30 = Hu3DHookFuncCreate(fn_1_57D4); object->model[2] = var_r30; fn_1_5044(var_r30); var_r30 = fn_1_3ED0(0x1E0020, 0xC8, fn_1_4A88); object->model[3] = var_r30; Hu3DParticleBlendModeSet(var_r30, 1); var_r30 = fn_1_3ED0(0x380005, 1, fn_1_3F80); object->model[5] = var_r30; Hu3DParticleBlendModeSet(var_r30, 1); Hu3DModelLayerSet(var_r30, 6); var_r28 = ((ParticleData *)Hu3DData[var_r30].unk_120)->unk_1C; var_r28[1] = 0; var_r30 = fn_1_3ED0(0x380008, 0xA, fn_1_3F80); object->model[6] = var_r30; Hu3DParticleBlendModeSet(var_r30, 1); Hu3DModelLayerSet(var_r30, 6); var_r28 = ((ParticleData *)Hu3DData[var_r30].unk_120)->unk_1C; var_r28[1] = 1; var_r30 = fn_1_3ED0(0x380007, 4, fn_1_3F80); object->model[7] = var_r30; Hu3DParticleBlendModeSet(var_r30, 1); Hu3DModelLayerSet(var_r30, 6); var_r28 = ((ParticleData *)Hu3DData[var_r30].unk_120)->unk_1C; var_r28[1] = 2; var_r30 = fn_1_3ED0(0x380006, 6, fn_1_3F80); object->model[8] = var_r30; Hu3DParticleBlendModeSet(var_r30, 1); Hu3DModelLayerSet(var_r30, 6); var_r28 = ((ParticleData *)Hu3DData[var_r30].unk_120)->unk_1C; var_r28[1] = 3; for (var_r27 = 0; var_r27 < 0xC; var_r27++) { var_r31 = &lbl_1_bss_10[var_r27]; var_r30 = Hu3DModelCreateFile(0x380002); var_r31->unk_00 = var_r30; var_r31->unk_08.x = sp8[var_r27].x; var_r31->unk_08.y = sp8[var_r27].y; var_r31->unk_08.z = sp8[var_r27].z; Hu3DModelPosSet(var_r30, var_r31->unk_08.x, var_r31->unk_08.y, var_r31->unk_08.z); Hu3DMotionSpeedSet(var_r30, 6.0f); var_r31->unk_02 = var_r31->unk_03 = 0; var_r31->unk_14 = var_r31->unk_18 = var_r31->unk_1C = 0.0f; var_r31->unk_20 = var_r31->unk_24 = var_r31->unk_28 = 1.0f; var_r31->unk_38 = var_r31->unk_3C = var_r31->unk_40 = 0.0f; var_r31->unk_2C = var_r31->unk_08.x; var_r31->unk_30 = var_r31->unk_08.y; var_r31->unk_34 = var_r31->unk_08.z; if ((var_r27 & 1) != 0) { var_r31->unk_18 = 90.0f; var_r31->unk_08.y += 650.0; var_r31->unk_08.x -= 1400.0; } else { var_r31->unk_18 = 90.0f; } var_r31->unk_18 += 10.0 * (3.0517578125e-05 * (float)((u16)frand() - 0x8000)); var_r31->unk_08.z -= 400.0; var_r31->unk_04 = 100.0 * (0.10000000149011612 + (0.019999999552965164 * (1.52587890625e-05 * (float)(s32)(u16)frand()))); for (var_r26 = 0; var_r26 < 0x20; var_r26++) { var_r31->unk_44[var_r26] = 0; } var_r31->unk_50 = var_r31->unk_04; } HuAudFXPlay(0x633); HuAudFXPlay(0x635); object->func = fn_1_1B40; } void fn_1_14CC(Mtx arg0, float arg8, float arg9, float argA) { Mtx sp38; Mtx sp8; if (argA != 0.0f) { MTXRotRad(arg0, 0x5A, MTXDegToRad(argA)); } else { MTXIdentity(arg0); } if (arg8 != 0.0f) { MTXRotRad(sp38, 0x58, MTXDegToRad(arg8)); MTXConcat(sp38, arg0, arg0); } if (arg9 != 0.0f) { MTXRotRad(sp8, 0x59, MTXDegToRad(arg9)); MTXConcat(sp8, arg0, arg0); } } float fn_1_15EC(float arg8, float arg9) { float var_f30 = 360.0f; float var_f31 = 180.0 * (atan2f(arg9, arg8) / M_PI); if (var_f31 < 0.0f) { var_f31 += var_f30; } else if (var_f31 >= var_f30) { var_f31 -= var_f30; } return var_f31; } void fn_1_16B0(Mtx var_r30, Vec *var_r31) { float var_f29; float var_f25; var_r31->x = fn_1_15EC(var_r30[2][2], var_r30[1][2]); var_r31->z = fn_1_15EC(var_r30[0][0], var_r30[0][1]); var_f29 = -var_r30[0][2]; var_f25 = sqrtf((1.0 - (var_f29 * var_f29)) < 0.0 ? (-1.0 - (var_f29 * var_f29)) : (1.0 - (var_f29 * var_f29))); if ((var_r31->x > 90.0f) && (var_r31->x < 270.0f) && (var_r31->z > 90.0f) && (var_r31->z < 270.0f)) { var_r31->x = fmod(180.0f + var_r31->x, 360.0); var_r31->z = fmod(180.0f + var_r31->z, 360.0); var_f25 = -var_f25; } var_r31->y = fn_1_15EC(var_f25, var_f29); } void fn_1_1B40(omObjData *object) { Mtx spCC; Mtx sp9C; Mtx sp6C; Vec sp60; M425DllUnkBss10Struct *var_r31; s32 var_r27; for (var_r27 = 0; var_r27 < 0xC; var_r27++) { var_r31 = &lbl_1_bss_10[var_r27]; switch (var_r31->unk_03) { case 0: if (var_r31->unk_04 < var_r31->unk_50) { var_r31->unk_04 += 0.4f; } if ((s32)(64.0 * (1.52587890625e-05 * (float)fn_1_64D4())) == 0) { Hu3DMotionTimeSet(var_r31->unk_00, 0.0f); } if (Hu3DMotionEndCheck(var_r31->unk_00) != 0) { var_r31->unk_3C = -2.92f; } else { var_r31->unk_3C = -0.48666668f; } var_r31->unk_44f += 0.10000000149011612 * (3.0517578125e-05 * (float)((u16)frand() - 0x8000)); var_r31->unk_48 += var_r31->unk_44f; if (var_r31->unk_48 > 180.0f) { var_r31->unk_48 -= 180.0f; } if (var_r31->unk_48 < -180.0f) { var_r31->unk_48 += 180.0f; } var_r31->unk_14 = -30.0 * sind(var_r31->unk_48) * sind(var_r31->unk_18); var_r31->unk_1C = -30.0 * sind(var_r31->unk_48) * cosd(var_r31->unk_18); if ((var_r31->unk_08.y <= 700.0f) || (fabs(var_r31->unk_08.x) > 2000.0)) { var_r31->unk_3C = 0.0f; var_r31->unk_44[6] = (s32)(20.0 * (3.0517578125e-05 * (float)(fn_1_64D4() - 0x8000))) + 0xB4; var_r31->unk_04 *= 0.75f; var_r31->unk_03++; } break; case 1: var_r31->unk_18 += 1.0f; var_r31->unk_14 = 0.0f; var_r31->unk_1C = 60.0 * sind(var_r31->unk_44[6]) * cosd(var_r31->unk_18); if (--var_r31->unk_44[6] == 0) { Hu3DModelAttrSet(var_r31->unk_00, HU3D_MOTATTR_LOOP); Hu3DMotionSpeedSet(var_r31->unk_00, 6.0f); var_r31->unk_3C = 5.3533335f; var_r31->unk_03++; } break; case 2: if (var_r31->unk_04 > 4.0f) { var_r31->unk_04 -= 0.1f; var_r31->unk_3C += 0.73f; } var_r31->unk_3C += -0.5475f; if (var_r31->unk_3C < 0.0f) { Hu3DModelAttrReset(var_r31->unk_00, HU3D_MOTATTR_LOOP); Hu3DMotionSpeedSet(var_r31->unk_00, 2.0f); var_r31->unk_50 = 100.0 * (0.10000000149011612 + (0.019999999552965164 * (1.52587890625e-05 * (float)(s32)(u16)frand()))); var_r31->unk_03 = 0; } break; } if (0) { s32 var_r31; s32 var_r30; s32 var_r29; float var_f31; float var_f20; float var_f19; float var_f18; (void) object; (void) object; (void) var_r31; (void) var_r31; (void) var_r31; (void) var_r31; (void) var_r31; (void) var_r31; (void) var_r30; (void) var_r30; (void) var_r30; (void) var_r30; (void) var_r30; (void) var_r30; (void) var_r29; (void) var_r29; (void) var_r29; (void) var_r29; (void) var_r29; (void) var_r29; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f31; (void) var_f20; (void) var_f20; (void) var_f20; (void) var_f19; (void) var_f19; (void) var_f19; (void) var_f18; (void) var_f18; (void) var_f18; } var_r31->unk_38 = var_r31->unk_04 * sind(var_r31->unk_18); var_r31->unk_40 = var_r31->unk_04 * cosd(var_r31->unk_18); var_r31->unk_08.x += var_r31->unk_38; var_r31->unk_08.y += var_r31->unk_3C; var_r31->unk_08.z += var_r31->unk_40; Hu3DModelPosSet(var_r31->unk_00, var_r31->unk_08.x, var_r31->unk_08.y, var_r31->unk_08.z); fn_1_14CC(spCC, var_r31->unk_14, -var_r31->unk_18, var_r31->unk_1C); fn_1_16B0(spCC, &sp60); Hu3DModelRotSetV(var_r31->unk_00, &sp60); } } void fn_1_2784(omObjData *object) { M425DllWork2 *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M425DllWork2), MEMORY_DEFAULT_NUM); object->data = work; work->unk_76 = work->unk_74 = 0; work->unk_10.x = work->unk_28.x = 8.0f; work->unk_10.y = work->unk_28.y = 0.0f; work->unk_10.z = work->unk_28.z = 0.0f; work->unk_04.x = work->unk_1C.x = 0.0f; work->unk_04.y = work->unk_1C.y = 430.0f; work->unk_04.z = work->unk_1C.z = -400.0f; work->unk_64 = work->unk_68 = 1650.0f; object->func = fn_1_2870; } void fn_1_2870(omObjData *object) { float var_f31; M425DllWork2 *work; work = object->data; if (work->unk_76 != 0) { work->unk_76--; var_f31 = (float)(work->unk_74 - work->unk_76) / work->unk_74; var_f31 = sind((90.0f * var_f31)); work->unk_04.x = work->unk_1C.x + (var_f31 * (work->unk_34 - work->unk_1C.x)); work->unk_04.y = work->unk_1C.y + (var_f31 * (work->unk_38 - work->unk_1C.y)); work->unk_04.z = work->unk_1C.z + (var_f31 * (work->unk_3C - work->unk_1C.z)); work->unk_10.x = work->unk_28.x + (var_f31 * (work->unk_40 - work->unk_28.x)); work->unk_10.y = work->unk_28.y + (var_f31 * (work->unk_44 - work->unk_28.y)); work->unk_10.z = work->unk_28.z + (var_f31 * (work->unk_48 - work->unk_28.z)); work->unk_64 = work->unk_68 + (var_f31 * (work->unk_6C - work->unk_68)); } CRot.x = work->unk_10.x; CRot.y = work->unk_10.y; CRot.z = work->unk_10.z; Center.x = work->unk_04.x; Center.y = work->unk_04.y; Center.z = work->unk_04.z; CZoom = work->unk_64; } void fn_1_2A94(s16 arg0, Vec *arg1, Vec *arg2, float arg8) { M425DllWork2 *work = lbl_1_bss_660->data; work->unk_74 = arg0; work->unk_76 = arg0; work->unk_1C = work->unk_04; work->unk_34 = arg1->x; work->unk_38 = arg1->y; work->unk_3C = arg1->z; work->unk_28 = work->unk_10; work->unk_40 = arg2->x; work->unk_44 = arg2->y; work->unk_48 = arg2->z; work->unk_68 = work->unk_64; work->unk_6C = arg8; } void fn_1_2B2C(omObjData *object) { s32 sp8; M425DllWork *var_r31; s32 var_r29; s32 var_r28; s32 var_r27; var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M425DllWork), MEMORY_DEFAULT_NUM); object->data = var_r31; var_r31->unk_00 = object->work[0]; var_r31->unk_01 = GWPlayerCfg[var_r31->unk_00].character; var_r31->unk_02 = GWPlayerCfg[var_r31->unk_00].group; var_r31->unk_03 = object->work[1] & 1; var_r31->unk_04 = GWPlayerCfg[var_r31->unk_00].pad_idx; var_r31->unk_05 = GWPlayerCfg[var_r31->unk_00].iscom; var_r31->unk_06 = GWPlayerCfg[var_r31->unk_00].diff; var_r31->unk_0E = 0; var_r31->unk_0B = 1; var_r31->unk_0C = 0; memset(var_r31->unk_3C, 0, sizeof(var_r31->unk_3C)); var_r31->unk_5C = 0; var_r31->unk_60 = 1.0f; var_r31->unk_64 = 0; var_r31->unk_68 = 0; for (var_r29 = 0; var_r29 < 4; var_r29++) { if ((var_r29 != var_r31->unk_00) && (var_r31->unk_02 == GWPlayerCfg[var_r29].group)) { var_r31->unk_09 = var_r29; break; } } var_r27 = object->work[1]; var_r31->unk_18.x = lbl_1_data_94[var_r27].x; var_r31->unk_18.y = lbl_1_data_94[var_r27].y; var_r31->unk_18.z = lbl_1_data_94[var_r27].z; var_r31->unk_24.x = var_r31->unk_24.y = var_r31->unk_24.z = 0.0f; if (var_r31->unk_02 == 0) { var_r31->unk_10 = 30.0f; } else { var_r31->unk_10 = -30.0f; } var_r28 = CharModelCreate(var_r31->unk_01, 4); object->model[0] = var_r28; Hu3DModelAttrSet(var_r28, HU3D_MOTATTR_LOOP); CharModelStepTypeSet(var_r31->unk_01, 1); for (var_r29 = 0; var_r29 < 0xA; var_r29++) { object->motion[var_r29] = CharModelMotionCreate(var_r31->unk_01, lbl_1_data_6C[var_r29]); if (var_r29 == 5) { CharModelVoiceEnableSet(var_r31->unk_01, object->motion[var_r29], 0); } } CharModelMotionDataClose(var_r31->unk_01); CharModelMotionSet(var_r31->unk_01, object->motion[var_r31->unk_0E]); omSetTra(object, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); Hu3DModelPosSet(var_r28, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); Hu3DModelRotSet(var_r28, 0.0f, 30.0f, 0.0f); HuDataDirClose(sp8); object->func = fn_1_2E78; } void fn_1_2E78(omObjData *object) { float spC[8]; s32 sp8; M425DllWork *var_r31; s32 var_r29; s32 var_r28; s32 var_r27; s32 var_r26; var_r26 = 0; sp8 = object->model[0]; var_r31 = object->data; var_r31->unk_30 = var_r31->unk_18; if ((lbl_1_bss_648 == 5) && (var_r31->unk_05 != 0)) { fn_1_33E0(object); } fn_1_3764(object); switch (lbl_1_bss_648) { case 2: if (lbl_1_bss_640 == 1) { var_r31->unk_0E = 5; CharModelMotionShiftSet(var_r31->unk_01, object->motion[var_r31->unk_0E], 0.0f, 8.0f, 0); var_r31->unk_24.y = 0.0f; var_r31->unk_0B = 0; } var_r31->unk_68 = 0; break; case 3: if (var_r31->unk_64 != 0) { var_r31->unk_18.y = fn_1_10EF8(var_r31->unk_02, var_r31->unk_03, var_r31->unk_18.x, var_r31->unk_18.z); var_r31->unk_18.y -= 10.0f; } else if (fn_1_109EC(var_r31->unk_02, var_r31->unk_03, &var_r31->unk_30, &var_r31->unk_24, &var_r31->unk_18, 0) != 0) { if (var_r31->unk_0B == 0) { HuAudFXPlay(0x62F); } CharModelVoiceEnableSet(var_r31->unk_01, object->motion[5], 1); var_r31->unk_0B = 1; } break; case 5: if ((var_r31->unk_0E == 5) && (var_r31->unk_0C == 0)) { var_r26 = 1; } case 4: case 6: case 7: if (var_r31->unk_64 != 0) { var_r31->unk_18.y = fn_1_10EF8(var_r31->unk_02, var_r31->unk_03, var_r31->unk_18.x, var_r31->unk_18.z); var_r31->unk_18.y -= 10.0f; } else if (fn_1_109EC(var_r31->unk_02, var_r31->unk_03, &var_r31->unk_30, &var_r31->unk_24, &var_r31->unk_18, var_r26) != 0) { var_r31->unk_0B = 1; } break; case 8: if (var_r31->unk_64 != 0) { var_r31->unk_18.y = fn_1_10EF8(var_r31->unk_02, var_r31->unk_03, var_r31->unk_18.x, var_r31->unk_18.z); var_r31->unk_18.y -= 10.0f; var_r31->unk_0B = 1; } else if (fn_1_109EC(var_r31->unk_02, var_r31->unk_03, &var_r31->unk_30, &var_r31->unk_24, &var_r31->unk_18, 0) != 0) { var_r31->unk_0B = 1; } if ((var_r31->unk_0B != 0) && (var_r31->unk_0E != 8) && (var_r31->unk_0E != 9)) { if (var_r31->unk_02 == lbl_1_data_0) { var_r31->unk_0E = 8; } else { var_r31->unk_0E = 9; } CharModelMotionShiftSet(var_r31->unk_01, object->motion[var_r31->unk_0E], 0.0f, 8.0f, 0); } break; case 9: if (var_r31->unk_64 != 0) { var_r31->unk_18.y = fn_1_10EF8(var_r31->unk_02, var_r31->unk_03, var_r31->unk_18.x, var_r31->unk_18.z); var_r31->unk_18.y -= 10.0f; } else if (fn_1_109EC(var_r31->unk_02, var_r31->unk_03, &var_r31->unk_30, &var_r31->unk_24, &var_r31->unk_18, 0) != 0) { var_r31->unk_0B = 1; } break; } if (var_r31->unk_18.y < 0.0f) { var_r31->unk_18.y = 0.0f; var_r31->unk_0B = 1; } var_r27 = var_r31->unk_5C % 8; var_r31->unk_3C[var_r27] = var_r31->unk_18.y; if (++var_r31->unk_5C > 8) { for (var_r29 = 0; var_r29 < 8; var_r29++) { var_r28 = var_r27 - var_r29; if (var_r28 < 0) { var_r28 += 8; } spC[var_r29] = var_r31->unk_3C[var_r28]; } for (var_r29 = 1; var_r29 < 8; var_r29++) { if (fabs(spC[var_r29] - spC[0]) > 25.0) { break; } } if (((var_r31->unk_0E == 0) || (var_r31->unk_0E == 8) || (var_r31->unk_0E == 9)) && (var_r29 >= 8)) { var_r31->unk_60 = var_r31->unk_60 - 0.05f; if (var_r31->unk_60 < 0.75f) { var_r31->unk_60 = 0.75f; } } else { var_r31->unk_60 = 1.0f; } } omSetTra(object, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); } void fn_1_33E0(omObjData *object) { s32 spC; s16 sp8; M425DllWork *var_r31; M425DllWork *var_r30; var_r31 = object->data; var_r30 = lbl_1_bss_64C[var_r31->unk_09]->data; spC = object->model[0]; sp8 = var_r31->unk_0E; switch (var_r31->unk_0E) { case 4: case 7: case 0: if (var_r30->unk_0E == 3) { if ((var_r30->unk_05 == 0) || ((s32)((0x18 - (var_r31->unk_06 * 3)) * (1.52587890625e-05 * (float)fn_1_64D4())) == 0)) { HuPadBtnDown[var_r31->unk_04] |= 0x100; break; } } else { if ((s32)((0x30 - (var_r31->unk_06 * 4)) * (1.52587890625e-05 * (float)fn_1_64D4())) == 0) { HuPadBtnDown[var_r31->unk_04] |= 0x100; break; } break; } break; case 3: if ((s32)(4.0 * (1.52587890625e-05 * (float)fn_1_64D4())) != 0) { HuPadBtn[var_r31->unk_04] |= 0x100; } if ((var_r30->unk_05 == 0) && (var_r30->unk_0E == 5)) { HuPadBtnDown[var_r31->unk_04] |= 0x100; break; } if ((var_r31->unk_24.y < 5.353333473205566) && ((s32)((0xE - (var_r31->unk_06 * 2)) * (1.52587890625e-05 * (float)fn_1_64D4())) == 0)) { HuPadBtnDown[var_r31->unk_04] |= 0x100; } break; } } void fn_1_3764(omObjData *object) { float var_f30; float var_f29; M425DllWork *var_r31; s16 var_r30; s16 var_r29; s16 var_r27; s16 var_r26; s16 var_r25; s16 var_r24; s32 var_r23; var_r31 = object->data; var_r23 = object->model[0]; var_r30 = var_r31->unk_0E; if (lbl_1_bss_648 == 5) { var_r26 = 0; var_r25 = 0; var_r27 = HuPadBtnDown[var_r31->unk_04]; var_r24 = HuPadBtn[var_r31->unk_04]; } else { var_r26 = 0; var_r25 = 0; var_r27 = 0; var_r24 = 0; } var_r31->unk_64 = 0; switch (var_r31->unk_0E) { case 4: case 7: if (CharModelMotionEndCheck(var_r31->unk_01) != 0) { var_r30 = 0; var_r29 = 1; } case 0: case 1: case 2: var_r31->unk_24.x = 0.25f * var_r26; var_r31->unk_24.z = 0.25f * -var_r25; var_r31->unk_14 = sqrtf((var_r31->unk_24.x * var_r31->unk_24.x) + (var_r31->unk_24.z * var_r31->unk_24.z)); var_r31->unk_64 = 1; if (var_r31->unk_14 > 0.1f) { if (var_r31->unk_14 >= 8.0f) { var_r30 = 2; var_r29 = 1; } else { var_r30 = 1; var_r29 = 1; } var_f30 = atan2d(var_r31->unk_24.x, var_r31->unk_24.z); if (var_f30 >= 180.0f) { var_f30 = var_f30 - 360.0f; } else if (var_f30 < -180.0f) { var_f30 += 360.0f; } var_f29 = var_r31->unk_10 - var_f30; if (var_f29 >= 180.0f) { var_f29 -= 360.0f; } else if (var_f29 < -180.0f) { var_f29 += 360.0f; } var_r31->unk_10 = var_f30 + (0.5f * var_f29); if (var_r31->unk_10 >= 180.0f) { var_r31->unk_10 = var_r31->unk_10 - 360.0f; } else if (var_r31->unk_10 < -180.0f) { var_r31->unk_10 += 360.0f; } } else { var_r30 = 0; var_r29 = 1; } var_r31->unk_24.y = 0.0f; var_r31->unk_24.y += -2.4333334f * var_r31->unk_60; if ((var_r27 & 0x100) != 0) { var_r31->unk_0B = 0; var_r31->unk_0A = 1; var_r31->unk_24.y = 26.766666f; var_r30 = 3; var_r29 = 0; } break; case 3: if (var_r31->unk_0A != 0) { if ((var_r24 & 0x100) != 0) { if (++var_r31->unk_0A > 4) { var_r31->unk_0A = 0; } else { var_r31->unk_24.y += 4.866667f; } } else { var_r31->unk_0A = 0; } } var_r31->unk_24.y += -2.4333334f; if (var_r31->unk_0B != 0) { var_r31->unk_0B = 1; var_r30 = 4; var_r29 = 0; var_r31->unk_24.y = 0.0f; } if (((var_r27 & 0x100) != 0) || ((var_r27 & 0x40) != 0)) { var_r31->unk_24.y = 0.0f; var_r31->unk_0C = 0; var_r30 = 5; var_r29 = 0; } break; case 5: if ((Hu3DData[var_r23].unk_0C == -1) && (CharModelMotionEndCheck(var_r31->unk_01) != 0)) { var_r31->unk_24.y += -2.4333334f; } else { var_r31->unk_24.y = 0.0f; } if (var_r31->unk_0B != 0) { if (var_r31->unk_0C != 0) { var_r31->unk_24.y = 0.0f; var_r31->unk_0C = 0; var_r30 = 7; var_r29 = 0; } else { var_r31->unk_24.y = 9.733334f; var_r31->unk_0B = 0; var_r30 = 6; var_r29 = 0; } } break; case 6: var_r31->unk_24.y += -2.4333334f; if ((var_r31->unk_0B != 0) && (CharModelMotionEndCheck(var_r31->unk_01) != 0)) { var_r30 = 7; var_r29 = 0; } break; case 8: case 9: var_r31->unk_24.y = -2.4333334f * var_r31->unk_60; var_r31->unk_64 = 1; break; } var_r31->unk_18.x += var_r31->unk_24.x; if (var_r31->unk_0B == 0) { var_r31->unk_18.y += var_r31->unk_24.y; } var_r31->unk_18.z += var_r31->unk_24.z; if (var_r30 != var_r31->unk_0E) { var_r31->unk_0E = var_r30; CharModelMotionShiftSet(var_r31->unk_01, object->motion[var_r31->unk_0E], 0.0f, 8.0f, var_r29); } omSetTra(object, var_r31->unk_18.x, var_r31->unk_18.y, var_r31->unk_18.z); omSetRot(object, 0.0f, var_r31->unk_10, 0.0f); } s16 fn_1_3ED0(s32 arg0, s16 arg1, ParticleHook arg2) { s32 var_r31; M425DllUnkStruct *var_r30; ParticleData *var_r29; AnimData *var_r28; var_r28 = HuSprAnimRead(HuDataReadNum(arg0, MEMORY_DEFAULT_NUM)); var_r31 = Hu3DParticleCreate(var_r28, arg1); Hu3DParticleHookSet(var_r31, arg2); var_r29 = Hu3DData[var_r31].unk_120; var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M425DllUnkStruct), MEMORY_DEFAULT_NUM); var_r29->unk_1C = var_r30; var_r30->unk_04 = 0; return var_r31; } void fn_1_3F80(ModelData *model, ParticleData *particle, Mtx matrix) { float var_f29; float var_f28; float var_f26; float var_f25; float var_f24; HsfanimStruct01 *var_r31; M425DllUnkStruct *var_r29; s32 var_r28; float sp54[4] = { 1000.0f, 200.0f, 600.0f, 1200.0f }; float sp44[4] = { 1.0f, 0.6f, 0.3f, 0.425f }; Vec sp38; Vec sp2C; Vec sp20; Vec sp14; s16 sp8 = 0; var_r29 = particle->unk_1C; switch (var_r29->unk_04) { case 0: var_r31 = particle->unk_48; if (var_r29->unk_02 != 0) { sp14.x = 0.0f; sp14.y = -3600.0f; sp14.z = 6250.0f; var_f28 = (sp14.z * sp14.z) + ((sp14.x * sp14.x) + (sp14.y * sp14.y)); var_f29 = 1.0f / sqrtf(var_f28); sp14.x *= var_f29; sp14.y *= var_f29; sp14.z *= var_f29; var_f24 = 6000.0f / particle->unk_30; for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { var_f26 = 500.0 + ((var_f24 * var_r28) + ((0.25f * var_f24) * (1.52587890625e-05 * (float)(s32)(u16)frand()))); var_f25 = var_f26 / 6000.0f; var_r31->unk14.x = var_f26; var_r31->unk34.x = var_f26 * sp14.x; var_r31->unk34.y = 4000.0f + (var_f26 * sp14.y); var_r31->unk34.z = -6750.0f + (var_f26 * sp14.z); var_r31->unk2C = (0.3f + (0.7f * (var_f25 * var_f25))) * (sp54[var_r29->unk_02] * (0.699999988079071 + (0.30000001192092896 * (1.52587890625e-05 * (float)(s32)(u16)frand())))); var_r31->unk40.r = (s32)(160.0 * (1.52587890625e-05 * (float)fn_1_64D4())) + 0x20; var_r31->unk40.g = (s32)(96.0 * (1.52587890625e-05 * (float)fn_1_64D4())) + 0x20; var_r31->unk40.b = (s32)(128.0 * (1.52587890625e-05 * (float)fn_1_64D4())) + 0x20; var_r31->unk40.a = ((1.0 - (0.4 * var_f25)) * (255.0f * sp44[var_r29->unk_02])) - (s32)(16.0 * (1.52587890625e-05 * (float)fn_1_64D4())); } var_r29->unk_04++; } else { var_r31->unk34.x = 0.0f; var_r31->unk34.y = 4000.0f; var_r31->unk34.z = -6750.0f; var_r31->unk2C = 1000.0f; } break; case 1: sp38.x = sind(CRot.y) * cosd(CRot.x); sp38.y = -sind(CRot.x); sp38.z = cosd(CRot.y) * cosd(CRot.x); sp2C.x = -(Center.x + (1.25f * (sp38.x * CZoom))); sp2C.y = 4000.0f - (Center.y + (sp38.y * CZoom)); sp2C.z = -6750.0f - (Center.z + (1.25f * (sp38.z * CZoom))); var_f29 = 1.0f / sqrtf((sp2C.z * sp2C.z) + ((sp2C.x * sp2C.x) + (sp2C.y * sp2C.y))); sp2C.x *= var_f29; sp2C.y *= var_f29; sp2C.z *= var_f29; var_f29 = -((-sp2C.z * -sp38.z) + ((-sp2C.x * -sp38.x) + (-sp2C.y * -sp38.y))); sp20.x = -sp38.x + (-2.0f * sp2C.x * var_f29); sp20.y = -sp38.y + (-2.0f * sp2C.y * var_f29); sp20.z = -sp38.z + (-2.0f * sp2C.z * var_f29); for (var_r31 = particle->unk_48, var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { var_r31->unk34.x = sp20.x * var_r31->unk14.x; var_r31->unk34.y = 4000.0f + (sp20.y * var_r31->unk14.x); var_r31->unk34.z = -6750.0f + (sp20.z * var_r31->unk14.x); } break; } DCFlushRange(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01)); } void fn_1_4A88(ModelData *model, ParticleData *particle, Mtx matrix) { float var_f31; HsfanimStruct01 *var_r31; M425DllUnkStruct *var_r29; s32 var_r28; s16 var_r27; var_r27 = 0; var_r29 = particle->unk_1C; switch (var_r29->unk_04) { case 0: for (var_r31 = particle->unk_48, var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { var_r31->unk00_s16 = var_r31->unk02 = 0; } var_r29->unk_04++; break; case 1: for (var_r31 = particle->unk_48, var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { if (var_r31->unk00_s16 != 0) { var_r31->unk00_s16--; } else { if (var_r31->unk02 == 0) { var_f31 = 180.0 * (1.52587890625e-05 * (float)(s32)(u16)frand()); var_f31 = var_f31; if ((s32)(4.0 * (1.52587890625e-05 * (float)fn_1_64D4())) != 0) { var_r31->unk34.x = 100.0 * (4.0 * (1.52587890625e-05 * (float)(s32)(u16)frand())) * cosd(var_f31); } else { var_r31->unk34.x = 100.0 * (2.0 * (1.52587890625e-05 * (float)(s32)(u16)frand())) * cosd(var_f31); } var_r31->unk34.y = -10.0f; var_r31->unk34.z = -7000.0 + (100.0 * (40.0 * (1.52587890625e-05 * (float)(s32)(u16)frand())) * sind(var_f31)); var_r31->unk30 = 1.5707964f; var_r31->unk40.r = var_r31->unk40.g = var_r31->unk40.b = var_r31->unk40.a = 0xC0; var_r31->unk40.b = 0xA0; var_r31->unk2C = 0.0f; var_r31->unk00_s16 = (s32)(90.0 * (1.52587890625e-05 * (float)fn_1_64D4())); var_r31->unk02 = 0x3C; var_r31->unk40.r = 0xC0; var_r31->unk40.g = 0xE0; var_r31->unk40.b = 0xE0; var_r31->unk08.z = 0.01f * (0.05f * (3000.0f + -var_r31->unk34.z)); var_r31->unk08.z *= var_r31->unk08.z; var_r31->unk08.z *= 0.125f; } var_r31->unk40.a = 248.0 * sind((var_r31->unk02 * 3)); var_r31->unk2C = (30.0f * var_r31->unk08.z) * sind((var_r31->unk02 * 3)); var_r31->unk02--; } } if (particle->unk_30 == var_r27) { Hu3DModelAttrReset(var_r29->unk_00, HU3D_ATTR_PARTICLE_KILL); Hu3DModelKill(var_r29->unk_00); return; } } DCFlushRange(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01)); } void fn_1_5044(s16 sp8) { M425DllUnkStruct3 *var_r31; s32 var_r30; s32 var_r29; s32 var_r28; ModelData *var_r27; void *var_r26; Vec2f spC[4] = { { 0.0f, 0.0f }, { 1.0f, 0.0f }, { 1.0f, 1.0f }, { 0.0f, 1.0f } }; var_r27 = &Hu3DData[sp8]; var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M425DllUnkStruct3), MEMORY_DEFAULT_NUM); var_r27->unk_120 = var_r31; var_r31->unk_2A = 1; var_r31->unk_20.r = var_r31->unk_20.g = var_r31->unk_20.b = 0x40; var_r31->unk_20.a = 0xFF; var_r31->unk_24.a = var_r31->unk_24.g = var_r31->unk_24.b = 0xFF; var_r31->unk_24.r = var_r31->unk_24.b = 0; // maybe Mtx? var_r31->unk_14 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_2A * (4 * sizeof(Vec)), MEMORY_DEFAULT_NUM); var_r31->unk_14[0].x = -4500.0f; var_r31->unk_14[0].y = 0.0f; var_r31->unk_14[0].z = -7000.0f; var_r31->unk_14[1].x = 4500.0f; var_r31->unk_14[1].y = 0.0f; var_r31->unk_14[1].z = -7000.0f; var_r31->unk_14[2].x = 3000.0f; var_r31->unk_14[2].y = -200.0f; var_r31->unk_14[2].z = 0.0f; var_r31->unk_14[3].x = -3000.0f; var_r31->unk_14[3].y = -200.0f; var_r31->unk_14[3].z = 0.0f; var_r31->unk_18 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_2A * (4 * sizeof(GXColor)), MEMORY_DEFAULT_NUM); var_r31->unk_18[0].r = 0xFF; var_r31->unk_18[0].g = 0xFF; var_r31->unk_18[0].b = 0xFF; var_r31->unk_18[0].a = 0xFF; var_r31->unk_18[1].r = 0xFF; var_r31->unk_18[1].g = 0xFF; var_r31->unk_18[1].b = 0xFF; var_r31->unk_18[1].a = 0xFF; var_r31->unk_18[2].r = 0xFF; var_r31->unk_18[2].g = 0xFF; var_r31->unk_18[2].b = 0xFF; var_r31->unk_18[2].a = 0xFF; var_r31->unk_18[3].r = 0xFF; var_r31->unk_18[3].g = 0xFF; var_r31->unk_18[3].b = 0xFF; var_r31->unk_18[3].a = 0xFF; var_r31->unk_1C = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_2A * sizeof(Vec), MEMORY_DEFAULT_NUM); var_r31->unk_1C->x = 0.0f; var_r31->unk_1C->y = 1.0f; var_r31->unk_1C->z = 0.0f; var_r31->unk_28 = 2; var_r31->unk_2C = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_2A * (var_r31->unk_28 * sizeof(M425DllUnkStruct2)), MEMORY_DEFAULT_NUM); var_r31->unk_2C[0].unk_00 = HuSprAnimReadFile(0x380003); var_r31->unk_2C[0].unk_04 = 0; var_r31->unk_2C[1].unk_00 = HuSprAnimReadFile(0x380004); var_r31->unk_2C[1].unk_04 = 0; var_r31->unk_2C[1].unk_48 = 0x80; for (var_r30 = 0; var_r30 < (var_r31->unk_28 * var_r31->unk_2A); var_r30++) { MTXIdentity(var_r31->unk_2C[var_r30].unk_14); var_r31->unk_2C[var_r30].unk_08.x = var_r31->unk_2C[var_r30].unk_08.y = var_r31->unk_2C[var_r30].unk_08.z = 0.0f; } for (var_r30 = 0; var_r30 < var_r31->unk_28; var_r30++) { fn_1_573C(&var_r31->unk_2C[var_r30].unk_44, var_r31->unk_2A, spC); } var_r26 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x20000, MEMORY_DEFAULT_NUM); var_r31->unk_10 = var_r26; DCFlushRange(var_r31->unk_10, 0x20000); GXBeginDisplayList(var_r26, 0x20000); GXBegin(GX_QUADS, GX_VTXFMT0, var_r31->unk_2A * 4); for (var_r30 = 0; var_r30 < var_r31->unk_2A; var_r30++) { for (var_r29 = 0; var_r29 < 4; var_r29++) { GXUnknownu16(var_r29 + (var_r30 * 4)); GXUnknownu16(var_r30); GXUnknownu16(var_r29 + (var_r30 * 4)); for (var_r28 = 0; var_r28 < var_r31->unk_28; var_r28++) { GXUnknownu16(var_r29 + (var_r30 * 4)); } } } var_r31->unk_0C = GXEndDisplayList(); } void fn_1_5568(Vec **arg0, s16 arg1, Vec *arg2) { Vec *var_r31; s32 var_r29; s32 var_r28; var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * (4 * sizeof(Vec)), MEMORY_DEFAULT_NUM); for (var_r29 = 0; var_r29 < arg1; var_r29++) { for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) { var_r31->x = arg2->x; var_r31->y = arg2->y; var_r31->z = arg2->z; } } } void fn_1_5608(GXColor **arg0, s16 arg1, GXColor *arg2) { GXColor *var_r31; s32 var_r29; s32 var_r28; var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * (4 * sizeof(GXColor)), 0x10000000); for (var_r29 = 0; var_r29 < arg1; var_r29++) { for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) { var_r31->r = arg2->r; var_r31->g = arg2->g; var_r31->b = arg2->b; var_r31->a = arg2->a; } } } void fn_1_56B0(Vec **arg0, s16 arg1, Vec *arg2) { Vec *var_r31; s32 var_r29; var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(Vec), MEMORY_DEFAULT_NUM); for (var_r29 = 0; var_r29 < arg1; var_r31++, arg2++, var_r29++) { var_r31->x = arg2->x; var_r31->y = arg2->y; var_r31->z = arg2->z; } } void fn_1_573C(Vec2f **arg0, s16 arg1, Vec2f *arg2) { Vec2f *var_r31; s32 var_r29; s32 var_r28; var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * (4 * sizeof(Vec2f)), MEMORY_DEFAULT_NUM); for (var_r29 = 0; var_r29 < arg1; var_r29++) { for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) { var_r31->x = arg2->x; var_r31->y = arg2->y; } } } void fn_1_57D4(ModelData *model, Mtx matrix) { float var_f31; float var_f30; s32 var_r31; M425DllUnkStruct3 *var_r30; var_r30 = model->unk_120; var_r30->unk_2C[1].unk_08.y -= 0.0005f; var_f31 = sind(lbl_1_bss_4); var_f30 = cosd(lbl_1_bss_4); for (var_r31 = 0; var_r31 < 1; var_r31++) { var_r30->unk_2C[var_r31].unk_44[0].x = 0.005f * var_f31 * (var_r31 != 0 ? 10.0f : -1.0f); var_r30->unk_2C[var_r31].unk_44[0].y = 0.005f * var_f30 * (var_r31 != 0 ? 1.0f : -1.0f); var_r30->unk_2C[var_r31].unk_44[1].x = 1.0f + (0.005f * var_f30 * (var_r31 != 0 ? 10.0f : -1.0f)); var_r30->unk_2C[var_r31].unk_44[1].y = 0.005f * var_f31 * (var_r31 != 0 ? 1.0f : -1.0f); var_r30->unk_2C[var_r31].unk_44[2].x = 1.0f + (0.005f * var_f31 * (var_r31 != 0 ? 10.0f : -1.0f)); var_r30->unk_2C[var_r31].unk_44[2].y = 1.0f + (0.005f * var_f30 * (var_r31 != 0 ? 1.0f : -1.0f)); var_r30->unk_2C[var_r31].unk_44[3].x = 0.005f * var_f30 * (var_r31 != 0 ? 10.0f : -1.0f); var_r30->unk_2C[var_r31].unk_44[3].y = 1.0f + (0.005f * var_f31 * (var_r31 != 0 ? 1.0f : -1.0f)); } lbl_1_bss_4 += 1.0f; fn_1_5C20(model, matrix); } void fn_1_5C20(ModelData *var_r27, Mtx sp8) { Mtx sp5C; Mtx sp2C; GXColor sp26; s16 spC; GXTexMapID var_r29; M425DllUnkStruct3 *var_r31; s16 var_r30; s16 var_r28; s16 var_r26; s32 var_r25; s32 var_r24; s32 var_r23; var_r31 = var_r27->unk_120; GXSetChanAmbColor(GX_COLOR0A0, var_r31->unk_20); GXSetChanMatColor(GX_COLOR0A0, var_r31->unk_24); GXLoadPosMtxImm(sp8, 0); MTXInverse(sp8, sp5C); MTXTranspose(sp5C, sp2C); GXLoadNrmMtxImm(sp2C, 0); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); GXSetZMode(1, GX_LEQUAL, 1); var_r30 = 0; var_r28 = 0; spC = 0; for (var_r29 = GX_TEXMAP0; var_r29 < var_r31->unk_28; var_r29++) { MTXRotRad(var_r31->unk_2C[var_r29].unk_14, 0x5A, 0.0f); mtxTransCat( var_r31->unk_2C[var_r29].unk_14, var_r31->unk_2C[var_r29].unk_08.x, var_r31->unk_2C[var_r29].unk_08.y, var_r31->unk_2C[var_r29].unk_08.z); switch (var_r31->unk_2C[var_r29].unk_04) { case 0: GXLoadTexMtxImm(var_r31->unk_2C[var_r29].unk_14, texMtxTbl[var_r28], GX_MTX2x4); var_r25 = texMtxTbl[var_r28]; GXSetTexCoordGen2(var_r28, GX_TG_MTX2x4, var_r29 + 4, var_r25, GX_FALSE, 0x7D); GXSetTevOrder(var_r30, var_r28, var_r29, GX_COLOR0A0); if (var_r29 == GX_TEXMAP0) { GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); } else { sp26.a = var_r31->unk_2C[var_r29].unk_48; GXSetTevColor(GX_TEVREG2, sp26); GXSetTevColorIn(var_r30, GX_CC_CPREV, GX_CC_TEXC, GX_CC_ZERO, GX_CC_TEXC); GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO); } GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); break; case 1: GXLoadTexMtxImm(var_r31->unk_2C[var_r29].unk_14, texMtxTbl[var_r28], GX_MTX2x4); var_r24 = texMtxTbl[var_r28]; GXSetTexCoordGen2(var_r28, GX_TG_MTX2x4, var_r29 + 4, var_r24, GX_FALSE, 0x7D); GXSetTevOrder(var_r30, var_r28, var_r29, GX_COLOR0A0); GXSetTevColor(GX_TEVREG2, sp26); GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_CPREV, GX_CC_TEXA, GX_CC_ZERO); GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO); GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); break; case 2: sp26.a = 0xE0; GXSetTevColor(GX_TEVREG1, sp26); GXSetTexCoordGen2(var_r28 + 1, GX_TG_BUMP0, var_r28, 0x3C, GX_FALSE, 0x7D); GXSetTevOrder(var_r30, var_r28, var_r29, GX_COLOR0A0); GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A1, GX_CC_RASC); GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); var_r30++; GXSetTevOrder(var_r30, var_r28 + 1, GX_TEXMAP0, GX_COLOR0A0); GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A1, GX_CC_CPREV); GXSetTevColorOp(var_r30, GX_TEV_SUB, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); break; case 3: var_r28--; GXLoadTexMtxImm(var_r31->unk_2C[var_r29].unk_14, texMtxTbl[var_r28], GX_MTX2x4); var_r23 = texMtxTbl[var_r28]; GXSetTexCoordGen2(var_r28, GX_TG_MTX2x4, var_r29 + 4, var_r23, 0, 0x7D); GXSetTevOrder(var_r30, var_r28, var_r29, GX_COLOR0A0); GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_CPREV, GX_CC_TEXC, GX_CC_ZERO); GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA); GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); var_r28++; break; } var_r30++; var_r28++; HuSprTexLoad(var_r31->unk_2C[var_r29].unk_00, 0, var_r29, GX_REPEAT, GX_REPEAT, GX_LINEAR); } sp26.a = var_r31->unk_24.a; GXSetTevColor(GX_TEVREG0, sp26); GXSetTevOrder(var_r30, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_CPREV, GX_CC_RASC, GX_CC_ZERO); GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_APREV, GX_CA_A0, GX_CA_KONST); GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); var_r30++; GXSetNumTevStages((s32)var_r30); GXSetNumTexGens((s32)var_r28); var_r26 = Hu3DLightSet(var_r27, &Hu3DCameraMtx, &Hu3DCameraMtxXPose, 0.0f); GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0A0, GX_TRUE, GX_SRC_REG, GX_SRC_VTX, var_r26, GX_DF_CLAMP, GX_AF_SPOT); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0); GXSetArray(GX_VA_POS, var_r31->unk_14, 0xC); GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0); GXSetArray(GX_VA_CLR0, var_r31->unk_18, 4); for (var_r29 = GX_TEXMAP0; var_r29 < (var_r31->unk_28 * var_r31->unk_2A); var_r29++) { GXSetVtxDesc(var_r29 + 0xD, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, var_r29 + 0xD, GX_TEX_ST, GX_RGBA6, 0); GXSetArray(var_r29 + 0xD, var_r31->unk_2C[var_r29].unk_44, 8); } GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_TEX_S, GX_RGBA6, 0); GXSetArray(GX_VA_NRM, var_r31->unk_1C, 0xC); GXCallDisplayList(var_r31->unk_10, var_r31->unk_0C); } u32 lbl_1_data_114 = 0x41C64E6D; s32 fn_1_64D4(void) { lbl_1_data_114 *= 0x41C64E6D; lbl_1_data_114 += 0x3039; return lbl_1_data_114 >> 0x10; } float fn_1_6528(float arg8, float arg9, float argA, float argB) { float var_f31 = 1.0 - arg8; float var_f30 = (argB * (arg8 * arg8)) + ((arg9 * (var_f31 * var_f31)) + (2.0 * (argA * (var_f31 * arg8)))); return var_f30; } void fn_1_65A0(float *arg0, float *arg1, float *arg2, float *arg3, float arg8) { s32 var_r31; for (var_r31 = 0; var_r31 < 3; var_r31++) { *arg3++ = fn_1_6528(arg8, *arg0++, *arg1++, *arg2++); } } float fn_1_66BC(float arg8, float arg9, float argA, float argB) { float var_f31 = 2.0 * ((arg8 * argB) + (((arg8 - 1.0) * arg9) + ((1.0 - (2.0 * arg8)) * argA))); return var_f31; } void fn_1_6734(float *arg0, float *arg1, float *arg2, float *arg3, float arg8) { float spC[3]; float sp8; float var_f31; float var_f30; float var_f29; float var_f28; float var_f27; float var_f26; float var_f25; float var_f24; float var_f23; float var_f22; float var_f21; s32 var_r31; for (var_r31 = 0; var_r31 < 3; var_r31++) { spC[var_r31] = fn_1_66BC(arg8, *arg0++, *arg1++, *arg2++); } var_f29 = sqrtf((spC[2] * spC[2]) + ((spC[0] * spC[0]) + (spC[1] * spC[1]))); if (var_f29) { var_f29 = 1.0 / var_f29; var_f29 = var_f29; for (var_r31 = 0; var_r31 < 3; var_r31++) { *arg3++ = var_f29 * spC[var_r31]; } return; } *arg3++ = 0.0f; *arg3++ = 0.0f; *arg3++ = 1.0f; }