Merge pull request #309 from abnormalhare/main

Match table.c
This commit is contained in:
Liam Coleman 2024-05-23 19:56:40 -05:00 committed by GitHub
commit 57c9706e1c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 454 additions and 71 deletions

View file

@ -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

View file

@ -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"),

View file

@ -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,11 +84,40 @@ 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 *);
// bss
////// BSS //////
// table.c
extern unkStruct3* lbl_1_bss_28;
// deck.c
extern u32 lbl_1_bss_20[2];
// card.c
extern unkStruct3* lbl_1_bss_18;
// main.c
extern s32 lbl_1_bss_14;
extern s32 lbl_1_bss_10;
extern Process* lbl_1_bss_C;
@ -105,7 +125,8 @@ extern omObjData *lbl_1_bss_8;
extern s32 lbl_1_bss_4;
extern unkStruct* lbl_1_bss_0;
// data
////// DATA //////
// main.c
extern Vec lbl_1_data_0;
extern Vec lbl_1_data_C;
extern f32 lbl_1_data_18;
@ -116,9 +137,11 @@ extern Vec lbl_1_data_38[2];
extern Vec lbl_1_data_50[2];
extern f32 lbl_1_data_68[2];
extern m446Func1 lbl_1_data_A0[5];
// card.c
extern m446Func4 lbl_1_data_150[3];
// prototypes
////// PROTOTYPES //////
// main.c
extern void ModuleProlog(void);
extern void fn_1_13C(omObjData*);
extern unkStruct* m446FlowCreate(void);
@ -134,6 +157,7 @@ extern void fn_1_183C(unkStruct*);
extern void fn_1_1874(unkStruct*);
extern void fn_1_18B0(unkStruct*);
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*);
@ -141,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*);
@ -160,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*);
@ -168,4 +192,29 @@ extern void fn_1_2AA8(unkStruct4*);
extern void fn_1_2D94(unkStruct4*);
extern void fn_1_2DA8(unkStruct4*);
extern void fn_1_2EC0(unkStruct4*, s32);
extern void fn_1_2F64(unkStruct4*);
extern void fn_1_2F64(unkStruct4*);
// deck.c
extern unkStruct5* fn_1_3064(void);
extern void fn_1_3180(unkStruct2**);
extern void fn_1_31D8(unkStruct2**, unkStruct4**, s32*, s32);
extern void fn_1_34A0(unkStruct5*, unkStruct4**, s32, s32);
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);
// 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*);

View file

@ -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;

View file

@ -10,11 +10,6 @@ static const s32 lbl_1_rodata_D0[5][2] = {
{1, 5}, {0, 5}, {2, 5}, {3, 5}, {4, 3}
};
unkStruct5* fn_1_3064(void);
// ...
s32 m446DeckPushCard(unkStruct5*, unkStruct4*, s32);
s32 fn_1_38F0(void);
unkStruct5* fn_1_3064(void) {
unkStruct4* var_r27;
s32 var_r28;

View file

@ -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) {

357
src/REL/m446Dll/table.c Normal file
View file

@ -0,0 +1,357 @@
#include "REL/m446Dll.h"
#include "game/hsfman.h"
#include "game/pad.h"
// bss
unkStruct3* lbl_1_bss_28;
// 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;
return 1;
}
void fn_1_393C(void) {
unkStruct3* var_r31;
unkStruct6* var_r30;
var_r31 = lbl_1_bss_28;
if (var_r31) {
do {
var_r30 = var_r31->unk0;
fn_1_3B4C(var_r30);
var_r31 = var_r31->unk8;
} while (var_r31);
}
}
void fn_1_3994(void) {
unkStruct4* sp8;
unkStruct3* var_r31;
var_r31 = lbl_1_bss_28;
if (var_r31) {
do {
sp8 = var_r31->unk0;
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);
}
}
}