#include "dolphin/gx/GXEnum.h" #include "dolphin/gx/GXVert.h" #include "dolphin/mtx/GeoTypes.h" #include "ext_math.h" #include "game/animdata.h" #include "game/audio.h" #include "game/frand.h" #include "game/gamework_data.h" #include "game/hsfanim.h" #include "game/hsfdraw.h" #include "game/hsfman.h" #include "game/hsfmotion.h" #include "game/memory.h" #include "game/object.h" #include "game/objsub.h" #include "game/sprite.h" #include "string.h" #include "REL/m425Dll.h" SHARED_SYM extern u32 GlobalCounter; SHARED_SYM extern LightData Hu3DLocalLight[0x20]; typedef struct M425DllUnkStruct4 { s16 unk_00; s16 unk_02; s16 unk_04; s16 unk_06; float unk_08; float unk_0C; float unk_10; float unk_14; float unk_18; float unk_1C; float unk_20; float unk_24; s32 unk_28; s32 unk_2C; float unk_30; s32 unk_34; s32 unk_38; s32 unk_3C[5]; s32 unk_50; float unk_54[6]; s32 unk_6C[6]; s32 unk_84[6]; float unk_9C[6]; s32 unk_B4[6]; Vec unk_CC; float unk_D8; float unk_DC; float unk_E0; float unk_E4; float unk_E8; float unk_EC; s32 unk_F0[3]; float unk_FC; float unk_100; char unk104[0x8]; s16 unk_10C; s16 unk_10E; s16 unk_110; s16 unk_112[0x19]; s16 unk_144[0x1A]; s16 *unk_178; Vec *unk_17C; Vec *unk_180; Vec2f *unk_184; Vec *unk_188; Vec *unk_18C; s16 (*unk_190)[3]; Vec *unk_194; Vec *unk_198; s32 unk_19C; u8 *unk_1A0; s16 *unk_1A4[0x19]; s16 unk_208[0x19]; GXColor unk_23A; s32 unk_240; u32 unk_244[0x19]; void *unk_2A8[0x19]; } M425DllUnkStruct4; /* size = 0x30C */ typedef struct M425DllUnkStruct5 { char unk00[4]; Vec unk_04; Vec unk_10; float unk_1C; char unk20[8]; float unk_28; float unk_2C; Vec unk_30; GXColor unk_3C; s32 unk_40; } M425DllUnkStruct5; /* size = 0x44 */ typedef void (*UnkHook)(ModelData *model, struct M425DllUnkStruct6 *particle, Mtx matrix); typedef struct M425DllUnkStruct6 { s16 unk_00; s16 unk_02; char unk04[0x1C]; u8 unk_20; u8 unk_21; char unk22[2]; s16 unk_24; s32 unk_28; s32 unk_2C; u32 unk_30; u32 unk_34; AnimData *unk_38; M425DllUnkStruct5 *unk_3C; Vec *unk_40; Vec2f *unk_44; void *unk_48; UnkHook unk_4C; } M425DllUnkStruct6; /* size = 0x50 */ void fn_1_6BD8(omObjData *object); s32 fn_1_6EC4(float arg8, float arg9, s16 arg0, s16 arg1); void fn_1_6DFC(s32 arg0, float arg8); void fn_1_E210(s32 arg0); void fn_1_E914(ModelData *arg0, Mtx matrix); void fn_1_D9A8(M425DllUnkStruct4 *var_r31, ModelData *var_r24, s32 var_r30, s32 var_r26, s32 var_r25); void fn_1_DB44(M425DllUnkStruct4 *arg0, ModelData *model); void fn_1_DE3C(M425DllUnkStruct4 *arg0, ModelData *model); void fn_1_101C4(ModelData *model, Mtx matrix); void fn_1_11284(void); void fn_1_112FC(void); void fn_1_11418(void); s32 fn_1_11454(Vec *arg0, Vec *arg1, float arg8, float arg9); s16 fn_1_115D4(ModelData *arg0, Mtx arg1, Mtx arg2, float arg8); void fn_1_116E4(ModelData *arg1, LightData *arg2, s16 arg3, Mtx arg4, Mtx arg5, float arg8); s16 fn_1_11A74(AnimData *arg0, s16 arg1); void fn_1_11EE0(ModelData *model, Mtx matrix); Vec lbl_1_data_118[2] = { { -300.0f, 1.0f, 0.0f }, { 300.0f, 1.0f, 0.0f }, }; Process *lbl_1_bss_6F0; omObjData *lbl_1_bss_6EC; s32 lbl_1_bss_6E8; u8 *lbl_1_bss_6E4; AnimData *lbl_1_bss_6E0; AnimData *lbl_1_bss_6DC; AnimData *lbl_1_bss_6D8; // M425DllUnkStruct6 s32 lbl_1_bss_6D4; u8 lbl_1_bss_6D0; s32 lbl_1_bss_6CC; GXColor lbl_1_bss_6C8; GXLightObj lbl_1_bss_688; Vec lbl_1_bss_67C; Vec lbl_1_bss_670; omObjData *fn_1_6A0C(Process *process, s32 sp8) { omObjData *object; lbl_1_bss_6F0 = process; object = omAddObjEx(process, sp8, 6, 0, -1, fn_1_6BD8); lbl_1_bss_6EC = object; object->stat |= 0x100; lbl_1_bss_6E8 = 0; lbl_1_bss_6D0 = 0x40; lbl_1_bss_6CC = 0; object->model[0] = fn_1_6EC4(350.0f, 350.0f, 0x10, 0x10); object->model[1] = fn_1_6EC4(350.0f, 350.0f, 0x10, 0x10); fn_1_6CD0(0, &lbl_1_data_118[0]); fn_1_6CD0(1, &lbl_1_data_118[1]); fn_1_6DFC(0, 30.0f); fn_1_6DFC(1, -30.0f); lbl_1_bss_6E4 = HuDataReadNum(0x38000A, MEMORY_DEFAULT_NUM); lbl_1_bss_6E0 = HuSprAnimRead(HuDataReadNum(0x38000B, MEMORY_DEFAULT_NUM)); lbl_1_bss_6DC = HuSprAnimRead(HuDataReadNum(0x38000C, MEMORY_DEFAULT_NUM)); fn_1_11284(); return lbl_1_bss_6EC; } void fn_1_6BD8(omObjData *object) { fn_1_E210(0); fn_1_E210(1); fn_1_112FC(); } void fn_1_6C08(void) { omObjData *object = lbl_1_bss_6EC; if (object) { HuMemDirectFree(lbl_1_bss_6E4); lbl_1_bss_6E4 = NULL; HuSprAnimKill(lbl_1_bss_6E0); lbl_1_bss_6E0 = NULL; HuSprAnimKill(lbl_1_bss_6DC); lbl_1_bss_6DC = NULL; fn_1_11418(); lbl_1_bss_6EC = NULL; object->func = NULL; omDelObjEx(lbl_1_bss_6F0, object); } } void fn_1_6CD0(s32 arg0, Vec *arg1) { M425DllUnkStruct4 *var_r30; s32 var_r29; ModelData *var_r28; if (lbl_1_bss_6EC) { var_r28 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; var_r30 = var_r28->unk_120; var_r30->unk_CC.x = arg1->x; var_r30->unk_CC.y = arg1->y; var_r30->unk_CC.z = arg1->z; Hu3DModelPosSet(lbl_1_bss_6EC->model[arg0], arg1->x, arg1->y, arg1->z); if ((lbl_1_bss_6CC == 0) && (arg0 == 0) && (arg1->y <= 0.0f)) { for (var_r29 = 0; var_r29 < 4; var_r29++) { omVibrate(0, 0xC, 6, 6); } HuAudFXPlay(0x62E); lbl_1_bss_6CC = 1; } } } void fn_1_6DFC(s32 arg0, float arg8) { ModelData *var_r31; M425DllUnkStruct4 *var_r30; if (lbl_1_bss_6EC) { var_r31 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; var_r30 = var_r31->unk_120; var_r30->unk_D8 = arg8; Hu3DModelRotSet(lbl_1_bss_6EC->model[arg0], 0.0f, arg8, 0.0f); } } s32 fn_1_6EC4(float var_f24, float sp8, s16 var_r22, s16 var_r24) { float sp24; float sp20; float sp1C; float sp18; float sp14; float sp10; void *spC; float var_f31; float var_f30; float var_f29; float var_f28; float var_f27; float var_f26; float var_f25; float var_f23; float var_f22; float var_f21; float var_f20; float var_f19; float var_f18; M425DllUnkStruct4 *var_r31; s32 var_r30; Vec *var_r29; Vec2f *var_r28; s32 var_r27; Vec *var_r26; s16 *var_r25; ModelData *var_r23; s32 var_r21; s16 *var_r20; s32 var_r19; s16 var_r18; void *var_r17; var_r19 = Hu3DHookFuncCreate(fn_1_101C4); var_r23 = &Hu3DData[var_r19]; Hu3DModelLayerSet(var_r19, 5); var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(M425DllUnkStruct4), var_r23->unk_48); var_r23->unk_120 = var_r31; memset(var_r31, 0, sizeof(M425DllUnkStruct4)); var_r31->unk_00 = lbl_1_bss_6E8; lbl_1_bss_6E8++; var_r31->unk_02 = 0; var_r31->unk_04 = Hu3DModelCreateFile(0x38000D); Hu3DModelLayerSet(var_r31->unk_04, 6); var_r31->unk_06 = 0; var_r31->unk_08 = 1000.0f; var_r31->unk_0C = 1000.0f; var_r31->unk_10 = 1000.0f; var_r31->unk_14 = 0.0f; var_r31->unk_18 = 0.0f; var_r31->unk_1C = 0.0f; var_r31->unk_20 = 0.0f; var_r31->unk_24 = sp8; var_r31->unk_FC = var_f24; var_r31->unk_100 = sp8; var_r31->unk_28 = 0; var_r31->unk_2C = 0; var_r31->unk_30 = 0.0f; for (var_r30 = 0; var_r30 < 6; var_r30++) { var_r31->unk_3C[var_r30] = -1; var_r31->unk_54[var_r30] = 0.0f; var_r31->unk_84[var_r30] = -1; var_r31->unk_9C[var_r30] = 0.0f; } var_r31->unk_CC.x = var_r31->unk_CC.y = var_r31->unk_CC.z = 0.0f; var_r31->unk_D8 = 0.0f; var_r31->unk_DC = 1.0f; var_r31->unk_F0[0] = -1; var_r31->unk_F0[1] = -1; var_r31->unk_F0[2] = -1; lbl_1_bss_6EC->model[var_r31->unk_00 + 2] = var_r31->unk_04; if (var_r31->unk_00 == 0) { var_r31->unk_E0 = var_f22 = 302.0f; var_r31->unk_E4 = var_f27 = 193.0f; } else { var_r31->unk_E0 = var_f22 = 302.0f; var_r31->unk_E4 = var_f27 = 150.0f; } var_r31->unk_E8 = var_r31->unk_EC = 0.0f; var_f30 = sind(var_f27) * cosd(var_f22); var_f26 = cosd(var_f27) * cosd(var_f22); var_f28 = sind(var_f22); sp24 = sqrtf((var_f26 * var_f26) + ((var_f30 * var_f30) + (var_f28 * var_f28))); if (sp24 != 0.0f) { sp24 = 1.0f / sp24; } else { sp24 = 0.0f; } var_f30 *= sp24; var_f28 *= sp24; var_f26 *= sp24; var_r30 = Hu3DLLightCreate(var_r19, 1000.0f * var_f30, 1000.0f * var_f28, 1000.0f * var_f26, var_f30, var_f28, var_f26, 0xFF, 0xFF, 0xFF); Hu3DLLightInfinitytSet(var_r19, var_r30); Hu3DLLightStaticSet(var_r19, var_r30, 1); var_r22++; var_r24++; sp14 = var_f24 - 50.0f; sp10 = sp8 - 50.0f; var_r31->unk_112[0] = var_r24 * var_r24; var_r31->unk_144[0] = 0; var_r31->unk_112[1] = var_r22 * var_r24; var_r31->unk_144[1] = var_r31->unk_144[0] + var_r31->unk_112[0]; if (var_r31->unk_00 != 0) { var_r31->unk_112[2] = 0; } else { var_r31->unk_112[2] = var_r22 * var_r24; } var_r31->unk_144[2] = var_r31->unk_144[1] + var_r31->unk_112[1]; if (var_r31->unk_00 == 0) { var_r31->unk_112[3] = 0; } else { var_r31->unk_112[3] = var_r22 * var_r24; } var_r31->unk_144[3] = var_r31->unk_144[2] + var_r31->unk_112[2]; var_r31->unk_112[4] = var_r24 * 5; var_r31->unk_144[4] = var_r31->unk_144[3] + var_r31->unk_112[3]; var_r31->unk_112[5] = var_r24 * 5; var_r31->unk_144[5] = var_r31->unk_144[4] + var_r31->unk_112[4]; var_r31->unk_112[6] = var_r22 * 5; var_r31->unk_144[6] = var_r31->unk_144[5] + var_r31->unk_112[5]; var_r31->unk_112[7] = var_r22 * 5; var_r31->unk_144[7] = var_r31->unk_144[6] + var_r31->unk_112[6]; var_r31->unk_112[8] = var_r24 * 5; var_r31->unk_144[8] = var_r31->unk_144[7] + var_r31->unk_112[7]; var_r31->unk_112[9] = var_r24 * 5; var_r31->unk_144[9] = var_r31->unk_144[8] + var_r31->unk_112[8]; var_r31->unk_112[10] = var_r24 * 5; var_r31->unk_144[10] = var_r31->unk_144[9] + var_r31->unk_112[9]; var_r31->unk_112[11] = var_r24 * 5; var_r31->unk_144[11] = var_r31->unk_144[10] + var_r31->unk_112[10]; var_r31->unk_112[12] = var_r24 * 5; var_r31->unk_144[12] = var_r31->unk_144[11] + var_r31->unk_112[11]; var_r31->unk_112[13] = var_r24 * 5; var_r31->unk_144[13] = var_r31->unk_144[12] + var_r31->unk_112[12]; if (var_r31->unk_00 == 0) { var_r31->unk_112[14] = 0; } else { var_r31->unk_112[14] = var_r22 * 5; } var_r31->unk_144[14] = var_r31->unk_144[13] + var_r31->unk_112[13]; if (var_r31->unk_00 != 0) { var_r31->unk_112[15] = 0; } else { var_r31->unk_112[15] = var_r22 * 5; } var_r31->unk_144[15] = var_r31->unk_144[14] + var_r31->unk_112[14]; var_r31->unk_112[16] = 0x19; var_r31->unk_144[16] = var_r31->unk_144[15] + var_r31->unk_112[15]; var_r31->unk_112[17] = 0x19; var_r31->unk_144[17] = var_r31->unk_144[16] + var_r31->unk_112[16]; var_r31->unk_112[18] = 0x19; var_r31->unk_144[18] = var_r31->unk_144[17] + var_r31->unk_112[17]; var_r31->unk_112[19] = 0x19; var_r31->unk_144[19] = var_r31->unk_144[18] + var_r31->unk_112[18]; var_r31->unk_112[20] = 0x19; var_r31->unk_144[20] = var_r31->unk_144[19] + var_r31->unk_112[19]; var_r31->unk_112[21] = 0x19; var_r31->unk_144[21] = var_r31->unk_144[20] + var_r31->unk_112[20]; var_r31->unk_112[22] = 0x19; var_r31->unk_144[22] = var_r31->unk_144[21] + var_r31->unk_112[21]; var_r31->unk_112[23] = 0x19; var_r31->unk_144[23] = var_r31->unk_144[22] + var_r31->unk_112[22]; var_r31->unk_112[24] = var_r24 * var_r24; var_r31->unk_144[24] = var_r31->unk_144[23] + var_r31->unk_112[23]; if (var_r31->unk_00 == 0) { var_r31->unk_06 = var_r31->unk_144[17] + (var_r31->unk_112[17] / 2) + 1; } else { var_r31->unk_06 = var_r31->unk_144[16] + (var_r31->unk_112[16] / 2) - 1; } var_r31->unk_10C = var_r22; var_r31->unk_10E = var_r24; var_r31->unk_110 = var_r31->unk_144[24] + var_r31->unk_112[24]; var_r31->unk_240 = 0x19; var_r31->unk_178 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(s16), var_r23->unk_48); memset(var_r31->unk_178, 0, var_r31->unk_110 * sizeof(s16)); var_r31->unk_17C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec), var_r23->unk_48); memset(var_r31->unk_17C, 0, var_r31->unk_110 * sizeof(Vec)); var_r31->unk_180 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec), var_r23->unk_48); memset(var_r31->unk_180, 0, var_r31->unk_110 * sizeof(Vec)); var_r31->unk_184 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec2f), var_r23->unk_48); memset(var_r31->unk_184, 0, var_r31->unk_110 * sizeof(Vec2f)); var_r31->unk_188 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec), var_r23->unk_48); memset(var_r31->unk_188, 0, var_r31->unk_110 * sizeof(Vec)); var_r31->unk_18C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec), var_r23->unk_48); memset(var_r31->unk_18C, 0, var_r31->unk_110 * sizeof(Vec)); var_r31->unk_190 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * 6, var_r23->unk_48); memset(var_r31->unk_190, 0, var_r31->unk_110 * 6); var_r31->unk_194 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110 * sizeof(Vec), var_r23->unk_48); memset(var_r31->unk_194, 0, var_r31->unk_110 * sizeof(Vec)); var_r31->unk_198 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_112[0] * sizeof(Vec), var_r23->unk_48); memset(var_r31->unk_198, 0, var_r31->unk_112[0] * sizeof(Vec)); var_r31->unk_1A0 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_110, var_r23->unk_48); memset(var_r31->unk_1A0, 0, var_r31->unk_110); for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { if (((var_r31->unk_112[0] > 0) && (var_r30 >= var_r31->unk_144[0]) && (var_r30 < (var_r31->unk_144[0] + var_r31->unk_112[0]))) || ((var_r31->unk_112[4] > 0) && (var_r30 >= var_r31->unk_144[4]) && (var_r30 < (var_r31->unk_144[4] + var_r31->unk_112[4]))) || ((var_r31->unk_112[8] > 0) && (var_r30 >= var_r31->unk_144[8]) && (var_r30 < (var_r31->unk_144[8] + var_r31->unk_112[8]))) || ((var_r31->unk_112[10] > 0) && (var_r30 >= var_r31->unk_144[10]) && (var_r30 < (var_r31->unk_144[10] + var_r31->unk_112[10]))) || ((var_r31->unk_112[12] > 0) && (var_r30 >= var_r31->unk_144[12]) && (var_r30 < (var_r31->unk_144[12] + var_r31->unk_112[12]))) || ((var_r31->unk_112[16] > 0) && (var_r30 >= var_r31->unk_144[16]) && (var_r30 < (var_r31->unk_144[16] + var_r31->unk_112[16]))) || ((var_r31->unk_112[17] > 0) && (var_r30 >= var_r31->unk_144[17]) && (var_r30 < (var_r31->unk_144[17] + var_r31->unk_112[17]))) || ((var_r31->unk_112[20] > 0) && (var_r30 >= var_r31->unk_144[20]) && (var_r30 < (var_r31->unk_144[20] + var_r31->unk_112[20]))) || ((var_r31->unk_112[21] > 0) && (var_r30 >= var_r31->unk_144[21]) && (var_r30 < (var_r31->unk_144[21] + var_r31->unk_112[21])))) { var_r31->unk_1A0[var_r30] = 1; } else { var_r31->unk_1A0[var_r30] = 0; } } var_r31->unk_23A.r = 0; var_r31->unk_23A.g = 0; var_r31->unk_23A.b = 0xFF; var_r31->unk_23A.a = 0x40; var_r29 = &var_r31->unk_17C[var_r31->unk_144[0]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[0]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[0]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[0]]; var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); sp20 = var_f28 = sp8; sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp14 / (var_r24 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[0] != 0) { for (var_r30 = 0; var_r30 < var_r31->unk_10E; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_r29->x = var_f30; var_r29->y = var_f28; var_r29->z = var_f26; var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f26 = var_f26 + var_f23; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0, var_r24 - 1, var_r24 - 1); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[1]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[1]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[1]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[1]]; var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = 0.5f * var_f24; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[1] != 0) { for (var_r30 = 0; var_r30 < var_r31->unk_10E; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_r29->x = var_f30; var_r29->y = var_f28; var_r29->z = var_f26; var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 1, var_r24 - 1, var_r22 - 1); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[2]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[2]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[2]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[2]]; var_f25 = var_f30 = -(0.5f * var_f24); sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[2] != 0) { for (var_r30 = 0; var_r30 < var_r31->unk_10E; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_r29->x = var_f30; var_r29->y = var_f28; var_r29->z = var_f26; var_r28->x = var_f31; var_r28->y = var_f29; var_f26 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f26 = sp1C; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 2, var_r24 - 1, var_r22 - 1); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[3]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[3]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[3]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[3]]; var_f25 = var_f30 = 0.5f * var_f24; sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = (0.5f * var_f24) - 25.0f; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[3] != 0) { for (var_r30 = 0; var_r30 < var_r31->unk_10E; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_r29->x = var_f30; var_r29->y = var_f28; var_r29->z = var_f26; var_r28->x = var_f31; var_r28->y = var_f29; var_f26 -= var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f26 = sp1C; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 3, var_r24 - 1, var_r22 - 1); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[4]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[4]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[4]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[4]]; var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); sp20 = var_f28 = sp8; sp1C = var_f26 = (0.5f * var_f24) - 25.0f; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[4] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_f27 = 90.0f * (var_r30 / 4.0f); var_r29->x = var_f30; var_r29->y = sp20 + (25.0 * (cosd(var_f27) - 1.0)); var_r29->z = sp1C + (25.0 * sind(var_f27)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 4, var_r24 - 1, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[5]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[5]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[5]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[5]]; var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); sp20 = var_f28 = 25.0f; sp1C = var_f26 = (0.5f * var_f24) - 25.0f; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[5] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_f27 = 90.0f + (90.0f * (var_r30 / 4.0f)); var_r29->x = var_f30; var_r29->y = sp20 + (25.0 * cosd(var_f27)); var_r29->z = sp1C + (25.0 * sind(var_f27)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 5, var_r24 - 1, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[6]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[6]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[6]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[6]]; var_f25 = var_f30 = -(0.5f * var_f24); sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = (0.5f * var_f24) - 25.0f; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[6] != 0) { for (var_r30 = 0; var_r30 < var_r31->unk_10C; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = 90.0f * (var_r27 / 4.0f); var_r29->x = var_f25 - (25.0 * (cosd(var_f27) - 1.0)); var_r29->y = var_f28; var_r29->z = sp1C + (25.0 * sind(var_f27)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 6, 4, var_r22 - 1); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[7]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[7]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[7]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[7]]; var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = 0.5f * var_f24; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[7] != 0) { for (var_r30 = 0; var_r30 < var_r31->unk_10C; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = 90.0f - (90.0f * (var_r27 / 4.0f)); var_r29->x = var_f25 + (25.0 * cosd(var_f27)); var_r29->y = var_f28; var_r29->z = sp1C + (25.0 * (sind(var_f27) - 1.0)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 7, 4, var_r22 - 1); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[8]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[8]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[8]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[8]]; var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[8] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_f27 = 90.0f + (90.0f * (var_r30 / 4.0f)); var_r29->x = var_f25 + 25.0 * cosd(var_f27); var_r29->y = sp20 + (25.0 * sind(var_f27)); var_r29->z = var_f26; var_r28->x = var_f31; var_r28->y = var_f29; var_f26 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f26 = sp1C; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 8, var_r24 - 1, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[9]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[9]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[9]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[9]]; var_f25 = var_f30 = -(0.5f * var_f24 - 25.0f); sp20 = var_f28 = 25.0f; sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[9] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_f27 = 180.0f + (90.0f * (var_r30 / 4.0f)); var_r29->x = var_f25 + (25.0 * cosd(var_f27)); var_r29->y = sp20 + (25.0 * sind(var_f27)); var_r29->z = var_f26; var_r28->x = var_f31; var_r28->y = var_f29; var_f26 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f26 = sp1C; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 9, var_r24 - 1, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[10]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[10]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[10]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[10]]; var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = (0.5f * var_f24) - 25.0f; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[10] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_f27 = 90.0f - (90.0f * (var_r30 / 4.0f)); var_r29->x = var_f25 + (25.0 * cosd(var_f27)); var_r29->y = sp20 + (25.0 * sind(var_f27)); var_r29->z = var_f26; var_r28->x = var_f31; var_r28->y = var_f29; var_f26 -= var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f26 = sp1C; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0xA, var_r24 - 1, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[11]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[11]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[11]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[11]]; var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; sp20 = var_f28 = 25.0f; sp1C = var_f26 = (0.5f * var_f24) - 25.0f; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[11] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_f27 = -(90.0f * (var_r30 / 4.0f)); var_r29->x = var_f25 + (25.0 * cosd(var_f27)); var_r29->y = sp20 + (25.0 * sind(var_f27)); var_r29->z = var_f26; var_r28->x = var_f31; var_r28->y = var_f29; var_f26 -= var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f26 = sp1C; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0xB, var_r24 - 1, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[12]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[12]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[12]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[12]]; var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[12] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_f27 = 90.0f + (90.0f * (var_r30 / 4.0f)); var_r29->x = var_f30; var_r29->y = sp20 + (25.0 * sind(var_f27)); var_r29->z = sp1C + (25.0 * cosd(var_f27)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 -= var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0xC, var_r24 - 1, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[13]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[13]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[13]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[13]]; var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; sp20 = var_f28 = 25.0f; sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[13] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_f27 = 180.0f + (90.0f * (var_r30 / 4.0f)); var_r29->x = var_f30; var_r29->y = sp20 + (25.0 * sind(var_f27)); var_r29->z = sp1C + (25.0 * cosd(var_f27)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 -= var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0xD, var_r24 - 1, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[14]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[14]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[14]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[14]]; var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[14] != 0) { for (var_r30 = 0; var_r30 < var_r31->unk_10C; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = -(90.0f * (var_r27 / 4.0f)); var_r29->x = var_f25 + (25.0 * cosd(var_f27)); var_r29->y = var_f28; var_r29->z = sp1C + (25.0 * sind(var_f27)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0xE, 4, var_r22 - 1); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[15]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[15]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[15]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[15]]; var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[15] != 0) { for (var_r30 = 0; var_r30 < var_r31->unk_10C; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = -90.0f - (90.0f * (var_r27 / 4.0f)); var_r29->x = var_f25 + (25.0 * cosd(var_f27)); var_r29->y = var_f28; var_r29->z = sp1C + (25.0 * sind(var_f27)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0xF, 4, var_r22 - 1); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[16]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[16]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[16]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[16]]; var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = (0.5f * var_f24) - 25.0f; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[16] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = 90.0f * (var_r27 / 4.0f); var_f22 = 90.0f * (var_r30 / 4.0f); var_r29->x = var_f25 - (25.0 * cosd(var_f27) * sind(var_f22)); var_r29->y = sp20 + (25.0 * cosd(var_f22)); var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0x10, 4, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[17]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[17]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[17]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[17]]; var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = (0.5f * var_f24) - 25.0f; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[17] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = 90.0f - (90.0f * (var_r27 / 4.0f)); var_f22 = -(90.0f * (var_r30 / 4.0f)); var_r29->x = var_f25 + (25.0 * cosd(var_f27) * -sind(var_f22)); var_r29->y = sp20 + (25.0 * cosd(var_f22)); var_r29->z = sp1C + (25.0 * sind(var_f27) * -sind(var_f22)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0x11, 4, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[18]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[18]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[18]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[18]]; var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); sp20 = var_f28 = 25.0f; sp1C = var_f26 = (0.5f * var_f24) - 25.0f; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[18] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = 90.0f * (var_r27 / 4.0f); var_f22 = 90.0f + (90.0f * (var_r30 / 4.0f)); var_r29->x = var_f25 - (25.0 * cosd(var_f27) * sind(var_f22)); var_r29->y = sp20 + (25.0 * cosd(var_f22)); var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0x12, 4, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[19]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[19]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[19]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[19]]; var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; sp20 = var_f28 = 25.0f; sp1C = var_f26 = (0.5f * var_f24) - 25.0f; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[19] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = 90.0f * (var_r27 / 4.0f); var_f22 = 90.0f * (var_r30 / 4.0f); var_r29->x = var_f25 + (25.0 * cosd(var_f27) * sind(var_f22)); var_r29->y = sp20 - (25.0 * cosd(var_f22)); var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0x13, 4, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[20]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[20]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[20]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[20]]; var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[20] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = 180.0f + (90.0f * (var_r27 / 4.0f)); var_f22 = 90.0f * (var_r30 / 4.0f); var_r29->x = var_f25 - (25.0 * cosd(var_f27) * sind(var_f22)); var_r29->y = sp20 + (25.0 * cosd(var_f22)); var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0x14, 4, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[21]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[21]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[21]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[21]]; var_f25 = var_f30 = -(0.5f * var_f24 - 25.0f); sp20 = var_f28 = sp8 - 25.0f; sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[21] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = 270.0f - (90.0f * (var_r27 / 4.0f)); var_f22 = -(90.0f * (var_r30 / 4.0f)); var_r29->x = var_f25 + (cosd(var_f27) * 25.0 * -sind(var_f22)); var_r29->y = sp20 + 25.0 * cosd(var_f22); var_r29->z = sp1C + (25.0 * sind(var_f27) * -sind(var_f22)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0x15, 4, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[22]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[22]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[22]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[22]]; var_f25 = var_f30 = (0.5f * var_f24) - 25.0f; sp20 = var_f28 = 25.0f; sp1C = var_f26 = -((0.5f * var_f24) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[22] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = 180.0f + (90.0f * (var_r27 / 4.0f)); var_f22 = 90.0f + (90.0f * (var_r30 / 4.0f)); var_r29->x = var_f25 - (25.0 * cosd(var_f27) * sind(var_f22)); var_r29->y = sp20 + (25.0 * cosd(var_f22)); var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0x16, 4, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[23]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[23]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[23]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[23]]; var_f25 = var_f30 = -((var_f24 * 0.5f) - 25.0f); sp20 = var_f28 = 25.0f; sp1C = var_f26 = -((var_f24 * 0.5f) - 25.0f); var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp10 / (var_r22 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[23] != 0) { for (var_r30 = 0; var_r30 < 5; var_r30++) { for (var_r27 = 0; var_r27 < 5; var_r27++) { var_f27 = 180.0f + (90.0f * (var_r27 / 4.0f)); var_f22 = 90.0f * (var_r30 / 4.0f); var_r29->x = var_f25 + (25.0 * cosd(var_f27) * sind(var_f22)); var_r29->y = sp20 - (25.0 * cosd(var_f22)); var_r29->z = sp1C + (25.0 * sind(var_f27) * sind(var_f22)); var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f28 -= var_f18; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0x17, 4, 4); } var_r29 = &var_r31->unk_17C[var_r31->unk_144[24]]; var_r26 = &var_r31->unk_188[var_r31->unk_144[24]]; var_r28 = &var_r31->unk_184[var_r31->unk_144[24]]; var_r25 = &var_r31->unk_178[var_r31->unk_144[24]]; var_f25 = var_f30 = -((0.5f * var_f24) - 25.0f); sp20 = var_f28 = 0.0f; sp1C = var_f26 = (0.5f * var_f24) - 25.0f; var_f19 = var_f31 = 0.0f; sp18 = var_f29 = 0.0f; var_f23 = sp14 / (var_r24 - 1); var_f18 = sp14 / (var_r24 - 1); var_f21 = 1.0f / (var_r31->unk_10E - 1); var_f20 = 1.0f / (var_r31->unk_10E - 1); if (var_r31->unk_112[0x18] != 0) { for (var_r30 = 0; var_r30 < var_r31->unk_10E; var_r30++) { for (var_r27 = 0; var_r27 < var_r31->unk_10E; var_r27++) { var_r29->x = var_f30; var_r29->y = var_f28; var_r29->z = var_f26; var_r28->x = var_f31; var_r28->y = var_f29; var_f30 += var_f23; var_f31 += var_f21; var_r29++; var_r26++; var_r28++; var_r25++; } var_f30 = var_f25; var_f31 = var_f19; var_f26 = var_f26 - var_f23; var_f29 += var_f20; } fn_1_D9A8(var_r31, var_r23, 0x18, var_r24 - 1, var_r24 - 1); } for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { for (var_r27 = 0; var_r27 < var_r30; var_r27++) { var_f30 = var_r31->unk_17C[var_r30].x - var_r31->unk_17C[var_r27].x; var_f28 = var_r31->unk_17C[var_r30].y - var_r31->unk_17C[var_r27].y; var_f26 = var_r31->unk_17C[var_r30].z - var_r31->unk_17C[var_r27].z; sp24 = (var_f26 * var_f26) + ((var_f30 * var_f30) + (var_f28 * var_f28)); if (sp24 < 10.0f) { var_r31->unk_178[var_r30] = var_r27; if (var_r31->unk_178[var_r27] != -1) { var_r31->unk_178[var_r30] = var_r31->unk_178[var_r27]; } break; } } if (var_r27 >= var_r30) { var_r31->unk_178[var_r30] = -1; } } memcpy(var_r31->unk_180, var_r31->unk_17C, var_r31->unk_110 * 0xC); memcpy(var_r31->unk_198, &var_r31->unk_180[var_r31->unk_144[0]], var_r31->unk_112[0] * 0xC); var_r31->unk_19C = 0; fn_1_DB44(var_r31, var_r23); fn_1_DE3C(var_r31, var_r23); var_f31 = sqrtf((0.5f * sp8 * (0.5f * sp8)) + ((0.5f * var_f24 * (0.5f * var_f24)) + (0.5f * var_f24 * (0.5f * var_f24)))); for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { var_f30 = var_r31->unk_17C[var_r30].x; var_f28 = var_r31->unk_17C[var_r30].y - (0.5f * sp8); var_f26 = var_r31->unk_17C[var_r30].z; sp24 = sqrtf((var_f26 * var_f26) + ((var_f30 * var_f30) + (var_f28 * var_f28))); var_f27 = sp24; sp24 = 1.0f - (sp24 / var_f31); if (var_f27 != 0.0f) { var_f22 = 1.0f / var_f27; } else { var_f22 = 0.0; } var_r31->unk_194[var_r30].x = sp24 * (var_f22 * var_r31->unk_17C[var_r30].x); var_r31->unk_194[var_r30].y = sp24 * (var_f22 * var_r31->unk_17C[var_r30].y); var_r31->unk_194[var_r30].z = sp24 * (var_f22 * var_r31->unk_17C[var_r30].z); } for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { if ((((var_r31->unk_112[6] <= 0) || (var_r30 < var_r31->unk_144[6]) || (var_r30 >= (var_r31->unk_144[6] + var_r31->unk_112[6]))) && ((var_r31->unk_112[7] <= 0) || (var_r30 < var_r31->unk_144[7]) || (var_r30 >= (var_r31->unk_144[7] + var_r31->unk_112[7]))) && ((var_r31->unk_112[0xE] <= 0) || (var_r30 < var_r31->unk_144[0xE]) || (var_r30 >= (var_r31->unk_144[0xE] + var_r31->unk_112[0xE]))) && ((var_r31->unk_112[0xF] <= 0) || (var_r30 < var_r31->unk_144[0xF]) || (var_r30 >= (var_r31->unk_144[0xF] + var_r31->unk_112[0xF]))) && ((var_r31->unk_112[4] <= 0) || (var_r30 < var_r31->unk_144[4]) || (var_r30 >= (var_r31->unk_144[4] + var_r31->unk_112[4]))) && ((var_r31->unk_112[8] <= 0) || (var_r30 < var_r31->unk_144[8]) || (var_r30 >= (var_r31->unk_144[8] + var_r31->unk_112[8]))) && ((var_r31->unk_112[0xA] <= 0) || (var_r30 < var_r31->unk_144[0xA]) || (var_r30 >= (var_r31->unk_144[0xA] + var_r31->unk_112[0xA]))) && ((var_r31->unk_112[0xC] <= 0) || (var_r30 < var_r31->unk_144[0xC]) || (var_r30 >= (var_r31->unk_144[0xC] + var_r31->unk_112[0xC]))) && ((var_r31->unk_112[0x10] <= 0) || (var_r30 < var_r31->unk_144[0x10]) || (var_r30 >= (var_r31->unk_144[0x10] + var_r31->unk_112[0x10]))) && ((var_r31->unk_112[0x11] <= 0) || (var_r30 < var_r31->unk_144[0x11]) || (var_r30 >= (var_r31->unk_144[0x11] + var_r31->unk_112[0x11]))) && ((var_r31->unk_112[0x14] <= 0) || (var_r30 < var_r31->unk_144[0x14]) || (var_r30 >= (var_r31->unk_144[0x14] + var_r31->unk_112[0x14]))) && ((var_r31->unk_112[0x15] <= 0) || (var_r30 < var_r31->unk_144[0x15]) || (var_r30 >= (var_r31->unk_144[0x15] + var_r31->unk_112[0x15]))) && (var_r30 >= var_r31->unk_144[4])) || (var_r31->unk_178[var_r30] != -1)) { var_r31->unk_18C[var_r30].x = var_r31->unk_18C[var_r30].y = var_r31->unk_18C[var_r30].z = 0.0; var_r31->unk_190[var_r30][0] = var_r31->unk_190[var_r30][1] = 0; var_r31->unk_190[var_r30][2] = 0; } else if (((var_r31->unk_112[0] > 0) && (var_r30 >= var_r31->unk_144[0]) && (var_r30 < (var_r31->unk_144[0] + var_r31->unk_112[0]))) || ((var_r31->unk_112[4] > 0) && (var_r30 >= var_r31->unk_144[4]) && (var_r30 < (var_r31->unk_144[4] + var_r31->unk_112[4]))) || ((var_r31->unk_112[8] > 0) && (var_r30 >= var_r31->unk_144[8]) && (var_r30 < (var_r31->unk_144[8] + var_r31->unk_112[8]))) || ((var_r31->unk_112[0xA] > 0) && (var_r30 >= var_r31->unk_144[0xA]) && (var_r30 < (var_r31->unk_144[0xA] + var_r31->unk_112[0xA]))) || ((var_r31->unk_112[0xC] > 0) && (var_r30 >= var_r31->unk_144[0xC]) && (var_r30 < (var_r31->unk_144[0xC] + var_r31->unk_112[0xC]))) || ((var_r31->unk_112[0x10] > 0) && (var_r30 >= var_r31->unk_144[0x10]) && (var_r30 < (var_r31->unk_144[0x10] + var_r31->unk_112[0x10]))) || ((var_r31->unk_112[0x11] > 0) && (var_r30 >= var_r31->unk_144[0x11]) && (var_r30 < (var_r31->unk_144[0x11] + var_r31->unk_112[0x11]))) || ((var_r31->unk_112[0x14] > 0) && (var_r30 >= var_r31->unk_144[0x14]) && (var_r30 < (var_r31->unk_144[0x14] + var_r31->unk_112[0x14]))) || ((var_r31->unk_112[0x15] > 0) && (var_r30 >= var_r31->unk_144[0x15]) && (var_r30 < (var_r31->unk_144[0x15] + var_r31->unk_112[0x15])))) { *var_r31->unk_190[var_r30] = var_r31->unk_190[var_r30][1] = 0; sp24 = sqrtf((var_r31->unk_17C[var_r30].x * var_r31->unk_17C[var_r30].x) + (var_r31->unk_17C[var_r30].z * var_r31->unk_17C[var_r30].z)); var_f27 = sp24; sp24 = 1.0f - (sp24 / sqrtf(var_f24 * var_f24)); var_r31->unk_18C[var_r30].y = -(180.0f * sp24); var_f27 = sqrtf(var_f27); if (var_f27 != 0.0f) { var_f22 = 1.0f / var_f27; } else { var_f22 = 0.0; } var_r31->unk_18C[var_r30].x = sind((180.0f * (var_f22 * var_r31->unk_17C[var_r30].x))); var_r31->unk_18C[var_r30].z = sind((180.0f * (var_f22 * var_r31->unk_17C[var_r30].z))); var_r31->unk_18C[var_r30].x *= 20.0f * -(1.0f - sp24); var_r31->unk_18C[var_r30].z *= (20.0f * -(1.0f - sp24)); var_r31->unk_190[var_r30][2] = 1; } else { sp24 = sqrtf((var_r31->unk_17C[var_r30].x * var_r31->unk_17C[var_r30].x) + (var_r31->unk_17C[var_r30].z * var_r31->unk_17C[var_r30].z)); if (sp24 != 0.0f) { sp24 = 1.0f / sp24; } else { sp24 = 0.0f; } var_r31->unk_18C[var_r30].x = -(sp24 * var_r31->unk_17C[var_r30].x); var_r31->unk_18C[var_r30].z = -(sp24 * var_r31->unk_17C[var_r30].z); var_r31->unk_18C[var_r30].y = 0.0; var_f27 = 180.0 + atan2d(var_r31->unk_17C[var_r30].x, var_r31->unk_17C[var_r30].z); if (var_f27 > 360.0f) { var_f27 = fmod(var_f27, 360.0); } else if (var_f27 < 0.0f) { var_f27 += 360.0f; } var_f27 = 255.0f * (0.0027777778f * var_f27); if (var_f27 >= 255.0f) { var_f27 = 255.0f; } else if (var_f27 < 0.0f) { var_f27 = 0.0; } var_f22 = 64.0f * (var_r31->unk_17C[var_r30].y / sp8); if (var_f22 >= 63.0f) { var_f22 = 63.0f; } else if (var_f22 < 0.0f) { var_f22 = 0.0; } var_r31->unk_190[var_r30][0] = var_f27; var_r31->unk_190[var_r30][1] = var_f22; var_r31->unk_190[var_r30][2] = 2; } } DCFlushRangeNoSync(var_r31->unk_180, var_r31->unk_110 * 0xC); DCFlushRangeNoSync(var_r31->unk_17C, var_r31->unk_110 * 0xC); DCFlushRangeNoSync(var_r31->unk_188, var_r31->unk_110 * 0xC); DCFlushRangeNoSync(var_r31->unk_184, var_r31->unk_110 * 8); DCFlushRangeNoSync(var_r31->unk_178, var_r31->unk_110 * 2); PPCSync(); for (var_r21 = 0; var_r21 < 0x19; var_r21++) { if ((var_r31->unk_208[var_r21] != 0) && var_r31->unk_1A4[var_r21] && (var_r31->unk_112[var_r21] != 0)) { var_r17 = HuMemDirectMallocNum(HEAP_DATA, 0x4000, var_r23->unk_48); spC = var_r17; (void)var_r18; DCFlushRange(var_r17, 0x4000); GXBeginDisplayList(spC, 0x4000); GXBegin(GX_QUADS, GX_VTXFMT0, var_r31->unk_208[var_r21] * 4); var_r20 = var_r31->unk_1A4[var_r21]; for (var_r30 = 0; var_r30 < var_r31->unk_208[var_r21]; var_r30++) { for (var_r27 = 0; var_r27 < 4; var_r27++) { if (var_r31->unk_178[var_r20[var_r27]] == -1) { var_r18 = var_r20[var_r27]; } else { var_r18 = var_r31->unk_178[var_r20[var_r27]]; } GXPosition1x16(var_r18); GXNormal1x16(var_r18); GXColor1x16(0); GXTexCoord1x16(var_r20[var_r27]); } var_r20 += 5; } var_r31->unk_244[var_r21] = GXEndDisplayList(); if (var_r31->unk_244[var_r21] >= 0x4000) { OSReport("ERROR! GList test size over! \n"); } var_r31->unk_2A8[var_r21] = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_244[var_r21], var_r23->unk_48); memcpy(var_r31->unk_2A8[var_r21], var_r17, var_r31->unk_244[var_r21]); DCFlushRange(var_r31->unk_2A8[var_r21], var_r31->unk_244[var_r21]); HuMemDirectFree(var_r17); } } return var_r19; } void fn_1_D9A8(M425DllUnkStruct4 *var_r31, ModelData *var_r24, s32 var_r30, s32 var_r26, s32 var_r25) { s16 *var_r29; s32 var_r28; s32 var_r27; var_r31->unk_208[var_r30] = var_r26 * var_r25; var_r31->unk_1A4[var_r30] = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_208[var_r30] * 0xA, var_r24->unk_48); memset(var_r31->unk_1A4[var_r30], 0, var_r31->unk_208[var_r30] * 0xA); var_r29 = var_r31->unk_1A4[var_r30]; for (var_r28 = 0; var_r28 < var_r25; var_r28++) { for (var_r27 = 0; var_r27 < var_r26; var_r27++) { var_r29[0] = var_r31->unk_144[var_r30] + (var_r26 + 1) * var_r28 + var_r27; var_r29[1] = var_r31->unk_144[var_r30] + (var_r26 + 1) * var_r28 + (var_r27 + 1); var_r29[2] = var_r31->unk_144[var_r30] + (var_r26 + 1) * (var_r28 + 1) + (var_r27 + 1); var_r29[3] = var_r31->unk_144[var_r30] + (var_r26 + 1) * (var_r28 + 1) + var_r27; var_r29 += 5; } } DCFlushRangeNoSync(var_r31->unk_1A4[var_r30], var_r31->unk_208[var_r30] * 0xA); PPCSync(); } void fn_1_DB44(M425DllUnkStruct4 *arg0, ModelData *model) { float var_f31; float var_f30; float var_f29; float var_f28; s16 *var_r31; s32 var_r30; s32 var_r29; s32 var_r28; for (var_r30 = 0; var_r30 < 0x19; var_r30++) { if ((arg0->unk_208[var_r30] != 0) && arg0->unk_1A4[var_r30]) { for (var_r31 = arg0->unk_1A4[var_r30], var_r29 = 0; var_r29 < arg0->unk_208[var_r30]; var_r29++, var_r31 += 0x5) { for (var_r28 = 0; var_r28 < 4; var_r28++) { if (arg0->unk_178[var_r31[var_r28]] != -1) { var_r31[var_r28] = arg0->unk_178[var_r31[var_r28]]; } } } } } for (var_r30 = 0; var_r30 < 0x19; var_r30++) { if ((arg0->unk_208[var_r30] != 0) && arg0->unk_1A4[var_r30]) { for (var_r31 = arg0->unk_1A4[var_r30], var_r29 = 0; var_r29 < arg0->unk_208[var_r30]; var_r29++, var_r31 += 0x5) { var_f31 = arg0->unk_17C[var_r31[0]].x - arg0->unk_17C[var_r31[1]].x; var_f30 = arg0->unk_17C[var_r31[0]].y - arg0->unk_17C[var_r31[1]].y; var_f29 = arg0->unk_17C[var_r31[0]].z - arg0->unk_17C[var_r31[1]].z; var_f28 = (var_f29 * var_f29) + ((var_f31 * var_f31) + (var_f30 * var_f30)); if (var_f28 < 10.0f) { var_r31[4] = 1; } else { var_f31 = arg0->unk_17C[var_r31[0]].x - arg0->unk_17C[var_r31[2]].x; var_f30 = arg0->unk_17C[var_r31[0]].y - arg0->unk_17C[var_r31[2]].y; var_f29 = arg0->unk_17C[var_r31[0]].z - arg0->unk_17C[var_r31[2]].z; var_f28 = (var_f29 * var_f29) + ((var_f31 * var_f31) + (var_f30 * var_f30)); if (var_f28 < 10.0f) { var_r31[4] = 2; } else { var_r31[4] = 0; } } } } } } void fn_1_DE3C(M425DllUnkStruct4 *arg0, ModelData *model) { Vec sp20; Vec sp14; Vec sp8; s32 var_r30; s32 var_r29; s16 *var_r28; s32 var_r27; s32 var_r26; s32 var_r25; s32 var_r24; memset(arg0->unk_188, 0, arg0->unk_110 * sizeof(Vec)); for (var_r30 = 0; var_r30 < arg0->unk_240; var_r30++) { if ((arg0->unk_208[var_r30] != 0) && arg0->unk_1A4[var_r30]) { for (var_r28 = arg0->unk_1A4[var_r30], var_r24 = 0; var_r24 < arg0->unk_208[var_r30]; var_r24++, var_r28 += 5) { switch (var_r28[4]) { case 1: var_r27 = 0; var_r29 = 2; var_r26 = 3; var_r25 = 1; break; case 2: var_r27 = 0; var_r29 = 1; var_r26 = 3; var_r25 = 2; break; default: var_r27 = 0; var_r29 = 1; var_r26 = 2; var_r25 = 3; break; } var_r27 = var_r28[var_r27]; var_r29 = var_r28[var_r29]; var_r26 = var_r28[var_r26]; var_r25 = var_r28[var_r25]; sp14.x = arg0->unk_180[var_r29].x - arg0->unk_180[var_r27].x; sp14.y = arg0->unk_180[var_r29].y - arg0->unk_180[var_r27].y; sp14.z = arg0->unk_180[var_r29].z - arg0->unk_180[var_r27].z; sp8.x = arg0->unk_180[var_r26].x - arg0->unk_180[var_r29].x; sp8.y = arg0->unk_180[var_r26].y - arg0->unk_180[var_r29].y; sp8.z = arg0->unk_180[var_r26].z - arg0->unk_180[var_r29].z; VECCrossProduct(&sp14, &sp8, &sp20); sp20.x *= -1.0f; sp20.y *= -1.0f; sp20.z *= -1.0f; arg0->unk_188[var_r27].x += sp20.x; arg0->unk_188[var_r27].y += sp20.y; arg0->unk_188[var_r27].z += sp20.z; arg0->unk_188[var_r29].x += sp20.x; arg0->unk_188[var_r29].y += sp20.y; arg0->unk_188[var_r29].z += sp20.z; arg0->unk_188[var_r26].x += sp20.x; arg0->unk_188[var_r26].y += sp20.y; arg0->unk_188[var_r26].z += sp20.z; arg0->unk_188[var_r25].x += sp20.x; arg0->unk_188[var_r25].y += sp20.y; arg0->unk_188[var_r25].z += sp20.z; } } } for (var_r30 = 0; var_r30 < arg0->unk_110; var_r30++) { VECNormalize(&arg0->unk_188[var_r30], &arg0->unk_188[var_r30]); } } s32 lbl_1_data_150[3][2] = { { 0x638, 0x63B }, { 0x639, 0x63C }, { 0x63A, 0x63D } }; GXColor lbl_1_data_168 = { 255, 255, 255, 255 }; Mtx lbl_1_data_16C = { { 0.5f, 0.0f, 0.0f, -0.5f }, { 0.0f, 0.5f, 0.0f, -0.5f }, { 0.0f, 0.0f, 0.5f, -0.5f }, }; Vec lbl_1_data_19C[4] = { { -0.5f, 0.5f, 0.0f }, { 0.5f, 0.5f, 0.0f }, { 0.5f, -0.5f, 0.0f }, { -0.5f, -0.5f, 0.0f }, }; Vec2f lbl_1_data_1CC[4] = { { 0.0f, 0.0f }, { 0.25f, 0.0f }, { 0.25f, 0.25f }, { 0.0f, 0.25f }, }; void fn_1_E210(s32 arg0) { Vec sp8; float var_f31; float var_f30; float var_f29; M425DllUnkStruct4 *var_r31; s32 var_r30; s32 var_r29; LightData *var_r28; ModelData *var_r27; s32 var_r26; if (lbl_1_bss_6EC) { var_r27 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; var_r31 = var_r27->unk_120; for (var_r30 = 0, var_f31 = 0.0f; var_r30 < 6; var_r30++) { if ((var_r31->unk_84[var_r30] == -1) || (var_r31->unk_9C[var_r30] < 0.0f)) { var_r31->unk_84[var_r30] = -1; var_r31->unk_9C[var_r30] = 0.0f; } else { var_f31 += var_r31->unk_9C[var_r30]; for (var_r29 = 0; var_r29 < 5; var_r29++) { if (var_r31->unk_3C[var_r29] == var_r31->unk_84[var_r30]) { break; } } if (var_r29 >= 5) { for (var_r29 = 0; var_r29 < 5; var_r29++) { if ((var_r31->unk_3C[var_r29] == -1) && (var_r31->unk_54[var_r29] <= 0.0f)) { break; } } } if ((var_r29 < 5) && (var_r31->unk_54[var_r29] < var_r31->unk_9C[var_r30])) { var_r31->unk_3C[var_r29] = var_r31->unk_84[var_r30]; var_r31->unk_54[var_r29] = var_r31->unk_9C[var_r30]; var_r31->unk_6C[var_r29] = var_r31->unk_B4[var_r30]; } var_r31->unk_84[var_r30] = -1; var_r31->unk_9C[var_r30] = 0.0f; var_r31->unk_B4[var_r30] = 0; } } for (var_r30 = 0, var_r29 = 0, var_r31->unk_14 = 0.0f; var_r30 < 6; var_r30++) { if ((var_r31->unk_3C[var_r30] != -1) && (var_r31->unk_54[var_r30] > 0.0f)) { var_r31->unk_14 += 0.8f * var_r31->unk_54[var_r30]; var_r29++; } } for (var_r30 = 0, var_r29 = 0, var_r31->unk_20 = 0.0f; var_r30 < 6; var_r30++) { if ((var_r31->unk_3C[var_r30] != -1) && (var_r31->unk_54[var_r30] > 0.0f) && (var_r31->unk_6C[var_r30] != 0)) { var_r31->unk_20 += 0.8f * var_r31->unk_54[var_r30]; var_r29++; } } if (var_r29 != 0) { var_r31->unk_18 = 20.0f * (var_r31->unk_20 * var_r31->unk_20); var_r31->unk_08 -= var_r31->unk_18; if (var_r31->unk_08 < 0.0f) { var_r31->unk_08 = 0.0f; } if ((var_r31->unk_18 > var_r31->unk_1C) && (var_r31->unk_18 >= 0.0f)) { if (var_r31->unk_18 >= 13.200000000000001) { var_r26 = HuAudFXPlay(lbl_1_data_150[2][arg0]); } else if (var_r31->unk_18 >= 6.6000000000000005) { var_r26 = HuAudFXPlay(lbl_1_data_150[1][arg0]); } else { var_r26 = HuAudFXPlay(lbl_1_data_150[0][arg0]); } var_f30 = var_r31->unk_08 / 1000.0f; if (var_r26 != -1) { HuAudFXPitchSet(var_r26, (s32)(8191.0f * (1.0f - var_f30))); } } } else { var_r31->unk_18 = 0.0f; } var_r31->unk_1C = var_r31->unk_18; if (var_r31->unk_2C != 0) { if (++var_r31->unk_28 >= var_r31->unk_2C) { var_r31->unk_2C = var_r31->unk_28 = 0; var_r31->unk_30 = 0.0f; } } if ((var_r31->unk_E0 != var_r31->unk_E8) || (var_r31->unk_E4 != var_r31->unk_EC)) { sp8.x = sind(var_r31->unk_E4) * cosd(var_r31->unk_E0); sp8.z = cosd(var_r31->unk_E4) * cosd(var_r31->unk_E0); sp8.y = sind(var_r31->unk_E0); VECNormalize(&sp8, &sp8); var_r28 = &Hu3DLocalLight[var_r27->unk_38[0]]; var_r28->unk_1C.x = 1000.0f * sp8.x; var_r28->unk_1C.y = 1000.0f * sp8.y; var_r28->unk_1C.z = 1000.0f * sp8.z; var_r28->unk_28.x = sp8.x; var_r28->unk_28.y = sp8.y; var_r28->unk_28.z = sp8.z; var_r31->unk_E8 = var_r31->unk_E0; var_r31->unk_EC = var_r31->unk_E4; } var_r31->unk_20 = 0.0f; } } void fn_1_E914(ModelData *var_r27, Mtx matrix) { s32 spB4; s32 spB0; Mtx sp70; Vec sp64; Vec sp58; float sp48; float sp44; float sp40; float sp3C; float sp38; float sp34; float sp30; float sp2C; float sp28; 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_f19; float var_f18; M425DllUnkStruct4 *var_r31; s32 var_r30; s32 var_r29; s16 var_r28; s32 var_r26; var_r31 = var_r27->unk_120; if (var_r31->unk_2C != 0) { var_f24 = (float)var_r31->unk_28 / var_r31->unk_2C; var_r31->unk_30 = 0.30000001192092896 * cosd((90.0f * var_f24)); sp40 = var_r31->unk_30 * (0.5 * sind((720.0f * var_f24))); } else { sp40 = 0.0f; } if (var_r31->unk_0C != 0.0f) { var_f19 = var_r31->unk_08 / var_r31->unk_0C; } else { var_f19 = 1.0f; } var_r27->scale.y = var_r31->unk_DC = (0.100000024f + (0.9f * var_f19)) - sp40; if (var_r31->unk_DC > 0.3f) { sp3C = 1.0f - (-0.39999998f * ((var_r31->unk_DC - 0.3f) / 0.7f)); } else { sp3C = 0.6f * (var_r31->unk_DC / 0.3f); } if (var_r31->unk_DC != 0.0f) { sp3C /= var_r31->unk_DC; } else { sp3C = 0.0f; } if (var_r31->unk_08 < 0.0f) { sp3C = 0.0f; } if (var_f19 <= 0.3f) { var_f24 = var_f19 / 0.3f; var_r31->unk_E0 = 222.0f + (80.0f * var_f24); } var_f18 = 100.0f * var_r31->unk_14; if (var_f19 > 0.85f) { var_f18 += 100.0f * (4.0f * (var_f19 - 0.85f)); } if (var_f18 > 150.0f) { var_f18 = 150.0f; } sp38 = 1.0f - var_f19; if (var_f18 >= 0.0f) { for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { if (var_r31->unk_178[var_r30] == -1) { var_r31->unk_180[var_r30].x = var_r31->unk_17C[var_r30].x + (var_f18 * var_r31->unk_194[var_r30].x); var_r31->unk_180[var_r30].y = var_r31->unk_17C[var_r30].y + (var_f18 * var_r31->unk_194[var_r30].y); var_r31->unk_180[var_r30].z = var_r31->unk_17C[var_r30].z + (var_f18 * var_r31->unk_194[var_r30].z); } } } else { memcpy(var_r31->unk_180, var_r31->unk_17C, var_r31->unk_110 * 0xC); } var_r31->unk_14 = 0.0f; for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { if (!(var_f19 >= 1.0f) && (var_r31->unk_190[var_r30][2] != 0)) { switch (var_r31->unk_190[var_r30][2]) { case 1: var_r31->unk_180[var_r30].x += sp38 * var_r31->unk_18C[var_r30].x; var_r31->unk_180[var_r30].y += sp38 * var_r31->unk_18C[var_r30].y; var_r31->unk_180[var_r30].z += sp38 * var_r31->unk_18C[var_r30].z; break; case 2: var_f24 = lbl_1_bss_6E4[var_r31->unk_190[var_r30][0] + (var_r31->unk_190[var_r30][1] << 8)]; var_f24 = 80.0f * (0.003921569f * (255.0f - var_f24) * sp38); var_r31->unk_180[var_r30].x += var_f24 * var_r31->unk_18C[var_r30].x; var_r31->unk_180[var_r30].y += var_f24 * var_r31->unk_18C[var_r30].y; var_r31->unk_180[var_r30].z += var_f24 * var_r31->unk_18C[var_r30].z; break; } } } for (var_r29 = 0, var_r28 = 0, var_f27 = var_f26 = var_f25 = 0.0f; var_r29 < 6; var_r29++) { if ((var_r31->unk_54[var_r29] > 0.0f) || (var_r31->unk_3C[var_r29] != -1)) { var_f27 += var_r31->unk_180[var_r31->unk_3C[var_r29]].x; var_f25 += var_r31->unk_180[var_r31->unk_3C[var_r29]].z; var_f26 += var_r31->unk_54[var_r29]; var_r28++; } } if (var_r28 >= 2) { var_f27 /= var_r28; var_f25 /= var_r28; var_f26 /= var_r28; mtxRot(sp70, 0.0f, var_r31->unk_D8, 0.0f); var_f30 = var_r31->unk_CC.x + ((sp70[0][0] * var_f27) + (sp70[0][2] * var_f25)); var_f31 = var_r31->unk_CC.z + ((sp70[2][0] * var_f27) + (sp70[2][2] * var_f25)); fn_1_10EF8(var_r31->unk_00, 2, var_f30, var_f31); var_r31->unk_50 = var_r31->unk_34; var_r31->unk_54[5] = var_f26; var_r31->unk_6C[5] = 0; } else { var_r31->unk_50 = -1; var_r31->unk_54[5] = 0.0f; var_r31->unk_6C[5] = 0; } for (var_r29 = 0; var_r29 < 6; var_r29++) { if ((var_r31->unk_54[var_r29] <= 0.0f) || (var_r31->unk_3C[var_r29] == -1)) { var_r31->unk_3C[var_r29] = -1; var_r31->unk_54[var_r29] = 0.0f; var_r31->unk_6C[var_r29] = 0; } else { var_f24 = 150.0f * var_r31->unk_54[var_r29] * sp3C; sp44 = 50.0f * var_r31->unk_54[var_r29]; if (sp44 > 15.000001f) { sp44 = 15.000001f; } var_f27 = var_r31->unk_180[var_r31->unk_3C[var_r29]].x; var_f26 = var_r31->unk_180[var_r31->unk_3C[var_r29]].y; var_f25 = var_r31->unk_180[var_r31->unk_3C[var_r29]].z; if (var_r29 != 5) { for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { if (var_r31->unk_178[var_r30] == -1) { var_f30 = var_r31->unk_180[var_r30].x - var_f27; var_f29 = var_r31->unk_DC * (var_r31->unk_180[var_r30].y - var_f26); var_f31 = 0.425f * (var_r31->unk_180[var_r30].z - var_f25); var_f28 = (var_f31 * var_f31) + ((var_f30 * var_f30) + (var_f29 * var_f29)); if (var_f28 < 10000.0f) { var_f28 = sqrtf((var_f31 * var_f31) + ((var_f30 * var_f30) + (var_f29 * var_f29))); var_f28 = var_f28 * 0.01f; var_r31->unk_180[var_r30].y -= (1.0f - var_f28) * var_f24; if (var_r31->unk_180[var_r30].y < 1.0f) { var_r31->unk_180[var_r30].y = 1.0f; } } if (var_r31->unk_1A0[var_r30] != 0) { var_f31 = var_r31->unk_180[var_r30].z - var_f25; if (!(fabs(var_f31) > 100.0)) { var_f28 = sqrtf((var_f30 * var_f30) + (var_f31 * var_f31)); if (var_f28 < 200.0f) { var_f28 = var_f28 * 0.005f; var_r31->unk_180[var_r30].y += (sp44 * sind((90.0f * var_f28))); // is this right? } else if (var_f28 < 400.0f) { var_f28 -= 200.0f; var_f28 = var_f28 * 0.005f; var_r31->unk_180[var_r30].y += (sp44 * cosd((90.0f * var_f28))); } } } } } } else { for (var_r30 = 0; var_r30 < var_r31->unk_110; var_r30++) { if ((var_r31->unk_178[var_r30] == -1) && ((var_r31->unk_F0[0] != var_r30) || (var_r31->unk_F0[1] != var_r30))) { var_f30 = var_r31->unk_180[var_r30].x - var_f27; var_f29 = var_r31->unk_DC * (var_r31->unk_180[var_r30].y - var_f26); var_f31 = 0.425f * (var_r31->unk_180[var_r30].z - var_f25); var_f28 = (var_f31 * var_f31) + ((var_f30 * var_f30) + (var_f29 * var_f29)); if (var_f28 < 10000.0f) { var_f28 = sqrtf((var_f31 * var_f31) + ((var_f30 * var_f30) + (var_f29 * var_f29))); var_f28 = var_f28 * 0.01f; var_r31->unk_180[var_r30].y -= (1.0f - var_f28) * var_f24; if (var_r31->unk_180[var_r30].y < 1.0f) { var_r31->unk_180[var_r30].y = 1.0f; } } } } } if (var_r29 < 5) { if ((var_r31->unk_54[var_r29] -= 0.075f) <= 0.0f) { var_r31->unk_54[var_r29] = 0.0f; var_r31->unk_3C[var_r29] = -1; var_r31->unk_6C[var_r29] = 0; } } else { var_r31->unk_54[var_r29] = 0.0f; var_r31->unk_3C[var_r29] = -1; var_r31->unk_6C[var_r29] = 0; } } } var_r31->unk_38 = 0; memcpy(var_r31->unk_198, &var_r31->unk_180[var_r31->unk_144[0]], var_r31->unk_112[0] * 0xC); var_r31->unk_19C = 0; fn_1_DE3C(var_r31, var_r27); if ((var_r31->unk_04 != -1) && (var_r31->unk_06 != -1)) { mtxRot(sp70, 0.0f, var_r31->unk_D8, 0.0f); sp70[1][0] *= var_r31->unk_DC; sp70[1][1] *= var_r31->unk_DC; sp70[1][2] *= var_r31->unk_DC; var_f30 = var_r31->unk_180[var_r31->unk_06].x; var_f29 = var_r31->unk_180[var_r31->unk_06].y; var_f31 = var_r31->unk_180[var_r31->unk_06].z; var_f27 = var_r31->unk_CC.x + ((sp70[0][2] * var_f31) + ((sp70[0][0] * var_f30) + (sp70[0][1] * var_f29))); var_f26 = var_r31->unk_CC.y + ((sp70[1][2] * var_f31) + ((sp70[1][0] * var_f30) + (sp70[1][1] * var_f29))); var_f25 = var_r31->unk_CC.z + ((sp70[2][2] * var_f31) + ((sp70[2][0] * var_f30) + (sp70[2][1] * var_f29))); Hu3DModelPosSet(var_r31->unk_04, var_f27, var_f26, var_f25); var_f30 = var_r31->unk_188[var_r31->unk_06].x; var_f29 = var_r31->unk_188[var_r31->unk_06].y; var_f31 = var_r31->unk_188[var_r31->unk_06].z; sp64.x = var_f27 + (20.0f * var_f30); sp64.y = var_f26 + (20.0f * var_f29); sp64.z = var_f25 + (20.0f * var_f31); sp48 = sqrtf((var_f30 * var_f30) + (var_f31 * var_f31)); var_f27 = sp34 = atan2d(sp48, var_f29); var_f26 = sp30 = atan2d(var_f30, var_f31); var_f25 = sp2C = 0.0f; Hu3DModelRotSet(var_r31->unk_04, var_f27, var_f26, var_f25); var_r30 = (s32)(10.0f * var_r31->unk_18) / 40; if (var_r30 > 0x10) { var_r30 = 0x10; } for (var_r26 = 0; var_r26 < var_r30; var_r26++) { var_f27 = sp34; var_f26 = sp30; var_f25 = sp2C; var_f27 += 0.5f * ((s32)frand() % 48); var_f30 = sind(var_f26) * sind(var_f27); var_f31 = cosd(var_f26) * sind(var_f27); var_f29 = cosd(var_f27); sp28 = 12.0f - ((s32)frand() % 6); sp58.x = var_f30; sp58.y = var_f29; sp58.z = var_f31; fn_1_11454(&sp64, &sp58, 50.0f + (5.0f * var_r30), sp28); } } DCFlushRangeNoSync(var_r31->unk_180, var_r31->unk_110 * 0xC); DCFlushRangeNoSync(var_r31->unk_188, var_r31->unk_110 * 0xC); PPCSync(); } void fn_1_101C4(ModelData *var_r29, Mtx var_r28) { Mtx sp50; ROMtx sp20; GXColor sp1C; M425DllUnkStruct4 *var_r31; s32 var_r30; s16 var_r27; var_r31 = var_r29->unk_120; GXLoadPosMtxImm(var_r28, 0); MTXInvXpose(var_r28, sp50); GXLoadNrmMtxImm(sp50, 0); var_r27 = fn_1_115D4(var_r29, Hu3DCameraMtx, Hu3DCameraMtxXPose, 4.0f); if (omPauseChk() == 0) { fn_1_E914(var_r29, var_r28); } var_r29->scale.y = var_r31->unk_DC; memcpy(sp50, lbl_1_data_16C, sizeof(lbl_1_data_16C)); mtxRotCat(&sp50[0], CRot.x, CRot.y + var_r31->unk_D8, 180.0f); GXLoadTexMtxImm(sp50, 0x36, GX_MTX2x4); sp1C.a = lbl_1_bss_6D0; GXSetTevColor(GX_TEVREG2, sp1C); HuSprTexLoad(lbl_1_bss_6E0, 0, 0, GX_CLAMP, GX_CLAMP, GX_LINEAR); HuSprTexLoad(lbl_1_bss_6DC, 0, 1, GX_REPEAT, GX_REPEAT, GX_LINEAR); GXSetNumTevStages(1); GXSetNumTexGens(1); GXSetNumChans(1); GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_NRM, 0x36, GX_FALSE, 0x7D); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP1, GX_COLOR0A0); GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_RASC, GX_CC_TEXC, GX_CC_A2, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); lbl_1_bss_6C8.r = var_r31->unk_23A.r; lbl_1_bss_6C8.g = var_r31->unk_23A.g; lbl_1_bss_6C8.b = var_r31->unk_23A.b; lbl_1_bss_6C8.a = var_r31->unk_23A.a; GXSetChanAmbColor(GX_COLOR0A0, lbl_1_bss_6C8); GXSetChanMatColor(GX_COLOR0A0, lbl_1_data_168); GXSetChanCtrl(GX_COLOR0A0, GX_TRUE, GX_SRC_REG, GX_SRC_REG, var_r27, GX_DF_CLAMP, GX_AF_SPEC); GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); GXSetZMode(1, GX_LEQUAL, GX_FALSE); GXSetZCompLoc(0); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); if (HmfInverseMtxF3X3(var_r28, sp50) == 0) { MTXIdentity(sp50); } MTXReorder(sp50, sp20); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXSETARRAY(GX_VA_POS, var_r31->unk_180, var_r31->unk_110 * sizeof(Vec), sizeof(Vec)); GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0); GXSETARRAY(GX_VA_NRM, var_r31->unk_188, var_r31->unk_110 * sizeof(Vec), sizeof(Vec)); GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); GXSETARRAY(GX_VA_CLR0, &var_r31->unk_23A, var_r31->unk_110 * sizeof(GXColor), sizeof(GXColor)); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA6, 0); GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); GXSETARRAY(GX_VA_TEX0, var_r31->unk_184, var_r31->unk_110 * sizeof(Vec2f), sizeof(Vec2f)); for (var_r30 = 0; var_r30 < var_r31->unk_240; var_r30++) { if (var_r31->unk_2A8[var_r30] && var_r31->unk_244[var_r30] != 0 && var_r30 != 1) { GXCallDisplayListNative(var_r31->unk_2A8[var_r30], var_r31->unk_244[var_r30]); } } GXSetNumTevStages(2); GXSetNumTexGens(2); GXSetNumChans(1); GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D); GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_NRM, 0x36, GX_FALSE, 0x7D); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR0A0); GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_RASC, GX_CC_TEXC, GX_CC_TEXA, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevOp(GX_TEVSTAGE1, GX_REPLACE); GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_CPREV, GX_CC_TEXC, GX_CC_A2, GX_CC_ZERO); GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_APREV, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); lbl_1_bss_6C8.r = var_r31->unk_23A.r; lbl_1_bss_6C8.g = var_r31->unk_23A.g; lbl_1_bss_6C8.b = var_r31->unk_23A.b; lbl_1_bss_6C8.a = var_r31->unk_23A.a; GXSetChanAmbColor(GX_COLOR0A0, lbl_1_bss_6C8); GXSetChanMatColor(GX_COLOR0A0, lbl_1_data_168); GXSetChanCtrl(GX_COLOR0A0, GX_TRUE, GX_SRC_REG, GX_SRC_REG, var_r27, GX_DF_CLAMP, GX_AF_SPEC); GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE); GXSetZCompLoc(0); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); GXClearVtxDesc(); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSETARRAY(GX_VA_POS, var_r31->unk_180, var_r31->unk_110 * sizeof(Vec), sizeof(Vec)); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_TEX_S, GX_RGBA6, 0); GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); GXSETARRAY(GX_VA_NRM, var_r31->unk_188, var_r31->unk_110 * sizeof(Vec), sizeof(Vec)); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0); GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSETARRAY(GX_VA_CLR0, &var_r31->unk_23A, var_r31->unk_110 * sizeof(GXColor), sizeof(GXColor)); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0); GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); GXSETARRAY(GX_VA_TEX0, var_r31->unk_184, var_r31->unk_110 * sizeof(Vec2f), sizeof(Vec2f)); if (var_r31->unk_2A8[1] && (var_r31->unk_244[1] != 0)) { GXCallDisplayListNative(var_r31->unk_2A8[1], var_r31->unk_244[1]); } } s32 fn_1_109EC(s32 arg0, s32 arg1, Vec *arg2, Vec *arg3, Vec *arg4, s32 arg5) { float var_f31; float var_f30; M425DllUnkStruct4 *var_r31; s32 var_r29; ModelData *var_r26; if (!lbl_1_bss_6EC) { return; } var_r26 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; var_r31 = var_r26->unk_120; if (var_r31->unk_0C != 0.0f) { var_f30 = var_r31->unk_08 / var_r31->unk_0C; } else { var_f30 = 1.0f; } var_r31->unk_24 = fn_1_10EF8(arg0, arg1, arg2->x, arg2->z); arg4->x = arg2->x + arg3->x; arg4->y = arg2->y + arg3->y; arg4->z = arg2->z + arg3->z; if ((arg4->y < var_r31->unk_24) && (arg3->y < 0.0f) && (var_r31->unk_34 >= 0)) { var_f31 = -arg3->y; if (var_f31 > 50.0f) { var_f31 = 50.0f; } else if (var_f31 < 10.0f) { var_f31 = 0.0f; } if ((var_f31 > 0.0f) && (arg5 != 0)) { var_f31 = (var_f31 - 10.0f) / 40.0f; var_r31->unk_20 += var_f31; } var_f31 = -arg3->y; var_f31 = var_f31 * 0.02f; if (var_r31->unk_34 >= 0) { for (var_r29 = 0; var_r29 < var_r31->unk_38; var_r29++) { if (var_r31->unk_84[var_r29] == var_r31->unk_34) { break; } } if (var_r29 >= var_r31->unk_38) { var_r29 = var_r31->unk_38; } if (var_r29 < 6) { var_r31->unk_84[var_r29] = var_r31->unk_34; if (var_r31->unk_9C[var_r29] < var_f31) { var_r31->unk_9C[var_r29] = var_f31; var_r31->unk_B4[var_r29] = arg5; } var_r31->unk_38++; } } arg4->y = var_r31->unk_24 - (150.0f * (var_f30 * var_f31)); if (arg4->y < 1.0f) { arg4->y = 1.0f; } return 1; } if (arg4->y < var_r31->unk_24) { arg4->y = var_r31->unk_24; } return 0; } float fn_1_10CF4(s32 arg0) { ModelData *var_r31; M425DllUnkStruct4 *var_r30; if (!lbl_1_bss_6EC) { return; } var_r31 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; var_r30 = var_r31->unk_120; return var_r30->unk_08; } void fn_1_10D54(s32 arg0, float arg8) { ModelData *var_r31; M425DllUnkStruct4 *var_r30; if (lbl_1_bss_6EC) { var_r31 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; var_r30 = var_r31->unk_120; var_r30->unk_08 = arg8; } } void fn_1_10DB4(s32 arg0) { M425DllUnkStruct4 *var_r31; ModelData *var_r30; if (lbl_1_bss_6EC) { var_r30 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; var_r31 = var_r30->unk_120; if (var_r31->unk_2C == 0) { var_r31->unk_28 = 0; var_r31->unk_2C = 0x28; var_r31->unk_30 = 0.3f; } } } void fn_1_10E3C(s32 arg0) { M425DllUnkStruct4 *var_r31; s32 var_r30; ModelData *var_r29; if (lbl_1_bss_6EC) { for (var_r30 = 0; var_r30 < 2; var_r30++) { var_r29 = &Hu3DData[lbl_1_bss_6EC->model[var_r30]]; var_r31 = var_r29->unk_120; if (arg0 != 0) { var_r31->unk_110 = var_r31->unk_144[0x18] + var_r31->unk_112[24]; var_r31->unk_240 = 0x19; } else { var_r31->unk_110 = var_r31->unk_144[0x17] + var_r31->unk_112[23]; var_r31->unk_240 = 0x18; } } } } float fn_1_10EF8(s32 arg0, s32 arg1, float arg8, float arg9) { Mtx spC; float var_f31; float var_f30; float var_f29; float var_f28; float var_f25; M425DllUnkStruct4 *var_r31; Vec *var_r30; s32 var_r29; s32 var_r28; ModelData *var_r26; if (!lbl_1_bss_6EC) { return 0.0f; } var_r26 = &Hu3DData[lbl_1_bss_6EC->model[arg0]]; var_r31 = var_r26->unk_120; if ((arg1 >= 0) && (arg1 <= 2) && (var_r31->unk_F0[arg1] != -1)) { var_r28 = var_r31->unk_F0[arg1]; var_r31->unk_34 = var_r28; if (var_r31->unk_19C == 0) { return var_r31->unk_DC * var_r31->unk_198[var_r28].y; } return var_r31->unk_198[var_r28].y; } if (var_r31->unk_19C == 0) { mtxRot(spC, 0.0f, var_r31->unk_D8, 0.0f); spC[1][0] *= var_r31->unk_DC; spC[1][1] *= var_r31->unk_DC; spC[1][2] *= var_r31->unk_DC; for (var_r29 = 0, var_r30 = var_r31->unk_198; var_r29 < var_r31->unk_112[0]; var_r29++, var_r30++) { var_f31 = (spC[0][2] * var_r30->z) + ((spC[0][0] * var_r30->x) + (spC[0][1] * var_r30->y)); var_f25 = (spC[1][2] * var_r30->z) + ((spC[1][0] * var_r30->x) + (spC[1][1] * var_r30->y)); var_f30 = (spC[2][2] * var_r30->z) + ((spC[2][0] * var_r30->x) + (spC[2][1] * var_r30->y)); var_r30->x = var_f31; var_r30->y = var_f25; var_r30->z = var_f30; } var_r31->unk_19C = 1; } arg8 -= var_r31->unk_CC.x; arg9 -= var_r31->unk_CC.z; var_f28 = 10000.0f; var_r28 = -1; for (var_r29 = 0, var_r30 = var_r31->unk_198; var_r29 < var_r31->unk_112[0]; var_r29++, var_r30++) { var_f31 = arg8 - var_r30->x; var_f30 = arg9 - var_r30->z; if (!(fabs(var_f31) > 100.0)) { if (!(fabs(var_f30) > 100.0)) { var_f29 = (var_f31 * var_f31) + (var_f30 * var_f30); if (var_f29 < var_f28) { var_r28 = var_r29; var_f28 = var_f29; } } } } (void)var_r29; var_r31->unk_34 = var_r28; if ((arg1 >= 0) && (arg1 <= 2)) { var_r31->unk_F0[arg1] = var_r28; } if (var_r28 >= 0) { return var_r31->unk_198[var_r28].y; } return 0.0f; } void fn_1_11284(void) { lbl_1_bss_6D8 = HuSprAnimRead(HuDataReadNum(0x38000E, 0x10000000)); lbl_1_bss_6D4 = fn_1_11A74(lbl_1_bss_6D8, 0x40); Hu3DModelLayerSet(lbl_1_bss_6D4, 6); } void fn_1_112FC(void) { M425DllUnkStruct5 *var_r31; M425DllUnkStruct6 *var_r30; s32 var_r29; ModelData *var_r28; var_r28 = &Hu3DData[lbl_1_bss_6D4]; var_r30 = var_r28->unk_120; for (var_r31 = var_r30->unk_3C, var_r29 = 0; var_r29 < var_r30->unk_24; var_r29++, var_r31++) { if (!(var_r31->unk_28 <= 0.0f)) { var_r31->unk_04.x = var_r31->unk_10.x * var_r31->unk_1C; var_r31->unk_04.y = var_r31->unk_10.y * var_r31->unk_1C; var_r31->unk_04.z = var_r31->unk_10.z * var_r31->unk_1C; var_r31->unk_1C *= 0.95f; VECAdd(&var_r31->unk_30, &var_r31->unk_04, &var_r31->unk_30); if (++var_r31->unk_40 >= 0xF) { var_r31->unk_40 = 0; var_r31->unk_28 = 0.0f; } } } } void fn_1_11418(void) { HuSprAnimKill(lbl_1_bss_6D8); lbl_1_bss_6D8 = NULL; } s32 fn_1_11454(Vec *arg0, Vec *arg1, float arg8, float arg9) { M425DllUnkStruct5 *var_r31; M425DllUnkStruct6 *var_r29; s32 var_r28; ModelData *var_r26; var_r26 = &Hu3DData[lbl_1_bss_6D4]; var_r29 = var_r26->unk_120; for (var_r31 = var_r29->unk_3C, var_r28 = 0; var_r28 < var_r29->unk_24; var_r28++, var_r31++) { if (var_r31->unk_28 <= 0.0f) { break; } } if (var_r28 >= var_r29->unk_24) { return -1; } var_r31->unk_30.x = arg0->x; var_r31->unk_30.y = arg0->y; var_r31->unk_30.z = arg0->z; var_r31->unk_10.x = arg1->x; var_r31->unk_10.y = arg1->y; var_r31->unk_10.z = arg1->z; var_r31->unk_04.x = arg1->x * arg9; var_r31->unk_04.y = arg1->y * arg9; var_r31->unk_04.z = arg1->z * arg9; var_r31->unk_1C = arg9; var_r31->unk_28 = arg8; var_r31->unk_2C = (s32)frand() % 360; var_r31->unk_3C.a = 0x40; var_r31->unk_40 = 0; return var_r28; } s16 fn_1_115D4(ModelData *arg0, Mtx arg1, Mtx arg2, float arg8) { s16 var_r31; s16 var_r30; LightData *var_r29; s16 var_r27; var_r27 = 0; var_r30 = 1; for (var_r29 = Hu3DGlobalLight, var_r31 = 0; var_r31 < 8; var_r31++, var_r29++) { if (var_r29->unk_00 != -1) { var_r30 <<= 1; } } if ((arg0->attr & 0x1000) != 0) { for (var_r31 = 0; var_r31 < 8; var_r31++) { if (arg0->unk_38[var_r31] != -1) { var_r29 = &Hu3DLocalLight[arg0->unk_38[var_r31]]; fn_1_116E4(arg0, var_r29, var_r30, arg2, arg1, arg8); var_r27 |= var_r30; var_r30 <<= 1; } } } return var_r27; } void fn_1_116E4(ModelData *arg1, LightData *var_r31, s16 sp8, Mtx spC, Mtx sp10, float var_f31) { switch ((u8)var_r31->unk_00) { case 0: GXInitLightAttn(&lbl_1_bss_688, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); GXInitLightSpot(&lbl_1_bss_688, var_r31->unk_04, var_r31->unk_02); break; case 1: GXInitLightAttn(&lbl_1_bss_688, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f); VECScale(&var_r31->unk_28, &var_r31->unk_1C, -100000.0f); break; case 2: GXInitLightAttn(&lbl_1_bss_688, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f); GXInitLightDistAttn(&lbl_1_bss_688, var_r31->unk_04, var_r31->unk_08, var_r31->unk_02); break; } if ((var_r31->unk_00 & 0x8000) != 0) { MTXMultVec(spC, &var_r31->unk_28, &lbl_1_bss_67C); MTXMultVec(sp10, &var_r31->unk_1C, &lbl_1_bss_670); GXInitLightPos(&lbl_1_bss_688, lbl_1_bss_670.x, lbl_1_bss_670.y, lbl_1_bss_670.z); } else { GXInitLightPos(&lbl_1_bss_688, var_r31->unk_1C.x, var_r31->unk_1C.y, var_r31->unk_1C.z); lbl_1_bss_67C = var_r31->unk_28; } if (var_f31 == 0.0f) { GXInitLightDir(&lbl_1_bss_688, lbl_1_bss_67C.x, lbl_1_bss_67C.y, lbl_1_bss_67C.z); } else { GXInitSpecularDir(&lbl_1_bss_688, lbl_1_bss_67C.x, lbl_1_bss_67C.y, lbl_1_bss_67C.z); GXInitLightAttn(&lbl_1_bss_688, 0.0f, 0.0f, 1.0f, var_f31 / 2, 0.0f, 1.0f - (var_f31 / 2)); } GXInitLightColor(&lbl_1_bss_688, var_r31->color); GXLoadLightObjImm(&lbl_1_bss_688, sp8); } s16 fn_1_11A74(AnimData *arg0, s16 arg1) { M425DllUnkStruct6 *var_r31; s16 var_r30; Vec2f *var_r29; M425DllUnkStruct5 *var_r28; ModelData *var_r27; Vec *var_r26; void *var_r24; s16 var_r23; void *var_r21; var_r23 = Hu3DHookFuncCreate(fn_1_11EE0); var_r27 = &Hu3DData[var_r23]; var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(M425DllUnkStruct6), var_r27->unk_48); var_r27->unk_120 = var_r31; var_r31->unk_38 = arg0; arg0->useNum++; var_r31->unk_24 = arg1; var_r31->unk_20 = 0; var_r31->unk_4C = 0; var_r31->unk_28 = 0; var_r31->unk_21 = 0; var_r31->unk_30 = 0; var_r31->unk_00 = var_r31->unk_02 = 0; var_r28 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(M425DllUnkStruct5), var_r27->unk_48); var_r31->unk_3C = var_r28; for (var_r30 = 0; var_r30 < arg1; var_r30++, var_r28++) { var_r28->unk_28 = 0.0f; var_r28->unk_2C = 0.0f; var_r28->unk_30.x = (s32)((frand() & 0x7F) - 0x40) * 0x14; var_r28->unk_30.y = (s32)((frand() & 0x7F) - 0x40) * 0x1E; var_r28->unk_30.z = (s32)((frand() & 0x7F) - 0x40) * 0x14; var_r28->unk_3C.r = var_r28->unk_3C.g = var_r28->unk_3C.b = var_r28->unk_3C.a = 0xFF; var_r28->unk_40 = 0; } var_r26 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(Vec) * 4, var_r27->unk_48); var_r31->unk_40 = var_r26; for (var_r30 = 0; var_r30 < (arg1 * 4); var_r30++, var_r26++) { var_r26->x = var_r26->y = var_r26->z = 0.0f; } var_r29 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(Vec2f) * 4, var_r27->unk_48); var_r31->unk_44 = var_r29; for (var_r30 = 0; var_r30 < arg1; var_r30++) { var_r29->x = 0.0f; var_r29->y = 0.0f; var_r29++; var_r29->x = 1.0f; var_r29->y = 0.0f; var_r29++; var_r29->x = 1.0f; var_r29->y = 1.0f; var_r29++; var_r29->x = 0.0f; var_r29->y = 1.0f; var_r29++; } var_r24 = HuMemDirectMallocNum(HEAP_DATA, 0x4000, var_r27->unk_48); var_r21 = var_r24; DCFlushRange(var_r24, 0x4000); GXBeginDisplayList(var_r21, 0x4000); GXBegin(GX_QUADS, GX_VTXFMT0, arg1 * 4); for (var_r30 = 0; var_r30 < arg1; var_r30++) { GXUnknownu16(var_r30 * 4); GXUnknownu16(var_r30); GXUnknownu16(var_r30 * 4); GXUnknownu16(var_r30 * 4 + 1); GXUnknownu16(var_r30); GXUnknownu16(var_r30 * 4 + 1); GXUnknownu16(var_r30 * 4 + 2); GXUnknownu16(var_r30); GXUnknownu16(var_r30 * 4 + 2); GXUnknownu16(var_r30 * 4 + 3); GXUnknownu16(var_r30); GXUnknownu16(var_r30 * 4 + 3); } var_r31->unk_34 = GXEndDisplayList(); var_r31->unk_48 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk_34, var_r27->unk_48); memcpy(var_r31->unk_48, var_r24, var_r31->unk_34); DCFlushRange(var_r31->unk_48, var_r31->unk_34); HuMemDirectFree(var_r24); return var_r23; } void fn_1_11EE0(ModelData *var_r24, Mtx var_r21) { Mtx sp128; Mtx spF8; Mtx spC8; Vec sp98[4]; Vec sp68[4]; Vec sp38[4]; ROMtx sp8; M425DllUnkStruct6 *var_r31; Vec *var_r30; M425DllUnkStruct5 *var_r29; Vec *var_r28; Vec *var_r27; Vec2f *var_r26; s16 var_r25; s16 var_r23; s16 var_r22; s16 var_r20; s16 var_r19; UnkHook var_r18; var_r31 = var_r24->unk_120; if ((var_r31->unk_2C != GlobalCounter) || (shadowModelDrawF != 0)) { GXLoadPosMtxImm(var_r21, 0); GXSetNumTevStages(1); GXSetNumTexGens(1); GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); if (shadowModelDrawF != 0) { GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ONE, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); GXSetZMode(0, GX_LEQUAL, 0); } else { var_r22 = var_r31->unk_38->bmp->dataFmt & 0xF; if ((var_r22 == 7) || (var_r22 == 8)) { GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ONE, GX_CC_RASC, GX_CC_ZERO); } else { GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); } if ((var_r24->attr & 2) != 0) { GXSetZMode(1, GX_LEQUAL, GX_TRUE); } else { GXSetZMode(1, GX_LEQUAL, GX_FALSE); } } 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_TEXA, GX_CA_RASA, GX_CA_ZERO); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); HuSprTexLoad(var_r31->unk_38, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); GXSetZCompLoc(0); switch (var_r31->unk_20) { case 0: GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); break; case 1: GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP); break; case 2: GXSetBlendMode(GX_BM_BLEND, GX_BL_ZERO, GX_BL_INVDSTCLR, GX_LO_NOOP); break; } GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0); GXSETARRAY(GX_VA_POS, var_r31->unk_40, var_r31->unk_24 * sizeof(Vec) * 4, sizeof(Vec)); GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0); GXSETARRAY(GX_VA_CLR0, &var_r31->unk_3C->unk_3C, sizeof(var_r31->unk_3C->unk_3C), 0x44); GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSETARRAY(GX_VA_TEX0, var_r31->unk_44, var_r31->unk_24 * sizeof(Vec2f) * 4, sizeof(Vec2f)); if (HmfInverseMtxF3X3(var_r21, sp128) == 0) { MTXIdentity(sp128); } MTXReorder(sp128, &sp8[0]); if (var_r31->unk_4C) { var_r18 = var_r31->unk_4C; var_r18(var_r24, var_r31, var_r21); } var_r29 = var_r31->unk_3C; var_r30 = var_r31->unk_40; var_r26 = var_r31->unk_44; MTXROMultVecArray(sp8, lbl_1_data_19C, &sp38[0], 4); for (var_r23 = 0; var_r23 < var_r31->unk_24; var_r23++, var_r29++) { if (!var_r29->unk_28) { var_r30->x = var_r30->y = var_r30->z = 0.0f; var_r30++; var_r30->x = var_r30->y = var_r30->z = 0.0f; var_r30++; var_r30->x = var_r30->y = var_r30->z = 0.0f; var_r30++; var_r30->x = var_r30->y = var_r30->z = 0.0f; var_r30++; } else { if (!var_r29->unk_2C) { var_r28 = &sp98[0]; var_r27 = &sp38[0]; VECScale(var_r27++, var_r28, var_r29->unk_28); VECAdd(var_r28++, &var_r29->unk_30, var_r30++); VECScale(var_r27++, var_r28, var_r29->unk_28); VECAdd(var_r28++, &var_r29->unk_30, var_r30++); VECScale(var_r27++, var_r28, var_r29->unk_28); VECAdd(var_r28++, &var_r29->unk_30, var_r30++); VECScale(var_r27++, var_r28, var_r29->unk_28); VECAdd(var_r28++, &var_r29->unk_30, var_r30++); } else { VECScale(lbl_1_data_19C, &sp98[0], var_r29->unk_28); VECScale(&lbl_1_data_19C[1], &sp98[1], var_r29->unk_28); VECScale(&lbl_1_data_19C[2], &sp98[2], var_r29->unk_28); VECScale(&lbl_1_data_19C[3], &sp98[3], var_r29->unk_28); MTXRotRad(spC8, 0x5A, var_r29->unk_2C); MTXConcat(sp128, spC8, spF8); MTXMultVecArray(spF8, &sp98[0], &sp68[0], 4); VECAdd(&sp68[0], &var_r29->unk_30, var_r30++); VECAdd(&sp68[1], &var_r29->unk_30, var_r30++); VECAdd(&sp68[2], &var_r29->unk_30, var_r30++); VECAdd(&sp68[3], &var_r29->unk_30, var_r30++); } var_r20 = var_r29->unk_40 & 3; var_r19 = (var_r29->unk_40 >> 2) & 3; for (var_r25 = 0; var_r25 < 4; var_r25++, var_r26++) { var_r26->x = (0.25f * var_r20) + lbl_1_data_1CC[var_r25].x; var_r26->y = (0.25f * var_r19) + lbl_1_data_1CC[var_r25].y; } } } DCFlushRangeNoSync(var_r31->unk_40, var_r31->unk_24 * sizeof(Vec) * 4); DCFlushRangeNoSync(var_r31->unk_44, var_r31->unk_24 * sizeof(Vec2f) * 4); PPCSync(); GXCallDisplayListNative(var_r31->unk_48, var_r31->unk_34); if (shadowModelDrawF == 0) { if ((var_r31->unk_21 & 2) == 0) { var_r31->unk_28++; } if ((var_r31->unk_30 != 0) && (var_r31->unk_30 <= var_r31->unk_28)) { if ((var_r31->unk_21 & 1) != 0) { var_r31->unk_28 = 0; } var_r31->unk_28 = var_r31->unk_30; } var_r31->unk_2C = GlobalCounter; } } }