From c073ee4d07055c12189304a1239699d4829f5ac7 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Fri, 5 Jul 2024 16:16:34 -0400 Subject: [PATCH 1/2] when the functions are HUGE (wtf why hudson) --- config/GMPE01_00/rels/m409Dll/symbols.txt | 3 +- include/REL/m409Dll.h | 131 +++++- src/REL/m409Dll/main.c | 12 +- src/REL/m409Dll/player.c | 486 ++++++++++++++++++++++ 4 files changed, 622 insertions(+), 10 deletions(-) create mode 100644 src/REL/m409Dll/player.c diff --git a/config/GMPE01_00/rels/m409Dll/symbols.txt b/config/GMPE01_00/rels/m409Dll/symbols.txt index 56b2975f..758e9c89 100644 --- a/config/GMPE01_00/rels/m409Dll/symbols.txt +++ b/config/GMPE01_00/rels/m409Dll/symbols.txt @@ -298,7 +298,8 @@ lbl_1_data_10F = .data:0x0000010F; // type:object size:0x24 scope:local data:str lbl_1_data_138 = .data:0x00000138; // type:object size:0x4 lbl_1_data_13C = .data:0x0000013C; // type:object size:0x1C lbl_1_data_158 = .data:0x00000158; // type:object size:0x20 -lbl_1_data_178 = .data:0x00000178; // type:object size:0x40 +lbl_1_data_178 = .data:0x00000178; // type:object size:0x20 +lbl_1_data_198 = .data:0x00000198; // type:object size:0x20 lbl_1_data_1B8 = .data:0x000001B8; // type:object size:0x14 jumptable_1_data_1CC = .data:0x000001CC; // type:object size:0x20 scope:local lbl_1_data_1EC = .data:0x000001EC; // type:object size:0x4 data:4byte diff --git a/include/REL/m409Dll.h b/include/REL/m409Dll.h index f917634f..40d50c7f 100644 --- a/include/REL/m409Dll.h +++ b/include/REL/m409Dll.h @@ -7,6 +7,7 @@ extern s32 rand8(void); // types typedef void (*m409Func6)(ModelData*, struct _unkStruct6*, Mtx); +typedef void (*m409PlayerFuncUnk)(void); typedef struct _unkStruct { f32 zoom; @@ -69,7 +70,7 @@ typedef struct _unkStruct5 { Vec unk40; s16 unk4C; s8 unk4E; -} unkStruct5; +} unkStruct5; // sizeof 0x50 typedef struct _unkStruct6 { s16 unk0; @@ -91,9 +92,96 @@ typedef struct _unkStruct6 { HsfVector2f* unk5C; f32 unk60; f32 unk64; -} unkStruct6; +} unkStruct6; // sizeof 0x68 + +typedef struct _unkStruct7 { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + char unk7[0x3]; + s16 unkA; + s16 unkC; + s16 unkE; + s16 unk10; + char unk12[0x1]; + s8 unk13; + s8 unk14; + char unk15[0x3]; + s32 unk18; + s16 unk1C; + char unk1E[0x6]; + Vec unk24; + Vec unk30; + Vec unk3C; + Vec unk48; + u8 unk54; + u8 unk55; + u8 unk56; + u8 unk57; + u8 unk58; + u8 unk59; + u8 unk5A[3][2]; + u8 unk60; + u8 unk61; + u8 unk62; + u8 unk63; + u8 unk64; + char unk65[0x3]; + Vec unk68; +} unkStruct7; // sizeof 0x74 + +typedef struct _unkStruct8Sub { + char unk0[0x58]; + Vec unk58; + char unk64[0xC]; + u16 unk70; + s16 unk72; + s16 unk74; + s16 unk76; + char unk78[0x18]; +} unkStruct8Sub; // sizeof 0x90 + +typedef struct _unkStruct8 { + char unk0[0x30]; + m409PlayerFuncUnk unk30; + char unk34[0x8]; + unkStruct8Sub* unk3C; + char unk40[0x60]; +} unkStruct8; // sizeof 0xA0 + +typedef struct _unkStruct9 { + char unk0[0x6]; + s16 unk6; + s16 unk8; + s16 unkA; + char unkC[0x4]; + unkStruct8* unk10; +} unkStruct9; + +typedef struct _unkStruct10 { + char unk0[0x2]; + u8 unk2; + u8 unk3; + char unk4[0x8]; + Vec unkC; + char unk18[0x38]; +} unkStruct10; // sizeof 0x10 // bss +// player.c +extern omObjData* lbl_1_bss_3A0[4]; +extern omObjData* lbl_1_bss_39C; +extern s32 lbl_1_bss_38C[4]; +extern unkStruct10 lbl_1_bss_10C[8]; +extern s16 lbl_1_bss_108; +extern s16 lbl_1_bss_106; +extern s16 lbl_1_bss_104; +extern unkStruct9 lbl_1_bss_F0; +// main.c extern Process* lbl_1_bss_E8; extern s16 lbl_1_bss_E4; extern omObjData* lbl_1_bss_E0; @@ -118,6 +206,7 @@ extern s16 lbl_1_bss_2; extern s8 lbl_1_bss_0; // data +// main.c extern Vec lbl_1_data_0; extern Vec lbl_1_data_C; extern unkStruct2 lbl_1_data_18; @@ -127,6 +216,9 @@ extern Vec lbl_1_data_40; extern unkStruct lbl_1_data_4C[4]; extern u32 lbl_1_data_BC; extern s32 lbl_1_data_C0; +// player.c +extern u32 lbl_1_data_138; // unk +extern s32 lbl_1_data_13C[7]; // prototypes extern void ModuleProlog(void); @@ -165,4 +257,37 @@ extern void fn_1_66D4(HsfVector2f*, HsfVector2f*, s16, f32, f32); extern void fn_1_6778(Vec*, Vec*, Vec*, s16); // player.c extern void fn_1_67E0(Process*); -extern void fn_1_6900(void); \ No newline at end of file +extern void fn_1_6900(void); +extern void fn_1_6928(omObjData*); +extern void fn_1_7344(omObjData*); +extern void fn_1_7FE8(omObjData*); +// ... +extern void fn_1_8838(void); +extern s8 fn_1_8D08(u8); +extern void fn_1_8D6C(void); +extern void fn_1_91C0(omObjData*); +extern s32 fn_1_ABB4(void); +extern f32 fn_1_AD40(f32, f32, f32); +extern void fn_1_B378(Vec*); +extern f32 fn_1_BF38(s16); +extern void fn_1_BF88(s32, s32); +extern void fn_1_C0C0(void); +extern Vec* fn_1_CCCC(s16, s16); +extern s16 fn_1_DA48(s32, s32); +extern void fn_1_DEF4(s16, s32, s32); +extern void fn_1_DF20(s32, s32, s32); +extern void fn_1_E2A8(s16, s32, s32, s32, s32); +extern void fn_1_E7C8(s16, s32, s32); +extern void fn_1_E99C(s16, s16, f32, f32, f32); +extern void fn_1_E85C(s16, s32, f32, f32, f32); +extern void fn_1_EC1C(s16, s16, f32, f32, f32); +extern void fn_1_ED00(u8, s32); +extern void fn_1_ED44(s16, s16, s32); +extern void fn_1_EE24(u8, s32); +extern void fn_1_EE68(s16, s16, s32); +extern void fn_1_F024(s16, s32, u8, u8, u8, s32); +extern void fn_1_F098(s16, u8, u8, u8, u8); +extern void fn_1_F17C(s16, s16, u8, s32); +extern void fn_1_F2F8(s16, s16, u8, f32); +extern void fn_1_F408(s16, s32, s32); +extern void fn_1_F478(s16, s16, u8, s32); \ No newline at end of file diff --git a/src/REL/m409Dll/main.c b/src/REL/m409Dll/main.c index d056cc79..35b2eede 100644 --- a/src/REL/m409Dll/main.c +++ b/src/REL/m409Dll/main.c @@ -1149,33 +1149,33 @@ s16 fn_1_5A18(AnimData* arg0, s16 arg1, f32 arg8, s16 arg2, s16 arg3) { var_r21 = Hu3DHookFuncCreate(fn_1_602C); temp_r28 = &Hu3DData[var_r21]; - var_r31 = HuMemDirectMallocNum(HEAP_DATA, 0x68, temp_r28->unk_48); + var_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(unkStruct6), temp_r28->unk_48); temp_r28->unk_120 = var_r31; arg0->useNum++; var_r31->unk10 = arg0; var_r31->unk0 = arg1; var_r31->unk8 = 0; var_r31->unkC = NULL; - var_r24 = HuMemDirectMallocNum(HEAP_DATA, arg1 * 0x50, temp_r28->unk_48); + var_r24 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(unkStruct5), temp_r28->unk_48); var_r31->unk18 = var_r24; for (var_r30 = 0; var_r30 < arg1; var_r30++, var_r24++) { var_r24->unk4C = -1; var_r24->unk4E = 0; } - var_r25 = HuMemDirectMallocNum(HEAP_DATA, arg1 * 0xC * 4, temp_r28->unk_48); + var_r25 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(Vec) * 4, temp_r28->unk_48); var_r31->unk1C = var_r25; for (var_r30 = 0; var_r30 < (arg1 * 4); var_r30++, var_r25++) { var_r25->x = var_r25->y = var_r25->z = 0.0f; } - var_r27 = HuMemDirectMallocNum(HEAP_DATA, arg1 * 4, temp_r28->unk_48); + var_r27 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(GXColor), temp_r28->unk_48); var_r31->unk24 = var_r27; for (var_r30 = 0; var_r30 < arg1; var_r30++, var_r27++) { var_r27->r = var_r27->g = var_r27->b = var_r27->a = 0xFF; } - var_r29 = HuMemDirectMallocNum(HEAP_DATA, arg1 * 8 * 4, temp_r28->unk_48); + var_r29 = HuMemDirectMallocNum(HEAP_DATA, arg1 * sizeof(HsfVector2f) * 4, temp_r28->unk_48); var_r31->unk20 = var_r29; for (var_r30 = 0; var_r30 < arg1; var_r30++) { @@ -1204,7 +1204,7 @@ s16 fn_1_5A18(AnimData* arg0, s16 arg1, f32 arg8, s16 arg2, s16 arg3) { var_r31->unk60 = 1.0f; var_r31->unk64 = 1.0f; } - var_r31->unk5C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk14 * 8, temp_r28->unk_48); + var_r31->unk5C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk14 * sizeof(HsfVector2f), temp_r28->unk_48); fn_1_6608(var_r31->unk5C, var_r31->unk14, var_r22, var_r31->unk60, var_r31->unk64); var_r31->unk2C.x = var_r31->unk50.x = var_r31->unk44.y = var_r31->unk50.y = -arg8; var_r31->unk38.x = var_r31->unk44.x = var_r31->unk2C.y = var_r31->unk38.y = arg8; diff --git a/src/REL/m409Dll/player.c b/src/REL/m409Dll/player.c new file mode 100644 index 00000000..0cd3d0f3 --- /dev/null +++ b/src/REL/m409Dll/player.c @@ -0,0 +1,486 @@ +#include "REL/m409Dll.h" + +#include "math.h" +#include "ext_math.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/gamework_data.h" +#include "game/pad.h" + +// bss +omObjData* lbl_1_bss_3A0[4]; +omObjData* lbl_1_bss_39C; +s32 lbl_1_bss_38C[4]; +unkStruct10 lbl_1_bss_10C[8]; +s16 lbl_1_bss_108; +s16 lbl_1_bss_106; +s16 lbl_1_bss_104; +unkStruct9 lbl_1_bss_F0; + +// data +u32 lbl_1_data_138 = 0xFFFF0000; +s32 lbl_1_data_13C[7] = { 0x30, 0x2D, 0x3A, 0x2E, 0x280032, 0x17, 0x18 }; +GXColor lbl_1_data_158[8] = { + { 0xFF, 0x00, 0x00, 0xFF }, + { 0x00, 0x00, 0xFF, 0xFF }, + { 0xFF, 0x80, 0x80, 0xFF }, + { 0x00, 0xFF, 0x00, 0xFF }, + { 0x80, 0x00, 0xC0, 0xFF }, + { 0x90, 0x30, 0x00, 0xFF }, + { 0xFF, 0xFF, 0x00, 0xFF }, + { 0x00, 0x00, 0x00, 0xFF } +}; +HsfVector2f lbl_1_data_178[4] = { + { 72.0f, 80.0f }, { 504.0f, 80.0f }, + { 72.0f, 400.0f }, { 504.0f, 400.0f }, +}; +GXColor lbl_1_data_198[8] = { + { 0xD0, 0x00, 0x00, 0xFF }, + { 0x00, 0x00, 0xFF, 0xFF }, + { 0x00, 0xA0, 0x00, 0xFF }, + { 0xFF, 0xFF, 0x00, 0xFF }, + { 0xA0, 0x00, 0xFF, 0xFF }, + { 0xFF, 0x80, 0x40, 0xFF }, + { 0xFF, 0xA0, 0xF0, 0xFF }, + { 0x00, 0xFF, 0x40, 0xFF } +}; + +void fn_1_67E0(Process* arg0) { + s32 var_r31; + s32 temp_r28; + omObjData* var_r30; + + omMakeGroupEx(arg0, 0U, 4U); + omGetGroupMemberListEx(arg0, 0); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_3A0[var_r31] = var_r30 = omAddObjEx(arg0, 0x30, 3U, 7U, 0, fn_1_6928); + var_r30->work[0] = var_r31; + } + lbl_1_bss_39C = var_r30 = omAddObjEx(arg0, 0x40, 8U, 0xAU, 4, fn_1_91C0); + fn_1_BF88(0x40, 0x40); + fn_1_DF20(0x28002C, 0x40, 0x40); + temp_r28 = (u8)frand(); + + for (var_r31 = 0; var_r31 < (temp_r28 + 1); var_r31++) { + fn_1_ABB4(); + } +} + +void fn_1_6900(void) { + CharModelKill(-1); + fn_1_C0C0(); +} + +void fn_1_6928(omObjData* arg0) { + Vec sp8[4] = { + { -185.0f, 35.0f, 100.0f }, + { -62.5f, 35.0f, 100.0f }, + { 62.5f, 35.0f, 100.0f }, + { 185.0f, 35.0f, 100.0f } + }; + s8 sp38[8][32] = { + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r" + }; + unkStruct7* var_r31; + s32 var_r30; + s32 var_r28; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(unkStruct7), 0x10000000); + arg0->data = var_r31; + var_r31->unk0 = arg0->work[0]; + var_r31->unk1 = GWPlayerCfg[var_r31->unk0].character; + var_r31->unk2 = (var_r31->unk0 >> 1); + var_r31->unk3 = (var_r31->unk0 & 1); + var_r31->unk4 = GWPlayerCfg[var_r31->unk0].pad_idx; + var_r31->unk5 = GWPlayerCfg[var_r31->unk0].iscom; + var_r31->unk6 = GWPlayerCfg[var_r31->unk0].diff; + var_r31->unk1C = 0; + var_r31->unk13 = 1; + var_r31->unk14 = 0; + var_r31->unk61 = fn_1_ABB4() & 0x1; + var_r31->unk64 = var_r31->unk63 = 0; + var_r31->unk18 = -1; + var_r31->unk24.x = sp8[var_r31->unk0].x; + var_r31->unk24.y = sp8[var_r31->unk0].y; + var_r31->unk24.z = sp8[var_r31->unk0].z; + var_r31->unk30.x = var_r31->unk30.y = var_r31->unk30.z = 0.0f; + var_r31->unk3C.y = 180.0f; + var_r31->unk3C.x = var_r31->unk3C.z = 0.0f; + var_r30 = CharModelCreate(var_r31->unk1, 4); + arg0->model[0] = var_r30; + Hu3DModelAttrSet(var_r30, 0x40000001); + + for (var_r28 = 0; var_r28 < 7; var_r28++) { + if ((lbl_1_data_13C[var_r28] & 0xFFFF0000) != 0) { + arg0->motion[var_r28] = CharModelMotionCreate(var_r31->unk1, var_r31->unk1 + lbl_1_data_13C[var_r28]); + } else { + arg0->motion[var_r28] = CharModelMotionCreate(var_r31->unk1, lbl_1_data_13C[var_r28]); + } + } + CharModelMotionDataClose(var_r31->unk1); + CharModelMotionSet(var_r31->unk1, arg0->motion[var_r31->unk1C]); + omSetTra(arg0, var_r31->unk24.x, var_r31->unk24.y, var_r31->unk24.z); + Hu3DModelPosSet(var_r30, var_r31->unk24.x, var_r31->unk24.y, var_r31->unk24.z); + Hu3DModelRotSet(var_r30, 0.0f, 30.0f, 0.0f); + CharModelStepTypeSet(var_r31->unk1, 0); + arg0->model[1] = var_r30 = Hu3DModelCreate(HuDataSelHeapReadNum(0x280012, 0x10000000, HEAP_DATA)); + Hu3DModelHookSet(arg0->model[0], (char*)sp38[var_r31->unk1], arg0->model[1]); + var_r30 = fn_1_DA48(2, 1); + var_r31->unk57 = var_r30; + lbl_1_bss_F0.unk10[var_r30].unk30 = fn_1_8838; + fn_1_E2A8(var_r30, 0, 0x28002B, 0x40, 0x40); + fn_1_F098(var_r30, lbl_1_data_158[var_r31->unk1].r, lbl_1_data_158[var_r31->unk1].g, lbl_1_data_158[var_r31->unk1].b, lbl_1_data_158[var_r31->unk1].a); + fn_1_F024(var_r30, 1, lbl_1_data_158[var_r31->unk1].r, lbl_1_data_158[var_r31->unk1].g, lbl_1_data_158[var_r31->unk1].b, 0x98); + fn_1_E85C(var_r30, 0, var_r31->unk24.x, 100.0f + var_r31->unk24.y, -1200.0f); + fn_1_ED44(var_r30, 0, 0x10); + fn_1_EC1C(var_r30, 0, 2.0f, 2.0f, 1.0f); + fn_1_EC1C(var_r30, 1, 2.5f, 2.5f, 1.0f); + fn_1_ED44(var_r30, 1, 0x14); + fn_1_F408(var_r30, 1, 1); + var_r30 = fn_1_DA48(1, 1); + fn_1_DEF4(var_r30, 0, 0); + fn_1_E7C8(lbl_1_bss_F0.unk6, 0, 0x28002D); + var_r31->unk58 = var_r30; + lbl_1_bss_F0.unk10[var_r30].unk30 = &fn_1_8D6C; + fn_1_ED44(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 4); + lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk70 = var_r31->unk0; + lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk72 = -1; + fn_1_EC1C(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 0.5f, 0.5f, 1.0f); + var_r31->unk59 = 0; + var_r31->unk60 = 0; + var_r30 = espEntry(0x280031, 1, 0); + var_r31->unk55 = var_r30; + espColorSet(var_r30, 0, 0, 0); + espTPLvlSet(var_r30, 0.5); + espPosSet(var_r30, lbl_1_data_178[var_r31->unk0].x, lbl_1_data_178[var_r31->unk0].y); + espAttrSet(var_r30, 4); + var_r30 = espEntry(0x280030, 1, 0); + var_r31->unk54 = var_r30; + espPosSet(var_r30, lbl_1_data_178[var_r31->unk0].x, lbl_1_data_178[var_r31->unk0].y); + espAttrSet(var_r30, 4); + var_r30 = espEntry(var_r31->unk1 + 0x610000, 1, 0); + var_r31->unk56 = var_r30; + espPosSet(var_r30, lbl_1_data_178[var_r31->unk0].x - 27.0f, lbl_1_data_178[var_r31->unk0].y - 20.0f); + espAttrSet(var_r30, 4); + + for (var_r28 = 0; var_r28 < 3; var_r28++) { + var_r30 = espEntry(0x61000A, 0, 0); + var_r31->unk5A[var_r28][0] = var_r30; + espAttrSet(var_r30, 4); + espPosSet(var_r30, lbl_1_data_178[var_r31->unk0].x - 32.0f + (var_r28 * 0x1E), 16.0f + lbl_1_data_178[var_r31->unk0].y); + var_r30 = espEntry(0x61000B, 0, 0); + var_r31->unk5A[var_r28][1] = var_r30; + espAttrSet(var_r30, 4); + espPosSet(var_r30, lbl_1_data_178[var_r31->unk0].x - 32.0f + (var_r28 * 0x1E), 16.0f + lbl_1_data_178[var_r31->unk0].y); + } + arg0->func = fn_1_7344; +} + +void fn_1_7344(omObjData* arg0) { + s16 sp8; + f32 temp_f28; + f32 temp_f29; + f32 temp_f30; + f32 var_f25; + f32 var_f26; + f32 var_f27; + f32 var_f31; + s16 temp_r0; + s32 temp_r19; + s16 temp_r22; + s16 temp_r26; + s16 temp_r25; + s16 var_r20; + s16 var_r21; + s16 var_r27; + s16 var_r28; + s32 var_r24; + s32 temp_r23; + Vec* temp_r30; + unkStruct7* temp_r31; + + var_f31 = 0.0f; + temp_r31 = (unkStruct7*)arg0->data; + temp_r19 = arg0->model[0]; + temp_r31->unk48 = temp_r31->unk24; + var_r28 = temp_r31->unk1C; + if (temp_r31->unk5 != 0) { + fn_1_7FE8(arg0); + } else { + temp_r31->unkA = HuPadStkX[temp_r31->unk4]; + temp_r31->unkC = HuPadStkY[temp_r31->unk4]; + temp_r31->unkE = HuPadBtnDown[temp_r31->unk4]; + temp_r31->unk10 = HuPadBtn[temp_r31->unk4]; + } + temp_r26 = temp_r31->unkA; + temp_r25 = temp_r31->unkC; + temp_r22 = temp_r31->unkE; + sp8 = temp_r31->unk10; + fn_1_DEF4(temp_r31->unk57, 0, 0); + fn_1_F478(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, lbl_1_bss_F0.unkA, 2); + temp_r30 = fn_1_CCCC(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8); + if (fn_1_2454(7) != 3) { + fn_1_ED00(temp_r31->unk57, 4); + } else { + espAttrReset(temp_r31->unk54, 4); + espAttrReset(temp_r31->unk55, 4); + + for (var_r24 = 0; var_r24 < 3; var_r24++) { + espAttrReset(temp_r31->unk5A[var_r24][0], 4); + } + espAttrReset(temp_r31->unk56, 4); + fn_1_EE24(temp_r31->unk57, 4); + temp_f28 = (ABS(temp_r26) + ABS(temp_r25)); + temp_f30 = 0.008f * (temp_f28 * temp_r26); + temp_f29 = 0.008f * (temp_f28 * temp_r25); + fn_1_E99C(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, temp_f30, temp_f29, 0.0f); + } + switch (lbl_1_bss_108) { + case 4: + if (temp_r31->unk1C == 2) { + fn_1_F478(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, lbl_1_bss_F0.unkA, 0); + if ((temp_r22 & 0x100) != 0) { + temp_r23 = fn_1_8D08(temp_r31->unk0); + fn_1_DEF4(temp_r31->unk58, 0, 0); + fn_1_EE68(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 4); + lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk72 = temp_r23; + lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk74 = 0; + lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk76 = 0; + fn_1_E85C(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, temp_r31->unk24.x, 100.0f + temp_r31->unk24.y, temp_r31->unk24.z); + if (temp_r23 == -1) { + lbl_1_bss_F0.unk10[temp_r31->unk58].unk3C[0].unk58.x = temp_r30->x; + lbl_1_bss_F0.unk10[temp_r31->unk58].unk3C[0].unk58.y = temp_r30->y; + lbl_1_bss_F0.unk10[temp_r31->unk58].unk3C[0].unk58.z = temp_r30->z; + } + } + } + case 0: + case 1: + case 2: + case 3: + case 5: + if (temp_r31->unk59 >= 3) { + lbl_1_bss_104 = temp_r31->unk0 + 1; + } + if (temp_r31->unk60 == 0) { + temp_f29 = (180.0 * (atan2((temp_r30->x - temp_r31->unk24.x), (temp_r30->z - temp_r31->unk24.z)) / M_PI)); + temp_f30 = (180.0 * (atan2((temp_r31->unk24.y - temp_r30->y), (temp_r31->unk24.z - temp_r30->z)) / M_PI)); + temp_f30 *= (1.0f - (0.015f * ABS(temp_f30))); + temp_r31->unk3C.x = fn_1_AD40(temp_r31->unk3C.x, temp_f30, 0.5f); + temp_r31->unk3C.y = fn_1_AD40(temp_r31->unk3C.y, temp_f29, 0.5f); + } + break; + case 6: + fn_1_ED44(temp_r31->unk57, 0, 4); + Hu3DModelHookReset(temp_r19); + Hu3DModelAttrSet(arg0->model[1], 1); + temp_r23 = fn_1_DA48(1, 1); + fn_1_DEF4(temp_r23, 0, 0); + fn_1_E7C8(lbl_1_bss_F0.unk6, 0, 0x28002C); + fn_1_E85C(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 20.0f + temp_r31->unk24.x, 100.0f + temp_r31->unk24.y, temp_r31->unk24.z - 25.0f); + fn_1_EC1C(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 2.0f, 2.0f, 1.0f); + fn_1_ED44(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 0x80000000); + fn_1_F024(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 0xFF, 0xFF, 0xFF, 0xFF); + fn_1_F17C(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, lbl_1_bss_F0.unkA, 0x11); + fn_1_F2F8(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, lbl_1_bss_F0.unkA, 0.5f); + case 7: + temp_r31->unk3C.y = fn_1_AD40(temp_r31->unk3C.y, 0.0f, 0.8f); + temp_r31->unk3C.x = 0.0f; + if (fn_1_2454(0x80) == 0x80) { + if (temp_r31->unk59 >= 3) { + var_r28 = 5; + } else { + var_r28 = 6; + } + var_r27 = 0; + var_f31 = 0.0f; + } + break; + } + switch (temp_r31->unk1C) { + case 0: + if ((lbl_1_bss_108 != 0) && (lbl_1_bss_108 < 6)) { + var_r28 = 1; + var_r27 = 0; + var_f31 = 0.0f; + temp_r31->unk62 = (s8)(8.0f * (fn_1_ABB4() / 65536.0f)); + } + break; + case 2: + if (lbl_1_bss_108 == 0) { + var_r28 = 1; + var_r27 = 4; + var_f31 = fn_1_BF38(arg0->motion[1]); + lbl_1_bss_38C[arg0->work[0]] = 1; + } + if ((lbl_1_bss_108 == 4) && ((temp_r22 & 0x100) != 0)) { + HuAudFXPlay(0x556); + var_r28 = 3; + var_r27 = 0; + var_f31 = 0.0f; + } + break; + case 1: + if (CharModelMotionEndCheck(temp_r31->unk1) != 0) { + if (CharModelMotionTimeGet(temp_r31->unk1) <= 0.0f) { + var_r28 = 0; + } else { + var_r28 = 2; + } + var_r27 = 1; + var_f31 = 0.0f; + } + break; + case 3: + if (temp_r31->unk60 != 0) { + temp_r31->unk3C.x = fn_1_AD40(temp_r31->unk3C.x, 0.0f, 0.8f); + temp_r31->unk3C.y = fn_1_AD40(temp_r31->unk3C.y, 0.0f, 0.8f); + if (ABS(temp_r31->unk3C.y) < 10.0f) { + temp_r31->unk3C.y = 0.0f; + var_r28 = 4; + var_r27 = 0; + var_f31 = 0.0f; + } + } else if (CharModelMotionEndCheck(temp_r31->unk1) != 0) { + var_r28 = 2; + var_r27 = 1; + var_f31 = 0.0f; + } + break; + case 4: + if (temp_r31->unk18 < 0) { + temp_r31->unk18 = HuAudCharVoicePlay(temp_r31->unk1, 0x125); + } + if (CharModelMotionEndCheck(temp_r31->unk1) != 0) { + temp_r31->unk3C.y = fn_1_AD40(temp_r31->unk3C.y, 180.0f, 0.8f); + if (ABS(temp_r31->unk3C.y) > 170.0f) { + var_r28 = 2; + var_r27 = 1; + var_f31 = 0.0f; + temp_r31->unk60 = 0; + temp_r31->unk18 = -1; + } + } else { + temp_r31->unk3C.y = 0.0f; + } + break; + case 5: + case 6: + break; + } + if (var_r28 != temp_r31->unk1C) { + temp_r31->unk1C = var_r28; + CharModelMotionShiftSet(temp_r31->unk1, arg0->motion[temp_r31->unk1C], var_f31, 8.0f, (u32) var_r27); + } + omSetTra(arg0, temp_r31->unk24.x, temp_r31->unk24.y, temp_r31->unk24.z); + omSetRot(arg0, temp_r31->unk3C.x, temp_r31->unk3C.y, temp_r31->unk3C.z); +} + +void fn_1_7FE8(omObjData* arg0) { + Vec sp20; + Vec sp14; + s32 sp10; + f32 spC; + s16 sp8; + unkStruct10* var_r30; + Vec* temp_r29; + f32 temp_f0; + f32 temp_f0_2; + f32 temp_f1; + f32 temp_f29; + f32 temp_f30; + f32 var_f28; + s32 var_r28; + unkStruct7* temp_r31; + + temp_r31 = (unkStruct7*)arg0->data; + sp10 = arg0->model[0]; + sp8 = temp_r31->unk1C; + temp_r31->unkE = temp_r31->unk10 = 0; + temp_r29 = fn_1_CCCC(temp_r31->unk57, 0); + sp20.x = sp20.y = sp20.z = 0.0f; + switch (lbl_1_bss_108) { /* irregular */ + case 2: + if (temp_r31->unk61 == 0) { + var_r30 = &lbl_1_bss_10C[0]; + + for (var_r28 = 0; var_r28 < 8; var_r28++, var_r30++) { + if (var_r30->unk2 == 0) break; + sp20.x += var_r30->unkC.x; + sp20.y += var_r30->unkC.y; + sp20.z += var_r30->unkC.z; + } + sp20.x /= var_r28; + sp20.y /= var_r28; + sp20.z /= var_r28; + } else { + var_r30 = &lbl_1_bss_10C[temp_r31->unk62]; + if (var_r30->unk2 != 0) { + sp20.x = var_r30->unkC.x; + sp20.y = var_r30->unkC.y; + sp20.z = var_r30->unkC.z; + } else { + sp20.x = 0.0f; + sp20.y = 800.0f; + sp20.z = -1200.0f; + } + } + break; + case 3: + temp_r31->unk62 = 0xFFU; + temp_r31->unk64 = (0x28 - (temp_r31->unk6 * 10)); + case 4: + sp20.x = temp_r29->x; + sp20.y = temp_r29->y; + sp20.z = temp_r29->z; + if (temp_r31->unk64 != 0) { + temp_r31->unk64--; + } + if ((temp_r31->unk64 == 0)) { + if (((s32)((0x30 - (temp_r31->unk6 * 8)) * (fn_1_ABB4() / 65536.0f)) == 0)) { + temp_r31->unk62 = lbl_1_bss_106; + } + } + if (temp_r31->unk62 != 0xFF) { + var_r30 = &lbl_1_bss_10C[temp_r31->unk62]; + sp20.x = var_r30->unkC.x; + sp20.y = var_r30->unkC.y; + sp20.z = var_r30->unkC.z; + temp_f29 = 100.0f * (0.5f * (4 - temp_r31->unk6)); + temp_f29 = 20.0f + (temp_f29 * (fn_1_ABB4() / 65536.0f)); + temp_f30 = ((var_r30->unkC.z - temp_r29->z) * (var_r30->unkC.z - temp_r29->z)) + (((var_r30->unkC.x - temp_r29->x) * (var_r30->unkC.x - temp_r29->x)) + ((var_r30->unkC.y - temp_r29->y) * (var_r30->unkC.y - temp_r29->y))); + if ((sqrtf(temp_f30) < temp_f29) && ((s32)((0x20 - (temp_r31->unk6 * 8)) * (fn_1_ABB4() / 65536.0f)) == 0)) { + temp_r31->unkE = (temp_r31->unkE | 0x100); + } + } + break; + default: + sp20.x = 0.0f; + sp20.y = 800.0f; + sp20.z = -1200.0f; + break; + } + if (temp_r31->unk63 == 0) { + temp_f29 = 100.0f * (0.5f * (4 - temp_r31->unk6)); + sp20.x += (temp_f29 * ((fn_1_ABB4() - 0x8000) / 32768.0f)); + sp20.y += (temp_f29 * ((fn_1_ABB4() - 0x8000) / 32768.0f)); + temp_r31->unk68.x = sp20.x; + temp_r31->unk68.y = sp20.y; + temp_r31->unk68.z = sp20.z; + sp14.x = temp_r31->unk68.x - temp_r29->x; + sp14.y = temp_r31->unk68.y - temp_r29->y; + sp14.z = temp_r31->unk68.z - temp_r29->z; + fn_1_B378(&sp14); + temp_r31->unkA = (sp14.x * ((temp_r31->unk6 * 6) + 0x18)); + temp_r31->unkC = (sp14.y * ((temp_r31->unk6 * 6) + 0x18)); + temp_r31->unk63 = ((s32)(((4 - temp_r31->unk6) * 8) * (fn_1_ABB4() / 65536.0f)) + 8); + } + temp_r31->unk63--; +} \ No newline at end of file From 3ec127d86d8f24ddab3760f8cf7692a805c84c73 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Thu, 11 Jul 2024 22:56:33 -0400 Subject: [PATCH 2/2] match msmmem.c, m409/player.c progress --- configure.py | 2 +- include/REL/m409Dll.h | 60 ++++++--- include/msm/msmmem.h | 5 + src/REL/m409Dll/player.c | 280 +++++++++++++++++++++++++++++++++++++-- src/msm/msmmem.c | 136 +++++++++++++++++++ 5 files changed, 450 insertions(+), 33 deletions(-) create mode 100644 include/msm/msmmem.h create mode 100644 src/msm/msmmem.c diff --git a/configure.py b/configure.py index 774a1a68..ad576a8c 100644 --- a/configure.py +++ b/configure.py @@ -773,7 +773,7 @@ config.libs = [ "host": False, "objects": [ Object(NonMatching, "msm/msmsys.c"), - Object(NonMatching, "msm/msmmem.c"), + Object(Matching, "msm/msmmem.c"), Object(Matching, "msm/msmfio.c"), Object(NonMatching, "msm/msmmus.c"), Object(NonMatching, "msm/msmse.c"), diff --git a/include/REL/m409Dll.h b/include/REL/m409Dll.h index 40d50c7f..c1891a03 100644 --- a/include/REL/m409Dll.h +++ b/include/REL/m409Dll.h @@ -7,7 +7,7 @@ extern s32 rand8(void); // types typedef void (*m409Func6)(ModelData*, struct _unkStruct6*, Mtx); -typedef void (*m409PlayerFuncUnk)(void); +typedef void (*m409PlayerFunc8)(struct _unkStruct8*); typedef struct _unkStruct { f32 zoom; @@ -135,19 +135,33 @@ typedef struct _unkStruct7 { } unkStruct7; // sizeof 0x74 typedef struct _unkStruct8Sub { - char unk0[0x58]; + Vec unk0; + char unkC[0xC]; + f32 unk18; + f32 unk1C; + f32 unk20; + char unk24[0x10]; + u32 unk34; + char unk38[0x20]; Vec unk58; - char unk64[0xC]; - u16 unk70; + Vec unk64; + s16 unk70; s16 unk72; - s16 unk74; - s16 unk76; - char unk78[0x18]; + union { + struct { + s16 unk74; + s16 unk76; + }; + f32 unk74f; + }; + f32 unk78; + f32 unk7C; + char unk80[0x10]; } unkStruct8Sub; // sizeof 0x90 typedef struct _unkStruct8 { char unk0[0x30]; - m409PlayerFuncUnk unk30; + m409PlayerFunc8 unk30; char unk34[0x8]; unkStruct8Sub* unk3C; char unk40[0x60]; @@ -163,13 +177,19 @@ typedef struct _unkStruct9 { } unkStruct9; typedef struct _unkStruct10 { - char unk0[0x2]; + u8 unk0; + u8 unk1; u8 unk2; u8 unk3; char unk4[0x8]; Vec unkC; - char unk18[0x38]; -} unkStruct10; // sizeof 0x10 + Vec unk18; + Vec unk24; + Vec unk30; + Vec unk3C; + s8 unk48; + char unk49[0x7]; +} unkStruct10; // sizeof 0x50 // bss // player.c @@ -243,9 +263,9 @@ extern f32 fn_1_4120(f32, f32, f32, f32); extern void fn_1_417C(void); extern void fn_1_44F0(s16, f32, f32, f32, s8, s16); extern void fn_1_4FFC(s16, f32, f32, f32, s16); -extern void fn_1_5408(ModelData*, struct _unkStruct6*, Mtx); -extern void fn_1_55E0(ModelData*, struct _unkStruct6*, Mtx); -extern void fn_1_57DC(ModelData*, struct _unkStruct6*, Mtx); +extern void fn_1_5408(ModelData*, unkStruct6*, Mtx); +extern void fn_1_55E0(ModelData*, unkStruct6*, Mtx); +extern void fn_1_57DC(ModelData*, unkStruct6*, Mtx); extern unkStruct5* fn_1_58E0(s16, Vec*, Vec*, f32, GXColor*); extern s16 fn_1_5A18(AnimData*, s16, f32, s16, s16); extern void fn_1_5F5C(s16); @@ -261,18 +281,22 @@ extern void fn_1_6900(void); extern void fn_1_6928(omObjData*); extern void fn_1_7344(omObjData*); extern void fn_1_7FE8(omObjData*); -// ... -extern void fn_1_8838(void); +extern void fn_1_8838(unkStruct8*); extern s8 fn_1_8D08(u8); -extern void fn_1_8D6C(void); +extern void fn_1_8D6C(unkStruct8*); extern void fn_1_91C0(omObjData*); +extern void fn_1_962C(omObjData*); +// ... +extern s8 fn_1_A9C0(Vec*, f32*); extern s32 fn_1_ABB4(void); extern f32 fn_1_AD40(f32, f32, f32); extern void fn_1_B378(Vec*); +extern f32 fn_1_B6A4(Vec*, unkStruct8Sub*, Vec*); +extern f32 fn_1_B9E0(Vec*, unkStruct8Sub*, Vec*, Vec*, Vec*); extern f32 fn_1_BF38(s16); extern void fn_1_BF88(s32, s32); extern void fn_1_C0C0(void); -extern Vec* fn_1_CCCC(s16, s16); +extern unkStruct8Sub* fn_1_CCCC(s16, s16); extern s16 fn_1_DA48(s32, s32); extern void fn_1_DEF4(s16, s32, s32); extern void fn_1_DF20(s32, s32, s32); diff --git a/include/msm/msmmem.h b/include/msm/msmmem.h new file mode 100644 index 00000000..7deab41a --- /dev/null +++ b/include/msm/msmmem.h @@ -0,0 +1,5 @@ +#include "dolphin/types.h" + +void msmMemFree(void*); +void* msmMemAlloc(s32); +void msmMemInit(void*, u32); \ No newline at end of file diff --git a/src/REL/m409Dll/player.c b/src/REL/m409Dll/player.c index 0cd3d0f3..ed6981b7 100644 --- a/src/REL/m409Dll/player.c +++ b/src/REL/m409Dll/player.c @@ -6,6 +6,7 @@ #include "game/chrman.h" #include "game/gamework_data.h" #include "game/pad.h" +#include "game/hsfmotion.h" // bss omObjData* lbl_1_bss_3A0[4]; @@ -86,6 +87,7 @@ void fn_1_6928(omObjData* arg0) { "test11_tex_we-itemhook-r", "test11_tex_we-itemhook-r", "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", "test11_tex_we-itemhook-r" }; unkStruct7* var_r31; @@ -203,7 +205,7 @@ void fn_1_7344(omObjData* arg0) { s16 var_r28; s32 var_r24; s32 temp_r23; - Vec* temp_r30; + unkStruct8Sub* temp_r30; unkStruct7* temp_r31; var_f31 = 0.0f; @@ -255,9 +257,9 @@ void fn_1_7344(omObjData* arg0) { lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk76 = 0; fn_1_E85C(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, temp_r31->unk24.x, 100.0f + temp_r31->unk24.y, temp_r31->unk24.z); if (temp_r23 == -1) { - lbl_1_bss_F0.unk10[temp_r31->unk58].unk3C[0].unk58.x = temp_r30->x; - lbl_1_bss_F0.unk10[temp_r31->unk58].unk3C[0].unk58.y = temp_r30->y; - lbl_1_bss_F0.unk10[temp_r31->unk58].unk3C[0].unk58.z = temp_r30->z; + lbl_1_bss_F0.unk10[temp_r31->unk58].unk3C[0].unk58.x = temp_r30->unk0.x; + lbl_1_bss_F0.unk10[temp_r31->unk58].unk3C[0].unk58.y = temp_r30->unk0.y; + lbl_1_bss_F0.unk10[temp_r31->unk58].unk3C[0].unk58.z = temp_r30->unk0.z; } } } @@ -270,8 +272,8 @@ void fn_1_7344(omObjData* arg0) { lbl_1_bss_104 = temp_r31->unk0 + 1; } if (temp_r31->unk60 == 0) { - temp_f29 = (180.0 * (atan2((temp_r30->x - temp_r31->unk24.x), (temp_r30->z - temp_r31->unk24.z)) / M_PI)); - temp_f30 = (180.0 * (atan2((temp_r31->unk24.y - temp_r30->y), (temp_r31->unk24.z - temp_r30->z)) / M_PI)); + temp_f29 = (180.0 * (atan2((temp_r30->unk0.x - temp_r31->unk24.x), (temp_r30->unk0.z - temp_r31->unk24.z)) / M_PI)); + temp_f30 = (180.0 * (atan2((temp_r31->unk24.y - temp_r30->unk0.y), (temp_r31->unk24.z - temp_r30->unk0.z)) / M_PI)); temp_f30 *= (1.0f - (0.015f * ABS(temp_f30))); temp_r31->unk3C.x = fn_1_AD40(temp_r31->unk3C.x, temp_f30, 0.5f); temp_r31->unk3C.y = fn_1_AD40(temp_r31->unk3C.y, temp_f29, 0.5f); @@ -390,7 +392,7 @@ void fn_1_7FE8(omObjData* arg0) { f32 spC; s16 sp8; unkStruct10* var_r30; - Vec* temp_r29; + unkStruct8Sub* temp_r29; f32 temp_f0; f32 temp_f0_2; f32 temp_f1; @@ -437,9 +439,9 @@ void fn_1_7FE8(omObjData* arg0) { temp_r31->unk62 = 0xFFU; temp_r31->unk64 = (0x28 - (temp_r31->unk6 * 10)); case 4: - sp20.x = temp_r29->x; - sp20.y = temp_r29->y; - sp20.z = temp_r29->z; + sp20.x = temp_r29->unk0.x; + sp20.y = temp_r29->unk0.y; + sp20.z = temp_r29->unk0.z; if (temp_r31->unk64 != 0) { temp_r31->unk64--; } @@ -455,7 +457,7 @@ void fn_1_7FE8(omObjData* arg0) { sp20.z = var_r30->unkC.z; temp_f29 = 100.0f * (0.5f * (4 - temp_r31->unk6)); temp_f29 = 20.0f + (temp_f29 * (fn_1_ABB4() / 65536.0f)); - temp_f30 = ((var_r30->unkC.z - temp_r29->z) * (var_r30->unkC.z - temp_r29->z)) + (((var_r30->unkC.x - temp_r29->x) * (var_r30->unkC.x - temp_r29->x)) + ((var_r30->unkC.y - temp_r29->y) * (var_r30->unkC.y - temp_r29->y))); + temp_f30 = ((var_r30->unkC.z - temp_r29->unk0.z) * (var_r30->unkC.z - temp_r29->unk0.z)) + (((var_r30->unkC.x - temp_r29->unk0.x) * (var_r30->unkC.x - temp_r29->unk0.x)) + ((var_r30->unkC.y - temp_r29->unk0.y) * (var_r30->unkC.y - temp_r29->unk0.y))); if ((sqrtf(temp_f30) < temp_f29) && ((s32)((0x20 - (temp_r31->unk6 * 8)) * (fn_1_ABB4() / 65536.0f)) == 0)) { temp_r31->unkE = (temp_r31->unkE | 0x100); } @@ -474,13 +476,263 @@ void fn_1_7FE8(omObjData* arg0) { temp_r31->unk68.x = sp20.x; temp_r31->unk68.y = sp20.y; temp_r31->unk68.z = sp20.z; - sp14.x = temp_r31->unk68.x - temp_r29->x; - sp14.y = temp_r31->unk68.y - temp_r29->y; - sp14.z = temp_r31->unk68.z - temp_r29->z; + sp14.x = temp_r31->unk68.x - temp_r29->unk0.x; + sp14.y = temp_r31->unk68.y - temp_r29->unk0.y; + sp14.z = temp_r31->unk68.z - temp_r29->unk0.z; fn_1_B378(&sp14); temp_r31->unkA = (sp14.x * ((temp_r31->unk6 * 6) + 0x18)); temp_r31->unkC = (sp14.y * ((temp_r31->unk6 * 6) + 0x18)); temp_r31->unk63 = ((s32)(((4 - temp_r31->unk6) * 8) * (fn_1_ABB4() / 65536.0f)) + 8); } temp_r31->unk63--; +} + +void fn_1_8838(unkStruct8* arg0) { + Vec sp18; + Vec spC; + f32 sp8; + f32 temp_f30; + f32 temp_f31; + unkStruct8Sub* temp_r30; + Vec* var_r26; + s32 var_r28; + unkStruct10* temp_r29; + unkStruct8Sub* temp_r31; + + temp_r30 = &arg0->unk3C[0]; + if (temp_r30->unk0.x < -600.0f) { + temp_r30->unk0.x = -600.0f; + } + if (temp_r30->unk0.x > 600.0f) { + temp_r30->unk0.x = 600.0f; + } + if (temp_r30->unk0.y < 350.0f) { + temp_r30->unk0.y = 350.0f; + } + if (temp_r30->unk0.y > 1200.0f) { + temp_r30->unk0.y = 1200.0f; + } + sp8 = 75.0f; + spC = temp_r30->unk0; + var_r26 = &spC; + var_r28 = fn_1_A9C0(var_r26, &sp8); + temp_r31 = &arg0->unk3C[1]; + if (var_r28 == -1) { + if (temp_r31->unk70 != -1) { + temp_r31->unk70 = -1; + temp_r31->unk74f = 0.0f; + temp_r31->unk58.x = temp_r31->unk0.x; + temp_r31->unk58.y = temp_r31->unk0.y; + temp_r31->unk58.z = temp_r31->unk0.z; + temp_r31->unk78 = temp_r31->unk18; + } + if (temp_r31->unk74f < 90.0f) { + temp_r31->unk74f += 9.0f; + if (temp_r31->unk74f > 90.0f) { + temp_r31->unk74f = 90.0f; + } + temp_f31 = sin((M_PI * temp_r31->unk74f) / 180.0); + temp_f30 = cos((M_PI * temp_r31->unk74f) / 180.0); + sp18.x = temp_r30->unk0.x - temp_r31->unk58.x; + sp18.y = temp_r30->unk0.y - temp_r31->unk58.y; + sp18.z = temp_r30->unk0.z - temp_r31->unk58.z; + temp_r31->unk0.x = (temp_r31->unk58.x + (sp18.x * temp_f31)); + temp_r31->unk0.y = (temp_r31->unk58.y + (sp18.y * temp_f31)); + temp_r31->unk0.z = (temp_r31->unk58.z + (sp18.z * temp_f31)); + temp_r31->unk18 = (0.001f + (temp_r31->unk78 * temp_f30)); + temp_r31->unk1C = (0.001f + (temp_r31->unk78 * temp_f30)); + temp_r31->unk20 = 1.0f; + return; + } + temp_r31->unk34 |= 4; + temp_r31->unk0.x = temp_r30->unk0.x; + temp_r31->unk0.y = temp_r30->unk0.y; + temp_r31->unk0.z = temp_r30->unk0.z; + return; + } + temp_r29 = &lbl_1_bss_10C[var_r28]; + if (temp_r31->unk70 != var_r28) { + temp_r31->unk70 = var_r28; + temp_r31->unk74f = 0.0f; + temp_r31->unk58.x = temp_r31->unk0.x; + temp_r31->unk58.y = temp_r31->unk0.y; + temp_r31->unk58.z = temp_r31->unk0.z; + temp_r31->unk78 = temp_r31->unk18; + temp_r31->unk7C = (2.5f - temp_r31->unk18); + } + if (temp_r31->unk74f < 90.0f) { + temp_r31->unk74f += 9.0f; + if (temp_r31->unk74f > 90.0f) { + temp_r31->unk74f = 90.0f; + } + temp_f31 = sin((M_PI * temp_r31->unk74f) / 180.0); + sp18.x = temp_r29->unkC.x - temp_r31->unk58.x; + sp18.y = temp_r29->unkC.y - temp_r31->unk58.y; + sp18.z = temp_r29->unkC.z - temp_r31->unk58.z; + temp_r31->unk0.x = (temp_r31->unk58.x + (sp18.x * temp_f31)); + temp_r31->unk0.y = (temp_r31->unk58.y + (sp18.y * temp_f31)); + temp_r31->unk0.z = (temp_r31->unk58.z + (sp18.z * temp_f31)); + temp_r31->unk18 = (temp_r31->unk78 + (temp_r31->unk7C * temp_f31)); + temp_r31->unk1C = (temp_r31->unk78 + (temp_r31->unk7C * temp_f31)); + temp_r31->unk20 = 1.0f; + } else { + temp_r31->unk0.x = temp_r29->unkC.x; + temp_r31->unk0.y = temp_r29->unkC.y; + temp_r31->unk0.z = temp_r29->unkC.z; + } + temp_r31->unk34 &= ~4; +} + +s8 fn_1_8D08(u8 arg0) { + unkStruct7* data; + unkStruct8Sub* var_r30; + + data = (unkStruct7*)lbl_1_bss_3A0[arg0]->data; + var_r30 = fn_1_CCCC(data->unk57, 1); + return var_r30->unk70; +} + +void fn_1_8D6C(unkStruct8* arg0) { + Vec sp20; + Vec sp14; + Vec sp8; + s32 temp_r28; + s32 var_r27; + f32 var_f31; + unkStruct10* var_r29; + unkStruct7* temp_r30; + unkStruct8Sub* temp_r31; + + temp_r31 = &arg0->unk3C[0]; + if ((temp_r31->unk34 & 4) == 0) { + temp_r28 = temp_r31->unk72; + if (temp_r31->unk74 == 0) { + if (temp_r28 == -1) { + sp8.x = temp_r31->unk58.x - temp_r31->unk0.x; + sp8.y = temp_r31->unk58.y - temp_r31->unk0.y; + sp8.z = temp_r31->unk58.z - temp_r31->unk0.z; + fn_1_B378(&sp8); + temp_r31->unk64.x = sp8.x; + temp_r31->unk64.y = sp8.y; + temp_r31->unk64.z = sp8.z; + } + temp_r31->unk74 = 0x10; + } + if (temp_r31->unk76 == 0) { + if (temp_r28 != -1) { + var_r29 = &lbl_1_bss_10C[temp_r28]; + if ((var_r29->unk2 != 0) && (var_r29->unk2 <= 4U)) { + sp8.x = var_r29->unkC.x - temp_r31->unk0.x; + sp8.y = var_r29->unkC.y - temp_r31->unk0.y; + sp8.z = var_r29->unkC.z - temp_r31->unk0.z; + fn_1_B378(&sp8); + temp_r31->unk64.x = sp8.x; + temp_r31->unk64.y = sp8.y; + temp_r31->unk64.z = sp8.z; + } + } + sp8.x = 100.0f * (2.0f * temp_r31->unk64.x); + sp8.y = 100.0f * (2.0f * temp_r31->unk64.y); + sp8.z = 100.0f * (2.0f * temp_r31->unk64.z); + for (var_r29 = &lbl_1_bss_10C[0], var_r27 = 0; var_r27 < 8; var_r27++, var_r29++) { + if ((Hu3DModelAttrGet(var_r29->unk0) & 1) == 0) { + var_f31 = fn_1_B6A4(&var_r29->unkC, temp_r31, &sp8); + if (!(var_f31 >= 2250.0f) && (var_r29->unk2 == 3)) { + var_r29->unk2 = 4; + temp_r31->unk34 |= 4; + temp_r30 = (unkStruct7*)lbl_1_bss_3A0[temp_r31->unk70]->data; + if (var_r29->unk48 == lbl_1_bss_106) { + espAttrSet(temp_r30->unk5A[temp_r30->unk59][0], 4); + espAttrReset(temp_r30->unk5A[temp_r30->unk59][1], 4); + HuAudFXPlay(9); + temp_r30->unk59++; + omVibrate(temp_r30->unk0, 0xC, 6, 6); + if (temp_r30->unk59 < 3U) { + temp_r30->unk60++; + } + } else if (temp_r30->unk59 != 0) { + espAttrReset(temp_r30->unk5A[temp_r30->unk59][0], 4); + espAttrSet(temp_r30->unk5A[temp_r30->unk59][1], 4); + } + } + } + } + sp20.x = -290.0f; + sp20.y = 350.0f; + sp20.z = -1200.0f; + var_f31 = fn_1_B9E0(&sp20, temp_r31, &sp8, &sp14, &sp8); + if (var_f31 <= 100.0f) { + temp_r31->unk0.x = sp14.x; + temp_r31->unk0.y = sp14.y; + temp_r31->unk0.z = sp14.z; + temp_r31->unk64.x = sp8.x; + temp_r31->unk64.y = sp8.y; + temp_r31->unk64.z = sp8.z; + temp_r31->unk76 = 1; + return; + } + } + temp_r31->unk0.x = (temp_r31->unk0.x + (200.0f * temp_r31->unk64.x)); + temp_r31->unk0.y = (temp_r31->unk0.y + (200.0f * temp_r31->unk64.y)); + temp_r31->unk0.z = (temp_r31->unk0.z + (200.0f * temp_r31->unk64.z)); + if (--temp_r31->unk74 == 0) { + temp_r31->unk34 |= 4; + } + } +} + +void fn_1_91C0(omObjData* arg0) { + s32 var_r28; + s32 var_r30; + unkStruct10* var_r31; + + lbl_1_bss_108 = 0; + var_r28 = Hu3DModelCreateFile(0x20000); + arg0->model[0] = var_r28; + Hu3DModelAttrSet(var_r28, 0x40000001); + + for (var_r30 = 0; var_r30 < 3; var_r30++) { + arg0->motion[var_r30] = Hu3DJointMotion(var_r28, HuDataSelHeapReadNum(var_r30 + 0x28000F, 0x10000000, HEAP_DATA)); + } + Hu3DMotionSet(var_r28, arg0->motion[0]); + omSetTra(arg0, 419.99997f, 250.0f, -180.0f); + omSetRot(arg0, 0.0f, -30.0f, 0.0f); + + for (var_r30 = 0; var_r30 < 4; var_r30++) { + arg0->work[var_r30] = 0; + } + + for (var_r30 = 0; var_r30 < 8; var_r30++) { + var_r28 = Hu3DModelCreateFile(var_r30 + 0x28001B); + arg0->model[var_r30 + 1] = var_r28; + Hu3DModelAttrSet(var_r28, 1); + } + lbl_1_bss_104 = 0; + + + for (var_r31 = lbl_1_bss_10C, var_r30 = 0; var_r30 < 8; var_r30++, var_r31++) { + var_r28 = Hu3DModelCreateFile(var_r30 + 0x280013); + var_r31->unk0 = var_r28; + Hu3DModelLayerSet(var_r28, 3); + var_r31->unkC.x = -400.0f + (100.0f * var_r30); + var_r31->unkC.y = 300.0f + (100.0f * var_r30); + var_r31->unkC.z = -1200.0f; + Hu3DModelPosSet(var_r28, var_r31->unkC.x, var_r31->unkC.y, var_r31->unkC.z); + var_r31->unk2 = var_r31->unk3 = 0; + var_r31->unk18.x = var_r31->unk18.y = var_r31->unk18.z = 0.0f; + var_r31->unk24.x = var_r31->unk24.y = var_r31->unk24.z = 1.0f; + var_r31->unk3C.x = var_r31->unk3C.y = var_r31->unk3C.z = 0.0f; + var_r31->unk30.x = var_r31->unkC.x; + var_r31->unk30.y = var_r31->unkC.y; + var_r31->unk30.z = var_r31->unkC.z; + var_r31->unk48 = var_r30; + fn_1_DEF4((var_r31->unk1 = fn_1_DA48(1, 1)), 0, 0); + fn_1_E2A8(lbl_1_bss_F0.unk6, 0, var_r30 + 0x280023, 0x40, 0x40); + fn_1_EC1C(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 2.0f, 2.0f, 1.0f); + fn_1_F024(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 0xFF, 0xFF, 0xFF, 0xA0); + fn_1_ED44(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 0x40000004); + fn_1_F17C(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, lbl_1_bss_F0.unkA, 0x11); + fn_1_F2F8(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, lbl_1_bss_F0.unkA, 1.0f); + } + arg0->func = fn_1_962C; } \ No newline at end of file diff --git a/src/msm/msmmem.c b/src/msm/msmmem.c new file mode 100644 index 00000000..b89434a0 --- /dev/null +++ b/src/msm/msmmem.c @@ -0,0 +1,136 @@ +#include "msm/msmmem.h" + +typedef struct _unkStruct { + struct _unkStruct* prev; + struct _unkStruct* next; + u32 unk8; + u32 unkC; + void* unk10; + void* unk14; + char unk18[0x8]; +} unkStruct; + +typedef struct _unkMemStruct { + unkStruct* unk0; + u32 unk4; + unkStruct* unk8; + unkStruct unkC; +} unkMemStruct; + +static unkMemStruct mem; + +void msmMemFree(void* arg0) { + unkStruct* temp_r6; + unkStruct* temp_r7; + unkStruct* temp_r8; + unkStruct* temp_r5; + unkStruct* temp; + + temp = arg0; + + temp_r6 = &temp[-1]; + temp_r7 = temp_r6->prev; + temp_r8 = temp_r6->next; + if (mem.unk0 > temp_r6 || ((u32)mem.unk0 + (u32)mem.unk4) <= (u32)temp_r6) { + return; + } + + if ((temp_r7->next != temp_r6) || (temp_r6->unk10 != arg0) || (temp_r8 && (temp_r8->prev != temp_r6))) { + return; + } + + temp_r7->unkC += temp_r6->unk8 + temp_r6->unkC; + temp_r7->next = temp_r8; + temp_r5 = mem.unk8; + if ((temp_r5 == temp_r6) || (temp_r5->unkC < temp_r7->unkC)) { + mem.unk8 = temp_r7; + } + if (temp_r8) { + temp_r8->prev = temp_r7; + if (mem.unk8->unkC < temp_r8->unkC) { + mem.unk8 = temp_r8; + } + } +} + +void* msmMemAlloc(s32 arg0) { + unkMemStruct* memC; + s32 temp_r0; + u32 var_r5; + u32 var_r7; + unkStruct* temp_r5; + unkStruct* var_r8; + unkStruct* temp_r9; + unkStruct* temp_r6; + unkStruct* temp_r4; + + var_r7 = arg0 + 0x20; + temp_r0 = var_r7 & 0x1F; + if (temp_r0 != 0) { + var_r7 += 0x20 - temp_r0; + } + if (mem.unk8->unkC >= var_r7) { + var_r8 = mem.unk8; + } else { + var_r8 = &mem.unkC; + + do { + if (var_r8->unkC >= var_r7) break; + var_r8 = var_r8->next; + } while (var_r8); + if (!var_r8) { + return NULL; + } + } + + var_r5 = var_r8->unk8; + if (var_r5 != 0) { + var_r5 -= 0x20; + } + temp_r5 = (void*)((u32)var_r8->unk10 + var_r5); + temp_r9 = var_r8->next; + if ((mem.unk0 > temp_r5) || ((void*)((u32)mem.unk0 + (u32)mem.unk4) <= temp_r5)) { + return NULL; + } + temp_r5->unk8 = var_r7; + temp_r5->unkC = var_r8->unkC - var_r7; + temp_r5->unk10 = (temp_r5 + 1); + temp_r5->prev = var_r8; + temp_r5->next = temp_r9; + mem.unk8 = temp_r5; + var_r8->unkC = 0; + var_r8->next = temp_r5; + if (temp_r9) { + temp_r9->prev = temp_r5; + if (mem.unk8->unkC < temp_r9->unkC) { + mem.unk8 = temp_r9; + } + } + return temp_r5->unk10; +} + +void msmMemInit(void* arg0, u32 arg1) { + unkStruct* temp_r7; + s32 temp; + + temp = (s32)arg0 & 0x1F; + switch (temp) { + default: + temp = 0x20 - temp; + break; + case 0: + temp = 0; + break; + } + + mem.unk0 = (void*)((s32)arg0 + temp); + temp = (s32)arg0 + arg1; + mem.unk4 = ((temp - (s32)mem.unk0) & ~0x1F); + temp_r7 = &mem.unkC; + temp_r7->unk8 = 0; + temp_r7->unkC = mem.unk4; + temp_r7->unk10 = mem.unk0; + temp_r7->prev = NULL; + temp_r7->next = NULL; + mem.unk8 = &mem.unkC; +} \ No newline at end of file