#include "ext_math.h" #include "game/audio.h" #include "game/chrman.h" #include "game/esprite.h" #include "game/hsfdraw.h" #include "game/hsfman.h" #include "game/hsfmotion.h" #include "game/minigame_seq.h" #include "game/objsub.h" #include "game/pad.h" #include "game/sprite.h" #include "game/wipe.h" #include "string.h" #include "version.h" typedef struct UnkM426Struct { /* 0x00 */ s32 unk_00; /* 0x04 */ omObjData *unk_04[2]; /* 0x0C */ u8 unk_0C[2]; /* 0x0E */ u8 unk_0E[6]; } UnkM426Struct; /* size = 0x14 */ typedef struct UnkM426Struct3 { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ s32 unk_08; /* 0x0C */ s32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ char unk2C[8]; /* 0x34 */ s32 unk_34; /* 0x38 */ float unk_38; } UnkM426Struct3; /* size = 0x3C */ typedef struct UnkM426Struct2 { /* 0x00 */ s32 unk_00; /* 0x04 */ u32 unk_04; /* 0x08 */ u32 unk_08; /* 0x0C */ s32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ float unk_40; /* 0x44 */ float unk_44; /* 0x48 */ omObjData *unk_48; /* 0x4C */ omObjData *unk_4C; /* 0x50 */ float unk_50[15]; /* 0x8C */ s32 unk_8C; /* 0x90 */ s32 unk_90; /* 0x94 */ s32 unk_94; /* 0x98 */ float unk_98; /* 0x9C */ Vec unk_9C; /* 0xA8 */ s32 unk_A8; /* 0xAC */ s32 unk_AC; /* 0xB0 */ s32 unk_B0; /* 0xB4 */ s32 unk_B4; /* 0xB8 */ s32 unk_B8; /* 0xBC */ s32 unk_BC; } UnkM426Struct2; /* size = 0xC0 */ typedef struct UnkM426Struct4 { /* 0x00 */ s32 unk_00; /* 0x04 */ char unk04[4]; /* 0x08 */ u32 unk_08; /* 0x0C */ s32 unk_0C; /* 0x10 */ char unk10[8]; /* 0x18 */ s32 unk_18; /* 0x0C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ float unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ float unk_3C; /* 0x40 */ float unk_40; /* 0x44 */ float unk_44; /* 0x48 */ float unk_48; /* 0x4C */ float unk_4C; } UnkM426Struct4; /* size = 0x50 */ typedef struct UnkM426Struct5 { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ AnimData *unk_08; /* 0x0C */ s32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ Vec unk_14; /* 0x20 */ float unk_20; } UnkM426Struct5; /* size = 0x24 */ typedef struct UnkM426Struct6 { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ s32 unk_08; /* 0x0C */ float unk_0C; /* 0x10 */ float unk_10; /* 0x14 */ float unk_14; /* 0x18 */ float unk_18; } UnkM426Struct6; /* size = 0x1C */ typedef struct UnkM426Struct7 { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ s32 unk_08; /* 0x0C */ s32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14[6]; /* 0x2C */ s32 unk_2C[6][3]; /* 0x74 */ s32 unk_74[6][3]; /* 0xBC */ s32 unk_BC; /* 0xC0 */ s32 unk_C0; } UnkM426Struct7; /* size = 0xC4 */ typedef struct UnkM426Struct8 { /* 0x00 */ s16 unk_00; /* 0x02 */ s16 unk_02; /* 0x04 */ Vec unk_04; /* 0x10 */ char unk10[0x18]; /* 0x28 */ float unk_28; /* 0x2C */ float unk_2C; /* 0x30 */ Vec unk_30; /* 0x3C */ GXColor unk_3C; /* 0x40 */ s32 unk_40; } UnkM426Struct8; /* size = 0x44 */ typedef struct UnkM426Struct9 { /* 0x00 */ char unk00[0x14]; /* 0x14 */ s32 unk_14; } UnkM426Struct9; /* size = unknown */ typedef void (*UnkModelDataUnk120Hook)(struct model_data *, struct UnkModelDataUnk120Struct *, Mtx); typedef struct UnkModelDataUnk120Struct { /* 0x00 */ s16 unk_00; /* 0x02 */ s16 unk_02; /* 0x04 */ char unk04[0x1C]; /* 0x20 */ u8 unk_20; /* 0x21 */ u8 unk_21; /* 0x22 */ char unk22[2]; /* 0x24 */ s16 unk_24; /* 0x26 */ char unk26[2]; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ u32 unk_30; /* 0x34 */ u32 unk_34; /* 0x38 */ AnimData *unk_38; /* 0x3C */ UnkM426Struct8 *unk_3C; /* 0x40 */ Vec *unk_40; /* 0x44 */ Vec2f *unk_44; /* 0x48 */ void *unk_48; /* 0x4C */ UnkModelDataUnk120Hook unk_4C; /* 0x50 */ ModelData *unk_50; } UnkModelDataUnk120Struct; /* size = 0x54 */ typedef struct UnkM426Struct10 { /* 0x00 */ char unk00[4]; /* 0x04 */ s32 unk_04; /* 0x08 */ char unk08[4]; /* 0x0C */ s32 unk_0C; /* 0x10 */ char unk10[4]; /* 0x14 */ s32 unk_14; /* 0x18 */ struct UnkM426Struct10 **unk_18; /* 0x1C */ char unk1C[0x48]; /* 0x64 */ struct UnkM426Struct10 *unk_64; } UnkM426Struct10; /* size = unknown */ typedef struct UnkM426Struct11 { /* 0x00 */ u16 unk_00; /* 0x04 */ u16 unk_04; /* 0x08 */ u16 unk_08; /* 0x0C */ u16 unk_0C; } UnkM426Struct11; /* size = 0x10 */ typedef struct UnkM426Struct12 { /* 0x00 */ s16 unk_00; /* 0x02 */ char unk02[0x0A]; /* 0x0C */ UnkM426Struct11 unk_0C; /* 0x14 */ UnkM426Struct11 unk_14; /* 0x1C */ char unk1C[0x14]; } UnkM426Struct12; /* size = 0x30 */ typedef struct UnkM426Struct13 { /* 0x00 */ s32 unk_00; /* 0x04 */ u32 unk_04; } UnkM426Struct13; /* size = 0x08 */ void fn_1_1004(omObjData *object); void fn_1_117C(omObjData *object); void fn_1_125C(omObjData *object); void fn_1_16F8(omObjData *object); void fn_1_20C(omObjData *object); void fn_1_2AC8(omObjData *object); void fn_1_2ADC(void); s32 fn_1_2EDC(void); void fn_1_2F5C(omObjData *object, float *arg1, float *arg2, s32 *arg3); void fn_1_330(omObjData *object); void fn_1_36C4(void); void fn_1_3714(omObjData *object); void fn_1_3EFC(omObjData *object); void fn_1_4644(void); void fn_1_4738(s32 arg0, s32 arg1); s32 fn_1_4894(s32 arg0); s32 fn_1_48F0(float arg8); float fn_1_4A68(s32 arg0); s32 fn_1_4AF4(Vec *arg0, float arg8, s32 arg1); void fn_1_4EC4(void); void fn_1_4F14(omObjData *object); void fn_1_5134(omObjData *object); void fn_1_5B48(void); s32 fn_1_5C6C(s32 arg0, s32 arg1, Vec *arg2); s32 fn_1_5D3C(void); void fn_1_5E6C(void); void fn_1_5EBC(omObjData *object); void fn_1_6008(omObjData *object); void fn_1_61E0(void); s32 fn_1_6248(Vec *arg0); void fn_1_6310(s32 arg0, Vec *arg1); s32 fn_1_63B8(s32 arg0, Vec *arg1, Vec *arg2, float arg8, GXColor arg3); void fn_1_6594(void); void fn_1_65E4(omObjData *object); void fn_1_6704(omObjData *object); void fn_1_6844(void); s32 fn_1_6888(Vec *arg0); void fn_1_69E4(void); void fn_1_6A34(omObjData *object); void fn_1_6DC0(omObjData *object); void fn_1_7278(void); void fn_1_7328(s32 arg0); void fn_1_73DC(void); void fn_1_758C(omObjData *object); void fn_1_75AC(omObjData *object); void fn_1_75BC(void); float fn_1_75F4(float arg8, float arg9); float fn_1_770C(float arg8, float arg9, float argA); s16 fn_1_795C(AnimData *arg0, s16 arg1); s16 fn_1_7DC8(s16 arg0); void fn_1_80DC(ModelData *arg0, Mtx arg1); void fn_1_88B4(ModelData *arg0, Mtx arg1); void fn_1_8E10(AnimData *arg0); void fn_1_8E48(ModelData *arg0, Mtx arg1); void fn_1_9230(s32 arg0, UnkM426Struct10 *arg1, s32 arg2); void fn_1_9544(s32 arg0, UnkM426Struct10 *arg1, s32 arg2); void fn_1_971C(s32 arg0, UnkM426Struct10 *arg1, s32 arg2); void fn_1_9798(s32 arg0, UnkM426Struct10 *arg1, s32 arg2); void fn_1_97EC(s32 arg0, UnkM426Struct10 *arg1, s32 arg2); void fn_1_9868(s32 arg0, UnkM426Struct10 *arg1, s32 arg2); float fn_1_98E4(float arg8, float arg9, float argA, float argB); void fn_1_DB8(omObjData *object); void fn_1_E18(omObjData *object); void fn_1_EB8(void); SHARED_SYM extern u32 GlobalCounter; Vec lbl_1_data_0[4] = { { -600.0f, 0.0f, -285.0f }, { -600.0f, 0.0f, 135.0f }, { 600.0f, 0.0f, -285.0f }, { 600.0f, 0.0f, 135.0f }, }; Vec lbl_1_data_30 = { -200.0f, 2500.0f, 1200.0f }; Vec lbl_1_data_3C = { 0.2f, -0.8f, -0.2f }; GXColor lbl_1_data_48 = { 143, 143, 143, 143 }; float lbl_1_data_4C[3][7] = { { 315.0f, 0.0f, 0.0f, 0.0f, 130.0f, -180.0f, 1625.0f }, { 339.0f, 0.0f, 0.0f, 0.0f, 5.0f, -1446.0f, 1625.0f }, { 339.0f, 0.0f, 0.0f, 0.0f, 5.0f, -380.0f, 1625.0f }, }; Vec lbl_1_data_A0 = { 0.0f, 2500.0f, -500.0f }; Vec lbl_1_data_AC = { 0.0f, 1.0f, 0.0f }; Vec lbl_1_data_B8 = { 0.0f, 0.0f, 0.0f }; Process *lbl_1_bss_98; omObjData *lbl_1_bss_94; omObjData *lbl_1_bss_8C[2]; omObjData *lbl_1_bss_7C[4]; omObjData *lbl_1_bss_78; omObjData *lbl_1_bss_74; omObjData *lbl_1_bss_70; omObjData *lbl_1_bss_6C; omObjData *lbl_1_bss_68; omObjData *lbl_1_bss_64; s32 lbl_1_bss_60; s32 lbl_1_bss_5C; s32 lbl_1_bss_58; s32 lbl_1_bss_54; s32 lbl_1_bss_50; s32 lbl_1_bss_4C; s32 lbl_1_bss_48; s32 lbl_1_bss_44; s32 lbl_1_bss_40; s32 lbl_1_bss_3C; s32 lbl_1_bss_38; float lbl_1_bss_34; s32 lbl_1_bss_30; s32 lbl_1_bss_2C; float lbl_1_bss_28; AnimData *lbl_1_bss_24; s32 lbl_1_bss_1C[2]; u8 lbl_1_bss_18[4]; Vec lbl_1_bss_C; Vec lbl_1_bss_0; void ObjectSetup(void) { Process *var_r31; LightData *var_r30; s32 var_r29; OSReport("******* M426ObjectSetup *********\n"); Hu3DLighInit(); var_r29 = Hu3DGLightCreateV(&lbl_1_data_30, &lbl_1_data_3C, &lbl_1_data_48); lbl_1_bss_2C = var_r29; Hu3DGLightInfinitytSet(var_r29); var_r30 = Hu3DGlobalLight; var_r30->unk_00 |= 32768; lbl_1_bss_28 = 0.0f; var_r31 = omInitObjMan(50, 8192); lbl_1_bss_98 = var_r31; omGameSysInit(var_r31); HuAudSndGrpSet(51); fn_1_73DC(); lbl_1_bss_94 = omAddObjEx(var_r31, 255, 2, 0, -1, fn_1_20C); Hu3DShadowCreate(35.0f, 2000.0f, 25000.0f); Hu3DShadowTPLvlSet(0.5f); Hu3DShadowPosSet(&lbl_1_data_A0, &lbl_1_data_AC, &lbl_1_data_B8); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); } void fn_1_20C(omObjData *object) { object->model[0] = Hu3DHookFuncCreate(fn_1_8E48); Hu3DModelLayerSet(object->model[0], 1); fn_1_EB8(); fn_1_4EC4(); fn_1_36C4(); fn_1_5E6C(); fn_1_6594(); fn_1_69E4(); lbl_1_bss_5C = 0; lbl_1_bss_58 = 0; lbl_1_bss_54 = 0; lbl_1_bss_48 = -1; lbl_1_bss_44 = 1; lbl_1_bss_40 = 0; lbl_1_bss_3C = 0; lbl_1_bss_38 = 0; lbl_1_bss_34 = 2.0f; lbl_1_bss_1C[0] = lbl_1_bss_1C[1] = 10; object->func = fn_1_330; } void fn_1_330(omObjData *object) { float sp10[16]; float var_f31; s32 var_r31; UnkM426Struct *var_r30; UnkM426Struct2 *var_r29; s32 var_r28; s32 var_r27; s32 var_r26; s32 var_r25; var_r28 = -1; { s32 sp8[2] = { 0, 1 }; switch (lbl_1_bss_54) { case 0: if (!WipeStatGet()) { lbl_1_bss_54 = 1; lbl_1_bss_58 = 0; lbl_1_bss_30 = 2 * REFRESH_RATE; } break; case 1: if (++lbl_1_bss_58 >= REFRESH_RATE / 4.0f) { lbl_1_bss_54 = 2; lbl_1_bss_58 = 0; lbl_1_bss_38 = 1; } break; case 2: var_f31 = (VERSION_NTSC ? 0.007246377f : 0.008695652f) * lbl_1_bss_58; var_f31 = sind(90.0f * var_f31); var_f31 *= var_f31; for (var_r31 = 0; var_r31 < 7; var_r31++) { sp10[var_r31] = fn_1_98E4(var_f31, lbl_1_data_4C[1][var_r31], lbl_1_data_4C[2][var_r31], lbl_1_data_4C[0][var_r31]); } CRot.x = sp10[0]; CRot.y = sp10[1]; CRot.z = sp10[2]; Center.x = sp10[3]; Center.y = sp10[4]; Center.z = sp10[5]; CZoom = sp10[6]; if (++lbl_1_bss_58 >= (VERSION_NTSC ? 138.0f : 115.0f)) { CRot.x = lbl_1_data_4C[0][0]; CRot.y = lbl_1_data_4C[0][1]; CRot.z = lbl_1_data_4C[0][2]; Center.x = lbl_1_data_4C[0][3]; Center.y = lbl_1_data_4C[0][4]; Center.z = lbl_1_data_4C[0][5]; CZoom = lbl_1_data_4C[1][6]; lbl_1_bss_54 = 3; lbl_1_bss_58 = 0; } break; case 3: if (++lbl_1_bss_58 >= (REFRESH_RATE / 2.0f)) { lbl_1_bss_50 = MGSeqCreate(3, 0); lbl_1_bss_54 = 4; lbl_1_bss_58 = 0; } break; case 4: if (lbl_1_bss_50 != -1) { var_r26 = MGSeqStatGet(lbl_1_bss_50); if ((var_r26 & 16) && lbl_1_bss_48 == -1) { lbl_1_bss_48 = HuAudSeqPlay(70); } } else { var_r26 = 0; } if (lbl_1_bss_50 == -1 || !var_r26) { lbl_1_bss_50 = -1; lbl_1_bss_40 = 1; lbl_1_bss_3C = 1; lbl_1_bss_54 = 5; lbl_1_bss_58 = 30 * REFRESH_RATE; fn_1_7328(1); lbl_1_bss_4C = MGSeqCreate(1, lbl_1_bss_58 / REFRESH_RATE, -1, -1); } break; case 5: var_r25 = (lbl_1_bss_58 + REFRESH_RATE - 1) / REFRESH_RATE; if (var_r25 < 0) { var_r25 = 0; } MGSeqParamSet(lbl_1_bss_4C, 1, var_r25); if (lbl_1_bss_58 == 10 * REFRESH_RATE) { lbl_1_bss_34 = 3.0f; } else if (lbl_1_bss_58 == 20 * REFRESH_RATE) { lbl_1_bss_34 = 2.5f; } if (--lbl_1_bss_58 < -1 || lbl_1_bss_1C[0] <= 0 || lbl_1_bss_1C[1] <= 0) { MGSeqParamSet(lbl_1_bss_4C, 2, -1); lbl_1_bss_4C = -1; HuAudSeqAllFadeOut(100); lbl_1_bss_50 = MGSeqCreate(3, 1); lbl_1_bss_40 = 0; lbl_1_bss_3C = 0; lbl_1_bss_54 = 6; lbl_1_bss_58 = 0; } break; case 6: if (lbl_1_bss_50 == -1 || !MGSeqStatGet(lbl_1_bss_50)) { lbl_1_bss_50 = -1; var_r28 = fn_1_5D3C(); if (var_r28 >= 0) { if (fn_1_2EDC()) { if (lbl_1_bss_1C[0] == lbl_1_bss_1C[1]) { var_r28 = 2; } else if (lbl_1_bss_1C[0] > lbl_1_bss_1C[1]) { var_r28 = 0; } else { var_r28 = 1; } if (var_r28 < 2) { var_r30 = lbl_1_bss_8C[var_r28]->data; for (var_r31 = 0; var_r31 < 2; var_r31++) { GWPlayerCoinWinAdd(var_r30->unk_0C[var_r31], 10); var_r29 = var_r30->unk_04[var_r31]->data; sp8[var_r31] = var_r29->unk_0C; var_r29->unk_24 = 8; } var_r30 = lbl_1_bss_8C[~var_r28 & 1]->data; for (var_r31 = 0; var_r31 < 2; var_r31++) { var_r29 = var_r30->unk_04[var_r31]->data; var_r29->unk_24 = 9; } lbl_1_bss_50 = MGSeqCreate(5, 3, sp8[0], sp8[1], -1, -1); HuAudSStreamPlay(1); } else { for (var_r27 = 0; var_r27 < 2; var_r27++) { var_r30 = lbl_1_bss_8C[var_r27]->data; for (var_r31 = 0; var_r31 < 2; var_r31++) { var_r29 = var_r30->unk_04[var_r31]->data; var_r29->unk_24 = 9; } } lbl_1_bss_50 = MGSeqCreate(3, 2); HuAudSStreamPlay(4); } lbl_1_bss_54 = 7; lbl_1_bss_58 = 0; } } } break; case 7: if (++lbl_1_bss_58 > 3.5f * REFRESH_RATE) { lbl_1_bss_50 = -1; lbl_1_bss_54 = 8; lbl_1_bss_58 = 0; } break; case 8: WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); object->func = fn_1_DB8; break; default: break; } } lbl_1_bss_5C++; fn_1_E18(object); } s32 lbl_1_data_10C = 66051; s32 lbl_1_data_110[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; s32 lbl_1_data_150[8] = { DATADIR_MARIOMOT, DATADIR_LUIGIMOT, DATADIR_PEACHMOT, DATADIR_YOSHIMOT, DATADIR_DONKEYMOT, DATADIR_WARIOMOT, DATADIR_WALUIGIMOT, DATADIR_DAISYMOT, }; UnkM426Struct13 lbl_1_data_170[12] = { { DATA_MAKE_NUM(DATADIR_MARIOMOT, 0), DATA_NUM_LISTEND }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 2), DATA_NUM_LISTEND }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 3), DATA_NUM_LISTEND }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 5), DATA_NUM_LISTEND }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 6), DATA_NUM_LISTEND }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 20), DATA_NUM_LISTEND }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 22), DATA_NUM_LISTEND }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 25), DATA_NUM_LISTEND }, { 0, 0 }, { 0, 1 }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 23), DATA_NUM_LISTEND }, { DATA_MAKE_NUM(DATADIR_MARIOMOT, 114), DATA_NUM_LISTEND }, }; s32 lbl_1_data_1D0[2] = { DATA_MAKE_NUM(DATADIR_M426, 32), DATA_MAKE_NUM(DATADIR_M426, 40) }; void fn_1_DB8(omObjData *arg0) { if (!WipeStatGet()) { fn_1_7278(); fn_1_6844(); fn_1_61E0(); fn_1_4644(); fn_1_5B48(); fn_1_2ADC(); fn_1_75BC(); MGSeqKillAll(); HuAudFadeOut(1); omOvlReturnEx(1, 1); } } void fn_1_E18(omObjData *object) { s32 var_r30; var_r30 = 0; if (WipeStatGet() || object->func == fn_1_DB8) { return; } if (omSysExitReq) { var_r30 = 1; } if (var_r30) { WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); HuAudSeqAllFadeOut(100); object->func = fn_1_DB8; } } void fn_1_EB8(void) { s32 var_r31; s32 var_r30; for (var_r31 = 0, var_r30 = 0; var_r31 < 4; var_r31++) { if (!GWPlayerCfg[var_r31].group) { lbl_1_bss_18[var_r30] = var_r31; var_r30++; } } if (var_r30 != 2) { memcpy(&lbl_1_bss_18, &lbl_1_data_10C, 4); } else { for (var_r31 = 0; var_r31 < 4; var_r31++) { if (GWPlayerCfg[var_r31].group) { lbl_1_bss_18[var_r30] = var_r31; var_r30++; } } } for (var_r31 = 0; var_r31 < 2; var_r31++) { lbl_1_bss_8C[var_r31] = omAddObjEx(lbl_1_bss_98, 32, 0, 0, -1, fn_1_1004); lbl_1_bss_8C[var_r31]->work[0] = var_r31; } } void fn_1_1004(omObjData *object) { UnkM426Struct *var_r31; s32 var_r30; var_r31 = object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM426Struct), MEMORY_DEFAULT_NUM); memset(var_r31, 0, sizeof(UnkM426Struct)); var_r31->unk_00 = object->work[0]; var_r31->unk_0C[0] = lbl_1_bss_18[var_r31->unk_00 * 2]; var_r31->unk_0C[1] = lbl_1_bss_18[var_r31->unk_00 * 2 + 1]; for (var_r30 = 0; var_r30 < 6; var_r30++) { var_r31->unk_0E[var_r30] = 255; } for (var_r30 = 0; var_r30 < 2; var_r30++) { var_r31->unk_04[var_r30] = lbl_1_bss_7C[var_r31->unk_0C[var_r30]] = omAddObjEx(lbl_1_bss_98, 36, 1, 12, -1, fn_1_125C); var_r31->unk_04[var_r30]->work[0] = var_r31->unk_0C[var_r30]; var_r31->unk_04[var_r30]->work[1] = var_r31->unk_00; var_r31->unk_04[var_r30]->work[2] = var_r30; } omSetStatBit(object, 160); object->func = fn_1_117C; } void fn_1_117C(omObjData *object) { UnkM426Struct *var_r31; var_r31 = object->data; if (lbl_1_bss_5C & 1) { fn_1_16F8(var_r31->unk_04[0]); fn_1_16F8(var_r31->unk_04[1]); return; } fn_1_16F8(var_r31->unk_04[1]); fn_1_16F8(var_r31->unk_04[0]); } void fn_1_11EC(omObjData *object) { s32 var_r30; UnkM426Struct *var_r29; var_r29 = object->data; for (var_r30 = 0; var_r30 < 2; var_r30++) { fn_1_2AC8(var_r29->unk_04[var_r30]); } object->data = NULL; object->func = NULL; } void fn_1_125C(omObjData *object) { UnkM426Struct2 *var_r31; s32 var_r29; UnkM426Struct *var_r28; s32 var_r27; s32 var_r26; s32 var_r25; var_r31 = object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM426Struct2), MEMORY_DEFAULT_NUM); memset(var_r31, 0, sizeof(UnkM426Struct2)); var_r31->unk_00 = object->work[1]; var_r31->unk_04 = object->work[0]; var_r31->unk_08 = object->work[2]; var_r26 = GWPlayerCfg[var_r31->unk_04].character; var_r31->unk_0C = var_r26; var_r31->unk_10 = GWPlayerCfg[var_r31->unk_04].pad_idx; var_r31->unk_14 = GWPlayerCfg[var_r31->unk_04].iscom; var_r31->unk_18 = GWPlayerCfg[var_r31->unk_04].diff; var_r26 = 0; var_r27 = var_r31->unk_08 + (var_r31->unk_00 * 2); var_r31->unk_B0 = -1; var_r31->unk_B4 = 0; var_r31->unk_B8 = frand() % 15; var_r31->unk_BC = 0; var_r31->unk_1C = 0; var_r31->unk_20 = 0; var_r31->unk_24 = 0; var_r31->unk_28 = 0; var_r31->unk_2C = 0; var_r31->unk_30 = 0; var_r31->unk_34 = 0; var_r31->unk_38 = 0; var_r31->unk_3C = 0; var_r31->unk_40 = lbl_1_data_0[var_r27].x; if (var_r31->unk_40 < 0.0f) { var_r31->unk_44 = 90.0f; } else { var_r31->unk_44 = -90.0f; } var_r31->unk_48 = lbl_1_bss_8C[var_r31->unk_00]; var_r28 = var_r31->unk_48->data; if (object != var_r28->unk_04[0]) { var_r31->unk_4C = var_r28->unk_04[0]; } else { var_r31->unk_4C = var_r28->unk_04[1]; } memset(&var_r31->unk_50, 0, 0x3C); var_r31->unk_8C = 0; var_r31->unk_90 = fn_1_48F0(lbl_1_data_0[var_r27].z); var_r31->unk_94 = -1; var_r31->unk_98 = 0.0f; var_r28->unk_0E[var_r31->unk_90] = var_r31->unk_04; var_r31->unk_A8 = fn_1_6248(&lbl_1_data_0[var_r27]); var_r31->unk_AC = 0; object->trans.x = lbl_1_data_0[var_r27].x; object->trans.y = lbl_1_data_0[var_r27].y; object->trans.z = lbl_1_data_0[var_r27].z; var_r25 = CharModelCreate(var_r31->unk_0C, 4); object->model[0] = var_r25; Hu3DModelLayerSet(object->model[0], 2); Hu3DModelShadowSet(object->model[0]); CharModelStepTypeSet(var_r31->unk_0C, 0); for (var_r29 = 0; var_r29 < 12; var_r29++) { if (lbl_1_data_170[var_r29].unk_04 == -1) { if ((var_r29 == 11) && (var_r31->unk_0C == 4)) { object->motion[var_r29] = CharModelMotionCreate(var_r31->unk_0C, DATA_MAKE_NUM(DATADIR_MARIOMOT, 114)); } else { object->motion[var_r29] = CharModelMotionCreate(var_r31->unk_0C, lbl_1_data_170[var_r29].unk_00); } if (var_r29 == 5) { CharModelVoiceEnableSet(var_r31->unk_0C, object->motion[var_r29], 0); } } else { object->motion[var_r29] = Hu3DJointMotion( object->model[0], HuDataSelHeapReadNum(var_r31->unk_0C + lbl_1_data_1D0[lbl_1_data_170[var_r29].unk_04], 268435456, HEAP_DATA)); } } CharModelMotionDataClose(var_r31->unk_0C); CharModelMotionSet(var_r31->unk_0C, object->motion[var_r31->unk_28]); Hu3DModelAttrSet(var_r25, HU3D_MOTATTR_LOOP); HuDataDirClose(lbl_1_data_110[var_r26] & 0xFFFF0000); object->func = NULL; } void fn_1_16F8(omObjData *object) { s32 spA8[3]; void *sp28; GXColor sp24; float sp20; float sp1C; s32 sp18; s32 sp14; s32 sp10; GXColor spC; float var_f31; float var_f30; float var_f28; float var_f27; float var_f26; float var_f25; float var_f24; float var_f23; float var_f22; float var_f21; UnkM426Struct2 *var_r31; s32 var_r29; UnkM426Struct2 *var_r28; s32 var_r27; s32 var_r26; s32 var_r25; s32 var_r24; s32 var_r23; s32 var_r22; s32 var_r21; sp18 = 0; sp14 = 0; var_r31 = object->data; var_r28 = var_r31->unk_4C->data; sp28 = lbl_1_bss_8C[var_r31->unk_00]->data; var_r24 = object->model[0]; if (omPauseChk()) { Hu3DModelTPLvlSet(var_r24, 1.0f); return; } if (var_r31->unk_14) { sp20 = sp1C = 0.0f; var_r21 = sp10 = 0; fn_1_2F5C(object, &sp20, &sp1C, &sp10); } else { sp20 = HuPadStkX[var_r31->unk_10]; sp1C = HuPadStkY[var_r31->unk_10]; var_r21 = HuPadBtn[var_r31->unk_10]; sp10 = HuPadBtnDown[var_r31->unk_10]; } var_f30 = var_f31 = 0.0f; var_r27 = var_r25 = -1; var_f22 = object->trans.x; var_f21 = object->trans.z; if (!lbl_1_bss_60) { switch (var_r31->unk_24) { case 0: case 1: if (var_r31->unk_90 == -1) { var_r31->unk_90 = fn_1_48F0(object->trans.z); } else { if (!lbl_1_bss_40) { sp20 = sp1C = 0.0f; var_r21 = sp10 = 0; } if (fabs(sp20) > 8.0) { var_f30 = 0.25f * sp20; } if (fabs(sp1C) > 8.0) { var_f31 = -(0.25f * sp1C); } if (var_r31->unk_3C) { var_r31->unk_3C--; } if (var_r31->unk_94 != -1) { var_f27 = 16.0f; } else { var_f27 = 0.0f; } var_r31->unk_50[var_r31->unk_8C] = var_f27; if (++var_r31->unk_8C >= 15) { var_r31->unk_8C = 0; } for (var_r29 = 0, var_f28 = 0.0f; var_r29 < 15; var_r29++) { var_f28 += var_r31->unk_50[var_r29]; } var_f28 *= 0.06666667f; if (var_r31->unk_98 != 0.0f) { var_r26 = 3; } else if (var_f28 <= 0.0f) { if (lbl_1_bss_54 == 5) { var_r26 = 8; } else { var_r26 = 0; } } else if (var_f28 < 10.0f) { var_r26 = 1; } else { var_r26 = 2; } if (var_r26 != var_r31->unk_28) { var_r31->unk_28 = var_r26; if (var_r26 == 3) { CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_28], 0.0f, 8.0f, HU3D_MOTATTR_NONE); } else { CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_28], 0.0f, 8.0f, HU3D_MOTATTR_LOOP); } } if (var_r31->unk_94 == -1) { if (fabs(var_f31) > 2.0) { if (var_f31 < 0.0f) { var_r27 = var_r31->unk_90 - 1; var_r25 = var_r31->unk_90 - 2; } else { var_r27 = var_r31->unk_90 + 1; var_r25 = var_r31->unk_90 + 2; } if ((var_r27 >= 0) && (var_r27 < 6) && (((var_r28->unk_90 != var_r27) && (var_r28->unk_94 != var_r27)) || ((var_r28->unk_90 == var_r27) && (var_r28->unk_94 == var_r25) && (var_r25 >= 0) && (var_r25 < 6)) || ((var_r28->unk_98 != 0.0f) && (var_r28->unk_90 == var_r27)))) { var_r31->unk_94 = var_r27; } } } if (var_r31->unk_98 != 0.0f) { object->trans.y = object->trans.y + var_r31->unk_98; var_r31->unk_98 -= 3.103333333333333; if (object->trans.y <= 0.0f) { var_r31->unk_98 = 0.0f; object->trans.y = 0.0f; } } if (var_r31->unk_94 != -1) { var_f25 = var_r31->unk_40; var_f24 = fn_1_4A68(var_r31->unk_94); var_f30 = var_f25 - object->trans.x; var_f31 = var_f24 - object->trans.z; var_f27 = sqrtf((var_f30 * var_f30) + (var_f31 * var_f31)); if (var_f27 <= var_f28) { var_r31->unk_90 = var_r31->unk_94; var_r31->unk_94 = -1; if (var_r31->unk_3C) { sp10 |= 256; } var_r31->unk_3C = 0; object->trans.x = var_f25; object->trans.z = var_f24; } else if (var_f27 != 0.0f) { var_f27 = 1.0f / var_f27; object->trans.x += var_f28 * (var_f30 * var_f27) * (60.0f / REFRESH_RATE); object->trans.z += var_f28 * (var_f31 * var_f27) * (60.0f / REFRESH_RATE); } } var_f30 = object->trans.x - var_f22; var_f31 = object->trans.z - var_f21; if (fabs(var_f30) > 8.0 || fabs(var_f31) > 8.0) { var_f26 = atan2d(var_f30, var_f31); } else { if (fabs(sp20) > 8.0 || fabs(sp1C) > 8.0) { var_f26 = atan2d(sp20, -sp1C); } else { var_f26 = object->rot.y; } } object->rot.y = fn_1_770C(var_f26, object->rot.y, 20.0f); if (var_r31->unk_94 == -1 && var_r31->unk_98 == 0.0f) { if (sp10 & 256) { var_r31->unk_2C = 0; var_r31->unk_24 = 2; var_r31->unk_28 = 9; CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_28], 8.0f, 8.0f, HU3D_MOTATTR_NONE); } } else if (sp10 & 256) { var_r31->unk_3C = 20; } } break; case 2: object->rot.y = fn_1_770C(var_r31->unk_44, object->rot.y, 20.0f); var_r31->unk_2C++; if (var_r31->unk_2C == 17) { lbl_1_bss_C.x = object->trans.x; lbl_1_bss_C.y = object->trans.y; lbl_1_bss_C.z = object->trans.z; if (fn_1_4AF4(&lbl_1_bss_C, object->rot.y, 1)) { if (!var_r31->unk_00) { HuAudFXPlay(1601); } else { HuAudFXPlay(1602); } } } else if (var_r31->unk_2C >= 20) { var_r31->unk_24 = 0; var_r31->unk_2C = 0; var_r31->unk_28 = 8; CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_28], 0.0f, 8.0f, HU3D_MOTATTR_LOOP); } break; case 3: object->rot.y = fn_1_770C(var_r31->unk_44, object->rot.y, 20.0f); object->trans.x += 4.0f * var_r31->unk_9C.x; object->trans.z += 4.0f * var_r31->unk_9C.z; object->trans.y += var_r31->unk_9C.y; var_r31->unk_9C.y -= 3.103333333333333; if ((object->rot.x -= 30.0f) <= 0.0f) { object->rot.y += 360.0f; } if (fabs(object->trans.x) > 750.0) { if (object->trans.x > 0.0f) { object->trans.x = 750.0f; } else { object->trans.x = -750.0f; } } if (object->trans.y <= 0.0f) { HuAudCharVoicePlay(var_r31->unk_0C, 281); var_r31->unk_9C.x = var_r31->unk_9C.z = 0.0f; var_r31->unk_9C.y = 28.0f; object->trans.y = 0.0f; object->rot.x = 0.0f; var_r31->unk_24 = 5; } break; case 5: object->trans.y += var_r31->unk_9C.y; var_r31->unk_9C.y -= 3.103333333333333; if (object->trans.y <= 0.0f) { object->trans.y = 0.0f; var_r31->unk_9C.y = 0.0f; var_r31->unk_24 = 6; var_r31->unk_2C = 0; HuAudCharVoicePlay(var_r31->unk_0C, 281); var_r31->unk_28 = 6; CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_28], 0.0f, 8.0f, HU3D_MOTATTR_LOOP); } break; case 6: var_r31->unk_2C++; if (var_r31->unk_2C < 1.0f * REFRESH_RATE) { if (lbl_1_bss_40 == 0) { var_r31->unk_2C = REFRESH_RATE - 1; } } else if (var_r31->unk_2C == 1.0f * REFRESH_RATE) { var_r31->unk_28 = 7; CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_28], 0.0f, 8.0f, HU3D_MOTATTR_NONE); } else if (var_r31->unk_2C >= (VERSION_NTSC ? 90.0f : 80.0f)) { var_r31->unk_24 = 7; var_r31->unk_28 = 8; CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_28], 0.0f, 8.0f, HU3D_MOTATTR_LOOP); } break; case 7: var_r27 = fn_1_48F0(object->trans.z); spA8[0] = var_r27; spA8[1] = var_r27 + 1; spA8[2] = var_r27 - 1; if (spA8[1] >= 6) { spA8[1] = var_r27 - 2; } if (spA8[2] < 0) { spA8[2] = var_r27 + 2; } for (var_r29 = 0, var_r31->unk_94 = -1; var_r29 < 3; var_r29++) { if (var_r28->unk_90 != spA8[var_r29] && var_r28->unk_94 != spA8[var_r29] && spA8[var_r29] >= 0 && spA8[var_r29] < 6) { var_r31->unk_94 = spA8[var_r29]; break; } } if (var_r31->unk_94 != -1) { var_r31->unk_24 = 1; var_r31->unk_2C = 0; } break; case 8: case 9: object->rot.y = fn_1_770C(0.0f, object->rot.y, 10.0f); if (var_r31->unk_24 == 8) { var_r26 = 10; } else { var_r26 = 11; } if (var_r26 != var_r31->unk_28) { var_r31->unk_28 = var_r26; CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_28], 0.0f, 8.0f, HU3D_MOTATTR_NONE); } break; } if (var_r31->unk_AC) { var_r31->unk_AC--; } var_r22 = var_r31->unk_AC / 2; if (var_r22 > 16) { var_r22 = 16; } for (var_r29 = 0; var_r29 < var_r22; var_r29++) { lbl_1_bss_C.y = object->trans.y + ((frand() % 70) + 35); lbl_1_bss_C.x = object->trans.x + ((frand() % 50) + 25); lbl_1_bss_C.z = object->trans.z + ((frand() % 50) + 25); lbl_1_bss_0.x = 0.0f; lbl_1_bss_0.z = 0.0f; lbl_1_bss_0.y = 0.0f; var_r23 = (frand() & 63) + 128; sp24.r = var_r23; sp24.g = var_r23; sp24.b = var_r23; sp24.a = 64; fn_1_63B8(var_r31->unk_A8, &lbl_1_bss_C, NULL, 100.0f, sp24); } if (var_r31->unk_30) { if (++var_r31->unk_38 > 1) { var_r31->unk_38 = 0; var_r31->unk_34 = var_r31->unk_34 ^ 1; } } if ((var_r31->unk_24 == 0 || var_r31->unk_24 == 1 || var_r31->unk_24 == 2) && var_r31->unk_30) { if (var_r31->unk_30) { var_r31->unk_30 = var_r31->unk_30 - 1; } if (var_r31->unk_34) { Hu3DModelTPLvlSet(var_r24, 0.25f); return; } Hu3DModelTPLvlSet(var_r24, 1.0f); return; } Hu3DModelTPLvlSet(var_r24, 1.0f); } (void)var_r21; } Vec lbl_1_data_200[2] = { { -473.71, 432.536, -569.82 }, { 473.71, 432.536, -569.82 }, }; s32 lbl_1_data_218[2] = { 6357019, 6357020 }; s16 lbl_1_data_220[6] = { 11, 31, 0, 0, -33, -9 }; Vec lbl_1_data_22C[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_25C[4] = { { 0.0f, 0.0f }, { 0.25f, 0.0f }, { 0.25f, 0.25f }, { 0.0f, 0.25f }, }; s32 lbl_1_data_27C[] = { 0xC2480000, 0x42480000, 0x00000000, 0x42480000, 0x42480000, 0x00000000, 0x42480000, 0xC2480000, 0x00000000, 0xC2480000, 0xC2480000, 0x00000000, }; s32 lbl_1_data_2AC[] = { 0xFFFFA080, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, }; s32 lbl_1_data_2BC[] = { 0x00000000, 0x00000000, 0x3F800000, 0x00000000, 0x3F800000, 0x3F800000, 0x00000000, 0x3F800000, }; void fn_1_2AC8(omObjData *object) { object->data = NULL; object->func = NULL; } void fn_1_2ADC(void) { s32 var_r30; for (var_r30 = 0; var_r30 < 2; var_r30++) { fn_1_11EC(lbl_1_bss_8C[var_r30]); } } void fn_1_2B74(Vec *arg0) { Vec spC; void *sp8; UnkM426Struct2 *var_r31; omObjData *var_r30; UnkM426Struct *var_r29; s32 var_r28; s32 var_r27; s32 var_r26; if (arg0->x < 0.0f) { var_r26 = 0; } else { var_r26 = 1; } if (lbl_1_bss_8C[var_r26]) { var_r29 = lbl_1_bss_8C[var_r26]->data; if (var_r29) { for (var_r28 = 0; var_r28 < 2; var_r28++) { var_r30 = var_r29->unk_04[var_r28]; var_r31 = var_r30->data; sp8 = var_r31->unk_4C->data; if (var_r31 && var_r31->unk_24 <= 2) { if (fabs(var_r30->trans.z - arg0->z) < 140.0 && !var_r31->unk_30) { var_r31->unk_2C = 0; var_r31->unk_24 = 3; var_r31->unk_AC = 32; var_r31->unk_30 = 1.5f * REFRESH_RATE; var_r31->unk_90 = var_r31->unk_94 = -1; if (!var_r29->unk_00) { var_r31->unk_9C.x = -1.0f; } else { var_r31->unk_9C.x = 1.0f; } if (fabs(var_r31->unk_4C->trans.z - var_r30->trans.z) < 100.0) { var_r31->unk_90 = fn_1_48F0(var_r30->trans.z); if (var_r31->unk_90 == 5) { var_r31->unk_9C.z = -1.0f; } else if (!var_r31->unk_90) { var_r31->unk_9C.z = 1.0f; } else if ((var_r31->unk_4C->trans.z - var_r30->trans.z) < 0.0f) { var_r31->unk_9C.z = 1.0f; } else { var_r31->unk_9C.z = -1.0f; } } else { var_r31->unk_9C.z = 0.0f; } var_r31->unk_9C.y = 45.5f; var_r31->unk_28 = 5; CharModelMotionShiftSet(var_r31->unk_0C, var_r30->motion[var_r31->unk_28], 0.0f, 8.0f, HU3D_MOTATTR_NONE); spC.x = var_r30->trans.x; spC.y = var_r30->trans.y; spC.z = var_r30->trans.z; fn_1_6310(var_r31->unk_A8, &spC); var_r27 = HuAudFXPlay(1606); if (var_r27 != -1) { HuAudFXPanning(var_r27, var_r29->unk_00 * 64 + 32); } HuAudCharVoicePlay(var_r31->unk_0C, 291); if (var_r27 != -1) { HuAudFXPanning(var_r27, var_r29->unk_00 * 64 + 32); } } } } } } } s32 fn_1_2EDC(void) { UnkM426Struct2 *var_r31; s32 var_r30; for (var_r30 = 0; var_r30 < 4; var_r30++) { var_r31 = lbl_1_bss_7C[var_r30]->data; if ((var_r31->unk_24 != 0 && var_r31->unk_24 != 1) || var_r31->unk_94 != -1) { break; } } if (var_r30 < 4) { return 0; } return 1; } void fn_1_2F5C(omObjData *object, float *arg1, float *arg2, s32 *arg3) { s32 sp14[6]; s32 spC[2]; UnkM426Struct *sp8; float var_f31; UnkM426Struct2 *var_r31; s32 var_r30; s32 var_r29; UnkM426Struct2 *var_r28; s32 var_r27; s32 var_r26; omObjData *var_r24; UnkM426Struct *var_r23; s32 var_r22; s32 var_r21; s32 var_r20; var_r27 = 0; var_r22 = 0; var_r31 = object->data; var_r28 = var_r31->unk_4C->data; sp8 = lbl_1_bss_8C[var_r31->unk_00]->data; var_r23 = lbl_1_bss_8C[var_r31->unk_00 ^ 1]->data; var_r24 = var_r23->unk_04[0]; spC[0] = fn_1_48F0(var_r24->trans.z); var_r24 = var_r23->unk_04[1]; spC[1] = fn_1_48F0(var_r24->trans.z); var_r29 = var_r28->unk_90; if (var_r29 == -1) { var_r29 = var_r28->unk_94; } if (lbl_1_bss_54 == 5) { if (var_r31->unk_24 != 0 && var_r31->unk_24 != 1 && var_r31->unk_24 != 2) { var_r22 = 1; } if (var_r31->unk_B0 != -1 && var_r29 != -1 && ((var_r29 <= var_r31->unk_90 && var_r31->unk_B0 <= var_r29) || (var_r29 >= var_r31->unk_90 && var_r31->unk_B0 >= var_r29))) { var_r22 = 1; } if (var_r22) { var_r31->unk_B0 = -1; var_r31->unk_B8 = 0; var_r31->unk_B4 = 0; var_r31->unk_BC = 3; return; } switch (var_r31->unk_BC) { case 0: if (var_r31->unk_24 != 0 && var_r31->unk_24 != 1 && var_r31->unk_24 != 2) { var_r31->unk_B8 = 0; } if (--var_r31->unk_B8 <= 0) { var_r31->unk_B8 = 0; var_r31->unk_B4 = 0; var_r31->unk_BC = 3; return; } break; case 1: if (var_r31->unk_B0 != -1) { if (++var_r31->unk_B4 < 2.0f * REFRESH_RATE) { if (var_r31->unk_90 == var_r31->unk_B0) { var_r31->unk_B0 = -1; return; } if (var_r31->unk_90 < var_r31->unk_B0) { *arg2 = -64.0f; return; } *arg2 = 64.0f; return; } } var_r31->unk_B8 = 0; var_r31->unk_B4 = 0; var_r31->unk_BC = 3; return; case 2: if (var_r31->unk_B0 != -1) { if (++var_r31->unk_B4 < 2.0f * REFRESH_RATE && var_r31->unk_B0 != var_r28->unk_B0) { if (var_r31->unk_90 == var_r31->unk_B0) { *arg3 |= 256; var_r31->unk_B0 = -1; var_r31->unk_B4 = 0; var_r31->unk_B8 = ((VERSION_NTSC ? 50.0f : 45.0f) + (frand() % 15)) - (var_r31->unk_18 * 10); var_r31->unk_BC = 0; return; } if (var_r31->unk_90 < var_r31->unk_B0) { *arg2 = -64.0f; return; } *arg2 = 64.0f; return; } var_r31->unk_B0 = -1; var_r31->unk_B4 = 0; return; } var_r31->unk_B8 = 0; var_r31->unk_B4 = 0; var_r31->unk_BC = 3; return; case 3: var_r31->unk_B0 = -1; if (var_r29 == -1) { for (var_r30 = 0; var_r30 < 6; var_r27++, var_r30++) { sp14[var_r27] = var_r30; } } else { if (var_r31->unk_90 < var_r29) { for (var_r30 = 0; var_r30 < 3; var_r27++, var_r30++) { sp14[var_r27] = var_r30; } } else { for (var_r30 = 3; var_r30 < 6; var_r27++, var_r30++) { sp14[var_r27] = var_r30; } } if (var_r31->unk_18 < var_r28->unk_18) { for (var_r30 = 0; var_r30 < 6; var_r30++) { if (sp14[var_r30] == 3) { sp14[var_r30] = -1; } } } } for (var_r30 = 0, var_r21 = 256; var_r30 < var_r27; var_r30++) { if (sp14[var_r30] >= 0) { var_r20 = fn_1_4894(sp14[var_r30]); if (var_r20 != var_r31->unk_00) { var_r26 = (frand() % 5) - var_r31->unk_18; if (var_r26 < 0) { var_r26 = 0; } var_r26 += (s32)fabs(var_r28->unk_90 - var_r31->unk_B0); if (spC[0] == sp14[var_r30] || spC[1] == sp14[var_r30]) { var_r26 += var_r31->unk_18 * 2; } if (var_r21 > var_r26) { var_r31->unk_B0 = sp14[var_r30]; var_r21 = var_r26; } } } } if (var_r31->unk_B0 == -1) { if (var_r29 == -1) { if (var_r31->unk_90 < 3) { var_r31->unk_B0 = 1; } else { var_r31->unk_B0 = 4; } } else if (var_r29 > var_r31->unk_90) { var_r31->unk_B0 = 1; } else { var_r31->unk_B0 = 4; } var_r31->unk_BC = 1; } else { var_r31->unk_BC = 2; } var_r31->unk_B8 = 0; var_r31->unk_B4 = 0; break; } } } void fn_1_3654(s32 arg0) { omVibrate(lbl_1_bss_18[arg0 * 2], 12, 6, 6); omVibrate(lbl_1_bss_18[arg0 * 2 + 1], 12, 6, 6); } void fn_1_36C4(void) { lbl_1_bss_78 = omAddObjEx(lbl_1_bss_98, 64, 14, 0, -1, fn_1_3714); } void fn_1_3714(omObjData *object) { Vec sp8; UnkM426Struct3 *var_r31; s32 var_r29; UnkM426Struct3 *var_r28; s32 var_r27; ModelData *var_r26; s32 var_r25; var_r31 = var_r28 = object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 6 * sizeof(UnkM426Struct3), MEMORY_DEFAULT_NUM); memset(var_r31, 0, 6 * sizeof(UnkM426Struct3)); lbl_1_bss_30 = 0; object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 2)); object->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 3)); object->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 20)); object->model[3] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 21)); object->model[4] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 11)); object->model[5] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 12)); object->model[6] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 13)); object->model[7] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 22)); object->model[8] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 14)); object->model[9] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 15)); object->model[10] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 16)); object->model[11] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 17)); object->model[12] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 18)); object->model[13] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 19)); Hu3DModelAttrSet(object->model[4], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[5], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[6], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[8], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[9], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[11], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[13], HU3D_ATTR_DISPOFF); for (var_r29 = 0; var_r29 < 14; var_r29++) { Hu3DModelLayerSet(object->model[var_r29], 2); } Hu3DModelShadowMapSet(object->model[0]); Hu3DModelShadowMapSet(object->model[1]); object->work[0] = 0; object->work[1] = 0; object->work[2] = 0; object->work[3] = 0; for (var_r29 = 0; var_r29 < 6; var_r29++, var_r31++) { var_r31->unk_00 = var_r29; var_r31->unk_04 = -1; var_r31->unk_08 = var_r29 & 1; var_r31->unk_0C = 0; if (var_r29 == 0) { var_r31->unk_10 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 23)); Hu3DModelShadowMapSet(var_r31->unk_10); var_r31->unk_14 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 5)); var_r31->unk_18 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 4)); var_r31->unk_1C = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 7)); var_r31->unk_20 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 6)); var_r31->unk_24 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 8)); var_r31->unk_28 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 9)); } else { var_r31->unk_10 = Hu3DModelLink(var_r28->unk_10); Hu3DModelShadowMapSet(var_r31->unk_10); var_r31->unk_14 = Hu3DModelLink(var_r28->unk_14); var_r31->unk_18 = Hu3DModelLink(var_r28->unk_18); var_r31->unk_1C = Hu3DModelLink(var_r28->unk_1C); var_r31->unk_20 = Hu3DModelLink(var_r28->unk_20); var_r31->unk_24 = Hu3DModelLink(var_r28->unk_24); var_r31->unk_28 = Hu3DModelLink(var_r28->unk_28); } Hu3DModelLayerSet(var_r31->unk_10, 2); Hu3DModelLayerSet(var_r31->unk_14, 4); Hu3DModelLayerSet(var_r31->unk_18, 4); Hu3DModelLayerSet(var_r31->unk_1C, 2); Hu3DModelLayerSet(var_r31->unk_20, 2); Hu3DModelLayerSet(var_r31->unk_24, 2); Hu3DModelLayerSet(var_r31->unk_28, 2); var_r31->unk_34 = -1; var_r31->unk_38 = -425.0f + (140.0f * var_r29); Hu3DModelPosSet(var_r31->unk_10, 0.0f, 50.0f, var_r31->unk_38); Hu3DModelPosSet(var_r31->unk_14, 0.0f, 50.0f, var_r31->unk_38); Hu3DModelPosSet(var_r31->unk_18, 0.0f, 50.0f, var_r31->unk_38); Hu3DModelPosSet(var_r31->unk_1C, -500.0f, 30.000002f, var_r31->unk_38); Hu3DModelPosSet(var_r31->unk_20, -500.0f, 50.0f, var_r31->unk_38); Hu3DModelPosSet(var_r31->unk_24, 500.0f, 50.0f, var_r31->unk_38); Hu3DModelPosSet(var_r31->unk_28, 500.0f, 30.000002f, var_r31->unk_38); fn_1_4738(var_r29, var_r31->unk_08); sp8.x = 0.0f; sp8.y = 500.0f; sp8.z = var_r31->unk_38; var_r25 = 0.3f * (var_r31->unk_00 * REFRESH_RATE); var_r31->unk_34 = fn_1_5C6C(var_r31->unk_00, var_r25, &sp8); } lbl_1_bss_24 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M426, 1), MEMORY_DEFAULT_NUM)); for (var_r29 = 0; var_r29 < 2; var_r29++) { var_r27 = Hu3DHookFuncCreate(fn_1_88B4); var_r26 = &Hu3DData[var_r27]; var_r26->unk_120 = lbl_1_bss_24; Hu3DModelPosSetV(var_r27, &lbl_1_data_200[var_r29]); Hu3DModelScaleSet(var_r27, 4.0f, 4.0f, 4.0f); Hu3DModelLayerSet(var_r27, 4); } object->func = fn_1_3EFC; } void fn_1_3EFC(omObjData *object) { float var_f31; float var_f30; float var_f29; UnkM426Struct3 *var_r30; LightData *var_r29; s32 var_r28; s32 var_r27; s32 var_r26; s32 var_r25; s32 var_r24; var_r30 = object->data; for (var_r28 = 0; var_r28 < 6; var_r28++, var_r30++) { if (var_r30->unk_04 != -1) { var_r30->unk_0C++; var_f31 = 0.5f * var_r30->unk_0C; if (!var_r30->unk_04) { var_f29 = 30.000002f + (19.999998f * var_f31); var_f30 = 50.0f + (-19.999998f * var_f31); Hu3DModelPosSet(var_r30->unk_20, -500.0f, var_f30, var_r30->unk_38); Hu3DModelPosSet(var_r30->unk_28, 500.0f, var_f29, var_r30->unk_38); } else { var_f29 = 50.0f + (-19.999998f * var_f31); var_f30 = 30.000002f + (19.999998f * var_f31); Hu3DModelPosSet(var_r30->unk_1C, -500.0f, var_f30, var_r30->unk_38); Hu3DModelPosSet(var_r30->unk_24, 500.0f, var_f29, var_r30->unk_38); } if (var_r30->unk_0C >= 2) { if (var_r30->unk_04 == 0) { HuAudFXPlay(1600); } else { HuAudFXPlay(1599); } fn_1_4738(var_r28, var_r30->unk_04); var_r30->unk_04 = -1; var_r30->unk_0C = 0; Hu3DModelPosSet(var_r30->unk_1C, -500.0f, 30.000002f, var_r30->unk_38); Hu3DModelPosSet(var_r30->unk_20, -500.0f, 50.0f, var_r30->unk_38); Hu3DModelPosSet(var_r30->unk_24, 500.0f, 50.0f, var_r30->unk_38); Hu3DModelPosSet(var_r30->unk_28, 500.0f, 30.000002f, var_r30->unk_38); } } } Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[4], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[5], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[6], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[7], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[8], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[9], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[10], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[11], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[12], HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(object->model[13], HU3D_ATTR_DISPOFF); if (lbl_1_bss_30) { if (++object->work[0] >= 20) { object->work[0] = 0; } if (++object->work[1] >= 15) { object->work[1] = 0; } if (++object->work[2] >= 20) { object->work[2] = 0; } lbl_1_bss_30--; } else { if (object->work[0]) { if (++object->work[0] >= 20) { object->work[0] = 0; } } if (object->work[1]) { if (++object->work[1] >= 15) { object->work[1] = 0; } } if (object->work[2]) { if (++object->work[2] >= 20) { object->work[2] = 0; } } } if (++object->work[3] >= 20) { object->work[3] = 0; } Hu3DModelAttrReset(object->model[(object->work[0] / 5) + 3], HU3D_ATTR_DISPOFF); Hu3DModelAttrReset(object->model[(object->work[1] / 5) + 7], HU3D_ATTR_DISPOFF); Hu3DModelAttrReset(object->model[(object->work[2] / 10) + 10], HU3D_ATTR_DISPOFF); Hu3DModelAttrReset(object->model[(object->work[3] / 10) + 12], HU3D_ATTR_DISPOFF); var_r29 = &Hu3DGlobalLight[lbl_1_bss_2C]; var_r27 = lbl_1_data_48.r + (s32)(255.0f * lbl_1_bss_28); if (var_r27 > 255) { var_r27 = 255; } var_r26 = lbl_1_data_48.g + (s32)(255.0f * lbl_1_bss_28); if (var_r26 > 255) { var_r26 = 255; } var_r25 = lbl_1_data_48.b + (s32)(255.0f * lbl_1_bss_28); if (var_r25 > 255) { var_r25 = 255; } var_r24 = lbl_1_data_48.a + (s32)(255.0f * lbl_1_bss_28); if (var_r24 > 255) { var_r24 = 255; } var_r29->color.r = var_r27; var_r29->color.g = var_r26; var_r29->color.b = var_r25; var_r29->color.a = var_r24; if (lbl_1_bss_28 > 0.0f) { if ((lbl_1_bss_28 -= 0.05f) < 0.0f) { lbl_1_bss_28 = 0.0f; } } } void fn_1_45FC(omObjData *object) { fn_1_8E10(lbl_1_bss_24); fn_1_2AC8(object); } void fn_1_4644(void) { omObjData *var_r31; var_r31 = lbl_1_bss_78; fn_1_45FC(var_r31); lbl_1_bss_78 = NULL; } void fn_1_46A4(s32 arg0, s32 arg1) { UnkM426Struct3 *var_r31; if (!lbl_1_bss_78 || arg0 < 0 || arg0 >= 6) { return; } var_r31 = lbl_1_bss_78->data; var_r31 = &var_r31[arg0]; if (var_r31->unk_04 == -1) { if (var_r31->unk_08 != arg1) { var_r31->unk_04 = arg1; } var_r31->unk_0C = 0; return; } if (var_r31->unk_04 != arg1) { var_r31->unk_04 = arg1; var_r31->unk_0C = 0; } } void fn_1_4738(s32 arg0, s32 arg1) { UnkM426Struct3 *var_r31; if (!lbl_1_bss_78 || arg0 < 0 || arg0 >= 6) { return; } var_r31 = lbl_1_bss_78->data; var_r31 = &var_r31[arg0]; var_r31->unk_08 = arg1; switch (arg1) { case 0: Hu3DModelAttrReset(var_r31->unk_14, HU3D_ATTR_DISPOFF); Hu3DModelAttrReset(var_r31->unk_1C, HU3D_ATTR_DISPOFF); Hu3DModelAttrReset(var_r31->unk_24, HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(var_r31->unk_18, HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(var_r31->unk_20, HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(var_r31->unk_28, HU3D_ATTR_DISPOFF); break; case 1: Hu3DModelAttrSet(var_r31->unk_14, HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(var_r31->unk_1C, HU3D_ATTR_DISPOFF); Hu3DModelAttrSet(var_r31->unk_24, HU3D_ATTR_DISPOFF); Hu3DModelAttrReset(var_r31->unk_18, HU3D_ATTR_DISPOFF); Hu3DModelAttrReset(var_r31->unk_20, HU3D_ATTR_DISPOFF); Hu3DModelAttrReset(var_r31->unk_28, HU3D_ATTR_DISPOFF); break; default: break; } } s32 fn_1_4894(s32 arg0) { UnkM426Struct3 *var_r31; if (!lbl_1_bss_78 || arg0 < 0 || arg0 >= 6) { return 0; } var_r31 = lbl_1_bss_78->data; var_r31 = &var_r31[arg0]; return var_r31->unk_08; } s32 fn_1_48F0(float arg8) { float var_f31; UnkM426Struct3 *var_r31; s32 var_r30; s32 var_r29; if (!lbl_1_bss_78) { return -1; } var_r31 = lbl_1_bss_78->data; if (!lbl_1_bss_78->data) { return -1; } var_f31 = fabs(var_r31->unk_38 - arg8); var_r29 = 0; var_r31++; for (var_r30 = 1; var_r30 < 6; var_r30++, var_r31++) { if (var_f31 > fabs(var_r31->unk_38 - arg8)) { var_f31 = fabs(var_r31->unk_38 - arg8); var_r29 = var_r30; } } return var_r29; } float fn_1_4A68(s32 arg0) { UnkM426Struct3 *var_r31; if (!lbl_1_bss_78 || arg0 < 0 || arg0 >= 6) { return 0.0f; } var_r31 = lbl_1_bss_78->data; if (!lbl_1_bss_78->data) { return 0.0f; } return var_r31[arg0].unk_38; } s32 fn_1_4AF4(Vec *arg0, float arg8, s32 arg1) { float var_f31; float var_f30; float var_f28; float var_f26; float var_f25; float var_f24; UnkM426Struct3 *var_r30; s32 var_r29; if (!lbl_1_bss_78) { return 0; } var_r30 = lbl_1_bss_78->data; if (arg0->x < 0.0f) { var_f28 = -500.0f; } else { var_f28 = 500.0f; } for (var_r29 = 0; var_r29 < 6; var_r29++, var_r30++) { var_f24 = var_r30->unk_38; var_f31 = var_f28 - arg0->x; var_f30 = var_f24 - arg0->z; var_f25 = sqrtf((var_f31 * var_f31) + (var_f30 * var_f30)); var_f26 = atan2d(var_f31, var_f30); if (var_f25 < 150.0f && (fabs(fn_1_75F4(var_f26, arg8)) < 30.0f)) { break; } } if (var_r29 >= 6) { return 0; } if (arg0->x < 0.0f) { if (!var_r30->unk_08) { return 0; } } else if (var_r30->unk_08 == 1) { return 0; } if (arg1) { fn_1_46A4(var_r29, var_r30->unk_08 ^ 1); } return 1; } void fn_1_4EC4(void) { lbl_1_bss_74 = omAddObjEx(lbl_1_bss_98, 64, 0, 0, -1, fn_1_4F14); } void fn_1_4F14(omObjData *object) { UnkM426Struct4 *var_r31; UnkM426Struct4 *var_r30; s32 var_r29; var_r31 = var_r30 = object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 6 * sizeof(UnkM426Struct4), MEMORY_DEFAULT_NUM); memset(var_r31, 0, 6 * sizeof(UnkM426Struct4)); for (var_r29 = 0; var_r29 < 6; var_r29++, var_r31++) { if (var_r29 == 0) { var_r31->unk_00 = Hu3DModelCreateFile(3735579); } else { var_r31->unk_00 = Hu3DModelLink(var_r30->unk_00); } Hu3DModelShadowSet(var_r31->unk_00); Hu3DModelLayerSet(var_r31->unk_00, 2); if (var_r29 == 0) { var_r31->unk_08 = Hu3DJointMotionFile(var_r31->unk_00, DATA_MAKE_NUM(DATADIR_M426, 28)); var_r31->unk_0C = Hu3DJointMotionFile(var_r31->unk_00, DATA_MAKE_NUM(DATADIR_M426, 29)); } else { var_r31->unk_08 = var_r30->unk_08; var_r31->unk_0C = var_r30->unk_0C; } var_r31->unk_18 = var_r31->unk_1C = 2; var_r31->unk_38 = 0; var_r31->unk_20 = var_r29; var_r31->unk_24 = -1; var_r31->unk_28 = 5; var_r31->unk_2C = 0; var_r31->unk_30 = 0; var_r31->unk_34 = 0.0f; var_r31->unk_3C = var_r31->unk_40 = var_r31->unk_44 = 0.0f; var_r31->unk_48 = 0.0f; var_r31->unk_4C = 0.0f; Hu3DModelAttrSet(var_r31->unk_00, HU3D_ATTR_DISPOFF); Hu3DModelScaleSet(var_r31->unk_00, 0.8f, 0.8f, 0.8f); } object->func = fn_1_5134; } void fn_1_5134(omObjData *object) { Vec sp8; float var_f31; UnkM426Struct4 *var_r31; s32 var_r27; s32 var_r26; var_r31 = object->data; for (var_r27 = 0; var_r27 < 6; var_r27++, var_r31++) { var_r26 = fn_1_4894(var_r31->unk_24); switch (var_r31->unk_28) { case 0: if (lbl_1_bss_38) { if (--var_r31->unk_2C <= 0) { if (!var_r31->unk_38) { Hu3DModelAttrReset(var_r31->unk_00, HU3D_ATTR_DISPOFF); } Hu3DMotionSet(var_r31->unk_00, var_r31->unk_08); Hu3DModelAttrSet(var_r31->unk_00, HU3D_MOTATTR_LOOP); HuAudFXPlay(1607); var_r31->unk_2C = 0; var_r31->unk_28 = 1; } } break; case 1: if ((var_r31->unk_40 -= (VERSION_NTSC ? 50.0f : 60.000004f)) <= 50.0f) { if (lbl_1_bss_54 <= 4) { fn_1_3654(0); fn_1_3654(1); } HuAudFXPlay(1598); var_r31->unk_40 = 50.0f; var_r31->unk_30 = 0; var_r31->unk_28 = 2; } break; case 2: if (lbl_1_bss_3C) { var_r31->unk_30 = 0; var_r31->unk_28 = 3; Hu3DMotionShiftSet(var_r31->unk_00, var_r31->unk_0C, 0.0f, 8.0f, HU3D_MOTATTR_LOOP); } else { var_r31->unk_48 = fn_1_770C(0.0f, var_r31->unk_48, 10.0f); } break; case 3: if (!var_r26) { var_f31 = 90.0f; } else { var_f31 = 270.0f; } if (fabs(fn_1_75F4(var_f31, var_r31->unk_48)) < 5.0) { var_r31->unk_48 = var_f31; if ((var_r31->unk_34 += 0.1f) > lbl_1_bss_34 * (60.0f / REFRESH_RATE)) { var_r31->unk_34 = lbl_1_bss_34 * (60.0f / REFRESH_RATE); } } else { var_r31->unk_48 = fn_1_770C(var_f31, var_r31->unk_48, 10.0f); if ((var_r31->unk_34 -= 0.1f) < 0.0f) { var_r31->unk_34 = 0.0f; } } if (var_r31->unk_34 > 0.0f) { var_r31->unk_3C = var_r31->unk_3C + (var_r31->unk_34 * sind(var_r31->unk_48)); } Hu3DMotionSpeedSet(var_r31->unk_00, 1.4f * (0.33333334f * var_r31->unk_34)); if (lbl_1_bss_3C == 0) { Hu3DMotionShiftSet(var_r31->unk_00, var_r31->unk_08, 0.0f, 8.0f, HU3D_MOTATTR_LOOP); var_r31->unk_2C = 0; var_r31->unk_30 = 0; var_r31->unk_28 = 2; } if (fabs(var_r31->unk_3C) >= 400.0) { var_r31->unk_34 = 0.0f; if (var_r31->unk_3C > 0.0f) { var_r31->unk_3C = 399.0f; } else { var_r31->unk_3C = -399.0f; } var_r31->unk_18 = 0; sp8.x = var_r31->unk_3C; sp8.y = var_r31->unk_40; sp8.z = var_r31->unk_44; fn_1_6888(&sp8); if (var_r31->unk_3C < 0.0f) { lbl_1_bss_1C[0]--; fn_1_3654(0); HuAudFXPlay(1603); } else { lbl_1_bss_1C[1]--; fn_1_3654(1); HuAudFXPlay(1604); } if (lbl_1_bss_1C[0] < 0) { lbl_1_bss_1C[0] = 0; } if (lbl_1_bss_1C[1] < 0) { lbl_1_bss_1C[1] = 0; } lbl_1_bss_30 = REFRESH_RATE; lbl_1_bss_28 = 1.0f; var_r31->unk_30 = 0; var_r31->unk_28 = 4; } break; case 4: if (++var_r31->unk_30 >= 20) { sp8.x = var_r31->unk_3C; sp8.y = var_r31->unk_40; sp8.z = var_r31->unk_44; fn_1_2B74(&sp8); if (var_r31->unk_3C < 0.0f) { fn_1_46A4(var_r31->unk_24, 0); } else { fn_1_46A4(var_r31->unk_24, 1); } var_r31->unk_28 = 5; if (var_r26 == 0) { var_r31->unk_4C += 30.000002f; } else { var_r31->unk_4C -= 30.000002f; } if (fabs(var_r31->unk_4C) > 150.0) { if (!var_r26) { var_r31->unk_4C = 150.0f; } else { var_r31->unk_4C = -150.0f; } } sp8.x = var_r31->unk_4C; sp8.y = 500.0f; sp8.z = var_r31->unk_44; fn_1_5C6C(var_r31->unk_24, 0, &sp8); } break; case 5: break; default: break; } if (var_r31->unk_18 != var_r31->unk_1C) { if (var_r31->unk_18 < 0 || var_r31->unk_18 > 7) { var_r31->unk_18 = 2; } Hu3DModelLayerSet(var_r31->unk_00, var_r31->unk_18); var_r31->unk_1C = var_r31->unk_18; } if (var_r31->unk_28 != 5 && var_r31->unk_28) { if (!var_r31->unk_38) { Hu3DModelPosSet(var_r31->unk_00, var_r31->unk_3C, var_r31->unk_40, var_r31->unk_44); Hu3DModelRotSet(var_r31->unk_00, 0.0f, var_r31->unk_48, 0.0f); } else { Hu3DModelAttrSet(var_r31->unk_00, HU3D_ATTR_DISPOFF); } } } } void fn_1_5B34(omObjData *object) { fn_1_2AC8(object); } void fn_1_5B48(void) { fn_1_5B34(lbl_1_bss_74); lbl_1_bss_74 = NULL; } // unused void fn_1_5B88(s32 arg0) { UnkM426Struct4 *var_r31; s32 var_r28; s32 var_r30; if (lbl_1_bss_74) { var_r31 = lbl_1_bss_74->data; for (var_r30 = 0; var_r30 < 6; var_r30++, var_r31++) { var_r28 = var_r31->unk_38; var_r31->unk_38 = arg0; if (var_r28 != arg0 && !arg0) { Hu3DModelAttrReset(var_r31->unk_00, HU3D_ATTR_DISPOFF); Hu3DModelPosSet(var_r31->unk_00, var_r31->unk_3C, var_r31->unk_40, var_r31->unk_44); Hu3DModelRotSet(var_r31->unk_00, 0.0f, var_r31->unk_48, 0.0f); } } } } s32 fn_1_5C6C(s32 arg0, s32 arg1, Vec *arg2) { UnkM426Struct4 *var_r31; s32 var_r30; if (!lbl_1_bss_74) { return -1; } var_r31 = lbl_1_bss_74->data; for (var_r30 = 0; var_r30 < 6; var_r30++, var_r31++) { if (var_r31->unk_28 == 5) { break; } } if (var_r30 >= 6) { return -1; } var_r31->unk_24 = arg0; var_r31->unk_28 = 0; var_r31->unk_2C = arg1; var_r31->unk_34 = 0.0f; var_r31->unk_3C = arg2->x; var_r31->unk_40 = arg2->y; var_r31->unk_44 = arg2->z; var_r31->unk_48 = 0.0f; var_r31->unk_18 = 2; return var_r30; } s32 fn_1_5D3C(void) { UnkM426Struct4 *var_r31; s32 var_r30; s32 var_r29; s32 var_r28; if (!lbl_1_bss_74) { return -1; } var_r31 = lbl_1_bss_74->data; for (var_r28 = 0, var_r30 = var_r29 = 0; var_r28 < 6; var_r28++, var_r31++) { if (var_r31->unk_28 != 2 && var_r31->unk_28 != 3) { break; } if (var_r31->unk_3C < 0.0f) { var_r30++; } else if (var_r31->unk_3C > 0.0f) { var_r29++; } else if (frand() & 1) { var_r30++; } else { var_r29++; } } if (var_r28 < 6) { return -1; } if (var_r30 > var_r29) { return 1; } if (var_r30 < var_r29) { return 0; } return 2; } void fn_1_5E6C(void) { lbl_1_bss_70 = omAddObjEx(lbl_1_bss_98, 0, 0, 0, -1, fn_1_5EBC); } void fn_1_5EBC(omObjData *object) { UnkM426Struct5 *var_r31; s32 var_r30; UnkM426Struct5 *var_r29; UnkModelDataUnk120Struct *var_r27; ModelData *var_r26; var_r29 = var_r31 = object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 4 * sizeof(UnkM426Struct5), MEMORY_DEFAULT_NUM); memset(var_r31, 0, 4 * sizeof(UnkM426Struct5)); for (var_r30 = 0; var_r30 < 4; var_r30++, var_r31++) { if (var_r30 == 0) { var_r31->unk_08 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M426, 0), MEMORY_DEFAULT_NUM)); var_r31->unk_04 = fn_1_795C(var_r31->unk_08, 512); } else { var_r31->unk_08 = var_r29->unk_08; var_r31->unk_04 = fn_1_7DC8(var_r29->unk_04); } Hu3DModelLayerSet(var_r31->unk_04, 5); var_r26 = &Hu3DData[var_r31->unk_04]; var_r27 = var_r26->unk_120; var_r27->unk_20 = 0; Hu3DModelAttrSet(var_r31->unk_04, HU3D_ATTR_DISPOFF); var_r31->unk_00 = var_r30; var_r31->unk_0C = 0; var_r31->unk_10 = 0; var_r31->unk_14.x = var_r31->unk_14.y = var_r31->unk_14.z = 0.0f; var_r31->unk_20 = 1.0f; } object->func = fn_1_6008; } void fn_1_6008(omObjData *object) { UnkM426Struct8 *var_r31; UnkM426Struct5 *var_r30; UnkModelDataUnk120Struct *var_r29; s32 var_r28; s32 var_r27; ModelData *var_r26; s32 var_r25; var_r30 = object->data; if (var_r30) { for (var_r28 = 0; var_r28 < 4; var_r28++, var_r30++) { if (!var_r30->unk_0C) { continue; } if (var_r30->unk_10 <= 0) { Hu3DModelAttrSet(var_r30->unk_04, HU3D_ATTR_DISPOFF); } else { Hu3DModelAttrReset(var_r30->unk_04, HU3D_ATTR_DISPOFF); var_r26 = &Hu3DData[var_r30->unk_04]; var_r29 = var_r26->unk_120; var_r31 = var_r29->unk_3C; for (var_r27 = var_r25 = 0; var_r27 < var_r29->unk_24; var_r27++, var_r31++) { if (var_r31->unk_28 <= 0.0f) { continue; } var_r31->unk_30.x += var_r31->unk_04.x; var_r31->unk_30.y += var_r31->unk_04.y; var_r31->unk_30.z += var_r31->unk_04.z; var_r25++; var_r31->unk_00++; var_r31->unk_40 = var_r31->unk_00; if (var_r31->unk_40 >= 16) { var_r31->unk_40 = 0; var_r31->unk_28 = 0.0f; var_r30->unk_10--; } } Hu3DModelPosSet(var_r30->unk_04, var_r30->unk_14.x, var_r30->unk_14.y, var_r30->unk_14.z); } } } } void fn_1_6180(omObjData *object) { UnkM426Struct5 *var_r30; if (object && object->data) { var_r30 = object->data; fn_1_8E10(var_r30->unk_08); fn_1_5B34(object); } } void fn_1_61E0(void) { fn_1_6180(lbl_1_bss_70); } s32 fn_1_6248(Vec *arg0) { UnkM426Struct5 *var_r31; s32 var_r30; if (!lbl_1_bss_70) { return -1; } var_r31 = lbl_1_bss_70->data; if (!var_r31) { return; } for (var_r30 = 0; var_r30 < 4; var_r30++, var_r31++) { if (!var_r31->unk_0C) { break; } } if (var_r30 >= 4) { return -1; } var_r31->unk_0C = 1; var_r31->unk_10 = 0; fn_1_6310(var_r31->unk_00, arg0); var_r31->unk_20 = 1.0f; return var_r31->unk_00; } void fn_1_6310(s32 arg0, Vec *arg1) { UnkM426Struct5 *var_r31; if (lbl_1_bss_70) { var_r31 = lbl_1_bss_70->data; if (!var_r31) { return; } var_r31 = &var_r31[arg0]; if (var_r31->unk_0C) { var_r31->unk_14.x = arg1->x; var_r31->unk_14.y = arg1->y; var_r31->unk_14.z = arg1->z; Hu3DModelPosSet(var_r31->unk_04, var_r31->unk_14.x, var_r31->unk_14.y, var_r31->unk_14.z); } } } s32 fn_1_63B8(s32 arg0, Vec *arg1, Vec *arg2, float arg8, GXColor arg3) { UnkM426Struct8 *var_r31; UnkM426Struct5 *var_r30; UnkModelDataUnk120Struct *var_r29; s32 var_r28; ModelData *var_r27; if (!lbl_1_bss_70) { return -1; } var_r30 = lbl_1_bss_70->data; if (!var_r30) { return -1; } var_r30 = &var_r30[arg0]; if (!var_r30->unk_0C) { return -1; } var_r27 = &Hu3DData[var_r30->unk_04]; var_r29 = var_r27->unk_120; var_r31 = var_r29->unk_3C; for (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_00 = var_r31->unk_02 = 0; if (arg1) { var_r31->unk_30.x = arg1->x - var_r30->unk_14.x; var_r31->unk_30.y = arg1->y - var_r30->unk_14.y; var_r31->unk_30.z = arg1->z - var_r30->unk_14.z; } else { var_r31->unk_30.x = var_r30->unk_14.x; var_r31->unk_30.y = var_r30->unk_14.y; var_r31->unk_30.z = var_r30->unk_14.z; } if (arg2) { var_r31->unk_04.x = arg2->x; var_r31->unk_04.y = arg2->y; var_r31->unk_04.z = arg2->z; } else { var_r31->unk_04.x = var_r31->unk_04.y = var_r31->unk_04.z = 0.0f; } var_r31->unk_28 = arg8; var_r31->unk_3C.r = arg3.r; var_r31->unk_3C.g = arg3.g; var_r31->unk_3C.b = arg3.b; var_r31->unk_3C.a = arg3.a; var_r31->unk_2C = 0.0f; var_r31->unk_40 = 0; var_r31->unk_00 = 0; var_r30->unk_10++; return var_r28; } void fn_1_6594(void) { lbl_1_bss_6C = omAddObjEx(lbl_1_bss_98, 0, 0, 0, -1, fn_1_65E4); } void fn_1_65E4(omObjData *object) { HsfData *sp8; UnkM426Struct6 *var_r31; s32 var_r30; ModelData *var_r28; var_r31 = object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 16 * sizeof(UnkM426Struct6), MEMORY_DEFAULT_NUM); memset(var_r31, 0, 16 * sizeof(UnkM426Struct6)); for (var_r30 = 0; var_r30 < 16; var_r30++, var_r31++) { var_r31->unk_00 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M426, 30)); var_r28 = &Hu3DData[var_r31->unk_00]; sp8 = var_r28->hsfData; Hu3DModelLayerSet(var_r31->unk_00, 5); Hu3DModelAttrSet(var_r31->unk_00, HU3D_ATTR_DISPOFF); var_r31->unk_04 = 0; var_r31->unk_08 = 0; var_r31->unk_0C = var_r31->unk_10 = var_r31->unk_14 = 0.0f; var_r31->unk_18 = 1.0f; } object->func = fn_1_6704; } void fn_1_6704(omObjData *object) { UnkM426Struct6 *var_r31; s32 var_r30; var_r31 = object->data; if (!var_r31) { return; } for (var_r30 = 0; var_r30 < 16; var_r30++, var_r31++) { if (var_r31->unk_04) { Hu3DModelPosSet(var_r31->unk_00, var_r31->unk_0C, var_r31->unk_10, var_r31->unk_14); Hu3DModelRotSet(var_r31->unk_00, CRot.x, CRot.y, CRot.z); if (++var_r31->unk_08 >= 2.0f * REFRESH_RATE) { Hu3DModelAttrSet(var_r31->unk_00, HU3D_ATTR_DISPOFF); var_r31->unk_04 = 0; var_r31->unk_08 = 0; } } } } void fn_1_681C(omObjData *object) { if (object && object->data) { fn_1_5B34(object); } } void fn_1_6844(void) { fn_1_681C(lbl_1_bss_6C); } s32 fn_1_6888(Vec *arg0) { UnkM426Struct6 *var_r31; s32 var_r30; if (!lbl_1_bss_6C) { return; } var_r31 = lbl_1_bss_6C->data; if (!var_r31) { return; } for (var_r30 = 0; var_r30 < 16; var_r30++, var_r31++) { if (!var_r31->unk_04) { break; } } if (var_r30 >= 16) { return -1; } var_r31->unk_04 = 1; var_r31->unk_08 = 0; var_r31->unk_0C = arg0->x; var_r31->unk_10 = arg0->y; var_r31->unk_14 = arg0->z; Hu3DMotionTimeSet(var_r31->unk_00, 0.0f); Hu3DMotionSpeedSet(var_r31->unk_00, 0.5f); Hu3DModelAttrSet(var_r31->unk_00, HU3D_MOTATTR_NONE); Hu3DModelPosSet(var_r31->unk_00, var_r31->unk_0C, var_r31->unk_10, var_r31->unk_14); Hu3DModelScaleSet(var_r31->unk_00, 1.0f, 1.0f, 1.0f); Hu3DModelAttrReset(var_r31->unk_00, HU3D_ATTR_DISPOFF); return var_r30; } void fn_1_69E4(void) { lbl_1_bss_68 = omAddObjEx(lbl_1_bss_98, 254, 0, 0, -1, fn_1_6A34); } void fn_1_6A34(omObjData *object) { UnkM426Struct7 *var_r31; s32 var_r30; s32 var_r29; var_r31 = object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 2 * sizeof(UnkM426Struct7), MEMORY_DEFAULT_NUM); memset(var_r31, 0, 2 * sizeof(UnkM426Struct7)); for (var_r29 = 0; var_r29 < 2; var_r29++, var_r31++) { if (var_r29 == 0) { var_r31->unk_00 = 100; } else { var_r31->unk_00 = 490; } var_r31->unk_04 = 65; var_r31->unk_08 = 10; var_r31->unk_0C = 0; var_r31->unk_BC = 21; var_r31->unk_C0 = 0; var_r31->unk_10 = 1; for (var_r30 = 0; var_r30 < 6; var_r30++) { var_r31->unk_2C[var_r30][0] = lbl_1_data_220[var_r30]; var_r31->unk_2C[var_r30][1] = 0; switch (var_r30) { case 0: case 1: var_r31->unk_14[var_r30] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 51), 64, 0); var_r31->unk_74[var_r30][0] = var_r31->unk_2C[var_r30][0] - var_r31->unk_BC; var_r31->unk_74[var_r30][1] = var_r31->unk_2C[var_r30][1] - var_r31->unk_C0; break; case 2: var_r31->unk_14[var_r30] = espEntry(lbl_1_data_218[var_r29], 255, 0); break; case 3: var_r31->unk_14[var_r30] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 29), 256, 0); espTPLvlSet(var_r31->unk_14[var_r30], 0.6f); espColorSet(var_r31->unk_14[var_r30], 0, 0, 0); break; case 4: var_r31->unk_14[var_r30] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 9), 128, 0); break; case 5: var_r31->unk_14[var_r30] = espEntry(DATA_MAKE_NUM(DATADIR_M426, 31), 128, 0); espZRotSet(var_r31->unk_14[var_r30], 45.0f); break; default: break; } espDispOn(var_r31->unk_14[var_r30]); espDrawNoSet(var_r31->unk_14[var_r30], 0); espAttrSet(var_r31->unk_14[var_r30], HUSPR_ATTR_NOANIM); espPosSet(var_r31->unk_14[var_r30], var_r31->unk_00 + var_r31->unk_2C[var_r30][0], var_r31->unk_04 + var_r31->unk_2C[var_r30][1]); } } fn_1_7328(0); object->func = fn_1_6DC0; } void fn_1_6DC0(omObjData *object) { s32 sp8[3]; float var_f31; float var_f30; float var_f29; UnkM426Struct7 *var_r31; s32 var_r30; s32 var_r29; s32 var_r28; var_r31 = object->data; for (var_r29 = 0; var_r29 < 2; var_r29++, var_r31++) { if (!var_r31->unk_10) { continue; } if (var_r31->unk_08 != lbl_1_bss_1C[var_r29]) { var_r31->unk_08 = lbl_1_bss_1C[var_r29]; var_r31->unk_0C = 20; } if (var_r31->unk_0C) { var_f31 = 1.0 + (0.8f * sind((180.0f * (var_r31->unk_0C / 20.0f)))); var_r31->unk_0C--; } else { var_f31 = 1.0f; } var_r28 = lbl_1_bss_1C[var_r29]; if ((sp8[0] = var_r28 / 10) > 9) { sp8[0] = 9; } var_r28 -= sp8[0] * 10; sp8[1] = var_r28; if (var_r28 > 9) { sp8[1] = 9; } for (var_r30 = 0; var_r30 < 2; var_r30++) { var_f30 = (var_r31->unk_00 + var_r31->unk_BC) + (var_r31->unk_74[var_r30][0] * var_f31); var_f29 = (var_r31->unk_04 + var_r31->unk_C0) + (var_r31->unk_74[var_r30][1] * var_f31); if (sp8[var_r30] < 0) { sp8[var_r30] = 0; } espPosSet(var_r31->unk_14[var_r30], var_f30, var_f29); espScaleSet(var_r31->unk_14[var_r30], var_f31, var_f31); espBankSet(var_r31->unk_14[var_r30], sp8[var_r30]); } for (var_r30 = 2; var_r30 < 6; var_r30++) { var_f30 = var_r31->unk_00 + var_r31->unk_2C[var_r30][0]; var_f29 = var_r31->unk_04 + var_r31->unk_2C[var_r30][1]; espPosSet(var_r31->unk_14[var_r30], var_f30, var_f29); espScaleSet(var_r31->unk_14[var_r30], 1.0f, 1.0f); } } } void fn_1_71D0(omObjData *object) { UnkM426Struct7 *var_r30; s32 var_r29; s32 var_r28; if (object && object->data) { var_r30 = object->data; for (var_r28 = 0; var_r28 < 2; var_r28++, var_r30++) { for (var_r29 = 0; var_r29 < 6; var_r29++) { espKill(var_r30->unk_14[var_r29]); } } fn_1_5B34(object); } } void fn_1_7278(void) { fn_1_71D0(lbl_1_bss_68); } void fn_1_7328(s32 arg0) { UnkM426Struct7 *var_r31; s32 var_r30; s32 var_r29; var_r31 = lbl_1_bss_68->data; for (var_r29 = 0; var_r29 < 2; var_r29++, var_r31++) { var_r31->unk_10 = arg0; for (var_r30 = 0; var_r30 < 6; var_r30++) { if (arg0) { espDispOn(var_r31->unk_14[var_r30]); } else { espDispOff(var_r31->unk_14[var_r30]); } } } } void fn_1_73DC(void) { Hu3DCameraCreate(1); Hu3DCameraPerspectiveSet(1, 45.0f, 100.0f, 50000.0f, 1.2f); Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); omAddObjEx(lbl_1_bss_98, 32730, 0, 0, -1, omOutView); CRot.x = lbl_1_data_4C[1][0]; CRot.y = lbl_1_data_4C[1][1]; CRot.z = lbl_1_data_4C[1][2]; Center.x = lbl_1_data_4C[1][3]; Center.y = lbl_1_data_4C[1][4]; Center.z = lbl_1_data_4C[1][5]; CZoom = lbl_1_data_4C[1][6]; lbl_1_bss_64 = omAddObjEx(lbl_1_bss_98, 254, 0, 0, -1, fn_1_758C); } void fn_1_758C(omObjData *object) { lbl_1_bss_60 = 0; object->func = fn_1_75AC; } void fn_1_75AC(omObjData *arg0) { } void fn_1_75B0(UnkM426Struct9 *arg0) { arg0->unk_14 = 0; } void fn_1_75BC(void) { omObjData *var_r31; var_r31 = lbl_1_bss_64; var_r31->func = NULL; lbl_1_bss_64 = NULL; } float fn_1_75F4(float arg8, float arg9) { float var_f31; if (arg8 >= 360.0f) { arg8 -= 360.0f; } else if (arg8 < 0.0f) { arg8 += 360.0f; } if (arg9 >= 360.0f) { arg9 -= 360.0f; } else if (arg9 < 0.0f) { arg9 += 360.0f; } var_f31 = arg8 - arg9; if (var_f31 <= -180.0f) { var_f31 += 360.0f; } else if (var_f31 >= 180.0f) { var_f31 -= 360.0f; } return var_f31; } float fn_1_770C(float arg8, float arg9, float argA) { float var_f31; float var_f30; if (arg8 >= 360.0) { arg8 -= 360.0; } else if (arg8 < 0.0) { arg8 += 360.0; } if (arg9 >= 360.0) { arg9 -= 360.0; } else if (arg9 < 0.0) { arg9 += 360.0; } var_f30 = 360.0 + (arg8 - arg9); if (fabs(var_f30) >= 360.0) { var_f30 = fmod(var_f30, 360.0); } if (var_f30 < 180.0) { if (var_f30 <= argA) { var_f31 = var_f30; } else { var_f31 = argA; } } else if ((360.0 - var_f30) <= argA) { var_f31 = -(360.0 - var_f30); } else { var_f31 = -argA; } var_f31 += arg9; if (var_f31 >= 360.0) { var_f31 -= 360.0; var_f31 = var_f31; } else if (var_f31 < 0.0) { var_f31 += 360.0; var_f31 = var_f31; } return var_f31; } s16 fn_1_795C(AnimData *arg0, s16 arg1) { UnkModelDataUnk120Struct *var_r31; s16 var_r30; Vec2f *var_r29; UnkM426Struct8 *var_r28; ModelData *var_r27; Vec *var_r26; void *var_r24; s16 var_r23; void *var_r22; var_r23 = Hu3DHookFuncCreate(fn_1_80DC); var_r27 = &Hu3DData[var_r23]; var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(UnkModelDataUnk120Struct), var_r27->unk_48); var_r27->unk_120 = var_r31; var_r31->unk_38 = arg0; var_r31->unk_24 = arg1; var_r31->unk_20 = 0; var_r31->unk_4C = NULL; var_r31->unk_50 = NULL; var_r31->unk_28 = 0.0f; 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(UnkM426Struct8), 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 = ((frand() & 127) - 64) * 20; var_r28->unk_30.y = ((frand() & 127) - 64) * 30; var_r28->unk_30.z = ((frand() & 127) - 64) * 20; var_r28->unk_3C.r = var_r28->unk_3C.g = var_r28->unk_3C.b = var_r28->unk_3C.a = 255; 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_r22 = var_r24; DCFlushRange(var_r24, 0x4000); GXBeginDisplayList(var_r22, 0x4000); GXBegin(GX_QUADS, GX_VTXFMT0, arg1 * 4); for (var_r30 = 0; var_r30 < arg1; var_r30++) { GXPosition1x16(var_r30 * 4); GXColor1x16(var_r30); GXTexCoord1x16(var_r30 * 4); GXPosition1x16(var_r30 * 4 + 1); GXColor1x16(var_r30); GXTexCoord1x16(var_r30 * 4 + 1); GXPosition1x16(var_r30 * 4 + 2); GXColor1x16(var_r30); GXTexCoord1x16(var_r30 * 4 + 2); GXPosition1x16(var_r30 * 4 + 3); GXColor1x16(var_r30); GXTexCoord1x16(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; } s16 fn_1_7DC8(s16 arg0) { UnkModelDataUnk120Struct *var_r31; Vec2f *var_r30; UnkM426Struct8 *var_r29; s16 var_r28; ModelData *var_r27; UnkModelDataUnk120Struct *var_r26; Vec *var_r25; s32 var_r24; ModelData *var_r23; s16 var_r22; var_r23 = &Hu3DData[arg0]; var_r26 = var_r23->unk_120; var_r22 = Hu3DHookFuncCreate(var_r23->hook); var_r27 = &Hu3DData[var_r22]; var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(UnkModelDataUnk120Struct), var_r27->unk_48); var_r27->unk_120 = var_r31; var_r31->unk_38 = var_r26->unk_38; var_r31->unk_24 = var_r26->unk_24; var_r24 = var_r31->unk_24; var_r31->unk_20 = 0; var_r31->unk_4C = NULL; var_r31->unk_50 = NULL; 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_r29 = HuMemDirectMallocNum(HEAP_DATA, var_r24 * sizeof(UnkM426Struct8), var_r27->unk_48); var_r31->unk_3C = var_r29; for (var_r28 = 0; var_r28 < var_r24; var_r28++, var_r29++) { var_r29->unk_28 = 0.0f; var_r29->unk_2C = 0.0f; var_r29->unk_30.x = ((frand() & 127) - 64) * 20; var_r29->unk_30.y = ((frand() & 127) - 64) * 30; var_r29->unk_30.z = ((frand() & 127) - 64) * 20; var_r29->unk_3C.r = var_r29->unk_3C.g = var_r29->unk_3C.b = var_r29->unk_3C.a = 255; var_r29->unk_40 = 0; } var_r25 = HuMemDirectMallocNum(HEAP_DATA, var_r24 * sizeof(Vec) * 4, var_r27->unk_48); var_r31->unk_40 = var_r25; for (var_r28 = 0; var_r28 < (4 * var_r24); var_r28++, var_r25++) { var_r25->x = var_r25->y = var_r25->z = 0.0f; } var_r30 = HuMemDirectMallocNum(HEAP_DATA, var_r24 * sizeof(Vec2f) * 4, var_r27->unk_48); var_r31->unk_44 = var_r30; for (var_r28 = 0; var_r28 < var_r24; var_r28++) { var_r30->x = 0.0f; var_r30->y = 0.0f; var_r30++; var_r30->x = 1.0f; var_r30->y = 0.0f; var_r30++; var_r30->x = 1.0f; var_r30->y = 1.0f; var_r30++; var_r30->x = 0.0f; var_r30->y = 1.0f; var_r30++; } var_r31->unk_34 = var_r26->unk_34; var_r31->unk_48 = var_r26->unk_48; (void)var_r26; return var_r22; } void fn_1_80DC(ModelData *arg0, Mtx arg1) { Mtx sp128; Mtx spF8; Mtx spC8; Vec sp98[4]; Vec sp68[4]; Vec sp38[4]; ROMtx sp8; UnkModelDataUnk120Struct *var_r31; Vec *var_r30; UnkM426Struct8 *var_r29; Vec *var_r28; Vec *var_r27; Vec2f *var_r26; s16 var_r25; s16 var_r23; s16 var_r21; s16 var_r20; s16 var_r19; UnkModelDataUnk120Hook var_r18; var_r31 = arg0->unk_120; if ((var_r31->unk_2C != GlobalCounter) || shadowModelDrawF) { if ((var_r31->unk_50) && (var_r31->unk_50 != arg0)) { fn_1_80DC(var_r31->unk_50, arg1); } GXLoadPosMtxImm(arg1, 0); GXSetNumTevStages(1); GXSetNumTexGens(1); GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125); 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(GX_FALSE, GX_LEQUAL, GX_FALSE); } else { var_r21 = var_r31->unk_38->bmp->dataFmt & 15; if (var_r21 == 7 || var_r21 == 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 (arg0->attr & 2) { GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); } else { GXSetZMode(GX_TRUE, 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(GX_FALSE); 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_POS_XYZ, GX_F32, 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_CLR_RGBA, GX_RGBA8, 0); GXSETARRAY(GX_VA_CLR0, &var_r31->unk_3C->unk_3C, sizeof(var_r31->unk_3C->unk_3C), 68); 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(arg1, sp128)) { MTXIdentity(sp128); } MTXReorder(sp128, sp8); if (var_r31->unk_4C) { var_r18 = var_r31->unk_4C; var_r18(arg0, var_r31, arg1); } var_r29 = var_r31->unk_3C; var_r30 = var_r31->unk_40; var_r26 = var_r31->unk_44; MTXROMultVecArray(sp8, lbl_1_data_22C, &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; var_r27 = sp38; 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_22C[0], &sp98[0], var_r29->unk_28); VECScale(&lbl_1_data_22C[1], &sp98[1], var_r29->unk_28); VECScale(&lbl_1_data_22C[2], &sp98[2], var_r29->unk_28); VECScale(&lbl_1_data_22C[3], &sp98[3], var_r29->unk_28); MTXRotRad(spC8, 90, var_r29->unk_2C); MTXConcat(sp128, spC8, &spF8[0]); 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_25C[var_r25].x; var_r26->y = (0.25f * var_r19) + lbl_1_data_25C[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(); GXCallDisplayList(var_r31->unk_48, var_r31->unk_34); if (!shadowModelDrawF) { if ((var_r31->unk_21 & 2) == 0) { var_r31->unk_28++; } if (var_r31->unk_30 && (var_r31->unk_30 <= var_r31->unk_28)) { if (var_r31->unk_21 & 1) { var_r31->unk_28 = 0.0f; } var_r31->unk_28 = var_r31->unk_30; } var_r31->unk_2C = GlobalCounter; } } } void fn_1_88B4(ModelData *arg0, Mtx arg1) { float var_f31; float var_f30; float var_f28; float var_f27; float var_f26; CameraData *var_r30; AnimData *var_r29; s16 var_r28; var_r30 = Hu3DCamera; var_f31 = var_r30->pos.x - arg0->pos.x; var_f27 = var_r30->pos.y - arg0->pos.y; var_f30 = var_r30->pos.z - arg0->pos.z; var_f26 = sqrtf((var_f31 * var_f31) + (var_f30 * var_f30)); arg0->rot.x = (atan2d(var_f26, var_f27))-90.0; arg0->rot.y = atan2d(var_f31, var_f30); var_r29 = arg0->unk_120; GXLoadPosMtxImm(arg1, 0); GXSetNumTevStages(1); GXSetNumTexGens(1); GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); if (shadowModelDrawF) { GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ONE, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE); } else { var_r28 = var_r29->bmp->dataFmt & 15; if (var_r28 == 7 || var_r28 == 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); } GXSetZMode(GX_FALSE, 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_r29, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); GXSetZCompLoc(GX_FALSE); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXSETARRAY(GX_VA_POS, lbl_1_data_27C, sizeof(lbl_1_data_27C), sizeof(Vec)); GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); GXSETARRAY(GX_VA_CLR0, lbl_1_data_2AC, sizeof(lbl_1_data_2AC), sizeof(GXColor)); GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); GXSETARRAY(GX_VA_TEX0, lbl_1_data_2BC, sizeof(lbl_1_data_2BC), sizeof(Vec2f)); GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition1x16(0); GXColor1x16(0); GXTexCoord1x16(0); GXPosition1x16(1); GXColor1x16(0); GXTexCoord1x16(1); GXPosition1x16(2); GXColor1x16(0); GXTexCoord1x16(2); GXPosition1x16(3); GXColor1x16(0); GXTexCoord1x16(3); } void fn_1_8E10(AnimData *arg0) { arg0->useNum = 0; HuSprAnimKill(arg0); } void fn_1_8E48(ModelData *arg0, Mtx arg1) { CameraData *var_r31; Mtx sp50; Mtx44 sp10; GXColor spC = { 255, 0, 0, 128 }; var_r31 = Hu3DCamera; GXSetScissor(var_r31->scissor_x, var_r31->scissor_y, var_r31->scissor_w, var_r31->scissor_h); GXSetViewport(0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); C_MTXOrtho(sp10, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f); GXSetProjection(sp10, GX_ORTHOGRAPHIC); GXSetTevColor(GX_TEVREG0, spC); GXSetNumTexGens(0); GXSetNumTevStages(1); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); MTXIdentity(sp50); GXLoadPosMtxImm(sp50, 0); GXSetZMode(GX_FALSE, GX_ALWAYS, GX_TRUE); GXSetNumChans(1); GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE); GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_DIRECT); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_U8, 0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); GXPosition3u8(0, 0, 0); GXPosition3u8(1, 0, 0); GXPosition3u8(1, 1, 0); GXPosition3u8(0, 1, 0); } #pragma dont_inline on void fn_1_9130(s32 arg0, UnkM426Struct10 *arg1, s32 arg2) { switch (arg1->unk_04) { case 0: fn_1_9544(arg0, arg1, arg2); return; case 1: fn_1_9798(arg0, arg1, arg2); return; case 2: fn_1_9868(arg0, arg1, arg2); return; case 3: fn_1_9230(arg0, arg1, arg2); return; case 4: fn_1_97EC(arg0, arg1, arg2); return; case 5: fn_1_971C(arg0, arg1, arg2); return; case 6: fn_1_9544(arg0, arg1, arg2); return; default: fn_1_9544(arg0, arg1, arg2); return; } } #pragma dont_inline reset void fn_1_9230(s32 arg0, UnkM426Struct10 *arg1, s32 arg2) { UnkM426Struct10 *var_r29; UnkM426Struct10 *var_r28; UnkM426Struct10 *var_r27; u32 var_r25; u32 var_r24; u32 var_r23; u32 var_r22; arg1->unk_0C &= ~arg2; for (var_r25 = 0; var_r25 < arg1->unk_14; var_r25++) { var_r29 = arg1->unk_18[var_r25]; switch (var_r29->unk_04) { case 0: fn_1_9544(arg0, var_r29, arg2); break; case 1: fn_1_9798(arg0, var_r29, arg2); break; case 2: fn_1_9868(arg0, var_r29, arg2); break; case 3: var_r29->unk_0C &= ~arg2; for (var_r24 = 0; var_r24 < var_r29->unk_14; var_r24++) { var_r28 = var_r29->unk_18[var_r24]; switch (var_r28->unk_04) { case 0: fn_1_9544(arg0, var_r28, arg2); break; case 1: fn_1_9798(arg0, var_r28, arg2); break; case 2: fn_1_9868(arg0, var_r28, arg2); break; case 3: var_r28->unk_0C &= ~arg2; for (var_r23 = 0; var_r23 < var_r28->unk_14; var_r23++) { var_r27 = var_r28->unk_18[var_r23]; switch (var_r27->unk_04) { case 0: fn_1_9544(arg0, var_r27, arg2); break; case 1: fn_1_9798(arg0, var_r27, arg2); break; case 2: fn_1_9868(arg0, var_r27, arg2); break; case 3: var_r27->unk_0C &= ~arg2; for (var_r22 = 0; var_r22 < var_r27->unk_14; var_r22++) { fn_1_9130(arg0, var_r27->unk_18[var_r22], arg2); } break; case 4: fn_1_97EC(arg0, var_r27, arg2); break; case 5: fn_1_971C(arg0, var_r27, arg2); break; case 6: fn_1_9544(arg0, var_r27, arg2); break; default: fn_1_9544(arg0, var_r27, arg2); break; } } break; case 4: fn_1_97EC(arg0, var_r28, arg2); break; case 5: fn_1_971C(arg0, var_r28, arg2); break; case 6: fn_1_9544(arg0, var_r28, arg2); break; default: fn_1_9544(arg0, var_r28, arg2); break; } } break; case 4: fn_1_97EC(arg0, var_r29, arg2); break; case 5: fn_1_971C(arg0, var_r29, arg2); break; case 6: fn_1_9544(arg0, var_r29, arg2); break; default: fn_1_9544(arg0, var_r29, arg2); break; } } } void fn_1_9544(s32 arg0, UnkM426Struct10 *arg1, s32 arg2) { UnkM426Struct10 *var_r31; u32 var_r27; u32 var_r26; u32 var_r25; u32 var_r24; u32 var_r23; arg1->unk_0C &= ~arg2; for (var_r27 = 0; var_r27 < arg1->unk_14; var_r27++) { var_r31 = arg1->unk_18[var_r27]; switch (var_r31->unk_04) { case 0: var_r31->unk_0C = var_r31->unk_0C & ~arg2; for (var_r26 = 0; var_r26 < var_r31->unk_14; var_r26++) { fn_1_9130(arg0, var_r31->unk_18[var_r26], arg2); } break; case 1: fn_1_9798(arg0, var_r31, arg2); break; case 2: fn_1_9868(arg0, var_r31, arg2); break; case 3: var_r31->unk_0C = var_r31->unk_0C & ~arg2; for (var_r25 = 0; var_r25 < var_r31->unk_14; var_r25++) { fn_1_9130(arg0, var_r31->unk_18[var_r25], arg2); } break; case 4: fn_1_97EC(arg0, var_r31, arg2); break; case 5: fn_1_971C(arg0, var_r31, arg2); break; case 6: var_r31->unk_0C = var_r31->unk_0C & ~arg2; for (var_r24 = 0; var_r24 < var_r31->unk_14; var_r24++) { fn_1_9130(arg0, var_r31->unk_18[var_r24], arg2); } break; default: var_r31->unk_0C = var_r31->unk_0C & ~arg2; for (var_r23 = 0; var_r23 < var_r31->unk_14; var_r23++) { fn_1_9130(arg0, var_r31->unk_18[var_r23], arg2); } break; } } } void fn_1_971C(s32 arg0, UnkM426Struct10 *arg1, s32 arg2) { u32 var_r30; arg1->unk_0C = arg1->unk_0C & ~arg2; for (var_r30 = 0; var_r30 < arg1->unk_14; var_r30++) { fn_1_9130(arg0, arg1->unk_18[var_r30], arg2); } } void fn_1_9798(s32 arg0, UnkM426Struct10 *arg1, s32 arg2) { arg1->unk_0C = arg1->unk_0C & ~arg2; fn_1_9130(arg0, arg1->unk_64, arg2); } void fn_1_97EC(s32 arg0, UnkM426Struct10 *arg1, s32 arg2) { u32 var_r30; arg1->unk_0C &= ~arg2; for (var_r30 = 0; var_r30 < arg1->unk_14; var_r30++) { fn_1_9130(arg0, arg1->unk_18[var_r30], arg2); } } void fn_1_9868(s32 arg0, UnkM426Struct10 *arg1, s32 arg2) { u32 var_r30; arg1->unk_0C &= ~arg2; for (var_r30 = 0; var_r30 < arg1->unk_14; var_r30++) { fn_1_9130(arg0, arg1->unk_18[var_r30], arg2); } } float fn_1_98E4(float arg8, float arg9, float argA, float argB) { float var_f31; float var_f30; var_f31 = 1.0 - arg8; var_f30 = (argB * (arg8 * arg8)) + ((arg9 * (var_f31 * var_f31)) + (2.0 * (argA * (var_f31 * arg8)))); return var_f30; } void fn_1_995C(s16 arg0) { UnkM426Struct11 sp8; UnkM426Struct12 *var_r31; HsfBuffer *var_r30; ModelData *var_r29; HsfData *var_r28; s32 var_r27; s32 var_r26; var_r29 = &Hu3DData[arg0]; var_r28 = var_r29->hsfData; var_r30 = var_r28->face; for (var_r27 = 0; var_r27 < var_r28->faceCnt; var_r27++, var_r30++) { var_r31 = var_r30->data; for (var_r26 = 0; var_r26 < var_r30->count; var_r26++, var_r31++) { switch (var_r31->unk_00 & 7) { case 2: case 3: sp8 = var_r31->unk_0C; var_r31->unk_0C = var_r31->unk_14; var_r31->unk_14 = sp8; break; default: break; } } DCStoreRangeNoSync(var_r30->data, var_r30->count * sizeof(UnkM426Struct12)); } HuMemDirectFreeNum(HEAP_DATA, var_r29->unk_48); MakeDisplayList(arg0, var_r29->unk_48); }