From d502bc0a4d3e0de812cf3dd535c4a66b7ff5a8ec Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sun, 19 Jan 2025 18:11:11 -0500 Subject: [PATCH] continued work on fire.c --- include/REL/m438Dll.h | 91 ++++++++--- src/REL/m438Dll/fire.c | 362 ++++++++++++++++++++++++++++++++++++++--- src/REL/m438Dll/main.c | 22 +-- 3 files changed, 423 insertions(+), 52 deletions(-) diff --git a/include/REL/m438Dll.h b/include/REL/m438Dll.h index cad2040e..148944d9 100644 --- a/include/REL/m438Dll.h +++ b/include/REL/m438Dll.h @@ -2,6 +2,7 @@ #define M438DLL_H #include "game/animdata.h" +#include "game/hsfformat.h" #include "game/object.h" typedef struct M438MainWork4 { @@ -18,8 +19,17 @@ typedef struct M438MainWork4 { } M438MainWork4; /* size = 0x4C */ typedef struct M438UnkSubStruct { - s32 unk_00; - char unk01[0x20]; + s8 unk_00; + s8 unk_01; + char unk02[0x2]; + void* unk_04; // temp + f32 unk_08; + char unk0C[0x4]; + f32 unk_10; + char unk14[0x4]; + f32 unk_18; + char unk1C[0x4]; + f32 unk_20; u8 unk_24; float unk_28; float unk_2C; @@ -48,11 +58,30 @@ typedef struct M438UnkStruct { char unk5D[0x3]; Vec unk_60; Vec unk_6C; - s16 unk_78; - s16 unk_7A; - char unk7C[0x1C]; + s16 unk_78[0x10]; } M438UnkStruct; /* size = 0x98 */ +typedef struct M438FireStruct { + Vec unk0; + Vec unkC; + Vec unk18; + Vec unk24; +} M438FireStruct; // sizeof 0x30 + +typedef struct M438FireStruct2 { + GXColor unk0; + GXColor unk4; + GXColor unk8; + GXColor unkC; +} M438FireStruct2; // sizeof 0x10 + +typedef struct M438FireStruct3 { + HsfVector2f unk0; + HsfVector2f unk8; + HsfVector2f unk10; + HsfVector2f unk18; +} M438FireStruct3; // sizeof 0x20 + typedef struct M438UnkStruct2 { s16 unk_00; s16 unk_02; @@ -62,30 +91,52 @@ typedef struct M438UnkStruct2 { Vec unk_18; Vec unk_24; void (*unk_30)(struct M438UnkStruct2*); - s16 unk_34[4]; + s16* unk_34; + char unk_38[0x4]; M438UnkStruct *unk_3C; - char unk40[0x20]; + char unk40[0x8]; + s16 unk_48; + void* unk_4C; + Vec* unk_50; + GXColor* unk_54; + Vec* unk_58; + M438UnkSubStruct* unk_5C; u8 unk_60; char unk61[0x3]; - char unk64[0x18]; - s16 unk_7C; - s16 unk_7E; - float unk_80; - float unk_84; - float unk_88; - float unk_8C; - float unk_90; - char unk94[0x28]; + Vec unk_64; + Vec unk_70; + union { + s16 unk_7Ca[0x20]; + struct { + s16 unk_7C; + s16 unk_7E; + float unk_80; + float unk_84; + float unk_88; + float unk_8C; + float unk_90; + char unk94[0x28]; + }; + }; } M438UnkStruct2; /* size = 0xBC */ typedef struct M438UnkStruct3 { AnimData* unk_00; s16 unk_04; s16 unk_06; - s32 unk_08; + u32 unk_08; Vec unk_0C; Mtx unk_18; - char unk48[0x1C]; + GXColor unk_48; + u8 unk_4C; + u8 unk_4D; + s16 unk_4E; + s16 unk_50; + char unk52[0x2]; + f32 unk_54; + f32 unk_58; + f32 unk_5C; + f32 unk_60; } M438UnkStruct3; /* size = 0x64 */ typedef struct M438StructBssDE4 { @@ -110,9 +161,9 @@ float fn_1_E488(float arg8, float arg9, float argA); float fn_1_E5A4(float arg8, float arg9); void fn_1_E658(s16 arg0, s16 arg1); -s16 fn_1_10258(s32 arg0, s32 arg1); +s16 fn_1_10258(u8 arg0, u8 arg1); void fn_1_107BC(s16 arg0); -void fn_1_108E4(s16 arg0, s32 arg1, s32 arg2); +void fn_1_108E4(s16 arg0, s16 arg1, u8 arg2); s16 fn_1_10910(u32 arg0, s16 arg1, s16 arg2); s8 fn_1_11018(s16 arg0, u8 arg1, u32 arg2); void fn_1_11658(void); diff --git a/src/REL/m438Dll/fire.c b/src/REL/m438Dll/fire.c index efafb0fa..082570c8 100644 --- a/src/REL/m438Dll/fire.c +++ b/src/REL/m438Dll/fire.c @@ -4,31 +4,12 @@ extern u8 texMtxTbl; -typedef struct M438FireStruct { - Vec unk0; - Vec unkC; - Vec unk18; - Vec unk24; -} M438FireStruct; - -typedef struct M438FireStruct2 { - GXColor unk0; - GXColor unk4; - GXColor unk8; - GXColor unkC; -} M438FireStruct2; - -typedef struct M438FireStruct3 { - HsfVector2f unk0; - HsfVector2f unk8; - HsfVector2f unk10; - HsfVector2f unk18; -} M438FireStruct3; - // PROTO void fn_1_E790(M438UnkStruct2*); void fn_1_F538(ModelData*, Mtx); +void fn_1_FAB8(M438UnkStruct*); void fn_1_FD40(M438UnkStruct2*); +void fn_1_10F0C(s16); void fn_1_E658(s16 arg0, s16 arg1) { M438UnkStruct2* var_r29; @@ -223,3 +204,342 @@ void fn_1_FAB8(M438UnkStruct* arg0) { } arg0->unk_3C = GXEndDisplayList(); } + +void fn_1_FD40(M438UnkStruct2* arg0) { + M438UnkStruct* var_r28; + M438UnkStruct3* temp_r30; + M438UnkSubStruct* var_r31; + s32 temp_r0; + s32 var_r25; + s32 var_r26; + s32 var_r27; + + var_r27 = 0; + + var_r28 = arg0->unk_3C; + for (var_r25 = 0; var_r25 < arg0->unk_02; var_r25++, var_r28++) { + if ((var_r28->unk_38 & 4) != 0) { + var_r27++; + } else { + var_r31 = var_r28->unk_58; + for (var_r26 = 0; var_r26 < var_r28->unk_34; var_r26++, var_r31++) { + temp_r30 = &lbl_1_bss_DE4.unk_3C[arg0->unk_34[var_r26]]; + var_r31->unk_24 &= ~4; + switch (var_r31->unk_24 & 0xF) { + case 1: + var_r31->unk_2C += var_r31->unk_28; + if (var_r31->unk_2C >= 1.0f) { + var_r31->unk_00++; + var_r31->unk_2C -= 1.0f; + } + break; + case 2: + var_r31->unk_2C += var_r31->unk_28; + if (var_r31->unk_2C >= 1.0f) { + var_r31->unk_00 -= 1; + var_r31->unk_2C -= 1.0f; + } + break; + } + if (var_r31->unk_00 >= temp_r30->unk_4C) { + if ((var_r31->unk_24 & 0x10) != 0) { + var_r31->unk_24 |= 8; + var_r31->unk_00 -= 1; + } else if ((var_r31->unk_24 & 0x40) != 0) { + var_r31->unk_24 = (var_r31->unk_24 & 0xF0) | 2; + var_r31->unk_00 -= 2; + } else if ((var_r31->unk_24 & 0x20) != 0) { + var_r31->unk_00 = 0; + } + var_r31->unk_24 |= 4; + } else if (var_r31->unk_00 < 0) { + if ((var_r31->unk_24 & 0x10) != 0) { + var_r31->unk_24 |= 8; + var_r31->unk_00 = 0; + } else if ((var_r31->unk_24 & 0x20) != 0) { + if ((var_r31->unk_24 & 0x40) != 0) { + var_r31->unk_24 = (var_r31->unk_24 & 0xF0) | 1; + var_r31->unk_00 = 1; + } else { + var_r31->unk_00 = temp_r30->unk_4C - 1; + } + } else if ((var_r31->unk_24 & 0x40) != 0) { + var_r31->unk_24 |= 8; + var_r31->unk_00 = 0; + } + var_r31->unk_24 |= 4; + } else { + var_r31->unk_24 &= ~8; + } + if (var_r31->unk_00 != var_r31->unk_01) { + var_r31->unk_08 = (var_r31->unk_00 * temp_r30->unk_58); + var_r31->unk_10 = (var_r31->unk_00 * temp_r30->unk_58); + var_r31->unk_18 = ((var_r31->unk_00 + 1) * temp_r30->unk_58); + var_r31->unk_20 = ((var_r31->unk_00 + 1) * temp_r30->unk_58); + if ((var_r31->unk_00 + 1) < temp_r30->unk_4C) { + var_r31->unk_18 -= temp_r30->unk_60; + var_r31->unk_20 -= temp_r30->unk_60; + } + var_r31->unk_01 = var_r31->unk_00; + DCFlushRangeNoSync(&var_r31->unk_04, 0x20); + } + if ((var_r31->unk_24 & 8) != 0) { + if ((var_r28->unk_38 & 0x40000000) != 0) { + var_r28->unk_38 |= 4; + if ((var_r31->unk_24 & 0x40) == 0) { + if (var_r31->unk_00 <= 0) { + var_r31->unk_00 = temp_r30->unk_4C; + } else { + var_r31->unk_00 = 0; + } + } + } else if ((var_r28->unk_38 & 0x80000000) != 0) { + fn_1_107BC(arg0->unk_00); + } + var_r27++; + } + } + } + } + if (var_r27 >= arg0->unk_02) { + if ((arg0->unk_08 & 0x40000000) != 0) { + arg0->unk_08 |= 4; + } else if ((arg0->unk_08 & 0x80000000) != 0) { + fn_1_107BC(arg0->unk_00); + } + } + PPCSync(); +} + +s16 fn_1_10258(u8 arg0, u8 arg1) { + M438UnkStruct* var_r30; + M438UnkStruct2* var_r31; + s32 var_r29; + s32 var_r28; + void* temp_r25; + + var_r31 = &lbl_1_bss_DE4.unk_40[1]; + + for (var_r29 = 1; var_r29 < lbl_1_bss_DE4.unk_30; var_r29++, var_r31++) { + if (var_r31->unk_08 == 0) break; + } + if (var_r29 == lbl_1_bss_DE4.unk_30) { + OSReport("OVER BILL\n"); + return 0; + } + var_r31->unk_00 = var_r29; + var_r31->unk_08 = 1; + var_r31->unk_30 = NULL; + var_r31->unk_02 = arg0; + var_r31->unk_04 = arg1; + var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0 * 0x98, 0x10000000); + var_r31->unk_3C = var_r30; + var_r31->unk_34 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * 2, 0x10000000); + var_r31->unk_48 = 0; + var_r31->unk_4C = HuMemDirectMallocNum(HEAP_SYSTEM, arg0 << 8, 0x10000000); + var_r31->unk_50 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0 * 0x30, 0x10000000); + var_r31->unk_54 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0 * 0x10, 0x10000000); + var_r31->unk_58 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0 * 0xC, 0x10000000); + var_r31->unk_5C = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * (arg0 * 0x30), 0x10000000); + DCFlushRangeNoSync(var_r31->unk_4C, arg0 << 8); + var_r31->unk_0C.x = var_r31->unk_0C.y = var_r31->unk_0C.z = 0.0f; + var_r31->unk_18.x = var_r31->unk_18.y = var_r31->unk_18.z = 0.0f; + var_r31->unk_24.x = var_r31->unk_24.y = var_r31->unk_24.z = 1.0f; + var_r31->unk_70.x = var_r31->unk_70.y = var_r31->unk_70.z = 0.0f; + var_r31->unk_64.x = var_r31->unk_64.y = var_r31->unk_64.z = 0.0f; + var_r31->unk_60 = 0; + + for (var_r29 = 0; var_r29 < 0x20; var_r29++) { + var_r31->unk_7Ca[var_r29] = 0; + } + + for (var_r29 = 0; var_r29 < arg1; var_r29++) { + var_r31->unk_34[var_r29] = 0; + } + + for (var_r29 = 0; var_r29 < arg0; var_r29++, var_r30++) { + var_r30->unk_38 = 1; + var_r30->unk_34 = arg1; + var_r30->unk_30 = 0; + var_r30->unk_31 = 2; + var_r30->unk_32 = 0; + var_r30->unk_33 = 0; + var_r30->unk_50.r = var_r30->unk_50.g = var_r30->unk_50.b = 0; + var_r30->unk_50.a = 0xFF; + var_r30->unk_54.r = var_r30->unk_54.g = var_r30->unk_54.b = 0xFF; + var_r30->unk_54.a = 0xFF; + var_r30->unk_58 = &var_r31->unk_5C[var_r29 * arg1]; + + for (var_r28 = 0; var_r28 < arg1; var_r28++) { + var_r30->unk_58[var_r28].unk_00 = var_r30->unk_58[var_r28].unk_01 = 0; + var_r30->unk_58[var_r28].unk_28 = 1.0f; + var_r30->unk_58[var_r28].unk_2C = 0.0f; + } + var_r30->unk_00.x = var_r30->unk_00.y = var_r30->unk_00.z = 0.0f; + var_r30->unk_0C.x = var_r30->unk_0C.y = var_r30->unk_0C.z = 0.0f; + var_r30->unk_18.x = var_r30->unk_18.y = var_r30->unk_18.z = 1.0f; + var_r30->unk_6C.x = var_r30->unk_6C.y = var_r30->unk_6C.z = 0.0f; + var_r30->unk_24.x = var_r30->unk_24.y = var_r30->unk_24.z = 0.0f; + var_r30->unk_60.x = var_r30->unk_60.y = var_r30->unk_60.z = 0.0f; + var_r30->unk_5C = 0; + + for (var_r28 = 0; var_r28 < 0x10; var_r28++) { + var_r30->unk_78[var_r28] = 0; + } + var_r30->unk_44 = &var_r31->unk_50[var_r29 * 4]; + var_r30->unk_48 = &var_r31->unk_54[var_r29 * 4]; + var_r30->unk_4C = &var_r31->unk_58[var_r29]; + var_r30->unk_40 = ((char*)var_r31->unk_4C) + var_r31->unk_48; + fn_1_FAB8(var_r30); + var_r31->unk_48 += var_r30->unk_3C; + } + temp_r25 = var_r31->unk_4C; + var_r31->unk_4C = HuMemDirectMallocNum(HEAP_SYSTEM, var_r31->unk_48, 0x10000000); + memcpy(var_r31->unk_4C, temp_r25, var_r31->unk_48); + HuMemDirectFree(temp_r25); + DCFlushRangeNoSync(var_r31->unk_50, arg0 * 0x30); + DCFlushRangeNoSync(var_r31->unk_54, arg0 * 0x10); + DCFlushRangeNoSync(var_r31->unk_58, arg0 * 0xC); + DCFlushRangeNoSync(var_r31->unk_4C, var_r31->unk_48); + var_r30 = var_r31->unk_3C; + var_r31->unk_48 = 0; + + for (var_r29 = 0; var_r29 < arg0; var_r29++, var_r30++) { + var_r30->unk_40 = ((char*)var_r31->unk_4C) + var_r31->unk_48; + var_r31->unk_48 += var_r30->unk_3C; + } + lbl_1_bss_DE4.unk_36 = var_r31->unk_00; + lbl_1_bss_DE4.unk_38 = 0; + lbl_1_bss_DE4.unk_3A = 0; + PPCSync(); + return var_r31->unk_00; +} + +void fn_1_107BC(s16 arg0) { + M438UnkStruct2* temp_r31; + s32 var_r30; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_DE4.unk_40[arg0]; + if ((u32) temp_r31->unk_08 != 0) { + if (temp_r31->unk_50 != NULL) { + HuMemDirectFree(temp_r31->unk_50); + } + if (temp_r31->unk_54 != NULL) { + HuMemDirectFree(temp_r31->unk_54); + } + if (temp_r31->unk_58 != NULL) { + HuMemDirectFree(temp_r31->unk_58); + } + if (temp_r31->unk_4C != NULL) { + HuMemDirectFree(temp_r31->unk_4C); + } + if (temp_r31->unk_5C != NULL) { + HuMemDirectFree(temp_r31->unk_5C); + } + + for (var_r30 = 0; var_r30 < temp_r31->unk_04; var_r30++) { + fn_1_10F0C(temp_r31->unk_34[var_r30]); + } + HuMemDirectFree(temp_r31->unk_3C); + HuMemDirectFree(temp_r31->unk_34); + temp_r31->unk_08 = 0; + temp_r31->unk_00 = 0; + } + } +} + +void fn_1_108E4(s16 arg0, s16 arg1, u8 arg2) { + lbl_1_bss_DE4.unk_36 = arg0; + lbl_1_bss_DE4.unk_38 = arg1; + lbl_1_bss_DE4.unk_3A = arg2; +} + +#include "game/sprite.h" + +s16 fn_1_10910(u32 arg0, s16 arg1, s16 arg2) { + f32 var_f31; + f32 var_f30; + AnimData* var_r30; + M438UnkStruct3* var_r31; + s32 var_r29; + + var_r31 = &lbl_1_bss_DE4.unk_3C[1]; + for (var_r29 = 1; var_r29 < lbl_1_bss_DE4.unk_32; var_r29++, var_r31++) { + if ((var_r31->unk_06 != 0) && (var_r31->unk_08 == arg0)) break; + } + if (var_r29 < lbl_1_bss_DE4.unk_32) { + var_r31->unk_06++; + return var_r29; + } + + var_r31 = &lbl_1_bss_DE4.unk_3C[1]; + for (var_r29 = 1; var_r29 < lbl_1_bss_DE4.unk_32; var_r29++, var_r31++) { + if (var_r31->unk_06 == 0) break; + } + var_r31->unk_08 = arg0; + var_r31->unk_06 = 1; + if (((arg0 & 0xFFFF0000) + 0x10000) == 0) { + var_r30 = HuSprAnimMake(arg1, arg2, 2); + var_r30->bmp->data = HuMemDirectMallocNum(HEAP_SYSTEM, arg2 * (arg1 * 2), 0x10000000); + arg1 = arg2 = 0; + } else { + var_r30 = HuSprAnimRead(HuDataReadNum(arg0, 0x10000000)); + } + if ((arg1 == 0) || (arg2 == 0)) { + arg1 = var_r30->bmp->sizeX; + arg2 = var_r30->bmp->sizeY; + var_f31 = var_f30 = 1.0f; + } else { + var_f31 = arg1 / (f32)var_r30->bmp->sizeX; + var_f30 = arg2 / (f32)var_r30->bmp->sizeY; + } + var_r31->unk_00 = var_r30; + var_r31->unk_4E = arg1; + var_r31->unk_50 = arg2; + var_r31->unk_54 = var_f31; + var_r31->unk_58 = var_f30; + var_r31->unk_5C = 1.0f / var_r30->bmp->sizeX; + var_r31->unk_60 = 1.0f / var_r30->bmp->sizeY; + var_r31->unk_04 = 0; + var_r31->unk_4C = var_r30->bmp->sizeY / arg2; + if (var_r31->unk_4C < 1) { + var_r31->unk_4C = 1; + } + var_r31->unk_4D = 0; + if ((arg1 > var_r30->bmp->sizeX) || (arg2 > var_r30->bmp->sizeY)) { + var_r31->unk_4D = 1; + } + var_r31->unk_48.r = var_r31->unk_48.g = var_r31->unk_48.b = 0xFF; + var_r31->unk_48.a = 0xFF; + PSMTXIdentity(var_r31->unk_18); + var_r31->unk_0C.x = var_r31->unk_0C.y = var_r31->unk_0C.z = 0.0f; + return var_r29; +} + +void fn_1_10CB8(s16 arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, s16 arg5) { + f32 var_f31; + f32 var_f30; + M438UnkStruct3* temp_r31; + AnimData* temp_r30; + + temp_r31 = &lbl_1_bss_DE4.unk_3C[arg0]; + HuSprAnimKill(temp_r31->unk_00); + temp_r31->unk_08 |= 0xFFFF0000; + temp_r30 = HuSprAnimMake(arg2, arg3, arg1); + temp_r30->bmp->data = HuMemDirectMallocNum(HEAP_SYSTEM, arg3 * (temp_r30->bmp->pixSize * arg2), 0x10000000U); + var_f31 = arg4 / (f32) temp_r30->bmp->sizeX; + var_f30 = arg5 / (f32) temp_r30->bmp->sizeY; + temp_r31->unk_00 = temp_r30; + temp_r31->unk_4E = arg2; + temp_r31->unk_50 = arg3; + temp_r31->unk_54 = var_f31; + temp_r31->unk_58 = var_f30; + temp_r31->unk_5C = 1.0f / (f32) temp_r30->bmp->sizeX; + temp_r31->unk_60 = 1.0f / (f32) temp_r30->bmp->sizeY; + temp_r31->unk_04 = 0; + temp_r31->unk_4C = temp_r30->bmp->sizeY / arg5; + temp_r31->unk_4D = 0; + temp_r31->unk_48.r = temp_r31->unk_48.g = temp_r31->unk_48.b = 0xFF; + temp_r31->unk_48.a = 0xFF; +} diff --git a/src/REL/m438Dll/main.c b/src/REL/m438Dll/main.c index e3925d7b..861c653d 100644 --- a/src/REL/m438Dll/main.c +++ b/src/REL/m438Dll/main.c @@ -1920,10 +1920,10 @@ void fn_1_63B0(M438UnkStruct2 *arg0) var_r31->unk_60.x = var_r31->unk_60.z = temp_f30; } var_r31->unk_58->unk_24 = 0; - var_r31->unk_78 = (s32)((60.0f * ((1.0f / 65536.0f) * fn_1_7DB4()))) + 1; + var_r31->unk_78[0] = (s32)((60.0f * ((1.0f / 65536.0f) * fn_1_7DB4()))) + 1; var_r31->unk_5C++; case 1: - if (--var_r31->unk_78 == 0) { + if (--var_r31->unk_78[0] == 0) { var_r31->unk_58->unk_24 = 0x11U; var_r31->unk_58->unk_28 = 0.5f; var_r31->unk_58->unk_2C = 0.0f; @@ -1968,7 +1968,7 @@ void fn_1_6A3C(M438UnkStruct2 *arg0) var_r28 = 0; for (var_r27 = 0; var_r27 < arg0->unk_02; var_r27++, var_r31++) { - if ((arg0->unk_7C != 0) && (var_r31->unk_7A == 0)) { + if ((arg0->unk_7C != 0) && (var_r31->unk_78[1] == 0)) { var_r31->unk_5C = 0; } switch (var_r31->unk_5C) { @@ -1985,8 +1985,8 @@ void fn_1_6A3C(M438UnkStruct2 *arg0) var_r31->unk_6C.x = 100.0f * (0.1f * sp8.x); var_r31->unk_6C.y = sp8.y + (2.5f * ((1.0f / 65536.0f) * fn_1_7DB4())); var_r31->unk_6C.z = 100.0f * (0.1f * sp8.z); - var_r31->unk_78 = (s32)(24.0f * ((1.0f / 65536.0f) * fn_1_7DB4())) + 1; - var_r31->unk_7A = 1; + var_r31->unk_78[0] = (s32)(24.0f * ((1.0f / 65536.0f) * fn_1_7DB4())) + 1; + var_r31->unk_78[1] = 1; } else { temp_f30 = (180.0f * ((1.0f / 65536.0f) * fn_1_7DB4())) - 90.0f; @@ -2000,8 +2000,8 @@ void fn_1_6A3C(M438UnkStruct2 *arg0) var_r31->unk_6C.x = (100.0 * (0.015 * sp8.x)); var_r31->unk_6C.y = sp8.y + ((1.0f / 65536.0f) * fn_1_7DB4()); var_r31->unk_6C.z = 100.0f * (0.015f * sp8.z); - var_r31->unk_78 = (s32)(60.0f * ((1.0f / 65536.0f) * fn_1_7DB4())) + 1; - var_r31->unk_7A = 0; + var_r31->unk_78[0] = (s32)(60.0f * ((1.0f / 65536.0f) * fn_1_7DB4())) + 1; + var_r31->unk_78[1] = 0; } var_r31->unk_38 &= ~4; if ((fn_1_7DB4() & 0xF) != 0) { @@ -2040,12 +2040,12 @@ void fn_1_6A3C(M438UnkStruct2 *arg0) var_r31->unk_5C++; break; case 1: - if (var_r31->unk_7A != 0) { + if (var_r31->unk_78[1] != 0) { var_r31->unk_6C.y -= 0.5f; } - if (--var_r31->unk_78 == 0) { + if (--var_r31->unk_78[0] == 0) { var_r31->unk_58->unk_24 = 0x11; - if (var_r31->unk_7A != 0) { + if (var_r31->unk_78[1] != 0) { var_r31->unk_58->unk_28 = 0.5f; } else { @@ -2068,7 +2068,7 @@ void fn_1_6A3C(M438UnkStruct2 *arg0) var_r31->unk_18.z *= 0.95f; var_r31->unk_6C.y -= 1.5f; if ((var_r31->unk_58->unk_24 & 8) != 0) { - if (var_r31->unk_7A != 0) { + if (var_r31->unk_78[1] != 0) { var_r31->unk_5C = 3; } else {