#include "ext_math.h" #include "game/audio.h" #include "game/chrman.h" #include "game/esprite.h" #include "game/flag.h" #include "game/gamework_data.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 "string.h" #include "game/frand.h" extern s32 rand8(void); typedef struct UnkCameraStruct { /* 0x00 */ float unk_00; /* 0x04 */ float unk_04; /* 0x08 */ float unk_08; /* 0x0C */ float unk_0C; /* 0x10 */ float unk_10; /* 0x14 */ float unk_14; } UnkCameraStruct; /* size = 0x18 */ typedef struct UnkBssCCStruct { /* 0x00 */ s32 unk_00; /* 0x04 */ float unk_04[3]; } UnkBssCCStruct; /* size = 0x10 */ typedef struct UnkBss28CStruct { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ float unk_08; /* 0x0C */ s32 unk_0C; } UnkBss28CStruct; /* size = 0x10 */ typedef struct UnkData114Struct { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ float unk_08; /* 0x0C */ float unk_0C; /* 0x10 */ float unk_10; /* 0x14 */ float unk_14; } UnkData114Struct; /* size = 0x18 */ typedef struct M458DllWork { s32 unk_00; s32 unk_04; s32 unk_08; s32 unk_0C; s32 unk_10; s32 unk_14; s32 unk_18; s32 unk_1C; s32 unk_20; s32 unk_24; float unk_28; float unk_2C; char unk30[4]; float unk_34; s32 unk_38; s32 unk_3C; s32 unk_40; } M458DllWork; /* size = 0x44 */ s16 fn_1_4BE8(); void fn_1_6D9C(omObjData *arg0); s32 lbl_1_data_0[2] = { 0x570025, 0x570026 }; s32 lbl_1_data_8[2] = { 0, 0 }; s32 lbl_1_data_10[0xA] = { 0x5F0000, 0x5F0002, 0x5F0003, 0x5F0005, 0x5F0006, 0x5F0036, 0x5F002F, 0x5F001A, 0x570000, 0x5F0017, }; u32 lbl_1_data_38[0xA] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }; u32 lbl_1_data_60[0xA] = { 0x30008, 0, 0, 0x3000A, 0, 0, 0x57002A, 0x570028, 0x570029, 0x570027 }; u8 lbl_1_data_88[0xA] = { 0, 0, 0, 1, 1, 1, 1, 0, 1, 1 }; u8 lbl_1_data_92[0xA] = { 0, 0, 0, 1, 1, 1, 1, 0, 1, 1 }; s32 lbl_1_data_9C[0xA] = { 8, 8, 8, 0, 0, 0, 8, 8, 8, 8 }; s32 lbl_1_data_C4[0xA] = { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0 }; s32 lbl_1_data_EC[0xA] = { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 }; UnkData114Struct lbl_1_data_114 = { 0, 0, 0.0f, 0.0f, 0.0f, 0.0f }; s16 lbl_1_data_12C = -1; s16 lbl_1_data_12E = -1; s32 lbl_1_data_130 = -1; s32 lbl_1_data_134 = -1; s16 lbl_1_data_138[0x12] = { -1, 0, -0x3D4C, 0, 0, 0, 0x4403, 0x4000, 0x4334, 0, 0x42B4, 0, 0, 0, 0x4403, 0x4000, 0x4334, 0, }; s32 lbl_1_data_15C = -1; UnkBss28CStruct lbl_1_bss_28C[9]; UnkBssCCStruct lbl_1_bss_CC[0x1C]; omObjData *lbl_1_bss_C8; omObjData *lbl_1_bss_C4; omObjData *lbl_1_bss_C0; omObjData *lbl_1_bss_BC; omObjData *lbl_1_bss_B8; s32 lbl_1_bss_B4; s32 lbl_1_bss_B0; s32 lbl_1_bss_AC; s32 lbl_1_bss_A8; s32 lbl_1_bss_A4; Process *lbl_1_bss_A0; s32 lbl_1_bss_9C; s32 lbl_1_bss_98; s32 lbl_1_bss_94; s32 lbl_1_bss_90; s32 lbl_1_bss_8C; HsfanimStruct00 lbl_1_bss_3C; float lbl_1_bss_38; float lbl_1_bss_34; float lbl_1_bss_30; float lbl_1_bss_2C; float lbl_1_bss_28; s32 lbl_1_bss_24; s32 lbl_1_bss_20; s32 lbl_1_bss_1C; s32 lbl_1_bss_18; s32 lbl_1_bss_14; s32 lbl_1_bss_10; s16 lbl_1_bss_C; s32 lbl_1_bss_8; s32 lbl_1_bss_4; s32 lbl_1_bss_0; void fn_1_A0(void) { if ((HuPadBtnDown[0] & PAD_BUTTON_B) != 0) { Center.x = lbl_1_bss_BC->trans.x; Center.y = lbl_1_bss_BC->trans.y; Center.z = lbl_1_bss_BC->trans.z; } Center.x += 10.0 * (((HuPadBtn[0] & PAD_BUTTON_RIGHT) != 0) - ((HuPadBtn[0] & PAD_BUTTON_LEFT) != 0)); Center.z -= 10.0 * (((HuPadBtn[0] & PAD_BUTTON_UP) != 0) - ((HuPadBtn[0] & PAD_BUTTON_DOWN) != 0)); Center.y += (30.0 * ((HuPadTrigL[0] - HuPadTrigR[0]) / 128.0)); CZoom += 25.0 * (((HuPadBtn[0] & PAD_BUTTON_X) != 0) - ((HuPadBtn[0] & PAD_BUTTON_Y) != 0)); CRot.y += HuPadSubStkX[0] / 16.0; CRot.x += HuPadSubStkY[0] / -16.0; print8(0x40, 0x188, 1.0f, "%f,%f,%f", Center.x, Center.y, Center.z); print8(0x40, 0x198, 1.0f, "%f,%f,%f", CRot.x, CRot.y, CRot.z); print8(0x40, 0x1A8, 1.0f, "%f", CZoom); } s32 lbl_1_data_16C = -1; // https://decomp.me/scratch/QQLCN r17 issues void fn_1_4C8(omObjData *object) { Mtx sp1E0; float sp1A8[2]; float sp1A0[2]; s32 spD0; s32 spCC; s32 spC8; s32 spC4; s32 spC0; float spBC; s32 spB8; ModelData *spB4; float spB0; float spAC; s32 spA8; s32 spA4; float var_f31; float var_f30; float var_f28; float var_f27; float var_f26; float var_f25; float var_f24; float var_f23; float var_f22; float var_f21; float var_f20; M458DllWork *var_r31; ModelData *var_r29; s16 var_r28; M458DllWork *var_r27; s32 var_r26; s32 var_r25; s32 var_r24; ModelData *var_r23; s32 var_r22; s32 var_r21; s32 var_r20; s32 var_r19; s32 var_r18; s32 var_r17; var_r31 = object->data; var_r27 = (&lbl_1_bss_BC)[1 - object->work[0]]->data; var_f23 = 0.0f; var_f22 = 0.0f; var_f28 = 0.0f; var_r22 = 0; var_r28 = -1; var_r31->unk_2C = var_r31->unk_34 = 0.0f; if ((lbl_1_bss_B0 == (var_r31->unk_00 == 0 ? 0x3F1 : 0x3F2)) && (var_r31->unk_18 == 3) && (var_r31->unk_1C >= 0x168)) { if (var_r31->unk_1C == 0x168) { var_r31->unk_14 = rand8() % 15; } if (var_r31->unk_0C != -1) { var_r22 = (HuPadBtnDown[var_r31->unk_0C] & 0x100) != 0 ? 1 : 0; } else { var_r31->unk_14 += var_r31->unk_14 < 0x10000; if (var_r31->unk_14 == 0x1E) { var_r22 = 1; } } } if (lbl_1_bss_B0 == (var_r31->unk_00 == 0 ? 0x3ED : 0x3EF)) { var_r25 = 0; var_r24 = 0; if (var_r31->unk_0C != -1) { var_r25 = HuPadStkX[var_r31->unk_0C] < -0x14 ? -1 : (HuPadStkX[var_r31->unk_0C] > 0x14 ? 1 : 0); var_r24 = -HuPadStkY[var_r31->unk_0C] < -0x14 ? -1 : (-HuPadStkY[var_r31->unk_0C] > 0x14 ? 1 : 0); var_r22 = (HuPadBtnDown[var_r31->unk_0C] & 0x100) != 0 ? 1 : 0; } else { var_r31->unk_14 += var_r31->unk_14 < 0x10000; if (var_r31->unk_14 == 0x1E) { lbl_1_bss_94 = rand8() % (var_r31->unk_00 + 2); lbl_1_bss_90 = rand8() % (var_r31->unk_00 + 2); } if (fabs((500.0 * var_r31->unk_3C) - object->trans.x) < 10.0) { var_r25 = lbl_1_bss_94 > 0 ? (var_r31->unk_00 == 0 ? (((rand8() % 2) * 2) - 1) : -1) : 0; lbl_1_bss_94 -= lbl_1_bss_94 > 0; } if (fabs((500.0 * var_r31->unk_40) - object->trans.z) < 10.0) { var_r24 = lbl_1_bss_90 > 0 ? (var_r31->unk_00 == 0 ? (((rand8() % 2) * 2) - 1) : -1) : 0; lbl_1_bss_90 -= lbl_1_bss_90 > 0; } if ((var_r31->unk_14 >= 0x2D) && ((var_r31->unk_14 % 30) == 0xF) && (lbl_1_bss_94 == 0) && (lbl_1_bss_90 == 0)) { var_r22 = 1; } } if (lbl_1_bss_B4 >= 0x32) { var_r25 = var_r24 = 0; } if (var_r31->unk_00 == 1) { spC4 = 0; spC0 = 0; if (fabs((500.0 * var_r31->unk_3C) - object->trans.x) < 10.0) { var_r17 = object->trans.x < -250.0 ? -1 : (object->trans.x > 250.0 ? 1 : 0); spD0 = var_r17; } else { var_r17 = (object->trans.x < 0.0f ? -1 : 0); spD0 = var_r17 + 1; } if (fabs((500.0 * var_r31->unk_40) - object->trans.z) < 10.0) { spCC = spC8 = object->trans.z < -250.0 ? -1 : (object->trans.z > 250.0 ? 1 : 0); } else { spCC = object->trans.z < 0.0f ? -1 : 0; spC8 = spCC + 1; } for (var_r21 = var_r17; var_r21 <= spD0; var_r21++) { for (var_r20 = spCC; var_r20 <= spC8; var_r20++) { if (var_r27->unk_38 == 1 + var_r21 + var_r25 + (1 + var_r20 + var_r24) * 3) { var_r25 = var_r24 = 0; } if (var_r27->unk_38 == 1 + var_r21 + var_r25 + (var_r20 + 1) * 3) { var_r25 = 0; } if (var_r27->unk_38 == 1 + var_r21 + (1 + var_r20 + var_r24) * 3) { var_r24 = 0; } } } } if ((var_r25 * ((500.0 * var_r31->unk_3C) - object->trans.x)) < 0.0) { var_r31->unk_3C = var_r31->unk_3C + var_r25; } if ((fabs((500.0 * var_r31->unk_3C) - object->trans.x) < 10.0) && (var_r25 != 0) && ((var_r31->unk_3C + var_r25) >= -1) && ((var_r31->unk_3C + var_r25) <= 1)) { var_r31->unk_3C = var_r31->unk_3C + var_r25; } var_f23 = (((500.0 * var_r31->unk_3C) - object->trans.x) / 0.25) / 1.75; if ((var_r24 * ((500.0 * var_r31->unk_40) - object->trans.z)) < 0.0) { var_r31->unk_40 = var_r31->unk_40 + var_r24; } if ((fabs((500.0 * var_r31->unk_40) - object->trans.z) < 10.0) && (var_r24 != 0) && ((var_r31->unk_40 + var_r24) >= -1) && ((var_r31->unk_40 + var_r24) <= 1)) { var_r31->unk_40 = var_r31->unk_40 + var_r24; } var_f22 = (((500.0 * var_r31->unk_40) - object->trans.z) / -0.25) / 1.75; } if (((var_r31->unk_00 != 1) || (var_r31->unk_08 != -1)) && (var_r31->unk_18 == 0)) { if ((lbl_1_bss_B0 > (var_r31->unk_00 == 0 ? 0x3E9 : 0x3EE)) && (lbl_1_bss_B0 < 0x3F3)) { var_f31 = 0.25 * var_f23; var_f30 = 0.25 * -var_f22; { Vec sp1B0 = { 0.0f, 0.0f, 0.0f }; sp1B0.x = var_f31; sp1B0.z = var_f30; PSMTXRotRad(sp1E0, 0x79, 0.017453292f * CRot.y); PSMTXMultVec(sp1E0, &sp1B0, &sp1B0); var_f31 = sp1B0.x; var_f30 = sp1B0.z; } var_f28 = sqrtf((var_f31 * var_f31) + (var_f30 * var_f30)); if (var_f28 >= 0.5f) { if (var_f28 < 10.0f) { var_r31->unk_2C = var_f31; var_r31->unk_34 += var_f30; } else { var_f31 = var_f31 / var_f28; var_f30 = var_f30 / var_f28; var_f28 = 10.0f; var_r31->unk_2C = var_f31 * var_f28; var_r31->unk_34 = var_f30 * var_f28; } var_r31->unk_28 = var_f28; object->rot.y = atan2d(var_r31->unk_2C, var_r31->unk_34); if (var_r31->unk_28 >= 8.0f) { var_r28 = 2; } else { var_r28 = 2; } } else { var_r28 = 0; } } } object->trans.x += 1.75f * var_r31->unk_2C; object->trans.z += 1.75f * var_r31->unk_34; switch (lbl_1_bss_B0) { case 0x3E9: case 0x3EE: if (lbl_1_bss_B0 == (var_r31->unk_00 == 0 ? 0x3E9 : 0x3EE)) { if (lbl_1_bss_B4 == 0) { Hu3DModelAttrReset(object->model[0], HU3D_ATTR_DISPOFF); if (var_r31->unk_00 == 0) { object->trans.x = 0.0f; object->trans.z = 0.0f; } else if (var_r31->unk_08 != -1) { var_r31->unk_3C = -2; for (var_r18 = 2; var_r18 >= 0; var_r18--) { for (var_r19 = 2; var_r19 >= 0; var_r19--) { if (var_r27->unk_38 != (var_r18 + (var_r19 * 3))) { var_r31->unk_3C = var_r19 - 1; var_r31->unk_40 = var_r18 - 1; object->trans.x = 500.0 * var_r31->unk_3C; object->trans.z = 500.0 * var_r31->unk_40; break; } } if (var_r31->unk_3C != -2) { break; } } } else { do { var_r31->unk_38 = rand8() % 9; } while (var_r27->unk_38 == var_r31->unk_38); var_r31->unk_3C = (var_r31->unk_38 % 3) - 1; var_r31->unk_40 = (var_r31->unk_38 / 3) - 1; object->trans.x = 500.0 * var_r31->unk_3C; object->trans.z = 500.0 * var_r31->unk_40; } } if (lbl_1_bss_B4 <= 0x1E) { if (var_r31->unk_08 == -1) { Hu3DMotionTimeSet(object->model[0], 138.0f); } object->trans.y = 2400.0 * (1.0 - (lbl_1_bss_B4 / 30.0)); } if ((var_r31->unk_08 != -1) && (lbl_1_bss_B4 == 0x1E)) { var_r28 = 4; } if (lbl_1_bss_B4 == ((var_r31->unk_08 != -1 ? 0xA : 0x3C) + 0x1E)) { var_r28 = 0; } if (lbl_1_bss_B4 == 0x1E) { lbl_1_data_114.unk_04 += 0x32; } if (lbl_1_bss_B4 == 0x1E) { HuAudFXPlay(0x33D); } } break; case 0x3EB: if ((lbl_1_bss_B4 == 0) && (var_r31->unk_00 == 0)) { var_r31->unk_18 = 1; var_r31->unk_1C = 0; } break; case 0x3ED: case 0x3EF: if (lbl_1_bss_B0 == (var_r31->unk_00 == 0 ? 0x3ED : 0x3EF)) { if (lbl_1_bss_B4 == 0) { lbl_1_bss_0 = 0x12C; lbl_1_data_12E = MGSeqCreate(1, 0xA, -1, -1); HuWinMesMaxSizeGet(1, sp1A8, 0x280019); lbl_1_bss_C = HuWinCreate(-10000.0f, 400.0f, sp1A8[0], sp1A8[1], 1); HuWinBGTPLvlSet(lbl_1_bss_C, 0.0f); HuWinMesSpeedSet(lbl_1_bss_C, 0); HuWinMesSet(lbl_1_bss_C, 0x280019); } if (lbl_1_data_12E != -1) { MGSeqParamSet(lbl_1_data_12E, 1, (lbl_1_bss_0 + 0x3A) / 60); } lbl_1_bss_0--; if ((var_r22 != 0) || (lbl_1_bss_0 == 0)) { lbl_1_bss_B4 = 0x32; MGSeqKill(lbl_1_data_12E); lbl_1_data_12E = -1; HuWinExCleanup(lbl_1_bss_C); } if (lbl_1_bss_B4 == 0x32) { if (fabs((500.0 * var_r31->unk_3C) - object->trans.x) < 1.0) { if (fabs((500.0 * var_r31->unk_40) - object->trans.z) < 1.0) { lbl_1_bss_B4 = 0x3C; object->rot.y = 0.0f; var_r31->unk_38 = 1 + var_r31->unk_3C + ((var_r31->unk_40 + 1) * 3); } } } } break; case 0x3F1: case 0x3F2: if ((lbl_1_bss_B0 == (var_r31->unk_00 == 0 ? 0x3F1 : 0x3F2)) && (lbl_1_bss_B4 == 0) && (var_r31->unk_08 != -1)) { HuWinMesMaxSizeGet(1, sp1A0, 0x300025); lbl_1_bss_C = HuWinCreate(-10000.0f, 400.0f, sp1A0[0], sp1A0[1], 1); HuWinBGTPLvlSet(lbl_1_bss_C, 0.0f); HuWinMesSpeedSet(lbl_1_bss_C, 0); HuWinMesSet(lbl_1_bss_C, 0x300025); } break; case 0x3F3: if (lbl_1_bss_98 != var_r31->unk_00) { if (lbl_1_bss_B4 == 1) { var_r28 = 7; } if (lbl_1_bss_B4 == 0x78) { Hu3DModelAttrReset(lbl_1_bss_B8->model[var_r31->unk_38 + 4], HU3D_MOTATTR_PAUSE); if (lbl_1_bss_CC[0].unk_00 < 3) { lbl_1_bss_CC[0].unk_04[lbl_1_bss_CC[0].unk_00] = 0.0f; lbl_1_bss_CC[0].unk_00++; } } if (lbl_1_bss_B4 == 0x99) { Hu3DModelAttrSet(lbl_1_bss_B8->model[var_r31->unk_38 + 4], HU3D_MOTATTR_PAUSE); } if (lbl_1_bss_B4 == 0xB7) { Hu3DModelAttrReset(lbl_1_bss_B8->model[var_r31->unk_38 + 4], HU3D_MOTATTR_PAUSE); } if ((lbl_1_bss_B4 == 0xBC) && (lbl_1_bss_CC[1].unk_00 < 3)) { lbl_1_bss_CC[1].unk_04[lbl_1_bss_CC[1].unk_00] = 0.0f; lbl_1_bss_CC[1].unk_00++; } if (lbl_1_bss_B4 == 0xD2) { var_r28 = 8; espAttrReset(lbl_1_data_8[1], HUSPR_ATTR_DISPOFF); if (lbl_1_bss_CC[(var_r31->unk_08 != -1 ? var_r31->unk_08 : 8) + 2].unk_00 < 3) { lbl_1_bss_CC[(var_r31->unk_08 != -1 ? var_r31->unk_08 : 8) + 2] .unk_04[lbl_1_bss_CC[(var_r31->unk_08 != -1 ? var_r31->unk_08 : 8) + 2].unk_00] = 0.0f; lbl_1_bss_CC[(var_r31->unk_08 != -1 ? var_r31->unk_08 : 8) + 2].unk_00++; } if (lbl_1_data_130 != -1) { HuAudSeqFadeOut(lbl_1_data_130, 0x64); lbl_1_data_130 = -1; } } if ((lbl_1_bss_B4 >= 0xD2) && (lbl_1_bss_B4 <= 0xD6)) { s32 sp1BC[9] = { 0, -12, -36, 0, 0, -12, -36, -48, 0 }; spBC = (lbl_1_bss_B4 - 0xD2) / 4.0; var_f26 = (lbl_1_bss_B4 - 0xD2) / 4.0; var_f26 = var_f26 > 1.0f ? 1.0f : var_f26; espPosSet(lbl_1_data_8[1], 290.0f, (64.0f * (1.0f - spBC)) + (sp1BC[(var_r31->unk_08 != -1 ? var_r31->unk_08 : 8)] + 0x8C)); espScaleSet(lbl_1_data_8[1], var_f26, var_f26); } if (lbl_1_bss_B4 == 0x10E) { Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_PAUSE); espAttrSet(lbl_1_data_8[1], HUSPR_ATTR_DISPOFF); } if (lbl_1_bss_B4 == 0x122) { // TODO remove temporary? spB8 = HuAudFXPlay((var_r31->unk_08 != -1 ? var_r31->unk_08 : 8) + 0x800); HuAudFXFadeOut(spB8, 0x9C4); } if (lbl_1_bss_B4 >= 0x13B) { object->trans.y -= 77.0f; } } else if ((lbl_1_bss_B4 == 0x3C) && (lbl_1_data_138[0] != -1)) { Hu3DParManKill(lbl_1_data_138[0]); lbl_1_data_138[0] = -1; } break; case 0x3F4: if (var_r31->unk_00 == lbl_1_bss_98) { if ((lbl_1_bss_B4 == 1) && (var_r31->unk_08 == -1)) { HuAudFXPlay(0x3A); } var_r28 = 9; } break; } switch (var_r31->unk_18) { case 0: var_r31->unk_1C++; break; case 1: var_r31->unk_1C++; if (var_r31->unk_1C <= 0x3C) { var_r28 = 5; object->rot.y = -180.0 * (var_r31->unk_1C / 60.0); } else { Hu3DMotionTimeSet(object->model[0], 120.0f); var_r28 = 0; var_r31->unk_18 = 0; var_r31->unk_1C = 0; } break; case 2: var_r31->unk_1C++; break; case 3: if (var_r31->unk_1C == 0) { lbl_1_data_15C = 6; } if (var_r31->unk_1C < 0x168) { var_r23 = &Hu3DData[lbl_1_bss_B8->model[3]]; if (var_r31->unk_1C == 0) { Hu3DModelAttrReset(lbl_1_bss_B8->model[3], HU3D_ATTR_DISPOFF); Hu3DModelPosSet(lbl_1_bss_B8->model[3], object->trans.x, 625.0f + object->trans.y, object->trans.z); Hu3DModelScaleSet(lbl_1_bss_B8->model[3], 0.1f, 0.1f, 0.1f); Hu3DModelTPLvlSet(lbl_1_bss_B8->model[3], 1.0f); lbl_1_bss_1C = 0; HuAudFXPlay(0x7F4); lbl_1_data_16C = HuAudFXPlay(0x7F3); } var_r23->rot.y = lbl_1_bss_1C % 360; lbl_1_bss_1C += 0x19; if (var_r31->unk_1C < 0xB4) { var_f20 = 0.0f; var_f21 = 1.0f; } else { var_f20 = 1.0f; var_f21 = 1.0f; } var_r23->scale.x = var_f20 + (var_f21 * sind((float)(var_r31->unk_1C % 180))); var_r23->scale.y = var_r23->scale.z = var_r23->scale.x; if (var_r31->unk_1C < 0xB4) { var_r31->unk_1C += 6; } else { var_r31->unk_1C = var_r31->unk_1C + 0x12; } if (var_r31->unk_1C >= 0x168) { var_r31->unk_1C = 0x168; Hu3DModelRotSet(lbl_1_bss_B8->model[3], 0.0f, 0.0f, 0.0f); } } else { spB4 = &Hu3DData[lbl_1_bss_B8->model[3]]; var_r31->unk_1C = var_r31->unk_1C + 4; if (var_r31->unk_1C > 0x2D0) { var_r31->unk_1C -= 0x168; } spB4->pos.y += (0.20000000298023224 * sind((var_r31->unk_1C - 0x168))); if (var_r22 != 0) { lbl_1_bss_B4 = 0x32; var_r31->unk_18 = 4; var_r31->unk_1C = 0; var_r28 = 6; } } break; case 4: var_r31->unk_1C++; if (var_r31->unk_1C >= 0x1B) { var_r29 = &Hu3DData[lbl_1_bss_B8->model[3]]; var_r26 = var_r31->unk_1C - 0x1B; if (var_r26 == 0) { if (var_r31->unk_04 != -1) { omVibrate(var_r31->unk_04, 0xC, 4, 2); } HuWinExCleanup(lbl_1_bss_C); lbl_1_data_15C = -1; if (lbl_1_data_16C != -1) { HuAudFXStop(lbl_1_data_16C); lbl_1_data_16C = -1; } HuAudFXPlay(0x7F5); } if (var_r26 == 8) { if (lbl_1_data_138[0] == -1) { lbl_1_data_138[0] = fn_1_4BE8(); Hu3DParManPosSet(lbl_1_data_138[0], var_r29->pos.x, var_r29->pos.y, var_r29->pos.z); } Hu3DModelAttrSet(lbl_1_bss_B8->model[3], HU3D_ATTR_DISPOFF); } else if (var_r26 > 8) { if (var_r31->unk_20 == 6) { if (Hu3DMotionTimeGet(object->model[0]) >= Hu3DMotionMaxTimeGet(object->model[0])) { var_r28 = 0; } } if (var_r26 <= 0x1C) { var_f27 = (var_r26 - 8) / 10.0; spB0 = ((var_r26 - 8) * 0x12); var_f27 = var_f27 > 1.0f ? 2.5 : 2.5 * var_f27; Hu3DModelAttrReset(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], HU3D_ATTR_DISPOFF); Hu3DModelPosSet(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], var_r29->pos.x, var_r29->pos.y, var_r29->pos.z); Hu3DModelScaleSet(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], var_f27, var_f27, var_f27); } if ((var_r26 >= 0x2D) && (var_r26 <= 0x41)) { var_f25 = (var_r26 - 0x2D) / 5.0; spAC = (var_r26 - 0x2D) * 0x12; var_f25 = var_f25 > 1.0f ? 1.0f : var_f25; var_f25 = 0.0; Hu3DModelAttrReset(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], HU3D_ATTR_DISPOFF); Hu3DModelPosSet(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], var_r29->pos.x, var_r29->pos.y - (30.0f * var_f25), var_r29->pos.z); var_r31->unk_1C += 5; } if (var_r26 == 0x62) { Hu3DModelAttrSet(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], HU3D_ATTR_DISPOFF); lbl_1_bss_18 = lbl_1_bss_18 >= 9 ? var_r27->unk_38 : lbl_1_bss_18; if (lbl_1_bss_18 == var_r27->unk_38) { lbl_1_bss_98 = var_r31->unk_00; } else if (lbl_1_bss_18 == var_r31->unk_38) { lbl_1_bss_98 = var_r27->unk_00; } var_r31->unk_18 = lbl_1_bss_98 == -1 ? 5 : 0; var_r31->unk_1C = 0; } } else { if (var_r26 < 4) { var_r29->pos.y += 10.0f + (0.5f * var_r26); var_r29->scale.x += 0.10000000149011612 * sind((4.0f * var_r26)); var_r29->scale.y = var_r29->scale.z = var_r29->scale.x; } else { var_f24 = (0xFF - (var_r26 << 5)); var_f24 = var_f24 * 0.003921569f; // 1 / 255 Hu3DModelTPLvlSet(lbl_1_bss_B8->model[3], var_f24); } var_r29->pos.y += -0.49f * var_r26 * var_r26; } } break; case 5: if (var_r31->unk_1C == 0) { Hu3DModelAttrReset(lbl_1_bss_B8->model[lbl_1_bss_18 + 4], HU3D_MOTATTR_PAUSE); lbl_1_bss_28C[lbl_1_bss_18].unk_0C = 0; if (lbl_1_bss_CC[0].unk_00 < 3) { lbl_1_bss_CC[0].unk_04[lbl_1_bss_CC->unk_00] = 0.0f; lbl_1_bss_CC[0].unk_00++; } } var_r31->unk_1C++; if ((var_r31->unk_1C == 0x3C) && (*lbl_1_data_138 != -1)) { Hu3DParManKill(*lbl_1_data_138); lbl_1_data_138[0] = -1; } if (var_r31->unk_1C == 0x21) { Hu3DModelAttrSet(lbl_1_bss_B8->model[lbl_1_bss_18 + 4], HU3D_MOTATTR_PAUSE); } if (var_r31->unk_1C == 0x3F) { Hu3DModelAttrReset(lbl_1_bss_B8->model[lbl_1_bss_18 + 4], HU3D_MOTATTR_PAUSE); } if ((var_r31->unk_1C == 0x44) && (lbl_1_bss_CC[1].unk_00 < 3)) { lbl_1_bss_CC[1].unk_04[lbl_1_bss_CC[1].unk_00] = 0.0f; lbl_1_bss_CC[1].unk_00++; } if (var_r31->unk_1C == 0x82) { var_r31->unk_18 = 0; var_r31->unk_1C = 0; } break; } if (((var_r31->unk_18 == 3) || (var_r31->unk_18 == 4)) && (lbl_1_data_15C >= 0)) { lbl_1_data_15C++; if (lbl_1_data_15C >= 6) { spA4 = lbl_1_bss_18; for (spA8 = 0; spA8 < 0x32; spA8++) { loop_344: lbl_1_bss_18 = rand8() % 11; if (lbl_1_bss_18 >= 9) { if (lbl_1_bss_18 == (var_r31->unk_00 + 9)) { goto loop_344; } } if ((lbl_1_bss_18 < 9) && (lbl_1_bss_28C[lbl_1_bss_18].unk_0C == 0)) { goto loop_344; } if (spA4 != lbl_1_bss_18) { break; } } spA4 = lbl_1_bss_18 >= 9 ? (var_r27->unk_08 == -1 ? 0x11 : (var_r27->unk_08 + 9)) : lbl_1_bss_18; lbl_1_data_15C = 0; Hu3DMotionTimeSet(lbl_1_bss_B8->model[3], 0.5 + spA4); } } if (var_r31->unk_24 >= 0) { var_r28 = var_r31->unk_24; } if ((var_r28 >= 0) && (var_r28 != var_r31->unk_20)) { Hu3DMotionShiftSet(object->model[0], object->motion[var_r28], lbl_1_data_C4[var_r28], (var_r31->unk_08 != -1 ? lbl_1_data_9C[var_r28] : lbl_1_data_EC[var_r28]), (var_r28 == 8 ? 0x40000002 : (var_r31->unk_08 != -1 ? lbl_1_data_88[var_r28] : lbl_1_data_92[var_r28]) != 0 ? 0 : 0x40000001)); var_r31->unk_20 = var_r28; } } s32 lbl_1_data_1A0 = -1; float lbl_1_data_1A4 = 3500.0f; float lbl_1_data_1A8 = 100.0f; float lbl_1_data_1AC = -59.0f; void fn_1_350C(omObjData *var_r27) { M458DllWork *spC[2]; float var_f31; float var_f29; float var_f27; float var_f26; float var_f25; float var_f19; s32 var_r31; s32 var_r30; ModelData *var_r29; ModelData *var_r28; ModelData *var_r26; s32 var_r25; s32 var_r24; s32 var_r23; for (var_r31 = 0; var_r31 < 2; var_r31++) { spC[var_r31] = (&lbl_1_bss_BC)[var_r31]->data; } lbl_1_bss_4++; switch (lbl_1_bss_B0) { case 0x3EA: if (lbl_1_bss_B4 <= 0x77) { var_f27 = lbl_1_bss_B4 / 119.0; var_f27 = var_f27 > 1.0f ? 1.0f : var_f27; Hu3DModelPosSet(lbl_1_bss_B8->model[2], 0.0f, 100.0f + (-1500.0f * (1.0f - var_f27)), -950.0f); Hu3DModelAttrReset(lbl_1_bss_B8->model[1], HU3D_ATTR_DISPOFF); Hu3DModelAttrReset(lbl_1_bss_B8->model[2], HU3D_ATTR_DISPOFF); } break; case 0x3EB: if (lbl_1_bss_B4 == 0) { lbl_1_bss_8C = 0; } if (lbl_1_bss_B4 == 0x14) { espAttrReset(lbl_1_data_8[0], HUSPR_ATTR_DISPOFF); } if (((lbl_1_bss_B4 >= 0x14) && (lbl_1_bss_B4 <= 0x32)) || ((lbl_1_bss_B4 >= 0xB4) && (lbl_1_bss_B4 <= 0xD2))) { var_f19 = lbl_1_bss_B4 <= 0x78 ? ((lbl_1_bss_B4 - 0x14) / 30.0) : (1.0 - ((lbl_1_bss_B4 - 0xB4) / 30.0)); espTPLvlSet(lbl_1_data_8[0], var_f19); } if (lbl_1_bss_B4 == 0xD2) { espAttrSet(lbl_1_data_8[0], HUSPR_ATTR_DISPOFF); } case 0x3EC: case 0x3ED: lbl_1_bss_8C++; lbl_1_bss_8C %= 0x168; if (lbl_1_bss_14 != 0) { Hu3DModelPosSet(lbl_1_bss_B8->model[2], 0.0f, 100.0 + (25.0 * sind((360.0 * ((lbl_1_bss_8C % 360) / 360.0)))), -950.0f); } break; case 0x3EE: if (lbl_1_bss_14 != 0) { var_r26 = &Hu3DData[lbl_1_bss_B8->model[2]]; if (lbl_1_bss_B4 >= 7) { var_r26->pos.y += 12.5; } if (lbl_1_bss_B4 == 0) { Hu3DMotionShiftSet(var_r27->model[1], var_r27->motion[1], 0.0f, 8.0f, HU3D_MOTATTR_LOOP); } } else { var_r29 = &Hu3DData[lbl_1_bss_B8->model[spC[0]->unk_38 + 4]]; if (lbl_1_bss_20 == 0) { lbl_1_bss_20 = 1; HuAudFXPlay(0x7F6); } if (lbl_1_bss_B4 == 1) { lbl_1_bss_28C[spC[0]->unk_38].unk_08 = 83.333336f; } var_r29->pos.y = (0.9 * var_r29->pos.y) + (0.1 * lbl_1_bss_28C[spC[0]->unk_38].unk_08); lbl_1_bss_BC->trans.y = var_r29->pos.y - -16.666666666666668; } break; case 0x3F0: Hu3DModelAttrSet(lbl_1_bss_B8->model[1], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(lbl_1_bss_B8->model[2], HU3D_ATTR_DISPOFF); if (lbl_1_bss_B4 <= 0x3C) { var_f29 = lbl_1_bss_B4 / 60.0; var_f29 = var_f29; var_f29 = 1.0f - ((1.0f - var_f29) * (1.0f - var_f29)); if (lbl_1_bss_B4 == 0) { lbl_1_bss_28C[spC[0]->unk_38].unk_08 = -16.666666f; } for (var_r31 = 0; var_r31 < 9; var_r31++) { var_r28 = &Hu3DData[lbl_1_bss_B8->model[var_r31 + 4]]; Hu3DModelPosSet(lbl_1_bss_B8->model[var_r31 + 4], (500.0 + (200.0f * var_f29)) * (lbl_1_bss_28C[var_r31].unk_00 - 1), (0.9 * var_r28->pos.y) + (0.1 * lbl_1_bss_28C[spC[0]->unk_38].unk_08), (500.0 + (200.0f * var_f29)) * (lbl_1_bss_28C[var_r31].unk_04 - 1)); for (var_r30 = 0; var_r30 < 2; var_r30++) { if (var_r31 == spC[var_r30]->unk_38) { (&lbl_1_bss_BC)[var_r30]->trans.x = (500.0 + (200.0f * var_f29)) * (lbl_1_bss_28C[var_r31].unk_00 - 1); (&lbl_1_bss_BC)[var_r30]->trans.y = var_r28->pos.y - -16.666666666666668; (&lbl_1_bss_BC)[var_r30]->trans.z = (500.0 + (200.0f * var_f29)) * (lbl_1_bss_28C[var_r31].unk_04 - 1); } } } } break; } var_r25 = lbl_1_data_1A0; { UnkCameraStruct sp14[6] = { { 3500.0f, 0.0f, 100.0f, 0.0f, -59.0f, 0.0f }, { 3200.0f, 0.0f, 100.0f, 0.0f, -30.0f, 0.0f }, { 3800.0f, 0.0f, 100.0f, 0.0f, -30.0f, 0.0f }, { 2000.0f, 0.0f, 200.0f, 0.0f, -30.0f, 0.0f }, { 800.0f, 0.0f, 200.0f, 0.0f, -89.0f, 0.0f }, { 1800.0f, 0.0f, 200.0f, 0.0f, -30.0f, 0.0f }, }; if (lbl_1_bss_98 != -1) { sp14[3].unk_04 = (&lbl_1_bss_BC)[1 - lbl_1_bss_98]->trans.x; sp14[3].unk_0C = (&lbl_1_bss_BC)[1 - lbl_1_bss_98]->trans.z; sp14[4].unk_04 = (&lbl_1_bss_BC)[1 - lbl_1_bss_98]->trans.x; sp14[4].unk_0C = (&lbl_1_bss_BC)[1 - lbl_1_bss_98]->trans.z; sp14[5].unk_04 = (&lbl_1_bss_BC)[lbl_1_bss_98]->trans.x; sp14[5].unk_0C = (&lbl_1_bss_BC)[lbl_1_bss_98]->trans.z; } if (lbl_1_data_1A0 == -1) { lbl_1_data_1A0 = 0; lbl_1_bss_24 = 1; lbl_1_bss_28 = 1.0f; } if (lbl_1_data_1A0 == 0) { lbl_1_data_1A0 = 1; lbl_1_bss_24 = 1; lbl_1_bss_28 = 0.5f; } if ((lbl_1_bss_B0 == 0x3F0) && (lbl_1_bss_B4 >= 1) && (lbl_1_data_1A0 == 1)) { lbl_1_data_1A0 = 2; lbl_1_bss_24 = 0; lbl_1_bss_28 = 0.0f; } if ((lbl_1_bss_B0 == 0x3F3) && (lbl_1_data_1A0 == 2)) { lbl_1_data_1A0 = 3; lbl_1_bss_24 = 0; lbl_1_bss_28 = 0.0f; } if ((lbl_1_bss_B0 == 0x3F3) && (lbl_1_bss_B4 >= 0x12C) && (lbl_1_data_1A0 == 3)) { lbl_1_data_1A0 = 4; lbl_1_bss_24 = 1; lbl_1_bss_28 = 1.0f; } if ((lbl_1_bss_B0 == 0x3F4) && (lbl_1_data_1A0 == 4)) { lbl_1_data_1A0 = 5; lbl_1_bss_24 = 0; lbl_1_bss_28 = 0.0f; } if ((var_r25 != lbl_1_data_1A0) && (var_r25 != -1)) { lbl_1_data_1A4 = CZoom; lbl_1_data_1A8 = Center.y; lbl_1_bss_30 = Center.z; lbl_1_data_1AC = CRot.x; lbl_1_bss_34 = CRot.y; } if (lbl_1_bss_28 <= 1.0f) { if (lbl_1_bss_24 == 0) { lbl_1_bss_28 = 1.0 - (0.95 * (1.0f - lbl_1_bss_28)); var_f31 = lbl_1_bss_28; } else { lbl_1_bss_28 += 0.008333333333333333; lbl_1_bss_28 = lbl_1_bss_28 > 1.0f ? 1.0f : lbl_1_bss_28; var_f31 = 0.5 + (-0.5 * cosd((180.0f * lbl_1_bss_28))); var_f31 = var_f31; } lbl_1_bss_28 = lbl_1_bss_28 > 1.0f ? 1.0f : lbl_1_bss_28; CZoom = (var_f31 * sp14[lbl_1_data_1A0].unk_00) + (lbl_1_data_1A4 * (1.0f - var_f31)); Center.x = (var_f31 * sp14[lbl_1_data_1A0].unk_04) + (lbl_1_bss_2C * (1.0f - var_f31)); Center.y = (var_f31 * sp14[lbl_1_data_1A0].unk_08) + (lbl_1_data_1A8 * (1.0f - var_f31)); Center.z = (var_f31 * sp14[lbl_1_data_1A0].unk_0C) + (lbl_1_bss_30 * (1.0f - var_f31)); CRot.x = (var_f31 * sp14[lbl_1_data_1A0].unk_10) + (lbl_1_data_1AC * (1.0f - var_f31)); CRot.y = (var_f31 * sp14[lbl_1_data_1A0].unk_14) + (lbl_1_bss_34 * (1.0f - var_f31)); } } if ((lbl_1_bss_B0 == 0x3E9) || (lbl_1_bss_B0 == 0x3EE)) { var_f25 = 0.0f; var_f26 = 0.0f; if ((lbl_1_data_114.unk_00 % 2) >= 0) { lbl_1_data_114.unk_08 = lbl_1_data_114.unk_10; lbl_1_data_114.unk_0C = lbl_1_data_114.unk_14; do { lbl_1_data_114.unk_10 = 2.0 * (rand8() / 255.0) - 1.0; lbl_1_data_114.unk_14 = (2.0 * (rand8() / 255.0)) - 1.0; lbl_1_data_114.unk_10 = 0.0f; } while (sqrtf(((lbl_1_data_114.unk_10 - lbl_1_data_114.unk_08) * (lbl_1_data_114.unk_10 - lbl_1_data_114.unk_08)) + ((lbl_1_data_114.unk_14 - lbl_1_data_114.unk_0C) * (lbl_1_data_114.unk_14 - lbl_1_data_114.unk_0C))) < 0.75); } var_f25 = lbl_1_data_114.unk_08; var_f26 = lbl_1_data_114.unk_0C; var_f25 *= lbl_1_data_114.unk_04 * 2; var_f26 *= lbl_1_data_114.unk_04 * 2; lbl_1_data_114.unk_00 = !lbl_1_data_114.unk_00; if (lbl_1_data_114.unk_04 > 0x18) { var_r24 = 0x17; } else { if ((lbl_1_data_114.unk_04 - 1) > 0) { var_r23 = lbl_1_data_114.unk_04 - 1; } else { var_r23 = 0; } var_r24 = var_r23; } lbl_1_data_114.unk_04 = var_r24; Center.x = 0.0f; Center.y = 100.0f + var_f26; } } const HsfanimStruct00 lbl_1_rodata_2A0 = { 0x0096, { 0x00, 0x00 }, 50.0f, 0.0f, 65.0f, { 0.0f, -0.195f, 0.0f }, 100.0f, 0.99f, 40.0f, 0.999f, 4, { { 0xFF, 0xFF, 0x20, 0xFF }, { 0xFF, 0xFF, 0x00, 0xFF }, { 0xFF, 0xFF, 0x80, 0xFF }, { 0xFF, 0xFF, 0xFF, 0xFF }, }, { { 0xFF, 0xFF, 0xFF, 0x00 }, { 0xFF, 0xFF, 0xFF, 0x00 }, { 0xFF, 0xFF, 0xFF, 0x00 }, { 0xFF, 0xFF, 0xFF, 0x00 }, }, }; s16 fn_1_4BE8(void) { s16 var_r31; s16 var_r30; AnimData *var_r29; void *var_r28; HsfanimStruct00 sp8 = lbl_1_rodata_2A0; lbl_1_bss_3C = sp8; var_r28 = HuDataSelHeapReadNum(0x7006B, MEMORY_DEFAULT_NUM, HEAP_DATA); var_r29 = HuSprAnimRead(var_r28); var_r31 = Hu3DParManCreate(var_r29, 0x64, &lbl_1_bss_3C); Hu3DParManAttrSet(var_r31, 0x108); Hu3DParManRotSet(var_r31, 0.0f, 0.0f, 0.0f); Hu3DParManVecSet(var_r31, 0.0f, 0.4f, 0.2f); var_r30 = Hu3DParManModelIDGet(var_r31); Hu3DModelLayerSet(var_r30, 2); Hu3DParticleBlendModeSet(var_r30, 0); return var_r31; } void fn_1_4D44(void) { M458DllWork *spC[2]; s16 sp8; s16 var_r31; s32 var_r30; WindowData *var_r29; s32 var_r28; s32 var_r27; s32 var_r26; s32 var_r25; sp8 = 0; for (var_r30 = 0; var_r30 < 2; var_r30++) { spC[var_r30] = (&lbl_1_bss_BC)[var_r30]->data; } HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C); HuWinComKeyReset(); var_r31 = HuWinExCreateStyled(36.0f, 344.0f, 0x1F8, 0x60, 6, 0); var_r29 = &winData[var_r31]; if (spC[1]->unk_0C != -1) { var_r28 = 1 << spC[1]->unk_0C; } else { if (spC[1]->unk_08 != -1) { var_r27 = 1 << GWPlayerCfg[spC[1]->unk_04].pad_idx; } else { var_r27 = 0; } var_r28 = var_r27; } if (spC[0]->unk_0C != -1) { var_r26 = 1 << spC[0]->unk_0C; } else { if (spC[0]->unk_08 != -1) { var_r25 = 1 << GWPlayerCfg[spC[0]->unk_04].pad_idx; } else { var_r25 = 0; } var_r26 = var_r25; } var_r29->active_pad = var_r26 | var_r28; OSReport("%d\n", var_r29->active_pad); HuWinBGTPLvlSet(var_r31, 0.8f); HuWinMesSpeedSet(var_r31, 1); HuWinExAnimIn(var_r31); HuWinMesSet(var_r31, 0x300024); if (((spC[0]->unk_0C == -1) || (spC[0]->unk_08 == -1)) && ((spC[1]->unk_0C == -1) || (spC[1]->unk_08 == -1))) { HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C); HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C); HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C); HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C); HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C); } HuWinMesWait(var_r31); HuWinExAnimOut(var_r31); HuWinExCleanup(var_r31); lbl_1_bss_10 = 0; HuPrcEnd(); } void fn_1_5014(omObjData *var_r30) { M458DllWork *spC[2]; s32 sp8; s32 var_r31; for (var_r31 = 0; var_r31 < 0x1C; var_r31++) { s32 sp14[] = { 0x7F1, 0x7F2, 0x7F7, 0x7F8, 0x7F9, 0x7FA, 0x7FB, 0x7FC, 0x7FD, 0x7FE, 0x7FF, 0x800, 0x801, 0x802, 0x803, 0x804, 0x7FB, 0x7FC, 0x7FD, 0x7FE, 0x7FF, 0x800, 0x801, 0x802, 0x803, 0x804, 0x7FB, 0x7FC, }; if (lbl_1_bss_CC[var_r31].unk_00 > 3) { lbl_1_bss_CC[var_r31].unk_00 = 3; } if (lbl_1_bss_CC[var_r31].unk_00 > 0) { sp8 = HuAudFXPlay(sp14[var_r31]); lbl_1_bss_CC[var_r31].unk_00--; } } for (var_r31 = 0; var_r31 < 2; var_r31++) { spC[var_r31] = (&lbl_1_bss_BC)[var_r31]->data; } if ((omSysExitReq != 0) && (WipeStatGet() == 0)) { WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); var_r30->func = fn_1_6D9C; } switch (lbl_1_bss_B0) { case 0x3E8: if (WipeStatGet() == 0) { lbl_1_bss_B0++; lbl_1_bss_B4 = 0.0f; if (lbl_1_data_138[0] != -1) { Hu3DParManKill(*lbl_1_data_138); lbl_1_data_138[0] = -1; } } default: break; case 0x3E9: lbl_1_bss_B4++; if (lbl_1_bss_B4 == ((lbl_1_bss_14 == 0 ? 0x1E : 0) + 0x3C)) { lbl_1_bss_B0 = lbl_1_bss_14 != 0 ? 0x3EA : 0x3ED; lbl_1_bss_B4 = 0.0f; } break; case 0x3EA: lbl_1_bss_B4++; if (lbl_1_bss_B4 == 0x78) { lbl_1_bss_B0++; lbl_1_bss_B4 = 0.0f; } break; case 0x3EB: lbl_1_bss_B4++; if (lbl_1_bss_B4 > 0xD2) { lbl_1_bss_B0++; lbl_1_bss_B4 = 0.0f; } break; case 0x3EC: if (lbl_1_bss_B4 == 0) { HuPrcChildCreate(fn_1_4D44, 0x64, 0x2000, 0, HuPrcCurrentGet()); lbl_1_bss_10 = 1; lbl_1_bss_B4++; break; } if (lbl_1_bss_10 == 0) { lbl_1_bss_B4++; if (spC[0]->unk_18 == 0) { lbl_1_bss_B0++; lbl_1_bss_B4 = 0.0f; } } break; case 0x3ED: lbl_1_bss_B4 += lbl_1_bss_B4 < 0x1E; if (lbl_1_bss_B4 >= 0x3C) { lbl_1_bss_B0++; lbl_1_bss_B4 = 0.0f; } break; case 0x3EE: lbl_1_bss_B4++; if (lbl_1_bss_B4 == ((spC[1]->unk_08 == -1 ? 0x78 : 0x3C) + (lbl_1_bss_14 == 0 ? 0x1E : 0))) { lbl_1_bss_B0++; if (spC[1]->unk_08 == -1) { lbl_1_bss_B0++; } lbl_1_bss_B4 = 0.0f; } break; case 0x3EF: lbl_1_bss_B4 += lbl_1_bss_B4 < 0x1E; if (lbl_1_bss_B4 >= 0x3C) { lbl_1_bss_B0++; lbl_1_bss_B4 = 0.0f; } break; case 0x3F0: lbl_1_bss_B4++; if (lbl_1_bss_B4 == 0x5A) { lbl_1_bss_B0++; lbl_1_bss_B4 = 0.0f; } break; case 0x3F1: case 0x3F2: if (lbl_1_bss_B4 == 0) { spC[lbl_1_bss_B0 == 0x3F1 ? 0 : 1]->unk_18 = 3; spC[lbl_1_bss_B0 == 0x3F1 ? 0 : 1]->unk_1C = 0; } lbl_1_bss_B4++; if (spC[lbl_1_bss_B0 == 0x3F1 ? 0 : 1]->unk_18 == 0) { if (lbl_1_bss_98 != -1) { lbl_1_bss_B0 = 0x3F3; } else { lbl_1_bss_B0 = lbl_1_bss_B0 == 0x3F1 ? 0x3F2 : 0x3F1; } lbl_1_bss_B4 = 0.0f; } break; case 0x3F3: lbl_1_bss_B4++; if (lbl_1_bss_B4 >= 0x1E0) { lbl_1_bss_B0++; lbl_1_bss_B4 = 0.0f; } break; case 0x3F4: lbl_1_bss_B4++; if (lbl_1_bss_B4 == 1) { if (lbl_1_bss_98 != 4) { if (spC[lbl_1_bss_98]->unk_08 != -1) { HuAudSStreamPlay(1); } else { HuAudSStreamPlay(3); } if (lbl_1_bss_14 != 0) { if (lbl_1_bss_98 == 0) { _SetFlag(0x10007); } } else { GWPlayerCoinWinSet(spC[lbl_1_bss_98]->unk_04, 10); } } else { lbl_1_bss_98 == 4; } } if (210.0f < lbl_1_bss_B4) { if (lbl_1_data_134 != -1) { HuAudFXStop(lbl_1_data_134); lbl_1_data_134 = -1; } lbl_1_data_12C = -1; WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 0x3C); var_r30->func = fn_1_6D9C; } break; } } s32 lbl_1_data_1E8[0xB] = { 0x570013, 0x570014, 0x570015, 0x570016, 0x570017, 0x570018, 0x570019, 0x57001A, 0x57001B, 0x57001C, 0x57001D, }; void fn_1_59DC(omObjData *object) { M458DllWork *sp18[2]; s32 var_r30; s16 var_r29; s16 var_r28; s32 var_r27; void *var_r26; AnimData *var_r25; s16 var_r24; s16 var_r23; for (var_r30 = 0; var_r30 < 2; var_r30++) { sp18[var_r30] = (&lbl_1_bss_BC)[var_r30]->data; } object->model[1] = Hu3DModelCreateFile(0x3000E); Hu3DModelAttrSet(object->model[1], HU3D_MOTATTR_LOOP); object->model[2] = Hu3DModelCreateFile(0x30000); Hu3DModelAttrSet(object->model[2], HU3D_MOTATTR_LOOP); Hu3DModelHookSet(object->model[2], "minik01", object->model[1]); Hu3DModelPosSet(object->model[2], 0.0f, -750.0f, -700.0f); Hu3DModelAttrSet(object->model[1], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF); object->motion[0] = Hu3DJointMotionFile(object->model[1], 0x3000F); object->motion[1] = Hu3DJointMotionFile(object->model[1], 0x30012); Hu3DMotionSet(object->model[1], object->motion[0]); Hu3DModelLayerSet(object->model[2], 1); Hu3DModelLayerSet(object->model[1], 1); object->model[0] = Hu3DModelCreateFile(0x570008); Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP); Hu3DMotionSpeedSet(object->model[0], 0.1f); object->model[3] = Hu3DModelCreateFile(0x570009); Hu3DModelAttrSet(object->model[3], HU3D_MOTATTR_LOOP); Hu3DModelPosSet(object->model[3], 0.0f, 400.0f, 0.0f); Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF); Hu3DModelLayerSet(object->model[3], 1); Hu3DMotionSpeedSet(object->model[3], 0.0f); for (var_r30 = 0; var_r30 < 9; var_r30++) { object->model[var_r30 + 4] = Hu3DModelCreateFile(var_r30 + 0x57000A); lbl_1_bss_28C[var_r30].unk_00 = var_r30 % 3; lbl_1_bss_28C[var_r30].unk_04 = var_r30 / 3; lbl_1_bss_28C[var_r30].unk_08 = 0.0f; lbl_1_bss_28C[var_r30].unk_0C = 1; Hu3DModelPosSet( lbl_1_bss_B8->model[var_r30 + 4], 500.0 * (lbl_1_bss_28C[var_r30].unk_00 - 1), -16.666666f, 500.0 * (lbl_1_bss_28C[var_r30].unk_04 - 1)); Hu3DModelScaleSet(lbl_1_bss_B8->model[var_r30 + 4], 1.6666666f, 1.6666666f, 1.6666666f); Hu3DModelAttrSet(object->model[var_r30 + 4], HU3D_MOTATTR_PAUSE); Hu3DModelShadowMapSet(object->model[var_r30 + 4]); Hu3DModelLayerSet(object->model[var_r30 + 4], 1); } for (var_r30 = 0; var_r30 < 0xB; var_r30++) { if ((var_r30 == 9) || (var_r30 == 0xA)) { if (sp18[var_r30 - 9]->unk_08 != -1) { var_r27 = sp18[var_r30 - 9]->unk_08 + 0x57001C; } else { var_r27 = 0x570024; } lbl_1_data_1E8[var_r30] = var_r27; } object->model[var_r30 + 0xD] = Hu3DModelCreateFile(lbl_1_data_1E8[var_r30]); Hu3DMotionTimeSet(object->model[var_r30 + 0xD], 10.0f); Hu3DMotionSpeedSet(object->model[var_r30 + 0xD], 0.0f); Hu3DModelAttrSet(object->model[var_r30 + 0xD], HU3D_ATTR_DISPOFF); Hu3DModelLayerSet(object->model[var_r30 + 0xD], 1); } for (var_r30 = 0; var_r30 < 2; var_r30++) { s32 sp10[2] = { 0x120, 0x122 }; s32 sp8[2] = { 0xF0, 0x8C }; lbl_1_data_8[var_r30] = espEntry(lbl_1_data_0[var_r30], 0, 0); espDrawNoSet(lbl_1_data_8[var_r30], 0); espAttrSet(lbl_1_data_8[var_r30], HUSPR_ATTR_NOANIM | HUSPR_ATTR_DISPOFF); espBankSet(lbl_1_data_8[var_r30], 0); espPriSet(lbl_1_data_8[var_r30], 0x80 - var_r30); espPosSet(lbl_1_data_8[var_r30], sp10[var_r30], sp8[var_r30]); espTPLvlSet(lbl_1_data_8[var_r30], 1.0f); } { HsfanimStruct00 sp20 = lbl_1_rodata_2A0; lbl_1_bss_3C = sp20; } var_r26 = HuDataSelHeapReadNum(0x7006B, MEMORY_DEFAULT_NUM, HEAP_DATA); var_r25 = HuSprAnimRead(var_r26); var_r29 = Hu3DParManCreate(var_r25, 0x64, &lbl_1_bss_3C); Hu3DParManAttrSet(var_r29, 0x108); Hu3DParManRotSet(var_r29, 0.0f, 0.0f, 0.0f); Hu3DParManVecSet(var_r29, 0.0f, 0.4f, 0.2f); var_r28 = Hu3DParManModelIDGet(var_r29); Hu3DModelLayerSet(var_r28, 2); Hu3DParticleBlendModeSet(var_r28, 0); var_r24 = var_r29; var_r23 = var_r24; lbl_1_data_138[0] = var_r23; Hu3DParManPosSet(lbl_1_data_138[0], 10000.0f, -10000.0f, 10000.0f); object->func = fn_1_350C; } void fn_1_6314(omObjData *object) { s32 sp10; void *spC; s32 sp8; M458DllWork *var_r31; s32 var_r29; s32 var_r28; s32 var_r27; s32 var_r26; s32 var_r25; s32 var_r24; s32 var_r23; s32 var_r22; s32 var_r21; s32 var_r20; s32 var_r19; s32 var_r18; s32 var_r17; var_r31 = object->data; spC = (&lbl_1_bss_BC)[1 - object->work[0]]->data; memset(var_r31, 0, 0x44); var_r31->unk_00 = object->work[0]; // probably ternary, but it causes regswaps if (GWPlayerCfg->group == var_r31->unk_00) { var_r28 = 0; } else { if (GWPlayerCfg[1].group == var_r31->unk_00) { var_r27 = 1; } else { if (GWPlayerCfg[2].group == var_r31->unk_00) { var_r26 = 2; } else { if (GWPlayerCfg[3].group == var_r31->unk_00) { var_r25 = 3; } else { var_r25 = 4; } var_r26 = var_r25; } var_r27 = var_r26; } var_r28 = var_r27; } var_r31->unk_04 = var_r28; if (GWPlayerCfg->group == (1 - var_r31->unk_00)) { var_r24 = 0; } else { if (GWPlayerCfg[1].group == (1 - var_r31->unk_00)) { var_r23 = 1; } else { if (GWPlayerCfg[2].group == (1 - var_r31->unk_00)) { var_r22 = 2; } else { if (GWPlayerCfg[3].group == (1 - var_r31->unk_00)) { var_r21 = 3; } else { var_r21 = 4; } var_r22 = var_r21; } var_r23 = var_r22; } var_r24 = var_r23; } sp10 = var_r24; if (var_r31->unk_04 == 4) { OSReport("m458:wrong player group\n"); var_r31->unk_04 = var_r31->unk_00; } if ((var_r31->unk_00 == 1) && (lbl_1_bss_14 != 0)) { var_r31->unk_08 = -1; var_r31->unk_0C = -1; var_r31->unk_04 = -1; var_r31->unk_10 = 0; } else { var_r31->unk_08 = GWPlayerCfg[var_r31->unk_04].character; var_r20 = 1; if ((var_r31->unk_08 != -1) && (GWPlayerCfg[var_r31->unk_04].iscom == 0)) { var_r20 = 0; } var_r31->unk_0C = var_r20 != 0 ? -1 : GWPlayerCfg[var_r31->unk_04].pad_idx; var_r31->unk_10 = var_r31->unk_0C != -1 ? 0 : GWPlayerCfg[var_r31->unk_04].diff; } var_r31->unk_18 = 0; var_r31->unk_20 = 3; var_r31->unk_24 = -1; if (var_r31->unk_08 != -1) { object->model[0] = CharModelCreate(var_r31->unk_08, 1); } else { object->model[0] = Hu3DModelCreateFile(0x30007); } omSetTra(object, 0.0f, var_r31->unk_00 == 0 ? 0 : 0x12C, 0.0f); if (var_r31->unk_08 != -1) { omSetSca(object, 2.5f, 2.5f, 2.5f); } else { omSetSca(object, 2.0f, 2.0f, 2.0f); } for (var_r29 = 0; var_r29 < 0xA; var_r29++) { if (var_r31->unk_08 != -1) { object->motion[var_r29] = CharModelMotionCreate(var_r31->unk_08, lbl_1_data_10[var_r29] + (lbl_1_data_38[var_r29] != 0 ? var_r31->unk_08 : 0)); } else if (lbl_1_data_60[var_r29] != 0) { object->motion[var_r29] = Hu3DJointMotionFile(object->model[0], lbl_1_data_60[var_r29]); } } Hu3DMotionSet(object->model[0], object->motion[var_r31->unk_20]); Hu3DMotionTimeSet(object->model[0], 10.0f); Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_LOOP); Hu3DModelShadowSet(object->model[0]); Hu3DModelAttrSet(object->model[0], HU3D_ATTR_DISPOFF); Hu3DModelLayerSet(object->model[0], 1); CharModelLayerSetAll2(1); object->func = fn_1_4C8; } void fn_1_685C(omObjData *object) { lbl_1_bss_B0 = 0x3E8; lbl_1_bss_B4 = 0.0f; lbl_1_bss_A8 = 0; lbl_1_bss_A4 = 0; if (lbl_1_data_130 == -1) { lbl_1_data_130 = HuAudSeqPlay(0x4D); } lbl_1_data_134 = HuAudFXPlay(0x6D7); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); object->func = fn_1_5014; } void ObjectSetup(void) { s32 i; omObjData *object; OSReport("******* M458 ObjectSetup *********\n"); lbl_1_bss_A0 = omInitObjMan(0x258, 0x2000); omGameSysInit(lbl_1_bss_A0); Hu3DCameraCreate(1); Hu3DCameraPerspectiveSet(1, 30.0f, 20.0f, 25000.0f, 1.2f); Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); CZoom = 3200.0f; Center.x = 0.0f; Center.y = 0.0f; Center.z = -100.0f; CRot.x = -30.0f; CRot.y = 0.0f; CRot.z = 0.0f; { Vec sp3C = { 0.0f, 0.0f, 0.0f }; Vec sp30 = { 0.25f, -0.75f, -0.45f }; GXColor sp8 = { 255, 255, 255, 255 }; lbl_1_bss_9C = Hu3DGLightCreateV(&sp3C, &sp30, &sp8); Hu3DGLightStaticSet(lbl_1_bss_9C, 1); Hu3DGLightInfinitytSet(lbl_1_bss_9C); } { Vec sp24; Vec sp18; Vec spC; sp24.x = 0.0f; sp24.y = 10000.0f; sp24.z = 0.0f; sp18.x = 0.0f; sp18.y = 1.0f; sp18.z = 0.0f; spC.x = 0.0f; spC.y = 0.0f; spC.z = 0.5f; Hu3DShadowCreate(12.0f, 9000.0f, 10010.0f); Hu3DShadowTPLvlSet(0.625f); Hu3DShadowPosSet(&sp24, &sp18, &spC); } Hu3DShadowSizeSet(0xE0); lbl_1_data_12C = -1; lbl_1_bss_98 = -1; lbl_1_bss_14 = _CheckFlag(0x10000) != 0; HuWinInit(1); lbl_1_bss_B8 = omAddObjEx(lbl_1_bss_A0, 0x65, 0x18, 2, 1, fn_1_59DC); for (i = 0; i < 2; i++) { object = (&lbl_1_bss_BC)[i] = omAddObjEx(lbl_1_bss_A0, 0x64, 0xB, 0xA, 0, fn_1_6314); object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M458DllWork), MEMORY_DEFAULT_NUM); object->work[0] = i; } lbl_1_bss_C4 = omAddObjEx(lbl_1_bss_A0, 0x7FDA, 0, 0, -1, omOutView); lbl_1_bss_C8 = omAddObjEx(lbl_1_bss_A0, 0x67, 0, 0, -1, fn_1_685C); } void fn_1_6D9C(omObjData *object) { if (lbl_1_data_138[0] != -1) { Hu3DParManKill(lbl_1_data_138[0]); lbl_1_data_138[0] = -1; } if (WipeStatGet() == 0) { s32 i; for (i = 0; i < 2; i++) { void *sp8 = (&lbl_1_bss_BC)[i]->data; } if (lbl_1_data_12C >= 0) { MGSeqKill(lbl_1_data_12C); } MGSeqKillAll(); HuAudAllStop(); omOvlReturnEx(1, 1); } }