From e1b79b3ef74eceda947d2ad1e6546f791cfc8adc Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 25 May 2024 20:48:47 -0400 Subject: [PATCH 01/10] start m440dll --- include/REL/m440Dll.h | 59 ++++++++ src/REL/m440Dll/main.c | 297 +++++++++++++++++++++++++++++++++++++++++ src/REL/m446Dll/main.c | 2 +- 3 files changed, 357 insertions(+), 1 deletion(-) create mode 100644 include/REL/m440Dll.h create mode 100644 src/REL/m440Dll/main.c diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h new file mode 100644 index 00000000..5580cf50 --- /dev/null +++ b/include/REL/m440Dll.h @@ -0,0 +1,59 @@ +#include "dolphin/types.h" + +#include "game/object.h" + +////// TYPES ////// +typedef struct _unkStruct { + f32 zoom; + Vec center; + Vec rot; +} unkStruct; + +typedef struct _unkStruct2 { + s32 unk0; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s32 unkC; +} unkStruct2; + +////// BSS ////// +// object.c +extern omObjData* lbl_1_bss_C0[4]; +// main.c +extern omObjData* lbl_1_bss_6C; +extern omObjData* lbl_1_bss_68; +extern void* lbl_1_bss_64; +extern s16 lbl_1_bss_10[10]; +extern s16 lbl_1_bss_E; +extern u8 lbl_1_bss_B; +extern u8 lbl_1_bss_A; +extern s16 lbl_1_bss_8; +extern s16 lbl_1_bss_6; +extern s16 lbl_1_bss_4; +extern s8 lbl_1_bss_2; +extern s8 lbl_1_bss_0; + +////// DATA ////// +// main.c +extern Vec lbl_1_data_2C; +extern Vec lbl_1_data_38; +extern GXColor lbl_1_data_44; +extern Vec lbl_1_data_54; +extern Vec lbl_1_data_60; +extern Vec lbl_1_data_6C; +extern unkStruct lbl_1_data_78[3]; + +////// FUNCTIONS ////// +// main.c +extern void ModuleProlog(void); +extern void fn_1_3C4(omObjData* object); +extern void fn_1_434(omObjData* object); +extern s32 fn_1_4A4(void); +extern s32 fn_1_6C8(void); +extern void fn_1_8F0(omObjData* object); +extern void fn_1_AE0(omObjData* object); +extern s32 fn_1_E14(omObjData* object); +// ... +extern f32 fn_1_93C0(f32, f32, f32); \ No newline at end of file diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c new file mode 100644 index 00000000..d4a0fd77 --- /dev/null +++ b/src/REL/m440Dll/main.c @@ -0,0 +1,297 @@ +#include "REL/m440Dll.h" + +#include "rel_sqrt_consts.h" +#include "math.h" +#include "game/frand.h" +#include "game/hsfman.h" +#include "game/wipe.h" +#include "game/audio.h" +#include "game/objsub.h" +#include "game/minigame_seq.h" +#include "game/sprite.h" + +// prototypes +void fn_1_3C4(omObjData* object); +void fn_1_434(omObjData* object); +s32 fn_1_4A4(void); +s32 fn_1_6C8(void); +void fn_1_8F0(omObjData* object); +void fn_1_AE0(omObjData* object); +s32 fn_1_E14(omObjData* object); +// ... +u8 fn_1_1138(omObjData* object); +void fn_1_2240(omObjData* object); +u16 fn_1_23E4(s32); +void fn_1_2428(s32, s32); +void fn_1_2470(omObjData* object); +void fn_1_4EEC(s32, s32); +f32 fn_1_93C0(f32, f32, f32); +s16 fn_1_956C(AnimData*, s32, f32, s32, s32); +void fn_1_9AB0(s16); +void fn_1_9B94(s16, omObjFunc); +void fn_1_AE08(Process*); +// object.c +void fn_1_F168(void); + +// bss +omObjData* lbl_1_bss_6C; +omObjData* lbl_1_bss_68; +s16 lbl_1_bss_10[10]; +s16 lbl_1_bss_E; +u8 lbl_1_bss_B; +u8 lbl_1_bss_A; +s16 lbl_1_bss_8; +s16 lbl_1_bss_6; +s16 lbl_1_bss_4; +s8 lbl_1_bss_2; +s8 lbl_1_bss_0; + +// data +Vec lbl_1_data_2C = { 800.0f, 1300.0f, 1000.0f }; +Vec lbl_1_data_38 = { 0.0f, 0.0f, 0.0f }; +GXColor lbl_1_data_44 = { 0xFF, 0xFF, 0xFF, 0xFF }; +Vec lbl_1_data_54 = { 1300.0f, 2500.0f, 1300.0f }; +Vec lbl_1_data_60 = { 0.0f, 1.0f, 0.0f }; +Vec lbl_1_data_6C = { 0.0f, 0.0f, -500.0f }; +unkStruct lbl_1_data_78[3] = { + { 1450.0f, { 0.0f, 452.0f, 0.0f }, { 11.0f, -23.0f, 0.0f } }, + { 1700.0f, { 0.0f, 315.0f, 0.0f }, { -2.0f, 0.0f, 0.0f } }, + { 1040.0f, { 200.0f, 21.0f, 0.0f }, { -6.0f, 0.0f, 0.0f } }, +}; + +void ModuleProlog(void) { + Vec sp8; + LightData* var_r30; + Process* var_r31; + + Hu3DLightAllKill(); + lbl_1_bss_E = Hu3DGLightCreateV(&lbl_1_data_2C, &lbl_1_data_38, &lbl_1_data_44); + Hu3DGLightInfinitytSet(lbl_1_bss_E); + var_r30 = &Hu3DGlobalLight[lbl_1_bss_E]; + var_r30->unk_00 |= 0x8000; + sp8.x = sp8.y = sp8.z = 0.0f; + Hu3DGLightPosAimSetV(lbl_1_bss_E, &lbl_1_data_2C, &sp8); + Hu3DShadowCreate(45.0f, 20.0f, 10000.0f); + Hu3DShadowTPLvlSet(0.5f); + Hu3DShadowPosSet(&lbl_1_data_54, &lbl_1_data_60, &lbl_1_data_6C); + HuAudSndGrpSet(0x42); + var_r31 = omInitObjMan(0x32, 0x2000); + omGameSysInit(var_r31); + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 41.5f, 5.0f, 5000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + omAddObjEx(var_r31, 0x7FDA, 0, 0, -1, omOutView); + CRot.x = lbl_1_data_78[0].rot.x; + CRot.y = lbl_1_data_78[0].rot.y; + CRot.z = lbl_1_data_78[0].rot.z; + Center.x = lbl_1_data_78[0].center.x; + Center.y = lbl_1_data_78[0].center.y; + Center.z = lbl_1_data_78[0].center.z; + CZoom = lbl_1_data_78[0].zoom; + omAddObjEx(var_r31, 0x3E8, 0, 0, -1, fn_1_3C4); + lbl_1_bss_6C = omAddObjEx(var_r31, 10, 9, 0, -1, fn_1_8F0); + lbl_1_bss_68 = omAddObjEx(var_r31, 50, 9, 9, -1, fn_1_2470); + Hu3DBGColorSet(0, 0, 0); + fn_1_AE08(var_r31); +} + +void fn_1_3C4(omObjData* object) { + if ((omSysExitReq != 0) || (lbl_1_bss_0 != 0)) { + WipeCreate(2, 0, 0x3C); + object->func = &fn_1_434; + } +} + +void fn_1_434(omObjData* object) { + if ((WipeStatGet() == 0) && (MGSeqDoneCheck() != 0)) { + HuMemDirectFree(lbl_1_bss_64); + fn_1_9AB0(lbl_1_bss_10[0]); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + } +} + +s32 fn_1_4A4(void) { + f32 var_f31; + unkStruct *var_r31; + s32 var_r30; + + var_r31 = &lbl_1_data_78[0]; + var_r30 = 0; + lbl_1_bss_4++; + var_f31 = lbl_1_bss_4 / 120.0f; + if (var_f31 > 1.0f) { + lbl_1_bss_4 = 0; + var_f31 = 1.0f; + var_r30 = 1; + } + + var_f31 = (sin((M_PI * (90.0f * var_f31)) / 180.0) * sin((M_PI * (90.0f * var_f31)) / 180.0)); + CZoom = fn_1_93C0(var_r31[0].zoom, var_r31[1].zoom, var_f31); + Center.x = fn_1_93C0(var_r31[0].center.x, var_r31[1].center.x, var_f31); + Center.y = fn_1_93C0(var_r31[0].center.y, var_r31[1].center.y, var_f31); + Center.z = fn_1_93C0(var_r31[0].center.z, var_r31[1].center.z, var_f31); + CRot.x = fn_1_93C0(var_r31[0].rot.x, var_r31[1].rot.x, var_f31); + CRot.y = fn_1_93C0(var_r31[0].rot.y, var_r31[1].rot.y, var_f31); + CRot.z = fn_1_93C0(var_r31[0].rot.z, var_r31[1].rot.z, var_f31); + return var_r30; +} + +s32 fn_1_6C8(void) { + f32 var_f31; + unkStruct *var_r31; + s32 var_r30; + + var_r31 = &lbl_1_data_78[1]; + var_r30 = 0; + lbl_1_bss_4++; + var_f31 = lbl_1_bss_4 / 120.0f; + if (var_f31 > 1.0f) { + lbl_1_bss_4 = 0; + var_f31 = 1.0f; + var_r30 = 1; + } + + var_f31 = (sin((M_PI * (90.0f * var_f31)) / 180.0) * sin((M_PI * (90.0f * var_f31)) / 180.0)); + CZoom = fn_1_93C0(var_r31[0].zoom, var_r31[1].zoom, var_f31); + Center.x = fn_1_93C0(var_r31[0].center.x, var_r31[1].center.x, var_f31); + Center.y = fn_1_93C0(var_r31[0].center.y, var_r31[1].center.y, var_f31); + Center.z = fn_1_93C0(var_r31[0].center.z, var_r31[1].center.z, var_f31); + CRot.x = fn_1_93C0(var_r31[0].rot.x, var_r31[1].rot.x, var_f31); + CRot.y = fn_1_93C0(var_r31[0].rot.y, var_r31[1].rot.y, var_f31); + CRot.z = fn_1_93C0(var_r31[0].rot.z, var_r31[1].rot.z, var_f31); + return var_r30; +} + +void fn_1_8F0(omObjData* arg0) { + s16 var_r30; + unkStruct2* temp_r31; + AnimData *anim; + + arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x10, 0x10000000); + temp_r31 = (unkStruct2*)arg0->data; + temp_r31->unk0 = 1; + temp_r31->unk4 = -1; + temp_r31->unk8 = -1; + temp_r31->unk6 = 0x12C; + temp_r31->unkA = 0; + temp_r31->unkC = -1; + + for (var_r30 = 1; var_r30 < 4; var_r30++) { + lbl_1_bss_10[var_r30] = Hu3DModelCreate(HuDataSelHeapReadNum(0x47000A, 0x10000000, HEAP_DATA)); + Hu3DModelAttrSet(lbl_1_bss_10[var_r30], 1); + Hu3DModelAttrSet(lbl_1_bss_10[var_r30], 0x40000002); + Hu3DModelLayerSet(lbl_1_bss_10[var_r30], 7); + Hu3DModelScaleSet(lbl_1_bss_10[var_r30], 3.0f, 3.0f, 3.0f); + } + + anim = HuSprAnimRead(HuDataReadNum(0x47000B, 0x10000000)); + lbl_1_bss_10[0] = fn_1_956C(anim, 0x40, 50.0f, 0x40, 0x40); + fn_1_9B94(lbl_1_bss_10[0], &fn_1_2240); + Hu3DModelLayerSet(lbl_1_bss_10[0], 7); + arg0->func = &fn_1_AE0; +} + +void fn_1_AE0(omObjData* arg0) { + f32 temp_f31; + unkStruct2* temp_r31; + + temp_r31 = arg0->data; + switch (fn_1_23E4(7)) { + case 1: + if (lbl_1_bss_A == 0) { + WipeCreate(1, 0, 0x3C); + lbl_1_bss_A = 1; + } + if (WipeStatGet() != 0) break; + fn_1_2428(7, 2); + break; + case 2: + if (fn_1_E14(arg0) != 0) { + fn_1_2428(7, 3); + } + break; + case 3: + if (temp_r31->unk8 != -1) { + MGSeqParamSet(temp_r31->unk8, 1, ((temp_r31->unk6 + 0x3B) / 60)); + } + if ((temp_r31->unkC < 0) && ((MGSeqStatGet(temp_r31->unk4) & 0x10) != 0)) { + temp_r31->unkC = HuAudSeqPlay(0x49); + } + if (lbl_1_bss_2 == 0) { + if (temp_r31->unkA != 0) { + temp_r31->unkA++; + temp_f31 = (((rand8() << 8) | rand8()) % 361); + Center.x = (lbl_1_data_78[1].center.x + (10.0 * sin((M_PI * temp_f31) / 180.0))); + Center.y = (lbl_1_data_78[1].center.y + (10.0 * cos((M_PI * temp_f31) / 180.0))); + if (temp_r31->unkA > 0x28) { + temp_r31->unkA = 0; + return; + } + } else { + Center.x = lbl_1_data_78[1].center.x; + Center.y = lbl_1_data_78[1].center.y; + Center.z = lbl_1_data_78[1].center.z; + return; + } + } + break; + case 4: + if (fn_1_1138(arg0) != 0) { + fn_1_2428(7, 5); + return; + } + break; + case 5: + lbl_1_bss_0 = 1; + break; + } +} + +s32 fn_1_E14(omObjData* arg0) { + f32 var_f31; + unkStruct* var_r31; + u8 var_r30; + + switch (lbl_1_bss_6) { + case 0: + fn_1_4EEC(7, 1); + fn_1_4EEC(0x18, 8); + HuAudFXPlay(0x70E); + lbl_1_bss_6++; + break; + case 1: + if (++lbl_1_bss_8 > 0x1E) { + fn_1_F168(); + lbl_1_bss_8 = 0; + lbl_1_bss_6++; + } + break; + case 2: + var_r31 = lbl_1_data_78; + var_r30 = 0; + lbl_1_bss_4++; + var_f31 = lbl_1_bss_4 / 120.0f; + if (var_f31 > 1.0f) { + lbl_1_bss_4 = 0; + var_f31 = 1.0f; + var_r30 = 1; + } + var_f31 = (sin((M_PI * (90.0f * var_f31)) / 180.0) * sin((M_PI * (90.0f * var_f31)) / 180.0)); + CZoom = fn_1_93C0(var_r31[0].zoom, var_r31[1].zoom, var_f31); + Center.x = fn_1_93C0(var_r31[0].center.x, var_r31[1].center.x, var_f31); + Center.y = fn_1_93C0(var_r31[0].center.y, var_r31[1].center.y, var_f31); + Center.z = fn_1_93C0(var_r31[0].center.z, var_r31[1].center.z, var_f31); + CRot.x = fn_1_93C0(var_r31[0].rot.x, var_r31[1].rot.x, var_f31); + CRot.y = fn_1_93C0(var_r31[0].rot.y, var_r31[1].rot.y, var_f31); + CRot.z = fn_1_93C0(var_r31[0].rot.z, var_r31[1].rot.z, var_f31); + if (var_r30 != 0) { + lbl_1_bss_8 = 0; + lbl_1_bss_6 = 0; + return 1; + } + break; + } + return 0; +} \ No newline at end of file diff --git a/src/REL/m446Dll/main.c b/src/REL/m446Dll/main.c index 1a4d425b..c7ed352b 100644 --- a/src/REL/m446Dll/main.c +++ b/src/REL/m446Dll/main.c @@ -634,7 +634,7 @@ s32 fn_1_1970(s16 arg0, s32 arg1, s32 arg2, s32 arg3) { } } -const s32 lbl_1_rodata_18[12] = { +static const s32 lbl_1_rodata_18[12] = { 0x180003, 0x180004, 0x180005, 0x180006, 0x180007, 0x180008, 0x180009, 0x18000A, 0x18000B, 0x18000C, 0x18000D, 0 From 448ca4a3c66111b03a2ea62748f968896843dda1 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Wed, 5 Jun 2024 14:07:53 -0400 Subject: [PATCH 02/10] progress on m440/main.c --- include/REL/m440Dll.h | 81 +++++++- src/REL/m440Dll/main.c | 432 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 497 insertions(+), 16 deletions(-) diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index 5580cf50..ad84ee77 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -1,6 +1,7 @@ #include "dolphin/types.h" #include "game/object.h" +extern s32 rand8(void); ////// TYPES ////// typedef struct _unkStruct { @@ -16,27 +17,83 @@ typedef struct _unkStruct2 { s16 unk8; s16 unkA; s32 unkC; + char unk10[0xC]; + s16 unk1C; } unkStruct2; +typedef struct _unkStruct3 { + char unk0[0x34]; + f32 unk34; + char unk38[0x8]; + f32 unk40; +} unkStruct3; + +typedef struct _unkStruct4 { + Vec unk0; + char unkC[0xC]; + f32 unk18; + f32 unk1C; + char unk20[0x4]; + f32 unk24; + f32 unk28; + f32 unk2C; + f32 unk30; + s16 unk34; + s16 unk36; + char unk38[0x10]; + Vec unk48; + Vec unk54; + s16 unk60; + s8 unk62; +} unkStruct4; // sizeof 0x64 + +typedef struct _unkStruct5 { // could be unkStruct3 + s16 unk0; + s16 unk2; + char unk4[0x10]; + s16 unk14; + unkStruct4 *unk18; + char unk1C[0x8]; + GXColor* unk24; // ? +} unkStruct5; + +typedef struct _unkStruct6 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + char unk8[0x18]; + s32 unk20; + char unk24[0x14]; + void (*unk38)(s32); + char unk3C[0x4]; +} unkStruct6; // 0x40 + +typedef void (*m440Func5)(omObjData*, unkStruct5*, Mtx*); + ////// BSS ////// // object.c extern omObjData* lbl_1_bss_C0[4]; // main.c extern omObjData* lbl_1_bss_6C; extern omObjData* lbl_1_bss_68; -extern void* lbl_1_bss_64; +extern unkStruct6* lbl_1_bss_64; +extern s16 lbl_1_bss_60; extern s16 lbl_1_bss_10[10]; extern s16 lbl_1_bss_E; +extern u8 lbl_1_bss_C; extern u8 lbl_1_bss_B; extern u8 lbl_1_bss_A; extern s16 lbl_1_bss_8; extern s16 lbl_1_bss_6; extern s16 lbl_1_bss_4; extern s8 lbl_1_bss_2; +extern s8 lbl_1_bss_1; extern s8 lbl_1_bss_0; ////// DATA ////// // main.c +extern f32 lbl_1_data_0[5]; extern Vec lbl_1_data_2C; extern Vec lbl_1_data_38; extern GXColor lbl_1_data_44; @@ -44,6 +101,8 @@ extern Vec lbl_1_data_54; extern Vec lbl_1_data_60; extern Vec lbl_1_data_6C; extern unkStruct lbl_1_data_78[3]; +// extern s32 lbl_1_data_E4; +// extern s32 lbl_1_data_E8; ////// FUNCTIONS ////// // main.c @@ -55,5 +114,25 @@ extern s32 fn_1_6C8(void); extern void fn_1_8F0(omObjData* object); extern void fn_1_AE0(omObjData* object); extern s32 fn_1_E14(omObjData* object); +extern s32 fn_1_1138(omObjData* object); +extern void fn_1_16D8(void); +extern void fn_1_1708(void); +extern void fn_1_1768(void); +extern s16 fn_1_17CC(void); +extern s16 fn_1_17F4(void); +extern void fn_1_181C(void); +extern u8 fn_1_1890(void); +extern void fn_1_18E0(void); +extern s32 fn_1_1954(void); +extern void fn_1_19B0(void); +extern void fn_1_1CAC(void); +extern void fn_1_2240(omObjData* object, unkStruct5*, Mtx*); +extern u16 fn_1_23E4(u16); +extern void fn_1_2428(u16, u16); +extern void fn_1_2470(omObjData* object); +extern void fn_1_2A74(omObjData* object); +extern void fn_1_2AB4(omObjData* object); +extern void fn_1_2B04(omObjData* object); +extern void fn_1_2CA8(omObjData* object); // ... extern f32 fn_1_93C0(f32, f32, f32); \ No newline at end of file diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index d4a0fd77..8ab1f4de 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -4,6 +4,7 @@ #include "math.h" #include "game/frand.h" #include "game/hsfman.h" +#include "game/hsfmotion.h" #include "game/wipe.h" #include "game/audio.h" #include "game/objsub.h" @@ -11,26 +12,22 @@ #include "game/sprite.h" // prototypes -void fn_1_3C4(omObjData* object); -void fn_1_434(omObjData* object); -s32 fn_1_4A4(void); -s32 fn_1_6C8(void); -void fn_1_8F0(omObjData* object); -void fn_1_AE0(omObjData* object); -s32 fn_1_E14(omObjData* object); -// ... -u8 fn_1_1138(omObjData* object); -void fn_1_2240(omObjData* object); -u16 fn_1_23E4(s32); -void fn_1_2428(s32, s32); -void fn_1_2470(omObjData* object); +void fn_1_2D28(omObjData* object); +void fn_1_33D4(omObjData* object); +void fn_1_3DD8(omObjData* object); +void fn_1_4660(omObjData* object); +u16 fn_1_4EA8(s32); void fn_1_4EEC(s32, s32); +void fn_1_57B4(s32); +void fn_1_5C2C(s16, HsfObject*, unkStruct6*, s32); f32 fn_1_93C0(f32, f32, f32); +unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*); s16 fn_1_956C(AnimData*, s32, f32, s32, s32); void fn_1_9AB0(s16); -void fn_1_9B94(s16, omObjFunc); +void fn_1_9B94(s16, m440Func5); void fn_1_AE08(Process*); // object.c +s16 fn_1_F0FC(void); void fn_1_F168(void); // bss @@ -38,18 +35,22 @@ omObjData* lbl_1_bss_6C; omObjData* lbl_1_bss_68; s16 lbl_1_bss_10[10]; s16 lbl_1_bss_E; +u8 lbl_1_bss_C; u8 lbl_1_bss_B; u8 lbl_1_bss_A; s16 lbl_1_bss_8; s16 lbl_1_bss_6; s16 lbl_1_bss_4; s8 lbl_1_bss_2; +s8 lbl_1_bss_1; s8 lbl_1_bss_0; // data +f32 lbl_1_data_0[5] = { 90.0f, 80.0f, 100.0f, 70.0f, 110.0f }; Vec lbl_1_data_2C = { 800.0f, 1300.0f, 1000.0f }; Vec lbl_1_data_38 = { 0.0f, 0.0f, 0.0f }; GXColor lbl_1_data_44 = { 0xFF, 0xFF, 0xFF, 0xFF }; +Vec lbl_1_data_48 = { 10.0f, 45.0f, 0.0f }; // UNUSED Vec lbl_1_data_54 = { 1300.0f, 2500.0f, 1300.0f }; Vec lbl_1_data_60 = { 0.0f, 1.0f, 0.0f }; Vec lbl_1_data_6C = { 0.0f, 0.0f, -500.0f }; @@ -188,7 +189,7 @@ void fn_1_8F0(omObjData* arg0) { anim = HuSprAnimRead(HuDataReadNum(0x47000B, 0x10000000)); lbl_1_bss_10[0] = fn_1_956C(anim, 0x40, 50.0f, 0x40, 0x40); - fn_1_9B94(lbl_1_bss_10[0], &fn_1_2240); + fn_1_9B94(lbl_1_bss_10[0], fn_1_2240); Hu3DModelLayerSet(lbl_1_bss_10[0], 7); arg0->func = &fn_1_AE0; } @@ -294,4 +295,405 @@ s32 fn_1_E14(omObjData* arg0) { break; } return 0; +} + +s32 fn_1_1138(omObjData* object) { + unkStruct2* sp8; + f32 var_f31; + f32 var_f30; + s16 temp_r29; + u8 var_r28; + unkStruct3* temp_r30; + unkStruct* var_r31; + + sp8 = (unkStruct2*)lbl_1_bss_6C->data; + temp_r29 = fn_1_F0FC(); + temp_r30 = (unkStruct3*)lbl_1_bss_C0[temp_r29]->data; + switch (lbl_1_bss_6) { + case 0: + if (lbl_1_bss_8 == 0) { + Hu3DMotionShiftSet(lbl_1_bss_C0[temp_r29]->model[0], lbl_1_bss_C0[temp_r29]->motion[1], 0.0f, 7.0f, 0x40000001); + temp_r30->unk40 = temp_r30->unk34; + } + lbl_1_bss_8++; + var_f30 = lbl_1_bss_8 / 30.0f; + if (var_f30 >= 1.0f) { + var_f30 = 1.0f; + if (lbl_1_bss_B == 0) { + lbl_1_bss_B = 1; + Hu3DMotionShiftSet(lbl_1_bss_C0[temp_r29]->model[0], lbl_1_bss_C0[temp_r29]->motion[0], 0.0f, 7.0f, 0x40000001); + } + } + temp_r30->unk34 = (temp_r30->unk40 + (var_f30 * (360.0f - temp_r30->unk40))); + var_r31 = &lbl_1_data_78[1]; // could be fn_1_6C8 + var_r28 = 0; + lbl_1_bss_4++; + var_f31 = lbl_1_bss_4 / 120.0f; + if (var_f31 > 1.0f) { + lbl_1_bss_4 = 0; + var_f31 = 1.0f; + var_r28 = 1; + } + var_f31 = (sin((M_PI * (90.0f * var_f31)) / 180.0) * sin((M_PI * (90.0f * var_f31)) / 180.0)); + CZoom = fn_1_93C0(var_r31[0].zoom, var_r31[1].zoom, var_f31); + Center.x = fn_1_93C0(var_r31[0].center.x, var_r31[1].center.x, var_f31); + Center.y = fn_1_93C0(var_r31[0].center.y, var_r31[1].center.y, var_f31); + Center.z = fn_1_93C0(var_r31[0].center.z, var_r31[1].center.z, var_f31); + CRot.x = fn_1_93C0(var_r31[0].rot.x, var_r31[1].rot.x, var_f31); + CRot.y = fn_1_93C0(var_r31[0].rot.y, var_r31[1].rot.y, var_f31); + CRot.z = fn_1_93C0(var_r31[0].rot.z, var_r31[1].rot.z, var_f31); + if (var_r28 != 0) { + lbl_1_bss_8 = 0; + lbl_1_bss_6++; + } + break; + case 1: + Hu3DMotionShiftSet(lbl_1_bss_C0[temp_r29]->model[0], lbl_1_bss_C0[temp_r29]->motion[5], 0.0f, 7.0f, 0); + HuAudSStreamPlay(1); + lbl_1_bss_6++; + lbl_1_bss_8 = 0; + break; + case 2: + if (++lbl_1_bss_8 > 210.0f) { + lbl_1_bss_6 = 0; + return 1; + } + break; + } + return 0; +} + +void fn_1_16D8(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + temp_r31->unk6--; +} + +void fn_1_1708(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + if (temp_r31->unk8 != -1) { + MGSeqParamSet(temp_r31->unk8, 2, -1); + temp_r31->unk8 = -1; + temp_r31->unk6 = 0; + } +} + +void fn_1_1768(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + if (temp_r31->unk8 == -1) { + temp_r31->unk6 = 0x12C; + temp_r31->unk8 = MGSeqCreate(1, 5, -1, -1); + } +} + +s16 fn_1_17CC(void) { + unkStruct2* var_r31; + + var_r31 = (unkStruct2*)lbl_1_bss_6C->data; + return var_r31->unk6; +} + +s16 fn_1_17F4(void) { + unkStruct2* var_r31; + + var_r31 = (unkStruct2*)lbl_1_bss_6C->data; + return var_r31->unk8; +} + +void fn_1_181C(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + if (temp_r31->unk4 == -1) { + temp_r31->unk4 = MGSeqCreate(3, 0); + MGSeqPosSet(temp_r31->unk4, 320.0f, 240.0f); + } +} + +u8 fn_1_1890(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + if (temp_r31->unk4 != -1) { + return MGSeqStatGet(temp_r31->unk4); + } else { + return 0; + } +} + +void fn_1_18E0(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + temp_r31->unk4 = MGSeqCreate(3, 1); + MGSeqPosSet(temp_r31->unk4, 320.0f, 240.0f); + HuAudSeqFadeOut(temp_r31->unkC, 0x64); +} + +s32 fn_1_1954(void) { + unkStruct2* sp8; + + sp8 = (unkStruct2*)lbl_1_bss_6C->data; + if ((lbl_1_bss_2 != 0) || (lbl_1_bss_1 != 0)) { + return 0; + } else { + return 1; + } +} + +void fn_1_19B0(void) { + f32 temp_f29; + f32 var_f28; + f32 var_f27; + f32 temp_f31; + f32 var_f30; + s16 var_r31; + + var_f30 = (((rand8() << 8) | rand8()) % 361); + + for (var_r31 = 1; var_r31 < 4; var_r31++, var_f30+=120.0f) { + temp_f31 = 0.01f * ((((rand8() << 8) | rand8()) % 51) + 50); + temp_f29 = (temp_f31 * (200.0 * sin((M_PI * var_f30) / 180.0))); + var_f28 = (temp_f31 * (200.0 * cos((M_PI * var_f30) / 180.0))); + var_f27 = 0.0f; + Hu3DModelPosSet(lbl_1_bss_10[var_r31], temp_f29, 300.0f + var_f28, var_f27); + temp_f31 = 0.1f * ((((rand8() << 8) | rand8()) % 11) + 25); + Hu3DModelScaleSet(lbl_1_bss_10[var_r31], temp_f31, temp_f31, temp_f31); + Hu3DModelAttrReset(lbl_1_bss_10[var_r31], 1); + Hu3DModelAttrReset(lbl_1_bss_10[var_r31], 0x40000002); + } +} + +void fn_1_1CAC(void) { + s16 var_r31; + + for (var_r31 = 1; var_r31 < 4; var_r31++) { + Hu3DMotionTimeSet(lbl_1_bss_10[var_r31], 0.0f); + Hu3DModelAttrSet(lbl_1_bss_10[var_r31], 1); + Hu3DModelAttrSet(lbl_1_bss_10[var_r31], 0x40000002); + } +} + +void fn_1_1D54(f32 arg8, f32 arg9, f32 argA, s16 arg0, f32 argB, s16 arg1) { + Vec sp30; + Vec sp24; + GXColor sp1E; + f32 temp_f30; + f32 temp_f29; + f32 temp_f31; + s16 var_r30; + unkStruct4* var_r31; + + for (var_r30 = 0; var_r30 < arg0; var_r30++) { + temp_f31 = argB + ((((rand8() << 8) | rand8()) % 11) - 5); + temp_f30 = sin((M_PI * temp_f31) / 180.0); + temp_f29 = cos((M_PI * temp_f31) / 180.0); + sp30.x = arg8 + ((((rand8() << 8) | rand8()) % 21) - 10); + sp30.y = arg9 + ((((rand8() << 8) | rand8()) % 21) - 10); + sp30.z = argA; + sp24.x = sp24.y = sp24.z = 1.0f; + sp1E.r = sp1E.g = sp1E.b = 0xFF; + sp1E.a = 0x80; + var_r31 = fn_1_942C(arg1, &sp30, &sp24, 0.0f, &sp1E); + if (!var_r31) break; + + var_r31->unk34 = 0; + var_r31->unk36 = ((rand8() << 8) | rand8()) % 2 + 2; + var_r31->unk0.x = (temp_f30 * (0.1f * ((((rand8() << 8) | rand8()) % 41) + 0x28))); + var_r31->unk0.y = (temp_f29 * (0.1f * ((((rand8() << 8) | rand8()) % 61) + 0x3C))); + var_r31->unk0.z = 0.0f; + var_r31->unk18 = (0.01f * var_r31->unk0.x); + var_r31->unk1C = 0.1f; + var_r31->unk24 = 1.5f; + var_r31->unk28 = ((0.1f * ((((rand8() << 8) | rand8()) % 7) + 2)) / (var_r31->unk36 * 0xE)); + var_r31->unk2C = sp1E.a; + var_r31->unk30 = (var_r31->unk2C / (var_r31->unk36 * 0xE)); + } +} + +void fn_1_2240(omObjData* object, unkStruct5* arg1, Mtx* arg2) { + unkStruct4* var_r31; + GXColor* var_r30; + s16 var_r29; + + var_r31 = arg1->unk18; + var_r30 = arg1->unk24; + + for (var_r29 = 0; var_r29 < arg1->unk0; var_r29++, var_r31++, var_r30++) { + if (var_r31->unk62 != 0) { + var_r31->unk54.x += var_r31->unk0.x; + var_r31->unk54.y += var_r31->unk0.y; + var_r31->unk54.z += var_r31->unk0.z; + var_r31->unk0.x -= var_r31->unk18; + var_r31->unk0.y += var_r31->unk1C; + var_r31->unk18 = (0.001f * var_r31->unk0.x); + var_r31->unk1C *= 1.05f; + var_r31->unk24 += var_r31->unk28; + var_r31->unk48.x = var_r31->unk48.y = var_r31->unk48.z = var_r31->unk24; + var_r31->unk2C -= var_r31->unk30; + var_r30->a = var_r31->unk2C > 255.0f ? 255 : (u8)var_r31->unk2C; + var_r31->unk34++; + if (var_r31->unk34 >= var_r31->unk36) { + var_r31->unk34 = 0; + var_r31->unk60++; + } + if (var_r31->unk60 >= arg1->unk14 - 2) { + var_r31->unk62 = 0; + } + } + } +} + +u16 fn_1_23E4(u16 arg0) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + if (!temp_r31) { + return 0; + } + return temp_r31->unk0 & arg0; +} + +void fn_1_2428(u16 arg0, u16 arg1) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + temp_r31->unk0 = (temp_r31->unk0 & ~arg0); + temp_r31->unk0 = (temp_r31->unk0 | arg1); +} + +void fn_1_2470(omObjData* arg0) { + ModelData* temp_r29; + HsfObject* temp_r28; + f32 temp_f31; + f32 var_f30; + f32 var_f29; + s16 temp_r26; + s16 var_r30; + unkStruct2* temp_r27; + + arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x34, 0x10000000); + temp_r27 = arg0->data; + arg0->stat |= 0x100; + arg0->model[0] = Hu3DModelCreateFile(0x470008); + arg0->model[1] = Hu3DModelCreateFile(0x470009); + arg0->model[2] = Hu3DModelCreateFile(0x470000); + arg0->model[3] = Hu3DModelCreateFile(0x470002); + arg0->model[8] = Hu3DModelCreateFile(0x470003); + arg0->model[6] = Hu3DModelCreateFile(0x470004); + arg0->model[4] = Hu3DModelCreateFile(0x470005); + arg0->model[5] = Hu3DModelCreateFile(0x470006); + arg0->model[7] = Hu3DModelCreateFile(0x470007); + temp_r26 = Hu3DModelCreateFile(0x470001); + Hu3DModelAttrSet(arg0->model[0], 0x40000001); + Hu3DModelAttrSet(arg0->model[2], 0x20000); + Hu3DModelAttrSet(arg0->model[2], 0x40000002); + Hu3DModelAttrSet(temp_r26, 1); + + for (var_r30 = 0; var_r30 < 8; var_r30++) { + Hu3DModelLayerSet(arg0->model[var_r30], 1); + } + Hu3DModelPosSet(arg0->model[2], 0.0f, 5000.0f, 0.0f); + Hu3DModelPosSet(arg0->model[3], 0.0f, 5000.0f, 0.0f); + Hu3DModelShadowSet(arg0->model[2]); + Hu3DModelShadowSet(arg0->model[3]); + Hu3DModelShadowMapSet(arg0->model[0]); + + for (var_r30 = 0; var_r30 < 5; var_r30++) { + temp_f31 = (450.0 * cos(M_PI * lbl_1_data_0[var_r30] / 180.0)); + var_f29 = (450.0 * sin(M_PI * lbl_1_data_0[var_r30] / 180.0)); + Hu3DModelPosSet(arg0->model[var_r30+4], temp_f31, 0.0f, var_f29); + var_f30 = 90.0f - lbl_1_data_0[var_r30]; + Hu3DModelRotSet(arg0->model[var_r30+4], 0.0f, var_f30, 0.0f); + Hu3DMotionSpeedSet(arg0->model[var_r30+4], 0.0f); + } + temp_r27->unk0 = 0; + temp_r27->unk1C = 5; + temp_r29 = &Hu3DData[temp_r26]; + temp_r28 = temp_r29->hsfData->root; + lbl_1_bss_60 = temp_r28->data.childrenCount; + lbl_1_bss_64 = HuMemDirectMalloc(HEAP_DATA, lbl_1_bss_60 * 64); + OSReport("Koopa Object Count %d\n", temp_r29->hsfData->objectCnt); + + for (var_r30 = 0; var_r30 < lbl_1_bss_60; var_r30++) { + lbl_1_bss_64[var_r30].unk20 = 0; + } + + for (var_r30 = 0; var_r30 < lbl_1_bss_60; var_r30++) { + lbl_1_bss_64[var_r30].unk4 = var_r30; + fn_1_5C2C(temp_r26, temp_r28->data.children[var_r30], &lbl_1_bss_64[var_r30], 2); + if (lbl_1_bss_64[var_r30].unk20 != 0) { + Hu3DModelAttrSet(lbl_1_bss_64[var_r30].unk0, 1); + Hu3DModelPosSet(lbl_1_bss_64[var_r30].unk0, 0.0f, 250.0f, 0.0f); + lbl_1_bss_64[var_r30].unk38 = &fn_1_57B4; + } + } + arg0->func = &fn_1_2A74; +} + +void fn_1_2A74(omObjData* object) { + fn_1_2AB4(object); + fn_1_2CA8(object); + fn_1_4660(object); +} + +void fn_1_2AB4(omObjData* object) { + unkStruct2* sp8; + + sp8 = (unkStruct2*)object->data; + + switch (fn_1_4EA8(0x20)) { + case 0x20: + fn_1_2B04(object); + } +} + +s16 lbl_1_data_E4[2] = {0, 0}; +s16 lbl_1_data_E8[2] = {0, 0}; + +void fn_1_2B04(omObjData* object) { + f32 temp_f31; + unkStruct* temp_r31; + + temp_r31 = (unkStruct*)object->data; + switch (lbl_1_data_E4[0]) { + case 0: + lbl_1_data_E8[0]++; + temp_f31 = lbl_1_data_E8[0] / 360.0f; + if (temp_f31 > 1.0f) { + temp_f31 = 1.0f; + Hu3DModelAttrSet(object->model[3], 1); + lbl_1_data_E8[0] = 0; + lbl_1_data_E4[0] = 0; + fn_1_4EEC(0x20, 0); + return; + } + temp_f31 = sin((M_PI * (90.0f * temp_f31)) / 180.0); + temp_r31->center.y = (250.0f + (1750.0f * temp_f31)); + } + Hu3DModelPosSet(object->model[3], temp_r31->center.x, temp_r31->center.y, temp_r31->center.z); + Hu3DModelRotSet(object->model[3], temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z); +} + +void fn_1_2CA8(omObjData* arg0) { + unkStruct2* sp8; + + sp8 = (unkStruct2*)arg0->data; + + switch (fn_1_4EA8(7)) { + case 1: + fn_1_2D28(arg0); + break; + case 3: + fn_1_33D4(arg0); + break; + case 4: + case 5: + fn_1_3DD8(arg0); + } } \ No newline at end of file From 05ab2600f76ef2ff4c122e435a0e102fc1db5efa Mon Sep 17 00:00:00 2001 From: CreateSource Date: Fri, 14 Jun 2024 12:55:22 -0400 Subject: [PATCH 03/10] IM BACK (fn_1_2D28) --- include/REL/m440Dll.h | 7 ++- src/REL/m440Dll/main.c | 99 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 103 insertions(+), 3 deletions(-) diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index ad84ee77..35a71fb2 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -101,8 +101,10 @@ extern Vec lbl_1_data_54; extern Vec lbl_1_data_60; extern Vec lbl_1_data_6C; extern unkStruct lbl_1_data_78[3]; -// extern s32 lbl_1_data_E4; -// extern s32 lbl_1_data_E8; +extern s16 lbl_1_data_E4[2]; +extern s16 lbl_1_data_E8[2]; +extern s16 lbl_1_data_EC[2]; +extern s16 lbl_1_data_F0[2]; ////// FUNCTIONS ////// // main.c @@ -134,5 +136,6 @@ extern void fn_1_2A74(omObjData* object); extern void fn_1_2AB4(omObjData* object); extern void fn_1_2B04(omObjData* object); extern void fn_1_2CA8(omObjData* object); +extern void fn_1_2D28(omObjData* object); // ... extern f32 fn_1_93C0(f32, f32, f32); \ No newline at end of file diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index 8ab1f4de..25f2a2ba 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -12,7 +12,6 @@ #include "game/sprite.h" // prototypes -void fn_1_2D28(omObjData* object); void fn_1_33D4(omObjData* object); void fn_1_3DD8(omObjData* object); void fn_1_4660(omObjData* object); @@ -655,6 +654,8 @@ void fn_1_2AB4(omObjData* object) { s16 lbl_1_data_E4[2] = {0, 0}; s16 lbl_1_data_E8[2] = {0, 0}; +s16 lbl_1_data_EC[2] = {0, 0}; +s16 lbl_1_data_F0[2] = {0, 0}; void fn_1_2B04(omObjData* object) { f32 temp_f31; @@ -696,4 +697,100 @@ void fn_1_2CA8(omObjData* arg0) { case 5: fn_1_3DD8(arg0); } +} + +void fn_1_2D28(omObjData* object) { + f32 var_f31; + unkStruct* temp_r31; + + temp_r31 = (unkStruct*)object->data; + switch (lbl_1_data_EC[0]) { + case 0x0: + temp_r31->center.x = temp_r31->center.z = 0.0f; + temp_r31->center.y = 2000.0f; + temp_r31->rot.x = temp_r31->rot.y = temp_r31->rot.z = 0.0f; + Hu3DModelAttrReset(object->model[2], 1); + Hu3DModelAttrReset(object->model[3], 1); + Hu3DModelAttrSet(object->model[3], 0x40000002); + Hu3DMotionTimeSet(object->model[3], 0.0f); + lbl_1_data_EC[0] ++; + lbl_1_data_F0[0] = 0; + HuAudFXPlay(0x709); + HuAudFXPlay(0x711); + break; + case 0x1: + lbl_1_data_F0[0] ++; + var_f31 = lbl_1_data_F0[0] / 120.0f; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + lbl_1_data_F0[0] = 0; + lbl_1_data_F0[1] = 0xF; + lbl_1_data_EC[1] = (lbl_1_data_EC[0] + 1); + lbl_1_data_EC[0] = 0x63; + } + if (110.0f == lbl_1_data_F0[0]) { + HuAudFXPlay(0x70A); + } + var_f31 = sin((M_PI * (90.0f * var_f31)) / 180.0); + temp_r31->center.y = (2000.0f + (-1750.0f * var_f31)); + break; + case 0x2: + if (lbl_1_data_F0[0] == 0) { + HuAudFXPlay(0x713); + } + lbl_1_data_F0[0] ++; + var_f31 = lbl_1_data_F0[0] / 60.0f; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + lbl_1_data_F0[0] = 0; + lbl_1_data_F0[1] = 0xF; + lbl_1_data_EC[1] = lbl_1_data_EC[0] + 1; + lbl_1_data_EC[0] = 0x63; + HuAudFXPlay(0x714); + } + temp_r31->rot.y = (360.0f * var_f31); + break; + case 0x3: + Hu3DModelAttrReset(object->model[3], 0x40000002); + Hu3DMotionSpeedSet(object->model[3], 2.0f); + if (lbl_1_data_F0[0] == 0) { + HuAudFXPlay(0x711); + } + if (++lbl_1_data_F0[0] > 12.0) { + if (fn_1_4EA8(0x40) != 0) { + fn_1_4EEC(0x40, 0); + fn_1_F228(); + } + fn_1_4EEC(0x20, 0x20); + fn_1_4EEC(7, 2); + lbl_1_data_F0[0] = 0; + lbl_1_data_EC[0] = 0; + } + break; + case 0x4: + lbl_1_data_F0[0]++; + var_f31 = lbl_1_data_F0[0] / 360.0f; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + Hu3DModelAttrSet(object->model[3], 1); + lbl_1_data_F0[0] = 0; + lbl_1_data_EC[0] = 0; + fn_1_4EEC(7, 2); + return; + } + var_f31 = sin((M_PI * (90.0f * var_f31)) / 180.0); + temp_r31->center.y = (250.0f + (1750.0f * var_f31)); + break; + case 0x63: + if (++lbl_1_data_F0[0] > lbl_1_data_F0[1]) { + lbl_1_data_F0[0] = 0; + lbl_1_data_EC[0] = lbl_1_data_EC[1]; + } + break; + } + Hu3DModelPosSet(object->model[3], temp_r31->center.x, temp_r31->center.y, temp_r31->center.z); + Hu3DModelRotSet(object->model[3], temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z); + Hu3DModelPosSet(object->model[2], temp_r31->center.x, temp_r31->center.y, temp_r31->center.z); + Hu3DModelRotSet(object->model[2], temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z); + return; } \ No newline at end of file From e58da593ed7c0677347c66a00eb729be89b12db0 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Fri, 14 Jun 2024 22:40:53 -0400 Subject: [PATCH 04/10] up to fn_1_4660 --- include/REL/m440Dll.h | 28 ++++-- src/REL/m440Dll/main.c | 187 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 203 insertions(+), 12 deletions(-) diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index 35a71fb2..30a8c060 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -57,6 +57,9 @@ typedef struct _unkStruct5 { // could be unkStruct3 GXColor* unk24; // ? } unkStruct5; +typedef void (*m440Func5)(omObjData*, unkStruct5*, Mtx*); +typedef void (*m440Func6)(struct _unkStruct6*); + typedef struct _unkStruct6 { s16 unk0; s16 unk2; @@ -65,11 +68,15 @@ typedef struct _unkStruct6 { char unk8[0x18]; s32 unk20; char unk24[0x14]; - void (*unk38)(s32); - char unk3C[0x4]; -} unkStruct6; // 0x40 + m440Func6 unk38; + s16 unk3C; +} unkStruct6; // sizeof 0x40 + +typedef struct _unkStruct7 { + GXColor unk0; + Vec unk4; +} unkStruct7; -typedef void (*m440Func5)(omObjData*, unkStruct5*, Mtx*); ////// BSS ////// // object.c @@ -96,7 +103,7 @@ extern s8 lbl_1_bss_0; extern f32 lbl_1_data_0[5]; extern Vec lbl_1_data_2C; extern Vec lbl_1_data_38; -extern GXColor lbl_1_data_44; +extern unkStruct7 lbl_1_data_44; extern Vec lbl_1_data_54; extern Vec lbl_1_data_60; extern Vec lbl_1_data_6C; @@ -105,6 +112,9 @@ extern s16 lbl_1_data_E4[2]; extern s16 lbl_1_data_E8[2]; extern s16 lbl_1_data_EC[2]; extern s16 lbl_1_data_F0[2]; +extern s32 lbl_1_data_F4[4]; +// object.c +extern s16 lbl_1_data_1D8; ////// FUNCTIONS ////// // main.c @@ -137,5 +147,13 @@ extern void fn_1_2AB4(omObjData* object); extern void fn_1_2B04(omObjData* object); extern void fn_1_2CA8(omObjData* object); extern void fn_1_2D28(omObjData* object); +extern void fn_1_33D4(omObjData* object); +extern void fn_1_3DD8(omObjData* object); +extern void fn_1_4558(omObjData* object); +extern void fn_1_45BC(omObjData* object); +extern void fn_1_4660(omObjData* object); +extern void fn_1_46E0(omObjData* object); +extern void fn_1_4A20(omObjData* object); +extern void fn_1_4B44(omObjData* object); // ... extern f32 fn_1_93C0(f32, f32, f32); \ No newline at end of file diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index 25f2a2ba..bf49ba7e 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -12,12 +12,11 @@ #include "game/sprite.h" // prototypes -void fn_1_33D4(omObjData* object); -void fn_1_3DD8(omObjData* object); -void fn_1_4660(omObjData* object); u16 fn_1_4EA8(s32); void fn_1_4EEC(s32, s32); -void fn_1_57B4(s32); +void fn_1_4F34(unkStruct6*); +void fn_1_5010(unkStruct6*, Vec*, f32); +void fn_1_57B4(unkStruct6*); void fn_1_5C2C(s16, HsfObject*, unkStruct6*, s32); f32 fn_1_93C0(f32, f32, f32); unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*); @@ -26,12 +25,18 @@ void fn_1_9AB0(s16); void fn_1_9B94(s16, m440Func5); void fn_1_AE08(Process*); // object.c +void fn_1_EE78(void); +void fn_1_EF50(void); s16 fn_1_F0FC(void); void fn_1_F168(void); +void fn_1_F228(void); +s32 fn_1_F4FC(s32); // bss omObjData* lbl_1_bss_6C; omObjData* lbl_1_bss_68; +unkStruct6* lbl_1_bss_64; +s16 lbl_1_bss_60; s16 lbl_1_bss_10[10]; s16 lbl_1_bss_E; u8 lbl_1_bss_C; @@ -46,10 +51,14 @@ s8 lbl_1_bss_0; // data f32 lbl_1_data_0[5] = { 90.0f, 80.0f, 100.0f, 70.0f, 110.0f }; +s16 lbl_1_data_14[6] = { 1, 1, 1, 1, 1 }; // temp +s8 lbl_1_data_20[12] = { 0 }; // temp Vec lbl_1_data_2C = { 800.0f, 1300.0f, 1000.0f }; Vec lbl_1_data_38 = { 0.0f, 0.0f, 0.0f }; -GXColor lbl_1_data_44 = { 0xFF, 0xFF, 0xFF, 0xFF }; -Vec lbl_1_data_48 = { 10.0f, 45.0f, 0.0f }; // UNUSED +unkStruct7 lbl_1_data_44 = { + 0xFF, 0xFF, 0xFF, 0xFF, + 10.0f, 45.0f, 0.0f +}; Vec lbl_1_data_54 = { 1300.0f, 2500.0f, 1300.0f }; Vec lbl_1_data_60 = { 0.0f, 1.0f, 0.0f }; Vec lbl_1_data_6C = { 0.0f, 0.0f, -500.0f }; @@ -65,7 +74,7 @@ void ModuleProlog(void) { Process* var_r31; Hu3DLightAllKill(); - lbl_1_bss_E = Hu3DGLightCreateV(&lbl_1_data_2C, &lbl_1_data_38, &lbl_1_data_44); + lbl_1_bss_E = Hu3DGLightCreateV(&lbl_1_data_2C, &lbl_1_data_38, &lbl_1_data_44.unk0); Hu3DGLightInfinitytSet(lbl_1_bss_E); var_r30 = &Hu3DGlobalLight[lbl_1_bss_E]; var_r30->unk_00 |= 0x8000; @@ -656,6 +665,7 @@ s16 lbl_1_data_E4[2] = {0, 0}; s16 lbl_1_data_E8[2] = {0, 0}; s16 lbl_1_data_EC[2] = {0, 0}; s16 lbl_1_data_F0[2] = {0, 0}; +s32 lbl_1_data_F4[4] = { 20, 60, 100, 140 }; void fn_1_2B04(omObjData* object) { f32 temp_f31; @@ -793,4 +803,167 @@ void fn_1_2D28(omObjData* object) { Hu3DModelPosSet(object->model[2], temp_r31->center.x, temp_r31->center.y, temp_r31->center.z); Hu3DModelRotSet(object->model[2], temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z); return; +} + +void fn_1_33D4(omObjData* object) { + unkStruct2* sp10; + + sp10 = (unkStruct2*)object->data; + switch (lbl_1_data_EC[0]) { + case 0: + fn_1_1D54(30.0f, 500.0f, 200.0f, 12, 135.0f, lbl_1_bss_10[0]); + fn_1_1D54(-30.0f, 500.0f, 200.0f, 12, 225.0f, lbl_1_bss_10[0]); + fn_1_4EEC(0x100, 0x100); + fn_1_4EEC(7, 2); + HuAudFXPlay(0x710); + } +} + +void fn_1_3DD8(omObjData* object) { + unkStruct* sp8; + f32 var_f29; + f32 var_f28; + f32 var_f27; + f32 var_f26; + f32 var_f30; + f32 var_f31; + unkStruct2* var_r25; + omObjData** var_r24; + s16 var_r29; + s16 var_r31; + s32 var_r23; + s32* var_r26; + unkStruct2* var_r28; + s16 var_r27; + + var_r25 = (unkStruct2*)lbl_1_bss_6C->data; + sp8 = (unkStruct*)object->data; + switch (lbl_1_data_EC[0]) { + case 0: + Hu3DModelAttrReset(object->model[2], 0x40000002); + lbl_1_data_EC[0]++; + return; + case 1: + if (++lbl_1_data_F0[0] == 0x1E) { + fn_1_4EEC(0x100, 0x100); + } else if (lbl_1_data_F0[0] == 0x32) { + fn_1_EE78(); + } + var_f26 = Hu3DMotionMaxTimeGet(object->model[2]); + if (Hu3DMotionTimeGet(object->model[2]) >= var_f26) { + Hu3DModelAttrSet(object->model[2], 1); + for (var_r31 = 0; var_r31 < lbl_1_bss_60; var_r31++) { + Hu3DModelAttrReset(lbl_1_bss_64[var_r31].unk0, 1); + fn_1_57B4(&lbl_1_bss_64[var_r31]); + } + lbl_1_data_F0[0] = 0; + lbl_1_data_EC[0]++; + HuAudFXPlay(0x70C); + } + + for (var_r31 = 0; var_r31 < 4U; var_r31++) { + if (lbl_1_data_F0[0] == lbl_1_data_F4[var_r31] * 2) { + HuAudFXPlay(0x70D); + } + } + return; + case 2: + var_f30 = (((rand8() << 8) | rand8()) % 361); + + for (var_r29 = 1; var_r29 < 4; var_r29++, var_f30 += 120.0f) { + var_f31 = 0.01f * ((((rand8() << 8) | rand8()) % 51) + 0x32); + var_f27 = (var_f31 * (200.0 * sin((M_PI * var_f30) / 180.0))); + var_f28 = var_f31 * (200.0 * cos((M_PI * var_f30) / 180.0)); + var_f29 = 0.0f; + Hu3DModelPosSet(lbl_1_bss_10[var_r29], var_f27, 300.0f + var_f28, var_f29); + var_f31 = 0.1f * ((((rand8() << 8) | rand8()) % 11) + 0x19); + Hu3DModelScaleSet(lbl_1_bss_10[var_r29], var_f31, var_f31, var_f31); + Hu3DModelAttrReset(lbl_1_bss_10[var_r29], 1); + Hu3DModelAttrReset(lbl_1_bss_10[var_r29], 0x40000002); + } + fn_1_45BC(object); + fn_1_4EEC(7, 5); + var_r25->unkA = 1; + lbl_1_data_EC[0]++; + var_r24 = omGetGroupMemberListEx(HuPrcCurrentGet(), 0); + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (fn_1_F4FC(var_r31) >= 0) { + var_r28 = (unkStruct2*)var_r24[fn_1_F4FC(var_r31)]->data; + switch (var_r28->unk0 & 0xF) { + case 6: + omVibrate(var_r28->unk4, 0x30, 0xC, 0); + break; + case 8: + omVibrate(var_r28->unk4, 0x30, 4, 2); + break; + } + } + } + return; + case 3: + if (lbl_1_bss_64[0].unk3C == 0) { + for (var_r27 = 1; var_r27 < 4; var_r27++) { + Hu3DMotionTimeSet(lbl_1_bss_10[var_r27], 0.0f); + Hu3DModelAttrSet(lbl_1_bss_10[var_r27], 1); + Hu3DModelAttrSet(lbl_1_bss_10[var_r27], 0x40000002); + } + Hu3DModelAttrSet(object->model[2], 0x40000002); + Hu3DMotionTimeSet(object->model[2], 0.0f); + for (var_r31 = 0; var_r31 < lbl_1_bss_60; var_r31++) { + Hu3DModelAttrSet(lbl_1_bss_64[var_r31].unk0, 1); + } + fn_1_4558(object); + if (lbl_1_data_1D8 >= 0) { + fn_1_EF50(); + fn_1_4EEC(0x18, 0x18); + fn_1_4EEC(0x40, 0x40); + fn_1_4EEC(7, 1); + HuAudFXPlay(0x70E); + } else { + fn_1_4EEC(7, 2); + var_r26 = lbl_1_bss_6C->data; + var_r26[0] &= 0xFFFFFFF8; + var_r26[0] |= 4; + } + lbl_1_data_EC[0] = 0; + } + } +} + +void fn_1_4558(omObjData* object) { + s16 var_r31; + + for (var_r31 = 0; var_r31 < lbl_1_bss_60; var_r31++) { + fn_1_4F34(&lbl_1_bss_64[var_r31]); + } +} + +void fn_1_45BC(omObjData* object) { + Vec sp8; + s16 var_r31; + + sp8.x = 0.0f; + sp8.y = 250.0f; + sp8.z = 0.0f; + + for (var_r31 = 0; var_r31 < lbl_1_bss_60; var_r31++) { + fn_1_5010(&lbl_1_bss_64[var_r31], &sp8, 1500.0f); + } +} + +void fn_1_4660(omObjData* object) { + void* sp8; + s16 temp_r3; + + sp8 = object->data; + switch (fn_1_4EA8(0x18)) { + case 8: + fn_1_46E0(object); + return; + case 16: + fn_1_4A20(object); + return; + case 24: + fn_1_4B44(object); + } } \ No newline at end of file From f1a6f5ef3c810198b85398359a4c8813eb23f149 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 15 Jun 2024 23:28:27 -0400 Subject: [PATCH 05/10] progress (5010) --- include/REL/m440Dll.h | 33 +++++- src/REL/m440Dll/main.c | 231 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 257 insertions(+), 7 deletions(-) diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index 30a8c060..55272351 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -19,6 +19,12 @@ typedef struct _unkStruct2 { s32 unkC; char unk10[0xC]; s16 unk1C; + char unk20[0x4]; + f32 unk24; + char unk28[0x4]; + s16 unk2C; + s16 unk2E; + f32 unk30; } unkStruct2; typedef struct _unkStruct3 { @@ -60,16 +66,29 @@ typedef struct _unkStruct5 { // could be unkStruct3 typedef void (*m440Func5)(omObjData*, unkStruct5*, Mtx*); typedef void (*m440Func6)(struct _unkStruct6*); +typedef struct _unkStruct8 { + char unk0[0x7C]; + Vec unk7C; + char unk88[0xC]; + Vec unk94; + Vec unkA0; + Vec unkAC; + Vec unkB8; + Vec unkC4; +} unkStruct8; + typedef struct _unkStruct6 { s16 unk0; - s16 unk2; + u16 unk2; s16 unk4; s16 unk6; char unk8[0x18]; s32 unk20; - char unk24[0x14]; + unkStruct8* unk24; + char unk28[0x10]; m440Func6 unk38; s16 unk3C; + s16 unk3E; } unkStruct6; // sizeof 0x40 typedef struct _unkStruct7 { @@ -101,6 +120,7 @@ extern s8 lbl_1_bss_0; ////// DATA ////// // main.c extern f32 lbl_1_data_0[5]; +extern s16 lbl_1_data_14[6]; extern Vec lbl_1_data_2C; extern Vec lbl_1_data_38; extern unkStruct7 lbl_1_data_44; @@ -113,6 +133,8 @@ extern s16 lbl_1_data_E8[2]; extern s16 lbl_1_data_EC[2]; extern s16 lbl_1_data_F0[2]; extern s32 lbl_1_data_F4[4]; +extern s16 lbl_1_data_104[2]; +extern s16 lbl_1_data_108[2]; // object.c extern s16 lbl_1_data_1D8; @@ -155,5 +177,12 @@ extern void fn_1_4660(omObjData* object); extern void fn_1_46E0(omObjData* object); extern void fn_1_4A20(omObjData* object); extern void fn_1_4B44(omObjData* object); +extern void fn_1_4E00(s16, f32); +extern s16 fn_1_4E2C(void); +extern s16 fn_1_4E54(s16); +extern u16 fn_1_4EA8(u16); +extern void fn_1_4EEC(u16, u16); +extern void fn_1_4F34(unkStruct6*); +extern void fn_1_5010(unkStruct6*, Vec*, f32); // ... extern f32 fn_1_93C0(f32, f32, f32); \ No newline at end of file diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index bf49ba7e..8d926dd0 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -2,6 +2,7 @@ #include "rel_sqrt_consts.h" #include "math.h" +#include "ext_math.h" #include "game/frand.h" #include "game/hsfman.h" #include "game/hsfmotion.h" @@ -12,9 +13,6 @@ #include "game/sprite.h" // prototypes -u16 fn_1_4EA8(s32); -void fn_1_4EEC(s32, s32); -void fn_1_4F34(unkStruct6*); void fn_1_5010(unkStruct6*, Vec*, f32); void fn_1_57B4(unkStruct6*); void fn_1_5C2C(s16, HsfObject*, unkStruct6*, s32); @@ -51,8 +49,8 @@ s8 lbl_1_bss_0; // data f32 lbl_1_data_0[5] = { 90.0f, 80.0f, 100.0f, 70.0f, 110.0f }; -s16 lbl_1_data_14[6] = { 1, 1, 1, 1, 1 }; // temp -s8 lbl_1_data_20[12] = { 0 }; // temp +s16 lbl_1_data_14[6] = { 1, 1, 1, 1, 1 }; +s8 lbl_1_data_20[12] = { 0 }; Vec lbl_1_data_2C = { 800.0f, 1300.0f, 1000.0f }; Vec lbl_1_data_38 = { 0.0f, 0.0f, 0.0f }; unkStruct7 lbl_1_data_44 = { @@ -666,6 +664,8 @@ s16 lbl_1_data_E8[2] = {0, 0}; s16 lbl_1_data_EC[2] = {0, 0}; s16 lbl_1_data_F0[2] = {0, 0}; s32 lbl_1_data_F4[4] = { 20, 60, 100, 140 }; +s16 lbl_1_data_104[2] = {0, 0}; +s16 lbl_1_data_108[2] = {0, 0}; void fn_1_2B04(omObjData* object) { f32 temp_f31; @@ -966,4 +966,225 @@ void fn_1_4660(omObjData* object) { case 24: fn_1_4B44(object); } +} + +void fn_1_46E0(omObjData* object) { + f32 var_f31; + s16 temp_r0; + s16 var_r30; + s32 temp_r28; + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)object->data; + switch (lbl_1_data_104[0]) { + case 0x0: + fn_1_4E00(-1, 0.0f); + + for (var_r30 = 0; var_r30 < 5; var_r30++) { + Hu3DMotionTimeSet(object->model[var_r30 + 4], 0.0f); + lbl_1_data_14[var_r30] = 0; + } + temp_r31->unk2C = (((rand8() << 8) | rand8()) % (s16)temp_r31->unk1C); + temp_r31->unk24 = 0.0f; + lbl_1_data_108[0] = 0; + lbl_1_data_104[0]++; + break; + case 0x1: + lbl_1_data_108[0]++; + var_f31 = lbl_1_data_108[0] / 60.0f; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + lbl_1_data_108[0] = 0; + lbl_1_data_104[0] = 0; + fn_1_4EEC(0x18, 0x10); + HuAudFXPlay(0x70F); + } + var_f31 = sin((M_PI * (90.0f * var_f31)) / 180.0); + temp_r31->unk24 = (150.0f * var_f31); + break; + case 0x63: + if (++lbl_1_data_108[0] > lbl_1_data_108[1]) { + lbl_1_data_108[0] = 0; + lbl_1_data_104[0] = lbl_1_data_104[1]; + } + break; + } + + for (var_r30 = 0; var_r30 < temp_r31->unk1C; var_r30++) { + Hu3DData[object->model[var_r30 + 4]].pos.y = temp_r31->unk24; + lbl_1_data_14[var_r30] = 1; + } + Hu3DData[object->model[1]].pos.y = temp_r31->unk24; +} + +void fn_1_4A20(omObjData* object) { + ModelData* temp_r31; + s16 temp_r28; + unkStruct2* temp_r30; + f32 var_f31; + + temp_r30 = (unkStruct2*)object->data; + temp_r28 = temp_r30->unk2E; + if (temp_r28 != -1) { + temp_r31 = &Hu3DData[object->model[temp_r28 + 4]]; + if (-1.0f == temp_r30->unk30) { + if (0.0f != temp_r31->unk_64) { + temp_r31->unk_64 -= 4.0f; + if (temp_r31->unk_64 < 0.0f) { + temp_r31->unk_64 = 0.0f; + } + } + } else { + var_f31 = Hu3DMotionMaxTimeGet(object->model[temp_r28 + 4]); + temp_r31->unk_64 = var_f31 * temp_r30->unk30; + } + } +} + +void fn_1_4B44(omObjData* object) { + f32 var_f31; + s16 var_r30; + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)object->data; + switch (lbl_1_data_104[0]) { + case 0: + lbl_1_data_108[0]++; + var_f31 = lbl_1_data_108[0] / 60.0f; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + lbl_1_data_108[0] = 0; + lbl_1_data_104[0]++; + } + var_f31 = sin((M_PI * (90.0f * var_f31)) / 180.0); + temp_r31->unk24 = (150.0f + (-150.0f * var_f31)); + break; + case 1: + lbl_1_data_108[0]++; + var_f31 = (lbl_1_data_108[0] / 30.0f); + if (var_f31 >= 1.0f) { + lbl_1_data_108[0] = 0; + lbl_1_data_104[0] = 0; + if (fn_1_4EA8(0x40) != 0) { + temp_r31->unk1C--; + } + fn_1_4EEC(0x18, 8); + } + break; + } + + for (var_r30 = 0; var_r30 < temp_r31->unk1C; var_r30++) { + Hu3DData[object->model[var_r30 + 4]].pos.y = temp_r31->unk24; + lbl_1_data_14[var_r30] = 1; + } + Hu3DData[object->model[1]].pos.y = temp_r31->unk24; +} + +void fn_1_4E00(s16 arg0, f32 arg8) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_68->data; + temp_r31->unk2E = arg0; + temp_r31->unk30 = arg8; +} + +s16 fn_1_4E2C(void) { + unkStruct2* var_r31; + + var_r31 = (unkStruct2*)lbl_1_bss_68->data; + return var_r31->unk1C; +} + +s16 fn_1_4E54(s16 arg0) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_68->data; + if (arg0 == -1) { + return temp_r31->unk2C; + } + if (arg0 == temp_r31->unk2C) { + return 1; + } + return 0; +} + +u16 fn_1_4EA8(u16 arg0) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_68->data; + if (!temp_r31) { + return 0; + } + return temp_r31->unk0 & arg0; +} + +void fn_1_4EEC(u16 arg0, u16 arg1) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_68->data; + temp_r31->unk0 &= ~arg0; + temp_r31->unk0 |= arg1; +} + +void fn_1_4F34(unkStruct6* arg0) { + s16 var_r30; + unkStruct8* var_r31; + + var_r31 = arg0->unk24; + if (arg0->unk20 != 0) { + for (var_r30 = 0; var_r30 < arg0->unk20; var_r30++, var_r31++) { + var_r31->unk94.x = var_r31->unk94.y = var_r31->unk94.z = 0.0f; + var_r31->unkA0.x = var_r31->unkA0.y = var_r31->unkA0.z = 0.0f; + var_r31->unkAC.x = var_r31->unkAC.y = var_r31->unkAC.z = 0.0f; + var_r31->unkB8.x = var_r31->unkB8.y = var_r31->unkB8.z = 0.0f; + var_r31->unkC4.y = 0.0f; + } + arg0->unk2 &= ~4; + arg0->unk3C = 0xFF; + arg0->unk3E = 0; + } +} + +void fn_1_5010(unkStruct6* arg0, Vec* arg1, f32 arg8) { + Vec sp14; + ModelData* temp_r29; + f32 var_f25; + f32 var_f28; + f32 var_f27; + f32 var_f26; + s32 var_r27; + unkStruct8* var_r31; + + var_r31 = arg0->unk24; + if (arg0->unk20 != 0) { + temp_r29 = &Hu3DData[arg0->unk0]; + arg0->unk2 |= 4; + + for (var_r27 = 0; var_r27 < arg0->unk20; var_r27++, var_r31++) { + sp14.x = (var_r31->unk7C.x + temp_r29->pos.x) - arg1->x; + sp14.y = (var_r31->unk7C.y + temp_r29->pos.y) - arg1->y; + sp14.z = (var_r31->unk7C.z + temp_r29->pos.z) - arg1->z; + var_f25 = sqrtf((sp14.z * sp14.z) + ((sp14.x * sp14.x) + (sp14.y * sp14.y))); + sp14.x /= var_f25; + sp14.y /= var_f25; + sp14.z /= var_f25; + + var_f25 = (1.0f - (var_f25 / arg8)); + if (var_f25 < 0.0f) { + var_f25 = 0.0f; + } + var_f28 = (ABS(sp14.x) < 0.1f) ? 100.0f : 100.0f * sp14.x; + var_f27 = (ABS(sp14.y) < 0.1f) ? 100.0f : 100.0f * sp14.y; + var_f26 = (ABS(sp14.z) < 0.1f) ? 100.0f : 100.0f * sp14.z; + sp14.x += (0.001f * (-var_f28 + (((rand8() << 8) | rand8()) % (s16)(1.0f + (var_f28 - -var_f28))))); + sp14.y += (0.001f * (-var_f27 + (((rand8() << 8) | rand8()) % (s16)(1.0f + (var_f27 - -var_f27))))); + sp14.z += (0.001f * (-var_f26 + (((rand8() << 8) | rand8()) % (s16)(1.0f + (var_f26 - -var_f26))))); + var_r31->unkAC.x = (sp14.x * ((((rand8() << 8) | rand8()) % 21) + 0x50)); + var_r31->unkAC.y = (sp14.y * ((((rand8() << 8) | rand8()) % 16) + 0x1E)); + var_r31->unkAC.z = (sp14.z * ((((rand8() << 8) | rand8()) % 21) + 0x50)); + var_r31->unkC4.y = 1.47f; + var_r31->unkB8.x = (120.0f * (-sp14.z * ABS(sp14.y))); + var_r31->unkB8.z = (120.0f * (-sp14.x * ABS(sp14.y))); + } + } } \ No newline at end of file From 72d0807af16c2f7751122cd4a6ed0507d4be55d0 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sun, 16 Jun 2024 15:32:54 -0400 Subject: [PATCH 06/10] fn_1_57B4 --- include/REL/m440Dll.h | 13 +++++-- src/REL/m410Dll/main.c | 2 +- src/REL/m440Dll/main.c | 83 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 92 insertions(+), 6 deletions(-) diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index 55272351..c219731d 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -67,9 +67,12 @@ typedef void (*m440Func5)(omObjData*, unkStruct5*, Mtx*); typedef void (*m440Func6)(struct _unkStruct6*); typedef struct _unkStruct8 { - char unk0[0x7C]; + s16 unk0[3][4]; + s16 unk18[3]; + s16 unk1E; + char unk20[0x5C]; Vec unk7C; - char unk88[0xC]; + Vec unk88; Vec unk94; Vec unkA0; Vec unkAC; @@ -82,7 +85,10 @@ typedef struct _unkStruct6 { u16 unk2; s16 unk4; s16 unk6; - char unk8[0x18]; + u32 unk8; + Vec* unkC; + Vec* unk10; + char unk14[0xC]; s32 unk20; unkStruct8* unk24; char unk28[0x10]; @@ -184,5 +190,6 @@ extern u16 fn_1_4EA8(u16); extern void fn_1_4EEC(u16, u16); extern void fn_1_4F34(unkStruct6*); extern void fn_1_5010(unkStruct6*, Vec*, f32); +extern void fn_1_57B4(unkStruct6*); // ... extern f32 fn_1_93C0(f32, f32, f32); \ No newline at end of file diff --git a/src/REL/m410Dll/main.c b/src/REL/m410Dll/main.c index 145d9728..873b053d 100644 --- a/src/REL/m410Dll/main.c +++ b/src/REL/m410Dll/main.c @@ -214,7 +214,7 @@ void fn_1_DEC(omObjData *object) { fn_1_5A8(object); if (!WipeStatGet()) { - fn_1_806C(); + (); fn_1_3484(); fn_1_31F8(); MGSeqKillAll(); diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index 8d926dd0..5d199170 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -13,7 +13,6 @@ #include "game/sprite.h" // prototypes -void fn_1_5010(unkStruct6*, Vec*, f32); void fn_1_57B4(unkStruct6*); void fn_1_5C2C(s16, HsfObject*, unkStruct6*, s32); f32 fn_1_93C0(f32, f32, f32); @@ -1187,4 +1186,84 @@ void fn_1_5010(unkStruct6* arg0, Vec* arg1, f32 arg8) { var_r31->unkB8.z = (120.0f * (-sp14.x * ABS(sp14.y))); } } -} \ No newline at end of file +} + +void fn_1_57B4(unkStruct6* arg0) { + Mtx sp14; + Vec sp8; + s16 var_r29; + Vec* temp_r26; + s32 var_r27; + s32 var_r28; + unkStruct8* var_r31; + + var_r31 = arg0->unk24; + temp_r26 = arg0->unk10; + + for (var_r27 = 0; var_r27 < arg0->unk20; var_r27++, var_r31++) { + var_r31->unkAC.y = (var_r31->unkAC.y - var_r31->unkC4.y); + var_r31->unk94.x = (var_r31->unk94.x + var_r31->unkAC.x); + var_r31->unk94.y = (var_r31->unk94.y + var_r31->unkAC.y); + var_r31->unk94.z = (var_r31->unk94.z + var_r31->unkAC.z); + var_r31->unkA0.x = (var_r31->unkA0.x + var_r31->unkB8.x); + var_r31->unkA0.y = (var_r31->unkA0.y + var_r31->unkB8.y); + var_r31->unkA0.z = (var_r31->unkA0.z + var_r31->unkB8.z); + if ((var_r31->unk94.x < -500.0f) || (var_r31->unk94.x > 500.0f)) { + var_r31->unkAC.x = (0.5f * -var_r31->unkAC.x); + var_r31->unkB8.x = (0.5f * -var_r31->unkB8.x); + } + if (var_r31->unk94.z < -500.0f) { + var_r31->unkAC.z = (0.5f * -var_r31->unkAC.z); + var_r31->unkB8.z = (0.5f * -var_r31->unkB8.z); + } + if ((var_r31->unk7C.y + var_r31->unk94.y) < -250.0f) { + if (var_r31->unkAC.y > -2.0f) { + var_r31->unk94.y = (-250.0f - var_r31->unk7C.y); + var_r31->unkAC.x = 0.0f; + var_r31->unkAC.y = 0.0f; + var_r31->unkAC.z = 0.0f; + var_r31->unkB8.x = 0.0f; + var_r31->unkB8.z = 0.0f; + } else { + var_r31->unkAC.x *= 0.5f; + var_r31->unkAC.y = -(0.3f * var_r31->unkAC.y); + var_r31->unkAC.z *= 0.5f; + var_r31->unkB8.x *= 0.5f; + var_r31->unkB8.z *= 0.5f; + } + } + PSMTXScale(sp14, var_r31->unk88.x, var_r31->unk88.y, var_r31->unk88.z); + mtxTransCat(sp14, -var_r31->unk7C.x, -var_r31->unk7C.y, -var_r31->unk7C.z); + mtxRotCat(sp14, var_r31->unkA0.x, var_r31->unkA0.y, var_r31->unkA0.z); + mtxTransCat(sp14, var_r31->unk94.x + var_r31->unk7C.x, var_r31->unk94.y + var_r31->unk7C.y, var_r31->unk94.z + var_r31->unk7C.z); + + for (var_r28 = 0; var_r28 < 3; var_r28++) { + if ((arg0->unk2 & 1) != 0) { + var_r29 = var_r31->unk0[var_r28][0]; + } else { + var_r29 = var_r31->unk18[var_r28]; + } + PSMTXMultVec(sp14, &temp_r26[var_r29], &sp8); + arg0->unkC[var_r29].x = sp8.x; + arg0->unkC[var_r29].y = sp8.y; + arg0->unkC[var_r29].z = sp8.z; + } + if ((arg0->unk2 & 2) != 0) { + var_r29 = var_r31->unk1E; + PSMTXMultVec(sp14, &temp_r26[var_r29], &sp8); + arg0->unkC[var_r29].x = sp8.x; + arg0->unkC[var_r29].y = sp8.y; + arg0->unkC[var_r29].z = sp8.z; + } + } + if ((arg0->unk2 & 4) != 0) { + if (++arg0->unk3E > 0x50) { + arg0->unk3C = ((arg0->unk3C - 10) < 0) ? 0 : arg0->unk3C - 10; + } + } + DCFlushRangeNoSync(arg0->unkC, arg0->unk8 * 0xC); +} + +static const GXColor lbl_1_rodata_148 = { + 0xFF, 0xFF, 0xFF, 0xFF +}; \ No newline at end of file From bdc09c15752554553c7397ec660753f98135be7f Mon Sep 17 00:00:00 2001 From: CreateSource Date: Mon, 17 Jun 2024 15:28:08 -0400 Subject: [PATCH 07/10] this doesnt work for no reason (fn_1_5C2C) --- include/REL/m440Dll.h | 30 ++++++-- src/REL/m410Dll/main.c | 2 +- src/REL/m440Dll/main.c | 165 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 184 insertions(+), 13 deletions(-) diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index c219731d..f7863a1e 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -1,4 +1,5 @@ #include "dolphin/types.h" +#include "game/hsfman.h" #include "game/object.h" extern s32 rand8(void); @@ -70,7 +71,9 @@ typedef struct _unkStruct8 { s16 unk0[3][4]; s16 unk18[3]; s16 unk1E; - char unk20[0x5C]; + char unk20[0x48]; + f32 unk68; + char unk6C[0x10]; Vec unk7C; Vec unk88; Vec unk94; @@ -80,6 +83,16 @@ typedef struct _unkStruct8 { Vec unkC4; } unkStruct8; +typedef struct _unkStruct7 { + GXColor unk0; + Vec unk4; +} unkStruct7; + +typedef struct _unkStruct9 { + f32 unk0; + f32 unk4; +} unkStruct9; + typedef struct _unkStruct6 { s16 unk0; u16 unk2; @@ -88,20 +101,20 @@ typedef struct _unkStruct6 { u32 unk8; Vec* unkC; Vec* unk10; - char unk14[0xC]; + Vec* unk14; + Vec* unk18; + unkStruct9* unk1C; s32 unk20; unkStruct8* unk24; - char unk28[0x10]; + HsfMaterial* unk28; + HsfAttribute* unk2C; + void* unk30; + u32 unk34; m440Func6 unk38; s16 unk3C; s16 unk3E; } unkStruct6; // sizeof 0x40 -typedef struct _unkStruct7 { - GXColor unk0; - Vec unk4; -} unkStruct7; - ////// BSS ////// // object.c @@ -191,5 +204,6 @@ extern void fn_1_4EEC(u16, u16); extern void fn_1_4F34(unkStruct6*); extern void fn_1_5010(unkStruct6*, Vec*, f32); extern void fn_1_57B4(unkStruct6*); +extern void fn_1_5C2C(s16, HsfObject*, unkStruct6*, u16); // ... extern f32 fn_1_93C0(f32, f32, f32); \ No newline at end of file diff --git a/src/REL/m410Dll/main.c b/src/REL/m410Dll/main.c index 873b053d..145d9728 100644 --- a/src/REL/m410Dll/main.c +++ b/src/REL/m410Dll/main.c @@ -214,7 +214,7 @@ void fn_1_DEC(omObjData *object) { fn_1_5A8(object); if (!WipeStatGet()) { - (); + fn_1_806C(); fn_1_3484(); fn_1_31F8(); MGSeqKillAll(); diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index 5d199170..3363c654 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -3,8 +3,9 @@ #include "rel_sqrt_consts.h" #include "math.h" #include "ext_math.h" +#include "string.h" #include "game/frand.h" -#include "game/hsfman.h" +#include "game/hsfdraw.h" #include "game/hsfmotion.h" #include "game/wipe.h" #include "game/audio.h" @@ -13,8 +14,12 @@ #include "game/sprite.h" // prototypes -void fn_1_57B4(unkStruct6*); -void fn_1_5C2C(s16, HsfObject*, unkStruct6*, s32); +void fn_1_6554(unkStruct6*, HsfObject*); +void fn_1_6B58(unkStruct6*, HsfObject*); +void fn_1_71FC(unkStruct6*, Vec*, s16, Vec); +void fn_1_7934(unkStruct6*, unkStruct8*, Vec*); +void fn_1_806C(ModelData*, f32[3][4]); +void fn_1_91A4(Vec*, Vec*, Vec*, f32*); f32 fn_1_93C0(f32, f32, f32); unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*); s16 fn_1_956C(AnimData*, s32, f32, s32, s32); @@ -1266,4 +1271,156 @@ void fn_1_57B4(unkStruct6* arg0) { static const GXColor lbl_1_rodata_148 = { 0xFF, 0xFF, 0xFF, 0xFF -}; \ No newline at end of file +}; + +void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) { + Mtx sp68; + Vec sp44[3]; + Vec sp38; + Vec sp2C; + ModelData* sp1C; + GXColor sp18; + Vec* var_r21; + Vec* var_r19; + s16 var_r20; + unkStruct9* var_r22; + s16 var_r24; + s16 var_r23; + HsfTransform* var_r25; + s16 var_r27; + ModelData* var_r29; + s16 var_r28; + s16 var_r30; + + sp18 = lbl_1_rodata_148; + sp1C = &Hu3DData[arg0]; + arg2->unk20 = 0; + if (arg1->type == 2) { + var_r30 = Hu3DHookFuncCreate(&fn_1_806C); + arg2->unk0 = var_r30; + Hu3DModelLayerSet(var_r30, 1); + var_r29 = &Hu3DData[var_r30]; + var_r29->unk_120 = (ParticleData* ) arg2; + var_r29->unk_58.x = var_r29->unk_58.z = var_r29->unk_58.y = 1.0f; + arg2->unk2 = arg3; + arg2->unk28 = &arg1->data.material[((s16*)(arg1->data.face->data))[1] & 0xFFF]; + arg2->unk2C = arg1->data.attribute; + arg2->unk38 = NULL; + arg2->unk3C = 0xFF; + arg2->unk3E = 0; + arg2->unk18 = HuMemDirectMallocNum(HEAP_DATA, arg1->data.vertex->count * 0xC, var_r29->unk_48); + fn_1_6554(arg2, arg1); + fn_1_6B58(arg2, arg1); + arg2->unkC = HuMemDirectMallocNum(HEAP_DATA, arg2->unk8 * 0xC, var_r29->unk_48); + arg2->unk10 = HuMemDirectMallocNum(HEAP_DATA, arg2->unk8 * 0xC, var_r29->unk_48); + arg2->unk14 = HuMemDirectMallocNum(HEAP_DATA, arg2->unk8 * 0xC, var_r29->unk_48); + if (arg2->unk28->numAttrs != 0) { + arg2->unk1C = HuMemDirectMallocNum(HEAP_DATA, arg1->data.st->count * 8, var_r29->unk_48); + var_r22 = arg1->data.st->data; + } else { + arg2->unk1C = NULL; + var_r22 = NULL; + } + var_r25 = &arg1->data.base; + PSMTXScale(sp68, var_r25->scale.x, var_r25->scale.y, var_r25->scale.z); + mtxRotCat(sp68, var_r25->rot.x, var_r25->rot.y, var_r25->rot.z); + mtxTransCat(sp68, var_r25->pos.x, var_r25->pos.y, var_r25->pos.z); + + for (var_r30 = 0; var_r30 < arg2->unk20; var_r30++) { + sp2C.x = sp2C.y = sp2C.z = 0.0f; + + for (var_r28 = 0; var_r28 < 3; var_r28++) { + if ((arg2->unk2 & 1) != 0) { + var_r23 = arg2->unk24[var_r30].unk0[var_r28][0]; + var_r27 = var_r23; + } else { + var_r27 = arg2->unk24[var_r30].unk18[var_r28]; + var_r23 = arg2->unk24[var_r30].unk0[var_r28][0]; + } + PSMTXMultVec(sp68, &((Vec*)(arg1->data.vertex->data))[var_r23], &sp38); + arg2->unkC[var_r27] = sp38; + sp44[var_r28] = arg2->unkC[var_r27]; + arg2->unk14[var_r27] = arg2->unk18[var_r23]; + sp2C.x += sp38.x; + sp2C.y += sp38.y; + sp2C.z += sp38.z; + if (arg2->unk28->numAttrs != 0) { + var_r23 = arg2->unk24[var_r30].unk0[var_r28][3]; + var_r27 = var_r23; + arg2->unk1C[var_r27].unk0 = var_r22[var_r23].unk0; + arg2->unk1C[var_r27].unk4 = var_r22[var_r23].unk4; + } + } + fn_1_91A4(&sp44[0], &sp44[1], &sp44[2], &arg2->unk24[var_r30].unk68); + if ((arg2->unk2 & 2) != 0) { + var_r27 = arg2->unk24[var_r30].unk1E; + fn_1_71FC(arg2, &arg2->unkC[var_r27], var_r30, sp2C); + sp2C.x += arg2->unkC[var_r27].x; + sp2C.y += arg2->unkC[var_r27].y; + sp2C.z += arg2->unkC[var_r27].z; + } + fn_1_7934(arg2, &arg2->unk24[var_r30], &sp2C); + } + memcpy(arg2->unk10, arg2->unkC, arg2->unk8 * 0xC); + DCFlushRangeNoSync(arg2->unkC, arg2->unk8 * 0xC); + DCFlushRangeNoSync(arg2->unk14, arg2->unk8 * 0xC); + if (arg2->unk28->numAttrs != 0) { + DCFlushRangeNoSync(arg2->unk1C, arg1->data.st->count * 8); + } + var_r20 = 0; + var_r19 = var_r21 = HuMemDirectMallocNum(HEAP_DATA, 0x20000, var_r29->unk_48); + GXBeginDisplayList(var_r19, 0x20000); + if ((arg2->unk2 & 2) != 0) { + GXBegin(GX_TRIANGLES, GX_VTXFMT0, (arg2->unk20 * 0xC)); + + for (var_r30 = 0; var_r30 < arg2->unk20; var_r30++) { + + for (var_r28 = 0; var_r28 < 3; var_r28++) { + if ((arg2->unk2 & 1) != 0) { + var_r27 = arg2->unk24[var_r30].unk0[var_r28][0]; + } else { + var_r27 = arg2->unk24[var_r30].unk18[var_r28]; + } + GXPosition1x16(var_r27); + GXNormal1x16(var_r27); + if (arg2->unk28->numAttrs != 0) { + GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r28][3]); + } + } + + for (var_r24 = 0; var_r24 < 9; var_r24++) { + if (var_r20 < arg2->unk24[var_r30].unk0[var_r24][16]) { + var_r20 = arg2->unk24[var_r30].unk0[var_r24][16]; + } + GXPosition1x16(arg2->unk24[var_r30].unk0[var_r24][16]); + GXNormal1x16(arg2->unk24[var_r30].unk0[var_r24][16]); + if (arg2->unk28->numAttrs != 0) { + GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r24][19]); + } + } + } + } else { + GXBegin(GX_TRIANGLES, GX_VTXFMT0, (arg2->unk20 * 3)); + for (var_r30 = 0; var_r30 < arg2->unk20; var_r30++) { + for (var_r28 = 0; var_r28 < 3; var_r28++) { + if ((arg2->unk2 & 1) != 0) { + var_r27 = arg2->unk24[var_r30].unk0[var_r28][0]; + } else { + var_r27 = arg2->unk24[var_r30].unk18[var_r28]; + } + GXPosition1x16(var_r27); + GXNormal1x16(var_r27); + if (arg2->unk28->numAttrs != 0) { + GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r28][3]); + } + } + } + } + arg2->unk34 = GXEndDisplayList(); + DCFlushRangeNoSync(var_r21, arg2->unk34); + arg2->unk30 = HuMemDirectMallocNum(HEAP_DATA, arg2->unk34, var_r29->unk_48); + memcpy(arg2->unk30, var_r21, arg2->unk34); + DCFlushRangeNoSync(arg2->unk30, arg2->unk34); + HuMemDirectFree(var_r21); + } +} \ No newline at end of file From 5deb307cb0b98281093883ceab2f8f7776059676 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Mon, 17 Jun 2024 23:03:02 -0400 Subject: [PATCH 08/10] progress (fn_1_71FC) --- config/GMPE01_00/rels/m440Dll/symbols.txt | 2 +- include/REL/m440Dll.h | 75 +++--- src/REL/m440Dll/main.c | 284 ++++++++++++++++++++-- 3 files changed, 308 insertions(+), 53 deletions(-) diff --git a/config/GMPE01_00/rels/m440Dll/symbols.txt b/config/GMPE01_00/rels/m440Dll/symbols.txt index ae880f06..6f2ffdd6 100644 --- a/config/GMPE01_00/rels/m440Dll/symbols.txt +++ b/config/GMPE01_00/rels/m440Dll/symbols.txt @@ -161,7 +161,7 @@ lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x1 data:byte +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:byte lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0xC data:2byte lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index f7863a1e..82effd83 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -67,32 +67,6 @@ typedef struct _unkStruct5 { // could be unkStruct3 typedef void (*m440Func5)(omObjData*, unkStruct5*, Mtx*); typedef void (*m440Func6)(struct _unkStruct6*); -typedef struct _unkStruct8 { - s16 unk0[3][4]; - s16 unk18[3]; - s16 unk1E; - char unk20[0x48]; - f32 unk68; - char unk6C[0x10]; - Vec unk7C; - Vec unk88; - Vec unk94; - Vec unkA0; - Vec unkAC; - Vec unkB8; - Vec unkC4; -} unkStruct8; - -typedef struct _unkStruct7 { - GXColor unk0; - Vec unk4; -} unkStruct7; - -typedef struct _unkStruct9 { - f32 unk0; - f32 unk4; -} unkStruct9; - typedef struct _unkStruct6 { s16 unk0; u16 unk2; @@ -103,9 +77,9 @@ typedef struct _unkStruct6 { Vec* unk10; Vec* unk14; Vec* unk18; - unkStruct9* unk1C; + struct _unkStruct9* unk1C; s32 unk20; - unkStruct8* unk24; + struct _unkStruct8* unk24; HsfMaterial* unk28; HsfAttribute* unk2C; void* unk30; @@ -115,6 +89,48 @@ typedef struct _unkStruct6 { s16 unk3E; } unkStruct6; // sizeof 0x40 +typedef struct _unkStruct7 { + GXColor unk0; + Vec unk4; +} unkStruct7; // sizeof 0x10 + +typedef struct _unkStruct11 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; +} unkStruct11; + +typedef struct _unkStruct8 { + unkStruct11 unk0[3]; + s16 unk18[3]; + s16 unk1E; + unkStruct11 unk20[3]; + char unk38[0x30]; + f32 unk68[5]; + Vec unk7C; + Vec unk88; + Vec unk94; + Vec unkA0; + Vec unkAC; + Vec unkB8; + Vec unkC4; +} unkStruct8; // sizeof 0xD0 + +typedef struct _unkStruct9 { + f32 unk0; + f32 unk4; +} unkStruct9; // sizeof 0x8 + +typedef struct _unkStruct10 { + s16 unk0; + s16 unk2; + unkStruct11 unk4[3]; + u32 unk1C; + unkStruct11* unk20; + char unk24[0xC]; +} unkStruct10; // sizeof 0x30 + ////// BSS ////// // object.c @@ -205,5 +221,8 @@ extern void fn_1_4F34(unkStruct6*); extern void fn_1_5010(unkStruct6*, Vec*, f32); extern void fn_1_57B4(unkStruct6*); extern void fn_1_5C2C(s16, HsfObject*, unkStruct6*, u16); +extern void fn_1_6554(unkStruct6*, HsfObject*); +extern void fn_1_6B58(unkStruct6*, HsfObject*); +extern void fn_1_71FC(unkStruct6*, Vec*, s16, Vec); // ... extern f32 fn_1_93C0(f32, f32, f32); \ No newline at end of file diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index 3363c654..e25d3b87 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -14,12 +14,9 @@ #include "game/sprite.h" // prototypes -void fn_1_6554(unkStruct6*, HsfObject*); -void fn_1_6B58(unkStruct6*, HsfObject*); -void fn_1_71FC(unkStruct6*, Vec*, s16, Vec); void fn_1_7934(unkStruct6*, unkStruct8*, Vec*); void fn_1_806C(ModelData*, f32[3][4]); -void fn_1_91A4(Vec*, Vec*, Vec*, f32*); +void fn_1_91A4(Vec*, Vec*, Vec*, f32[5]); f32 fn_1_93C0(f32, f32, f32); unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*); s16 fn_1_956C(AnimData*, s32, f32, s32, s32); @@ -1244,7 +1241,7 @@ void fn_1_57B4(unkStruct6* arg0) { for (var_r28 = 0; var_r28 < 3; var_r28++) { if ((arg0->unk2 & 1) != 0) { - var_r29 = var_r31->unk0[var_r28][0]; + var_r29 = var_r31->unk0[var_r28].unk0; } else { var_r29 = var_r31->unk18[var_r28]; } @@ -1269,17 +1266,13 @@ void fn_1_57B4(unkStruct6* arg0) { DCFlushRangeNoSync(arg0->unkC, arg0->unk8 * 0xC); } -static const GXColor lbl_1_rodata_148 = { - 0xFF, 0xFF, 0xFF, 0xFF -}; - void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) { Mtx sp68; Vec sp44[3]; Vec sp38; Vec sp2C; ModelData* sp1C; - GXColor sp18; + GXColor sp18 = { 0xFF, 0xFF, 0xFF, 0xFF }; Vec* var_r21; Vec* var_r19; s16 var_r20; @@ -1292,7 +1285,6 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) { s16 var_r28; s16 var_r30; - sp18 = lbl_1_rodata_148; sp1C = &Hu3DData[arg0]; arg2->unk20 = 0; if (arg1->type == 2) { @@ -1331,11 +1323,11 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) { for (var_r28 = 0; var_r28 < 3; var_r28++) { if ((arg2->unk2 & 1) != 0) { - var_r23 = arg2->unk24[var_r30].unk0[var_r28][0]; + var_r23 = arg2->unk24[var_r30].unk0[var_r28].unk0; var_r27 = var_r23; } else { var_r27 = arg2->unk24[var_r30].unk18[var_r28]; - var_r23 = arg2->unk24[var_r30].unk0[var_r28][0]; + var_r23 = arg2->unk24[var_r30].unk0[var_r28].unk0; } PSMTXMultVec(sp68, &((Vec*)(arg1->data.vertex->data))[var_r23], &sp38); arg2->unkC[var_r27] = sp38; @@ -1345,13 +1337,13 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) { sp2C.y += sp38.y; sp2C.z += sp38.z; if (arg2->unk28->numAttrs != 0) { - var_r23 = arg2->unk24[var_r30].unk0[var_r28][3]; + var_r23 = arg2->unk24[var_r30].unk0[var_r28].unk6; var_r27 = var_r23; arg2->unk1C[var_r27].unk0 = var_r22[var_r23].unk0; arg2->unk1C[var_r27].unk4 = var_r22[var_r23].unk4; } } - fn_1_91A4(&sp44[0], &sp44[1], &sp44[2], &arg2->unk24[var_r30].unk68); + fn_1_91A4(&sp44[0], &sp44[1], &sp44[2], arg2->unk24[var_r30].unk68); if ((arg2->unk2 & 2) != 0) { var_r27 = arg2->unk24[var_r30].unk1E; fn_1_71FC(arg2, &arg2->unkC[var_r27], var_r30, sp2C); @@ -1377,25 +1369,25 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) { for (var_r28 = 0; var_r28 < 3; var_r28++) { if ((arg2->unk2 & 1) != 0) { - var_r27 = arg2->unk24[var_r30].unk0[var_r28][0]; + var_r27 = arg2->unk24[var_r30].unk0[var_r28].unk0; } else { var_r27 = arg2->unk24[var_r30].unk18[var_r28]; } GXPosition1x16(var_r27); GXNormal1x16(var_r27); if (arg2->unk28->numAttrs != 0) { - GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r28][3]); + GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r28].unk6); } } for (var_r24 = 0; var_r24 < 9; var_r24++) { - if (var_r20 < arg2->unk24[var_r30].unk0[var_r24][16]) { - var_r20 = arg2->unk24[var_r30].unk0[var_r24][16]; + if (var_r20 < arg2->unk24[var_r30].unk20[var_r24].unk0) { + var_r20 = arg2->unk24[var_r30].unk20[var_r24].unk0; } - GXPosition1x16(arg2->unk24[var_r30].unk0[var_r24][16]); - GXNormal1x16(arg2->unk24[var_r30].unk0[var_r24][16]); + GXPosition1x16(arg2->unk24[var_r30].unk20[var_r24].unk0); + GXNormal1x16(arg2->unk24[var_r30].unk20[var_r24].unk0); if (arg2->unk28->numAttrs != 0) { - GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r24][19]); + GXTexCoord1x16(arg2->unk24[var_r30].unk20[var_r24].unk6); } } } @@ -1404,14 +1396,14 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) { for (var_r30 = 0; var_r30 < arg2->unk20; var_r30++) { for (var_r28 = 0; var_r28 < 3; var_r28++) { if ((arg2->unk2 & 1) != 0) { - var_r27 = arg2->unk24[var_r30].unk0[var_r28][0]; + var_r27 = arg2->unk24[var_r30].unk0[var_r28].unk0; } else { var_r27 = arg2->unk24[var_r30].unk18[var_r28]; } GXPosition1x16(var_r27); GXNormal1x16(var_r27); if (arg2->unk28->numAttrs != 0) { - GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r28][3]); + GXTexCoord1x16(arg2->unk24[var_r30].unk0[var_r28].unk6); } } } @@ -1423,4 +1415,248 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) { DCFlushRangeNoSync(arg2->unk30, arg2->unk34); HuMemDirectFree(var_r21); } +} + +void fn_1_6554(unkStruct6* arg0, HsfObject* arg1) { + Vec sp20[3]; + f32 spC[5]; + f32 var_f28; + HsfBuffer* temp_r26; + s16 var_r28; + s16 var_r29; + unkStruct10* var_r30; + + temp_r26 = arg1->data.face; + + for (var_r28 = 0; var_r28 < arg1->data.vertex->count; var_r28++) { + arg0->unk18[var_r28].x = 0.0f; + arg0->unk18[var_r28].y = 0.0f; + arg0->unk18[var_r28].z = 0.0f; + } + var_r30 = (unkStruct10*)temp_r26->data; + + for (var_r28 = 0; var_r28 < temp_r26->count; var_r28++, var_r30++) { + sp20[0] = ((Vec*)(arg1->data.vertex->data))[var_r30->unk4[0].unk0]; + sp20[1] = ((Vec*)(arg1->data.vertex->data))[var_r30->unk4[1].unk0]; + sp20[2] = ((Vec*)(arg1->data.vertex->data))[var_r30->unk4[2].unk0]; + fn_1_91A4(&sp20[0], &sp20[1], &sp20[2], spC); + spC[0] = -spC[0]; + spC[1] = -spC[1]; + spC[2] = -spC[2]; + switch (var_r30->unk0 & 7) { + case 2: + for (var_r29 = 0; var_r29 < 3; var_r29++) { + arg0->unk18[var_r30->unk4[var_r29].unk0].x += spC[0]; + arg0->unk18[var_r30->unk4[var_r29].unk0].y += spC[1]; + arg0->unk18[var_r30->unk4[var_r29].unk0].z += spC[2]; + } + break; + case 3: + for (var_r29 = 0; var_r29 < 4; var_r29++) { + arg0->unk18[var_r30->unk4[var_r29].unk0].x += spC[0]; + arg0->unk18[var_r30->unk4[var_r29].unk0].y += spC[1]; + arg0->unk18[var_r30->unk4[var_r29].unk0].z += spC[2]; + } + break; + case 4: + for (var_r29 = 0; var_r29 < 3; var_r29++) { + arg0->unk18[var_r30->unk4[var_r29].unk0].x += spC[0]; + arg0->unk18[var_r30->unk4[var_r29].unk0].y += spC[1]; + arg0->unk18[var_r30->unk4[var_r29].unk0].z += spC[2]; + } + for (var_r29 = 0; var_r29 < var_r30->unk1C; var_r29++) { + arg0->unk18[var_r30->unk20[var_r29].unk0].x += spC[0]; + arg0->unk18[var_r30->unk20[var_r29].unk0].y += spC[1]; + arg0->unk18[var_r30->unk20[var_r29].unk0].z += spC[2]; + } + break; + } + } + + for (var_r28 = 0; var_r28 < arg1->data.vertex->count; var_r28++) { + sp20[0].x = arg0->unk18[var_r28].x; + sp20[0].y = arg0->unk18[var_r28].y; + sp20[0].z = arg0->unk18[var_r28].z; + var_f28 = sqrtf((sp20[0].z * sp20[0].z) + ((sp20[0].x * sp20[0].x) + (sp20[0].y * sp20[0].y))); + arg0->unk18[var_r28].x /= var_f28; + arg0->unk18[var_r28].y /= var_f28; + arg0->unk18[var_r28].z /= var_f28; + } +} + +void fn_1_6B58(unkStruct6* arg0, HsfObject* arg1) { + HsfBuffer* temp_r25; + s32 var_r28; + s32 var_r30; + u8 var_r24; + ModelData* var_r22; + unkStruct8* var_r31; + unkStruct11 *temp_r26; + unkStruct10* var_r29; + + var_r22 = &Hu3DData[arg0->unk0]; + temp_r25 = arg1->data.face; + var_r24 = ((arg0->unk2 & 1) != 0) ? 1 : 0; + arg0->unk20 = 0; + + var_r28 = 0; + var_r29 = (unkStruct10*)temp_r25->data; + for (;var_r28 < temp_r25->count;var_r28++, var_r29++) { + switch (var_r29->unk0 & 7) { + case 2: + arg0->unk20 += 1; + break; + case 3: + arg0->unk20 += 2; + break; + case 4: + arg0->unk20 += var_r29->unk1C + 1; + break; + } + } + arg0->unk24 = HuMemDirectMallocNum(HEAP_DATA, arg0->unk20 * 0xD0, var_r22->unk_48); + var_r31 = arg0->unk24; + if (var_r24 != 0) { + var_r30 = arg1->data.vertex->count; + } else { + var_r30 = 0; + } + + var_r28 = 0; + var_r29 = (unkStruct10*)temp_r25->data;\ + for (;var_r28 < temp_r25->count; var_r28++, var_r29++) { + switch (var_r29->unk0 & 7) { + case 2: + var_r31->unk0[0] = var_r29->unk4[0]; + var_r31->unk0[1] = var_r29->unk4[2]; + var_r31->unk0[2] = var_r29->unk4[1]; + if (var_r24 == 0) { + var_r31->unk18[0] = var_r30++; + var_r31->unk18[1] = var_r30++; + var_r31->unk18[2] = var_r30++; + } + var_r31->unk1E = var_r30++; + var_r31++; + break; + case 3: + var_r31->unk0[0] = var_r29->unk4[0]; + var_r31->unk0[1] = var_r29->unk4[2]; + var_r31->unk0[2] = var_r29->unk4[1]; + if (var_r24 == 0) { + var_r31->unk18[0] = var_r30++; + var_r31->unk18[1] = var_r30++; + var_r31->unk18[2] = var_r30++; + } + var_r31->unk1E = var_r30++; + var_r31++; + var_r31->unk0[0] = var_r29->unk4[1]; + var_r31->unk0[1] = var_r29->unk4[2]; + var_r31->unk0[2] = var_r29->unk4[3]; + if (var_r24 == 0) { + var_r31->unk18[0] = var_r30++; + var_r31->unk18[1] = var_r30++; + var_r31->unk18[2] = var_r30++; + } + var_r31->unk1E = var_r30++; + var_r31++; + break; + case 4: + var_r31->unk0[0] = var_r29->unk4[0]; + var_r31->unk0[1] = var_r29->unk4[2]; + var_r31->unk0[2] = var_r29->unk4[1]; + if (var_r24 == 0) { + var_r31->unk18[0] = var_r30++; + var_r31->unk18[1] = var_r30++; + var_r31->unk18[2] = var_r30++; + } + var_r31->unk1E = var_r30++; + var_r31++; + var_r28 = 0; + temp_r26 = var_r29->unk4; + for (;var_r28 < var_r29->unk1C; var_r28++) { + if (var_r28 == 0) { + var_r31->unk0[0] = var_r31->unk0[1]; + var_r31->unk0[1] = var_r31->unk0[2]; + var_r31->unk0[2] = temp_r26[0]; + } else if (var_r28 == 1) { + var_r31->unk0[0] = var_r31->unk0[2]; + var_r31->unk0[1] = temp_r26[1]; + var_r31->unk0[2] = temp_r26[0]; + } else { + if ((var_r28 % 2) != 0) { + var_r31->unk0[0] = temp_r26[var_r28 - 2]; + var_r31->unk0[1] = temp_r26[var_r28 - 0]; + var_r31->unk0[2] = temp_r26[var_r28 - 1]; + } else { + var_r31->unk0[0] = temp_r26[var_r28 - 2]; + var_r31->unk0[1] = temp_r26[var_r28 - 1]; + var_r31->unk0[2] = temp_r26[var_r28 - 0]; + } + } + if (var_r24 == 0) { + var_r31->unk18[0] = var_r30++; + var_r31->unk18[1] = var_r30++; + var_r31->unk18[2] = var_r30++; + } + var_r31->unk1E = var_r30++; + var_r31++; + } + break; + } + } + arg0->unk8 = var_r30; +} + +void fn_1_71FC(unkStruct6* arg0, Vec* arg1, s16 arg2, Vec arg3) { + Vec sp40; + Vec sp34; + Vec sp28[3]; + Vec sp1C; + unkStruct8* temp_r30 = &arg0->unk24[arg2]; + s16 sp10[3][2] = { { 0, 1 }, { 0, 2 }, { 1, 2 } }; + f32 var_f31; + f32 var_f30; + f32 var_f29; + f32 var_f27; + s16 var_r31; + + if ((arg0->unk2 & 1) != 0) { + sp28[0] = arg0->unkC[temp_r30->unk0[0].unk0]; + sp28[1] = arg0->unkC[temp_r30->unk0[1].unk0]; + sp28[2] = arg0->unkC[temp_r30->unk0[2].unk0]; + } else { + sp28[0] = arg0->unkC[temp_r30->unk18[0]]; + sp28[1] = arg0->unkC[temp_r30->unk18[1]]; + sp28[2] = arg0->unkC[temp_r30->unk18[2]]; + } + sp1C.x = temp_r30->unk68[0]; + sp1C.y = temp_r30->unk68[1]; + sp1C.z = temp_r30->unk68[2]; + PSVECNormalize(&sp1C, &sp1C); + var_f31 = var_f30 = var_f29 = 0.0f; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + var_f31 += (sp28[sp10[var_r31][0]].x - sp28[sp10[var_r31][1]].x < 0.0f) + ? -(sp28[sp10[var_r31][0]].x - sp28[sp10[var_r31][1]].x) + : (sp28[sp10[var_r31][0]].x - sp28[sp10[var_r31][1]].x); + + + var_f30 += (sp28[sp10[var_r31][0]].y - sp28[sp10[var_r31][1]].y < 0.0f) + ? -(sp28[sp10[var_r31][0]].y - sp28[sp10[var_r31][1]].y) + : (sp28[sp10[var_r31][0]].y - sp28[sp10[var_r31][1]].y); + + var_f29 += (sp28[sp10[var_r31][0]].z - sp28[sp10[var_r31][1]].z < 0.0f) + ? -(sp28[sp10[var_r31][0]].z - sp28[sp10[var_r31][1]].z) + : (sp28[sp10[var_r31][0]].z - sp28[sp10[var_r31][1]].z); + } + var_f31 *= 0.3333f; + var_f30 *= 0.3333f; + var_f29 *= 0.3333f; + var_f27 = 0.5f * sqrtf((var_f29 * var_f29) + ((var_f31 * var_f31) + (var_f30 * var_f30))); + sp28[0].x = 0.3333f * arg3.x; + sp28[0].y = 0.3333f * arg3.y; + sp28[0].z = 0.3333f * arg3.z; + arg1->x = (sp28[0].x - (sp1C.x * var_f27)); + arg1->y = (sp28[0].y - (sp1C.y * var_f27)); + arg1->z = (sp28[0].z - (sp1C.z * var_f27)); } \ No newline at end of file From 8f341ce7b9e36a0320fab091cdda8e201a447c8d Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 22 Jun 2024 14:26:44 -0400 Subject: [PATCH 09/10] progress (fn_1_8470) --- include/REL/m440Dll.h | 70 ++++++++- src/REL/m440Dll/main.c | 329 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 381 insertions(+), 18 deletions(-) diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index 82effd83..5df7cd55 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -66,6 +66,7 @@ typedef struct _unkStruct5 { // could be unkStruct3 typedef void (*m440Func5)(omObjData*, unkStruct5*, Mtx*); typedef void (*m440Func6)(struct _unkStruct6*); +typedef void (*m440Func14)(struct _unkStruct14*); typedef struct _unkStruct6 { s16 unk0; @@ -77,7 +78,7 @@ typedef struct _unkStruct6 { Vec* unk10; Vec* unk14; Vec* unk18; - struct _unkStruct9* unk1C; + HsfVector2f* unk1C; s32 unk20; struct _unkStruct8* unk24; HsfMaterial* unk28; @@ -117,11 +118,6 @@ typedef struct _unkStruct8 { Vec unkC4; } unkStruct8; // sizeof 0xD0 -typedef struct _unkStruct9 { - f32 unk0; - f32 unk4; -} unkStruct9; // sizeof 0x8 - typedef struct _unkStruct10 { s16 unk0; s16 unk2; @@ -131,6 +127,62 @@ typedef struct _unkStruct10 { char unk24[0xC]; } unkStruct10; // sizeof 0x30 +typedef struct _unkStruct12 { + char unk0[0xA]; + u8 unkA; + u8 unkB[3]; + u8 unkE[3]; + char unk12[0x2]; + f32 unk14; + char unk18[0x4]; + f32 unk1C; + char unk20[0x10]; + u32 unk30; + u32 unk34; + s32* unk38; +} unkStruct12; + +typedef struct _unkStruct13 { + char unk0[0xA]; + u8 unkA; + char unkB[0x15]; + f32 unk20; + char unk24[0x40]; + u32 unk64; + u32 unk68; + char unk6C[0x14]; + struct _unkStruct15* unk80; +} unkStruct13; // sizeof 0x84 + +typedef struct _unkStruct14 { + char unk0[0xC]; + void* unkC; + char unk10[0x4]; + void* unk14; + char unk18[0x4]; + void* unk1C; + char unk20[0x8]; + unkStruct12* unk28; + unkStruct13* unk2C; + void* unk30; + u32 unk34; + m440Func14 unk38; + s16 unk3C; +} unkStruct14; + +typedef struct _unkStruct15 { + char unk0[0x8]; + u8 unk8; + u8 unk9; + s16 unkA; + s16 unkC; + s16 unkE; + char unk10[0x4]; + void* unk14; + char unk18[0x4]; + void* unk1C; +} unkStruct15; + ////// BSS ////// // object.c @@ -140,6 +192,8 @@ extern omObjData* lbl_1_bss_6C; extern omObjData* lbl_1_bss_68; extern unkStruct6* lbl_1_bss_64; extern s16 lbl_1_bss_60; +extern Mtx lbl_1_bss_30; +extern s16 lbl_1_bss_2C; extern s16 lbl_1_bss_10[10]; extern s16 lbl_1_bss_E; extern u8 lbl_1_bss_C; @@ -224,5 +278,9 @@ extern void fn_1_5C2C(s16, HsfObject*, unkStruct6*, u16); extern void fn_1_6554(unkStruct6*, HsfObject*); extern void fn_1_6B58(unkStruct6*, HsfObject*); extern void fn_1_71FC(unkStruct6*, Vec*, s16, Vec); +extern void fn_1_7934(unkStruct6*, unkStruct8*, Vec*); +extern void fn_1_7D60(unkStruct15*, unkStruct13*, s16); +extern void fn_1_806C(ModelData* arg0, Mtx arg1); // ... +extern void fn_1_91A4(Vec*, Vec*, Vec*, f32[5]); extern f32 fn_1_93C0(f32, f32, f32); \ No newline at end of file diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index e25d3b87..f542ccbd 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -14,8 +14,8 @@ #include "game/sprite.h" // prototypes -void fn_1_7934(unkStruct6*, unkStruct8*, Vec*); -void fn_1_806C(ModelData*, f32[3][4]); +void fn_1_8470(unkStruct12*, unkStruct13*); +void fn_1_8AC4(Mtx); void fn_1_91A4(Vec*, Vec*, Vec*, f32[5]); f32 fn_1_93C0(f32, f32, f32); unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*); @@ -36,6 +36,8 @@ omObjData* lbl_1_bss_6C; omObjData* lbl_1_bss_68; unkStruct6* lbl_1_bss_64; s16 lbl_1_bss_60; +Mtx lbl_1_bss_30; +s16 lbl_1_bss_2C; s16 lbl_1_bss_10[10]; s16 lbl_1_bss_E; u8 lbl_1_bss_C; @@ -667,6 +669,7 @@ s16 lbl_1_data_F0[2] = {0, 0}; s32 lbl_1_data_F4[4] = { 20, 60, 100, 140 }; s16 lbl_1_data_104[2] = {0, 0}; s16 lbl_1_data_108[2] = {0, 0}; +s16 lbl_1_data_10C[9] = { 0, 3, 1, 0, 2, 3, 1, 3, 2 }; void fn_1_2B04(omObjData* object) { f32 temp_f31; @@ -1276,7 +1279,7 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) { Vec* var_r21; Vec* var_r19; s16 var_r20; - unkStruct9* var_r22; + HsfVector2f* var_r22; s16 var_r24; s16 var_r23; HsfTransform* var_r25; @@ -1339,8 +1342,8 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) { if (arg2->unk28->numAttrs != 0) { var_r23 = arg2->unk24[var_r30].unk0[var_r28].unk6; var_r27 = var_r23; - arg2->unk1C[var_r27].unk0 = var_r22[var_r23].unk0; - arg2->unk1C[var_r27].unk4 = var_r22[var_r23].unk4; + arg2->unk1C[var_r27].x = var_r22[var_r23].y; + arg2->unk1C[var_r27].x = var_r22[var_r23].y; } } fn_1_91A4(&sp44[0], &sp44[1], &sp44[2], arg2->unk24[var_r30].unk68); @@ -1637,17 +1640,17 @@ void fn_1_71FC(unkStruct6* arg0, Vec* arg1, s16 arg2, Vec arg3) { for (var_r31 = 0; var_r31 < 3; var_r31++) { var_f31 += (sp28[sp10[var_r31][0]].x - sp28[sp10[var_r31][1]].x < 0.0f) - ? -(sp28[sp10[var_r31][0]].x - sp28[sp10[var_r31][1]].x) - : (sp28[sp10[var_r31][0]].x - sp28[sp10[var_r31][1]].x); + ? -(sp28[sp10[var_r31][0]].x - sp28[sp10[var_r31][1]].x) + : (sp28[sp10[var_r31][0]].x - sp28[sp10[var_r31][1]].x); var_f30 += (sp28[sp10[var_r31][0]].y - sp28[sp10[var_r31][1]].y < 0.0f) - ? -(sp28[sp10[var_r31][0]].y - sp28[sp10[var_r31][1]].y) - : (sp28[sp10[var_r31][0]].y - sp28[sp10[var_r31][1]].y); + ? -(sp28[sp10[var_r31][0]].y - sp28[sp10[var_r31][1]].y) + : (sp28[sp10[var_r31][0]].y - sp28[sp10[var_r31][1]].y); var_f29 += (sp28[sp10[var_r31][0]].z - sp28[sp10[var_r31][1]].z < 0.0f) - ? -(sp28[sp10[var_r31][0]].z - sp28[sp10[var_r31][1]].z) - : (sp28[sp10[var_r31][0]].z - sp28[sp10[var_r31][1]].z); + ? -(sp28[sp10[var_r31][0]].z - sp28[sp10[var_r31][1]].z) + : (sp28[sp10[var_r31][0]].z - sp28[sp10[var_r31][1]].z); } var_f31 *= 0.3333f; var_f30 *= 0.3333f; @@ -1659,4 +1662,306 @@ void fn_1_71FC(unkStruct6* arg0, Vec* arg1, s16 arg2, Vec arg3) { arg1->x = (sp28[0].x - (sp1C.x * var_f27)); arg1->y = (sp28[0].y - (sp1C.y * var_f27)); arg1->z = (sp28[0].z - (sp1C.z * var_f27)); -} \ No newline at end of file +} + +void fn_1_7934(unkStruct6* arg0, unkStruct8* arg1, Vec* arg2) { + Vec sp2C[3]; + f32 sp18[5]; + s16 sp10[4]; + s16 sp8[4]; + s16 var_r28; + Vec* temp_r30; + Vec* temp_r4; + Vec* temp_r4_2; + Vec* temp_r4_3; + + arg1->unk88.x = arg1->unk88.y = arg1->unk88.z = 1.0f; + arg1->unk94.x = arg1->unk94.y = arg1->unk94.z = 0.0f; + arg1->unkA0.x = arg1->unkA0.y = arg1->unkA0.z = 0.0f; + arg1->unkAC.x = arg1->unkAC.y = arg1->unkAC.z = 0.0f; + arg1->unkB8.x = arg1->unkB8.y = arg1->unkB8.z = 0.0f; + arg1->unkC4.x = arg1->unkC4.y = arg1->unkC4.z = 0.0f; + + if ((arg0->unk2 & 2) != 0) { + arg2->x *= 0.25f; + arg2->y *= 0.25f; + arg2->z *= 0.25f; + } else { + arg2->x /= 3.0f; + arg2->y /= 3.0f; + arg2->z /= 3.0f; + } + arg1->unk7C.x = arg2->x; + arg1->unk7C.y = arg2->y; + arg1->unk7C.z = arg2->z; + if ((arg0->unk2 & 2) != 0) { + if ((arg0->unk2 & 1) != 0) { + sp10[0] = arg1->unk0[0].unk0; + sp10[1] = arg1->unk0[1].unk0; + sp10[2] = arg1->unk0[2].unk0; + } else { + sp10[0] = arg1->unk18[0]; + sp10[1] = arg1->unk18[1]; + sp10[2] = arg1->unk18[2]; + } + sp10[3] = arg1->unk1E; + sp8[0] = arg1->unk0[0].unk6; + sp8[1] = arg1->unk0[1].unk6; + sp8[2] = arg1->unk0[2].unk6; + sp8[3] = arg1->unk0[0].unk6; + + for (var_r28 = 0; var_r28 < 9; var_r28++) { + arg1->unk20[var_r28].unk0 = sp10[lbl_1_data_10C[var_r28]]; + arg1->unk20[var_r28].unk6 = sp8[lbl_1_data_10C[var_r28]]; + } + temp_r30 = &arg0->unk14[arg1->unk1E]; + temp_r30->x = temp_r30->y = temp_r30->z = 0.0f; + + for (var_r28 = 0; var_r28 < 3; var_r28++) { + sp2C[0] = arg0->unkC[sp10[lbl_1_data_10C[var_r28]]]; + sp2C[1] = arg0->unkC[sp10[lbl_1_data_10C[var_r28 + 1]]]; + sp2C[2] = arg0->unkC[sp10[lbl_1_data_10C[var_r28 + 2]]]; + fn_1_91A4(&sp2C[0], &sp2C[1], &sp2C[2], sp18); + temp_r30->x += sp18[0]; + temp_r30->y += sp18[1]; + temp_r30->z += sp18[2]; + } + temp_r30->x *= 0.3333f; + temp_r30->y *= 0.3333f; + temp_r30->z *= 0.3333f; + } +} + +void fn_1_7D60(unkStruct15* arg0, unkStruct13* arg1, s16 arg2) { + GXTexObj sp1C; + GXTlutObj sp10; + s32 sp8; + s16 temp_r29; + s16 temp_r28; + s16 var_r27; + s16 var_r26; + + if (!arg0) { + OSReport("Error: No Texture\n"); + return; + } + temp_r29 = arg0->unkA; + temp_r28 = arg0->unkC; + var_r27 = (arg1->unk64 == 1) ? 1 : 0; + var_r26 = (arg1->unk68 == 1) ? 1 : 0; + switch (arg0->unk8) { + case 6: + GXInitTexObj(&sp1C, arg0->unk1C, temp_r29, temp_r28, 6, var_r27, var_r26, 0); + break; + case 4: + GXInitTexObj(&sp1C, arg0->unk1C, temp_r29, temp_r28, 4, var_r27, var_r26, 0); + break; + case 5: + GXInitTexObj(&sp1C, arg0->unk1C, temp_r29, temp_r28, 5, var_r27, var_r26, 0); + break; + case 9: + if (arg0->unk9 < 8) { + GXInitTlutObj(&sp10, arg0->unk14, GX_TL_RGB565, arg0->unkE); + GXLoadTlut(&sp10, arg2); + GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C4, var_r27, var_r26, 0, arg2); + } else { + GXInitTlutObj(&sp10, arg0->unk14, GX_TL_RGB565, arg0->unkE); + GXLoadTlut(&sp10, arg2); + GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C8, var_r27, var_r26, 0, arg2); + } + break; + case 10: + if (arg0->unk9 < 8) { + GXInitTlutObj(&sp10, arg0->unk14, GX_TL_RGB5A3, arg0->unkE); + GXLoadTlut(&sp10, arg2); + GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C4, var_r27, var_r26, 0, arg2); + } else { + GXInitTlutObj(&sp10, arg0->unk14, GX_TL_RGB5A3, arg0->unkE); + GXLoadTlut(&sp10, arg2); + GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C8, var_r27, var_r26, 0, arg2); + } + break; + default: + OSReport("Error: Texture format\n"); + return; + } + GXInitTexObjLOD(&sp1C, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0, 0, GX_ANISO_1); + GXLoadTexObj(&sp1C, arg2); + return; +} + +void fn_1_806C(ModelData* arg0, Mtx arg1) { + Mtx sp14; + GXColor sp10; + unkStruct13* temp_r29; + unkStruct14* temp_r31; + m440Func14 temp_r27; + + temp_r31 = (unkStruct14*)arg0->unk_120; + if (((u8)omPauseChk() == 0) && (temp_r31->unk38)) { + temp_r27 = temp_r31->unk38; + temp_r27(temp_r31); + } + GXLoadPosMtxImm(arg1, 0); + PSMTXInvXpose(arg1, sp14); + GXLoadNrmMtxImm(sp14, 0); + fn_1_8AC4(arg1); + sp10.r = (temp_r31->unk28->unkB[0] * arg0->unk_58.x); + sp10.g = (temp_r31->unk28->unkB[1] * arg0->unk_58.z); + sp10.b = (temp_r31->unk28->unkB[2] * arg0->unk_58.y); + sp10.a = 0xFF; + GXSetChanAmbColor(GX_COLOR0A0, sp10); + sp10.r = temp_r31->unk28->unkE[0]; + sp10.g = temp_r31->unk28->unkE[1]; + sp10.b = temp_r31->unk28->unkE[2]; + sp10.a = 0xFF; + GXSetChanMatColor(GX_COLOR0A0, sp10); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0); + GXSetArray(GX_VA_POS, temp_r31->unkC, 0xCU); + GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_TEX_S, GX_RGBA6, 0); + GXSetArray(GX_VA_NRM, temp_r31->unk14, 0xCU); + lbl_1_bss_C = temp_r31->unk3C; + if (temp_r31->unk28->unk34 == 0) { + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ONE, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetNumTexGens(0); + GXSetNumChans(0); + } else { + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0); + GXSetArray(GX_VA_TEX0, temp_r31->unk1C, 8); + temp_r29 = &temp_r31->unk2C[temp_r31->unk28->unk38[0]]; + fn_1_7D60(temp_r29->unk80, temp_r29, 0); + lbl_1_bss_2C = 1; + HuSprTexLoad(*hiliteAnim, 0, lbl_1_bss_2C, GX_CLAMP, GX_CLAMP, GX_LINEAR); + fn_1_8470(temp_r31->unk28, temp_r29); + } + GXSetZMode(1, GX_LEQUAL, 1); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetZCompLoc(0); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + GXCallDisplayList(temp_r31->unk30, temp_r31->unk34); +} + +void fn_1_8470(unkStruct12* arg0, unkStruct13* arg1) { + ModelData sp40; + Mtx sp10; + GXColor spC; + GXColor sp8; + f32 var_f30; + f32 var_f31; + s16 temp_r29; + u16 var_r31; + u32 temp_r24; + u16 var_r28; + u16 var_r27; + s32 var_r25; + + sp40.attr = 0x20000; + temp_r24 = arg0->unk30; + if ((arg0->unkA == 2) || (arg0->unkA == 3)) { + var_r27 = 1; + } else { + var_r27 = 0; + if ((arg0->unkA == 0) || (arg0->unkA == 5)) { + var_r25 = 0; + } else { + var_r25 = 1; + } + } + var_r28 = var_r31 = 1; + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, 0, 0x7D); + if (1.0f == arg1->unk20) { + if (arg1->unkA == 0) { + GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); + GXSetTevOrder(var_r31, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(var_r31, GX_CC_CPREV, GX_CC_TEXC, GX_CC_TEXA, GX_CC_ZERO); + GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaIn(var_r31, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); + GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + var_r31++; + } else { + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + } + } else { + GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); + } + if (var_r27 != 0) { + if (((sp40.attr & 0x20000) != 0) || ((temp_r24 & 0x100) != 0)) { + spC.a = lbl_1_bss_C; + GXSetTevColor(GX_TEVREG0, spC); + GXSetTexCoordGen2(var_r28, GX_TG_MTX2x4, GX_TG_NRM, 0x24, 0, 0x7D); + GXSetTevOrder(var_r31, var_r28, lbl_1_bss_2C, GX_COLOR0A0); + GXSetTevColorIn(var_r31, GX_CC_ZERO, GX_CC_TEXC, GX_CC_ONE, GX_CC_CPREV); + GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaIn(var_r31, GX_CA_ZERO, GX_CA_APREV, GX_CA_A0, GX_CA_ZERO); + GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV); + var_f31 = 6.0f * (arg0->unk14 / 300.0f); + if (var_f31 < 0.1) { + var_f31 = 0.1f; + } + PSMTXCopy(lbl_1_bss_30, sp10); + mtxScaleCat(sp10, var_f31, var_f31, var_f31); + GXLoadTexMtxImm(sp10, 0x24, GX_MTX2x4); + var_r31++; + var_r28++; + var_r27 = 0; + var_r25 = 1; + } else { + if (1.0f == arg1->unk20) { + GXSetTevOrder(var_r31, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR1A1); + GXSetTevColorIn(var_r31, GX_CC_CPREV, GX_CC_ONE, GX_CC_RASC, GX_CC_ZERO); + } else { + GXSetTevOrder(var_r31, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR1A1); + GXSetTevColorIn(var_r31, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_CPREV); + } + GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1U, GX_TEVPREV); + GXSetTevAlphaIn(var_r31, GX_CA_ZERO, GX_CA_APREV, GX_CA_A0, GX_CA_ZERO); + GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1U, GX_TEVPREV); + var_r31++; + } + } else if (0.0f != arg0->unk1C) { + GXSetTevOrder(var_r31, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(var_r31, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_CPREV); + GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1U, GX_TEVPREV); + GXSetTevAlphaIn(var_r31, GX_CA_ZERO, GX_CA_APREV, GX_CA_A0, GX_CA_ZERO); + GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1U, GX_TEVPREV); + var_r31++; + } + GXSetNumTexGens(var_r28); + GXSetNumTevStages(var_r31); + if (var_r27 != 0) { + var_f30 = arg0->unk14; + } else { + var_f30 = 0.0f; + } + temp_r29 = Hu3DLightSet(&sp40, (f32 (*)[3][4]) Hu3DCameraMtx, (f32 (*)[3][4]) Hu3DCameraMtxXPose, var_f30); + if (var_r27 != 0) { + GXSetNumChans(2U); + if (arg0->unkA == 5) { + GXSetChanCtrl(GX_COLOR0A0, 1U, GX_SRC_REG, GX_SRC_VTX, temp_r29, GX_DF_CLAMP, GX_AF_NONE); + GXSetChanCtrl(GX_COLOR1A1, 1U, GX_SRC_REG, GX_SRC_VTX, temp_r29, GX_DF_NONE, GX_AF_SPEC); + return; + } + GXSetChanCtrl(GX_COLOR0A0, 1U, GX_SRC_REG, GX_SRC_REG, temp_r29, GX_DF_CLAMP, GX_AF_NONE); + GXSetChanCtrl(GX_COLOR1A1, 1U, GX_SRC_REG, GX_SRC_REG, temp_r29, GX_DF_NONE, GX_AF_SPEC); + return; + } + GXSetNumChans(1U); + if (arg0->unkA == 5) { + GXSetChanCtrl(GX_COLOR0A0, var_r25, GX_SRC_REG, GX_SRC_REG, temp_r29, GX_DF_CLAMP, GX_AF_SPOT); + return; + } + GXSetChanCtrl(GX_COLOR0A0, var_r25, GX_SRC_REG, GX_SRC_REG, temp_r29, GX_DF_CLAMP, GX_AF_SPOT); +} From 588c7f21ad5c334cf4583fd782f32165024e0172 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sun, 23 Jun 2024 22:20:29 -0400 Subject: [PATCH 10/10] m440Dll/main.c matched, object.c progress --- config/GMPE01_00/rels/m429Dll/symbols.txt | 324 +++++----- config/GMPE01_00/rels/m440Dll/symbols.txt | 272 ++++----- configure.py | 2 +- include/REL/m440Dll.h | 86 ++- src/REL/m440Dll/main.c | 691 ++++++++++++++++++++-- src/REL/m440Dll/object.c | 24 + 6 files changed, 1024 insertions(+), 375 deletions(-) create mode 100644 src/REL/m440Dll/object.c diff --git a/config/GMPE01_00/rels/m429Dll/symbols.txt b/config/GMPE01_00/rels/m429Dll/symbols.txt index 36d104de..baf92ef1 100644 --- a/config/GMPE01_00/rels/m429Dll/symbols.txt +++ b/config/GMPE01_00/rels/m429Dll/symbols.txt @@ -69,166 +69,166 @@ ModuleProlog = .text:0x0000DC9C; // type:function size:0xCD0 fn_1_E96C = .text:0x0000E96C; // type:function size:0x104 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 data:double -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x8 data:double -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x8 data:double -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x8 data:double -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 data:double -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 data:float -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 data:double -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 data:double -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 data:double -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 data:double -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 data:float -lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 data:float -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 data:float -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float -lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 data:double -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x8 data:double -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 data:double -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 data:double -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x8 data:double -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 data:double -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 data:double -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float -lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 data:float -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 data:float -lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 data:float -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x8 scope:local data:double +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x8 scope:local data:double +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x8 scope:local data:double +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x8 scope:local data:double +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 scope:local data:double +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_54 = .rodata:0x00000054; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +lbl_1_rodata_5C = .rodata:0x0000005C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x8 scope:local data:double +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x8 scope:local data:double +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x8 scope:local data:double +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_CC = .rodata:0x000000CC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x8 scope:local data:double +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x8 scope:local data:double +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 scope:local data:double +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x8 scope:local data:double +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:double +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 scope:local data:double +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data:float +lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 scope:local data:float +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 scope:local data:float +lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 scope:local data:float +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x10 -lbl_1_data_10 = .data:0x00000010; // type:object size:0xD data:string -lbl_1_data_1D = .data:0x0000001D; // type:object size:0xE data:string -lbl_1_data_2B = .data:0x0000002B; // type:object size:0xE data:string -lbl_1_data_39 = .data:0x00000039; // type:object size:0xE data:string -lbl_1_data_47 = .data:0x00000047; // type:object size:0xD data:string -lbl_1_data_54 = .data:0x00000054; // type:object size:0xD data:string -lbl_1_data_61 = .data:0x00000061; // type:object size:0xE data:string -lbl_1_data_6F = .data:0x0000006F; // type:object size:0xE data:string -lbl_1_data_7D = .data:0x0000007D; // type:object size:0xE data:string -lbl_1_data_8B = .data:0x0000008B; // type:object size:0xD data:string -lbl_1_data_98 = .data:0x00000098; // type:object size:0xE data:string -lbl_1_data_A6 = .data:0x000000A6; // type:object size:0xE data:string -lbl_1_data_B4 = .data:0x000000B4; // type:object size:0xE data:string -lbl_1_data_C2 = .data:0x000000C2; // type:object size:0xD data:string -lbl_1_data_CF = .data:0x000000CF; // type:object size:0xD data:string -lbl_1_data_DC = .data:0x000000DC; // type:object size:0xD data:string -lbl_1_data_E9 = .data:0x000000E9; // type:object size:0xD data:string -lbl_1_data_F6 = .data:0x000000F6; // type:object size:0xE data:string -lbl_1_data_104 = .data:0x00000104; // type:object size:0xE data:string -lbl_1_data_112 = .data:0x00000112; // type:object size:0xE data:string -lbl_1_data_120 = .data:0x00000120; // type:object size:0xE data:string -lbl_1_data_12E = .data:0x0000012E; // type:object size:0xE data:string -lbl_1_data_13C = .data:0x0000013C; // type:object size:0xE data:string -lbl_1_data_14A = .data:0x0000014A; // type:object size:0xE data:string -lbl_1_data_158 = .data:0x00000158; // type:object size:0xE data:string -lbl_1_data_166 = .data:0x00000166; // type:object size:0xE data:string -lbl_1_data_174 = .data:0x00000174; // type:object size:0xE data:string -lbl_1_data_182 = .data:0x00000182; // type:object size:0xE data:string -lbl_1_data_190 = .data:0x00000190; // type:object size:0xE data:string -lbl_1_data_19E = .data:0x0000019E; // type:object size:0xE data:string -lbl_1_data_1AC = .data:0x000001AC; // type:object size:0xE data:string -lbl_1_data_1BA = .data:0x000001BA; // type:object size:0xE data:string -lbl_1_data_1C8 = .data:0x000001C8; // type:object size:0xE data:string -lbl_1_data_1D6 = .data:0x000001D6; // type:object size:0xE data:string -lbl_1_data_1E4 = .data:0x000001E4; // type:object size:0xE data:string -lbl_1_data_1F2 = .data:0x000001F2; // type:object size:0xE data:string -lbl_1_data_200 = .data:0x00000200; // type:object size:0xE data:string -lbl_1_data_20E = .data:0x0000020E; // type:object size:0xE data:string -lbl_1_data_21C = .data:0x0000021C; // type:object size:0xE data:string +lbl_1_data_10 = .data:0x00000010; // type:object size:0xD scope:local data:string +lbl_1_data_1D = .data:0x0000001D; // type:object size:0xE scope:local data:string +lbl_1_data_2B = .data:0x0000002B; // type:object size:0xE scope:local data:string +lbl_1_data_39 = .data:0x00000039; // type:object size:0xE scope:local data:string +lbl_1_data_47 = .data:0x00000047; // type:object size:0xD scope:local data:string +lbl_1_data_54 = .data:0x00000054; // type:object size:0xD scope:local data:string +lbl_1_data_61 = .data:0x00000061; // type:object size:0xE scope:local data:string +lbl_1_data_6F = .data:0x0000006F; // type:object size:0xE scope:local data:string +lbl_1_data_7D = .data:0x0000007D; // type:object size:0xE scope:local data:string +lbl_1_data_8B = .data:0x0000008B; // type:object size:0xD scope:local data:string +lbl_1_data_98 = .data:0x00000098; // type:object size:0xE scope:local data:string +lbl_1_data_A6 = .data:0x000000A6; // type:object size:0xE scope:local data:string +lbl_1_data_B4 = .data:0x000000B4; // type:object size:0xE scope:local data:string +lbl_1_data_C2 = .data:0x000000C2; // type:object size:0xD scope:local data:string +lbl_1_data_CF = .data:0x000000CF; // type:object size:0xD scope:local data:string +lbl_1_data_DC = .data:0x000000DC; // type:object size:0xD scope:local data:string +lbl_1_data_E9 = .data:0x000000E9; // type:object size:0xD scope:local data:string +lbl_1_data_F6 = .data:0x000000F6; // type:object size:0xE scope:local data:string +lbl_1_data_104 = .data:0x00000104; // type:object size:0xE scope:local data:string +lbl_1_data_112 = .data:0x00000112; // type:object size:0xE scope:local data:string +lbl_1_data_120 = .data:0x00000120; // type:object size:0xE scope:local data:string +lbl_1_data_12E = .data:0x0000012E; // type:object size:0xE scope:local data:string +lbl_1_data_13C = .data:0x0000013C; // type:object size:0xE scope:local data:string +lbl_1_data_14A = .data:0x0000014A; // type:object size:0xE scope:local data:string +lbl_1_data_158 = .data:0x00000158; // type:object size:0xE scope:local data:string +lbl_1_data_166 = .data:0x00000166; // type:object size:0xE scope:local data:string +lbl_1_data_174 = .data:0x00000174; // type:object size:0xE scope:local data:string +lbl_1_data_182 = .data:0x00000182; // type:object size:0xE scope:local data:string +lbl_1_data_190 = .data:0x00000190; // type:object size:0xE scope:local data:string +lbl_1_data_19E = .data:0x0000019E; // type:object size:0xE scope:local data:string +lbl_1_data_1AC = .data:0x000001AC; // type:object size:0xE scope:local data:string +lbl_1_data_1BA = .data:0x000001BA; // type:object size:0xE scope:local data:string +lbl_1_data_1C8 = .data:0x000001C8; // type:object size:0xE scope:local data:string +lbl_1_data_1D6 = .data:0x000001D6; // type:object size:0xE scope:local data:string +lbl_1_data_1E4 = .data:0x000001E4; // type:object size:0xE scope:local data:string +lbl_1_data_1F2 = .data:0x000001F2; // type:object size:0xE scope:local data:string +lbl_1_data_200 = .data:0x00000200; // type:object size:0xE scope:local data:string +lbl_1_data_20E = .data:0x0000020E; // type:object size:0xE scope:local data:string +lbl_1_data_21C = .data:0x0000021C; // type:object size:0xE scope:local data:string lbl_1_data_22C = .data:0x0000022C; // type:object size:0x57C -lbl_1_data_7A8 = .data:0x000007A8; // type:object size:0xD data:string -lbl_1_data_7B5 = .data:0x000007B5; // type:object size:0xD data:string -lbl_1_data_7C2 = .data:0x000007C2; // type:object size:0xD data:string -lbl_1_data_7CF = .data:0x000007CF; // type:object size:0xE data:string -lbl_1_data_7DD = .data:0x000007DD; // type:object size:0xE data:string -lbl_1_data_7EB = .data:0x000007EB; // type:object size:0xE data:string -lbl_1_data_7F9 = .data:0x000007F9; // type:object size:0xE data:string -lbl_1_data_807 = .data:0x00000807; // type:object size:0xD data:string -lbl_1_data_814 = .data:0x00000814; // type:object size:0xD data:string -lbl_1_data_821 = .data:0x00000821; // type:object size:0xD data:string -lbl_1_data_82E = .data:0x0000082E; // type:object size:0xE data:string -lbl_1_data_83C = .data:0x0000083C; // type:object size:0xE data:string -lbl_1_data_84A = .data:0x0000084A; // type:object size:0xD data:string -lbl_1_data_857 = .data:0x00000857; // type:object size:0xD data:string -lbl_1_data_864 = .data:0x00000864; // type:object size:0xD data:string -lbl_1_data_871 = .data:0x00000871; // type:object size:0xE data:string -lbl_1_data_87F = .data:0x0000087F; // type:object size:0xE data:string -lbl_1_data_88D = .data:0x0000088D; // type:object size:0xE data:string -lbl_1_data_89B = .data:0x0000089B; // type:object size:0xE data:string -lbl_1_data_8A9 = .data:0x000008A9; // type:object size:0xE data:string -lbl_1_data_8B7 = .data:0x000008B7; // type:object size:0xE data:string -lbl_1_data_8C5 = .data:0x000008C5; // type:object size:0xE data:string -lbl_1_data_8D3 = .data:0x000008D3; // type:object size:0xE data:string -lbl_1_data_8E1 = .data:0x000008E1; // type:object size:0xE data:string -lbl_1_data_8EF = .data:0x000008EF; // type:object size:0xE data:string -lbl_1_data_8FD = .data:0x000008FD; // type:object size:0xE data:string -lbl_1_data_90B = .data:0x0000090B; // type:object size:0xE data:string -lbl_1_data_919 = .data:0x00000919; // type:object size:0xE data:string -lbl_1_data_927 = .data:0x00000927; // type:object size:0xE data:string -lbl_1_data_935 = .data:0x00000935; // type:object size:0xE data:string -lbl_1_data_943 = .data:0x00000943; // type:object size:0xE data:string -lbl_1_data_951 = .data:0x00000951; // type:object size:0xE data:string -lbl_1_data_95F = .data:0x0000095F; // type:object size:0xE data:string -lbl_1_data_96D = .data:0x0000096D; // type:object size:0xE data:string -lbl_1_data_97B = .data:0x0000097B; // type:object size:0xE data:string -lbl_1_data_989 = .data:0x00000989; // type:object size:0xE data:string -lbl_1_data_997 = .data:0x00000997; // type:object size:0xE data:string -lbl_1_data_9A5 = .data:0x000009A5; // type:object size:0xE data:string -lbl_1_data_9B3 = .data:0x000009B3; // type:object size:0xE data:string -lbl_1_data_9C1 = .data:0x000009C1; // type:object size:0xE data:string -lbl_1_data_9CF = .data:0x000009CF; // type:object size:0xE data:string -lbl_1_data_9DD = .data:0x000009DD; // type:object size:0xF +lbl_1_data_7A8 = .data:0x000007A8; // type:object size:0xD scope:local data:string +lbl_1_data_7B5 = .data:0x000007B5; // type:object size:0xD scope:local data:string +lbl_1_data_7C2 = .data:0x000007C2; // type:object size:0xD scope:local data:string +lbl_1_data_7CF = .data:0x000007CF; // type:object size:0xE scope:local data:string +lbl_1_data_7DD = .data:0x000007DD; // type:object size:0xE scope:local data:string +lbl_1_data_7EB = .data:0x000007EB; // type:object size:0xE scope:local data:string +lbl_1_data_7F9 = .data:0x000007F9; // type:object size:0xE scope:local data:string +lbl_1_data_807 = .data:0x00000807; // type:object size:0xD scope:local data:string +lbl_1_data_814 = .data:0x00000814; // type:object size:0xD scope:local data:string +lbl_1_data_821 = .data:0x00000821; // type:object size:0xD scope:local data:string +lbl_1_data_82E = .data:0x0000082E; // type:object size:0xE scope:local data:string +lbl_1_data_83C = .data:0x0000083C; // type:object size:0xE scope:local data:string +lbl_1_data_84A = .data:0x0000084A; // type:object size:0xD scope:local data:string +lbl_1_data_857 = .data:0x00000857; // type:object size:0xD scope:local data:string +lbl_1_data_864 = .data:0x00000864; // type:object size:0xD scope:local data:string +lbl_1_data_871 = .data:0x00000871; // type:object size:0xE scope:local data:string +lbl_1_data_87F = .data:0x0000087F; // type:object size:0xE scope:local data:string +lbl_1_data_88D = .data:0x0000088D; // type:object size:0xE scope:local data:string +lbl_1_data_89B = .data:0x0000089B; // type:object size:0xE scope:local data:string +lbl_1_data_8A9 = .data:0x000008A9; // type:object size:0xE scope:local data:string +lbl_1_data_8B7 = .data:0x000008B7; // type:object size:0xE scope:local data:string +lbl_1_data_8C5 = .data:0x000008C5; // type:object size:0xE scope:local data:string +lbl_1_data_8D3 = .data:0x000008D3; // type:object size:0xE scope:local data:string +lbl_1_data_8E1 = .data:0x000008E1; // type:object size:0xE scope:local data:string +lbl_1_data_8EF = .data:0x000008EF; // type:object size:0xE scope:local data:string +lbl_1_data_8FD = .data:0x000008FD; // type:object size:0xE scope:local data:string +lbl_1_data_90B = .data:0x0000090B; // type:object size:0xE scope:local data:string +lbl_1_data_919 = .data:0x00000919; // type:object size:0xE scope:local data:string +lbl_1_data_927 = .data:0x00000927; // type:object size:0xE scope:local data:string +lbl_1_data_935 = .data:0x00000935; // type:object size:0xE scope:local data:string +lbl_1_data_943 = .data:0x00000943; // type:object size:0xE scope:local data:string +lbl_1_data_951 = .data:0x00000951; // type:object size:0xE scope:local data:string +lbl_1_data_95F = .data:0x0000095F; // type:object size:0xE scope:local data:string +lbl_1_data_96D = .data:0x0000096D; // type:object size:0xE scope:local data:string +lbl_1_data_97B = .data:0x0000097B; // type:object size:0xE scope:local data:string +lbl_1_data_989 = .data:0x00000989; // type:object size:0xE scope:local data:string +lbl_1_data_997 = .data:0x00000997; // type:object size:0xE scope:local data:string +lbl_1_data_9A5 = .data:0x000009A5; // type:object size:0xE scope:local data:string +lbl_1_data_9B3 = .data:0x000009B3; // type:object size:0xE scope:local data:string +lbl_1_data_9C1 = .data:0x000009C1; // type:object size:0xE scope:local data:string +lbl_1_data_9CF = .data:0x000009CF; // type:object size:0xE scope:local data:string +lbl_1_data_9DD = .data:0x000009DD; // type:object size:0xF scope:local lbl_1_data_9EC = .data:0x000009EC; // type:object size:0x5E8 lbl_1_data_FD4 = .data:0x00000FD4; // type:object size:0xC lbl_1_data_FE0 = .data:0x00000FE0; // type:object size:0xC @@ -258,12 +258,12 @@ lbl_1_data_13B8 = .data:0x000013B8; // type:object size:0x10 lbl_1_data_13C8 = .data:0x000013C8; // type:object size:0x10 lbl_1_data_13D8 = .data:0x000013D8; // type:object size:0x10 lbl_1_data_13E8 = .data:0x000013E8; // type:object size:0x50 -lbl_1_data_1438 = .data:0x00001438; // type:object size:0x21 data:string -lbl_1_data_1459 = .data:0x00001459; // type:object size:0x1F +lbl_1_data_1438 = .data:0x00001438; // type:object size:0x21 scope:local data:string +lbl_1_data_1459 = .data:0x00001459; // type:object size:0x1F scope:local jumptable_1_data_1478 = .data:0x00001478; // type:object size:0x24 scope:local -lbl_1_data_149C = .data:0x0000149C; // type:object size:0x1B data:string +lbl_1_data_149C = .data:0x0000149C; // type:object size:0x1B scope:local data:string jumptable_1_data_14B8 = .data:0x000014B8; // type:object size:0x34 scope:local -lbl_1_data_14EC = .data:0x000014EC; // type:object size:0x24 data:string +lbl_1_data_14EC = .data:0x000014EC; // type:object size:0x24 scope:local data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x2 data:2byte diff --git a/config/GMPE01_00/rels/m440Dll/symbols.txt b/config/GMPE01_00/rels/m440Dll/symbols.txt index 6f2ffdd6..a07b1c3d 100644 --- a/config/GMPE01_00/rels/m440Dll/symbols.txt +++ b/config/GMPE01_00/rels/m440Dll/symbols.txt @@ -99,134 +99,134 @@ fn_1_F4D4 = .text:0x0000F4D4; // type:function size:0x28 fn_1_F4FC = .text:0x0000F4FC; // type:function size:0x18 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 data:double -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 data:float -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 data:double -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 data:double -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 data:double -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 data:float -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 data:double -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 data:double -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 data:double -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 data:double -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 data:float -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 data:byte -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0xC data:2byte -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 data:double -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0xC data:4byte -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 data:float -lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 data:float -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 data:float -lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 data:float -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x8 data:double -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x8 data:double -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x8 data:double -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0xC data:2byte -lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 data:float -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x8 data:double -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 data:double -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float -lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 data:double -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 data:float -lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 data:float -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 data:float -lbl_1_rodata_224 = .rodata:0x00000224; // type:object size:0x4 data:float -lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 data:float -lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 data:float -lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float -lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 data:float -lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 data:float -lbl_1_rodata_23C = .rodata:0x0000023C; // type:object size:0x4 data:float -lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 data:float -lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 data:double -lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x8 data:double -lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 data:float -lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 data:float -lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 data:float -lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 data:float -lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 data:float -lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 data:float -lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 data:float -lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 data:float -lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 data:float -lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 data:float -lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 data:float -lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x8 data:double -lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 data:float -lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x8 data:double -lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x8 data:double -lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 data:float -lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 data:float -lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 scope:local data:double +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x4 scope:local data:float +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 scope:local data:double +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x8 scope:local data:double +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x8 scope:local data:double +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x8 scope:local data:double +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x8 scope:local data:double +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x4 scope:local data:float +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x4 scope:local data:byte +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0xC scope:local data:2byte +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 scope:local data:double +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 scope:local data:float +lbl_1_rodata_184 = .rodata:0x00000184; // type:object size:0x4 scope:local data:float +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0xC scope:local data:2byte +lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x8 scope:local data:double +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x4 scope:local data:float +lbl_1_rodata_21C = .rodata:0x0000021C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float +lbl_1_rodata_224 = .rodata:0x00000224; // type:object size:0x4 scope:local data:float +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x4 scope:local data:float +lbl_1_rodata_22C = .rodata:0x0000022C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 scope:local data:float +lbl_1_rodata_234 = .rodata:0x00000234; // type:object size:0x4 scope:local data:float +lbl_1_rodata_238 = .rodata:0x00000238; // type:object size:0x4 scope:local data:float +lbl_1_rodata_23C = .rodata:0x0000023C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_240 = .rodata:0x00000240; // type:object size:0x4 scope:local data:float +lbl_1_rodata_248 = .rodata:0x00000248; // type:object size:0x8 scope:local data:double +lbl_1_rodata_250 = .rodata:0x00000250; // type:object size:0x8 scope:local data:double +lbl_1_rodata_258 = .rodata:0x00000258; // type:object size:0x4 scope:local data:float +lbl_1_rodata_25C = .rodata:0x0000025C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_260 = .rodata:0x00000260; // type:object size:0x4 scope:local data:float +lbl_1_rodata_264 = .rodata:0x00000264; // type:object size:0x4 scope:local data:float +lbl_1_rodata_268 = .rodata:0x00000268; // type:object size:0x4 scope:local data:float +lbl_1_rodata_26C = .rodata:0x0000026C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_270 = .rodata:0x00000270; // type:object size:0x4 scope:local data:float +lbl_1_rodata_274 = .rodata:0x00000274; // type:object size:0x4 scope:local data:float +lbl_1_rodata_278 = .rodata:0x00000278; // type:object size:0x4 scope:local data:float +lbl_1_rodata_27C = .rodata:0x0000027C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_280 = .rodata:0x00000280; // type:object size:0x4 scope:local data:float +lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x8 scope:local data:double +lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x4 scope:local data:float +lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_2A8 = .rodata:0x000002A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2AC = .rodata:0x000002AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2B0 = .rodata:0x000002B0; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x14 lbl_1_data_14 = .data:0x00000014; // type:object size:0xC lbl_1_data_20 = .data:0x00000020; // type:object size:0xC data:float @@ -237,7 +237,7 @@ lbl_1_data_54 = .data:0x00000054; // type:object size:0xC data:float lbl_1_data_60 = .data:0x00000060; // type:object size:0xC lbl_1_data_6C = .data:0x0000006C; // type:object size:0xC data:float lbl_1_data_78 = .data:0x00000078; // type:object size:0x54 data:float -lbl_1_data_CC = .data:0x000000CC; // type:object size:0x18 +lbl_1_data_CC = .data:0x000000CC; // type:object size:0x18 scope:local lbl_1_data_E4 = .data:0x000000E4; // type:object size:0x2 data:2byte lbl_1_data_E8 = .data:0x000000E8; // type:object size:0x2 data:2byte lbl_1_data_EC = .data:0x000000EC; // type:object size:0x2 data:2byte @@ -246,13 +246,13 @@ lbl_1_data_F4 = .data:0x000000F4; // type:object size:0x10 lbl_1_data_104 = .data:0x00000104; // type:object size:0x2 data:2byte lbl_1_data_108 = .data:0x00000108; // type:object size:0x2 data:2byte lbl_1_data_10C = .data:0x0000010C; // type:object size:0x12 -lbl_1_data_11E = .data:0x0000011E; // type:object size:0x13 data:string -lbl_1_data_131 = .data:0x00000131; // type:object size:0x18 -lbl_1_data_149 = .data:0x00000149; // type:object size:0x19 data:string -lbl_1_data_162 = .data:0x00000162; // type:object size:0x1C data:string -lbl_1_data_17E = .data:0x0000017E; // type:object size:0x10 data:string -lbl_1_data_18E = .data:0x0000018E; // type:object size:0x26 data:string -lbl_1_data_1B4 = .data:0x000001B4; // type:object size:0x24 data:string +lbl_1_data_11E = .data:0x0000011E; // type:object size:0x13 scope:local data:string +lbl_1_data_131 = .data:0x00000131; // type:object size:0x18 scope:local data:string +lbl_1_data_149 = .data:0x00000149; // type:object size:0x19 scope:local data:string +lbl_1_data_162 = .data:0x00000162; // type:object size:0x1C scope:local data:string +lbl_1_data_17E = .data:0x0000017E; // type:object size:0x10 scope:local data:string +lbl_1_data_18E = .data:0x0000018E; // type:object size:0x26 scope:local data:string +lbl_1_data_1B4 = .data:0x000001B4; // type:object size:0x24 scope:local data:string lbl_1_data_1D8 = .data:0x000001D8; // type:object size:0x2 data:2byte lbl_1_data_1DA = .data:0x000001DA; // type:object size:0x2 data:2byte lbl_1_data_1DC = .data:0x000001DC; // type:object size:0x40 diff --git a/configure.py b/configure.py index 95620d8f..a4f9ea09 100644 --- a/configure.py +++ b/configure.py @@ -1141,7 +1141,7 @@ config.libs = [ "m440Dll", objects={ Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/m440Dll/main.c"), + Object(Matching, "REL/m440Dll/main.c"), Object(NonMatching, "REL/m440Dll/object.c"), }, ), diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index 5df7cd55..9844466f 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -5,6 +5,10 @@ extern s32 rand8(void); ////// TYPES ////// +typedef void (*m440Func5)(ModelData*, struct _unkStruct5*, Mtx); +typedef void (*m440Func6)(struct _unkStruct6*); +typedef void (*m440Func14)(struct _unkStruct14*); + typedef struct _unkStruct { f32 zoom; Vec center; @@ -47,27 +51,39 @@ typedef struct _unkStruct4 { f32 unk30; s16 unk34; s16 unk36; - char unk38[0x10]; + char unk38[0x4]; + s32 unk3C; + s16 unk40; + s16 unk42; + f32 unk44; Vec unk48; Vec unk54; s16 unk60; s8 unk62; } unkStruct4; // sizeof 0x64 -typedef struct _unkStruct5 { // could be unkStruct3 +typedef struct _unkStruct5 { s16 unk0; s16 unk2; - char unk4[0x10]; + u32 unk4; + u8 unk8; + m440Func5 unkC; + AnimData* unk10; s16 unk14; - unkStruct4 *unk18; - char unk1C[0x8]; - GXColor* unk24; // ? + unkStruct4* unk18; + Vec* unk1C; + HsfVector2f* unk20; + GXColor* unk24; + void* unk28; + Vec unk2C; + Vec unk38; + Vec unk44; + Vec unk50; + HsfVector2f* unk5C; + f32 unk60; + f32 unk64; } unkStruct5; -typedef void (*m440Func5)(omObjData*, unkStruct5*, Mtx*); -typedef void (*m440Func6)(struct _unkStruct6*); -typedef void (*m440Func14)(struct _unkStruct14*); - typedef struct _unkStruct6 { s16 unk0; u16 unk2; @@ -155,13 +171,16 @@ typedef struct _unkStruct13 { } unkStruct13; // sizeof 0x84 typedef struct _unkStruct14 { - char unk0[0xC]; + s16 unk0; + s16 unk2; + char unk4[0x8]; void* unkC; char unk10[0x4]; void* unk14; - char unk18[0x4]; + unkStruct4* unk18; void* unk1C; - char unk20[0x8]; + char unk20[0x4]; + GXColor* unk24; unkStruct12* unk28; unkStruct13* unk2C; void* unk30; @@ -194,6 +213,8 @@ extern unkStruct6* lbl_1_bss_64; extern s16 lbl_1_bss_60; extern Mtx lbl_1_bss_30; extern s16 lbl_1_bss_2C; +extern void* lbl_1_bss_28; +extern u32 lbl_1_bss_24; extern s16 lbl_1_bss_10[10]; extern s16 lbl_1_bss_E; extern u8 lbl_1_bss_C; @@ -210,6 +231,7 @@ extern s8 lbl_1_bss_0; // main.c extern f32 lbl_1_data_0[5]; extern s16 lbl_1_data_14[6]; +extern Vec lbl_1_data_20; extern Vec lbl_1_data_2C; extern Vec lbl_1_data_38; extern unkStruct7 lbl_1_data_44; @@ -236,8 +258,8 @@ extern s32 fn_1_4A4(void); extern s32 fn_1_6C8(void); extern void fn_1_8F0(omObjData* object); extern void fn_1_AE0(omObjData* object); -extern s32 fn_1_E14(omObjData* object); -extern s32 fn_1_1138(omObjData* object); +extern u8 fn_1_E14(omObjData* object); +extern u8 fn_1_1138(omObjData* object); extern void fn_1_16D8(void); extern void fn_1_1708(void); extern void fn_1_1768(void); @@ -249,7 +271,7 @@ extern void fn_1_18E0(void); extern s32 fn_1_1954(void); extern void fn_1_19B0(void); extern void fn_1_1CAC(void); -extern void fn_1_2240(omObjData* object, unkStruct5*, Mtx*); +extern void fn_1_2240(ModelData* data, unkStruct5*, Mtx); extern u16 fn_1_23E4(u16); extern void fn_1_2428(u16, u16); extern void fn_1_2470(omObjData* object); @@ -280,7 +302,33 @@ extern void fn_1_6B58(unkStruct6*, HsfObject*); extern void fn_1_71FC(unkStruct6*, Vec*, s16, Vec); extern void fn_1_7934(unkStruct6*, unkStruct8*, Vec*); extern void fn_1_7D60(unkStruct15*, unkStruct13*, s16); -extern void fn_1_806C(ModelData* arg0, Mtx arg1); -// ... +extern void fn_1_806C(ModelData*, Mtx); +extern void fn_1_8470(unkStruct12*, unkStruct13*); +extern void fn_1_8AC4(Mtx); +extern void fn_1_8D1C(void); extern void fn_1_91A4(Vec*, Vec*, Vec*, f32[5]); -extern f32 fn_1_93C0(f32, f32, f32); \ No newline at end of file +extern f32 fn_1_927C(f32, f32, f32); +extern void fn_1_9344(Mtx, Mtx); +extern f32 fn_1_93C0(f32, f32, f32); +extern f32 fn_1_93D0(f32, f32, f32, f32); +extern unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*); +extern s16 fn_1_956C(AnimData*, s16, f32, s16, s16); +extern void fn_1_9AB0(s16); +extern unkStruct5* fn_1_9B10(s16); +extern unkStruct4* fn_1_9B3C(s16, s16); +extern void fn_1_9B94(s16, m440Func5); +extern void fn_1_9BCC(s16, u8); +extern void fn_1_9C04(ModelData*, Mtx); +extern void fn_1_A1B8(HsfVector2f*, s16, s16, f32, f32); +extern void fn_1_A284(HsfVector2f*, HsfVector2f*, s16, f32, f32); +extern void fn_1_A328(Vec*, Vec*, Vec*, s16); +void fn_1_A390(ModelData*, Mtx); +extern void fn_1_AA94(void); +// object.c +extern void fn_1_AE08(Process*); +extern void fn_1_EE78(void); +extern void fn_1_EF50(void); +extern s16 fn_1_F0FC(void); +extern void fn_1_F168(void); +extern void fn_1_F228(void); +extern s32 fn_1_F4FC(s32); \ No newline at end of file diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index f542ccbd..5603491c 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -12,24 +12,8 @@ #include "game/objsub.h" #include "game/minigame_seq.h" #include "game/sprite.h" - -// prototypes -void fn_1_8470(unkStruct12*, unkStruct13*); -void fn_1_8AC4(Mtx); -void fn_1_91A4(Vec*, Vec*, Vec*, f32[5]); -f32 fn_1_93C0(f32, f32, f32); -unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*); -s16 fn_1_956C(AnimData*, s32, f32, s32, s32); -void fn_1_9AB0(s16); -void fn_1_9B94(s16, m440Func5); -void fn_1_AE08(Process*); -// object.c -void fn_1_EE78(void); -void fn_1_EF50(void); -s16 fn_1_F0FC(void); -void fn_1_F168(void); -void fn_1_F228(void); -s32 fn_1_F4FC(s32); +#include "game/printfunc.h" +#include "game/pad.h" // bss omObjData* lbl_1_bss_6C; @@ -38,6 +22,8 @@ unkStruct6* lbl_1_bss_64; s16 lbl_1_bss_60; Mtx lbl_1_bss_30; s16 lbl_1_bss_2C; +void* lbl_1_bss_28; +u32 lbl_1_bss_24; s16 lbl_1_bss_10[10]; s16 lbl_1_bss_E; u8 lbl_1_bss_C; @@ -53,7 +39,7 @@ s8 lbl_1_bss_0; // data f32 lbl_1_data_0[5] = { 90.0f, 80.0f, 100.0f, 70.0f, 110.0f }; s16 lbl_1_data_14[6] = { 1, 1, 1, 1, 1 }; -s8 lbl_1_data_20[12] = { 0 }; +Vec lbl_1_data_20 = { 0.0f, 0.0f, 0.0f }; Vec lbl_1_data_2C = { 800.0f, 1300.0f, 1000.0f }; Vec lbl_1_data_38 = { 0.0f, 0.0f, 0.0f }; unkStruct7 lbl_1_data_44 = { @@ -259,7 +245,7 @@ void fn_1_AE0(omObjData* arg0) { } } -s32 fn_1_E14(omObjData* arg0) { +u8 fn_1_E14(omObjData* arg0) { f32 var_f31; unkStruct* var_r31; u8 var_r30; @@ -306,7 +292,7 @@ s32 fn_1_E14(omObjData* arg0) { return 0; } -s32 fn_1_1138(omObjData* object) { +u8 fn_1_1138(omObjData* object) { unkStruct2* sp8; f32 var_f31; f32 var_f30; @@ -525,7 +511,7 @@ void fn_1_1D54(f32 arg8, f32 arg9, f32 argA, s16 arg0, f32 argB, s16 arg1) { } } -void fn_1_2240(omObjData* object, unkStruct5* arg1, Mtx* arg2) { +void fn_1_2240(ModelData* data, unkStruct5* arg1, Mtx arg2) { unkStruct4* var_r31; GXColor* var_r30; s16 var_r29; @@ -1342,8 +1328,8 @@ void fn_1_5C2C(s16 arg0, HsfObject* arg1, unkStruct6* arg2, u16 arg3) { if (arg2->unk28->numAttrs != 0) { var_r23 = arg2->unk24[var_r30].unk0[var_r28].unk6; var_r27 = var_r23; - arg2->unk1C[var_r27].x = var_r22[var_r23].y; - arg2->unk1C[var_r27].x = var_r22[var_r23].y; + arg2->unk1C[var_r27].x = var_r22[var_r23].x; + arg2->unk1C[var_r27].y = var_r22[var_r23].y; } } fn_1_91A4(&sp44[0], &sp44[1], &sp44[2], arg2->unk24[var_r30].unk68); @@ -1575,7 +1561,7 @@ void fn_1_6B58(unkStruct6* arg0, HsfObject* arg1) { var_r31->unk1E = var_r30++; var_r31++; var_r28 = 0; - temp_r26 = var_r29->unk4; + temp_r26 = var_r29->unk20; for (;var_r28 < var_r29->unk1C; var_r28++) { if (var_r28 == 0) { var_r31->unk0[0] = var_r31->unk0[1]; @@ -1751,34 +1737,34 @@ void fn_1_7D60(unkStruct15* arg0, unkStruct13* arg1, s16 arg2) { var_r26 = (arg1->unk68 == 1) ? 1 : 0; switch (arg0->unk8) { case 6: - GXInitTexObj(&sp1C, arg0->unk1C, temp_r29, temp_r28, 6, var_r27, var_r26, 0); + GXInitTexObj(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_RGBA8, var_r27, var_r26, GX_FALSE); break; case 4: - GXInitTexObj(&sp1C, arg0->unk1C, temp_r29, temp_r28, 4, var_r27, var_r26, 0); + GXInitTexObj(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_RGB565, var_r27, var_r26, GX_FALSE); break; case 5: - GXInitTexObj(&sp1C, arg0->unk1C, temp_r29, temp_r28, 5, var_r27, var_r26, 0); + GXInitTexObj(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_RGB5A3, var_r27, var_r26, GX_FALSE); break; case 9: if (arg0->unk9 < 8) { GXInitTlutObj(&sp10, arg0->unk14, GX_TL_RGB565, arg0->unkE); GXLoadTlut(&sp10, arg2); - GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C4, var_r27, var_r26, 0, arg2); + GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C4, var_r27, var_r26, GX_FALSE, arg2); } else { GXInitTlutObj(&sp10, arg0->unk14, GX_TL_RGB565, arg0->unkE); GXLoadTlut(&sp10, arg2); - GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C8, var_r27, var_r26, 0, arg2); + GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C8, var_r27, var_r26, GX_FALSE, arg2); } break; case 10: if (arg0->unk9 < 8) { GXInitTlutObj(&sp10, arg0->unk14, GX_TL_RGB5A3, arg0->unkE); GXLoadTlut(&sp10, arg2); - GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C4, var_r27, var_r26, 0, arg2); + GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C4, var_r27, var_r26, GX_FALSE, arg2); } else { GXInitTlutObj(&sp10, arg0->unk14, GX_TL_RGB5A3, arg0->unkE); GXLoadTlut(&sp10, arg2); - GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C8, var_r27, var_r26, 0, arg2); + GXInitTexObjCI(&sp1C, arg0->unk1C, temp_r29, temp_r28, GX_TF_C8, var_r27, var_r26, GX_FALSE, arg2); } break; default: @@ -1819,18 +1805,18 @@ void fn_1_806C(ModelData* arg0, Mtx arg1) { GXClearVtxDesc(); GXSetVtxDesc(GX_VA_POS, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0); - GXSetArray(GX_VA_POS, temp_r31->unkC, 0xCU); + GXSetArray(GX_VA_POS, temp_r31->unkC, 0xC); GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_TEX_S, GX_RGBA6, 0); - GXSetArray(GX_VA_NRM, temp_r31->unk14, 0xCU); + GXSetArray(GX_VA_NRM, temp_r31->unk14, 0xC); lbl_1_bss_C = temp_r31->unk3C; if (temp_r31->unk28->unk34 == 0) { GXSetNumTevStages(1); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ONE, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetNumTexGens(0); GXSetNumChans(0); } else { @@ -1843,9 +1829,9 @@ void fn_1_806C(ModelData* arg0, Mtx arg1) { HuSprTexLoad(*hiliteAnim, 0, lbl_1_bss_2C, GX_CLAMP, GX_CLAMP, GX_LINEAR); fn_1_8470(temp_r31->unk28, temp_r29); } - GXSetZMode(1, GX_LEQUAL, 1); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); - GXSetZCompLoc(0); + GXSetZCompLoc(GX_FALSE); GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); GXCallDisplayList(temp_r31->unk30, temp_r31->unk34); } @@ -1877,22 +1863,22 @@ void fn_1_8470(unkStruct12* arg0, unkStruct13* arg1) { } } var_r28 = var_r31 = 1; - GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, 0, 0x7D); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); if (1.0f == arg1->unk20) { if (arg1->unkA == 0) { GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); GXSetTevOrder(var_r31, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); GXSetTevColorIn(var_r31, GX_CC_CPREV, GX_CC_TEXC, GX_CC_TEXA, GX_CC_ZERO); - GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(var_r31, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST); - GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); var_r31++; } else { GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); } } else { GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); @@ -1901,12 +1887,12 @@ void fn_1_8470(unkStruct12* arg0, unkStruct13* arg1) { if (((sp40.attr & 0x20000) != 0) || ((temp_r24 & 0x100) != 0)) { spC.a = lbl_1_bss_C; GXSetTevColor(GX_TEVREG0, spC); - GXSetTexCoordGen2(var_r28, GX_TG_MTX2x4, GX_TG_NRM, 0x24, 0, 0x7D); + GXSetTexCoordGen2(var_r28, GX_TG_MTX2x4, GX_TG_NRM, GX_TEXMTX2, GX_FALSE, GX_PTIDENTITY); GXSetTevOrder(var_r31, var_r28, lbl_1_bss_2C, GX_COLOR0A0); GXSetTevColorIn(var_r31, GX_CC_ZERO, GX_CC_TEXC, GX_CC_ONE, GX_CC_CPREV); - GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(var_r31, GX_CA_ZERO, GX_CA_APREV, GX_CA_A0, GX_CA_ZERO); - GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV); + GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); var_f31 = 6.0f * (arg0->unk14 / 300.0f); if (var_f31 < 0.1) { var_f31 = 0.1f; @@ -1926,17 +1912,17 @@ void fn_1_8470(unkStruct12* arg0, unkStruct13* arg1) { GXSetTevOrder(var_r31, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR1A1); GXSetTevColorIn(var_r31, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_CPREV); } - GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1U, GX_TEVPREV); + GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(var_r31, GX_CA_ZERO, GX_CA_APREV, GX_CA_A0, GX_CA_ZERO); - GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1U, GX_TEVPREV); + GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); var_r31++; } } else if (0.0f != arg0->unk1C) { GXSetTevOrder(var_r31, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); GXSetTevColorIn(var_r31, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_CPREV); - GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1U, GX_TEVPREV); + GXSetTevColorOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); GXSetTevAlphaIn(var_r31, GX_CA_ZERO, GX_CA_APREV, GX_CA_A0, GX_CA_ZERO); - GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1U, GX_TEVPREV); + GXSetTevAlphaOp(var_r31, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); var_r31++; } GXSetNumTexGens(var_r28); @@ -1946,22 +1932,613 @@ void fn_1_8470(unkStruct12* arg0, unkStruct13* arg1) { } else { var_f30 = 0.0f; } - temp_r29 = Hu3DLightSet(&sp40, (f32 (*)[3][4]) Hu3DCameraMtx, (f32 (*)[3][4]) Hu3DCameraMtxXPose, var_f30); + temp_r29 = Hu3DLightSet(&sp40, &Hu3DCameraMtx, &Hu3DCameraMtxXPose, var_f30); if (var_r27 != 0) { - GXSetNumChans(2U); + GXSetNumChans(2); if (arg0->unkA == 5) { - GXSetChanCtrl(GX_COLOR0A0, 1U, GX_SRC_REG, GX_SRC_VTX, temp_r29, GX_DF_CLAMP, GX_AF_NONE); - GXSetChanCtrl(GX_COLOR1A1, 1U, GX_SRC_REG, GX_SRC_VTX, temp_r29, GX_DF_NONE, GX_AF_SPEC); + GXSetChanCtrl(GX_COLOR0A0, 1, GX_SRC_REG, GX_SRC_VTX, temp_r29, GX_DF_CLAMP, GX_AF_NONE); + GXSetChanCtrl(GX_COLOR1A1, 1, GX_SRC_REG, GX_SRC_VTX, temp_r29, GX_DF_NONE, GX_AF_SPEC); return; } - GXSetChanCtrl(GX_COLOR0A0, 1U, GX_SRC_REG, GX_SRC_REG, temp_r29, GX_DF_CLAMP, GX_AF_NONE); - GXSetChanCtrl(GX_COLOR1A1, 1U, GX_SRC_REG, GX_SRC_REG, temp_r29, GX_DF_NONE, GX_AF_SPEC); + GXSetChanCtrl(GX_COLOR0A0, 1, GX_SRC_REG, GX_SRC_REG, temp_r29, GX_DF_CLAMP, GX_AF_NONE); + GXSetChanCtrl(GX_COLOR1A1, 1, GX_SRC_REG, GX_SRC_REG, temp_r29, GX_DF_NONE, GX_AF_SPEC); return; } - GXSetNumChans(1U); + GXSetNumChans(1); if (arg0->unkA == 5) { GXSetChanCtrl(GX_COLOR0A0, var_r25, GX_SRC_REG, GX_SRC_REG, temp_r29, GX_DF_CLAMP, GX_AF_SPOT); return; } GXSetChanCtrl(GX_COLOR0A0, var_r25, GX_SRC_REG, GX_SRC_REG, temp_r29, GX_DF_CLAMP, GX_AF_SPOT); } + +void fn_1_8AC4(Mtx arg0) { + Mtx spA0; + Mtx sp70; + Mtx sp40; + Vec sp34; + Vec sp28; + Vec sp1C; + Vec sp10 = {0, 0, -1}; + f32 var_f29; + f32 var_f30; + LightData* var_r29; + s16 temp_r31; + + var_r29 = &Hu3DGlobalLight[0]; + sp34 = var_r29->unk_28; + if ((var_r29->unk_00 & 0x8000) != 0) { + PSMTXMultVecSR(Hu3DCameraMtx, &sp34, &sp34); + } + var_f30 = PSVECDotProduct(&sp34, &sp10); + var_f30 *= 10000.0f; + OSf32tos16(&var_f30, &temp_r31); + if (temp_r31 == -0x2710) { + PSMTXScale(lbl_1_bss_30, 0.0f, 0.0f, 0.0f); + return; + } + C_VECHalfAngle( &sp34, &sp10, &sp28); + sp28.x = -sp28.x; + sp28.y = -sp28.y; + sp28.z = -sp28.z; + PSMTXInvXpose(arg0, sp70); + if (temp_r31 == 0x2710) { + PSMTXIdentity(sp40); + } else { + PSVECCrossProduct(&sp28, &sp10, &sp1C); + var_f29 = acosf(PSVECDotProduct(&sp10, &sp28)); + PSMTXRotAxisRad(sp40, &sp1C, var_f29); + } + PSMTXConcat(sp40, sp70, spA0); + PSMTXTrans(sp40, 0.5f, 0.5f, 0.0f); + PSMTXConcat(sp40, spA0, lbl_1_bss_30); +} + +void fn_1_8D1C(void) { + Mtx44 sp60; + Mtx sp30; + GXTexObj sp10; + GXColor spC; + u16 var_r30; + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_68->data; + if (!temp_r31) { + var_r30 = 0; + } else { + var_r30 = temp_r31->unk0 & 7; + } + + if (var_r30 == 5) { + C_MTXOrtho(sp60, 0.0f, 480.0f, 0.0f, 640.0f, 0.0f, 10.0f); + GXSetProjection(sp60, GX_ORTHOGRAPHIC); + PSMTXIdentity(sp30); + GXLoadPosMtxImm(sp30, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXInitTexObj(&sp10, lbl_1_bss_28, 0x280, 0x1E0, 6, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXInitTexObjLOD(&sp10, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); + GXLoadTexObj(&sp10, GX_TEXMAP0); + GXSetNumTevStages(1); + spC.a = 0xC4; + GXSetTevColor(GX_TEVREG0, spC); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); + GXSetZMode(0, GX_LEQUAL, GX_FALSE); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3f32(0.0f, 0.0f, 0.0f); + GXTexCoord2f32(0.0f, 0.0f); + GXPosition3f32(640.0f, 0.0f, 0.0f); + GXTexCoord2f32(1.0f, 0.0f); + GXPosition3f32(640.0f, 480.0f, 0.0f); + GXTexCoord2f32(1.0f, 1.0f); + GXPosition3f32(0.0f, 480.0f, 0.0f); + GXTexCoord2f32(0.0f, 1.0f); + } + GXSetTexCopySrc(0, 0, 0x280, 0x1E0); + GXSetTexCopyDst(0x280, 0x1E0, GX_TF_RGBA8, GX_FALSE); + GXCopyTex(lbl_1_bss_28, 0); + DCFlushRange(lbl_1_bss_28, lbl_1_bss_24); +} + +void fn_1_91A4(Vec* arg0, Vec* arg1, Vec* arg2, f32 arg3[5]) { + Vec sp14; + Vec sp8; + + sp14.x = arg1->x - arg0->x; + sp14.y = arg1->y - arg0->y; + sp14.z = arg1->z - arg0->z; + sp8.x = arg2->x - arg1->x; + sp8.y = arg2->y - arg1->y; + sp8.z = arg2->z - arg1->z; + arg3[0] = -((sp14.y * sp8.z) - (sp14.z * sp8.y)); + arg3[1] = -((sp14.z * sp8.x) - (sp14.x * sp8.z)); + arg3[2] = -((sp14.x * sp8.y) - (sp14.y * sp8.x)); +} + +f32 fn_1_927C(f32 arg8, f32 arg9, f32 argA) { + f32 var_f31; + + var_f31 = arg9 - arg8; + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } else if (var_f31 < -180.0f) { + var_f31 += 360.0f; + } + var_f31 = arg8 + (var_f31 * argA); + if (var_f31 >= 360.0f) { + var_f31 -= 360.0f; + } else if (var_f31 < 0.0f) { + var_f31 += 360.0f; + } + return var_f31; +} + +void fn_1_9344(Mtx arg0, Mtx arg1) { + arg1[0][0] = arg0[0][0]; + arg1[1][0] = arg0[0][1]; + arg1[2][0] = arg0[0][2]; + arg1[0][1] = arg0[1][0]; + arg1[1][1] = arg0[1][1]; + arg1[2][1] = arg0[1][2]; + arg1[0][2] = arg0[2][0]; + arg1[1][2] = arg0[2][1]; + arg1[2][2] = arg0[2][2]; + arg1[0][3] = 0.0f; + arg1[1][3] = 0.0f; + arg1[2][3] = 0.0f; +} + +f32 fn_1_93C0(f32 arg0, f32 arg1, f32 arg2) { + return arg0 + (arg2 * (arg1 - arg0)); +} + +f32 fn_1_93D0(f32 arg8, f32 arg9, f32 argA, f32 argB) { + f32 temp_f31; + + temp_f31 = 1.0f - argB; + return (argA * (argB * argB)) + ((arg8 * (temp_f31 * temp_f31)) + (arg9 * (2.0f * temp_f31 * argB))); +} + +unkStruct4* fn_1_942C(s16 arg0, Vec* arg1, Vec* arg2, f32 arg3, GXColor* arg4) { + ModelData* var_r28; + s16 var_r29; + unkStruct4* var_r31; + unkStruct14* temp_r30; + + var_r28 = &Hu3DData[arg0]; + temp_r30 = var_r28->unk_120; + var_r29 = 0; + var_r31 = temp_r30->unk18; + for (;var_r29 < temp_r30->unk0; var_r29++, var_r31++) { + if (var_r31->unk62 == 0) break; + } + if (var_r29 == temp_r30->unk0) { + return NULL; + } + temp_r30->unk24[var_r29].r = arg4->r; + temp_r30->unk24[var_r29].g = arg4->g; + temp_r30->unk24[var_r29].b = arg4->b; + temp_r30->unk24[var_r29].a = arg4->a; + var_r31->unk40 = var_r29; + var_r31->unk44 = arg3; + var_r31->unk48 = *arg2; + var_r31->unk54 = *arg1; + var_r31->unk60 = 0; + var_r31->unk3C = 0; + var_r31->unk62 = 1; + return var_r31; +} + +s16 fn_1_956C(AnimData* arg0, s16 arg1, f32 arg2, s16 arg3, s16 arg4) { + ModelData* temp_r28; + s16 var_r20; + s16 var_r22; + s16 var_r19; + HsfVector2f* var_r29; + s16 var_r30; + unkStruct5* var_r31; + void* var_r21; + void* var_r18; + unkStruct4* var_r24; + Vec* var_r25; + GXColor* var_r27; + + var_r20 = Hu3DHookFuncCreate(fn_1_9C04); + temp_r28 = &Hu3DData[var_r20]; + var_r31 = HuMemDirectMallocNum(HEAP_DATA, 0x68, temp_r28->unk_48); + temp_r28->unk_120 = var_r31; + arg0->useNum += 1; + var_r31->unk10 = arg0; + var_r31->unk0 = arg1; + var_r31->unk8 = 0; + var_r31->unkC = NULL; + var_r24 = HuMemDirectMallocNum(HEAP_DATA, arg1 * 0x64, temp_r28->unk_48); + var_r31->unk18 = var_r24; + + for (var_r30 = 0; var_r30 < arg1; var_r30++, var_r24++) { + var_r24->unk60 = -1; + var_r24->unk62 = 0; + } + var_r25 = HuMemDirectMallocNum(HEAP_DATA, arg1 * 0xC * 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_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_r31->unk20 = var_r29; + + for (var_r30 = 0; var_r30 < arg1; var_r30++) { + var_r29->x = 0.0f; + var_r29->y = 0.0f; + var_r29++; + var_r29->x = 1.0f; + var_r29->y = 0.0f; + var_r29++; + var_r29->x = 1.0f; + var_r29->y = 1.0f; + var_r29++; + var_r29->x = 0.0f; + var_r29->y = 1.0f; + var_r29++; + } + if ((arg3 != 0) || (arg4 != 0)) { + var_r22 = (arg0->bmp->sizeX / arg3); + var_r19 = arg0->bmp->sizeY / arg4; + var_r31->unk14 = (var_r22 * var_r19); + var_r31->unk60 = (1.0f / var_r22); + var_r31->unk64 = (1.0f / var_r19); + } else { + var_r22 = 1; + var_r31->unk14 = 1; + var_r31->unk60 = 1.0f; + var_r31->unk64 = 1.0f; + } + var_r31->unk5C = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk14 * 8, temp_r28->unk_48); + fn_1_A1B8(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 = -arg2; + var_r31->unk38.x = var_r31->unk44.x = var_r31->unk2C.y = var_r31->unk38.y = arg2; + var_r31->unk2C.z = var_r31->unk38.z = var_r31->unk44.z = var_r31->unk50.z = 0.0f; + var_r21 = HuMemDirectMallocNum(HEAP_DATA, 0x20000, temp_r28->unk_48); + var_r18 = var_r21; + GXBeginDisplayList(var_r18, 0x20000); + GXBegin(GX_QUADS, GX_VTXFMT0, (arg1 * 4)); + + for (var_r30 = 0; var_r30 < arg1; var_r30++) { + GXPosition1x16(var_r30 * 4); + GXColor1x16(var_r30); + GXTexCoord1x16(var_r30 * 4); + GXPosition1x16((var_r30 * 4) + 1); + GXColor1x16(var_r30); + GXTexCoord1x16((var_r30 * 4) + 1); + GXPosition1x16((var_r30 * 4) + 2); + GXColor1x16(var_r30); + GXTexCoord1x16((var_r30 * 4) + 2); + GXPosition1x16((var_r30 * 4) + 3); + GXColor1x16(var_r30); + GXTexCoord1x16((var_r30 * 4) + 3); + } + var_r31->unk4 = GXEndDisplayList(); + DCFlushRangeNoSync(var_r21, var_r31->unk4); + var_r31->unk28 = HuMemDirectMallocNum(HEAP_DATA, var_r31->unk4, temp_r28->unk_48); + memcpy(var_r31->unk28, var_r21, var_r31->unk4); + DCFlushRangeNoSync(var_r31->unk28, var_r31->unk4); + HuMemDirectFree(var_r21); + return var_r20; +} + +void fn_1_9AB0(s16 arg0) { + ModelData* data; + unkStruct5* temp2; + + data = &Hu3DData[arg0]; + temp2 = (unkStruct5*)data->unk_120; + HuSprAnimKill(temp2->unk10); + Hu3DModelKill(arg0); +} + +unkStruct5* fn_1_9B10(s16 arg0) { + ModelData* data; + + data = &Hu3DData[arg0]; + return (unkStruct5*)data->unk_120; +} + +unkStruct4* fn_1_9B3C(s16 arg0, s16 arg1) { + ModelData* data; + unkStruct5* temp; + + data = &Hu3DData[arg0]; + temp = (unkStruct5*)data->unk_120; + + if (arg1 == -1) { + return 0; + } + + return &temp->unk18[arg1]; +} + +void fn_1_9B94(s16 arg0, m440Func5 arg1) { + ModelData* data; + unkStruct5* temp; + + data = &Hu3DData[arg0]; + temp = (unkStruct5*)data->unk_120; + temp->unkC = arg1; +} + +void fn_1_9BCC(s16 arg0, u8 arg1) { + ModelData* data; + unkStruct5* temp; + + data = &Hu3DData[arg0]; + temp = (unkStruct5*)data->unk_120; + temp->unk8 = arg1; +} + +void fn_1_9C04(ModelData* arg0, Mtx arg1) { + Mtx sp128; + ROMtx spF8; + Mtx spC8; + Mtx sp98; + Mtx sp68; + Vec sp5C; + Vec sp50; + Vec sp44; + Vec sp38; + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + Vec* var_r31; + s16 temp_r0; + u8 temp_r0_2; + unkStruct5* temp_r30; + HsfVector2f* var_r27; + s16 var_r26; + unkStruct4* var_r29; + m440Func5 var_r23; + + temp_r30 = (unkStruct5*)arg0->unk_120; + GXLoadPosMtxImm(arg1, 0); + GXSetNumTevStages(1); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + temp_r0 = temp_r30->unk10->bmp->dataFmt & 0xF; + if ((temp_r0 == 7) || (temp_r0 == 8)) { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXA, GX_CC_RASC, GX_CC_ZERO); + } else { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); + } + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE); + HuSprTexLoad(temp_r30->unk10, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetZCompLoc(0); + switch (temp_r30->unk8) { + case 0: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + break; + case 1: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP); + break; + case 2: + GXSetBlendMode(GX_BM_BLEND, GX_BL_ZERO, GX_BL_INVDSTCLR, GX_LO_NOOP); + break; + } + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetArray(GX_VA_POS, temp_r30->unk1C, 0xC); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetArray(GX_VA_CLR0, temp_r30->unk24, 4); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXSetArray(GX_VA_TEX0, temp_r30->unk20, 8); + fn_1_9344(arg1, sp128); + PSMTXReorder(sp128, spF8); + if (((u8)omPauseChk() == 0) && (temp_r30->unkC)) { + var_r23 = temp_r30->unkC; + var_r23(arg0, temp_r30, arg1); + } + var_r29 = temp_r30->unk18; + var_r31 = temp_r30->unk1C; + var_r27 = temp_r30->unk20; + PSMTXROMultVecArray(spF8, &temp_r30->unk2C, (Vec*)&sp68[0], 4); + + for (var_r26 = 0; var_r26 < temp_r30->unk0; var_r26++, var_r29++, var_r27+=4) { + if (var_r29->unk62 == 0) { + var_r31->x = var_r31->y = var_r31->z = 0.0f; + var_r31++; + var_r31->x = var_r31->y = var_r31->z = 0.0f; + var_r31++; + var_r31->x = var_r31->y = var_r31->z = 0.0f; + var_r31++; + var_r31->x = var_r31->y = var_r31->z = 0.0f; + var_r31++; + } else { + if (0.0f == var_r29->unk44) { + fn_1_A328((Vec*)&sp68[0], &sp38, &var_r29->unk48, 4); + PSVECAdd(&sp38, &var_r29->unk54, var_r31++); + PSVECAdd(&sp44, &var_r29->unk54, var_r31++); + PSVECAdd(&sp50, &var_r29->unk54, var_r31++); + PSVECAdd(&sp5C, &var_r29->unk54, var_r31++); + } else { + fn_1_A328(&temp_r30->unk2C, &sp38, &var_r29->unk48, 4); + PSMTXRotRad(spC8, 0x5A, 0.017453292f * var_r29->unk44); + PSMTXConcat(sp128, spC8, sp98); + PSMTXMultVecArray(sp98, &sp38, &sp8, 4); + PSVECAdd(&sp8, &var_r29->unk54, var_r31++); + PSVECAdd(&sp14, &var_r29->unk54, var_r31++); + PSVECAdd(&sp20, &var_r29->unk54, var_r31++); + PSVECAdd(&sp2C, &var_r29->unk54, var_r31++); + } + if (var_r29->unk60 != -1) { + fn_1_A284(var_r27, temp_r30->unk5C, var_r29->unk60, temp_r30->unk60, temp_r30->unk64); + } + } + } + DCFlushRangeNoSync(temp_r30->unk1C, temp_r30->unk0 * 0xC * 4); + DCFlushRangeNoSync(temp_r30->unk20, temp_r30->unk0 * 8 * 4); + GXCallDisplayList(temp_r30->unk28, temp_r30->unk4); +} + +void fn_1_A1B8(HsfVector2f* arg0, s16 arg1, s16 arg2, f32 arg8, f32 arg9) { + s16 var_r31; + s16 var_r30; + s16 var_r29; + + for (var_r31 = 0; var_r31 < arg1; var_r31++, arg0++) { + var_r30 = (var_r31 % arg2); + var_r29 = (var_r31 / arg2); + arg0->x = (var_r30 * arg8); + arg0->y = (var_r29 * arg9); + } +} + +void fn_1_A284(HsfVector2f* arg0, HsfVector2f* arg1, s16 arg2, f32 arg3, f32 arg4) { + arg0[0].x = arg1[arg2].x; + arg0[0].y = arg1[arg2].y; + arg0[1].x = (arg3 + arg1[arg2].x); + arg0[1].y = arg1[arg2].y; + arg0[2].x = (arg3 + arg1[arg2].x); + arg0[2].y = (arg4 + arg1[arg2].y); + arg0[3].x = arg1[arg2].x; + arg0[3].y = (arg4 + arg1[arg2].y); +} + +void fn_1_A328(Vec* arg0, Vec* arg1, Vec* arg2, s16 arg3) { + s16 var_r31; + + for (var_r31 = 0; var_r31 < arg3; var_r31++, arg0++, arg1++) { + arg1->x = (arg0->x * arg2->x); + arg1->y = (arg0->y * arg2->y); + arg1->z = (arg0->z * arg2->z); + } +} + +static s8 lbl_1_data_148 = 0xFF; + +void fn_1_A390(ModelData* arg0, Mtx arg1) { + if (lbl_1_bss_2 == 0) { + if ((HuPadBtnDown[0] & 0x10) != 0) { + lbl_1_bss_1 ^= 1; + } + if (lbl_1_bss_1 == 0) return; + + if ((HuPadBtn[0] & 1) != 0) { + lbl_1_data_20.x -= 4.0f; + } + if ((HuPadBtn[0] & 2) != 0) { + lbl_1_data_20.x += 4.0f; + } + lbl_1_data_2C.x += HuPadSubStkX[0]; + if ((HuPadBtn[0] & 0x20) != 0) { + if ((HuPadBtn[0] & 8) != 0) { + lbl_1_data_20.y -= 4.0f; + } + if ((HuPadBtn[0] & 4) != 0) { + lbl_1_data_20.y += 4.0f; + } + lbl_1_data_2C.y += HuPadSubStkY[0]; + } else { + if ((HuPadBtn[0] & 8) != 0) { + lbl_1_data_20.z -= 4.0f; + } + if ((HuPadBtn[0] & 4) != 0) { + lbl_1_data_20.z += 4.0f; + } + lbl_1_data_2C.z -= HuPadSubStkY[0]; + } + lbl_1_data_54.x = lbl_1_data_2C.x; + lbl_1_data_54.y = lbl_1_data_2C.y; + lbl_1_data_54.z = lbl_1_data_2C.z; + lbl_1_data_6C.x = lbl_1_data_20.x; + lbl_1_data_6C.y = lbl_1_data_20.y; + lbl_1_data_6C.z = lbl_1_data_20.z - 500.0f; + Hu3DGLightPosSet(lbl_1_bss_E, lbl_1_data_2C.x, lbl_1_data_2C.y, lbl_1_data_2C.z, 0.0f, 0.0f, 0.0f); + Hu3DGLightPosAimSetV(lbl_1_bss_E, &lbl_1_data_2C, &lbl_1_data_20); + Hu3DShadowPosSet(&lbl_1_data_54, &lbl_1_data_60, &lbl_1_data_6C); + } + + print8(8, 0x64, 1.5f, "InterXYZ: %.2f %.2f %.2f", lbl_1_data_20.x, lbl_1_data_20.y, lbl_1_data_20.z); + print8(8, 0x70, 1.5f, "PositionXYZ: %.2f %.2f %.2f", lbl_1_data_2C.x, lbl_1_data_2C.y, lbl_1_data_2C.z); + GXLoadPosMtxImm(arg1, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0); + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_RASC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + GXSetZMode(1, GX_LEQUAL, 1); + GXBegin(GX_LINES, GX_VTXFMT0, 2); + GXPosition3f32(lbl_1_data_20.x, lbl_1_data_20.y, lbl_1_data_20.z); + GXColor4u8(0xFF, 0xFF, 0xFF, 0xFF); + GXPosition3f32(lbl_1_data_2C.x, lbl_1_data_2C.y, lbl_1_data_2C.z); + GXColor4u8(0xFF, 0x00, 0x00, 0xFF); +} + +void fn_1_AA94(void) { + if ((HuPadBtnDown[0] & 0x40) != 0) { + lbl_1_bss_2 ^= 1; + } + if (lbl_1_bss_2 != 0) { + if ((HuPadBtn[0] & 1) != 0) { + CRot.y += 1.0f; + } + if ((HuPadBtn[0] & 2) != 0) { + CRot.y -= 1.0f; + } + if ((HuPadBtn[0] & 8) != 0) { + CRot.x -= 1.0f; + } + if ((HuPadBtn[0] & 4) != 0) { + CRot.x += 1.0f; + } + Center.x += HuPadSubStkX[0]; + if ((HuPadBtn[0] & 0x20) != 0) { + Center.y += HuPadSubStkY[0]; + } else { + Center.z += HuPadSubStkY[0]; + } + if ((HuPadBtn[0] & 0x400) != 0) { + CZoom += 10.0f; + } + if ((HuPadBtn[0] & 0x800) != 0) { + CZoom -= 10.0f; + } + if ((HuPadBtnDown[0] & 0x100) != 0) { + OSReport("\nCZoom = %.2f \n", CZoom); + OSReport("Center x = %.2f: y = %.2f: z = %.2f \n", Center.x, Center.y, Center.z); + OSReport("CRot x = %.2f: y = %.2f: z = %.2f \n", CRot.x, CRot.y, CRot.z); + } + } +} \ No newline at end of file diff --git a/src/REL/m440Dll/object.c b/src/REL/m440Dll/object.c new file mode 100644 index 00000000..cc6e6d54 --- /dev/null +++ b/src/REL/m440Dll/object.c @@ -0,0 +1,24 @@ +#include "REL/m440Dll.h" + +// bss +omObjData* lbl_1_bss_C0[4]; + +// data + +// prototypes +void fn_1_AEE4(omObjData*); +void fn_1_B180(omObjData*); + +void fn_1_AE08(Process* arg0) { + s16 var_r31; + + omMakeGroupEx(arg0, 0, 4); + omGetGroupMemberListEx(arg0, 0); + +loop_2: + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_C0[var_r31] = omAddObjEx(arg0, 0x64, 9, 8, 0, fn_1_AEE4); + lbl_1_bss_C0[var_r31]->work[0] = var_r31; + } + omAddObjEx(arg0, 0x65, 0, 0, -1, fn_1_B180); +}