marioparty4/src/REL/m407dll/effect.c

195 lines
5 KiB
C

#include "game/process.h"
#include "game/object.h"
#include "game/hsfmotion.h"
#include "game/hsfdraw.h"
#include "REL/m407dll.h"
typedef struct unkDominationData4 {
/* 0x00 */ u32 unk_00;
/* 0x04 */ u32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ s32 unk_0C;
/* 0x10 */ f32 unk_10;
/* 0x14 */ f32 unk_14;
/* 0x18 */ f32 unk_18;
/* 0x1C */ s32 unk_1C;
} unkDominationData4; //size of 0x20
//function signatures
void fn_1_4858(omObjData* arg0);
void fn_1_485C(omObjData* arg0);
void fn_1_46EC(omObjData* arg0);
void fn_1_465C(omObjData* arg0, s32 arg1);
void fn_1_4808(omObjData* arg0);
//bss
Process* lbl_1_bss_3970;
omObjData* lbl_1_bss_37E0[100];
//data
s32 lbl_1_data_288[] = {
DATA_MAKE_NUM(DATADIR_M407, 0x15),
DATA_MAKE_NUM(DATADIR_M407, 0x16),
DATA_MAKE_NUM(DATADIR_M407, 0x17),
DATA_MAKE_NUM(DATADIR_M407, 0x18),
DATA_MAKE_NUM(DATADIR_M407, 0x19)
};
ObjFuncs lbl_1_data_29C[] = {
fn_1_4858,
fn_1_485C,
};
void fn_1_41CC(Process* arg0) {
Process* sp8;
u32 i;
u32 temp_r30;
lbl_1_bss_3970 = arg0;
temp_r30 = 0;
for (i = 0; i < 40; i++) {
lbl_1_bss_37E0[i] = omAddObjEx(lbl_1_bss_3970, 0x800, 1, 0, 5, fn_1_46EC);
lbl_1_bss_37E0[i]->work[0] = i;
lbl_1_bss_37E0[i]->work[1] = 0;
}
temp_r30 += i;
for (i = 0; i < 4; i++) {
lbl_1_bss_37E0[temp_r30 + i] = omAddObjEx(lbl_1_bss_3970, 0x800, 1, 0, 5, fn_1_46EC);
lbl_1_bss_37E0[temp_r30 + i]->work[0] = temp_r30 + i;
lbl_1_bss_37E0[temp_r30 + i]->work[1] = 1;
}
temp_r30 += i;
for (i = 0; i < 30; i++) {
lbl_1_bss_37E0[temp_r30 + i] = omAddObjEx(lbl_1_bss_3970, 0x800, 1, 0, 5, fn_1_46EC);
lbl_1_bss_37E0[temp_r30 + i]->work[0] = temp_r30 + i;
lbl_1_bss_37E0[temp_r30 + i]->work[1] = 2;
}
temp_r30 += i;
for (i = 0; i < 4; i++) {
lbl_1_bss_37E0[temp_r30 + i] = omAddObjEx(lbl_1_bss_3970, 0x800, 1, 0, 5, fn_1_46EC);
lbl_1_bss_37E0[temp_r30 + i]->work[0] = temp_r30 + i;
lbl_1_bss_37E0[temp_r30 + i]->work[1] = 3;
}
temp_r30 += i;
for (i = 0; i < 22; i++) {
lbl_1_bss_37E0[temp_r30 + i] = omAddObjEx(lbl_1_bss_3970, 0x800, 1, 0, 5, fn_1_46EC);
lbl_1_bss_37E0[temp_r30 + i]->work[0] = temp_r30 + i;
lbl_1_bss_37E0[temp_r30 + i]->work[1] = 4;
}
}
void fn_1_44F4(void) {
u32 i;
for (i = 0; i < ARRAY_COUNT(lbl_1_bss_37E0); i++) {
fn_1_4808(lbl_1_bss_37E0[i]);
}
}
void fn_1_4544(s32 arg0, s32 arg1, f32 arg2, f32 arg3, f32 arg4) {
omObjData* temp_r29;
unkDominationData4* temp_r31;
u32 i;
if ((arg4 < (Center.z - 2000.0f)) || (arg4 > (2000.0f + Center.z))) {
return;
}
for (i = 0; i < ARRAY_COUNT(lbl_1_bss_37E0); i++) {
temp_r29 = lbl_1_bss_37E0[i];
temp_r31 = temp_r29->data;
if ((temp_r31->unk_08 == arg0) && (temp_r31->unk_0C == 0)) {
temp_r31->unk_04 = arg1;
temp_r31->unk_10 = arg2;
temp_r31->unk_14 = arg3;
temp_r31->unk_18 = arg4;
fn_1_465C(temp_r29, 1);
return;
}
}
}
void fn_1_465C(omObjData* arg0, s32 arg1) {
unkDominationData4* temp_r31;
temp_r31 = arg0->data;
temp_r31->unk_0C = arg1;
temp_r31->unk_1C = 0;
}
void fn_1_4680(omObjData* arg0) {
unkDominationData4* temp_r31;
temp_r31 = arg0->data;
lbl_1_data_29C[temp_r31->unk_0C](arg0);
omSetTra(arg0, temp_r31->unk_10, temp_r31->unk_14, temp_r31->unk_18);
}
void fn_1_46EC(omObjData* arg0) {
unkDominationData4* temp_r30;
arg0->func = fn_1_4680;
arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData4), MEMORY_DEFAULT_NUM);
temp_r30 = arg0->data;
temp_r30->unk_00 = arg0->work[0];
temp_r30->unk_08 = arg0->work[1];
temp_r30->unk_1C = 0;
arg0->model[0] = Hu3DModelCreateFile(lbl_1_data_288[temp_r30->unk_08]);
Hu3DModelAttrSet(arg0->model[0], 0x4000);
Hu3DModelAttrSet(arg0->model[0], 0x40000002);
Hu3DModelAttrSet(arg0->model[0], 1);
temp_r30->unk_10 = 0.0f;
temp_r30->unk_14 = 0.0f;
temp_r30->unk_18 = 0.0f;
fn_1_465C(arg0, 0);
}
void fn_1_4808(omObjData* arg0) {
unkDominationData4* sp8;
sp8 = arg0->data;
Hu3DModelKill(arg0->model[0]);
if (arg0->data) {
HuMemDirectFree(arg0->data);
}
}
void fn_1_4858(omObjData* arg0) {
}
void fn_1_485C(omObjData* arg0) {
unkDominationData4* temp_r30;
temp_r30 = arg0->data;
if (temp_r30->unk_04 != 0) {
temp_r30->unk_04--;
}
if (temp_r30->unk_1C == 0) {
Hu3DMotionTimeSet(*arg0->model, 0.0f);
Hu3DModelAttrReset(*arg0->model, 1);
Hu3DModelAttrReset(*arg0->model, 0x40000002);
Hu3DModelAttrSet(*arg0->model, 0x40000001);
temp_r30->unk_1C++;
} else if (temp_r30->unk_1C == 1) {
Hu3DModelAttrReset(arg0->model[0], 0x40000001);
temp_r30->unk_1C++;
}
if (Hu3DMotionEndCheck(*arg0->model) != 0) {
Hu3DModelAttrSet(*arg0->model, 1);
fn_1_465C(arg0, 0);
}
}