From bdc09c15752554553c7397ec660753f98135be7f Mon Sep 17 00:00:00 2001 From: CreateSource Date: Mon, 17 Jun 2024 15:28:08 -0400 Subject: [PATCH] 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