stage.c finished, have to fix types now

This commit is contained in:
CreateSource 2024-05-24 14:25:53 -04:00
parent bde74e372a
commit d430953293
9 changed files with 296 additions and 59 deletions

View file

@ -110,7 +110,7 @@ fn_1_709C = .text:0x0000709C; // type:function size:0x244
fn_1_72E0 = .text:0x000072E0; // type:function size:0x18
fn_1_72F8 = .text:0x000072F8; // type:function size:0x58
fn_1_7350 = .text:0x00007350; // type:function size:0x1A4
fn_1_74F4 = .text:0x000074F4; // type:function size:0x1F4
m446CursorCreate = .text:0x000074F4; // type:function size:0x1F4
fn_1_76E8 = .text:0x000076E8; // type:function size:0xE0
fn_1_77C8 = .text:0x000077C8; // type:function size:0xBC
fn_1_7884 = .text:0x00007884; // type:function size:0x84
@ -121,7 +121,7 @@ fn_1_7AB4 = .text:0x00007AB4; // type:function size:0x13C
fn_1_7BF0 = .text:0x00007BF0; // type:function size:0x18
fn_1_7C08 = .text:0x00007C08; // type:function size:0x58
fn_1_7C60 = .text:0x00007C60; // type:function size:0x460
fn_1_80C0 = .text:0x000080C0; // type:function size:0x330
m446StageCreate = .text:0x000080C0; // type:function size:0x330
fn_1_83F0 = .text:0x000083F0; // type:function size:0xBC
fn_1_84AC = .text:0x000084AC; // type:function size:0x80
fn_1_852C = .text:0x0000852C; // type:function size:0xE0
@ -229,19 +229,19 @@ lbl_1_rodata_288 = .rodata:0x00000288; // type:object size:0x4 scope:local data:
lbl_1_rodata_290 = .rodata:0x00000290; // type:object size:0x8 scope:local data:double
lbl_1_rodata_298 = .rodata:0x00000298; // type:object size:0x4 scope:local data:float
lbl_1_rodata_29C = .rodata:0x0000029C; // type:object size:0x4 scope:local data:float
lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 data:float
lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 data:float
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_2B4 = .rodata:0x000002B4; // type:object size:0x4 data:float
lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x8 data:double
lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 data:float
lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float
lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 data:float
lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 data:float
lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float
lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float
lbl_1_rodata_2A0 = .rodata:0x000002A0; // type:object size:0x4 scope:local data:float
lbl_1_rodata_2A4 = .rodata:0x000002A4; // type:object size:0x4 scope:local data:float
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_rodata_2B4 = .rodata:0x000002B4; // type:object size:0x4 scope:local data:float
lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x8 scope:local data:double
lbl_1_rodata_2C0 = .rodata:0x000002C0; // type:object size:0x4 scope:local data:float
lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 scope:local data:float
lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x4 scope:local data:float
lbl_1_rodata_2CC = .rodata:0x000002CC; // type:object size:0x4 scope:local data:float
lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float
lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float
lbl_1_data_0 = .data:0x00000000; // type:object size:0xC
lbl_1_data_C = .data:0x0000000C; // type:object size:0xC
lbl_1_data_18 = .data:0x00000018; // type:object size:0x4 data:float
@ -280,7 +280,7 @@ lbl_1_data_410 = .data:0x00000410; // type:object size:0x14
lbl_1_data_424 = .data:0x00000424; // type:object size:0x3C
lbl_1_data_460 = .data:0x00000460; // type:object size:0x54 data:byte
lbl_1_data_4B4 = .data:0x000004B4; // type:object size:0x24
lbl_1_data_4D8 = .data:0x000004D8; // type:object size:0x1E data:string
lbl_1_data_4D8 = .data:0x000004D8; // type:object size:0x1E 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:0x4 data:4byte

View file

@ -3,6 +3,7 @@
#include "game/process.h"
#include "game/object.h"
////// TYPES //////
typedef struct _unkStruct {
s32 unk0;
s16 unk4;
@ -14,17 +15,17 @@ typedef struct _unkStruct {
s32 unk18;
s32 unk1C;
struct _unkStruct6* unk20;
s32 unk24;
struct _unkStruct9* unk24;
struct _unkStruct5* unk28;
struct _unkStruct8* unk2C[2];
struct _unkStruct4* unk34;
struct _unkStruct9* unk34;
struct _unkStruct4* unk38[23];
s32 unk94;
Process* unk98;
} unkStruct;
typedef struct _unkStruct2 {
struct _unkStruct4* *unk0;
void** unk0;
s32 unk4;
s32 unk8;
} unkStruct2;
@ -145,12 +146,34 @@ typedef struct _unkStruct8 {
s32 unkC8;
} unkStruct8;
typedef struct _unkStruct9 {
s16 unk0[5];
s16 unkA[2];
s16 unkE;
f32 unk10;
f32 unk14;
s32 unk18;
s32 unk1C;
s32 unk20;
s32 unk24;
s32 unk28;
s32 unk2C;
} unkStruct9;
typedef struct _unkStruct10 {
Vec unk0;
Vec unkC;
GXColor unk18;
} unkStruct10;
typedef void (*m446Func)(s32);
typedef void (*m446Func1)(unkStruct*);
typedef void (*m446Func4)(unkStruct4*);
typedef void (*m446Func8)(unkStruct8*);
////// BSS //////
// stage.c
extern unkStruct3* lbl_1_bss_A0;
// cursor.c
extern unkStruct3* lbl_1_bss_98;
// camera.c
@ -204,6 +227,10 @@ extern m446Func8 lbl_1_data_2DC[5];
extern Vec lbl_1_data_370;
// cursor.c
extern s32 lbl_1_data_3C8[9];
// stage.c
extern unkStruct10 lbl_1_data_460[3];
extern Vec lbl_1_data_424[5];
extern Vec lbl_1_data_4B4[3];
////// PROTOTYPES //////
// main.c
@ -225,9 +252,9 @@ extern void fn_1_19D4(void);
// card.c
extern unkStruct2* fn_1_1C64(s32);
extern void fn_1_1CF8(unkStruct2*);
extern s32 fn_1_1D30(unkStruct2*, unkStruct4*);
extern s32 fn_1_1D6C(unkStruct2*, unkStruct4**);
extern s32 fn_1_1DA8(unkStruct2*, unkStruct4**);
extern s32 fn_1_1D30(unkStruct2*, void*);
extern s32 fn_1_1D6C(unkStruct2*, void**);
extern s32 fn_1_1DA8(unkStruct2*, void**);
extern BOOL fn_1_1DDC(unkStruct2*);
extern s32 fn_1_1DEC(unkStruct2*);
extern unkStruct3* fn_1_1DF4(void*);
@ -243,7 +270,7 @@ extern s32 fn_1_2064(void);
extern void fn_1_207C(void);
extern void fn_1_20D4(void);
extern unkStruct4* m446CardCreate(s32);
extern void fn_1_2688(unkStruct4*);
extern void fn_1_2688(unkStruct9*);
extern void fn_1_272C(unkStruct4*);
extern void fn_1_2794(unkStruct4*);
extern void fn_1_27FC(unkStruct4*, Vec*, s32);
@ -320,11 +347,20 @@ extern void fn_1_709C(void);
extern s32 fn_1_72E0(void);
extern void fn_1_72F8(void);
extern void fn_1_7350(void);
extern unkStruct7* fn_1_74F4(s32);
extern unkStruct7* m446CursorCreate(s32);
extern void fn_1_76E8(unkStruct7*);
extern void fn_1_77C8(unkStruct7*, u8);
extern void fn_1_7884(unkStruct7*);
extern void fn_1_7908(unkStruct7*, Vec*, s32);
extern void fn_1_799C(unkStruct7*);
extern void fn_1_7A38(unkStruct7*);
extern void fn_1_7AB4(unkStruct7*);
extern void fn_1_7AB4(unkStruct7*);
// stage.c
extern s32 fn_1_7BF0(void);
extern void fn_1_7C08(void);
extern void fn_1_7C60(void);
extern unkStruct9* m446StageCreate(void);
extern void fn_1_83F0(unkStruct9*);
extern void fn_1_84AC(unkStruct9*);
extern void fn_1_852C(unkStruct9*);
extern void fn_1_860C(unkStruct9*);

View file

@ -33,7 +33,7 @@ void fn_1_1CF8(unkStruct2* arg0) {
HuMemDirectFree(arg0);
}
s32 fn_1_1D30(unkStruct2* arg0, unkStruct4* arg1) {
s32 fn_1_1D30(unkStruct2* arg0, void* arg1) {
if (arg0->unk4 <= arg0->unk8) {
return 0;
} else {
@ -43,7 +43,7 @@ s32 fn_1_1D30(unkStruct2* arg0, unkStruct4* arg1) {
}
}
s32 fn_1_1D6C(unkStruct2* arg0, unkStruct4** arg1) {
s32 fn_1_1D6C(unkStruct2* arg0, void** arg1) {
if (arg0->unk8 <= 0) {
return 0;
} else {
@ -53,7 +53,7 @@ s32 fn_1_1D6C(unkStruct2* arg0, unkStruct4** arg1) {
}
}
s32 fn_1_1DA8(unkStruct2* arg0, unkStruct4** arg1) {
s32 fn_1_1DA8(unkStruct2* arg0, void** arg1) {
if (arg0->unk8 <= 0) {
return 0;
} else {
@ -174,7 +174,7 @@ s32 fn_1_2064(void) {
}
void fn_1_207C(void) {
void* var_r30;
unkStruct9* var_r30;
unkStruct3* var_r31;
var_r31 = lbl_1_bss_18;
@ -295,24 +295,22 @@ unkStruct4* m446CardCreate(s32 arg0) {
return temp_r31;
}
void fn_1_2688(unkStruct4* arg0) {
void fn_1_2688(unkStruct9* arg0) {
unkStruct3* var_r31 = lbl_1_bss_18;
loop_1:
if (arg0 == var_r31->unk0) {
if (var_r31 == lbl_1_bss_18) {
lbl_1_bss_18 = var_r31->unk8;
do {
if (arg0 == var_r31->unk0) {
if (var_r31 == lbl_1_bss_18) {
lbl_1_bss_18 = var_r31->unk8;
}
fn_1_1F04(var_r31);
fn_1_1E5C(var_r31);
Hu3DModelKill(arg0->unkA[0]);
Hu3DModelKill(arg0->unkA[1]);
HuMemDirectFree(arg0);
return;
}
fn_1_1F04(var_r31);
fn_1_1E5C(var_r31);
Hu3DModelKill(arg0->unkA);
Hu3DModelKill(arg0->unkC);
HuMemDirectFree(arg0);
return;
}
var_r31 = var_r31->unk8;
if (var_r31) {
goto loop_1;
}
var_r31 = var_r31->unk8;
} while (var_r31);
}
void fn_1_272C(unkStruct4* arg0) {

View file

@ -65,7 +65,7 @@ void fn_1_7350(void) {
}
}
unkStruct7* fn_1_74F4(s32 arg0) {
unkStruct7* m446CursorCreate(s32 arg0) {
s32 var_r30;
unkStruct7* var_r31;
unkStruct3* var_r29;

View file

@ -40,7 +40,7 @@ unkStruct5* fn_1_3064(void) {
}
void fn_1_3180(unkStruct2** arg0) { // typing nightmare
unkStruct4* sp8;
unkStruct9* sp8;
while (fn_1_1D6C(*arg0, &sp8) != 0) {
fn_1_2688(sp8);

View file

@ -10,14 +10,6 @@
#include "game/frand.h"
#include "game/minigame_seq.h"
// stage.c
extern s32 fn_1_7BF0(void);
extern void fn_1_7C08(void);
extern void fn_1_7C60(void);
extern s32 fn_1_80C0(void);
extern void fn_1_83F0(s32);
extern void fn_1_84AC(s32);
// bss
s32 lbl_1_bss_14;
s32 lbl_1_bss_10;
@ -120,7 +112,7 @@ unkStruct* m446FlowCreate(void) {
for (var_r30 = 0; var_r30 < 23; var_r30++) {
temp_r3->unk38[var_r30] = 0;
}
temp_r3->unk24 = fn_1_80C0();
temp_r3->unk24 = m446StageCreate();
temp_r3->unk20 = fn_1_39D0();
lbl_1_bss_10 = 0;

View file

@ -9,7 +9,7 @@
#include "game/objsub.h"
// cursor.c
extern unkStruct7 *fn_1_74F4(s32);
extern unkStruct7 *m446CursorCreate(s32);
extern void fn_1_76E8(unkStruct7*);
extern void fn_1_77C8(unkStruct7*, u8);
@ -167,7 +167,7 @@ unkStruct8* m446PlayerCreate(s32 arg0, unkStruct6* arg1) {
for (var_r30 = 0; var_r30 < 3; var_r30++) {
var_r31->unk2C[var_r30] = NULL;
}
var_r31->unk8 = fn_1_74F4(1);
var_r31->unk8 = m446CursorCreate(1);
if (!var_r31->unk8) {
HuMemDirectFree(var_r31);
return NULL;

211
src/REL/m446Dll/stage.c Normal file
View file

@ -0,0 +1,211 @@
#include "REL/m446Dll.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
// bss
unkStruct3* lbl_1_bss_A0;
// data
s32 lbl_1_data_410[5] = { 0x4D0008, 0x4D0007, 0x4D0006, 0x4D001F, 0x4D001F };
Vec lbl_1_data_424[5] = {
{ 0.0f, 0.0f, 0.0f },
{ 0.0f, 0.1f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
{ 160.0f, 160.0f, 0.0f },
{ -160.0f, 160.0f, 0.0f },
};
unkStruct10 lbl_1_data_460[3] = {
{
{ 160.0f, 160.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
{ 0xFF, 0xFF, 0xFF, 0xFF }
},
{
{ -160.0f, 160.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
{ 0xFF, 0xFF, 0xFF, 0xFF }
},
{
{ 0.0f, 160.0f, 500.0f },
{ 0.0f, 0.0f, 0.0f },
{ 0xB0, 0xB0, 0xB0, 0xFF }
}
};
Vec lbl_1_data_4B4[3] = {
{ 1.0f, 3000.0f, 1.0f },
{ 0.0f, 1.0f, 0.0f },
{ 0.0f, 0.0f, 0.0f },
};
s32 fn_1_7BF0(void) {
lbl_1_bss_A0 = 0;
return 1;
}
void fn_1_7C08(void) {
unkStruct3* var_r31;
unkStruct9* var_r30;
var_r31 = lbl_1_bss_A0;
if (var_r31) {
do {
var_r30 = var_r31->unk0;
fn_1_2688(var_r30);
var_r31 = var_r31->unk8;
} while (var_r31);
}
}
void fn_1_7C60(void) {
s32 var_r30;
unkStruct3* var_r29;
unkStruct9* temp_r31;
var_r29 = lbl_1_bss_A0;
if (var_r29) {
do {
temp_r31 = var_r29->unk0;
if ((temp_r31->unk28 != 0) && (temp_r31->unk14 < 1.0f)) {
if ((temp_r31->unk14 += 0.002f) > 1.0f) {
temp_r31->unk14 = 1.0f;
}
Hu3DGLightColorSet(temp_r31->unkA[2], lbl_1_data_460[2].unk18.r * temp_r31->unk14, lbl_1_data_460[2].unk18.g * temp_r31->unk14, lbl_1_data_460[2].unk18.b * temp_r31->unk14, lbl_1_data_460[2].unk18.a * temp_r31->unk14);
}
if (temp_r31->unk24 != 0) {
for (var_r30 = 0; var_r30 <= 1; var_r30++) {
if (temp_r31->unk10 < 1.0f) {
if ((temp_r31->unk10 += 0.002f) > 1.0f) {
temp_r31->unk10 = 1.0f;
}
Hu3DGLightColorSet(temp_r31->unkA[var_r30], temp_r31->unk10 * lbl_1_data_460[var_r30].unk18.r, temp_r31->unk10 * lbl_1_data_460[var_r30].unk18.g, temp_r31->unk10 * lbl_1_data_460[var_r30].unk18.b, temp_r31->unk10 * lbl_1_data_460[var_r30].unk18.a);
}
}
if ((temp_r31->unk18 == 0) && (Hu3DMotionEndCheck(temp_r31->unk0[2]) != 0)) {
Hu3DMotionStartEndSet(temp_r31->unk0[2], 180.0f, 359.0f);
Hu3DModelAttrSet(temp_r31->unk0[2], 0x40000001);
temp_r31->unk18 = 1;
}
if ((temp_r31->unk1C == 0) && (Hu3DMotionEndCheck(temp_r31->unk0[3]) != 0)) {
Hu3DMotionStartEndSet(temp_r31->unk0[3], 120.0f, 159.0f);
Hu3DModelAttrSet(temp_r31->unk0[3], 0x40000001);
temp_r31->unk1C = 1;
}
if ((temp_r31->unk20 == 0) && (Hu3DMotionEndCheck(temp_r31->unk0[4]) != 0)) {
Hu3DMotionStartEndSet(temp_r31->unk0[4], 120.0f, 159.0f);
Hu3DModelAttrSet(temp_r31->unk0[4], 0x40000001);
temp_r31->unk20 = 1;
}
}
var_r29 = var_r29->unk8;
} while (var_r29);
}
}
unkStruct9* m446StageCreate(void) {
s32 var_r30;
unkStruct3* var_r29;
unkStruct3* temp_ret;
unkStruct9* var_r31;
var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x30, 0x10000000);
if (!var_r31) {
return NULL;
}
var_r31->unk10 = 0.0f;
var_r31->unk14 = 0.0f;
var_r31->unk18 = 0;
var_r31->unk1C = 0;
var_r31->unk20 = 0;
var_r31->unk24 = 0;
var_r31->unk28 = 0;
var_r31->unk2C = 0;
for (var_r30 = 0; var_r30 < 5; var_r30++) {
var_r31->unk0[var_r30] = Hu3DModelCreateFile(lbl_1_data_410[var_r30]);
Hu3DModelPosSet(var_r31->unk0[var_r30], lbl_1_data_424[var_r30].x, lbl_1_data_424[var_r30].y, lbl_1_data_424[var_r30].z);
}
Hu3DModelAttrSet(var_r31->unk0[3], 1);
Hu3DModelAttrSet(var_r31->unk0[4], 1);
Hu3DModelAttrSet(var_r31->unk0[3], 0x40000002);
Hu3DModelAttrSet(var_r31->unk0[4], 0x40000002);
Hu3DModelAttrReset(var_r31->unk0[3], 0x40000001);
Hu3DModelAttrReset(var_r31->unk0[4], 0x40000001);
Hu3DModelAttrReset(var_r31->unk0[2], 0x40000001);
for (var_r30 = 0; var_r30 < 3; var_r30++) {
var_r31->unkA[var_r30] = Hu3DGLightCreateV(&lbl_1_data_460[var_r30].unk0, &lbl_1_data_460[var_r30].unkC, &lbl_1_data_460[var_r30].unk18);
Hu3DGLightStaticSet(var_r31->unkA[var_r30], 1);
Hu3DGLightPointSet(var_r31->unkA[var_r30], 100.0f, 1.0f, 3);
Hu3DGLightColorSet(var_r31->unkA[var_r30], 0, 0, 0, 0);
}
Hu3DShadowCreate(30.0f, 20.0f, 20000.0f);
Hu3DShadowTPLvlSet(1.0f);
Hu3DShadowPosSet(&lbl_1_data_4B4[0], &lbl_1_data_4B4[1], &lbl_1_data_4B4[2]);
Hu3DModelShadowMapSet(var_r31->unk0[0]);
Hu3DModelShadowSet(var_r31->unk0[1]);
var_r29 = fn_1_1DF4(var_r31);
if (!var_r29) {
OSReport("[!] m446StageCreate ERROR...\n");
HuMemDirectFree(var_r31);
return NULL;
}
if (lbl_1_bss_A0) {
fn_1_1EC8(lbl_1_bss_A0, var_r29);
} else {
lbl_1_bss_A0 = var_r29;
}
return var_r31;
}
void fn_1_83F0(unkStruct9* arg0) {
s32 var_r30;
unkStruct3* var_r31;
var_r31 = lbl_1_bss_A0;
do {
if (arg0 == var_r31->unk0) {
if (var_r31 == lbl_1_bss_A0) {
lbl_1_bss_A0 = var_r31->unk8;
}
fn_1_1F04(var_r31);
fn_1_1E5C(var_r31);
for (var_r30 = 0; var_r30 < 5; var_r30++) {
Hu3DModelKill(arg0->unk0[var_r30]);
}
HuMemDirectFree(arg0);
return;
}
var_r31 = var_r31->unk8;
} while (var_r31);
}
void fn_1_84AC(unkStruct9* arg0) {
Hu3DModelAttrReset(arg0->unk0[3], 1);
Hu3DModelAttrReset(arg0->unk0[4], 1);
Hu3DModelAttrReset(arg0->unk0[3], 0x40000002);
Hu3DModelAttrReset(arg0->unk0[4], 0x40000002);
arg0->unk24 = 1;
arg0->unk1C = 0;
arg0->unk20 = 0;
arg0->unk18 = 0;
}
void fn_1_852C(unkStruct9* arg0) {
Hu3DModelAttrSet(arg0->unk0[3], 1U);
Hu3DModelAttrSet(arg0->unk0[4], 1U);
Hu3DModelAttrSet(arg0->unk0[3], 0x40000002U);
Hu3DModelAttrSet(arg0->unk0[4], 0x40000002U);
Hu3DMotionStartEndSet(arg0->unk0[2], 0.0f, 359.0f);
Hu3DMotionStartEndSet(arg0->unk0[3], 0.0f, 119.0f);
Hu3DMotionStartEndSet(arg0->unk0[4], 0.0f, 119.0f);
arg0->unk24 = 0;
arg0->unk1C = 0;
arg0->unk20 = 0;
arg0->unk18 = 0;
}
void fn_1_860C(unkStruct9* arg0) {
arg0->unk28 = 1;
}

View file

@ -50,7 +50,7 @@ unkStruct6* fn_1_39D0(void) {
Hu3DModelAmbSet(var_r31->unk4, 0.0f, 0.0f, 0.0f);
Hu3DModelShadowMapSet(var_r31->unk4);
Hu3DModelLayerSet(var_r31->unk4, 0);
var_r31->unk0 = fn_1_74F4(0);
var_r31->unk0 = m446CursorCreate(0);
fn_1_7884(var_r31->unk0);
var_r31->unk60 = 10;
var_r31->unk5C = 0;