marioparty4/src/REL/present/init.c
2024-05-15 19:00:03 -07:00

176 lines
4.3 KiB
C

#include "game/audio.h"
#include "game/esprite.h"
#include "game/objsub.h"
#include "game/pad.h"
#include "game/process.h"
#include "game/wipe.h"
#include "rel_sqrt_consts.h"
#include "REL/present.h"
omObjData *lbl_1_bss_18;
omObjData *lbl_1_bss_14;
omObjData *lbl_1_bss_10;
omObjData *lbl_1_bss_C;
omObjData *lbl_1_bss_8;
Process *lbl_1_bss_4;
omObjData *lbl_1_bss_0;
void fn_1_254(void);
void fn_1_45C(void);
void fn_1_5EC(omObjData *object);
void ModuleProlog(void)
{
lbl_1_bss_4 = omInitObjMan(150, 8192);
omGameSysInit(lbl_1_bss_4);
HuWinInit(1);
lbl_1_bss_0 = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 0, fn_1_5EC);
lbl_1_bss_0->unk10 = 0;
lbl_1_bss_18 = fn_1_39A8();
}
void fn_1_144(s16 arg0, s32 arg1, s32 arg2)
{
Process *var_r30;
UnkPresentStruct6 *var_r31;
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct6), MEMORY_DEFAULT_NUM);
var_r31->unk_00 = arg0;
var_r31->unk_08 = 1.0f / arg2;
if (arg1) {
var_r31->unk_08 = var_r31->unk_08;
var_r31->unk_04 = 0.0f;
} else {
var_r31->unk_08 = -var_r31->unk_08;
var_r31->unk_04 = 1.0f;
}
espDispOn(var_r31->unk_00);
espTPLvlSet(var_r31->unk_00, var_r31->unk_04);
var_r30 = HuPrcChildCreate(fn_1_254, 100, 5376, 0, HuPrcCurrentGet());
var_r30->user_data = var_r31;
}
void fn_1_254(void)
{
UnkPresentStruct6 *var_r31;
var_r31 = HuPrcCurrentGet()->user_data;
while (TRUE) {
var_r31->unk_04 = var_r31->unk_04 + var_r31->unk_08;
if (var_r31->unk_04 > 1.0f) {
var_r31->unk_04 = 1.0f;
break;
} else if (var_r31->unk_04 < 0.0f) {
var_r31->unk_04 = 0.0f;
break;
} else {
espTPLvlSet(var_r31->unk_00, var_r31->unk_04);
HuPrcVSleep();
}
}
espTPLvlSet(var_r31->unk_00, var_r31->unk_04);
if (var_r31->unk_08 < 0.0f) {
espDispOff(var_r31->unk_00);
}
HuMemDirectFree(var_r31);
HuPrcEnd();
}
void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2)
{
Process *var_r30;
UnkPresentStruct6Weird *var_r31; // TODO correct type? why are only 12 bytes allocated?
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 12, MEMORY_DEFAULT_NUM);
var_r31->unk_00 = arg0;
var_r31->unk_0C = 1.0f / arg2;
var_r31->unk_04 = arg8;
if (arg1) {
var_r31->unk_0C = var_r31->unk_0C;
var_r31->unk_08 = 0.0f;
} else {
var_r31->unk_0C = -var_r31->unk_0C;
var_r31->unk_08 = 1.0f;
}
Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04);
Hu3DModelAttrReset(var_r31->unk_00, 1);
var_r30 = HuPrcChildCreate(fn_1_45C, 100, 5376, 0, HuPrcCurrentGet());
var_r30->user_data = var_r31;
}
void fn_1_45C(void)
{
UnkPresentStruct6Weird *var_r31; // TODO correct type? how is 0C possible?
var_r31 = HuPrcCurrentGet()->user_data;
while (TRUE) {
var_r31->unk_08 = var_r31->unk_08 + var_r31->unk_0C;
if (var_r31->unk_08 > 1.0f) {
var_r31->unk_08 = 1.0f;
break;
} else if (var_r31->unk_08 < 0.0f) {
var_r31->unk_08 = 0.0f;
break;
} else {
Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04);
HuPrcVSleep();
}
}
Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04);
if (var_r31->unk_0C < 0.0f) {
Hu3DModelAttrSet(var_r31->unk_00, 1);
}
HuMemDirectFree(var_r31);
HuPrcEnd();
}
u32 fn_1_550(u16 arg0)
{
u32 var_r31;
var_r31 = HuPadBtnDown[0] & arg0;
return var_r31 != 0;
}
u32 fn_1_584(u16 arg0)
{
u32 var_r31;
var_r31 = HuPadDStkRep[0] & arg0;
return var_r31 != 0;
}
u32 fn_1_5B8(u16 arg0)
{
u32 var_r31;
var_r31 = HuPadDStk[0] & arg0;
return var_r31 != 0;
}
void fn_1_5EC(omObjData *object)
{
switch (object->unk10) {
case 0:
object->unk10 = 1;
case 1:
if (!omSysExitReq) {
break;
}
object->unk10 = 2;
case 2:
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
HuAudFadeOut(1000);
object->unk10 = 3;
break;
case 3:
if (!WipeStatGet()) {
fn_1_3B18(lbl_1_bss_18);
omOvlReturnEx(1, 1);
}
break;
default:
break;
}
}