From 4e2c3b7631cd89365e9686413db267c4648093ee Mon Sep 17 00:00:00 2001 From: Rainchus Date: Sat, 6 Apr 2024 14:00:15 -0500 Subject: [PATCH] match m407dll, some cleanup as well --- config/GMPE01_00/rels/m407dll/symbols.txt | 2 +- configure.py | 2 +- src/REL/m407dll/camera.c | 38 +- src/REL/m407dll/effect.c | 79 ++-- src/REL/m407dll/main.c | 81 ++-- src/REL/m407dll/map.c | 17 +- src/REL/m407dll/player.c | 142 +++---- src/REL/m407dll/score.c | 9 +- src/REL/m407dll/whomp.c | 496 ++++++++++++++++++++++ src/REL/m407dll/whomp_score.c | 25 +- src/game/board/mg_setup.c | 9 +- src/game/code_8003FF68.c | 4 +- 12 files changed, 692 insertions(+), 212 deletions(-) create mode 100644 src/REL/m407dll/whomp.c diff --git a/config/GMPE01_00/rels/m407dll/symbols.txt b/config/GMPE01_00/rels/m407dll/symbols.txt index f78e0ce5..09f20087 100644 --- a/config/GMPE01_00/rels/m407dll/symbols.txt +++ b/config/GMPE01_00/rels/m407dll/symbols.txt @@ -224,7 +224,7 @@ lbl_1_data_218 = .data:0x00000218; // type:object size:0xC lbl_1_data_228 = .data:0x00000228; // type:object size:0x10 data:4byte lbl_1_data_238 = .data:0x00000238; // type:object size:0x20 data:4byte lbl_1_data_258 = .data:0x00000258; // type:object size:0x14 -lbl_1_data_26C = .data:0x0000026C; // type:object size:0xB data:string +lbl_1_data_26C = .data:0x0000026C; // type:object size:0xB scope:local data:string lbl_1_data_278 = .data:0x00000278; // type:object size:0xC lbl_1_data_288 = .data:0x00000288; // type:object size:0x14 lbl_1_data_29C = .data:0x0000029C; // type:object size:0x8 diff --git a/configure.py b/configure.py index 5b67c31a..fde37b83 100644 --- a/configure.py +++ b/configure.py @@ -837,7 +837,7 @@ config.libs = [ Object(Matching, "REL/m407dll/player.c"), Object(Matching, "REL/m407dll/map.c"), Object(Matching, "REL/m407dll/camera.c"), - Object(NonMatching, "REL/m407dll/whomp.c"), + Object(Matching, "REL/m407dll/whomp.c"), Object(Matching, "REL/m407dll/whomp_score.c"), Object(Matching, "REL/m407dll/effect.c"), Object(Matching, "REL/m407dll/main.c"), diff --git a/src/REL/m407dll/camera.c b/src/REL/m407dll/camera.c index 72162e07..11d2998c 100644 --- a/src/REL/m407dll/camera.c +++ b/src/REL/m407dll/camera.c @@ -4,6 +4,21 @@ #define M_PI 3.141592653589793 +typedef struct unkDominationData2 { +/* 0x00 */ s32 unk_00; +/* 0x04 */ s32 unk_04; +/* 0x08 */ Point3d unk_08; +/* 0x14 */ Point3d unk_14; +/* 0x20 */ f32 unk_20; +/* 0x24 */ Point3d unk_24; +/* 0x30 */ Point3d unk_30; +/* 0x3C */ f32 unk_3C; +/* 0x40 */ s32 unk_40; +/* 0x44 */ f32 unk_44; +/* 0x48 */ f32 unk_48; +} unkDominationData2; //sizeof 0x4C + +//function signatures void fn_1_1CAC(f32, f32, f32); void fn_1_1D08(f32, f32, f32); void fn_1_1D64(f32); @@ -11,31 +26,18 @@ void fn_1_2024(omObjData*); double cos(double x); double sin(double x); +//bss Process* lbl_1_bss_34; omObjData* lbl_1_bss_30; -typedef struct unkDominationData2 { - s32 unk_00; - s32 unk_04; - Point3d unk_08; - Point3d unk_14; - f32 unk_20; - Point3d unk_24; - Point3d unk_30; - f32 unk_3C; - s32 unk_40; - f32 unk_44; - f32 unk_48; -} unkDominationData2; - void fn_1_1B1C(Process* arg0) { unkDominationData2* unkData; lbl_1_bss_34 = arg0; Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); Hu3DCameraPerspectiveSet(1, 45.0f, 10.0f, 40000.0f, 1.2f); - lbl_1_bss_30 = omAddObjEx(lbl_1_bss_34, 0x80, 0U, 0U, -1, fn_1_2024); - lbl_1_bss_30->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData2), 0x10000000); + lbl_1_bss_30 = omAddObjEx(lbl_1_bss_34, 0x80, 0, 0, -1, fn_1_2024); + lbl_1_bss_30->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData2), MEMORY_DEFAULT_NUM); unkData = OM_GET_DATA_PTR(lbl_1_bss_30, unkDominationData2); unkData->unk_04 = 0; fn_1_1CAC(0.0f, 0.0f, 0.0f); @@ -151,10 +153,10 @@ void fn_1_2024(omObjData* arg0) { } break; case 2: - var_f31 = (f32) sin((M_PI * (90.0f * temp_r31->unk_44)) / 180.0); + var_f31 = sin((M_PI * (90.0f * temp_r31->unk_44)) / 180.0); break; case 3: - var_f31 = (f32) sin((M_PI * (90.0f * temp_r31->unk_44)) / 180.0); + var_f31 = sin((M_PI * (90.0f * temp_r31->unk_44)) / 180.0); if (temp_r31->unk_48 > 0.5) { temp_r31->unk_00 = 4; } diff --git a/src/REL/m407dll/effect.c b/src/REL/m407dll/effect.c index e29724ac..cb22c723 100644 --- a/src/REL/m407dll/effect.c +++ b/src/REL/m407dll/effect.c @@ -4,6 +4,24 @@ #include "game/hsfmotion.h" #include "game/hsfdraw.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]; @@ -17,13 +35,6 @@ s32 lbl_1_data_288[] = { 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, @@ -38,7 +49,7 @@ void fn_1_41CC(Process* 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] = 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; } @@ -46,7 +57,7 @@ void fn_1_41CC(Process* arg0) { 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] = 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; } @@ -54,7 +65,7 @@ void fn_1_41CC(Process* arg0) { 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] = 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; } @@ -62,7 +73,7 @@ void fn_1_41CC(Process* arg0) { 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] = 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; } @@ -70,7 +81,7 @@ void fn_1_41CC(Process* arg0) { 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] = 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; } @@ -84,24 +95,8 @@ void fn_1_44F4(void) { } } -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; @@ -140,25 +135,22 @@ void fn_1_4680(omObjData* arg0) { } void fn_1_46EC(omObjData* arg0) { - unkDominationData4* temp_r29; unkDominationData4* temp_r30; arg0->func = fn_1_4680; - arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData4), 0x10000000); + 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 = 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; + arg0->model[0] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_288[temp_r30->unk_08], MEMORY_DEFAULT_NUM, HEAP_DATA)); + 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) { @@ -177,7 +169,6 @@ void fn_1_4858(omObjData* arg0) { } void fn_1_485C(omObjData* arg0) { - unkDominationData4* temp_r29; unkDominationData4* temp_r30; temp_r30 = arg0->data; @@ -197,9 +188,7 @@ void fn_1_485C(omObjData* arg0) { } if (Hu3DMotionEndCheck(*arg0->model) != 0) { - Hu3DModelAttrSet(*arg0->model, 1U); - temp_r29 = arg0->data; - temp_r29->unk_0C = 0; - temp_r29->unk_1C = 0; + Hu3DModelAttrSet(*arg0->model, 1); + fn_1_465C(arg0, 0); } } diff --git a/src/REL/m407dll/main.c b/src/REL/m407dll/main.c index 6051b4fd..0336a620 100644 --- a/src/REL/m407dll/main.c +++ b/src/REL/m407dll/main.c @@ -7,12 +7,26 @@ #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) -//bss -Process* lbl_1_bss_3980; -omObjData* lbl_1_bss_397C; -s16 lbl_1_bss_3978; +typedef void (*ObjFuncs)(void); -//func signatures +typedef struct unkDominationData5 { +/* 0x00 */ u32 unk_00; +/* 0x04 */ s16 unk_04; +/* 0x06 */ s16 unk_06; +/* 0x08 */ s16 unk_08; +/* 0x0A */ char unk_0A[6]; +/* 0x10 */ s16 unk_10; +/* 0x12 */ char unk_12[10]; +/* 0x1C */ s16 unk_1C[4]; +/* 0x24 */ s16 unk_24; +/* 0x26 */ char unk_26[2]; +/* 0x28 */ Vec unk_28; +/* 0x34 */ Vec unk_34; +/* 0x40 */ f32 unk_40; +/* 0x44 */ s32 unk_44; +} unkDominationData5; //sizeof 0x48 + +//function signatures void fn_1_388(u8, s32); void fn_1_3C4(u8); s32 fn_1_4C0(s32); @@ -36,7 +50,11 @@ s16 fn_1_5804(void); void fn_1_5A80(void); void fn_1_5BB0(void); -typedef void (*ObjFuncs)(void); +//bss +Process* lbl_1_bss_3980; +omObjData* lbl_1_bss_397C; +s16 lbl_1_bss_3978; + //data ObjFuncs lbl_1_data_2A8[] = { fn_1_4D0C, @@ -54,30 +72,27 @@ ObjFuncs lbl_1_data_2A8[] = { fn_1_4B7C }; -typedef struct unkDominationData5 { - u32 unk_00; - s16 unk_04; - s16 unk_06; - s16 unk_08; - char unk_0A[6]; - s16 unk_10; - char unk_12[10]; - s16 unk_1C[4]; - s16 unk_24; - char unk_26[2]; - Vec unk_28; - Vec unk_34; - f32 unk_40; - s32 unk_44; -} unkDominationData5; +f32 lbl_1_data_2DC[4] = {850.0f, 900.0f, 1300.0f, 1500.0f}; +Vec lbl_1_data_2EC = {540.0f, 0.0f, 10000.0f}; +Vec lbl_1_data_2F8 = {-50.0f, -360.0f, 0.0f}; +f32 lbl_1_data_304 = 2670.0f; +Vec lbl_1_data_308 = {437.0f, 0.0f, 5000.0f}; +Vec lbl_1_data_314 = {-50.0f, -360.0f, 0.0f}; +f32 lbl_1_data_320 = 2290.0f; +Vec lbl_1_data_324 = {0.0f, 0.0f, 100.0f}; +Vec lbl_1_data_330 = {-45.0f, -540.0f, 0.0f}; +f32 lbl_1_data_33C = 1910.0f; +Vec lbl_1_data_340 = {0.0f, 0.0f, 100.0f}; +Vec lbl_1_data_34C = {-53.0f, -680.0f, 0.0f}; +f32 lbl_1_data_358 = 1900.0f; void fn_1_4980(Process* arg0) { s32 i; unkDominationData5* temp_r31; lbl_1_bss_3980 = arg0; - lbl_1_bss_397C = omAddObjEx(lbl_1_bss_3980, 0x40, 0U, 0U, 0, fn_1_4C6C); - lbl_1_bss_397C->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData5), 0x10000000); + lbl_1_bss_397C = omAddObjEx(lbl_1_bss_3980, 0x40, 0, 0, 0, fn_1_4C6C); + lbl_1_bss_397C->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData5), MEMORY_DEFAULT_NUM); temp_r31 = lbl_1_bss_397C->data; Hu3DShadowCreate(45.0f, 10.0f, 10000.0f); Hu3DShadowTPLvlSet(0.6f); @@ -158,28 +173,12 @@ void fn_1_4C6C(omObjData* obj) { void fn_1_4D0C(void) { unkDominationData5* sp8; - unkDominationData5* temp_r31; sp8 = lbl_1_bss_397C->data; fn_1_4C3C(1); } -f32 lbl_1_data_2DC[4] = {850.0f, 900.0f, 1300.0f, 1500.0f}; -Vec lbl_1_data_2EC = {540.0f, 0.0f, 10000.0f}; -Vec lbl_1_data_2F8 = {-50.0f, -360.0f, 0.0f}; -f32 lbl_1_data_304 = 2670.0f; -Vec lbl_1_data_308 = {437.0f, 0.0f, 5000.0f}; -Vec lbl_1_data_314 = {-50.0f, -360.0f, 0.0f}; -f32 lbl_1_data_320 = 2290.0f; -Vec lbl_1_data_324 = {0.0f, 0.0f, 100.0f}; -Vec lbl_1_data_330 = {-45.0f, -540.0f, 0.0f}; -f32 lbl_1_data_33C = 1910.0f; -Vec lbl_1_data_340 = {0.0f, 0.0f, 100.0f}; -Vec lbl_1_data_34C = {-53.0f, -680.0f, 0.0f}; -f32 lbl_1_data_358 = 1900.0f; - void fn_1_4D54(void) { - s16 temp_r0; unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; @@ -208,7 +207,6 @@ void fn_1_4D54(void) { void fn_1_4E8C(void) { s32 i; - unkDominationData5* temp_r29; unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; @@ -231,7 +229,6 @@ void fn_1_4E8C(void) { } void fn_1_4FAC(void) { - s16 temp_r0; unkDominationData5* temp_r31; temp_r31 = lbl_1_bss_397C->data; diff --git a/src/REL/m407dll/map.c b/src/REL/m407dll/map.c index 61e85f02..cffd6090 100644 --- a/src/REL/m407dll/map.c +++ b/src/REL/m407dll/map.c @@ -5,14 +5,17 @@ #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) +//function signatures void fn_1_162C(omObjData*); void fn_1_1A8C(omObjData*); +//bss Process* lbl_1_bss_2C; omObjData* lbl_1_bss_28; s16 lbl_1_bss_24; s32 lbl_1_bss_20; +//data s32 lbl_1_data_198[] = { 0x00260000, 0x00260002, @@ -46,7 +49,7 @@ void fn_1_14F0(Process* arg0, s32 arg1) { lbl_1_bss_2C = arg0; lbl_1_bss_20 = arg1; - lbl_1_bss_28 = omAddObjEx(lbl_1_bss_2C, 0x100, 0xDU, 0U, 1, fn_1_162C); + lbl_1_bss_28 = omAddObjEx(lbl_1_bss_2C, 0x100, 0xD, 0, 1, fn_1_162C); omSetStatBit(lbl_1_bss_28, 0x100U); Hu3DLighInit(); lbl_1_bss_24 = Hu3DGLightCreateV(&lbl_1_data_1FC, &lbl_1_data_208, &lbl_1_data_214); @@ -70,21 +73,21 @@ void fn_1_162C(omObjData* arg0) { s32 i; arg0->func = fn_1_1A8C; - arg0->model[0] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[2], 0x10000000, HEAP_DATA)); + arg0->model[0] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[2], MEMORY_DEFAULT_NUM, HEAP_DATA)); Hu3DModelShadowMapSet(arg0->model[0]); Hu3DModelAmbSet(arg0->model[0], 1.0f, 1.0f, 1.0f); - arg0->model[1] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[3], 0x10000000, HEAP_DATA)); + arg0->model[1] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[3], MEMORY_DEFAULT_NUM, HEAP_DATA)); Hu3DModelAmbSet(arg0->model[1], 1.0f, 1.0f, 1.0f); Hu3DModelAttrSet(arg0->model[1], 1U); for (i = 0; i < ARRAY_COUNT(GWPlayerCfg); i++) { - arg0->model[i+2] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[GWPlayerCfg[i].character + 4], 0x10000000, HEAP_DATA)); + arg0->model[i+2] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[GWPlayerCfg[i].character + 4], MEMORY_DEFAULT_NUM, HEAP_DATA)); Hu3DModelAmbSet(arg0->model[i + 2], 1.0f, 1.0f, 1.0f); Hu3DModelShadowMapSet(arg0->model[i + 2]); } for (i = 0; i < 5; i++) { if (i == 0) { - arg0->model[i + 6] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[0], 0x10000000, HEAP_DATA)); + arg0->model[i + 6] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[0], MEMORY_DEFAULT_NUM, HEAP_DATA)); } else { arg0->model[i + 6] = Hu3DModelLink(arg0->model[6]); } @@ -92,8 +95,8 @@ void fn_1_162C(omObjData* arg0) { Hu3DModelShadowMapSet(arg0->model[i + 6]); } - arg0->model[11] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[12], 0x10000000, HEAP_DATA)); - arg0->model[12] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[1], 0x10000000, HEAP_DATA)); + arg0->model[11] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[12], MEMORY_DEFAULT_NUM, HEAP_DATA)); + arg0->model[12] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_198[1], MEMORY_DEFAULT_NUM, HEAP_DATA)); for (i = 0; i < 4; i++) { Hu3DModelPosSetV(arg0->model[i + 2], &lbl_1_data_1CC[i]); diff --git a/src/REL/m407dll/player.c b/src/REL/m407dll/player.c index 5a7aef94..2fc496c5 100644 --- a/src/REL/m407dll/player.c +++ b/src/REL/m407dll/player.c @@ -8,8 +8,8 @@ #include "rel_sqrt_consts.h" #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) +typedef void (*ObjFuncs)(omObjData*); -//structs typedef struct unkDominationData { u8 unk_00; u8 unk_01; @@ -32,13 +32,15 @@ typedef struct unkDominationData { s32 unk_38; } unkDominationData; -Process* lbl_1_bss_18; -omObjData* lbl_1_bss_8[4]; -Process* lbl_1_bss_0[2]; - -//data -typedef void (*ObjFuncs)(omObjData*); - +//function signatures +void fn_1_628(omObjData*, s32); +void fn_1_64C(omObjData*); +void fn_1_99C(omObjData*); +void fn_1_A1C(omObjData* arg0); +void fn_1_26CC(u8); +void fn_1_4544(s32, s32, f32, f32, f32); +s16 fn_1_28B8(u8); +s16 fn_1_28E4(u8); void fn_1_A88(omObjData* arg0); void fn_1_A8C(omObjData* arg0); void fn_1_C58(omObjData* arg0); @@ -49,19 +51,60 @@ void fn_1_1074(omObjData* arg0); void fn_1_11CC(omObjData* arg0); void fn_1_13E4(omObjData* arg0); void fn_1_1460(omObjData* arg0); - -//function signatures -void fn_1_628(omObjData*, s32); -void fn_1_64C(omObjData*); -void fn_1_99C(omObjData*); -void fn_1_A1C(omObjData* arg0); -void fn_1_26CC(u8); -void fn_1_4544(s32, s32, f32, f32, f32); -s16 fn_1_28B8(u8); //s32 fn_1_28B8(s32); -s16 fn_1_28E4(u8); double cos(double x); double sin(double x); +//bss +Process* lbl_1_bss_18; +omObjData* lbl_1_bss_8[4]; +Process* lbl_1_bss_0[2]; + +//data +u32 lbl_1_data_0[8][8] = { + {0x005F0000, 0x005F0024, 0x005F0029, 0x005F0005, 0x005F0006, 0x005F004A, 0x005F004B, 0x005F0018}, + {0x001A0000, 0x001A0024, 0x001A0029, 0x001A0005, 0x001A0006, 0x001A004A, 0x001A004B, 0x001A0018}, + {0x006D0000, 0x006D0024, 0x006D0029, 0x006D0005, 0x006D0006, 0x006D004A, 0x006D004B, 0x006D0018}, + {0x008A0000, 0x008A0024, 0x008A0029, 0x008A0005, 0x008A0006, 0x008A004A, 0x008A004B, 0x008A0018}, + {0x00850000, 0x00850024, 0x00850029, 0x00850005, 0x00850006, 0x0085004A, 0x0085004B, 0x00850018}, + {0x00110000, 0x00110024, 0x00110029, 0x00110005, 0x00110006, 0x0011004A, 0x0011004B, 0x00110018}, + {0x000D0000, 0x000D0024, 0x000D0029, 0x000D0005, 0x000D0006, 0x000D004A, 0x000D004B, 0x000D0018}, + {0x00810000, 0x00810024, 0x00810029, 0x00810005, 0x00810006, 0x0081004A, 0x0081004B, 0x00810018} +}; + +s32 lbl_1_data_100[] = {0x0026000D, 0x0026000E, 0x0026000F, 0x00260010, 0x00260011, 0x00260012, 0x00260013, 0x00260014}; + +char lbl_1_data_120[] = "test11_tex_we-itemhook-r"; +char* lbl_1_data_13C[] = { + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120 +}; + +ObjFuncs lbl_1_data_15C[] = { + fn_1_A88, + fn_1_A8C, + fn_1_C58, + fn_1_CF4, + fn_1_DB4, + fn_1_F8C, + fn_1_1074, + fn_1_11CC, + fn_1_13E4, + fn_1_1460 +}; + +u8 lbl_1_data_184[4][2] = { + {0x3C, 0x0F}, + {0x50, 0x0F}, + {0x64, 0x14}, + {0x78, 0x14} +}; + inline void SetDominationDataStuff(omObjData* arg0, s32 val0, s32 val1) { unkDominationData* temp_r29 = arg0->data; temp_r29->unk_1C = val0; @@ -79,7 +122,7 @@ void fn_1_F4(Process* arg0) { lbl_1_bss_18 = arg0; for (i = 0; i < 4; i++) { - lbl_1_bss_8[i] = omAddObjEx(lbl_1_bss_18, 0x100, 2U, 8U, 0, fn_1_64C); + lbl_1_bss_8[i] = omAddObjEx(lbl_1_bss_18, 0x100, 2, 8, 0, fn_1_64C); lbl_1_bss_8[i]->work[0] = i; } } @@ -210,55 +253,6 @@ void fn_1_628(omObjData* arg0, s32 arg1) { temp_r31->unk_20 = 0; } -typedef struct m407UnkDataStruct0 { - u32 unk_00[8]; -} m407UnkDataStruct0; - -m407UnkDataStruct0 lbl_1_data_0[] = { - {0x005F0000, 0x005F0024, 0x005F0029, 0x005F0005, 0x005F0006, 0x005F004A, 0x005F004B, 0x005F0018}, - {0x001A0000, 0x001A0024, 0x001A0029, 0x001A0005, 0x001A0006, 0x001A004A, 0x001A004B, 0x001A0018}, - {0x006D0000, 0x006D0024, 0x006D0029, 0x006D0005, 0x006D0006, 0x006D004A, 0x006D004B, 0x006D0018}, - {0x008A0000, 0x008A0024, 0x008A0029, 0x008A0005, 0x008A0006, 0x008A004A, 0x008A004B, 0x008A0018}, - {0x00850000, 0x00850024, 0x00850029, 0x00850005, 0x00850006, 0x0085004A, 0x0085004B, 0x00850018}, - {0x00110000, 0x00110024, 0x00110029, 0x00110005, 0x00110006, 0x0011004A, 0x0011004B, 0x00110018}, - {0x000D0000, 0x000D0024, 0x000D0029, 0x000D0005, 0x000D0006, 0x000D004A, 0x000D004B, 0x000D0018}, - {0x00810000, 0x00810024, 0x00810029, 0x00810005, 0x00810006, 0x0081004A, 0x0081004B, 0x00810018} -}; -s32 lbl_1_data_100[] = {0x0026000D, 0x0026000E, 0x0026000F, 0x00260010, 0x00260011, 0x00260012, 0x00260013, 0x00260014}; - -char lbl_1_data_120[] = "test11_tex_we-itemhook-r"; - -char* lbl_1_data_13C[] = { - lbl_1_data_120, - lbl_1_data_120, - lbl_1_data_120, - lbl_1_data_120, - lbl_1_data_120, - lbl_1_data_120, - lbl_1_data_120, - lbl_1_data_120 -}; - -ObjFuncs lbl_1_data_15C[] = { - fn_1_A88, - fn_1_A8C, - fn_1_C58, - fn_1_CF4, - fn_1_DB4, - fn_1_F8C, - fn_1_1074, - fn_1_11CC, - fn_1_13E4, - fn_1_1460 -}; - -typedef struct m407UnkDataStruct1 { - u8 unk_00; - u8 unk_01; -} m407UnkDataStruct1; - -m407UnkDataStruct1 lbl_1_data_184[] = {{0x3C, 0x0F}, {0x50, 0x0F}, {0x64, 0x14}, {0x78, 0x14}}; //??? - void fn_1_64C(omObjData* arg0) { u32 temp_r29; unkDominationData* temp_r27; @@ -266,7 +260,7 @@ void fn_1_64C(omObjData* arg0) { u32 i; arg0->func = fn_1_A1C; - arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData), 0x10000000); + arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData), MEMORY_DEFAULT_NUM); temp_r31 = arg0->data; temp_r29 = arg0->work[0]; temp_r31->unk_00 = temp_r29; @@ -279,15 +273,15 @@ void fn_1_64C(omObjData* arg0) { temp_r31->unk_38 = 0; temp_r31->unk_28 = 0.0f; //frand implicit declaration? (probably frandf inline?) - temp_r31->unk_30 = (600.0f / (lbl_1_data_184[temp_r31->unk_02].unk_00 - ((frand() & 0x7FFFFFFF) % lbl_1_data_184[temp_r31->unk_02].unk_01))); + temp_r31->unk_30 = (600.0f / (lbl_1_data_184[temp_r31->unk_02][0] - ((frand() & 0x7FFFFFFF) % lbl_1_data_184[temp_r31->unk_02][1]))); temp_r31->unk_2C = temp_r31->unk_30; arg0->model[0] = CharModelCreate(temp_r31->unk_01, 8); - arg0->model[1] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_100[temp_r31->unk_01], 0x10000000, HEAP_DATA)); + arg0->model[1] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_100[temp_r31->unk_01], MEMORY_DEFAULT_NUM, HEAP_DATA)); Hu3DModelAmbSet(arg0->model[0], 1.0f, 1.0f, 1.0f); Hu3DModelAmbSet(arg0->model[1], 1.0f, 1.0f, 1.0f); - for (i = 0; i < ARRAY_COUNT(lbl_1_data_0); i++) { - arg0->motion[i] = CharModelMotionCreate(temp_r31->unk_01, lbl_1_data_0[temp_r31->unk_01].unk_00[i]); + for (i = 0; i < 8; i++) { + arg0->motion[i] = CharModelMotionCreate(temp_r31->unk_01, lbl_1_data_0[temp_r31->unk_01][i]); } Hu3DModelShadowSet(arg0->model[0]); @@ -410,6 +404,7 @@ void fn_1_DB4(omObjData* arg0) { SetDominationDataStuff(arg0, 0, 0); } +//can also be placed into fn_1_F8C as static const const s32 lbl_1_rodata_70[] = {0x00000122, 0x00000162, 0x000001A2, 0x000001E2, 0x00000222, 0x00000262, 0x000002A2, 0x000002E2}; void fn_1_F8C(omObjData* arg0) { @@ -470,7 +465,6 @@ void fn_1_11CC(omObjData* arg0) { CharModelVoiceEnableSet(temp_r31->unk_01, arg0->motion[4], 0); CharModelMotionShiftSet(temp_r31->unk_01, arg0->motion[4], 0.0f, 10.0f, 0); temp = fn_1_28E4(temp_r31->unk_00); - //can remove \0 after matching whole rel likely Hu3DModelHookSet(temp, "itemhook_c", arg0->model[0]); temp_r31->unk_10 = 0.0f; temp_r31->unk_14 = 0.0f; diff --git a/src/REL/m407dll/score.c b/src/REL/m407dll/score.c index 97258bb7..ec8d69a0 100644 --- a/src/REL/m407dll/score.c +++ b/src/REL/m407dll/score.c @@ -4,6 +4,8 @@ #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) +typedef void (*ObjFuncs)(void); + typedef struct unkDominationData6 { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; @@ -27,8 +29,6 @@ Process* lbl_1_bss_398C; omObjData* lbl_1_bss_3988; //data -typedef void (*ObjFuncs)(void); - ObjFuncs lbl_1_data_360[] = { fn_1_61A0, fn_1_6218, @@ -40,8 +40,8 @@ void fn_1_5C5C(Process* arg0, s16 arg1) { u32 i; lbl_1_bss_398C = arg0; - lbl_1_bss_3988 = omAddObjEx(lbl_1_bss_398C, 0x800, 0U, 0U, 7, fn_1_5FE4); - lbl_1_bss_3988->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData6), 0x10000000); + lbl_1_bss_3988 = omAddObjEx(lbl_1_bss_398C, 0x800, 0, 0, 7, fn_1_5FE4); + lbl_1_bss_3988->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData6), MEMORY_DEFAULT_NUM); temp_r31 = lbl_1_bss_3988->data; temp_r31->unk_08 = arg1; temp_r31->unk_0A = 0; @@ -96,7 +96,6 @@ void fn_1_5F90(void) { fn_1_5FB4(0); } -//this function is an inline for other TUs, but not this one void fn_1_5FB4(s32 arg0) { unkDominationData6* temp_r31; diff --git a/src/REL/m407dll/whomp.c b/src/REL/m407dll/whomp.c new file mode 100644 index 00000000..f10df704 --- /dev/null +++ b/src/REL/m407dll/whomp.c @@ -0,0 +1,496 @@ +#include "game/process.h" +#include "game/object.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/audio.h" +#include "game/gamework_data.h" + +#define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) + +#define MAX_WHOMPS_PLAYER 160 +#define MAX_WHOMPS_ALL_PLAYERS MAX_WHOMPS_PLAYER * ARRAY_COUNT(GWPlayer) +#define MAX_WHOMPS (MAX_WHOMPS_PLAYER + 1) * ARRAY_COUNT(GWPlayer) + +typedef void (*ObjFuncs)(omObjData*); + +typedef struct unkDominationData7 { +/* 0x00 */ u32 unk_00; +/* 0x04 */ s32 unk_04; +/* 0x08 */ Vec unk_08; +/* 0x14 */ Vec unk_14; +/* 0x20 */ char unk_20[4]; +/* 0x24 */ s32 unk_24; +/* 0x28 */ s32 unk_28; +/* 0x2C */ s32 unk_2C; +} unkDominationData7; //sizeof 0x30 + +//function signatures +void fn_1_3360(omObjData*); +void fn_1_3364(omObjData*); +void fn_1_34A4(omObjData*); +void fn_1_37B0(omObjData*); +void fn_1_36D0(omObjData*); +void fn_1_2B7C(omObjData*); +void fn_1_290C(omObjData*, s32); +void fn_1_31F8(omObjData*); +void fn_1_4544(s32, s32, f32, f32, f32); +void fn_1_3BB8(s16, f32, f32); +void fn_1_568(s16, s16, s16); + +//bss +Process* lbl_1_bss_37C0; +omObjData* lbl_1_bss_2DB0[MAX_WHOMPS]; +s16 lbl_1_bss_1E98[MAX_WHOMPS][3]; +s16 lbl_1_bss_68[MAX_WHOMPS][6]; +s16 lbl_1_bss_66; +s16 lbl_1_bss_64; +s16 lbl_1_bss_3A[21]; +s16 lbl_1_bss_38; + +//data +s32 lbl_1_data_228[] = { + 0x0026001C, + 0x0026001D, + 0x0026001E, + 0x0026001B +}; + +s32 lbl_1_data_238[] = { + 0x0026002E, + 0x0026002F, + 0x0026002D, + 0x0026002A, + 0x0026002C, + 0x00260027, + 0x00260028, + 0x00260029 +}; + +ObjFuncs lbl_1_data_258[] = { + fn_1_3360, + fn_1_3364, + fn_1_34A4, + fn_1_37B0, + fn_1_36D0, +}; + +void fn_1_2354(Process* arg0) { + Process* sp8; + u32 i; + u32 j; + + lbl_1_bss_37C0 = arg0; + + for (j = 0, i = 0; i < MAX_WHOMPS_ALL_PLAYERS; i++) { + lbl_1_bss_2DB0[i] = omAddObjEx(lbl_1_bss_37C0, 0x200, 3, 6, 2, fn_1_2B7C); + lbl_1_bss_2DB0[i]->work[0] = i; + lbl_1_bss_2DB0[i]->work[1] = 0; + } + + j = j + i; + + for (i = 0; i < 4; i++) { + lbl_1_bss_2DB0[j + i] = omAddObjEx(lbl_1_bss_37C0, 0x200, 3, 6, 2, fn_1_2B7C); + lbl_1_bss_2DB0[j + i]->work[0] = j + i; + lbl_1_bss_2DB0[j + i]->work[1] = 1; + } + + for (i = 0; i < 4; i++) { + lbl_1_bss_3A[i] = 0; + } + + lbl_1_bss_64 = 0; +} + +void fn_1_24F0(void) { + u32 i; + + for (i = 0; i < MAX_WHOMPS; i++) { + fn_1_31F8(lbl_1_bss_2DB0[i]); + omDelObjEx(lbl_1_bss_37C0, lbl_1_bss_2DB0[i]); + } +} + +void fn_1_2564(void) { + u32 i; + + HuAudFXPlay(0x542); + for (i = 0; i < MAX_WHOMPS; i++) { + fn_1_290C(lbl_1_bss_2DB0[i], 1); + } +} + +void fn_1_25C0(void) { + u32 i, j; + + lbl_1_bss_38 = 0; + + for (i = 0; i < 4; i++) { + if (lbl_1_bss_38 < lbl_1_bss_3A[i]) { + lbl_1_bss_38 = lbl_1_bss_3A[i]; + } + } + + lbl_1_bss_66 = 0; + + for (i = 0; i < 4; i++) { + if (lbl_1_bss_3A[i] > 0) { + fn_1_290C(lbl_1_bss_2DB0[i], 3); + lbl_1_bss_66 += 1; + } + } +} + +void fn_1_26CC(u8 arg0) { + u32 i; + omObjData* temp; + + i = lbl_1_bss_3A[arg0]; + if (i < MAX_WHOMPS_PLAYER) { + lbl_1_bss_3A[arg0] = i + 1; + temp = lbl_1_bss_2DB0[arg0 + i * ARRAY_COUNT(GWPlayer)]; + fn_1_290C(temp, 2); + } +} + +void fn_1_2770(u8 arg0, s16 arg2) { + omObjData* temp_r30; + unkDominationData7* temp_r31; + + temp_r30 = lbl_1_bss_2DB0[arg0 + MAX_WHOMPS_ALL_PLAYERS]; + temp_r31 = temp_r30->data; + temp_r31->unk_08.x = 600.0f - (400.0f * arg0); + temp_r31->unk_08.y = -300.0f; + temp_r31->unk_08.z = 200.0f * (lbl_1_bss_3A[arg0] + 2); + fn_1_290C(temp_r30, 2); +} + +s32 fn_1_2880(void) { + return (lbl_1_bss_66 == 0) ? 1 : 0; +} + +s16 fn_1_28B8(u8 arg0) { + return lbl_1_bss_3A[arg0]; +} + +s16 fn_1_28D4(void) { + return lbl_1_bss_64; +} + +s16 fn_1_28E4(u8 arg0) { + return lbl_1_bss_2DB0[arg0 + MAX_WHOMPS_ALL_PLAYERS]->model[0]; +} + +void fn_1_290C(omObjData* arg0, s32 arg1) { + unkDominationData7* temp_r31; + + temp_r31 = arg0->data; + temp_r31->unk_24 = arg1; + temp_r31->unk_2C = 0; +} + +void fn_1_2930(omObjData* arg0) { + unkDominationData7* temp_r28; + omObjData* temp_r29; + u32 i; + unkDominationData7* temp_r31; + + temp_r31 = arg0->data; + lbl_1_data_258[temp_r31->unk_24](arg0); + if ((temp_r31->unk_08.z > (Center.z - 2000.0f)) && (temp_r31->unk_08.z < (2000.0f + Center.z)) && (temp_r31->unk_04 == 0)) { + for (i = 0; i < 8; i++) { + temp_r29 = lbl_1_bss_2DB0[(temp_r31->unk_00 % 80) + (i * 80)]; + temp_r29->model[0] = -1; + temp_r28 = temp_r29->data; + temp_r28->unk_04 = 0; + } + arg0->model[0] = lbl_1_bss_1E98[((temp_r31->unk_00 % 80))][0]; + + if (temp_r31->unk_08.y < 0.0f) { + Hu3DModelShadowDispOff(arg0->model[0]); + } else { + Hu3DModelShadowDispOn(arg0->model[0]); + } + + temp_r31->unk_04 = 1; + } + + if ((temp_r31->unk_08.y < 0.0f) || (temp_r31->unk_08.z < (Center.z - 2000.0f))) { + Hu3DModelAttrSet(arg0->model[0], 1); + } else { + Hu3DModelAttrReset(arg0->model[0], 1); + } + + omSetTra(arg0, temp_r31->unk_08.x, temp_r31->unk_08.y, temp_r31->unk_08.z); + omSetRot(arg0, temp_r31->unk_14.x, temp_r31->unk_14.y, temp_r31->unk_14.z); + + if (temp_r31->unk_28 == 1) { + Hu3DModelPosSet(arg0->model[2], temp_r31->unk_08.x, 1.0f + temp_r31->unk_08.y, temp_r31->unk_08.z); + } +} + +void fn_1_2B7C(omObjData* arg0) { + u32 i; + unkDominationData7* temp_r30; + + arg0->func = fn_1_2930; + arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData7), MEMORY_DEFAULT_NUM); + temp_r30 = arg0->data; + + for (i = 0; i < 3; i++) { + arg0->model[i] = -1; + } + + for (i = 0; i < 6; i++) { + arg0->motion[i] = -1; + } + + temp_r30->unk_00 = (u32) arg0->work[0]; + temp_r30->unk_28 = (u32) arg0->work[1]; + temp_r30->unk_04 = 0; + temp_r30->unk_2C = 0; + switch (temp_r30->unk_28) { + case 0: + temp_r30->unk_14.x = 0.0f; + temp_r30->unk_14.y = 180.0f; + temp_r30->unk_14.z = 0.0f; + if (temp_r30->unk_00 < 80) { + arg0->model[0] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_228[1], MEMORY_DEFAULT_NUM, HEAP_DATA)); + Hu3DModelAttrSet(arg0->model[0], 0x4000); + Hu3DModelAmbSet(arg0->model[0], 1.0f, 1.0f, 1.0f); + if (temp_r30->unk_00 == 0) { + arg0->motion[5] = Hu3DJointMotion(arg0->model[0], HuDataSelHeapReadNum(lbl_1_data_238[5], MEMORY_DEFAULT_NUM, HEAP_DATA)); + arg0->motion[3] = Hu3DJointMotion(arg0->model[0], HuDataSelHeapReadNum(lbl_1_data_238[7], MEMORY_DEFAULT_NUM, HEAP_DATA)); + arg0->motion[4] = Hu3DJointMotion(arg0->model[0], HuDataSelHeapReadNum(lbl_1_data_238[6], MEMORY_DEFAULT_NUM, HEAP_DATA)); + } else { + arg0->motion[5] = lbl_1_bss_68[0][5]; + arg0->motion[3] = lbl_1_bss_68[0][3]; + arg0->motion[4] = lbl_1_bss_68[0][4]; + } + Hu3DModelShadowSet(arg0->model[0]); + for (i = 0; i < 3; i++) { + lbl_1_bss_1E98[temp_r30->unk_00][i] = arg0->model[i]; + } + + for (i = 0; i < 6; i++) { + lbl_1_bss_68[temp_r30->unk_00][i] = arg0->motion[i]; + } + Hu3DMotionSet(arg0->model[0], arg0->motion[5]); + Hu3DModelAttrSet(arg0->model[0], 0x40000001); + temp_r30->unk_04 = 1; + } else { + temp_r30->unk_04 = 0; + } + break; + case 1: + temp_r30->unk_14.x = 0.0f; + temp_r30->unk_14.y = 0.0f; + temp_r30->unk_14.z = 0.0f; + arg0->model[0] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_228[0], MEMORY_DEFAULT_NUM, HEAP_DATA)); + arg0->model[1] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_228[2], MEMORY_DEFAULT_NUM, HEAP_DATA)); + arg0->model[2] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_228[3], MEMORY_DEFAULT_NUM, HEAP_DATA)); + Hu3DModelAttrSet(arg0->model[0], 0x4000); + Hu3DModelAttrSet(arg0->model[1], 0x4000); + Hu3DModelAmbSet(arg0->model[0], 1.0f, 1.0f, 1.0f); + Hu3DModelAmbSet(arg0->model[1], 1.0f, 1.0f, 1.0f); + arg0->motion[2] = Hu3DJointMotion(arg0->model[0], HuDataSelHeapReadNum(lbl_1_data_238[2], MEMORY_DEFAULT_NUM, HEAP_DATA)); + arg0->motion[3] = Hu3DJointMotion(arg0->model[0], HuDataSelHeapReadNum(lbl_1_data_238[4], MEMORY_DEFAULT_NUM, HEAP_DATA)); + arg0->motion[5] = Hu3DJointMotion(arg0->model[0], HuDataSelHeapReadNum(lbl_1_data_238[3], MEMORY_DEFAULT_NUM, HEAP_DATA)); + arg0->motion[0] = Hu3DJointMotion(arg0->model[1], HuDataSelHeapReadNum(lbl_1_data_238[0], MEMORY_DEFAULT_NUM, HEAP_DATA)); + arg0->motion[1] = Hu3DJointMotion(arg0->model[1], HuDataSelHeapReadNum(lbl_1_data_238[1], MEMORY_DEFAULT_NUM, HEAP_DATA)); + Hu3DModelHookSet(arg0->model[0], "itemhook_r", arg0->model[1]); + Hu3DModelShadowSet(arg0->model[0]); + Hu3DModelShadowSet(arg0->model[1]); + Hu3DModelAttrSet(arg0->model[0], 1); + Hu3DModelAttrSet(arg0->model[1], 1); + Hu3DModelAttrSet(arg0->model[2], 1); + Hu3DModelAttrSet(arg0->model[2], 0x40000002); + Hu3DModelAttrSet(arg0->model[2], 0x40000001); + temp_r30->unk_04 = 1; + break; + } + temp_r30->unk_08.x = (600.0f - (400.0f * (temp_r30->unk_00 & 3))); + temp_r30->unk_08.y = 0.0f; + temp_r30->unk_08.z = (200.0f * (temp_r30->unk_00 >> 2)); + fn_1_290C(arg0, 0); +} + +void fn_1_31F8(omObjData* arg0) { + s32 i; + unkDominationData7* temp_r29; + + temp_r29 = arg0->data; + switch (temp_r29->unk_28) { /* irregular */ + case 0: + if (temp_r29->unk_00 == 0) { + for (i = 0; i < 6; i++) { + if (arg0->motion[i] != -1) { + Hu3DMotionKill(arg0->motion[i]); + } + } + } + if (temp_r29->unk_04 != 0) { + for (i = 0; i < 3; i++) { + if (arg0->model[i] != -1) { + Hu3DModelKill(arg0->model[i]); + } + } + } + break; + case 1: + for (i = 0; i < 6; i++) { + if (arg0->motion[i] != -1) { + Hu3DMotionKill(arg0->motion[i]); + } + } + for (i = 0; i < 3; i++) { + if (arg0->model[i] != -1) { + Hu3DModelKill(arg0->model[i]); + } + } + break; + } + if (arg0->data) { + HuMemDirectFree(arg0->data); + } +} + +void fn_1_3360(omObjData*) { + +} + +void fn_1_3364(omObjData* arg0) { + unkDominationData7* temp_r31; + + temp_r31 = arg0->data; + if (temp_r31->unk_2C == 0) { + Hu3DMotionSet(arg0->model[0], arg0->motion[4]); + Hu3DModelAttrReset(arg0->model[0], 0x40000001); + switch (temp_r31->unk_28) { + case 0: + fn_1_4544(0, 0, temp_r31->unk_08.x, 0.0f, temp_r31->unk_08.z); + break; + case 1: + fn_1_4544(1, 0, temp_r31->unk_08.x, 0.0f, temp_r31->unk_08.z); + break; + } + } + + if (temp_r31->unk_2C == 0x2A) { + Hu3DModelShadowDispOff(arg0->model[0]); + } + + if (Hu3DMotionEndCheck(*arg0->model) == 0) { + temp_r31->unk_2C++; + return; + } + + temp_r31->unk_08.y = -300.0f; + Hu3DModelAttrSet(arg0->model[0], 1); + fn_1_290C(arg0, 0); +} + +void fn_1_34A4(omObjData* arg0) { + unkDominationData7* temp_r30; + + temp_r30 = arg0->data; + if (temp_r30->unk_2C == 0) { + if (temp_r30->unk_28 == 1) { + Hu3DModelAttrReset(arg0->model[0], 1); + Hu3DModelAttrReset(arg0->model[1], 1); + } else { + Hu3DModelAttrReset(arg0->model[0], 1); + } + Hu3DMotionSet(arg0->model[0], arg0->motion[3]); + Hu3DModelAttrReset(arg0->model[0], 0x40000001); + switch (temp_r30->unk_28) { /* irregular */ + case 0: + fn_1_4544(0, 0, temp_r30->unk_08.x, 0.0f, temp_r30->unk_08.z); + HuAudFXPlay(0x543); + break; + case 1: + HuAudFXPlay(0x544); + fn_1_4544(1, 0, temp_r30->unk_08.x, 0.0f, temp_r30->unk_08.z); + break; + } + temp_r30->unk_08.y = 0.0f; + } + + if (temp_r30->unk_2C == 0xA) { + Hu3DModelShadowDispOn(arg0->model[0]); + } + + if ((temp_r30->unk_2C == 0xA) && (temp_r30->unk_28 == 1)) { + Hu3DMotionSet(arg0->model[1], arg0->motion[1]); + Hu3DModelAttrReset(arg0->model[1], 0x40000001); + } + + temp_r30->unk_2C++; + + if (Hu3DMotionEndCheck(arg0->model[0]) != 0) { + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[5], 0.0f, 10.0f, 0x40000001); + switch (temp_r30->unk_28) { + case 0: + fn_1_290C(arg0, 0); + return; + case 1: + fn_1_290C(arg0, 4); + break; + } + } +} + +void fn_1_36D0(omObjData* arg0) { + unkDominationData7* sp8; + + sp8 = arg0->data; + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[2], 0.0f, 10.0f, 0x40000001); + Hu3DMotionSet(arg0->model[1], arg0->motion[0]); + Hu3DModelAttrSet(arg0->model[1], 0x40000001); + Hu3DModelAttrReset(arg0->model[2], 1); + Hu3DModelAttrReset(arg0->model[2], 0x40000002); + Hu3DModelAttrSet(arg0->model[2], 0x40000001); + fn_1_290C(arg0, 0); +} + +void fn_1_37B0(omObjData* arg0) { + unkDominationData7* temp_r31; + + temp_r31 = arg0->data; + if (temp_r31->unk_2C == 0) { + temp_r31->unk_14.x = 0.0f; + temp_r31->unk_08.y = 0.0f; + Hu3DModelAttrSet(arg0->model[0], 0x40000002); + temp_r31->unk_2C++; + } + temp_r31->unk_14.x -= 4.0f; + temp_r31->unk_08.y += 0.9f; + if ((temp_r31->unk_14.x <= -25.0f) && (temp_r31->unk_2C == 1)) { + if ((temp_r31->unk_00 < 640) && ((temp_r31->unk_00 >> 2) < (lbl_1_bss_3A[temp_r31->unk_00 & 3] - 1))) { + fn_1_290C(lbl_1_bss_2DB0[temp_r31->unk_00 + 4], 3); + temp_r31->unk_2C++; + } + if (lbl_1_bss_64 < (temp_r31->unk_00 >> 2) + 1) { + lbl_1_bss_64 = (temp_r31->unk_00 >> 2) + 1; + } + } + if ((temp_r31->unk_2C == 1) && (temp_r31->unk_14.x > -90.0f) || (temp_r31->unk_2C == 2) && (temp_r31->unk_14.x > -68.0f)) { + return; + } + + temp_r31->unk_14.x = (temp_r31->unk_2C == 1) ? -90.0f : -68.0f; + + if (temp_r31->unk_2C == 1) { + fn_1_4544(3, 0, temp_r31->unk_08.x, 0.0f, 200.0f + temp_r31->unk_08.z); + HuAudFXPlay(0x544); + if (lbl_1_bss_38 > (temp_r31->unk_00 >> 2) + 1) { + fn_1_3BB8((temp_r31->unk_00 >> 2) + 1, temp_r31->unk_08.x, temp_r31->unk_08.z); + } + lbl_1_bss_66 -= 1; + } else { + fn_1_4544(2, 0, temp_r31->unk_08.x, 0.0f, 200.0f + temp_r31->unk_08.z); + HuAudFXPlay(0x543); + } + fn_1_568(temp_r31->unk_00 & 3, 2, 4); + fn_1_290C(arg0, 0); +} diff --git a/src/REL/m407dll/whomp_score.c b/src/REL/m407dll/whomp_score.c index 28b76729..cdbf0fb9 100644 --- a/src/REL/m407dll/whomp_score.c +++ b/src/REL/m407dll/whomp_score.c @@ -4,6 +4,16 @@ #include "game/gamework_data.h" #include "game/esprite.h" +typedef struct unkDominationData3 { +/* 0x00 */ u32 unk_00; +/* 0x04 */ s32 unk_04; +/* 0x08 */ Vec unk_08; +/* 0x14 */ s32 unk_14; +/* 0x18 */ s16 unk_18[4]; +/* 0x20 */ f32 unk_20; +} unkDominationData3; //sizeof 0x24 + +//function signatures void Hu3D3Dto2D(Vec *arg0, s16 arg1, Vec *arg2); void fn_1_3D28(omObjData* arg0, s32 arg1); void fn_1_3E34(omObjData*); @@ -16,34 +26,25 @@ void fn_1_40F4(omObjData* arg0); Process* lbl_1_bss_37D8; omObjData* lbl_1_bss_37C8[4]; +//data ObjFuncs lbl_1_data_278[] = { fn_1_3FF0, fn_1_3FF4, fn_1_40F4, }; -typedef struct unkDominationData3 { - u32 unk_00; - s32 unk_04; - Vec unk_08; - s32 unk_14; - s16 unk_18[4]; - f32 unk_20; -} unkDominationData3; - void fn_1_3AC8(Process* arg0) { u32 i; lbl_1_bss_37D8 = arg0; 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] = omAddObjEx(lbl_1_bss_37D8, 0x500, 0, 0, 4, fn_1_3E34); lbl_1_bss_37C8[i]->work[0] = i; } } void fn_1_3B68(void) { - s32 temp_r4; u32 i; for (i = 0; i < ARRAY_COUNT(lbl_1_bss_37C8); i++) { @@ -103,7 +104,7 @@ void fn_1_3E34(omObjData* arg0) { unkDominationData3* temp_r31; arg0->func = fn_1_3D4C; - arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData3), 0x10000000); + arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkDominationData3), MEMORY_DEFAULT_NUM); temp_r31 = arg0->data; temp_r31->unk_00 = arg0->work[0]; temp_r31->unk_14 = 0; diff --git a/src/game/board/mg_setup.c b/src/game/board/mg_setup.c index 54555a11..2f9eb753 100644 --- a/src/game/board/mg_setup.c +++ b/src/game/board/mg_setup.c @@ -1026,8 +1026,7 @@ static GXColor hiliteColTbl[3] = { }; static void UpdateMGList(bitcopy* arg0, omObjData* arg1) { - f32 sp1C; - f32 sp18; + f32 sp18[2]; s32 sp14; f32 var_f26; f32 var_f25; @@ -1056,14 +1055,14 @@ static void UpdateMGList(bitcopy* arg0, omObjData* arg1) { for (var_r23 = 0; var_r23 < arg0->field01_bit0; var_r23++) { HuWinMesSizeCancelCRSet(1); - HuWinMesMaxSizeGet(1, &sp18, activeMG[var_r23].unk_04); + HuWinMesMaxSizeGet(1, &sp18[0], activeMG[var_r23].unk_04); var_f25 = 152.0f; var_f24 = 280.0f + (var_r23 * 0x18); - temp_r3 = HuWinCreate(var_f25, var_f24, sp18, sp1C, 0); + temp_r3 = HuWinCreate(var_f25, var_f24, sp18[0], sp18[1], 0); HuWinBGTPLvlSet(temp_r3, 0.0f); HuWinMesSpeedSet(temp_r3, 0); HuWinDispOff(temp_r3); - HuWinAttrSet(temp_r3, 0x100U); + HuWinAttrSet(temp_r3, 0x100); if (activeMG[var_r23].unk_03 != 0) { sp14 = activeMG[var_r23].unk_04; } else { diff --git a/src/game/code_8003FF68.c b/src/game/code_8003FF68.c index e9abbb62..0aa54036 100644 --- a/src/game/code_8003FF68.c +++ b/src/game/code_8003FF68.c @@ -81,7 +81,7 @@ void fn_8003FF68(unkArg0* arg0) { for (j = 0; var_r31->unk_00 != -1U; var_r31++, j++) { if (var_r31->unk_06 == 0) { - temp = HuDataSelHeapReadNum(var_r31->unk_00, 0x10000000, HEAP_DATA); + temp = HuDataSelHeapReadNum(var_r31->unk_00, MEMORY_DEFAULT_NUM, HEAP_DATA); model = Hu3DModelCreate(temp); lbl_80192060[j] = model; Hu3DModelAttrSet(model, var_r31->unk_04); @@ -93,7 +93,7 @@ void fn_8003FF68(unkArg0* arg0) { lbl_80192160[j] = temp_r27->unk_08; } } else if (var_r31->unk_06 == 1) { - temp = HuDataSelHeapReadNum(var_r31->unk_00, 0x10000000, HEAP_DATA); + temp = HuDataSelHeapReadNum(var_r31->unk_00, MEMORY_DEFAULT_NUM, HEAP_DATA); lbl_80192160[j] = Hu3DMotionCreate(temp); } }