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