marioparty4/src/REL/m461Dll/main.c
2024-08-31 08:15:24 -05:00

480 lines
No EOL
12 KiB
C

#include "REL/executor.h"
#include "game/chrman.h"
#include "game/frand.h"
#include "game/minigame_seq.h"
#include "game/object.h"
#include "game/objsub.h"
#include "game/wipe.h"
#include "game/gamework_data.h"
#include "game/mapspace.h"
#include "game/pad.h"
#include "game/printfunc.h"
#include "game/hsfanim.h"
#include "game/hsfdraw.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/esprite.h"
#include "game/sprite.h"
#include "ext_math.h"
#include "rel_sqrt_consts.h"
#undef ABS
#define ABS(x) ((0 > (x)) ? -(x) : (x))
typedef struct unk_bss_358_struct {
/* 0x00 */ u16 unk00;
/* 0x02 */ s16 unk02;
/* 0x04 */ struct unk_bss_358_struct *unk04;
/* 0x08 */ struct unk_bss_358_struct *unk08;
} UnkBss254Struct; // Size 0xC
typedef struct unk_bss_340_struct {
/* 0x00 */ HsfanimStruct00 *unk00;
/* 0x04 */ s32 *unk04;
/* 0x08 */ s32 unk08;
/* 0x0C */ s32 unk0C;
/* 0x10 */ struct unk_bss_340_struct *unk10;
/* 0x14 */ struct unk_bss_340_struct *unk14;
} UnkBss23CStruct; // Size 0x18
typedef struct {
/* 0x00 */ u32 unk00;
/* 0x04 */ s16 unk04;
} UnkBssACStruct; // Size 8
UnkBss254Struct lbl_1_bss_254;
UnkBss23CStruct lbl_1_bss_23C;
Process *lbl_1_bss_238;
Vec lbl_1_bss_22C;
Vec lbl_1_bss_220;
Vec lbl_1_bss_214;
Vec lbl_1_bss_208;
u32 lbl_1_bss_204;
s32 lbl_1_bss_200;
u32 lbl_1_bss_1FC;
s16 lbl_1_bss_1FA;
s16 lbl_1_bss_1F8;
s32 lbl_1_bss_1F4;
s32 lbl_1_bss_1F0;
float lbl_1_bss_1EC;
s32 lbl_1_bss_1AC[16];
UnkBssACStruct lbl_1_bss_AC[32];
void fn_1_0(void)
{
lbl_1_bss_254.unk04 = NULL;
lbl_1_bss_254.unk08 = NULL;
}
void fn_1_24(u16 arg0, s16 arg1)
{
UnkBss254Struct *temp_r31;
UnkBss254Struct *temp_r30;
UnkBss254Struct *temp_r29;
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r31), MEMORY_DEFAULT_NUM);
temp_r31->unk00 = arg0;
temp_r31->unk02 = arg1;
temp_r30 = &lbl_1_bss_254;
temp_r29 = temp_r30->unk08;
temp_r30->unk08 = temp_r31;
if (NULL != temp_r29) {
temp_r29->unk04 = temp_r31;
}
temp_r31->unk04 = temp_r30;
temp_r31->unk08 = temp_r29;
}
s16 fn_1_AC(s16 arg0)
{
UnkBss254Struct *var_r31;
UnkBss254Struct *temp_r29;
UnkBss254Struct *temp_r30;
s16 temp_r28;
var_r31 = lbl_1_bss_254.unk08;
while (NULL != var_r31) {
if (arg0 == var_r31->unk00) {
temp_r28 = var_r31->unk02;
temp_r29 = var_r31->unk04;
temp_r30 = var_r31->unk08;
temp_r29->unk08 = temp_r30;
if (NULL != temp_r30) {
temp_r30->unk04 = temp_r29;
}
HuMemDirectFree(var_r31);
return temp_r28;
}
var_r31 = var_r31->unk08;
}
return -1;
}
void fn_1_150(void)
{
lbl_1_bss_23C.unk10 = NULL;
lbl_1_bss_23C.unk14 = NULL;
}
void fn_1_174(s16 arg0, HsfanimStruct00 *arg1, s32 arg2, s32 arg3, s32 arg4, Vec *arg5, u8 arg6)
{
UnkBss23CStruct *temp_r27;
UnkBss23CStruct *var_r31;
UnkBss23CStruct *temp_r28;
s32 i;
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*var_r31), MEMORY_DEFAULT_NUM);
var_r31->unk00 = arg1;
var_r31->unk08 = arg3;
var_r31->unk0C = arg4;
var_r31->unk04 = HuMemDirectMallocNum(HEAP_SYSTEM, arg4 * sizeof(*var_r31->unk04), MEMORY_DEFAULT_NUM);
for (i = 0; i < arg4; i++, arg5++) {
var_r31->unk04[i] = Hu3DParManLink(arg0, arg1);
if (var_r31->unk04[i] >= 0) {
Hu3DParManAttrReset(var_r31->unk04[i], 1);
Hu3DParManPosSet(var_r31->unk04[i], arg5->x, arg5->y, arg5->z);
Hu3DParticleBlendModeSet(Hu3DParManModelIDGet(var_r31->unk04[i]), arg6);
Hu3DModelLayerSet(Hu3DParManModelIDGet(var_r31->unk04[i]), arg2);
}
}
temp_r28 = &lbl_1_bss_23C;
temp_r27 = temp_r28->unk14;
temp_r28->unk14 = var_r31;
if (NULL != temp_r27) {
temp_r27->unk10 = var_r31;
}
var_r31->unk10 = temp_r28;
var_r31->unk14 = temp_r27;
}
void fn_1_2D8(void)
{
UnkBss23CStruct *var_r31;
UnkBss23CStruct *temp_r28;
UnkBss23CStruct *temp_r29;
s32 i;
var_r31 = lbl_1_bss_23C.unk14;
while (NULL != var_r31) {
var_r31->unk08--;
if (var_r31->unk08 == 0) {
for (i = 0; i < var_r31->unk0C; i++) {
if (var_r31->unk04[i] >= 0) {
Hu3DParManAttrSet(var_r31->unk04[i], 1);
}
}
}
temp_r28 = var_r31->unk10;
temp_r29 = var_r31->unk14;
if (-var_r31->unk00->unk00 > var_r31->unk08) {
for (i = 0; i < var_r31->unk0C; i++) {
if (var_r31->unk04[i] >= 0) {
Hu3DParManKill(var_r31->unk04[i]);
}
}
temp_r28->unk14 = temp_r29;
if (NULL != temp_r29) {
temp_r29->unk10 = temp_r28;
}
HuMemDirectFree(var_r31->unk04);
HuMemDirectFree(var_r31);
}
var_r31 = temp_r29;
}
}
void fn_1_414(void)
{
s32 i;
for (i = 0; i < 32; i++) {
lbl_1_bss_AC[i].unk00 = 0;
lbl_1_bss_AC[i].unk04 = -1;
}
}
s16 fn_1_46C(s32 arg0)
{
s32 i;
for (i = 0; i < 32; i++) {
if (arg0 == lbl_1_bss_AC[i].unk00) {
return Hu3DModelLink(lbl_1_bss_AC[i].unk04);
}
}
for (i = 0; i < 32; i++) {
if (lbl_1_bss_AC[i].unk00 == 0) {
lbl_1_bss_AC[i].unk00 = arg0;
lbl_1_bss_AC[i].unk04 = Hu3DModelCreateFile(arg0);
return lbl_1_bss_AC[i].unk04;
}
}
return Hu3DModelCreateFile(arg0);
}
void fn_1_580(s32 *arg0, s32 arg1, s32 arg2)
{
s32 var_r30;
espBankSet(arg0[arg1 + 1], 10);
espBankSet(arg0[arg1 + 4], 11);
if (36000 <= arg2) {
arg2 = 35999;
}
var_r30 = arg2 / 3600;
arg2 -= var_r30 * 3600;
if (var_r30 > 9) {
var_r30 = 9;
}
espBankSet(arg0[arg1], var_r30);
var_r30 = arg2 / 60;
arg2 -= var_r30 * 60;
espBankSet(arg0[arg1 + 2], var_r30 / 10);
espBankSet(arg0[arg1 + 3], var_r30 % 10);
var_r30 = 101.5f * arg2 / 60.0f;
espBankSet(arg0[arg1 + 5], var_r30 / 10);
espBankSet(arg0[arg1 + 6], var_r30 % 10);
}
void fn_1_798(s32 arg0)
{
lbl_1_bss_1EC = 0.0f;
lbl_1_bss_1FC = lbl_1_bss_200;
GWMGRecordSet(arg0, lbl_1_bss_1FC);
fn_1_580(lbl_1_bss_1AC, 7, lbl_1_bss_200);
}
void fn_1_9EC(void)
{
s32 i;
for (i = 0; i < 16; i++) {
espDispOn(lbl_1_bss_1AC[i]);
}
}
void fn_1_A40(void)
{
float temp_f31;
s32 i;
if (0.0f <= lbl_1_bss_1EC) {
lbl_1_bss_1EC += 16.0f;
temp_f31 = 1.0 + 0.2f * sind(lbl_1_bss_1EC);
for (i = 7; i <= 14; i++) {
espScaleSet(lbl_1_bss_1AC[i], temp_f31, temp_f31);
}
}
}
void fn_1_B4C(float arg0, s32 arg1)
{
float temp_f30;
float temp_f31;
s32 i;
temp_f31 = 288.0f;
temp_f30 = arg0;
lbl_1_bss_1AC[15] = espEntry(arg1, 0, 0);
espTPLvlSet(lbl_1_bss_1AC[15], 0.5f);
espColorSet(lbl_1_bss_1AC[15], 0, 0, 0);
espPosSet(lbl_1_bss_1AC[15], temp_f31, temp_f30);
temp_f31 = 248.0f;
temp_f30 = arg0 - 8.0f;
lbl_1_bss_1AC[14] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 55), 0, 0);
espPosSet(lbl_1_bss_1AC[14], temp_f31 - 18.0f, temp_f30);
for (i = 7; i <= 13; i++) {
lbl_1_bss_1AC[i] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 48), 0, 0);
espPosSet(lbl_1_bss_1AC[i], temp_f31, temp_f30);
temp_f31 += 16.0f;
}
fn_1_580(lbl_1_bss_1AC, 7, lbl_1_bss_1FC);
temp_f31 = 248.0f;
temp_f30 = arg0 + 8.0f;
for (i = 0; i <= 6; i++) {
lbl_1_bss_1AC[i] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 49), 0, 0);
espPosSet(lbl_1_bss_1AC[i], temp_f31, temp_f30);
temp_f31 += 16.0f;
}
fn_1_580(lbl_1_bss_1AC, 0, 0);
for (i = 0; i < 16; i++) {
espDrawNoSet(lbl_1_bss_1AC[i], 0);
espDispOff(lbl_1_bss_1AC[i]);
espAttrSet(lbl_1_bss_1AC[i], HUSPR_ATTR_NOANIM);
espPriSet(lbl_1_bss_1AC[i], 0x80 + i);
}
}
void fn_1_11F4(float arg0, Vec *arg1, Vec *arg2, Vec *arg3)
{
float temp_f31;
if (1.0f < arg0) {
arg0 = 1.0f;
}
temp_f31 = sind(90.0f * arg0) * sind(90.0f * arg0);
arg3->x = arg1->x + temp_f31 * (arg2->x - arg1->x);
arg3->y = arg1->y + temp_f31 * (arg2->y - arg1->y);
arg3->z = arg1->z + temp_f31 * (arg2->z - arg1->z);
}
void fn_1_1350(Vec *arg0, Vec *arg1, Vec *arg2)
{
Hu3DCameraPosSetV(1, arg0, arg1, arg2);
lbl_1_bss_22C = *arg0;
lbl_1_bss_214 = *arg2;
}
s32 fn_1_13DC(float arg0, Vec *arg1)
{
Vec sp18;
Vec spC;
fn_1_11F4(arg0, &lbl_1_bss_22C, &lbl_1_bss_220, &sp18);
fn_1_11F4(arg0, &lbl_1_bss_214, &lbl_1_bss_208, &spC);
Hu3DCameraPosSetV(1, &sp18, arg1, &spC);
if (1.0f <= arg0) {
return 1;
}
else {
lbl_1_bss_1F0 = 1;
return 0;
}
}
void fn_1_1710(float arg0, Vec *arg1)
{
Vec sp18;
Vec spC;
fn_1_11F4(arg0, &lbl_1_bss_22C, &lbl_1_bss_220, &sp18);
fn_1_11F4(arg0, &lbl_1_bss_214, &lbl_1_bss_208, &spC);
fn_1_1350(&sp18, arg1, &spC);
lbl_1_bss_1F0 = 1;
}
void fn_1_1A60(Vec *arg0, s16 arg1, Vec *arg2)
{
Mtx sp1C;
Vec sp10;
float temp_f30;
float temp_f29;
float temp_f28;
float temp_f31;
CameraData *temp_r31;
s32 i;
for (i = 0; i < 16; i++) {
if (arg1 & (1 << i)) {
break;
}
}
temp_r31 = &Hu3DCamera[i];
MTXLookAt(sp1C, &temp_r31->pos, &temp_r31->up, &temp_r31->target);
MTXMultVec(sp1C, arg0, &sp10);
temp_f30 = sp10.z * (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2)) * temp_r31->aspect;
temp_f29 = sp10.z * (sind(temp_r31->fov / 2) / cosd(temp_r31->fov / 2));
temp_f28 = 0.9f * temp_r31->viewport_x;
temp_f31 = 0.9f * temp_r31->viewport_w;
arg2->x = temp_f31 / 2 + sp10.x * ((temp_f31 / 2) / -temp_f30) + temp_f28;
arg2->y = temp_r31->viewport_h / 2 + sp10.y * ((temp_r31->viewport_h / 2) / temp_f29) + temp_r31->viewport_y;
arg2->z = 0.0f;
}
void fn_1_1D18(s16 arg0, char *arg1, Vec *arg2)
{
Mtx sp10;
Hu3DModelObjMtxGet(arg0, arg1, sp10);
arg2->x = sp10[0][3];
arg2->y = sp10[1][3];
arg2->z = sp10[2][3];
}
void fn_1_1D70(s16 arg0, char *arg1, Vec *arg2, Mtx arg3)
{
Mtx spC;
ModelData *var_r30;
var_r30 = &Hu3DData[arg0];
Hu3DModelObjMtxGet(arg0, arg1, spC);
PSMTXConcat(var_r30->unk_F0, spC, spC);
if (NULL != arg3) {
PSMTXCopy(spC, arg3);
}
arg2->x = spC[0][3];
arg2->y = spC[1][3];
arg2->z = spC[2][3];
}
float fn_1_1E20(float arg0, float arg1, float arg2)
{
float var_f31;
float var_f30;
var_f31 = fmod(arg1 - arg0, 360.0);
if (0.0f > var_f31) {
var_f31 += 360.0f;
}
if (180.0f < var_f31) {
var_f31 -= 360.0f;
}
var_f30 = fmod(arg0 + var_f31 * arg2, 360.0);
if (0.0f > var_f30) {
var_f30 += 360.0f;
}
return var_f30;
}
void fn_1_1F24(s32 arg0)
{
lbl_1_bss_1F4 = HuAudSeqPlay((s32)arg0);
}
void fn_1_1F58(s32 arg0)
{
if (lbl_1_bss_1F4 >= 0) {
if (arg0 < 0) {
arg0 = 1000;
}
HuAudSeqFadeOut(lbl_1_bss_1F4, arg0);
}
lbl_1_bss_1F4 = -1;
}
void fn_1_1FC4(Vec *arg0, float *arg1, s32 arg2, s32 arg3)
{
Vec sp18;
float var_f28;
s32 var_r30;
sp18.x = 0.0f;
sp18.y = 0.0f;
sp18.z = 0.0f;
sp18.x = arg2 / 4.0f;
sp18.z = -(float)arg3 / 4.0f;
var_r30 = 0;
var_f28 = VECMagXZ(&sp18);
if (0.5f <= var_f28) {
if (10.0f <= var_f28) {
sp18.x /= var_f28;
sp18.z /= var_f28;
var_f28 = 10.0f;
sp18.x = 10.0f * sp18.x;
sp18.z = 10.0f * sp18.z;
}
*arg1 = fn_1_1E20(*arg1, atan2d(sp18.x, sp18.z), 0.4f);
if (8.0f <= var_f28) {
var_r30 = 2;
}
else {
var_r30 = 1;
}
}
VECAdd((Vec *)&arg0, &sp18, (Vec *)&arg0);
}