From cc5964455cf8e657fe858df1af1840b9acfbe6ef Mon Sep 17 00:00:00 2001 From: CreateSource Date: Thu, 23 May 2024 00:29:43 -0400 Subject: [PATCH] Match m446dll/table.c --- config/GMPE01_00/rels/m446dll/symbols.txt | 26 +- configure.py | 2 +- include/REL/m446Dll.h | 65 +++-- src/REL/m446Dll/card.c | 6 +- src/REL/m446Dll/main.c | 38 +-- src/REL/m446Dll/table.c | 327 +++++++++++++++++++++- 6 files changed, 396 insertions(+), 68 deletions(-) diff --git a/config/GMPE01_00/rels/m446dll/symbols.txt b/config/GMPE01_00/rels/m446dll/symbols.txt index f8c844dd..52b6fcad 100644 --- a/config/GMPE01_00/rels/m446dll/symbols.txt +++ b/config/GMPE01_00/rels/m446dll/symbols.txt @@ -161,17 +161,17 @@ lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data: lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float 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_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: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:0x4 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: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:0x4 scope:local data:float lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 data:double lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double @@ -261,8 +261,8 @@ lbl_1_data_15C = .data:0x0000015C; // type:object size:0x20 scope:local jumptable_1_data_17C = .data:0x0000017C; // type:object size:0x2C scope:local lbl_1_data_1A8 = .data:0x000001A8; // type:object size:0x1F scope:local data:string lbl_1_data_1C7 = .data:0x000001C7; // type:object size:0x1F scope:local data:string -lbl_1_data_1E8 = .data:0x000001E8; // type:object size:0x1E data:string -lbl_1_data_206 = .data:0x00000206; // type:object size:0x22 +lbl_1_data_1E8 = .data:0x000001E8; // type:object size:0x1E scope:local data:string +lbl_1_data_206 = .data:0x00000206; // type:object size:0x22 scope:local data:string lbl_1_data_228 = .data:0x00000228; // type:object size:0x24 lbl_1_data_24C = .data:0x0000024C; // type:object size:0x90 lbl_1_data_2DC = .data:0x000002DC; // type:object size:0x14 diff --git a/configure.py b/configure.py index 22e3af3a..2d0813b4 100644 --- a/configure.py +++ b/configure.py @@ -1191,7 +1191,7 @@ config.libs = [ Object(NonMatching, "REL/m446dll/main.c"), Object(Matching, "REL/m446dll/card.c"), Object(Matching, "REL/m446dll/deck.c"), - Object(NonMatching, "REL/m446dll/table.c"), + Object(Matching, "REL/m446dll/table.c"), Object(NonMatching, "REL/m446dll/player.c"), Object(NonMatching, "REL/m446dll/camera.c"), Object(NonMatching, "REL/m446dll/cursor.c"), diff --git a/include/REL/m446Dll.h b/include/REL/m446Dll.h index 01f291d3..251de402 100644 --- a/include/REL/m446Dll.h +++ b/include/REL/m446Dll.h @@ -15,15 +15,6 @@ typedef struct _unkSubStruct { char unk6C[0x4]; } unkSubStruct; -typedef struct _unkSubStruct2 { - s32 unk0; - s32 unk4; - char unk8[0x68]; - s32 unk70; - s32 unk74; - s32 unk78; -} unkSubStruct2; - typedef struct _unkStruct { s32 unk0; s16 unk4; @@ -34,12 +25,12 @@ typedef struct _unkStruct { s32 unk14; s32 unk18; s32 unk1C; - unkSubStruct *unk20; + struct _unkStruct6* unk20; s32 unk24; - s32 unk28; - unkSubStruct *unk2C[2]; - unkSubStruct2 *unk34; - s32 unk38[23]; + struct _unkStruct5* unk28; + unkSubStruct* unk2C[2]; + struct _unkStruct4* unk34; + struct _unkStruct4* unk38[23]; s32 unk94; Process *unk98; } unkStruct; @@ -51,7 +42,7 @@ typedef struct _unkStruct2 { } unkStruct2; typedef struct _unkStruct3 { - struct _unkStruct4 *unk0; + void *unk0; struct _unkStruct3 *unk4; struct _unkStruct3 *unk8; } unkStruct3; @@ -93,6 +84,29 @@ typedef struct _unkStruct5 { Vec unk4; } unkStruct5; +typedef struct _unkStruct6 { + struct _unkStruct7 *unk0; + s16 unk4; + s16 unk6; + unkStruct4 *unk8[21]; + s32 unk5C; + s32 unk60; + s32 unk64; + s32 unk68; + s32 unk6C; +} unkStruct6; + +typedef struct _unkStruct7 { + struct { + s8 field00_bit0 : 1; + s8 field00_bit1 : 1; + s8 field00_bit2 : 1; + s8 field00_bit3 : 1; + }; + char unk1[0x1F]; + Vec unk20; +} unkStruct7; + typedef void (*m446Func1)(unkStruct *); typedef void (*m446Func4)(unkStruct4 *); @@ -151,7 +165,7 @@ extern s32 fn_1_1D6C(unkStruct2*, unkStruct4**); extern s32 fn_1_1DA8(unkStruct2*, unkStruct4**); extern BOOL fn_1_1DDC(unkStruct2*); extern s32 fn_1_1DEC(unkStruct2*); -extern unkStruct3* fn_1_1DF4(unkStruct4*); +extern unkStruct3* fn_1_1DF4(void*); extern void fn_1_1E5C(unkStruct3*); extern void fn_1_1E84(unkStruct3**); extern void fn_1_1EC8(unkStruct3*, unkStruct3*); @@ -170,7 +184,7 @@ extern void fn_1_2794(unkStruct4*); extern void fn_1_27FC(unkStruct4*, Vec*, s32); extern void fn_1_2890(unkStruct4*, Vec*, s32, s32); extern void fn_1_2928(unkStruct4*, Vec*, s32); -extern void fn_1_29B4(unkStruct4*, s32, f32); +extern void fn_1_29B4(unkStruct4*, f32, s32); extern void fn_1_2A1C(unkStruct4*); extern void fn_1_2A58(unkStruct4*); extern void fn_1_2A94(unkStruct4*); @@ -188,4 +202,19 @@ extern s32 m446DeckPushCard(unkStruct5*, unkStruct4*, s32); extern s32 m446DeckPopCard(unkStruct2**, unkStruct4**); extern void fn_1_38B0(unkStruct2**); extern void fn_1_38E0(u32); -extern s32 fn_1_38F0(void); \ No newline at end of file +extern s32 fn_1_38F0(void); +// table.c +extern s32 fn_1_3924(void); +extern void fn_1_393C(void); +extern void fn_1_3994(void); +extern unkStruct6* fn_1_39D0(void); +extern void fn_1_3B4C(unkStruct6*); +extern s32 fn_1_3BF0(unkStruct6*, unkStruct4*, s32); +extern s32 fn_1_3EB4(unkStruct6*, unkStruct4*, s32); +extern s32 fn_1_3FD0(unkStruct6*, s32, unkStruct4**); +extern void fn_1_4000(unkStruct6*, s32); +extern s32 fn_1_4088(unkStruct6*, u8, u8, s32, unkStruct4**, s32); +extern void fn_1_46AC(unkStruct6*); +extern void fn_1_46D0(unkStruct6*); +extern s32 fn_1_4720(unkStruct6*, s32); +extern void fn_1_4798(unkStruct6*); \ No newline at end of file diff --git a/src/REL/m446Dll/card.c b/src/REL/m446Dll/card.c index 8bad6063..eac82b2b 100644 --- a/src/REL/m446Dll/card.c +++ b/src/REL/m446Dll/card.c @@ -72,7 +72,7 @@ s32 fn_1_1DEC(unkStruct2* arg0) { #pragma dont_inline on -unkStruct3* fn_1_1DF4(unkStruct4* arg0) { +unkStruct3* fn_1_1DF4(void* arg0) { unkStruct3* temp_r3; temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, 0xC, 0x10000000); @@ -174,7 +174,7 @@ s32 fn_1_2064(void) { } void fn_1_207C(void) { - unkStruct4* var_r30; + void* var_r30; unkStruct3* var_r31; var_r31 = lbl_1_bss_18; @@ -360,7 +360,7 @@ void fn_1_2928(unkStruct4* arg0, Vec* arg1, s32 arg2) { arg0->unk74 = 1; } -void fn_1_29B4(unkStruct4* arg0, s32 arg1, f32 arg8) { +void fn_1_29B4(unkStruct4* arg0, f32 arg8, s32 arg1) { arg0->unk60 = arg8; arg0->unk5C = arg0->unk58; arg0->unk90 = 0.0f; diff --git a/src/REL/m446Dll/main.c b/src/REL/m446Dll/main.c index 837c0d0f..3a5072e7 100644 --- a/src/REL/m446Dll/main.c +++ b/src/REL/m446Dll/main.c @@ -10,33 +10,15 @@ #include "game/frand.h" #include "game/minigame_seq.h" -// deck.c -extern void fn_1_3180(s32); -extern void fn_1_31D8(s32, s32*, s32*, s32); -extern s32 fn_1_38E0(void); -extern s32 fn_1_3064(void); -extern void fn_1_34A0(s32, s32*, s32, s32); -extern void m446DeckPushCard(s32, unkSubStruct2*, s32); -// table.c -extern s32 fn_1_3924(void); -extern void fn_1_393C(void); -extern void fn_1_3994(void); -extern unkSubStruct *fn_1_39D0(void); -extern void fn_1_3B4C(unkSubStruct*); -extern s32 fn_1_3BF0(unkSubStruct*, unkSubStruct2*, s32); -extern s32 fn_1_3EB4(unkSubStruct*, unkSubStruct2*, s32); -extern void fn_1_4000(unkSubStruct*, s32); -extern s32 fn_1_4088(unkSubStruct*, u8, u8, s32, unkSubStruct2**, s32); -extern void fn_1_46D0(unkSubStruct*); // player.c extern s32 fn_1_480C(void); extern void fn_1_4824(void); extern void fn_1_487C(void); -extern unkSubStruct *fn_1_4B00(s32, unkSubStruct*); +extern unkSubStruct *fn_1_4B00(s32, unkStruct6*); extern void fn_1_509C(unkSubStruct*); -extern s32 fn_1_5504(unkSubStruct*, unkSubStruct2*, s32); -extern unkSubStruct *fn_1_5648(unkSubStruct*, s32, unkSubStruct2**); -extern s32 fn_1_5678(unkSubStruct*, unkSubStruct2**, s32); +extern s32 fn_1_5504(unkSubStruct*, unkStruct4*, s32); +extern unkSubStruct *fn_1_5648(unkSubStruct*, s32, unkStruct4**); +extern s32 fn_1_5678(unkSubStruct*, unkStruct4**, s32); extern void fn_1_5B34(unkSubStruct*); extern void fn_1_5C10(unkSubStruct*); extern void fn_1_5CEC(unkSubStruct*); @@ -101,7 +83,7 @@ void fn_1_13C(omObjData* arg0) { HuWinInit(1); Hu3DLighInit(); frand(); - fn_1_38E0(); + fn_1_38E0(0); fn_1_6778(); fn_1_7BF0(); fn_1_2064(); @@ -195,7 +177,7 @@ void fn_1_3FC(unkStruct* arg0) { fn_1_509C(arg0->unk2C[var_r30]); } fn_1_3B4C(arg0->unk20); - fn_1_3180(arg0->unk28); + fn_1_3180(&arg0->unk28->unk0); fn_1_83F0(arg0->unk24); HuMemDirectFree(arg0); } @@ -260,7 +242,7 @@ void fn_1_53C(unkStruct* arg0) { arg0->unk10 = 6; break; case 6: - fn_1_31D8(arg0->unk28, &arg0->unk38[0], &arg0->unk94, 1); + fn_1_31D8(&arg0->unk28->unk0, &arg0->unk38[0], &arg0->unk94, 1); arg0->unk10 = 7; arg0->unk14 = 0; break; @@ -275,7 +257,7 @@ void fn_1_53C(unkStruct* arg0) { for (var_r29 = 0; var_r29 < 2; var_r29++) { for (var_r30 = 0; var_r30 < 3; var_r30++) { - m446DeckPopCard(arg0->unk28, &arg0->unk34); + m446DeckPopCard(&arg0->unk28->unk0, &arg0->unk34); fn_1_51B8(arg0->unk2C[var_r29], arg0->unk34, 1); fn_1_2EC0(arg0->unk34, 0); } @@ -304,7 +286,7 @@ void fn_1_53C(unkStruct* arg0) { if (arg0->unk34->unk4 != 0) break; fn_1_46AC(arg0->unk20); - while (m446DeckPopCard(arg0->unk28, &arg0->unk34) != 0) { + while (m446DeckPopCard(&arg0->unk28->unk0, &arg0->unk34) != 0) { fn_1_3BF0(arg0->unk20, arg0->unk34, 1); } fn_1_46D0(arg0->unk20); @@ -419,7 +401,7 @@ void fn_1_C0C(unkStruct* arg0) { void fn_1_CA0(unkStruct* arg0) { s32 var_r29; - unkSubStruct *var_r30; + unkStruct6 *var_r30; var_r30 = arg0->unk2C[arg0->unk1C]; switch (arg0->unk10) { diff --git a/src/REL/m446Dll/table.c b/src/REL/m446Dll/table.c index 26217a12..0c5f808f 100644 --- a/src/REL/m446Dll/table.c +++ b/src/REL/m446Dll/table.c @@ -1,11 +1,15 @@ #include "REL/m446Dll.h" +#include "game/hsfman.h" +#include "game/pad.h" +// bss unkStruct3* lbl_1_bss_28; -s32 fn_1_3924(void); -void fn_1_393C(void); -// ... -void fn_1_3B4C(unkStruct4*); +// cursor.c +extern unkStruct7 *fn_1_74F4(s32); +extern void fn_1_76E8(unkStruct7*); +extern void fn_1_77C8(void*, u8); +extern void fn_1_7884(unkStruct7*); s32 fn_1_3924(void) { lbl_1_bss_28 = NULL; @@ -14,7 +18,7 @@ s32 fn_1_3924(void) { void fn_1_393C(void) { unkStruct3* var_r31; - unkStruct4* var_r30; + unkStruct6* var_r30; var_r31 = lbl_1_bss_28; if (var_r31) { @@ -37,4 +41,317 @@ void fn_1_3994(void) { var_r31 = var_r31->unk8; } while (var_r31); } +} + +unkStruct6* fn_1_39D0(void) { + s32 var_r30; + unkStruct3* var_r29; + unkStruct6* var_r31; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x70, 0x10000000); + if (!var_r31) { + return NULL; + } + var_r31->unk4 = Hu3DModelCreateFile(0x4D0005); + 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); + fn_1_7884(var_r31->unk0); + var_r31->unk60 = 10; + var_r31->unk5C = 0; + var_r31->unk6C = 0; + + for (var_r30 = 0; var_r30 < 21; var_r30++) { + var_r31->unk8[var_r30] = NULL; + } + fn_1_46AC(var_r31); + var_r29 = fn_1_1DF4(var_r31); + if (!var_r29) { + OSReport("[!] m446TableCreate ERROR...\n"); + HuMemDirectFree(var_r31); + return NULL; + } + if (lbl_1_bss_28) { + fn_1_1EC8(lbl_1_bss_28, var_r29); + } else { + lbl_1_bss_28 = var_r29; + } + return var_r31; +} + +void fn_1_3B4C(unkStruct6* arg0) { + unkStruct3* var_r31; + + var_r31 = lbl_1_bss_28; +loop_1: + if (arg0 == var_r31->unk0) { + if (var_r31 == lbl_1_bss_28) { + lbl_1_bss_28 = var_r31->unk8; + } + fn_1_1F04(var_r31); + fn_1_1E5C(var_r31); + Hu3DModelKill(arg0->unk4); + fn_1_76E8(arg0->unk0); + HuMemDirectFree(arg0); + return; + } + var_r31 = var_r31->unk8; + if (!var_r31) { + return; + } + goto loop_1; +} + +s32 fn_1_3BF0(unkStruct6* arg0, unkStruct4* arg1, s32 arg2) { + Vec sp18; + Vec spC; + s32 temp_r29; + + if (arg0->unk5C >= 21) { + return 0; + } + do { + temp_r29 = fn_1_38F0() % 21; + } while (arg0->unk8[temp_r29] != 0); + arg0->unk8[temp_r29] = arg1; + arg0->unk5C++; + sp18.x = -60.0f + (20.0f * (temp_r29 % 7)); + sp18.y = 85.0f; + sp18.z = -20.0f + (20.0f * (temp_r29 / 7)); + spC = arg1->unk34; + switch (arg2) { + case 3: + case 4: + spC.z = 720.0f; + arg1->unk34 = spC; + spC.z = 0.0f; + fn_1_27FC(arg1, &sp18, 0x3C); + fn_1_2928(arg1, &spC, 0x3C); + fn_1_29B4(arg1, 1.0f, 0x3C); + break; + case 0: + spC.y = 0.0f; + arg1->unk10 = sp18; + arg1->unk34 = spC; + arg1->unk58 = 1.0f; + break; + case 2: + break; + case 1: + spC.y = 0.0f; + fn_1_27FC(arg1, &sp18, 0x3C); + fn_1_2928(arg1, &spC, 0x3C); + break; + } + return 1; +} + +s32 fn_1_3EB4(unkStruct6* arg0, unkStruct4* arg1, s32 arg2) { + Vec spC; + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0x15; var_r31++) { + if (arg0->unk8[var_r31] == arg1) { + arg0->unk8[var_r31] = NULL; + arg0->unk5C--; + break; + } + } + if (var_r31 == 0x15) { + OSReport("m446TableRemoveCard ERROR...\n"); + return 0; + } + switch (arg2) { + case 3: + spC = arg1->unk10; + spC.y = 90.0f; + fn_1_272C(arg1); + fn_1_27FC(arg1, &spC, 0x1E); + fn_1_29B4(arg1, 1.5f, 0x1E); + HuAudFXPlay(0x76C); + } + return 1; +} + +s32 fn_1_3FD0(unkStruct6* arg0, s32 arg1, unkStruct4** arg2) { + if ((arg1 < 0) || (arg1 >= 0x15)) { + return 0; + } + *arg2 = arg0->unk8[arg1]; + return 1; +} + +void fn_1_4000(unkStruct6* arg0, s32 arg1) { + s32 var_r31; + unkStruct4* var_r30; + + for (var_r31 = 0; var_r31 < 21; var_r31++) { + if (arg1 != 0) { + var_r30 = arg0->unk8[20 - var_r31]; + } else { + var_r30 = arg0->unk8[var_r31]; + } + if ((var_r30) && (var_r30->unk64 == 0)) { + if (arg1 != 0) { + arg0->unk60 = (0x14 - var_r31); + return; + } else { + arg0->unk60 = var_r31; + return; + } + } + } +} + +s32 fn_1_4088(unkStruct6* arg0, u8 arg1, u8 arg2, s32 arg3, unkStruct4** arg4, s32 arg5) { + Vec sp10; + s32 var_r28; + s32 var_r27; + unkStruct4* temp_r26; + s32 var_r25; + s32 var_r24; + s32 var_r23; + s32 temp_r22; + s32 temp_r21; + + var_r25 = 0; + var_r24 = 0; + var_r28 = 0; + var_r27 = 0; + var_r23 = 0; + *arg4 = NULL; + if (arg2 >= 4) { + if (arg0->unk6C == 0) { + arg0->unk64 = (s32) (fn_1_38F0() % 21); + do { + if (!(temp_r26 = arg0->unk8[arg0->unk64]) || temp_r26->unk64 != 0) { + arg0->unk64 = ++arg0->unk64 % 21; + } else break; + (void)temp_r26; + } while (TRUE); + arg0->unk6C = 1; + arg0->unk68 = 0x1E; + } + if ((arg0->unk68 > 0) && (arg5 == 0)) { + arg0->unk68 = (arg0->unk68 - 1); + } else { + var_r28 = (arg0->unk64 / 7) < (arg0->unk60 / 7); + var_r27 = (arg0->unk64 / 7) > (arg0->unk60 / 7); + if ((var_r28 == 0) && (var_r27 == 0)) { + var_r25 = (arg0->unk64) < (arg0->unk60); + var_r24 = (arg0->unk64) > (arg0->unk60); + } + var_r23 = arg0->unk64 == arg0->unk60; + arg0->unk68 = 0x12; + } + } else if (arg5 == 0) { + var_r25 = (HuPadDStkRep[arg2] & 1) != 0; + var_r24 = (HuPadDStkRep[arg2] & 2) != 0; + var_r28 = (HuPadDStkRep[arg2] & 8) != 0; + var_r27 = (HuPadDStkRep[arg2] & 4) != 0; + var_r23 = (HuPadBtnDown[arg2] & 0x100) != 0; + } + if (var_r25 != 0) { + if ((arg0->unk60 % 7) == 0) { + arg0->unk60 = (arg0->unk60 + 6); + } else { + arg0->unk60 = (arg0->unk60 - 1); + } + HuAudFXPlay(0); + } + if (var_r24 != 0) { + if ((arg0->unk60 % 7) == 6) { + arg0->unk60 = (arg0->unk60 - 6); + } else { + arg0->unk60 = (arg0->unk60 + 1); + } + HuAudFXPlay(0); + } + if (var_r28 != 0) { + if ((arg0->unk60 / 7) == 0) { + arg0->unk60 = (arg0->unk60 + 0xE); + } else { + arg0->unk60 = (arg0->unk60 - 7); + } + HuAudFXPlay(0); + } + if (var_r27 != 0) { + if ((arg0->unk60 / 7) == 2) { + arg0->unk60 = (arg0->unk60 - 0xE); + } else { + arg0->unk60 = (arg0->unk60 + 7); + } + HuAudFXPlay(0); + } + temp_r22 = arg0->unk60 % 7; + temp_r21 = arg0->unk60 / 7; + sp10.x = -60.0f + (20.0f * temp_r22); + sp10.y = 86.0f; + sp10.z = -20.0f + (20.0f * temp_r21); + arg0->unk0->unk20 = sp10; + if (arg0->unk0->field00_bit0 == 0) { + fn_1_77C8(arg0->unk0, arg1); + arg0->unk0->field00_bit2 = arg3; + } + if ((var_r23 != 0) || (arg5 == 2)) { + *arg4 = arg0->unk8[((temp_r22 + (temp_r21 * 7)))]; + if (*arg4) { + if ((*arg4)->unk64 == 0) { + HuAudFXPlay(0x76A); + fn_1_7884(arg0->unk0); + arg0->unk6C = 0; + return 1; + } + HuAudFXPlay(4); + } else { + HuAudFXPlay(4); + } + } + return 0; +} + +void fn_1_46AC(unkStruct6* arg0) { + arg0->unk8[0] = (unkStruct4*)-1; + arg0->unk8[6] = (unkStruct4*)-1; + arg0->unk8[14] = (unkStruct4*)-1; + arg0->unk8[20] = (unkStruct4*)-1; +} + +void fn_1_46D0(unkStruct6* arg0) { + s32 var_r31; + + for (var_r31 = 0; var_r31 < 21; var_r31++) { + if (arg0->unk8[var_r31] == (unkStruct4*)-1) { + arg0->unk8[var_r31] = 0; + } + } +} + +s32 fn_1_4720(unkStruct6* arg0, s32 arg1) { + s32 var_r29; + s32 var_r30; + unkStruct4* temp_r31; + + + for (var_r29 = 0, var_r30 = 0; var_r30 < 21; var_r30++) { + temp_r31 = arg0->unk8[var_r30]; + if ((temp_r31) && (temp_r31->unk64 == 0) && ((temp_r31->unk0 == arg1) || (arg1 == 5))) { + var_r29++; + } + } + return var_r29; +} + +void fn_1_4798(unkStruct6* arg0) { + unkStruct4* temp_r31; + s32 var_r30; + + + for (var_r30 = 0; var_r30 < 0x15; var_r30++) { + temp_r31 = arg0->unk8[var_r30]; + if (temp_r31 && (temp_r31->unk64 != 0)) { + fn_1_2794(temp_r31); + } + } } \ No newline at end of file