#include "ext_math.h" #include "game/chrman.h" #include "game/gamework_data.h" #include "game/hsfdraw.h" #include "game/hsfman.h" #include "game/hsfmotion.h" #include "game/memory.h" #include "game/object.h" #include "game/pad.h" #include "game/sprite.h" #include "REL/m410Dll.h" omObjData *lbl_1_bss_74; AnimData *lbl_1_bss_70; s32 lbl_1_bss_60[4]; char *lbl_1_data_140[] = { "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r", "dmy-itemhook-r" }; char *lbl_1_data_16C[] = { "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r", "itemhook-r" }; s32 lbl_1_data_18C[] = { DATA_MAKE_NUM(DATADIR_M410, 0), DATA_MAKE_NUM(DATADIR_M410, 1), DATA_MAKE_NUM(DATADIR_M410, 2), DATA_MAKE_NUM(DATADIR_M410, 3), DATA_MAKE_NUM(DATADIR_M410, 4), DATA_MAKE_NUM(DATADIR_M410, 5), DATA_MAKE_NUM(DATADIR_M410, 6), DATA_MAKE_NUM(DATADIR_M410, 7) }; u32 lbl_1_data_1AC[] = { 0, DATA_MAKE_NUM(DATADIR_M410, 70), DATA_MAKE_NUM(DATADIR_M410, 22), DATA_MAKE_NUM(DATADIR_M410, 30), DATA_MAKE_NUM(DATADIR_M410, 38), DATA_MAKE_NUM(DATADIR_M410, 46), DATA_MAKE_NUM(DATADIR_M410, 62), DATA_MAKE_NUM(DATADIR_M410, 54), DATA_MAKE_NUM(DATADIR_E3SETUP, 23), DATA_MAKE_NUM(DATADIR_E3SETUP, 24) }; UnkM410Struct10 lbl_1_data_1D4[] = { { 0.0f, 0.0f, 12.0f, 0x40000001 }, { 0.0f, 0.0f, 1.1999999, 0 }, { 0.0f, 0.0f, 12.0f, 0x40000001 }, { 0.0f, 0.0f, 6.0f, 0 }, { 6.0f, 0.0f, 4.7999997f, 0 }, { 0.0f, 0.0f, 1.1999999f, 0 }, { 0.0f, 0.0f, 1.1999999f, 0 }, { 0.0f, 0.0f, 1.1999999f, 0 }, { 0.0f, 0.0f, 12.0f, 0 }, { 0.0f, 0.0f, 12.0f, 0 } }; s32 lbl_1_data_274[] = { 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) }; GXColor lbl_1_data_294[] = { { 102, 0, 0, 255 }, { 0, 0, 102, 255 }, { 102, 0, 91, 255 }, { 0, 102, 0, 255 }, { 66, 0, 76, 255 }, { 71, 40, 0, 255 }, { 102, 102, 0, 255 }, { 0, 0, 0, 255 }, }; void fn_1_80A0(omObjData *object); void fn_1_8414(omObjData *object); void fn_1_8678(omObjData *object); void fn_1_88D8(omObjData *object); void fn_1_8A10(omObjData *object); void fn_1_8ABC(omObjData *object); void fn_1_9E0C(omObjData *arg0, u32 arg1); void fn_1_96F4(omObjData *object); s32 fn_1_9A90(omObjData *object); s32 fn_1_9C84(omObjData *object); s32 fn_1_9EFC(omObjData *object); s32 fn_1_9F70(omObjData *object, u32 arg1); void fn_1_A0A4(omObjData *object); void fn_1_A3C0(omObjData *object); void fn_1_A828(u16 arg0, u16 arg1, u16 arg2); void fn_1_A9A4(UnkM410Struct13 *arg0); void fn_1_B140(ModelData *arg0, Mtx arg1); void fn_1_7E30(Process *objman) { u32 sp18[4]; u32 sp8[4]; s16 var_r31; s16 var_r30; u32 var_r29; omObjData *var_r27; for (var_r31 = 0; var_r31 < 4; var_r31++) { sp18[var_r31] = frandmod(1000); sp8[var_r31] = var_r31; } for (var_r31 = 0; var_r31 < 3; var_r31++) { for (var_r30 = var_r31 + 1; var_r30 < 4; var_r30++) { if (sp18[var_r31] > sp18[var_r30]) { var_r29 = sp18[var_r31]; sp18[var_r31] = sp18[var_r30]; sp18[var_r30] = var_r29; var_r29 = sp8[var_r31]; sp8[var_r31] = sp8[var_r30]; sp8[var_r30] = var_r29; } } } for (var_r31 = 0; var_r31 < 4; var_r31++) { lbl_1_bss_60[sp8[var_r31]] = var_r31; } omMakeGroupEx(objman, 0, 4); omGetGroupMemberListEx(objman, 0); for (var_r31 = 0; var_r31 < 4; var_r31++) { var_r27 = omAddObjEx(objman, 40, 2, 10, 0, fn_1_80A0); var_r27->work[0] = var_r31; } lbl_1_bss_74 = omAddObjEx(objman, 10, 1, 0, -1, fn_1_A0A4); lbl_1_bss_70 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M410, 19), MEMORY_DEFAULT_NUM)); } void fn_1_806C(void) { s32 var_lr; HuSprAnimKill(lbl_1_bss_70); CharModelKill(-1); } void fn_1_80A0(omObjData *object) { s32 sp8; UnkM410Struct5 *var_r31; s16 var_r29; s32 var_r28; s32 var_r27; UnkM410Struct6 spC = { { 0.0f, 0.13f, 0.26f, 0.4f } }; object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 148, MEMORY_DEFAULT_NUM); var_r31 = object->data; memset(var_r31, 0, 148); var_r27 = object->work[0]; var_r28 = GWPlayerCfg[var_r27].character; var_r31->unk_00 = var_r28; var_r31->unk_04 = lbl_1_bss_60[object->work[0]]; sp8 = var_r31->unk_08 = 0; var_r31->unk_4C = spC.unk_00[GWPlayerCfg[var_r27].diff & 3]; object->model[0] = CharModelCreate(var_r28, 2); Hu3DModelLayerSet(object->model[0], 4); Hu3DModelShadowSet(object->model[0]); object->model[1] = Hu3DModelCreateFile(lbl_1_data_18C[var_r28]); Hu3DModelShadowSet(object->model[1]); Hu3DModelLayerSet(object->model[1], 4); for (var_r29 = 0; var_r29 < 10; var_r29++) { if (lbl_1_data_1AC[var_r29] < 0x10000) { object->motion[var_r29] = CharModelMotionCreate(var_r28, lbl_1_data_1AC[var_r29]); } else { object->motion[var_r29] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(var_r28 + lbl_1_data_1AC[var_r29], MEMORY_DEFAULT_NUM, HEAP_DATA)); } } CharModelMotionDataClose(var_r28); object->trans.x = var_r31->unk_58.x = 2.0f * var_r31->unk_04 * 100.0f - 300.0f; object->trans.y = var_r31->unk_58.y = 0.0f; object->trans.z = var_r31->unk_58.z = 0.0f; var_r31->unk_64 = var_r31->unk_68 = var_r31->unk_6C = 0.0f; var_r31->unk_3C = var_r31->unk_40 = 0.0f; var_r31->unk_44 = 0.0f; var_r31->unk_48 = 0.02f; var_r31->unk_70.x = var_r31->unk_58.x; var_r31->unk_70.y = 100.0f + var_r31->unk_58.y; var_r31->unk_70.z = 400.0f + var_r31->unk_58.z; var_r31->unk_14 = 1; var_r31->unk_0C = -1; fn_1_9E0C(object, 0); Hu3DModelPosSet(object->model[1], var_r31->unk_70.x, var_r31->unk_70.y, var_r31->unk_70.z); var_r31->unk_34 = 0; object->func = fn_1_8414; } void fn_1_8414(omObjData *object) { UnkM410Struct5 *var_r31; var_r31 = object->data; { UnkM410Struct7 sp8 = { { 42, 78, 108, 125 } }; switch (var_r31->unk_34) { case 0: fn_1_9F70(object, 0); if (fn_1_2804()) { var_r31->unk_38 = 0; var_r31->unk_34++; } break; case 1: if (var_r31->unk_38 >= sp8.unk_00[var_r31->unk_04]) { var_r31->unk_28 = 1; var_r31->unk_34++; } break; case 2: fn_1_96F4(object); if (var_r31->unk_38 >= (2.8f + 0.00040000002f * frandmod(1000)) * 60.0f) { var_r31->unk_2C = 1; var_r31->unk_38 = 0; var_r31->unk_34++; } break; case 3: if (var_r31->unk_24) { if (var_r31->unk_38 >= 27.0f) { var_r31->unk_30 = 1; } } if (fn_1_9A90(object)) { var_r31->unk_34++; } break; case 4: fn_1_9F70(object, 0); break; } } fn_1_8A10(object); var_r31->unk_38++; if (fn_1_2804() == 2) { var_r31->unk_28 = 1; var_r31->unk_34 = 0; object->func = fn_1_8678; } } void fn_1_8678(omObjData *object) { float var_f31; float var_f30; float var_f29; UnkM410Struct5 *var_r31; s32 var_r29; var_r31 = object->data; var_r29 = 0; var_r31->unk_10 = 0; if (fn_1_281C() == 2) { var_r31->unk_10 = HuPadBtnDown[GWPlayerCfg[object->work[0]].pad_idx]; if (GWPlayerCfg[object->work[0]].iscom) { fn_1_8ABC(object); } } switch (var_r31->unk_34) { case 0: if (fn_1_9F70(object, 0)) { var_r31->unk_28 = 1; } fn_1_96F4(object); if (var_r31->unk_18) { var_r31->unk_34++; } break; case 1: if (!var_r31->unk_1C && !var_r31->unk_20) { if (var_r31->unk_10 & 0x100) { if (fn_1_281C() == 2) { var_r31->unk_2C = 1; } } else if (var_r31->unk_10 & 0x200 && fn_1_281C() == 2) { if (fabs(fn_1_30F0(var_r31->unk_3C, var_r31->unk_40)) < 45.0) { var_r31->unk_30 = 1; } } var_r29 = 1; } else if (var_r31->unk_24 && var_r31->unk_10 & 0x200) { var_r31->unk_30 = 1; } if (fn_1_9A90(object) || fn_1_9C84(object)) { var_r31->unk_36 = 0; var_r31->unk_34--; } break; } fn_1_8A10(object); if (fn_1_281C() == 3 && var_r29) { fn_1_287C(object->work[0]); var_r31->unk_34 = 0; object->func = fn_1_88D8; } } void fn_1_88D8(omObjData *object) { UnkM410Struct5 *var_r31; var_r31 = object->data; fn_1_8A10(object); switch (var_r31->unk_34) { case 0: var_r31->unk_34++; return; case 1: if (fn_1_2834() == 1) { Hu3DModelHookReset(object->model[0]); Hu3DModelAttrSet(object->model[1], 1); if ((1 << object->work[0]) & fn_1_2864()) { fn_1_9E0C(object, 8); } else { fn_1_9E0C(object, 9); } var_r31->unk_40 = 0.0f; var_r31->unk_44 = 0.0f; var_r31->unk_48 = 0.005f; var_r31->unk_34++; } break; case 2: if (fn_1_9EFC(object)) { fn_1_28AC(object->work[0]); var_r31->unk_34++; } break; default: break; } } void fn_1_8A10(omObjData *object) { UnkM410Struct5 *var_r31; var_r31 = object->data; var_r31->unk_36++; object->trans.x = var_r31->unk_58.x; object->trans.y = var_r31->unk_58.y; object->trans.z = var_r31->unk_58.z; var_r31->unk_44 += var_r31->unk_48; if (var_r31->unk_44 > 0.45f) { var_r31->unk_44 = 0.45f; } var_r31->unk_3C = fn_1_2FD4(var_r31->unk_3C, var_r31->unk_40, var_r31->unk_44); object->rot.y = var_r31->unk_3C; } void fn_1_8ABC(omObjData *object) { Vec sp34; Vec sp28; float var_f31; float var_f30; float var_f29; float var_f28; float var_f27; UnkM410Struct5 *var_r31; s32 var_r30; s32 var_r29; var_r31 = object->data; var_r31->unk_10 = 0; switch (var_r31->unk_50) { case 0: if (!var_r31->unk_18) { return; } if (frandmod(1000) <= 1000.0f * var_r31->unk_4C) { var_f28 = 42.0f; if (frandmod(1000) <= 1000.0f * var_r31->unk_4C) { var_f29 = 280.0f; var_r31->unk_54 = 31.8f + frandmod(6); } else { var_f29 = 419.99997f; var_r31->unk_54 = 9.0f + frandmod(15); } var_f27 = var_f28 + var_r31->unk_54; var_r29 = -1; var_f31 = 10000.0f; for (var_r30 = 0; var_r30 < 18; var_r30++) { fn_1_7888(var_r30, (s32)var_f27, &sp28); if (fabs(sp28.y - var_f29) > 10.0) { continue; } fn_1_7840(var_r30, &sp34); if (fabs(sp34.x) < 1.9166667461395264) { continue; } var_f30 = sp28.x - var_r31->unk_88.x; if (sp34.x >= 0.0f) { if (var_f30 < 0.0f) { if (fabs(var_f30) < var_f31) { var_r29 = var_r30; var_f31 = fabs(var_f30); } } } else if (var_f30 > 0.0f) { if (fabs(var_f30) < var_f31) { var_r29 = var_r30; var_f31 = fabs(var_f30); } } } if (var_r29 < 0) { return; } fn_1_7840(var_r29, &sp34); var_f31 /= fabs(sp34.x); var_r31->unk_52 = var_f27 + var_f31 - var_f28 - var_r31->unk_54; } else { var_r31->unk_52 = 24.0f + frandmod(36); var_r31->unk_54 = 12.0f + frandmod(18); } var_r31->unk_50++; return; case 1: if (!var_r31->unk_52) { var_r31->unk_10 |= 256; var_r31->unk_50++; } var_r31->unk_52--; return; case 2: if (!var_r31->unk_54) { var_r31->unk_10 |= 512; var_r31->unk_50 = 0; } var_r31->unk_54--; break; } } void fn_1_9040(omObjData *object) { Mtx sp38; Vec sp2C; Vec sp20; Vec sp14; Vec 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; double var_f21; double var_f20; UnkM410Struct5 *var_r31; s32 var_r29; s32 var_r28; s16 var_r27; Vec *var_r26; Vec *var_r25; var_r31 = object->data; fn_1_79F8(object->model[0], lbl_1_data_16C[var_r31->unk_08], sp38); var_r31->unk_70.x = sp38[0][3]; var_r31->unk_70.y = sp38[1][3]; var_r31->unk_70.z = sp38[2][3]; if (fn_1_2804() == 1) { var_r31->unk_88 = var_r31->unk_70; var_r28 = -1; var_f30 = 10000.0f; for (var_r29 = 0; var_r29 < 18; var_r29++) { fn_1_77F8(var_r29, &sp20); if (sp20.y < 350.0f) { continue; } PSVECSubtract(&sp20, &var_r31->unk_58, &sp2C); var_f28 = PSVECMag(&sp2C); if (var_f28 < var_f30) { var_r28 = var_r29; var_f30 = var_f28; } } fn_1_77F8(var_r28, &sp20); var_f29 = 5.0f + sp20.y; var_f31 = 0.65f + 0.000100000005f * frandmod(1000); var_f26 = -3430.0002f; var_f27 = (var_f29 - var_r31->unk_70.y - (var_f31 * var_f31 * var_f26 * 0.5f)) / var_f31; sp2C.x = (0.016666668f * (sp20.x - var_r31->unk_70.x)) / var_f31; sp2C.y = 0.016666668f * var_f27; sp2C.z = (0.016666668f * (sp20.z - var_r31->unk_70.z)) / var_f31; } else { if (var_r31->unk_20 != 0) { var_f30 = -450.0f + (0.05f * frandmod(1000)); var_f29 = -100.0f; var_f31 = 0.75f + (0.000100000005f * frandmod(1000)); sp20.x = var_r31->unk_70.x + (0.05f * (frandmod(2000) - 1000)); sp20.y = var_f29; sp20.z = var_f30; } else { var_f30 = -700.0f; var_f29 = 420.0f; if (var_r31->unk_68 < -600.0f) { var_f29 = 280.0f; } var_f31 = 0.65f + (0.000100000005f * frandmod(1000)); var_r27 = 60.0f * var_f31; var_r28 = -1; var_f30 = 10000.0f; for (var_r29 = 0; var_r29 < 18; var_r29++) { fn_1_7888(var_r29, var_r27, &sp20); if (fabs(sp20.y - var_f29) > 20.0) { continue; } var_f28 = fabs(sp20.x - var_r31->unk_88.x); if (var_f28 < var_f30) { var_r28 = var_r29; var_f30 = var_f28; } } var_f25 = 75.0f; if (GWPlayerCfg[object->work[0]].iscom) { var_f25 *= 0.25f; } if (var_r28 >= 0 && var_f30 <= var_f25) { fn_1_7888(var_r28, var_r27, &sp20); } else { sp20.x = var_r31->unk_88.x; sp20.y = var_f29; sp20.z = -700.0f; } } var_f26 = -3430.0002f; var_f27 = ((sp20.y - var_r31->unk_70.y) - var_f31 * var_f31 * var_f26 * 0.5f) / var_f31; sp2C.x = (sp20.x - var_r31->unk_70.x) * 0.016666668f / var_f31; sp2C.y = 0.016666668f * var_f27; sp2C.z = (sp20.z - var_r31->unk_70.z) * 0.016666668f / var_f31; } sp8 = sp2C; var_r26 = &sp8; sp14 = var_r31->unk_70; var_r25 = &sp14; fn_1_76B8(var_r25, var_r26, object->work[0]); var_r31->unk_18 = 0; var_r31->unk_24 = 0; if (var_r31->unk_1C) { fn_1_9E0C(object, 5); } Hu3DModelHookReset(object->model[0]); Hu3DModelPosSet(object->model[1], var_r31->unk_70.x, var_r31->unk_70.y, var_r31->unk_70.z); } void fn_1_96F4(omObjData *object) { float var_f31; float var_f30; float var_f29; float var_f28; float var_f27; UnkM410Struct5 *var_r31; var_r31 = object->data; if (!var_r31->unk_18 && (!var_r31->unk_14 || var_r31->unk_28)) { var_f29 = -3430.0002f; var_f30 = 70.0f + object->trans.y; var_f31 = 0.3f; if (var_r31->unk_14 && var_r31->unk_28) { var_r31->unk_14 = 0; var_r31->unk_28 = 0; Hu3DModelAttrReset(object->model[1], 1); var_r31->unk_36 = 0; var_r31->unk_70.x = object->trans.x; var_r31->unk_70.y = 100.0f + object->trans.y; var_r31->unk_70.z = 500.0f + object->trans.z; var_f28 = ((var_f30 - var_r31->unk_70.y) - (var_f31 * var_f31 * var_f29 * 0.5f)) / var_f31; var_f27 = 70.0f + object->trans.z; var_r31->unk_7C.x = 0.0f; var_r31->unk_7C.y = 0.016666668f * var_f28; var_r31->unk_7C.z = (0.016666668f * (var_f27 - var_r31->unk_70.z)) / var_f31; var_r31->unk_40 = 0.0f; var_r31->unk_44 = 0.0f; var_r31->unk_48 = 0.04f; } PSVECAdd(&var_r31->unk_70, &var_r31->unk_7C, &var_r31->unk_70); var_r31->unk_7C.y = var_r31->unk_7C.y + (0.0002777778f * var_f29); if ((var_r31->unk_7C.y < 0.0f) && (var_r31->unk_70.y <= var_f30)) { var_r31->unk_18 = 1; var_r31->unk_14 = 1; var_r31->unk_28 = 0; Hu3DModelHookSet(object->model[0], lbl_1_data_140[var_r31->unk_08], object->model[1]); CharModelMotionSpeedSet(var_r31->unk_00, 2.0f); var_r31->unk_40 = 180.0f; var_r31->unk_44 = 0.0f; var_r31->unk_48 = 0.005f; HuAudFXPlay(1376); } if (var_r31->unk_18 != 0) { Hu3DModelPosSet(object->model[1], 0.0f, 0.0f, 0.0f); } else { Hu3DModelPosSet(object->model[1], var_r31->unk_70.x, var_r31->unk_70.y, var_r31->unk_70.z); } if (var_r31->unk_36 >= (60.0f * (var_f31 - 0.17f))) { fn_1_9E0C(object, 1); } } } s32 fn_1_9A90(omObjData *object) { UnkM410Struct5 *var_r31; s32 var_r29; var_r31 = object->data; var_r29 = 0; if (var_r31->unk_20) { return var_r29; } if (!var_r31->unk_18) { Hu3DModelAttrSet(object->model[1], 1); } if (var_r31->unk_18 && !var_r31->unk_1C && var_r31->unk_2C) { var_r31->unk_1C = 1; var_r31->unk_2C = 0; fn_1_9E0C(object, 4); var_r31->unk_48 = 0.05f; var_r31->unk_68 = 1300.0f; } if (var_r31->unk_1C) { var_r31->unk_58.y = var_r31->unk_58.y + (0.016666668f * var_r31->unk_68); var_r31->unk_68 += -66.66667014360428; if (var_r31->unk_58.y <= 0.0f) { var_r31->unk_1C = 0; if (var_r31->unk_18) { fn_1_9E0C(object, 7); } else { var_r29 = 1; fn_1_9E0C(object, 6); } var_r31->unk_58.y = 0.0f; } var_r31->unk_24 = 0; if (var_r31->unk_58.y >= 30.000002f && var_r31->unk_18) { var_r31->unk_24 = 1; if (var_r31->unk_30) { fn_1_9040(object); var_r31->unk_24 = 0; var_r31->unk_30 = 0; } } } else if (var_r31->unk_18) { fn_1_9F70(object, 2); } return var_r29; } s32 fn_1_9C84(omObjData *object) { UnkM410Struct5 *var_r31; s32 var_r29; object = object; var_r31 = object->data; var_r29 = 0; if (!var_r31->unk_18) { Hu3DModelAttrSet(object->model[1], 1); } if (!var_r31->unk_20 && var_r31->unk_18 && !var_r31->unk_1C && var_r31->unk_30) { fn_1_9E0C(object, 3); var_r31->unk_30 = 0; var_r31->unk_20 = 1; var_r31->unk_36 = 0; } else if (var_r31->unk_20) { if (var_r31->unk_18) { if (var_r31->unk_36 >= 18.0f) { fn_1_9040(object); } } else if (var_r31->unk_36 >= 30.0f && fn_1_9EFC(object)) { var_r31->unk_30 = 0; var_r31->unk_2C = 0; var_r31->unk_20 = 0; var_r29 = 1; } } return var_r29; } void fn_1_9E0C(omObjData *object, u32 arg1) { float var_f31; UnkM410Struct5 *var_r31; var_r31 = object->data; if ((var_r31->unk_0C != arg1) && (arg1 < 10)) { var_f31 = lbl_1_data_1D4[arg1].unk_08; if (var_r31->unk_0C < 0) { var_f31 = 0.0f; } var_r31->unk_0C = arg1; CharModelMotionShiftSet(var_r31->unk_00, object->motion[arg1], lbl_1_data_1D4[arg1].unk_00, var_f31, lbl_1_data_1D4[arg1].unk_0C); CharModelMotionSpeedSet(var_r31->unk_00, 1.0f); } } s32 fn_1_9EFC(omObjData *object) { UnkM410Struct5 *var_r31; s32 var_r30; var_r31 = object->data; var_r30 = 0; if (CharModelMotionEndCheck(var_r31->unk_00) && (CharModelMotionShiftIDGet(var_r31->unk_00) < 0)) { var_r30 = 1; } return var_r30; } s32 fn_1_9F70(omObjData *object, u32 arg1) { UnkM410Struct5 *var_r28; s32 var_r27; s32 var_r26; var_r27 = 0; var_r28 = object->data; var_r26 = 0; if (CharModelMotionEndCheck(var_r28->unk_00) && (CharModelMotionShiftIDGet(var_r28->unk_00) < 0)) { var_r26 = 1; } if (var_r26) { fn_1_9E0C(object, arg1); var_r27 = 1; } return var_r27; } void fn_1_A0A4(omObjData *object) { UnkM410Struct9 *var_r31; UnkM410Struct14 *var_r30; s32 var_r28; float sp8[4][2] = { { 36.0f, 64.0f }, { 476.0f, 64.0f }, { 36.0f, 416.0f }, { 476.0f, 416.0f } }; object->stat |= 256; object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM410Struct14), MEMORY_DEFAULT_NUM); var_r30 = object->data; memset(var_r30, 0, sizeof(UnkM410Struct14)); var_r30->unk_F80 = GXGetTexBufferSize(640, 480, 5, GX_FALSE, 0); var_r30->unk_F84 = HuMemDirectMallocNum(HEAP_SYSTEM, var_r30->unk_F80, MEMORY_DEFAULT_NUM); DCFlushRange(var_r30->unk_F84, var_r30->unk_F80); fn_1_A9A4(&var_r30->unk_120); var_r31 = var_r30->unk_00; for (var_r28 = 0; var_r28 < 4; var_r28++, var_r31++) { var_r31->unk_0C = sp8[lbl_1_bss_60[var_r28]][0]; var_r31->unk_10 = sp8[lbl_1_bss_60[var_r28]][1]; var_r31->unk_2C[0] = var_r31->unk_2C[1] = 1.0f; var_r31->unk_3C[0] = var_r31->unk_3C[1] = var_r31->unk_40 = var_r31->unk_42 = -1; var_r31->unk_3C[0] = espEntry(6357043, 2, 0); var_r31->unk_3C[1] = espEntry(6357043, 2, 0); var_r31->unk_40 = espEntry(lbl_1_data_274[GWPlayerCfg[var_r28].character], 2, 0); var_r31->unk_42 = espEntry(6357014, 3, 0); espPosSet(var_r31->unk_42, 36.0f + var_r31->unk_0C, var_r31->unk_10); var_r31->unk_44 = espEntry(6357015, 4, 0); espPosSet(var_r31->unk_44, 36.0f + var_r31->unk_0C, var_r31->unk_10); espColorSet(var_r31->unk_44, 0, 0, 0); espTPLvlSet(var_r31->unk_44, 0.5); espDispOff(var_r31->unk_3C[0]); espDispOff(var_r31->unk_3C[1]); espDispOff(var_r31->unk_40); espDispOff(var_r31->unk_42); espDispOff(var_r31->unk_44); var_r31->unk_00 = 0; } fn_1_77E8(fn_1_A828); object->model[0] = Hu3DHookFuncCreate(fn_1_B140); Hu3DModelLayerSet(object->model[0], 3); HuDataDirClose(DATADIR_MGCONST); object->func = fn_1_A3C0; } void fn_1_A3C0(omObjData *object) { float var_f31; UnkM410Struct9 *var_r31; UnkM410Struct8 *var_r30; s32 var_r29; s32 var_r28; UnkM410Struct14 *var_r27; u32 var_r26; s32 var_r25; var_r27 = object->data; var_r31 = var_r27->unk_00; for (var_r29 = 0; var_r29 < 4; var_r29++, var_r31++) { switch (var_r31->unk_14) { case 0: if (fn_1_281C() == 2) { var_r31->unk_14 = 1; } break; case 1: var_r31->unk_18 = 0; var_r31->unk_20 = var_r31->unk_08 % 10; var_r31->unk_1C = (var_r31->unk_08 / 10) % 10; espDispOn(var_r31->unk_3C[0]); espDispOn(var_r31->unk_3C[1]); espDispOn(var_r31->unk_40); espDispOn(var_r31->unk_42); espDispOn(var_r31->unk_44); espBankSet(var_r31->unk_3C[0], var_r31->unk_1C); espBankSet(var_r31->unk_3C[1], var_r31->unk_20); espBankSet(var_r31->unk_40, var_r31->unk_24); if (var_r31->unk_00) { var_r31->unk_2C[0] = var_r31->unk_2C[1] = 0.5f; var_r31->unk_14++; } else { var_r31->unk_00 = 1; var_r31->unk_2C[0] = var_r31->unk_2C[1] = 1.0f; var_r31->unk_14 += 3; break; } case 2: var_f31 = var_r31->unk_2C[0]; var_f31 += 0.10000001f; if (var_f31 >= 1.5f) { var_r31->unk_14++; } var_r31->unk_2C[0] = var_r31->unk_2C[1] = var_f31; break; case 3: var_f31 = var_r31->unk_2C[0]; var_f31 -= 0.10000001f; if (var_f31 <= 1.0f) { var_f31 = 1.0f; var_r31->unk_14 = var_r31->unk_14 + 1; } var_r31->unk_2C[0] = var_r31->unk_2C[1] = var_f31; break; } var_r31->unk_18++; for (var_r28 = 0; var_r28 < 2; var_r28++) { espPosSet(var_r31->unk_3C[var_r28], 34.0f + var_r31->unk_0C + (21.0f * var_r28), 2.0f + var_r31->unk_10); espScaleSet(var_r31->unk_3C[var_r28], var_r31->unk_2C[var_r28], var_r31->unk_2C[var_r28]); } espPosSet(var_r31->unk_40, var_r31->unk_0C, var_r31->unk_10 - 2.0f); } var_r30 = var_r27->unk_120.unk_00; for (var_r29 = 0; var_r29 < 16; var_r29++, var_r30++) { if (var_r30->unk_00) { var_r30->unk_00++; if (var_r30->unk_00 < 12.0f) { var_r30->unk_04 += 0.058333337f; } else { var_r30->unk_04 += 0.025000002f; var_r30->unk_0C -= 0.050000004f; } if (var_r30->unk_0C < 0.0f) { var_r30->unk_00 = 0; } } } if (fn_1_281C() == 3) { var_r25 = 0; var_r31 = var_r27->unk_00; var_r26 = 0; for (var_r29 = 0; var_r29 < 4; var_r29++, var_r31++) { if (var_r31->unk_04 > var_r26) { var_r26 = var_r31->unk_04; } } if (var_r26) { var_r31 = var_r27->unk_00; for (var_r29 = 0; var_r29 < 4; var_r29++, var_r31++) { if (var_r31->unk_04 >= var_r26) { var_r25 |= 1 << var_r29; } } } fn_1_284C(var_r25); } } void fn_1_A828(u16 arg0, u16 arg1, u16 arg2) { UnkM410Struct8 *var_r31; UnkM410Struct9 *var_r30; s32 var_r29; UnkM410Struct14 *var_r27; var_r27 = lbl_1_bss_74->data; if (fn_1_281C() == 2 || fn_1_281C() == 3) { var_r30 = var_r27->unk_00; var_r30[arg0].unk_04 += arg1; var_r30[arg0].unk_08 += arg1; var_r30[arg0].unk_14 = 1; var_r31 = var_r27->unk_120.unk_00; for (var_r29 = 0; var_r29 < 16; var_r29++, var_r31++) { if (!var_r31->unk_00) { break; } } if (var_r29 < 16) { var_r31->unk_00 = 1; var_r31->unk_02 = GWPlayerCfg[arg0].character; var_r31->unk_0C = 1.0f; var_r31->unk_04 = 0.25f; var_r31->unk_08 = frandmod(360); fn_1_77F8(arg2, &var_r31->unk_10); var_r31->unk_10.y -= 30.000002f; } } } void fn_1_A9A4(UnkM410Struct13 *arg0) { float sp88[32][2]; float sp8[32]; float var_f31; float var_f30; float var_f29; float var_f28; s32 var_r31; UnkM410Struct12 *var_r29; UnkM410Struct11 *var_r28; var_f31 = 0.0f; for (var_r31 = 0; var_r31 < 32; var_r31++) { var_f28 = 1.0f + (0.001f * frandmod(1000)); sp8[var_r31] = var_f28; var_f31 += var_f28; sp88[var_r31][1] = 80.0f * var_f28; sp88[var_r31][0] = 10.0f + (0.02f * frandmod(1000)); } var_f31 = 360.0f / var_f31; for (var_r31 = 0; var_r31 < 32; var_r31++) { sp8[var_r31] *= var_f31; } var_f31 = frandmod(90); var_r28 = arg0->unk_1C0; var_r29 = arg0->unk_940; for (var_r31 = 0; var_r31 < 32; var_r28++, var_r29++, var_r31++) { var_f29 = -cosd(var_f31); var_f30 = sind(var_f31); var_r28->unk_24 = var_f29 * sp88[var_r31][0]; var_r28->unk_28 = var_f30 * sp88[var_r31][0]; var_r28->unk_0C = var_f29 * (sp88[var_r31][0] + sp88[var_r31][1]); var_r28->unk_10 = var_f30 * (sp88[var_r31][0] + sp88[var_r31][1]); var_r28->unk_00 = var_f29 * (sp88[var_r31][0] + (0.85f * sp88[var_r31][1])); var_r28->unk_04 = var_f30 * (sp88[var_r31][0] + (0.85f * sp88[var_r31][1])); var_r29->unk_00 = -0.3f * -var_f29; var_r29->unk_04 = -0.3f * var_f30; var_f29 = -cosd(var_f31 - (0.4f * sp8[var_r31])); var_f30 = sind(var_f31 - (0.4f * (&sp8[0])[var_r31])); var_r28->unk_30 = var_f29 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1])); var_r28->unk_34 = var_f30 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1])); var_f29 = -cosd(var_f31 + (0.4f * sp8[var_r31])); var_f30 = sind(var_f31 + (0.4f * sp8[var_r31])); var_r28->unk_18 = var_f29 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1])); var_r28->unk_1C = var_f30 * (sp88[var_r31][0] + (0.7f * sp88[var_r31][1])); var_r29->unk_08 = var_r29->unk_0C = var_r29->unk_10 = var_r29->unk_14 = 0.0f; var_r29->unk_18 = var_r29->unk_1C = var_r29->unk_20 = var_r29->unk_24 = 0.0f; var_f31 += sp8[var_r31]; } for (var_r31 = 0; var_r31 < 5; var_r31++) { arg0->unk_E40[var_r31].r = arg0->unk_E40[var_r31].g = arg0->unk_E40[var_r31].b = 255; arg0->unk_E40[var_r31].a = 255; } arg0->unk_E54 = 0x6C0; arg0->unk_E5C = HuMemDirectMallocNum(HEAP_SYSTEM, arg0->unk_E54, MEMORY_DEFAULT_NUM); DCFlushRange(arg0->unk_E5C, arg0->unk_E54); GXBeginDisplayList(arg0->unk_E5C, arg0->unk_E54); for (var_r31 = 0; var_r31 < 32; var_r31++) { GXBegin(GX_TRIANGLEFAN, GX_VTXFMT0, 6); GXPosition1x16(var_r31 * 5); GXColor1x16(0); GXTexCoord1x16(var_r31 * 5); GXPosition1x16(var_r31 * 5 + 1); GXColor1x16(1); GXTexCoord1x16(var_r31 * 5 + 1); GXPosition1x16(var_r31 * 5 + 2); GXColor1x16(2); GXTexCoord1x16(var_r31 * 5 + 2); GXPosition1x16(var_r31 * 5 + 3); GXColor1x16(3); GXTexCoord1x16(var_r31 * 5 + 3); GXPosition1x16(var_r31 * 5 + 4); GXColor1x16(4); GXTexCoord1x16(var_r31 * 5 + 4); GXPosition1x16(var_r31 * 5 + 1); GXColor1x16(1); GXTexCoord1x16(var_r31 * 5 + 1); } arg0->unk_E58 = GXEndDisplayList(); DCStoreRange(arg0, sizeof(UnkM410Struct13)); } void fn_1_B140(ModelData *arg0, Mtx arg1) { Mtx sp124; Mtx spF4; Mtx spC4; Mtx sp94; Mtx sp64; Mtx sp34; GXTexObj sp14; UnkM410Struct8 *var_r31; UnkM410Struct14 *var_r30; s32 var_r29; var_r30 = lbl_1_bss_74->data; { GXColor sp10 = { 204, 204, 204, 204 }; GXSetTexCopySrc(0, 0, 640, 480); GXSetTexCopyDst(640, 480, GX_TF_RGB5A3, GX_FALSE); GXCopyTex(var_r30->unk_F84, GX_FALSE); GXPixModeSync(); DCStoreRange(&sp10, 4); DCStoreRange(&lbl_1_data_294, 32); PSMTXTrans(spF4, -400.0f, 400.0f, -700.0f); PSMTXConcat(Hu3DCameraMtx, spF4, sp64); GXLoadPosMtxImm(sp64, 0); GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); GXInitTexObj(&sp14, var_r30->unk_F84, 640, 480, 5, GX_CLAMP, GX_CLAMP, GX_FALSE); GXInitTexObjLOD(&sp14, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); GXLoadTexObj(&sp14, GX_TEXMAP0); HuSprTexLoad(lbl_1_bss_70, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR); GXSetNumTexGens(2); C_MTXLightPerspective(sp94, 41.5f, 1.2f, 0.5555555f, -0.5f, 0.5555555f, 0.5f); PSMTXConcat(sp94, Hu3DCameraMtx, sp94); PSMTXInverse(Hu3DCameraMtx, sp34); PSMTXConcat(sp34, sp64, sp124); PSMTXConcat(sp94, sp124, spF4); GXLoadTexMtxImm(spF4, 30, GX_MTX3x4); GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, 30, GX_FALSE, 125); GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEXCOORD0, 33, GX_FALSE, 125); GXSetNumIndStages(1); GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD1, GX_TEXMAP1); GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1); GXSetTevIndWarp(GX_TEVSTAGE0, GX_INDTEXSTAGE0, GX_TRUE, GX_FALSE, GX_ITM_0); PSMTXScale(spF4, -0.5f, -0.5f, 0.5f); GXSetIndTexMtx(GX_ITM_0, (float(*)[3])spF4, -1); GXSetNumTevStages(1); GXSetTevColor(GX_TEVREG1, sp10); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_C1, GX_CC_C0); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_RASA, GX_CA_A0, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET); GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSetArray(GX_VA_POS, var_r30->unk_120.unk_1C0, 12); GXSetArray(GX_VA_CLR0, var_r30->unk_120.unk_E40, 4); GXSetArray(GX_VA_TEX0, var_r30->unk_120.unk_940, 8); var_r31 = var_r30->unk_120.unk_00; for (var_r29 = 0; var_r29 < 16; var_r29++, var_r31++) { if (var_r31->unk_00) { lbl_1_data_294[var_r31->unk_02].a = 255.0f * var_r31->unk_0C; GXSetTevColor(GX_TEVREG0, lbl_1_data_294[var_r31->unk_02]); PSMTXTrans(spF4, var_r31->unk_10.x, var_r31->unk_10.y, var_r31->unk_10.z); PSMTXRotRad(sp124, 90, 0.017453292f * var_r31->unk_08); PSMTXConcat(spF4, sp124, spF4); PSMTXScale(spC4, var_r31->unk_04, var_r31->unk_04, var_r31->unk_04); PSMTXConcat(spF4, spC4, spF4); PSMTXConcat(Hu3DCameraMtx, spF4, sp64); GXLoadPosMtxImm(sp64, 0); PSMTXConcat(sp34, sp64, sp124); PSMTXConcat(sp94, sp124, spF4); GXLoadTexMtxImm(spF4, 30, GX_MTX3x4); PSMTXRotRad(sp124, 90, 0.017453292f * -var_r31->unk_08); GXLoadTexMtxImm(sp124, 33, GX_MTX2x4); GXCallDisplayList(var_r30->unk_120.unk_E5C, var_r30->unk_120.unk_E58); } } GXSetNumIndStages(0); GXSetTevDirect(GX_TEVSTAGE0); } }