match and link m407/effect.c

This commit is contained in:
Rainchus 2024-04-04 14:57:43 -05:00
parent dd746343cb
commit fd0dbb1e57
4 changed files with 220 additions and 7 deletions

View file

@ -839,7 +839,7 @@ config.libs = [
Object(Matching, "REL/m407dll/camera.c"),
Object(NonMatching, "REL/m407dll/whomp.c"),
Object(Matching, "REL/m407dll/whomp_score.c"),
Object(NonMatching, "REL/m407dll/effect.c"),
Object(Matching, "REL/m407dll/effect.c"),
Object(NonMatching, "REL/m407dll/main.c"),
Object(NonMatching, "REL/m407dll/score.c"),
}

209
src/REL/m407dll/effect.c Normal file
View file

@ -0,0 +1,209 @@
#include "src/REL/m407dll/m407dll.h"
#include "game/process.h"
#include "game/object.h"
#include "game/hsfmotion.h"
#include "game/hsfdraw.h"
//bss
s32 bssPad3;
Process* lbl_1_bss_3970;
omObjData* lbl_1_bss_37E0[100];
//data
s32 lbl_1_data_288[] = {
0x00260015,
0x00260016,
0x00260017,
0x00260018,
0x00260019
};
//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);
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, 1U, 0U, 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, 1U, 0U, 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, 1U, 0U, 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, 1U, 0U, 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, 1U, 0U, 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]);
}
}
typedef struct unkDominationData4 {
u32 unk_00;
u32 unk_04;
s32 unk_08;
s32 unk_0C;
f32 unk_10;
f32 unk_14;
f32 unk_18;
s32 unk_1C;
} unkDominationData4;
void fn_1_4544(s32 arg0, s32 arg1, f32 arg2, f32 arg3, f32 arg4) {
f32 sp14;
f32 sp10;
s32 spC;
s32 sp8;
omObjData* temp_r29;
u32 var_r30;
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_r29;
unkDominationData4* temp_r30;
arg0->func = fn_1_4680;
arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x20, 0x10000000);
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 = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_288[temp_r30->unk_08], 0x10000000, HEAP_DATA));
Hu3DModelAttrSet(*arg0->model, 0x4000U);
Hu3DModelAttrSet(*arg0->model, 0x40000002U);
Hu3DModelAttrSet(*arg0->model, 1U);
temp_r30->unk_10 = (f32) 0.0f;
temp_r30->unk_14 = (f32) 0.0f;
temp_r30->unk_18 = (f32) 0.0f;
temp_r29 = arg0->data;
temp_r29->unk_0C = 0;
temp_r29->unk_1C = 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_r29;
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, 1U);
temp_r29 = arg0->data;
temp_r29->unk_0C = 0;
temp_r29->unk_1C = 0;
}
}
f32 pad3[1] = {0.0f};

View file

@ -0,0 +1,5 @@
#include "game/object.h"
#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0]))
typedef void (*ObjFuncs)(omObjData*);

View file

@ -1,3 +1,4 @@
#include "src/REL/m407dll/m407dll.h"
#include "game/process.h"
#include "game/object.h"
#include "game/gamework_data.h"
@ -15,8 +16,6 @@ s32 bssPad;
Process* lbl_1_bss_37D8;
omObjData* lbl_1_bss_37C8[4];
typedef void (*ObjFuncs)(omObjData*);
ObjFuncs lbl_1_data_278[] = {
fn_1_3FF0,
fn_1_3FF4,
@ -37,7 +36,7 @@ void fn_1_3AC8(Process* arg0) {
lbl_1_bss_37D8 = arg0;
for (i = 0; i < 4; i++) {
for (i = 0; i < ARRAY_COUNT(lbl_1_bss_37C8); i++) {
lbl_1_bss_37C8[i] = omAddObjEx(lbl_1_bss_37D8, 0x500, 0U, 0U, 4, fn_1_3E34);
lbl_1_bss_37C8[i]->work[0] = i;
}
@ -47,7 +46,7 @@ void fn_1_3B68(void) {
s32 temp_r4;
u32 i;
for (i = 0; i < 4; i++) {
for (i = 0; i < ARRAY_COUNT(lbl_1_bss_37C8); i++) {
fn_1_3F7C(lbl_1_bss_37C8[i]);
}
}
@ -59,7 +58,7 @@ void fn_1_3BB8(s16 arg0, f32 arg8, f32 arg9) {
u32 i;
s16 temp;;
for (i = 0; i < 4; i++) {
for (i = 0; i < ARRAY_COUNT(lbl_1_bss_37C8); i++) {
obj = lbl_1_bss_37C8[i];
temp_r31 = OM_GET_DATA_PTR(obj, unkDominationData3);
if (temp_r31->unk_04 == 0) {
@ -132,7 +131,7 @@ void fn_1_3F7C(omObjData* arg0) {
temp_r29 = arg0->data;
for (i = 0; i < 4; i++) {
for (i = 0; i < ARRAY_COUNT(temp_r29->unk_18); i++) {
espKill(temp_r29->unk_18[i]);
}