#include "ext_math.h" #include "game/audio.h" #include "game/chrman.h" #include "game/flag.h" #include "game/frand.h" #include "game/hsfanim.h" #include "game/hsfdraw.h" #include "game/hsfman.h" #include "game/hsfmotion.h" #include "game/sprite.h" #include "math.h" #include "string.h" #include "REL/m453Dll.h" typedef struct M453MapUnkStruct { struct { u8 unk_00_field0 : 1; }; s32 unk_04; float unk_08; s32 unk_0C[6]; s32 unk_24[0xC]; } M453MapUnkStruct; /* size = 0x54 */ void fn_1_6768(omObjData *object); void fn_1_67EC(omObjData *object); void fn_1_67F0(omObjData *object); void fn_1_695C(omObjData *object); void fn_1_6C74(omObjData *object); void fn_1_6EB4(omObjData *object); void fn_1_6FC4(omObjData *object); void fn_1_73C4(omObjData *object); void fn_1_7978(void); void fn_1_7A74(s16 arg0); Vec lbl_1_data_158[0x10] = { { 92.39f, 0.0f, 38.27f }, { 100.0f, 0.0f, 0.0f }, { 92.39f, 0.0f, -38.27f }, { 70.71f, 0.0f, -70.71f }, { 38.27f, 0.0f, -92.39f }, { 0.0f, 0.0f, -100.0f }, { -38.27f, 0.0f, -92.39f }, { -70.71f, 0.0f, -70.71f }, { -92.39f, 0.0f, -38.27f }, { -100.0f, 0.0f, 0.0f }, { -92.39f, 0.0f, 38.27f }, { -70.71f, 0.0f, 70.71f }, { -38.27f, 0.0f, 92.39f }, { 0.0f, 0.0f, 100.0f }, { 38.27f, 0.0f, 92.39f }, { 70.71f, 0.0f, 70.71f }, }; Vec lbl_1_data_218[0x10] = { { 55.43f, 0.0f, 22.96f }, { 60.0f, 0.0f, 0.0f }, { 55.43f, 0.0f, -22.96f }, { 42.43f, 0.0f, -42.43f }, { 22.96f, 0.0f, -55.43f }, { 0.0f, 0.0f, -60.0f }, { -22.96f, 0.0f, -55.43f }, { -42.43f, 0.0f, -42.43f }, { -55.43f, 0.0f, -22.96f }, { -60.0f, 0.0f, 0.0f }, { -55.43f, 0.0f, 22.96f }, { -42.43f, 0.0f, 42.43f }, { -22.96f, 0.0f, 55.43f }, { 0.0f, 0.0f, 60.0f }, { 22.96f, 0.0f, 55.43f }, { 42.43f, 0.0f, 42.43f }, }; Vec lbl_1_data_2D8[0xA] = { { 38.79f, 0.0f, -53.4f }, { 0.0f, 0.0f, -120.0f }, { -38.79f, 0.0f, -53.4f }, { -114.13f, 0.0f, -37.08f }, { -62.77f, 0.0f, 20.4f }, { -70.53f, 0.0f, 97.08f }, { 0.0f, 0.0f, 66.0f }, { 70.53f, 0.0f, 97.08f }, { 62.77f, 0.0f, 20.4f }, { 114.13f, 0.0f, -37.08f }, }; Vec lbl_1_data_350[0xA] = { { 21.34f, 0.0f, -29.37f }, { 0.0f, 0.0f, -66.0f }, { -21.34f, 0.0f, -29.37f }, { -62.77f, 0.0f, -20.4f }, { -34.52f, 0.0f, 11.22f }, { -38.79f, 0.0f, 53.4f }, { 0.0f, 0.0f, 36.3f }, { 38.79f, 0.0f, 53.4f }, { 34.52f, 0.0f, 11.22f }, { 62.77f, 0.0f, -20.4f }, }; Vec lbl_1_data_3C8[0x10] = { { 110.87f, 0.0f, 45.92f }, { 120.0f, 0.0f, 0.0f }, { 110.87f, 0.0f, -45.92f }, { 84.85f, 0.0f, -84.85f }, { 45.92f, 0.0f, -110.87f }, { 0.0f, 0.0f, -120.0f }, { -45.92f, 0.0f, -110.87f }, { -84.85f, 0.0f, -84.85f }, { -110.87f, 0.0f, -45.92f }, { -120.0f, 0.0f, 0.0f }, { -110.87f, 0.0f, 45.92f }, { -84.85f, 0.0f, 84.85f }, { -45.92f, 0.0f, 110.87f }, { 0.0f, 0.0f, 120.0f }, { 45.92f, 0.0f, 110.87f }, { 84.85f, 0.0f, 84.85f }, }; Vec lbl_1_data_488[0x10] = { { 73.17f, 0.0f, 30.31f }, { 79.2f, 0.0f, 0.0f }, { 73.17f, 0.0f, -30.31f }, { 56.0f, 0.0f, -56.0f }, { 30.31f, 0.0f, -73.17f }, { 0.0f, 0.0f, -79.2f }, { -30.31f, 0.0f, -73.17f }, { -56.0f, 0.0f, -56.0f }, { -73.17f, 0.0f, -30.31f }, { -79.2f, 0.0f, 0.0f }, { -73.17f, 0.0f, 30.31f }, { -56.0f, 0.0f, 56.0f }, { -30.31f, 0.0f, 73.17f }, { 0.0f, 0.0f, 79.2f }, { 30.31f, 0.0f, 73.17f }, { 56.0f, 0.0f, 56.0f }, }; Vec lbl_1_data_548[0xA] = { { 48.49f, 0.0f, -66.74f }, { 0.0f, 0.0f, -150.0f }, { -48.49f, 0.0f, -66.74f }, { -142.66f, 0.0f, -46.35f }, { -78.46f, 0.0f, 25.49f }, { -88.17f, 0.0f, 121.35f }, { 0.0f, 0.0f, 82.5f }, { 88.17f, 0.0f, 121.35f }, { 78.46f, 0.0f, 25.49f }, { 142.66f, 0.0f, -46.35f }, }; Vec lbl_1_data_5C0[0xA] = { { 29.09f, 0.0f, -40.05f }, { 0.0f, 0.0f, -90.0f }, { -29.09f, 0.0f, -40.05f }, { -85.59f, 0.0f, -27.81f }, { -47.08f, 0.0f, 15.3f }, { -52.9f, 0.0f, 72.81f }, { 0.0f, 0.0f, 49.5f }, { 52.9f, 0.0f, 72.81f }, { 47.08f, 0.0f, 15.3f }, { 85.59f, 0.0f, -27.81f }, }; Vec lbl_1_data_638[0x16] = { { 129.1f, 0.0f, 54.6f }, { 140.0f, 0.0f, 0.0f }, { 129.3f, 0.0f, -53.6f }, { 99.0f, 0.0f, -99.0f }, { 53.6f, 0.0f, -129.3f }, { 0.0f, 0.0f, -140.0f }, { -53.6f, 0.0f, -129.3f }, { -99.0f, 0.0f, -99.0f }, { -129.4f, 0.0f, -53.5f }, { -140.0f, 0.0f, 0.0f }, { -136.0f, 0.0f, 20.4f }, { -102.1f, 0.0f, -7.6f }, { -70.0f, 0.0f, -14.0f }, { -37.8f, 0.0f, -7.6f }, { -10.6f, 0.0f, 10.6f }, { 7.6f, 0.0f, 37.8f }, { 14.0f, 0.0f, 70.0f }, { 7.6f, 0.0f, 102.2f }, { -20.4f, 0.0f, 136.0f }, { 0.1f, 0.0f, 140.1f }, { 53.9f, 0.0f, 129.5f }, { 99.5f, 0.0f, 99.0f }, }; Vec lbl_1_data_740[0x16] = { { 95.9f, 0.0f, 42.9f }, { 106.6f, 0.0f, 0.4f }, { 98.4f, 0.0f, -37.2f }, { 81.7f, 0.0f, -65.9f }, { 55.4f, 0.0f, -89.6f }, { 11.5f, 0.0f, -101.7f }, { -24.5f, 0.0f, -99.9f }, { -60.9f, 0.0f, -88.6f }, { -98.7f, 0.0f, -64.4f }, { -110.4f, 0.0f, -41.5f }, { -110.4f, 0.0f, -30.8f }, { -90.4f, 0.0f, -42.3f }, { -53.8f, 0.0f, -48.5f }, { -14.6f, 0.0f, -40.5f }, { 17.1f, 0.0f, -16.3f }, { 35.8f, 0.0f, 28.2f }, { 35.8f, 0.0f, 65.6f }, { 24.7f, 0.0f, 101.6f }, { 19.6f, 0.0f, 114.6f }, { 34.9f, 0.0f, 114.5f }, { 62.9f, 0.0f, 99.0f }, { 83.0f, 0.0f, 73.2f }, }; Vec lbl_1_data_848[0x16] = { { 110.9f, 0.0f, 45.9f }, { 120.0f, 0.0f, 0.0f }, { 110.9f, 0.0f, -45.8f }, { 84.8f, 0.0f, -84.9f }, { 45.9f, 0.0f, -110.9f }, { 0.0f, 0.0f, -120.0f }, { -45.9f, 0.0f, -110.9f }, { -84.9f, 0.0f, -84.8f }, { -110.9f, 0.0f, -45.9f }, { -120.0f, 0.0f, 0.0f }, { -116.5f, 0.0f, 17.5f }, { -87.6f, 0.0f, -6.6f }, { -60.0f, 0.0f, -12.0f }, { -32.4f, 0.0f, -6.5f }, { -9.1f, 0.0f, 9.1f }, { 6.5f, 0.0f, 32.5f }, { 12.0f, 0.0f, 60.0f }, { 6.5f, 0.0f, 87.6f }, { -17.5f, 0.0f, 116.5f }, { 0.0f, 0.0f, 120.0f }, { 45.9f, 0.0f, 110.9f }, { 84.8f, 0.0f, 84.9f }, }; Vec lbl_1_data_950[0x16] = { { 80.0f, 0.0f, 31.0f }, { 83.9f, 0.0f, -0.1f }, { 77.2f, 0.0f, -31.7f }, { 60.4f, 0.0f, -56.8f }, { 35.6f, 0.0f, -77.4f }, { -0.5f, 0.0f, -84.1f }, { -31.5f, 0.0f, -82.9f }, { -58.9f, 0.0f, -71.4f }, { -86.3f, 0.0f, -49.4f }, { -91.5f, 0.0f, -36.4f }, { -91.5f, 0.0f, -27.3f }, { -82.1f, 0.0f, -29.8f }, { -54.7f, 0.0f, -36.2f }, { -21.9f, 0.0f, -30.9f }, { 13.3f, 0.0f, -10.2f }, { 28.3f, 0.0f, 18.3f }, { 33.4f, 0.0f, 58.4f }, { 28.0f, 0.0f, 81.6f }, { 20.7f, 0.0f, 93.3f }, { 30.4f, 0.0f, 93.3f }, { 55.4f, 0.0f, 82.2f }, { 70.4f, 0.0f, 59.3f }, }; s32 lbl_1_data_A58[0xC] = { 0x220004, 0x220005, 0x220006, 0x220009, 0x22000C, 0x22000F, 0x220007, 0x220008, 0x22000A, 0x22000B, 0x22000D, 0x22000E, }; Vec lbl_1_data_A88[6] = { { -400.0f, 0.0f, 300.0f }, { 0.0f, 0.0f, 300.0f }, { 400.0f, 0.0f, 300.0f }, { -400.0f, 0.0f, 700.0f }, { 0.0f, 0.0f, 700.0f }, { 400.0f, 0.0f, 700.0f }, }; s32 lbl_1_data_AD0[3] = { 6, 8, 0xA }; s32 lbl_1_data_ADC[3] = { 7, 9, 0xB }; s32 lbl_1_data_AE8[5] = { 1, 2, 3, 4, 5 }; Vec *lbl_1_data_AFC[6] = { lbl_1_data_3C8, lbl_1_data_158, lbl_1_data_548, lbl_1_data_2D8, lbl_1_data_638, lbl_1_data_848, }; s32 lbl_1_data_B14[6] = { 0x10, 0x10, 0xA, 0xA, 0x16, 0x16 }; Vec lbl_1_data_B2C[6] = { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, -20.0f }, { 0.0f, 0.0f, -20.0f }, { 40.0f, 0.0f, -20.0f }, { 40.0f, 0.0f, -20.0f }, }; Vec *lbl_1_data_B74[6][2] = { { lbl_1_data_3C8, lbl_1_data_488 }, { lbl_1_data_158, lbl_1_data_218 }, { lbl_1_data_548, lbl_1_data_5C0 }, { lbl_1_data_2D8, lbl_1_data_350 }, { lbl_1_data_638, lbl_1_data_740 }, { lbl_1_data_848, lbl_1_data_950 }, }; s32 lbl_1_data_BA4[6] = { 0x10, 0x10, 0xA, 0xA, 0x16, 0x16 }; omObjData *lbl_1_bss_BC; omObjData *lbl_1_bss_B8; omObjData *lbl_1_bss_A4[5]; s32 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; float lbl_1_bss_88; s32 lbl_1_bss_84; s32 lbl_1_bss_80; s32 lbl_1_bss_7C; s32 lbl_1_bss_78; s32 lbl_1_bss_60[6]; void fn_1_64E8(Process *process) { Vec sp20; Vec sp14; Vec sp8; s32 var_r31; sp20.x = 0.0f; sp20.y = 3000.0f; sp20.z = 50.0f; sp14.x = 0.0f; sp14.y = 1.0f; sp14.z = 0.0f; sp8.x = 0.0f; sp8.y = 0.0f; sp8.z = 0.0f; lbl_1_bss_BC = omAddObjEx(process, 0xA, 2, 0, -1, fn_1_6768); lbl_1_bss_B8 = omAddObjEx(process, 0xC, 4, 0, -1, fn_1_67F0); for (var_r31 = 0; var_r31 < 5; var_r31++) { lbl_1_bss_A4[var_r31] = omAddObjEx(process, 0xE, 7, 0, -1, fn_1_6C74); } Hu3DShadowCreate(30.0f, 20.0f, 25000.0f); Hu3DShadowTPLvlSet(0.65f); Hu3DShadowPosSet(&sp20, &sp14, &sp8); lbl_1_bss_A0 = 0; lbl_1_bss_9C = lbl_1_bss_98 = 2; lbl_1_bss_8C = 0; lbl_1_bss_90 = 0; lbl_1_bss_88 = 0.75f; lbl_1_bss_7C = 3; lbl_1_bss_78 = 0; lbl_1_bss_84 = 0; lbl_1_bss_80 = 0; memset(lbl_1_bss_60, 0, 0x18); } void fn_1_6748(void) { fn_1_7978(); } void fn_1_6768(omObjData *object) { object->stat |= 0x100; object->model[0] = Hu3DModelCreateFile(0x220010); object->model[1] = Hu3DModelCreateFile(0x220011); object->func = fn_1_67EC; } void fn_1_67EC(omObjData *object) { } void fn_1_67F0(omObjData *object) { object->stat |= 0x100; object->model[0] = Hu3DModelCreateFile(0x220000); object->model[1] = Hu3DModelCreateFile(0x220003); object->model[2] = Hu3DModelCreateFile(0x220001); object->model[3] = Hu3DModelCreateFile(0x220002); Hu3DMotionSpeedSet(object->model[2], 0.0f); Hu3DModelShadowSet(object->model[1]); Hu3DModelPosSet(object->model[1], 0.0f, 0.0f, -500.0f); Hu3DData[object->model[3]].unk_94 = 0.0f; Hu3DData[object->model[3]].unk_98 = 2.0f; object->work[3] = 0x1E; object->func = fn_1_695C; } void fn_1_695C(omObjData *object) { ModelData *var_r30; M453MapUnkStruct *var_r29; if (lbl_1_bss_84 != 0) { if (lbl_1_bss_80 == 0) { if (object->work[0] < 60.0f) { object->work[0] += 1; var_r30 = &Hu3DData[object->model[1]]; var_r30->rot.x = (-120.0f * object->work[0]) / 60.0f; } else { lbl_1_bss_80 ^= 1; lbl_1_bss_84 = 0; } } else if (object->work[0] != 0) { object->work[0] -= 1; var_r30 = &Hu3DData[object->model[1]]; var_r30->rot.x = (-120.0f * object->work[0]) / 60.0f; } else { lbl_1_bss_80 ^= 1; lbl_1_bss_84 = 0; } } var_r29 = lbl_1_bss_A4[lbl_1_bss_9C]->data; if (lbl_1_bss_94 != 0) { lbl_1_bss_94 = 0; lbl_1_bss_90 = 1; } if (lbl_1_bss_9C != lbl_1_bss_98) { lbl_1_bss_90 = 0; lbl_1_bss_8C = 0; } lbl_1_bss_98 = lbl_1_bss_9C; if (var_r29->unk_00_field0) { lbl_1_bss_9C = (lbl_1_bss_9C + 1) % 5; lbl_1_bss_8C = 1; } if (object->work[3] != 0) { if (--object->work[3] == 0) { HuAudFXPlay(0x521); } } } void fn_1_6C74(omObjData *object) { s32 var_r31; M453MapUnkStruct *var_r29; var_r29 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x54, 0x10000000); object->data = var_r29; memset(object->data, 0, 0x54); for (var_r31 = 0; var_r31 < 0xC; var_r31++) { var_r29->unk_24[var_r31] = -1; } for (var_r31 = 0; (u32)var_r31 < 0xC; var_r31++) { var_r29->unk_24[var_r31] = Hu3DModelCreateFile(lbl_1_data_A58[var_r31]); Hu3DModelAttrSet(var_r29->unk_24[var_r31], HU3D_ATTR_DISPOFF); } object->model[0] = var_r29->unk_24[0]; Hu3DModelAttrReset(object->model[0], HU3D_ATTR_DISPOFF); var_r29->unk_00_field0 = 0; var_r29->unk_04 = 4 - lbl_1_bss_A0; fn_1_6FC4(object); object->trans.y = 5.0f; object->trans.z = -500.0f; switch (var_r29->unk_04) { case 0: case 1: break; case 2: for (var_r31 = 0; var_r31 < 7; var_r31++) { Hu3DModelShadowSet(object->model[var_r31]); } break; case 3: for (var_r31 = 0; var_r31 < 7; var_r31++) { Hu3DModelShadowMapSet(object->model[var_r31]); } object->trans.y = 2.5f; break; case 4: for (var_r31 = 0; var_r31 < 7; var_r31++) { Hu3DModelShadowMapSet(object->model[var_r31]); } object->trans.y = 0.0f; break; } fn_1_6EB4(object); lbl_1_bss_A0++; object->func = fn_1_73C4; } void fn_1_6EB4(omObjData *object) { Mtx sp38; Mtx sp8; s32 var_r30; MTXTrans(sp38, object->trans.x, object->trans.y, object->trans.z); mtxRot(sp8, object->rot.x, object->rot.y, object->rot.z); MTXConcat(sp38, sp8, sp38); for (var_r30 = 0; var_r30 < 6; var_r30++) { MTXTrans(sp8, lbl_1_data_A88[var_r30].x, lbl_1_data_A88[var_r30].y, lbl_1_data_A88[var_r30].z); MTXConcat(sp38, sp8, sp8); Hu3DModelPosSet(object->model[var_r30 + 1], sp8[0][3], sp8[1][3], sp8[2][3]); Hu3DModelRotSet(object->model[var_r30 + 1], object->rot.x, object->rot.y, object->rot.z); } } void fn_1_6FC4(omObjData *object) { s32 sp8[6]; s32 var_r31; M453MapUnkStruct *var_r30; s32 var_r29; s32 var_r28; s32 var_r26; s32 var_r25; s32 var_r24; var_r30 = object->data; for (var_r31 = 0; var_r31 < 0x64; var_r31++) { var_r29 = ((u8)frand() * 3) >> 8; var_r28 = ((u8)frand() * 3) >> 8; var_r26 = lbl_1_data_AD0[var_r29]; lbl_1_data_AD0[var_r29] = lbl_1_data_AD0[var_r28]; lbl_1_data_AD0[var_r28] = var_r26; var_r29 = ((u8)frand() * 3) >> 8; var_r28 = ((u8)frand() * 3) >> 8; var_r26 = lbl_1_data_ADC[var_r29]; lbl_1_data_ADC[var_r29] = lbl_1_data_ADC[var_r28]; lbl_1_data_ADC[var_r28] = var_r26; var_r29 = ((u8)frand() * 5) >> 8; var_r28 = ((u8)frand() * 5) >> 8; var_r26 = lbl_1_data_AE8[var_r29]; lbl_1_data_AE8[var_r29] = lbl_1_data_AE8[var_r28]; lbl_1_data_AE8[var_r28] = var_r26; } var_r25 = 0; for (var_r31 = 0; var_r31 < 6; var_r31++) { if (lbl_1_bss_60[var_r31] < 6) { sp8[var_r25++] = var_r31; } } for (var_r31 = 0; var_r31 < 0x64; var_r31++) { var_r29 = (var_r25 * (u8)frand()) >> 8; var_r28 = (var_r25 * (u8)frand()) >> 8; var_r26 = sp8[var_r29]; sp8[var_r29] = sp8[var_r28]; sp8[var_r28] = var_r26; } for (var_r31 = 0; var_r31 < 6; var_r31++) { var_r30->unk_0C[var_r31] = 0; } for (var_r31 = 0; var_r31 < lbl_1_bss_78; var_r31++) { var_r30->unk_0C[sp8[var_r31]] = lbl_1_data_ADC[var_r31]; } while (var_r31 < lbl_1_bss_7C) { var_r30->unk_0C[sp8[var_r31]] = lbl_1_data_AD0[var_r31]; var_r31++; } var_r24 = 0; for (var_r31 = 0; var_r31 < 6; var_r31++) { if (var_r30->unk_0C[var_r31] == 0) { var_r30->unk_0C[var_r31] = lbl_1_data_AE8[var_r24++]; } } memcpy(lbl_1_bss_60, &var_r30->unk_0C, 0x18); for (var_r31 = 0; var_r31 < 6; var_r31++) { if (object->model[var_r31 + 1] >= 0) { Hu3DModelAttrSet(object->model[var_r31 + 1], HU3D_ATTR_DISPOFF); } } for (var_r31 = 0; var_r31 < 6; var_r31++) { object->model[var_r31 + 1] = var_r30->unk_24[var_r30->unk_0C[var_r31]]; Hu3DModelAttrReset(object->model[var_r31 + 1], HU3D_ATTR_DISPOFF); } } void fn_1_73C4(omObjData *object) { Mtx sp38; Mtx sp8; M453MapUnkStruct *var_r30; s32 var_r29; s32 var_r28; ModelData *var_r27; var_r30 = object->data; if (lbl_1_bss_90 == 0) { if ((lbl_1_bss_84 != 0) && (var_r30->unk_04 < 3)) { var_r27 = &Hu3DData[lbl_1_bss_B8->model[1]]; object->rot.x = var_r27->rot.x; switch (var_r30->unk_04) { case 0: object->trans.z = -500.0f + ((2.5f * lbl_1_bss_B8->work[0]) / 60.0f); break; case 1: object->trans.z = -500.0f + ((5.0f * lbl_1_bss_B8->work[0]) / 60.0f); break; case 2: object->trans.z = -500.0f + ((7.5f * lbl_1_bss_B8->work[0]) / 60.0f); break; } } else { return; } } else { switch (var_r30->unk_04) { case 0: if (lbl_1_bss_8C != 0) { object->trans.z = -495.0f; var_r30->unk_04++; } break; case 1: if (lbl_1_bss_8C != 0) { object->trans.z = -492.5f; var_r30->unk_00_field0 = 0; var_r30->unk_04++; var_r30->unk_08 = 0.0f; for (var_r29 = 0; var_r29 < 7; var_r29++) { Hu3DModelShadowSet(object->model[var_r29]); } } break; case 2: if (lbl_1_bss_8C != 0) { var_r30->unk_04 = var_r30->unk_04 + 1; object->trans.y = 2.5f; for (var_r29 = 0; var_r29 < 7; var_r29++) { Hu3DModelShadowReset(object->model[var_r29]); Hu3DModelShadowMapSet(object->model[var_r29]); } } else { var_r30->unk_08 = var_r30->unk_08 + lbl_1_bss_88; if (var_r30->unk_08 > 90.0f) { var_r30->unk_00_field0 = 1; var_r30->unk_08 = 90.0f; HuAudFXPlay(0x522); } object->rot.x = -120.0 * cosd(var_r30->unk_08); object->trans.z = -500.0 + (7.5 * cosd(var_r30->unk_08)); } break; case 3: if (lbl_1_bss_8C != 0) { var_r30->unk_04++; object->trans.y = 0.0f; } break; case 4: if (lbl_1_bss_8C != 0) { var_r30->unk_04 = 0; object->trans.y = 5.0f; object->trans.z = -497.5f; object->rot.x = -120.0f; for (var_r29 = 0; var_r29 < 7; var_r29++) { fn_1_7A74(object->model[var_r29]); } fn_1_6FC4(object); } break; } } MTXTrans(sp8, object->trans.x, object->trans.y, object->trans.z); mtxRot(sp38, object->rot.x, object->rot.y, object->rot.z); MTXConcat(sp8, sp38, sp8); for (var_r28 = 0; var_r28 < 6; var_r28++) { MTXTrans(sp38, lbl_1_data_A88[var_r28].x, lbl_1_data_A88[var_r28].y, lbl_1_data_A88[var_r28].z); MTXConcat(sp8, sp38, sp38); Hu3DModelPosSet(object->model[var_r28 + 1], sp38[0][3], sp38[1][3], sp38[2][3]); Hu3DModelRotSet(object->model[var_r28 + 1], object->rot.x, object->rot.y, object->rot.z); } } void fn_1_7978(void) { s32 var_r31; omObjData *var_r30; M453MapUnkStruct *var_r29; s32 var_r28; for (var_r31 = 0; var_r31 < 5; var_r31++) { var_r30 = lbl_1_bss_A4[var_r31]; var_r29 = var_r30->data; if (var_r29 != NULL) { for (var_r28 = 0; var_r28 < 0xC; var_r28++) { if (var_r29->unk_24[var_r28] >= 0) { Hu3DModelKill(var_r29->unk_24[var_r28]); } } HuMemDirectFree(var_r29); lbl_1_bss_A4[var_r31]->data = NULL; } for (var_r31 = 0; var_r31 < var_r30->mdlcnt; var_r31++) { var_r30->model[var_r31] = -1; } } } void fn_1_7A74(s16 arg0) { HsfData *var_r31; HsfObject *var_r30; s16 var_r29; HsfObject *var_r28; HsfConstData *var_r27; var_r31 = Hu3DData[arg0].hsfData; for (var_r28 = var_r31->object, var_r29 = 0; var_r29 < var_r31->objectCnt; var_r29++, var_r28++) { var_r30 = var_r28; if (var_r30->constData) { var_r27 = var_r30->constData; var_r27->flags &= 0xFFFFFFF7; } } } s32 fn_1_7AFC(float arg8, float arg9) { s32 var_r31; s32 var_r30; var_r31 = (600.0f + arg8) / 400.0f; var_r30 = (400.0f + arg9) / 400.0f; if (var_r31 < 0) { var_r31 = 0; } else if (var_r31 > 2) { var_r31 = 2; } if (var_r30 < 0) { var_r30 = 0; } else if (var_r30 > 1) { var_r30 = 1; } return var_r31 + (var_r30 * 3); } void fn_1_7BB0(s32 arg0, Vec *arg1) { arg1->x = lbl_1_data_A88[arg0].x; arg1->y = lbl_1_data_A88[arg0].y; arg1->z = lbl_1_data_A88[arg0].z; } s32 fn_1_7BFC(M453MapUnkStruct *arg0, s32 arg1) { return arg0->unk_0C[arg1]; } void fn_1_7C0C(float arg8) { lbl_1_bss_94 = 1; lbl_1_bss_88 = arg8; } void fn_1_7C2C(s32 arg0) { lbl_1_bss_7C = arg0; } void fn_1_7C3C(void) { float var_f31; float var_f30; lbl_1_bss_84 = 1; if (lbl_1_bss_80 == 0) { var_f31 = 1.6666666f; } else { var_f31 = -1.6666666f; } var_f30 = var_f31; Hu3DMotionSpeedSet(lbl_1_bss_B8->model[2], var_f30); HuAudFXPlay(0x524); } s32 fn_1_7CE0(float arg8, float arg9, Vec *arg0) { Mtx sp4C; Mtx sp1C; Vec sp10; omObjData *var_r31; Vec *var_r30; s32 var_r28; s32 var_r27; s32 var_r24; s32 var_r23; M453MapUnkStruct *var_r22; var_r31 = lbl_1_bss_A4[lbl_1_bss_9C]; var_r22 = var_r31->data; var_r27 = fn_1_7AFC(arg8, arg9); var_r28 = fn_1_7BFC(var_r22, var_r27); if (var_r28 < 6) { return 0; } var_r28 -= 6; fn_1_7BB0(var_r27, &sp10); sp10 = lbl_1_data_A88[var_r27]; MTXTrans(sp4C, var_r31->trans.x, var_r31->trans.y, var_r31->trans.z); mtxRot(sp1C, var_r31->rot.x, var_r31->rot.y, var_r31->rot.z); MTXConcat(sp4C, sp1C, sp4C); MTXTrans(sp1C, sp10.x, sp10.y, sp10.z); MTXConcat(sp4C, sp1C, sp4C); var_r30 = lbl_1_data_AFC[var_r28]; var_r23 = lbl_1_data_B14[var_r28]; for (var_r24 = 0; var_r24 < var_r23; var_r24++) { MTXTrans(sp1C, var_r30->x, var_r30->y, var_r30->z); MTXConcat(sp4C, sp1C, sp1C); arg0->x = sp1C[0][3]; arg0->y = sp1C[1][3]; arg0->z = sp1C[2][3]; arg0++; var_r30++; } return var_r23; } float fn_1_7F54(float arg8, float arg9) { float var_f31; omObjData *var_r31 = lbl_1_bss_A4[lbl_1_bss_9C]; float var_f30 = -(arg9 - var_r31->trans.z); if (cosd(var_r31->rot.x) <= 0.0) { var_f31 = 9999.0f; } else { var_f31 = (var_f30 * sind(var_r31->rot.x)) / cosd(var_r31->rot.x); if (var_f31 > 9999.0f) { var_f31 = 9999.0f; } } return var_f31; } float fn_1_80B0(Vec *arg0, float arg8) { return fn_1_7F54(0.0f, arg0->z - arg8); } s32 fn_1_8230(void) { return lbl_1_bss_84; } s32 fn_1_8240(void) { return lbl_1_bss_90; } s32 fn_1_8250(M453MapUnkStruct *arg0, s32 *arg1) { s32 var_r31; s32 var_r30; var_r30 = 0; for (var_r31 = 0; var_r31 < 6; var_r31++) { if (arg0->unk_0C[var_r31] >= 6) { arg1[var_r30++] = var_r31; } } return var_r30; } s32 fn_1_82AC(Vec *arg0) { s32 sp8[6]; omObjData *var_r31; s32 var_r30; M453MapUnkStruct *var_r28; s32 var_r27; s32 var_r24; var_r31 = lbl_1_bss_A4[lbl_1_bss_9C]; var_r28 = var_r31->data; var_r24 = fn_1_8250(var_r28, sp8); for (var_r30 = 0; var_r30 < var_r24; var_r30++) { fn_1_7BB0(sp8[var_r30], arg0); var_r27 = fn_1_7BFC(var_r28, sp8[var_r30]) - 6; arg0->x += var_r31->trans.x + lbl_1_data_B2C[var_r27].x; arg0->y += var_r31->trans.y + lbl_1_data_B2C[var_r27].y; arg0->z += var_r31->trans.z + lbl_1_data_B2C[var_r27].z; arg0++; } return var_r24; } s32 fn_1_844C(Vec *arg0) { Mtx sp50; Mtx sp20; s32 sp8[6]; omObjData *var_r30; s32 var_r29; M453MapUnkStruct *var_r27; s32 var_r26; s32 var_r23; var_r30 = lbl_1_bss_A4[lbl_1_bss_9C]; var_r27 = var_r30->data; var_r23 = fn_1_8250(var_r27, sp8); MTXTrans(sp50, var_r30->trans.x, var_r30->trans.y, var_r30->trans.z); mtxRot(sp20, var_r30->rot.x, var_r30->rot.y, var_r30->rot.z); MTXConcat(sp50, sp20, sp50); for (var_r29 = 0; var_r29 < var_r23; var_r29++) { fn_1_7BB0(sp8[var_r29], arg0); var_r26 = fn_1_7BFC(var_r27, sp8[var_r29]) - 6; arg0->x += lbl_1_data_B2C[var_r26].x; arg0->y += lbl_1_data_B2C[var_r26].y; arg0->z += lbl_1_data_B2C[var_r26].z; MTXTrans(sp20, arg0->x, arg0->y, arg0->z); MTXConcat(sp50, sp20, sp20); arg0->x = sp20[0][3]; arg0->y = sp20[1][3]; arg0->z = sp20[2][3]; arg0++; } return var_r23; } void fn_1_864C(s32 arg0) { if (arg0 > lbl_1_bss_7C) { arg0 = lbl_1_bss_7C; } lbl_1_bss_78 = arg0; } s32 fn_1_867C(Vec *arg0, Vec *arg1) { Vec sp48; Vec sp3C; Vec sp30; Vec sp24; Vec sp18; Vec spC; float var_f31; float var_f30; float var_f29; float var_f28; float var_f27; float var_f26; float var_f25; float var_f24; s32 var_r31; Vec *var_r30; Vec *var_r29; omObjData *var_r28; s32 var_r27; s32 var_r24; s32 var_r21; s32 var_r20; s32 var_r19; M453MapUnkStruct *var_r18; var_r28 = lbl_1_bss_A4[lbl_1_bss_9C]; var_r18 = var_r28->data; if ((var_r28->rot.x > 0.0f) || (var_r28->rot.x <= -90.0f)) { return 0; } VECSubtract(arg0, &var_r28->trans, &sp3C); sp3C.z = sp3C.z / cosd(var_r28->rot.x); var_f24 = arg0->z; var_f25 = arg0->x; var_r19 = fn_1_7AFC(var_f25, var_f24); var_r24 = fn_1_7BFC(var_r18, var_r19); if (var_r24 < 6) { return 0; } var_r24 -= 6; sp48 = lbl_1_data_A88[var_r19]; VECSubtract(&sp3C, &sp48, &sp3C); var_r30 = lbl_1_data_B74[var_r24][0]; var_r29 = lbl_1_data_B74[var_r24][1]; var_r21 = lbl_1_data_BA4[var_r24]; for (var_r31 = 0; var_r31 < var_r21; var_r31++) { var_r27 = (var_r31 + 1) % var_r21; VECSubtract(var_r30 + var_r27, var_r30 + var_r31, &sp24); VECSubtract(&sp3C, var_r30 + var_r27, &sp18); VECCrossProduct(&sp24, &sp18, &spC); if (!(spC.y < 0.0f)) { VECSubtract(var_r29 + var_r27, var_r30 + var_r27, &sp24); VECSubtract(&sp3C, var_r29 + var_r27, &sp18); VECCrossProduct(&sp24, &sp18, &spC); if (!(spC.y < 0.0f)) { VECSubtract(var_r29 + var_r31, var_r29 + var_r27, &sp24); VECSubtract(&sp3C, var_r29 + var_r31, &sp18); VECCrossProduct(&sp24, &sp18, &spC); if (!(spC.y < 0.0f)) { VECSubtract(var_r30 + var_r31, var_r29 + var_r31, &sp24); VECSubtract(&sp3C, var_r30 + var_r31, &sp18); VECCrossProduct(&sp24, &sp18, &spC); if (!(spC.y < 0.0f)) { VECSubtract(var_r30 + var_r27, var_r30 + var_r31, &sp24); var_f30 = (((sp3C.z * sp24.z) + (((sp3C.y * sp24.y) + ((sp3C.x * sp24.x) - (sp24.x * var_r30[var_r31].x))) - (sp24.y * var_r30[var_r31].y))) - (sp24.z * var_r30[var_r31].z)) / ((sp24.z * sp24.z) + ((sp24.x * sp24.x) + (sp24.y * sp24.y))); sp30.x = var_r30[var_r31].x + (var_f30 * sp24.x); sp30.y = var_r30[var_r31].y + (var_f30 * sp24.y); sp30.z = var_r30[var_r31].z + (var_f30 * sp24.z); VECSubtract(&sp30, &sp3C, &spC); var_f28 = VECMag(&spC); VECSubtract(var_r29 + var_r27, var_r29 + var_r31, &sp18); var_f29 = (((sp3C.z * sp18.z) + (((sp3C.y * sp18.y) + ((sp3C.x * sp18.x) - (sp18.x * var_r29[var_r31].x))) - (sp18.y * var_r29[var_r31].y))) - (sp18.z * var_r29[var_r31].z)) / ((sp18.z * sp18.z) + ((sp18.x * sp18.x) + (sp18.y * sp18.y))); sp30.x = var_r29[var_r31].x + (var_f29 * sp18.x); sp30.y = var_r29[var_r31].y + (var_f29 * sp18.y); sp30.z = var_r29[var_r31].z + (var_f29 * sp18.z); VECSubtract(&sp30, &sp3C, &spC); var_f27 = VECMag(&spC); if (var_f28 == 0.0f) { var_f31 = var_f30; } else if (var_f27 == 0.0f) { var_f31 = var_f29; } else { var_f26 = 1.0f - (var_f28 / (var_f28 + var_f27)); var_f31 = (var_f30 * var_f26) + (var_f29 * (1.0f - var_f26)); } if (var_f31 < 0.0f) { var_f31 = 0.0f; } else if (var_f31 > 1.0f) { var_f31 = 1.0f; } sp3C.x = var_r29[var_r31].x + (var_f31 * sp18.x); sp3C.y = var_r29[var_r31].y + (var_f31 * sp18.y); sp3C.z = var_r29[var_r31].z + (var_f31 * sp18.z); arg1->x = sp3C.x + (var_r28->trans.x + sp48.x); arg1->y = sp3C.y + (var_r28->trans.y + sp48.y); arg1->z = var_r28->trans.z + ((sp48.z + sp3C.z) * cosd(var_r28->rot.x)); return 1; } } } } } var_r20 = 0; for (var_r31 = 0; var_r31 < var_r21; var_r31++) { var_r27 = (var_r31 + 1) % var_r21; var_f31 = (sp3C.z - var_r30[var_r31].z) / (var_r30[var_r27].z - var_r30[var_r31].z); spC.x = var_r30[var_r31].x + (var_f31 * (var_r30[var_r27].x - var_r30[var_r31].x)); if ((var_f31 >= 0.0f) && (var_f31 < 1.0f) && (spC.x > sp3C.x)) { var_r20++; } } if ((var_r20 & 1) != 0) { arg1->x = arg0->x; arg1->y = arg0->y; arg1->z = arg0->z; return 1; } return 0; }