diff --git a/configure.py b/configure.py index e8d7e035..6efda49e 100644 --- a/configure.py +++ b/configure.py @@ -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"), } diff --git a/src/REL/m407dll/effect.c b/src/REL/m407dll/effect.c new file mode 100644 index 00000000..e68ed0bd --- /dev/null +++ b/src/REL/m407dll/effect.c @@ -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}; \ No newline at end of file diff --git a/src/REL/m407dll/m407dll.h b/src/REL/m407dll/m407dll.h new file mode 100644 index 00000000..788ede40 --- /dev/null +++ b/src/REL/m407dll/m407dll.h @@ -0,0 +1,5 @@ +#include "game/object.h" + +#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) + +typedef void (*ObjFuncs)(omObjData*); diff --git a/src/REL/m407dll/whomp_score.c b/src/REL/m407dll/whomp_score.c index ed2eb1ef..7b00cf63 100644 --- a/src/REL/m407dll/whomp_score.c +++ b/src/REL/m407dll/whomp_score.c @@ -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]); }