marioparty4/src/REL/m446Dll/main.c
2024-11-04 15:27:04 +01:00

723 lines
21 KiB
C

#include "REL/m446Dll.h"
#include "rel_sqrt_consts.h"
#include "game/audio.h"
#include "game/frand.h"
#include "game/gamework_data.h"
#include "game/hsfman.h"
#include "game/jmp.h"
#include "game/minigame_seq.h"
#include "game/window.h"
#include "game/wipe.h"
// bss
s32 lbl_1_bss_14;
s32 lbl_1_bss_10;
Process *lbl_1_bss_C;
omObjData *lbl_1_bss_8;
s32 lbl_1_bss_4;
unkStruct *lbl_1_bss_0;
// data
Vec lbl_1_data_0 = { 0.0f, 90.0f, 0.0f };
Vec lbl_1_data_C = { -40.0f, 40.0f, 0.0f };
f32 lbl_1_data_18 = 1260.0f;
Vec lbl_1_data_1C = { 0.0f, 90.0f, 0.0f };
Vec lbl_1_data_28 = { -90.0f, 0.0f, 0.0f };
f32 lbl_1_data_34 = 260.0f;
Vec lbl_1_data_38[2] = { { 0.0f, 100.0f, 120.0f }, { 0.0f, 100.0f, 120.0f } };
Vec lbl_1_data_50[2] = { { -30.0f, 0.0f, 0.0f }, { -30.0f, 0.0f, 0.0f } };
f32 lbl_1_data_68[2] = { 600.0f, 600.0f };
s32 lbl_1_data_70[2][2] = { { 0x46, 0x1A4 }, { 0x1F4, 0x3C } };
void ObjectSetup(void)
{
lbl_1_bss_C = omInitObjMan(5, 0x2000);
omGameSysInit(lbl_1_bss_C);
lbl_1_bss_8 = omAddObjEx(lbl_1_bss_C, 0x3E8, 0x32U, 0x32U, 0, fn_1_13C);
omSetStatBit(lbl_1_bss_8, 0x100U);
lbl_1_bss_4 = 0;
}
void fn_1_13C(omObjData *arg0)
{
switch (lbl_1_bss_4) {
case 0:
HuWinInit(1);
Hu3DLighInit();
frand();
fn_1_38E0();
fn_1_6778();
fn_1_7BF0();
fn_1_2064();
fn_1_480C();
fn_1_3924();
fn_1_72E0();
lbl_1_bss_0 = m446FlowCreate();
lbl_1_bss_4 = 1;
break;
case 1:
fn_1_4B4(lbl_1_bss_0);
fn_1_7C60();
fn_1_487C();
fn_1_3994();
fn_1_7350();
fn_1_20D4();
fn_1_68DC();
if (lbl_1_bss_0->unk0 != 5)
break;
lbl_1_bss_4 = 3;
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
case 2:
break;
case 3:
if (WipeStatGet() == 0) {
lbl_1_bss_4 = 4;
}
break;
case 4:
HuAudFadeOut(0x64);
fn_1_3FC(lbl_1_bss_0);
fn_1_72F8();
fn_1_4824();
fn_1_393C();
fn_1_207C();
fn_1_7C08();
fn_1_68D8();
omOvlReturnEx(1, 1);
break;
}
}
unkStruct *m446FlowCreate(void)
{
s32 var_r30;
unkStruct *temp_r3;
temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x9C, MEMORY_DEFAULT_NUM);
if (temp_r3 == 0) {
OSReport("[!] m446FlowCreate() ERROR...\n");
return NULL;
}
temp_r3->unk4 = -1;
temp_r3->unk6 = -1;
temp_r3->unk1C = 0;
temp_r3->unk0 = 0;
temp_r3->unk10 = 0;
temp_r3->unk98 = NULL;
temp_r3->unk18 = -1;
for (var_r30 = 0; var_r30 < 23; var_r30++) {
temp_r3->unk38[var_r30] = 0;
}
temp_r3->unk24 = m446StageCreate();
temp_r3->unk20 = fn_1_39D0();
lbl_1_bss_10 = 0;
for (var_r30 = 0; var_r30 < 2; var_r30++) {
temp_r3->unk2C[var_r30] = m446PlayerCreate(var_r30, temp_r3->unk20);
if (temp_r3->unk2C[var_r30]->unk68 != 0) {
lbl_1_bss_10 += 1;
}
}
temp_r3->unk28 = fn_1_3064();
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
return temp_r3;
}
void fn_1_3FC(unkStruct *arg0)
{
s32 var_r30;
if (arg0->unk98) {
HuPrcKill(arg0->unk98);
}
if (arg0->unk4 == -1) {
fn_1_183C(arg0);
}
if (arg0->unk6 == -1) {
MGSeqParamSet(arg0->unk6, 2, -1);
}
for (var_r30 = 0; var_r30 < 2; var_r30++) {
fn_1_509C(arg0->unk2C[var_r30]);
}
fn_1_3B4C(arg0->unk20);
fn_1_3180(&arg0->unk28->unk0);
fn_1_83F0(arg0->unk24);
HuMemDirectFree(arg0);
}
m446Func1 lbl_1_data_A0[5] = { fn_1_53C, fn_1_B78, fn_1_CA0, fn_1_C0C, fn_1_958 };
void fn_1_4B4(unkStruct *arg0)
{
if (lbl_1_data_A0[arg0->unk0]) {
lbl_1_data_A0[arg0->unk0](arg0);
}
if (omSysExitReq != 0) {
arg0->unk0 = 5;
}
}
void fn_1_53C(unkStruct *arg0)
{
s32 var_r30;
s32 var_r29;
switch (arg0->unk10) {
case 0:
fn_1_6EA0(&lbl_1_data_0);
fn_1_6EC4(&lbl_1_data_C);
fn_1_6EE8(lbl_1_data_18);
arg0->unk10 = 1;
arg0->unk14 = 0;
HuAudFXPlay(0x773);
break;
case 1:
if (arg0->unk14 == 20) {
fn_1_84AC(arg0->unk24);
}
if (arg0->unk14++ < 0xB4)
break;
arg0->unk18 = HuAudSeqPlay(0x3D);
if (arg0->unk2C[1]->unk64 == 8) {
arg0->unk10 = 2;
}
else {
arg0->unk10 = 4;
}
break;
case 2:
arg0->unk98 = HuPrcChildCreate(fn_1_19D4, 0x64, 0x2000, 0, lbl_1_bss_C);
lbl_1_bss_14 = 1;
arg0->unk10 = 3;
break;
case 3:
if (lbl_1_bss_14 == 0) {
arg0->unk98 = NULL;
arg0->unk10 = 4;
}
break;
case 4:
fn_1_6EF8(&lbl_1_data_1C, &lbl_1_data_28, &lbl_1_data_34, 0xB4);
arg0->unk10 = 5;
break;
case 5:
if (fn_1_708C())
break;
fn_1_860C(arg0->unk24);
for (var_r30 = 0; var_r30 < 2; var_r30++) {
fn_1_637C(arg0->unk2C[var_r30], 1);
}
arg0->unk10 = 6;
break;
case 6:
fn_1_31D8(&arg0->unk28->unk0, &arg0->unk38[0], &arg0->unk94, 1);
arg0->unk10 = 7;
arg0->unk14 = 0;
break;
case 7:
if (arg0->unk14++ < 0x78)
break;
fn_1_34A0(arg0->unk28, &arg0->unk38[0], arg0->unk94, 1);
arg0->unk10 = 8;
arg0->unk14 = 0;
break;
case 8:
if (arg0->unk14++ < 0x78)
break;
for (var_r29 = 0; var_r29 < 2; var_r29++) {
for (var_r30 = 0; var_r30 < 3; var_r30++) {
m446DeckPopCard(&arg0->unk28->unk0, &arg0->unk34);
m446PlayerAppendCard(arg0->unk2C[var_r29], arg0->unk34, 1);
fn_1_2EC0(arg0->unk34, 0);
}
}
HuAudFXPlay(0x767);
arg0->unk10 = 9;
break;
case 9:
if (arg0->unk34->unk70 != 0)
break;
if (arg0->unk34->unk78 != 0)
break;
if (arg0->unk34->unk74 != 0)
break;
if (arg0->unk34->unk4 != 0)
break;
for (var_r29 = 0; var_r29 < 2; var_r29++) {
for (var_r30 = 0; var_r30 < 3; var_r30++) {
fn_1_5648(arg0->unk2C[var_r29], var_r30, &arg0->unk34);
fn_1_272C(arg0->unk34);
}
}
arg0->unk10 = 10;
break;
case 10:
if (arg0->unk34->unk70 != 0)
break;
if (arg0->unk34->unk78 != 0)
break;
if (arg0->unk34->unk74 != 0)
break;
if (arg0->unk34->unk4 != 0)
break;
fn_1_46AC(arg0->unk20);
while (m446DeckPopCard(&arg0->unk28->unk0, &arg0->unk34) != 0) {
fn_1_3BF0(arg0->unk20, arg0->unk34, 1);
}
fn_1_46D0(arg0->unk20);
if (arg0->unk18 != -1) {
HuAudSeqFadeOut(arg0->unk18, 0x7D0);
}
arg0->unk10 = 11;
arg0->unk14 = 0;
break;
case 11:
if (arg0->unk14++ < 0x78)
break;
arg0->unk0 = 1;
arg0->unk10 = 0;
break;
}
}
void fn_1_958(unkStruct *arg0)
{
s32 temp_r3;
s32 temp_r3_2;
s32 temp_r3_3;
s32 var_r30;
switch (arg0->unk10) {
case 0:
for (var_r30 = 0; var_r30 < 2; var_r30++) {
fn_1_637C(arg0->unk2C[var_r30], 0);
}
fn_1_6EF8(&lbl_1_data_38[arg0->unk1C], &lbl_1_data_50[arg0->unk1C], &lbl_1_data_68[arg0->unk1C], 0x4E);
arg0->unk10 = 1;
arg0->unk14 = 0;
break;
case 1:
if (arg0->unk14++ >= 0x1E) {
fn_1_5CEC(arg0->unk2C[0]);
arg0->unk10 = 2;
arg0->unk14 = 0;
}
break;
case 2:
if (arg0->unk14++ >= 0x36) {
if ((arg0->unk2C[0]->unk24 == 0) && (arg0->unk2C[1]->unk24 == 0)) {
fn_1_5C10(arg0->unk2C[0]);
if (arg0->unk2C[1]->unk64 == 8) {
fn_1_5B34(arg0->unk2C[1]);
HuAudSStreamPlay(3);
}
else {
fn_1_5C10(arg0->unk2C[1]);
HuAudSStreamPlay(4);
}
}
else if (arg0->unk2C[0]->unk24 != 0) {
fn_1_5B34(arg0->unk2C[0]);
fn_1_5C10(arg0->unk2C[1]);
HuAudSStreamPlay(1);
}
else if (arg0->unk2C[1]->unk24 != 0) {
fn_1_5B34(arg0->unk2C[1]);
fn_1_5C10(arg0->unk2C[0]);
if (arg0->unk2C[1]->unk64 == 8) {
HuAudSStreamPlay(3);
}
else {
HuAudSStreamPlay(1);
}
}
arg0->unk10 = 3;
arg0->unk14 = 0;
return;
}
break;
case 3:
if (arg0->unk14++ >= 0xD2) {
arg0->unk0 = 5;
}
break;
}
}
void fn_1_B78(unkStruct *arg0)
{
switch (arg0->unk10) {
case 0:
arg0->unk18 = HuAudSeqPlay(0x3F);
fn_1_1874(arg0);
arg0->unk10 = 1;
arg0->unk14 = 0;
break;
case 1:
if (!fn_1_17FC(arg0)) {
fn_1_183C(arg0);
arg0->unk0 = 2;
arg0->unk10 = 0;
}
break;
}
}
void fn_1_C0C(unkStruct *arg0)
{
switch (arg0->unk10) {
case 0:
HuAudSeqFadeOut(arg0->unk18, 0x64);
fn_1_18B0(arg0);
arg0->unk10 = 1;
arg0->unk14 = 0;
break;
case 1:
if (fn_1_17FC(arg0) == 0) {
fn_1_183C(arg0);
arg0->unk0 = 4;
arg0->unk10 = 0;
}
break;
}
}
void fn_1_CA0(unkStruct *arg0)
{
s32 var_r29;
unkStruct8 *var_r30;
var_r30 = arg0->unk2C[arg0->unk1C];
switch (arg0->unk10) {
case 0:
arg0->unk1C = 0;
arg0->unk10 = 1;
break;
case 1:
arg0->unkC = 300;
arg0->unk6 = MGSeqCreate(1, arg0->unkC / 60, -1, -1);
MGSeqPosSet(arg0->unk6, lbl_1_data_70[arg0->unk1C][0], lbl_1_data_70[arg0->unk1C][1]);
arg0->unk10 = 2;
case 2:
if (fn_1_5678(var_r30, &arg0->unk34, 0) == 0) {
if ((--arg0->unkC % 60) == 0) {
MGSeqParamSet(arg0->unk6, 1, arg0->unkC / 60);
}
if (arg0->unkC == 0) {
arg0->unk10 = 3;
arg0->unk14 = 0;
}
}
else {
arg0->unk10 = 4;
}
break;
case 3:
if (arg0->unk14++ >= 60) {
fn_1_5678(var_r30, &arg0->unk34, 1);
arg0->unk10 = 4;
}
break;
case 4:
MGSeqParamSet(arg0->unk6, 2, -1);
arg0->unk6 = -1;
m446PlayerRemoveCard(var_r30, arg0->unk34, 3);
arg0->unk10 = 5;
break;
case 5:
if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) {
fn_1_3BF0(arg0->unk20, arg0->unk34, 4);
arg0->unk10 = 6;
}
break;
case 6:
if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) {
fn_1_2EC0(arg0->unk34, 1);
arg0->unkC = 300;
arg0->unk6 = MGSeqCreate(1, arg0->unkC / 60, -1, -1);
MGSeqPosSet(arg0->unk6, lbl_1_data_70[arg0->unk1C][0], lbl_1_data_70[arg0->unk1C][1]);
fn_1_4000(arg0->unk20, arg0->unk1C == 1 >> 5);
arg0->unk10 = 7;
}
else
break;
case 7:
if (fn_1_4088(arg0->unk20, var_r30->unk64, var_r30->unk66, arg0->unk1C == 1, &arg0->unk34, 0) == 0) {
if ((--arg0->unkC % 60) == 0) {
MGSeqParamSet(arg0->unk6, 1, arg0->unkC / 60);
}
if (arg0->unkC <= 0) {
if (fn_1_4088(arg0->unk20, var_r30->unk64, var_r30->unk66, arg0->unk1C == 1, &arg0->unk34, 2) == 0) {
fn_1_4000(arg0->unk20, arg0->unk1C == 1 >> 5);
arg0->unk10 = 8;
arg0->unk14 = 0;
break;
}
}
else
break;
}
arg0->unk10 = 9;
break;
case 8:
fn_1_4088(arg0->unk20, var_r30->unk64, var_r30->unk66, arg0->unk1C == 1, &arg0->unk34, 1);
if (arg0->unk14++ >= 0x1E) {
fn_1_4088(arg0->unk20, var_r30->unk64, var_r30->unk66, arg0->unk1C == 1, &arg0->unk34, 2);
arg0->unk10 = 9;
}
break;
case 9:
MGSeqParamSet(arg0->unk6, 2, -1);
arg0->unk6 = -1;
fn_1_2EC0(arg0->unk34, 0);
fn_1_3EB4(arg0->unk20, arg0->unk34, 3);
arg0->unk10 = 10;
break;
case 10:
if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) {
if (arg0->unk34->unk0 == 4) {
arg0->unk10 = 13;
}
else {
m446PlayerAppendCard(var_r30, arg0->unk34, 4);
arg0->unk10 = 11;
}
}
break;
case 11:
if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) {
if (var_r30->unk24 != 0) {
arg0->unk10 = 24;
}
else {
arg0->unk10 = 12;
}
}
break;
case 12:
if (fn_1_4720(arg0->unk20, 5) == 0) {
arg0->unk1C = 1;
arg0->unk10 = 25;
break;
}
else if (arg0->unk1C == 0) {
arg0->unk1C = 1;
}
else {
arg0->unk1C = 0;
}
arg0->unk10 = 1;
break;
case 13:
fn_1_64BC(var_r30, 0, 60);
HuAudFXPlay(0x4E);
arg0->unk10 = 14;
case 14:
fn_1_2A94(arg0->unk34);
arg0->unk10 = 15;
break;
case 15:
if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) {
fn_1_3EB4((unkStruct6 *)var_r30, arg0->unk34, 4);
fn_1_2688(arg0->unk34);
for (var_r29 = 0; var_r29 < 3; var_r29++) {
fn_1_5648(var_r30, var_r29, &arg0->unk34);
if (arg0->unk34) {
m446PlayerRemoveCard(var_r30, arg0->unk34, 4);
fn_1_3BF0(arg0->unk20, arg0->unk34, 3);
}
}
arg0->unk10 = 16;
arg0->unk14 = 0;
}
break;
case 16:
if (arg0->unk14++ >= 60) {
for (var_r29 = 0; var_r29 < 21; var_r29++) {
fn_1_3FD0(arg0->unk20, var_r29, &arg0->unk34);
if (arg0->unk34) {
fn_1_2794(arg0->unk34);
fn_1_2EC0(arg0->unk34, 1);
}
}
arg0->unk10 = 17;
arg0->unk14 = 0;
}
break;
case 17:
if (arg0->unk14++ >= 60) {
for (var_r29 = 0; var_r29 < 21; var_r29++) {
fn_1_3FD0(arg0->unk20, var_r29, &arg0->unk34);
if (arg0->unk34) {
fn_1_3EB4(arg0->unk20, arg0->unk34, 4);
m446DeckPushCard(arg0->unk28, arg0->unk34, 2);
}
}
arg0->unk10 = 18;
arg0->unk14 = 0;
}
break;
case 18:
if (arg0->unk14++ >= 60) {
fn_1_31D8((unkStruct2 **)arg0->unk28, &arg0->unk38[0], &arg0->unk94, 1);
arg0->unk10 = 19;
arg0->unk14 = 0;
}
break;
case 19:
if (arg0->unk14++ >= 120) {
fn_1_34A0(arg0->unk28, &arg0->unk38[0], arg0->unk94, 1);
arg0->unk10 = 20;
arg0->unk14 = 0;
}
break;
case 20:
if (arg0->unk14++ >= 120) {
for (var_r29 = 0; var_r29 < 3; var_r29++) {
m446DeckPopCard((unkStruct2 **)arg0->unk28, &arg0->unk34);
m446PlayerAppendCard(var_r30, arg0->unk34, 1);
fn_1_2EC0(arg0->unk34, 0);
}
HuAudFXPlay(0x767);
arg0->unk10 = 21;
}
break;
case 21:
if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) {
for (var_r29 = 0; var_r29 < 3; var_r29++) {
fn_1_5648(var_r30, var_r29, &arg0->unk34);
fn_1_272C(arg0->unk34);
}
arg0->unk10 = 22;
}
break;
case 22:
if (arg0->unk34->unk70 == 0 && arg0->unk34->unk78 == 0 && arg0->unk34->unk74 == 0 && arg0->unk34->unk4 == 0) {
fn_1_46AC(arg0->unk20);
while (m446DeckPopCard((unkStruct2 **)arg0->unk28, &arg0->unk34)) {
fn_1_3BF0(arg0->unk20, arg0->unk34, 1);
}
fn_1_46D0(arg0->unk20);
arg0->unk10 = 23;
arg0->unk14 = 0;
}
break;
case 23:
if (arg0->unk14++ >= 120) {
arg0->unk10 = 12;
}
break;
case 24:
for (var_r29 = 0; var_r29 < 3; var_r29++) {
fn_1_5648(var_r30, var_r29, &arg0->unk34);
if (arg0->unk34) {
fn_1_2D94(arg0->unk34);
}
}
GWPlayerCoinWinAdd(arg0->unk1C, 10);
case 25:
arg0->unk0 = 3;
arg0->unk10 = 0;
break;
}
}
s32 fn_1_17FC(unkStruct *arg0)
{
return MGSeqStatGet(arg0->unk4) != 0;
}
void fn_1_183C(unkStruct *arg0)
{
MGSeqKill(arg0->unk4);
arg0->unk4 = -1;
}
void fn_1_1874(unkStruct *arg0)
{
arg0->unk4 = MGSeqCreate(3, 0);
}
void fn_1_18B0(unkStruct *arg0)
{
arg0->unk4 = MGSeqCreate(3, 1);
}
void fn_1_18EC(s16 arg0, s32 arg1)
{
HuWinComKeyReset();
if (lbl_1_bss_10 == 2) {
HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, arg1);
}
winData[arg0].active_pad = 1;
HuWinMesWait(arg0);
}
s32 fn_1_1970(s16 arg0, s32 arg1, s32 arg2, s32 arg3)
{
if (lbl_1_bss_10 == 2) {
HuPrcSleep(arg3);
return arg2;
}
else {
return HuWinChoiceGet(arg0, arg1);
}
}
static const s32 lbl_1_rodata_18[12] = { MAKE_MESSID(0x18, 0x03), MAKE_MESSID(0x18, 0x04), MAKE_MESSID(0x18, 0x05), MAKE_MESSID(0x18, 0x06),
MAKE_MESSID(0x18, 0x07), MAKE_MESSID(0x18, 0x08), MAKE_MESSID(0x18, 0x09), MAKE_MESSID(0x18, 0x0A), MAKE_MESSID(0x18, 0x0B),
MAKE_MESSID(0x18, 0x0C), MAKE_MESSID(0x18, 0x0D), 0 };
void fn_1_19D4(void)
{
s16 temp_r3;
s16 var_r30;
s32 temp_r0;
s32 var_r29;
u32 temp_r27;
temp_r3 = HuWinExCreateStyled(-10000.0f, 40.0f, 0x138, 0x78, -1, 1);
HuWinExAnimIn(temp_r3);
HuWinBGTPLvlSet(temp_r3, 0.8f);
HuWinMesSpeedSet(temp_r3, 1);
HuWinMesColSet(temp_r3, 0);
HuWinMesSet(temp_r3, MAKE_MESSID(0x18, 0x01));
fn_1_18EC(temp_r3, 0x3C);
if (lbl_1_bss_10 < 2) {
HuWinMesColSet(temp_r3, 0);
HuWinMesSet(temp_r3, MAKE_MESSID(0x18, 0x02));
var_r30 = fn_1_1970(temp_r3, 0, 1, 0x3C);
}
else {
var_r30 = 1;
}
if (var_r30 == 0) {
var_r29 = 0;
while ((temp_r27 = lbl_1_rodata_18[var_r29++]) != 0) {
HuWinMesColSet(temp_r3, 0);
HuWinMesSet(temp_r3, temp_r27);
fn_1_18EC(temp_r3, 0x3C);
}
}
else {
HuWinMesColSet(temp_r3, 0);
HuWinMesSet(temp_r3, MAKE_MESSID(0x18, 0x0D));
fn_1_18EC(temp_r3, 0x3C);
}
HuWinExAnimOut(temp_r3);
HuWinExCleanup(temp_r3);
lbl_1_bss_14 = 0;
HuPrcEnd();
while (1) {
HuPrcVSleep();
}
}