#include "game/object.h" #include "game/gamework_data.h" #include "game/minigame_seq.h" #include "game/wipe.h" #include "game/audio.h" #include "game/hsfman.h" #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) typedef void (*ObjFuncs)(void); typedef struct unkDominationData5 { /* 0x00 */ u32 unk_00; /* 0x04 */ s16 unk_04; /* 0x06 */ s16 unk_06; /* 0x08 */ s16 unk_08; /* 0x0A */ char unk_0A[6]; /* 0x10 */ s16 unk_10; /* 0x12 */ char unk_12[10]; /* 0x1C */ s16 unk_1C[4]; /* 0x24 */ s16 unk_24; /* 0x26 */ char unk_26[2]; /* 0x28 */ Vec unk_28; /* 0x34 */ Vec unk_34; /* 0x40 */ f32 unk_40; /* 0x44 */ s32 unk_44; } unkDominationData5; //sizeof 0x48 //function signatures void fn_1_388(u8, s32); void fn_1_3C4(u8); s32 fn_1_4C0(s32); s32 fn_1_508(u8); s32 fn_1_53C(u8); void fn_1_568(s16, s16, s16); void fn_1_4B7C(void); void fn_1_4C3C(s32); void fn_1_4C6C(omObjData*); void fn_1_4D0C(void); void fn_1_4D54(void); void fn_1_4E8C(void); void fn_1_4FAC(void); void fn_1_50E8(void); void fn_1_51E4(void); void fn_1_52AC(void); void fn_1_53B8(void); void fn_1_5574(void); void fn_1_5630(void); s16 fn_1_5804(void); void fn_1_5A80(void); void fn_1_5BB0(void); //bss Process* lbl_1_bss_3980; omObjData* lbl_1_bss_397C; s16 lbl_1_bss_3978; //data ObjFuncs lbl_1_data_2A8[] = { fn_1_4D0C, fn_1_4D54, fn_1_4E8C, fn_1_4FAC, fn_1_50E8, fn_1_51E4, fn_1_52AC, fn_1_53B8, fn_1_5574, fn_1_5630, fn_1_5A80, fn_1_5BB0, fn_1_4B7C }; f32 lbl_1_data_2DC[4] = {850.0f, 900.0f, 1300.0f, 1500.0f}; Vec lbl_1_data_2EC = {540.0f, 0.0f, 10000.0f}; Vec lbl_1_data_2F8 = {-50.0f, -360.0f, 0.0f}; f32 lbl_1_data_304 = 2670.0f; Vec lbl_1_data_308 = {437.0f, 0.0f, 5000.0f}; Vec lbl_1_data_314 = {-50.0f, -360.0f, 0.0f}; f32 lbl_1_data_320 = 2290.0f; Vec lbl_1_data_324 = {0.0f, 0.0f, 100.0f}; Vec lbl_1_data_330 = {-45.0f, -540.0f, 0.0f}; f32 lbl_1_data_33C = 1910.0f; Vec lbl_1_data_340 = {0.0f, 0.0f, 100.0f}; Vec lbl_1_data_34C = {-53.0f, -680.0f, 0.0f}; f32 lbl_1_data_358 = 1900.0f; void fn_1_4980(Process* arg0) { s32 i; unkDominationData5* temp_r31; lbl_1_bss_3980 = arg0; lbl_1_bss_397C = omAddObjEx(lbl_1_bss_3980, 0x40, 0, 0, 0, fn_1_4C6C); lbl_1_bss_397C->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData5), MEMORY_DEFAULT_NUM); temp_r31 = lbl_1_bss_397C->data; Hu3DShadowCreate(45.0f, 10.0f, 10000.0f); Hu3DShadowTPLvlSet(0.6f); fn_1_1B1C(lbl_1_bss_3980); lbl_1_bss_3978 = GWMGRecordGet(1); if (lbl_1_bss_3978 == 0) { lbl_1_bss_3978 = 0x96; } fn_1_14F0(lbl_1_bss_3980, lbl_1_bss_3978); fn_1_F4(lbl_1_bss_3980); fn_1_2354(lbl_1_bss_3980); fn_1_3AC8(lbl_1_bss_3980); fn_1_41CC(lbl_1_bss_3980); fn_1_5C5C(lbl_1_bss_3980, lbl_1_bss_3978); WipeCreate(1, 0, 0x3C); temp_r31->unk_06 = -1; temp_r31->unk_08 = -1; temp_r31->unk_24 = 0; for (i = 0; i < ARRAY_COUNT(temp_r31->unk_1C); i++) { temp_r31->unk_1C[i] = -1; } fn_1_5F40(0); fn_1_4C3C(0); } void fn_1_4B7C(void) { unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_04 == 0) { WipeCreate(2, 0, 60); temp_r31->unk_04++; } if (WipeStatGet() == 0) { HuAudFadeOut(100); if (temp_r31->unk_06 != -1) { MGSeqKill(temp_r31->unk_06); } if (temp_r31->unk_08 != -1) { MGSeqKill(temp_r31->unk_08); } fn_1_194(); fn_1_1CA8(); fn_1_15D8(); fn_1_3B68(); fn_1_44F4(); fn_1_5ECC(); omOvlReturnEx(1, 1); } } void fn_1_4C3C(s32 arg0) { unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; temp_r31->unk_00 = arg0; temp_r31->unk_04 = 0; } void fn_1_4C6C(omObjData* obj) { unkDominationData5* temp_r30; temp_r30 = lbl_1_bss_397C->data; lbl_1_data_2A8[temp_r30->unk_00](); if (omSysExitReq != 0) { fn_1_4C3C(12); omSysExitReq = 0; } } void fn_1_4D0C(void) { unkDominationData5* sp8; sp8 = lbl_1_bss_397C->data; fn_1_4C3C(1); } void fn_1_4D54(void) { unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; switch (temp_r31->unk_04) { case 0: HuAudFXPlay(0x545); fn_1_1DB0(&lbl_1_data_2EC, &lbl_1_data_2F8, &lbl_1_data_304, 0, 0); temp_r31->unk_04 = 1; break; case 1: fn_1_1DB0(&lbl_1_data_308, &lbl_1_data_314, &lbl_1_data_320, 0x64, 1); temp_r31->unk_04 = 2; break; case 2: if (fn_1_1D88() == 0) { fn_1_1DB0(&lbl_1_data_324, &lbl_1_data_330, &lbl_1_data_33C, 0x6E, 2); temp_r31->unk_04 = 3; case 3: if (fn_1_1D88() == 0) { fn_1_4C3C(2); return; } } } } void fn_1_4E8C(void) { s32 i; unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_06 == -1) { temp_r31->unk_06 = MGSeqStartCreate(); temp_r31->unk_44 = HuAudSeqPlay(0x46); fn_1_2564(); for (i = 0; i < 4; i++) { fn_1_568(i, 1, 0x3C); } } if (MGSeqStatGet(temp_r31->unk_06) == 0) { MGSeqKill(temp_r31->unk_06); temp_r31->unk_06 = -1; temp_r31->unk_10 = 0x258; temp_r31->unk_08 = MGSeqTimerCreate(temp_r31->unk_10 / 60); fn_1_1E4(); fn_1_4C3C(3); } } void fn_1_4FAC(void) { unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_10 > 0) { if ((--temp_r31->unk_10 % 60) == 0) { MGSeqParamSet(temp_r31->unk_08, 1, (temp_r31->unk_10 / 60)); } return; } MGSeqParamSet(temp_r31->unk_08, 2, -1); temp_r31->unk_08 = -1; HuAudSeqFadeOut(temp_r31->unk_44, 0x64); fn_1_238(); fn_1_5804(); if (temp_r31->unk_24 > 0) { fn_1_4C3C(4); return; } fn_1_4C3C(6); } void fn_1_50E8(void) { unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; switch (temp_r31->unk_04++) { case 0xA: fn_1_1DB0(&lbl_1_data_340, &lbl_1_data_34C, &lbl_1_data_358, 0xB4, 4); return; case 0x32: fn_1_28C(); return; case 0x78: fn_1_2E0(); return; case 0x9A: fn_1_334(); return; case 0xBE: temp_r31->unk_44 = HuAudSeqPlay(0x3A); fn_1_25C0(); fn_1_4C3C(5); return; } } void fn_1_51E4(void) { Vec sp8; unkDominationData5* temp_r30; temp_r30 = lbl_1_bss_397C->data; if ((temp_r30->unk_04++ >= 15) || (fn_1_2880() != 0)) { if (fn_1_2880() == 0) { fn_1_1CD4(&sp8.z, &sp8.y, &sp8.x); sp8.x += 33.5f; fn_1_1CAC(sp8.z, sp8.y, sp8.x); return; } fn_1_4C3C(6); } } void fn_1_52AC(void) { unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_04 == 0) { temp_r31->unk_06 = MGSeqFinishCreate(); temp_r31->unk_04++; HuAudSeqFadeOut(temp_r31->unk_44, 100); } if (MGSeqStatGet(temp_r31->unk_06) == 0) { MGSeqKill(temp_r31->unk_06); temp_r31->unk_06 = -1; if (temp_r31->unk_08 != 0) { MGSeqKill(temp_r31->unk_08); temp_r31->unk_08 = -1; } if (temp_r31->unk_24 > 0) { fn_1_4C3C(7); return; } fn_1_4C3C(10); } } void fn_1_53B8(void) { s32 i; unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_04 == 0) { fn_1_1DB0(&temp_r31->unk_28, &temp_r31->unk_34, &temp_r31->unk_40, 60, 4); temp_r31->unk_04++; for (i = 0; i < 4; i++) { if ((fn_1_508(i) == 0) && (fn_1_28B8(i) >= 100)) { GWGameStat.present[56] = 1; } } } if (temp_r31->unk_04 == 40) { fn_1_404(); for (i = 0; i < temp_r31->unk_24; i++) { fn_1_2770(temp_r31->unk_1C[i]); fn_1_568(temp_r31->unk_1C[i], 2, 60); } } if (temp_r31->unk_04 == 70) { for (i = 0; i < temp_r31->unk_24; i++) { if (!(fn_1_508(temp_r31->unk_1C[i])) && (lbl_1_bss_3978 < fn_1_28D4())) { fn_1_4C3C(8); return; } } fn_1_4C3C(9); } else { temp_r31->unk_04++; } } void fn_1_5574(void) { unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_04 == 0) { GWMGRecordSet(1, fn_1_28D4()); temp_r31->unk_06 = MGSeqRecordCreate(fn_1_28D4()); fn_1_5F40(1); temp_r31->unk_04++; return; } if (MGSeqStatGet(temp_r31->unk_06) == 0) { fn_1_4C3C(9); } } void fn_1_5630(void) { unkDominationData5* temp_r31; s32 i; temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_04 == 0) { for (i = 0; i < 4; i++) { if (fn_1_53C(i) == 0) { return; } } if (temp_r31->unk_24 == 0) { temp_r31->unk_06 = MGSeqDrawCreate(); HuAudSStreamPlay(4); } else { temp_r31->unk_06 = MGSeqWinCreate(fn_1_4C0(temp_r31->unk_1C[0]), fn_1_4C0(temp_r31->unk_1C[1]), fn_1_4C0(temp_r31->unk_1C[2]), fn_1_4C0(temp_r31->unk_1C[3])); for (i = 0; i < ARRAY_COUNT(temp_r31->unk_1C); i++) { if (temp_r31->unk_1C[i] != -1) { fn_1_3C4(temp_r31->unk_1C[i]); GWPlayerCoinWinAdd(temp_r31->unk_1C[i], 10); } } HuAudSStreamPlay(1); } } if (temp_r31->unk_04++ >= 210) { MGSeqKill(temp_r31->unk_06); temp_r31->unk_06 = -1; fn_1_4C3C(12); } } s16 fn_1_5804(void) { f32 var_f31; f32 var_f30; s16 temp_r28; s16 temp_r3; s16 var_r29; s32 i; s32 var_r27; s32 var_r26; s32 var_r30; unkDominationData5* temp_r31; var_r27 = 0; var_r26 = 0; temp_r31 = lbl_1_bss_397C->data; var_r29 = 0; for (i = 0; i < 4; i++) { temp_r28 = fn_1_28B8(i); if (temp_r28 > var_r29) { var_r29 = temp_r28; } } for (i = 0; i < 4; i++) { temp_r28 = fn_1_28B8(i); if (var_r29 == temp_r28) { if (var_r29 > 0) { temp_r31->unk_1C[temp_r31->unk_24++] = i; fn_1_388(i, 1); } if (var_r27 == 0) { var_r27 = 1; var_f31 = 400.0f * i; } else { var_r26 = 1; var_f30 = 400.0f * i; } } else { fn_1_388(i, 2); } } if (var_r26 == 0) { var_f30 = var_f31; } temp_r31->unk_28.x = (600.0f - (0.5f * (var_f30 + var_f31))); temp_r31->unk_28.y = 250.0f; temp_r31->unk_28.z = (200.0f * ((s16) var_r29 + 2)); temp_r31->unk_34.x = -42.0f; temp_r31->unk_34.y = -720.0f; temp_r31->unk_34.z = 0.0f; temp_r31->unk_40 = lbl_1_data_2DC[(s32) ((var_f30 - var_f31) / 400.0f)]; return var_r29; } void fn_1_5A80(void) { s32 sp20; s32 sp1C; Vec sp18 = {0.0f, 0.0f, -300.0f}; Vec spC = {-40.0f, -720.0f, 0.0f}; f32 sp8; s16 temp_r0; s16 temp_r3; unkDominationData5* temp_r31; sp8 = 1420.0f; temp_r31 = lbl_1_bss_397C->data; switch (temp_r31->unk_04++) { case 0: MGSeqKill(temp_r31->unk_08); temp_r31->unk_08 = -1; fn_1_1DB0(&sp18, &spC, &sp8, 0x78, 4); return; case 10: fn_1_5F40(0); fn_1_28C(); return; case 120: fn_1_404(); fn_1_4C3C(9); return; /* fallthrough */ case 0x3C: break; } } void fn_1_5BB0(void) { unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; if (temp_r31->unk_04 == 0) { temp_r31->unk_06 = MGSeqDrawCreate(); temp_r31->unk_04++; } if (MGSeqStatGet(temp_r31->unk_06) == 0) { MGSeqKill(temp_r31->unk_06); temp_r31->unk_06 = -1; fn_1_4C3C(12); } }