marioparty4/src/REL/m407dll/main.c
2024-04-22 15:19:47 -05:00

511 lines
12 KiB
C

#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);
}
}