diff --git a/config/GMPE01_00/rels/m446dll/symbols.txt b/config/GMPE01_00/rels/m446dll/symbols.txt index 52b6fcad..6997b02c 100644 --- a/config/GMPE01_00/rels/m446dll/symbols.txt +++ b/config/GMPE01_00/rels/m446dll/symbols.txt @@ -78,10 +78,10 @@ fn_1_4798 = .text:0x00004798; // type:function size:0x74 fn_1_480C = .text:0x0000480C; // type:function size:0x18 fn_1_4824 = .text:0x00004824; // type:function size:0x58 fn_1_487C = .text:0x0000487C; // type:function size:0x284 -fn_1_4B00 = .text:0x00004B00; // type:function size:0x59C +m446PlayerCreate = .text:0x00004B00; // type:function size:0x59C fn_1_509C = .text:0x0000509C; // type:function size:0x11C -fn_1_51B8 = .text:0x000051B8; // type:function size:0x34C -fn_1_5504 = .text:0x00005504; // type:function size:0x144 +m446PlayerAppendCard = .text:0x000051B8; // type:function size:0x34C +m446PlayerRemoveCard = .text:0x00005504; // type:function size:0x144 fn_1_5648 = .text:0x00005648; // type:function size:0x30 fn_1_5678 = .text:0x00005678; // type:function size:0x4BC fn_1_5B34 = .text:0x00005B34; // type:function size:0x14 @@ -172,37 +172,37 @@ lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data: 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 -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float -lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 data:float -lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 data:float -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x8 data:double -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x10 data:4byte -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 data:float -lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 data:float -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float -lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 data:float -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float -lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 data:float -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 data:float -lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 data:float -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float -lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data:double +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x10 scope:local data:4byte +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 data:float lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 data:float @@ -266,9 +266,9 @@ lbl_1_data_206 = .data:0x00000206; // type:object size:0x22 scope:local data:str 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 -lbl_1_data_2F0 = .data:0x000002F0; // type:object size:0x1F data:string -lbl_1_data_30F = .data:0x0000030F; // type:object size:0x1F data:string -lbl_1_data_32E = .data:0x0000032E; // type:object size:0x22 +lbl_1_data_2F0 = .data:0x000002F0; // type:object size:0x1F scope:local data:string +lbl_1_data_30F = .data:0x0000030F; // type:object size:0x1F scope:local data:string +lbl_1_data_32E = .data:0x0000032E; // type:object size:0x22 scope:local data:string jumptable_1_data_350 = .data:0x00000350; // type:object size:0x1C scope:local lbl_1_data_370 = .data:0x00000370; // type:object size:0xC data:float lbl_1_data_37C = .data:0x0000037C; // type:object size:0x1E data:string @@ -288,9 +288,9 @@ lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:4byte lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 data:4byte lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x4 data:4byte lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte -lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x8 data:4byte +lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 data:4byte lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x4 data:4byte -lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x8 data:4byte +lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x4 data:4byte lbl_1_bss_38 = .bss:0x00000038; // type:object size:0x4 data:4byte lbl_1_bss_3C = .bss:0x0000003C; // type:object size:0x4 data:float lbl_1_bss_40 = .bss:0x00000040; // type:object size:0x4 data:float diff --git a/configure.py b/configure.py index 2d0813b4..578cdb4d 100644 --- a/configure.py +++ b/configure.py @@ -1192,7 +1192,7 @@ def Rel(lib_name, objects): Object(Matching, "REL/m446dll/card.c"), Object(Matching, "REL/m446dll/deck.c"), Object(Matching, "REL/m446dll/table.c"), - Object(NonMatching, "REL/m446dll/player.c"), + Object(Matching, "REL/m446dll/player.c"), Object(NonMatching, "REL/m446dll/camera.c"), Object(NonMatching, "REL/m446dll/cursor.c"), Object(NonMatching, "REL/m446dll/stage.c"), diff --git a/include/REL/m446Dll.h b/include/REL/m446Dll.h index 251de402..fd778597 100644 --- a/include/REL/m446Dll.h +++ b/include/REL/m446Dll.h @@ -3,18 +3,6 @@ #include "game/process.h" #include "game/object.h" -typedef struct _unkSubStruct { - s32 unk0; - char unk4[0x20]; - s32 unk24; - char unk28[0x3C]; - u8 unk64; - u8 unk65; - u8 unk66; - s32 unk68; - char unk6C[0x4]; -} unkSubStruct; - typedef struct _unkStruct { s32 unk0; s16 unk4; @@ -28,23 +16,23 @@ typedef struct _unkStruct { struct _unkStruct6* unk20; s32 unk24; struct _unkStruct5* unk28; - unkSubStruct* unk2C[2]; + struct _unkStruct8* unk2C[2]; struct _unkStruct4* unk34; struct _unkStruct4* unk38[23]; s32 unk94; - Process *unk98; + Process* unk98; } unkStruct; typedef struct _unkStruct2 { - struct _unkStruct4 **unk0; + struct _unkStruct4* *unk0; s32 unk4; s32 unk8; } unkStruct2; typedef struct _unkStruct3 { - void *unk0; - struct _unkStruct3 *unk4; - struct _unkStruct3 *unk8; + void* unk0; + struct _unkStruct3* unk4; + struct _unkStruct3* unk8; } unkStruct3; typedef struct _unkStruct4 { @@ -85,10 +73,10 @@ typedef struct _unkStruct5 { } unkStruct5; typedef struct _unkStruct6 { - struct _unkStruct7 *unk0; + struct _unkStruct7* unk0; s16 unk4; s16 unk6; - unkStruct4 *unk8[21]; + unkStruct4* unk8[21]; s32 unk5C; s32 unk60; s32 unk64; @@ -105,23 +93,72 @@ typedef struct _unkStruct7 { }; char unk1[0x1F]; Vec unk20; + char unk24[0x18]; + f32 unk44; } unkStruct7; -typedef void (*m446Func1)(unkStruct *); -typedef void (*m446Func4)(unkStruct4 *); +typedef struct _unkStruct8 { + s32 unk0; + unkStruct6* unk4; + unkStruct7* unk8; + s32 unkC; + s32 unk10; + s32 unk14; + s32 unk18; + s32 unk1C; + s32 unk20; + s32 unk24; + s32 unk28; + unkStruct4* unk2C[3]; + s32 unk38; + s16 unk3C[2]; + s16 unk40[4]; + Vec unk48; + Vec unk54; + f32 unk60; + u8 unk64; + u8 unk65; + u8 unk66; + u8 unk67; + s32 unk68; + s32 unk6C; + s32 unk70; + s32 unk74; + char unk78[0x4]; + s32 unk7C; + Vec unk80; + Vec unk8C; + s32 unk98; + Vec unk9C; + Vec unkA8; + s32 unkB4; + f32 unkB8; + f32 unkBC; + f32 unkC0; + f32 unkC4; + s32 unkC8; + char unkCC[0x4]; +} unkStruct8; + +typedef void (*m446Func)(s32); +typedef void (*m446Func1)(unkStruct*); +typedef void (*m446Func4)(unkStruct4*); +typedef void (*m446Func8)(unkStruct8*); ////// BSS ////// +// player.c +extern unkStruct3* lbl_1_bss_30; // table.c extern unkStruct3* lbl_1_bss_28; // deck.c -extern u32 lbl_1_bss_20[2]; +extern u32 lbl_1_bss_20; // 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; -extern omObjData *lbl_1_bss_8; +extern omObjData* lbl_1_bss_8; extern s32 lbl_1_bss_4; extern unkStruct* lbl_1_bss_0; @@ -139,6 +176,10 @@ extern f32 lbl_1_data_68[2]; extern m446Func1 lbl_1_data_A0[5]; // card.c extern m446Func4 lbl_1_data_150[3]; +// player.c +extern s32 lbl_1_data_228[9]; +extern s32 lbl_1_data_24C[9][4]; +extern m446Func8 lbl_1_data_2DC[5]; ////// PROTOTYPES ////// // main.c @@ -217,4 +258,28 @@ 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 +extern void fn_1_4798(unkStruct6*); +// player.c +extern s32 fn_1_480C(void); +extern void fn_1_4824(void); +extern void fn_1_487C(void); +extern unkStruct8* m446PlayerCreate(s32, unkStruct6*); +extern void fn_1_509C(unkStruct8*); +extern s32 m446PlayerAppendCard(unkStruct8*, unkStruct4*, s32); +extern s32 m446PlayerRemoveCard(unkStruct8*, unkStruct4*, s32); +extern s32 fn_1_5648(unkStruct8*, s32, unkStruct4**); +extern s32 fn_1_5678(unkStruct8*, unkStruct4**, s32); +extern void fn_1_5B34(unkStruct8*); +extern void fn_1_5B48(unkStruct8*); +extern void fn_1_5C10(unkStruct8*); +extern void fn_1_5C24(unkStruct8*); +extern void fn_1_5CEC(unkStruct8*); +extern void fn_1_5D00(unkStruct8*); +extern void fn_1_5E54(unkStruct8*, s32); +extern void fn_1_6074(unkStruct8*); +extern void fn_1_6264(unkStruct8*, Vec*, s32); +extern void fn_1_62F0(unkStruct8*, Vec*, s32); +extern void fn_1_637C(unkStruct8*, s32); +extern void fn_1_64BC(unkStruct8*, s32, s32); +extern void fn_1_6578(unkStruct8*); +extern void fn_1_6620(unkStruct8*); \ No newline at end of file diff --git a/src/REL/m446Dll/deck.c b/src/REL/m446Dll/deck.c index dd509a60..0e14dc2d 100644 --- a/src/REL/m446Dll/deck.c +++ b/src/REL/m446Dll/deck.c @@ -3,7 +3,7 @@ #include "math.h" // bss -u32 lbl_1_bss_20[2]; +u32 lbl_1_bss_20; // data static const s32 lbl_1_rodata_D0[5][2] = { @@ -178,9 +178,9 @@ void fn_1_38B0(unkStruct2** arg0) { } void fn_1_38E0(u32 arg0) { - lbl_1_bss_20[0] = arg0; + lbl_1_bss_20 = arg0; } s32 fn_1_38F0(void) { - return ((lbl_1_bss_20[0] = (lbl_1_bss_20[0] * 0x41C64E6D) + 0x3039) >> 16) % 32768; + return ((lbl_1_bss_20 = (lbl_1_bss_20 * 0x41C64E6D) + 0x3039) >> 16) % 32768; } \ No newline at end of file diff --git a/src/REL/m446Dll/main.c b/src/REL/m446Dll/main.c index 3a5072e7..f06d3efd 100644 --- a/src/REL/m446Dll/main.c +++ b/src/REL/m446Dll/main.c @@ -10,19 +10,6 @@ #include "game/frand.h" #include "game/minigame_seq.h" -// 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, unkStruct6*); -extern void fn_1_509C(unkSubStruct*); -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*); -extern void fn_1_637C(unkSubStruct*, s32); // camera.c extern void fn_1_6778(void); extern void fn_1_68D8(void); @@ -150,7 +137,7 @@ unkStruct* m446FlowCreate(void) { lbl_1_bss_10 = 0; for (var_r30 = 0; var_r30 < 2; var_r30++) { - temp_r3->unk2C[var_r30] = fn_1_4B00(var_r30, temp_r3->unk20); + temp_r3->unk2C[var_r30] = m446PlayerCreate(var_r30, temp_r3->unk20); if (temp_r3->unk2C[var_r30]->unk68 != 0) { lbl_1_bss_10 += 1; } @@ -258,7 +245,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->unk0, &arg0->unk34); - fn_1_51B8(arg0->unk2C[var_r29], arg0->unk34, 1); + m446PlayerAppendCard(arg0->unk2C[var_r29], arg0->unk34, 1); fn_1_2EC0(arg0->unk34, 0); } } @@ -436,7 +423,7 @@ void fn_1_CA0(unkStruct* arg0) { case 4: MGSeqParamSet(arg0->unk6, 2, -1); arg0->unk6 = -1; - fn_1_5504(var_r30, arg0->unk34, 3); + m446PlayerRemoveCard(var_r30, arg0->unk34, 3); arg0->unk10 = 5; break; case 5: @@ -489,7 +476,7 @@ void fn_1_CA0(unkStruct* arg0) { if (arg0->unk34->unk0 == 4) { arg0->unk10 = 13; } else { - fn_1_51B8(var_r30, arg0->unk34, 4); + m446PlayerAppendCard(var_r30, arg0->unk34, 4); arg0->unk10 = 11; } } @@ -530,7 +517,7 @@ void fn_1_CA0(unkStruct* arg0) { for (var_r29 = 0; var_r29 < 3; var_r29++) { fn_1_5648(var_r30, var_r29, &arg0->unk34); if (arg0->unk34) { - fn_1_5504(var_r30, arg0->unk34, 4); + m446PlayerRemoveCard(var_r30, arg0->unk34, 4); fn_1_3BF0(arg0->unk20, arg0->unk34, 3); } } @@ -583,7 +570,7 @@ void fn_1_CA0(unkStruct* arg0) { if (arg0->unk14++ >= 120) { for (var_r29 = 0; var_r29 < 3; var_r29++) { m446DeckPopCard(arg0->unk28, &arg0->unk34); - fn_1_51B8(var_r30, arg0->unk34, 1); + m446PlayerAppendCard(var_r30, arg0->unk34, 1); fn_1_2EC0(arg0->unk34, 0); } HuAudFXPlay(0x767); diff --git a/src/REL/m446Dll/player.c b/src/REL/m446Dll/player.c new file mode 100644 index 00000000..5ce083bd --- /dev/null +++ b/src/REL/m446Dll/player.c @@ -0,0 +1,822 @@ +#include "REL/m446dll.h" + +#include "math.h" +#include "game/gamework_data.h" +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/chrman.h" +#include "game/pad.h" +#include "game/objsub.h" + +// cursor.c +extern unkStruct7 *fn_1_74F4(s32); +extern void fn_1_76E8(unkStruct7*); +extern void fn_1_77C8(unkStruct7*, u8); + +// bss +unkStruct3 *lbl_1_bss_30; + +// data +s32 lbl_1_data_228[9] = { + 0x4D000A, 0x4D000B, 0x4D000C, + 0x4D000D, 0x4D000E, 0x4D000F, + 0x4D0010, 0x4D0011, 0x4D0021 +}; +s32 lbl_1_data_24C[9][4] = { + { 0x5F0000, 0x5F0036, 0x5F0017, 0x5F0072 }, + { 0x1A0000, 0x1A0036, 0x1A0017, 0x1A0072 }, + { 0x6D0000, 0x6D0036, 0x6D0017, 0x6D0072 }, + { 0x8A0000, 0x8A0036, 0x8A0017, 0x8A0072 }, + { 0x850000, 0x850036, 0x850017, 0x850072 }, + { 0x110000, 0x110036, 0x110017, 0x110072 }, + { 0x0D0000, 0x0D0036, 0x0D0017, 0x0D0072 }, + { 0x810000, 0x810036, 0x810017, 0x810072 }, + { 0x4D0022, 0x4D0023, 0x4D0025, 0x4D0024 } +}; +m446Func8 lbl_1_data_2DC[5] = {NULL, fn_1_5B48, fn_1_5C24, fn_1_5D00, fn_1_6074}; + +s32 fn_1_480C(void) { + lbl_1_bss_30 = 0; + return 1; +} + +void fn_1_4824(void) { + unkStruct3* var_r31; + void* var_r30; + + var_r31 = lbl_1_bss_30; + if (var_r31) { + do { + var_r30 = var_r31->unk0; + fn_1_509C(var_r30); + var_r31 = var_r31->unk8; + } while (var_r31); + } +} + +void fn_1_487C(void) { + f32 temp_f31; + unkStruct8* temp_r31; + unkStruct3* var_r30; + + var_r30 = lbl_1_bss_30; + if (var_r30) { + do { + temp_r31 = var_r30->unk0; + if (lbl_1_data_2DC[temp_r31->unk18]) { + lbl_1_data_2DC[temp_r31->unk18](temp_r31); + } + if (temp_r31->unkB4 != 0) { + temp_f31 = sin((M_PI * (90.0f * temp_r31->unkC0)) / 180.0); + temp_f31 *= temp_f31; + temp_r31->unk48.x = (temp_r31->unk9C.x + (temp_f31 * (temp_r31->unkA8.x - temp_r31->unk9C.x))); + temp_r31->unk48.y = (temp_r31->unk9C.y + (temp_f31 * (temp_r31->unkA8.y - temp_r31->unk9C.y))); + temp_r31->unk48.z = (temp_r31->unk9C.z + (temp_f31 * (temp_r31->unkA8.z - temp_r31->unk9C.z))); + temp_r31->unkC0 += temp_r31->unkC4; + if (temp_r31->unkC0 >= 1.0f) { + temp_r31->unk48.x = temp_r31->unkA8.x; + temp_r31->unk48.y = temp_r31->unkA8.y; + temp_r31->unk48.z = temp_r31->unkA8.z; + temp_r31->unkB4 = 0; + } + } + if (temp_r31->unk98 != 0) { + temp_f31 = sin((M_PI * (90.0f * temp_r31->unkB8)) / 180.0); + temp_f31 *= temp_f31; + temp_r31->unk54.x = (temp_r31->unk80.x + (temp_f31 * (temp_r31->unk8C.x - temp_r31->unk80.x))); + temp_r31->unk54.y = (temp_r31->unk80.y + (temp_f31 * (temp_r31->unk8C.y - temp_r31->unk80.y))); + temp_r31->unk54.z = (temp_r31->unk80.z + (temp_f31 * (temp_r31->unk8C.z - temp_r31->unk80.z))); + temp_r31->unkB8 = (temp_r31->unkB8 + temp_r31->unkBC); + if (temp_r31->unkB8 >= 1.0f) { + temp_r31->unk54.x = temp_r31->unk8C.x; + temp_r31->unk54.y = temp_r31->unk8C.y; + temp_r31->unk54.z = temp_r31->unk8C.z; + temp_r31->unk98 = 0; + } + } + fn_1_6578(temp_r31); + var_r30 = var_r30->unk8; + } while (var_r30); + } +} + +unkStruct8* m446PlayerCreate(s32 arg0, unkStruct6* arg1) { + f32 var_f31; + s32 var_r27; + s32 var_r26; + s16 var_r25; + s16 var_r24; + unkStruct3* var_r28; + s32 var_r30; + unkStruct8* var_r31; + + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 0xCC, 0x10000000); + if (!var_r31) { + return NULL; + } + var_r31->unk0 = arg0; + if (GWPlayerCfg[arg0].iscom != 0) { + var_r27 = 1; + } else { + var_r27 = 0; + } + var_r31->unk68 = var_r27; + var_r31->unk4 = arg1; + if (GWPlayerCfg[arg0].character == 0xB) { + var_r26 = 1; + } else { + var_r26 = 0; + } + var_r31->unk70 = var_r26; + if (var_r31->unk70 != 0) { + var_r25 = 8; + } else { + var_r25 = GWPlayerCfg[arg0].character; + } + var_r31->unk64 = var_r25; + if (var_r31->unk68 != 0) { + var_r24 = 4; + } else { + var_r24 = GWPlayerCfg[arg0].pad_idx; + } + var_r31->unk66 = var_r24; + var_r31->unk65 = GWPlayerCfg[arg0].diff; + var_r31->unk6C = 0; + var_r31->unkC = 0; + var_r31->unk10 = 2; + var_r31->unk48.x = 0.0f; + if (var_r31->unk70 != 0) { + var_f31 = 70.0f; + } else { + var_f31 = 0.0f; + } + var_r31->unk48.y = var_f31; + var_r31->unk48.z = 0.0f; + var_r31->unk54.x = 0.0f; + var_r31->unk54.y = 0.0f; + var_r31->unk54.z = 0.0f; + var_r31->unk60 = 1.0f; + var_r31->unk38 = 0; + var_r31->unk24 = 0; + var_r31->unk74 = 0; + var_r31->unk18 = 0; + var_r31->unk1C = 0; + var_r31->unk98 = 0; + var_r31->unkB4 = 0; + + for (var_r30 = 0; var_r30 < 3; var_r30++) { + var_r31->unk2C[var_r30] = NULL; + } + var_r31->unk8 = fn_1_74F4(1); + if (!var_r31->unk8) { + HuMemDirectFree(var_r31); + return NULL; + } + fn_1_7884(var_r31->unk8); + switch (var_r31->unk0) { + case 0: + var_r31->unk48.z = 150.0f; + var_r31->unk54.y = 180.0f; + break; + case 1: + var_r31->unk48.z = -150.0f; + var_r31->unk54.y = 0.0f; + break; + } + if (var_r31->unk70 != 0) { + var_r31->unk3C[0] = Hu3DModelCreateFile(0x4D0020); + var_r31->unk3C[1] = Hu3DModelCreateFile(0x4D0021); + } else { + var_r31->unk3C[0] = CharModelCreate(var_r31->unk64, 2); + var_r31->unk3C[1] = Hu3DModelCreateFile(lbl_1_data_228[var_r31->unk64]); + } + Hu3DModelAmbSet(var_r31->unk3C[0], 0.0f, 0.0f, 0.0f); + Hu3DModelAmbSet(var_r31->unk3C[1], 0.0f, 0.0f, 0.0f); + Hu3DModelShadowSet(var_r31->unk3C[0]); + Hu3DModelShadowSet(var_r31->unk3C[1]); + Hu3DModelPosSet(var_r31->unk3C[1], 0.0f, 100.0f, 0.0f); + Hu3DModelAttrReset(var_r31->unk3C[1], 0x40000001); + Hu3DModelAttrSet(var_r31->unk3C[1], 1); + Hu3DModelPosSet(var_r31->unk3C[1], 2000.0f, 2000.0f, 2000.0f); + fn_1_637C(var_r31, 0); + + for (var_r30 = 0; var_r30 < 4; var_r30++) { + if (var_r31->unk70 != 0) { + var_r31->unk40[var_r30] = Hu3DJointMotionFile(var_r31->unk3C[0], lbl_1_data_24C[var_r31->unk64][var_r30]); + } else { + var_r31->unk40[var_r30] = CharModelMotionCreate(var_r31->unk64, lbl_1_data_24C[var_r31->unk64][var_r30]); + } + } + if (var_r31->unk70 == 0) { + CharModelMotionDataClose(var_r31->unk64); + } + if (var_r31->unk70 != 0) { + Hu3DMotionSet(var_r31->unk3C[0], var_r31->unk40[0]); + } else { + CharModelMotionSet(var_r31->unk64, var_r31->unk40[0]); + } + Hu3DModelAttrSet(var_r31->unk3C[0], 0x40000001); + var_r28 = fn_1_1DF4(var_r31); + if (!var_r28) { + OSReport("[!] m446PlayerCreate ERROR...\n"); + HuMemDirectFree(var_r31); + return NULL; + } + if (lbl_1_bss_30) { + fn_1_1EC8(lbl_1_bss_30, var_r28); + } else { + lbl_1_bss_30 = var_r28; + } + return var_r31; +} + +void fn_1_509C(unkStruct8* arg0) { + s32 var_r29; + unkStruct3* var_r30; + + var_r30 = lbl_1_bss_30; + + do { + if (arg0 == var_r30->unk0) { + if (var_r30 == lbl_1_bss_30) { + lbl_1_bss_30 = var_r30->unk8; + } + fn_1_1F04(var_r30); + fn_1_1E5C(var_r30); + + for (var_r29 = 0; var_r29 < 4; var_r29++) { + if (arg0->unk70 != 0) { + Hu3DMotionKill(arg0->unk40[var_r29]); + } else { + CharModelMotionKill(arg0->unk64, arg0->unk40[var_r29]); + } + } + if (arg0->unk70 != 0) { + Hu3DModelKill(arg0->unk3C[0]); + Hu3DModelKill(arg0->unk3C[1]); + } else { + CharModelKill(arg0->unk64); + Hu3DModelKill(arg0->unk3C[1]); + } + fn_1_76E8(arg0->unk8); + HuMemDirectFree(arg0); + break; + } + var_r30 = var_r30->unk8; + } while (var_r30); +} + +s32 m446PlayerAppendCard(unkStruct8* arg0, unkStruct4* arg1, s32 arg2) { + Vec sp18; + Vec spC; + s32 temp_r0_2; + s32 temp_r28; + s32 temp_r27; + s32 var_r29; + + if (arg0->unk38 >= 3) { + OSReport("m446PlayerAppendCard ERROR...\n"); + return 0; + } + + for (var_r29 = 0; var_r29 < 3; var_r29++) { + if (!arg0->unk2C[var_r29]) { + break; + } + } + + if (var_r29 == 3) { + OSReport("m446PlayerAppendCard ERROR...\n"); + return 0; + } + arg0->unk2C[var_r29] = arg1; + arg0->unk38++; + sp18.y = 86.0f; + switch (arg0->unk0) { + case 0: + sp18.x = -30.0f + (30.0f * var_r29); + sp18.z = 45.0f; + break; + case 1: + sp18.x = 30.0f - (30.0f * var_r29); + sp18.z = -45.0f; + break; + } + + spC = arg1->unk34; + switch (arg0->unk0) { + case 0: + spC.y = 0.0f; + break; + case 1: + spC.y = 180.0f; + break; + } + switch (arg2) { + case 0: + arg1->unk10 = sp18; + arg1->unk34 = spC; + arg1->unk58 = 1.5f; + fn_1_272C(arg1); + break; + case 1: + fn_1_27FC(arg1, &sp18, 0x3C); + fn_1_2928(arg1, &spC, 0x1E); + fn_1_29B4(arg1, 1.5f, 0x1E); + break; + case 4: + fn_1_27FC(arg1, &sp18, 0x1E); + fn_1_2928(arg1, &spC, 0x1E); + fn_1_29B4(arg1, 1.5f, 0x1E); + break; + } + temp_r28 = arg0->unk24; + temp_r27 = arg0->unk20; + fn_1_6620(arg0); + if ((arg0->unk24 != 0) && (temp_r28 == 0)) { + HuAudFXPlay(0x76B); + fn_1_64BC(arg0, 1, 0x3C); + } else if ((arg0->unk20 != 0) && (temp_r27 == 0)) { + HuAudFXPlay(0x76B); + fn_1_64BC(arg0, 0, 0x3C); + } + return 1; +} + +s32 m446PlayerRemoveCard(unkStruct8* arg0, unkStruct4* arg1, s32 arg2) { + Vec spC; + s32 var_r30; + + if (arg0->unk38 <= 0) { + OSReport("m446PlayerRemoveCard ERROR...\n"); + return 0; + } + + for (var_r30 = 0; var_r30 < 3; var_r30++) { + if (arg0->unk2C[var_r30] == arg1) { + break; + } + } + if (var_r30 == 3) { + OSReport("m446PlayerRemoveCard ERROR...\n"); + return 0; + } + arg0->unk2C[var_r30] = NULL; + arg0->unk38--; + fn_1_2A58(arg1); + fn_1_6620(arg0); + switch (arg2) { + case 3: + spC = arg1->unk10; + spC.y = 86.0f; + spC.z = 0.0f; + fn_1_2890(arg1, &spC, 0x1E, 0x21); + fn_1_5E54(arg0, var_r30); + break; + } + return 1; +} + +s32 fn_1_5648(unkStruct8* arg0, s32 arg1, unkStruct4** arg2) { + if ((arg1 < 0) || (arg1 >= 3)) { + return 0; + } + *arg2 = arg0->unk2C[arg1]; + return 1; +} + +s32 fn_1_5678(unkStruct8* arg0, unkStruct4** arg1, s32 arg2) { + s32 sp14[3]; + Vec sp8; + s32 var_r28; + s32 var_r30; + s32 var_r25; + s32 var_r24; + s32 var_r27; + s32 var_r26; + unkStruct4* var_r29; + + var_r27 = 0; + var_r26 = 0; + var_r25 = 0; + *arg1 = NULL; + if (arg0->unk68 != 0) { + if (arg0->unk6C == 0) { + if (arg0->unk20 != 0) { + var_r24 = fn_1_4720(arg0->unk4, arg0->unk28); + if (var_r24 >= 1) { + for (var_r30 = 0; var_r30 < 3; var_r30++) { + var_r29 = arg0->unk2C[var_r30]; + if (var_r29->unk0 != arg0->unk28) { + arg0->unk74 = var_r30; + break; + } + } + } else { + for (var_r30 = 0; var_r30 < 3; var_r30++) { + var_r29 = arg0->unk2C[var_r30]; + if (var_r29->unk0 != arg0->unk28) { + break; + } + } + + var_r24 = fn_1_4720(arg0->unk4, var_r29->unk0); + if (var_r24 >= 2) { + for (var_r30 = 0; var_r30 < 3; var_r30++) { + var_r29 = arg0->unk2C[var_r30]; + if (var_r29->unk0 == arg0->unk28) { + arg0->unk74 = var_r30; + break; + } + } + } else { + arg0->unk74 = (fn_1_38F0() % 3); + } + } + } else { + for (var_r30 = 0; var_r30 < 3; var_r30++) { + var_r29 = arg0->unk2C[var_r30]; + sp14[var_r30] = fn_1_4720(arg0->unk4, var_r29->unk0); + } + for (var_r28 = 0; var_r28 < 5; var_r28++) { + for (var_r30 = 0; var_r30 < 3; var_r30++) { + if (var_r28 == sp14[var_r30]) { + break; + } + } + if (var_r30 < 3) { + break; + } + } + if (var_r28 == 5) { + arg0->unk74 = (fn_1_38F0() % 3); + } else { + arg0->unk74 = var_r30; + } + } + arg0->unk6C = 1; + arg0->unk7C = 0x1E; + } + if (arg0->unk7C > 0) { + arg0->unk7C--; + } else { + var_r27 = arg0->unk74 < arg0->unk10; + var_r26 = arg0->unk74 > arg0->unk10; + var_r25 = arg0->unk74 == arg0->unk10; + arg0->unk7C = 0x12; + } + } else { + switch (arg0->unk0) { + case 0: + var_r27 = (HuPadDStkRep[arg0->unk66] & 1) != 0; + var_r26 = (HuPadDStkRep[arg0->unk66] & 2) != 0; + break; + case 1: + var_r27 = (HuPadDStkRep[arg0->unk66] & 2) != 0; + var_r26 = (HuPadDStkRep[arg0->unk66] & 1) != 0; + break; + } + var_r25 = (HuPadBtnDown[arg0->unk66] & 0x100) != 0; + } + if (arg2 == 0) { + if (var_r27 != 0) { + if (--arg0->unk10 < 0) { + arg0->unk10 = 2; + } + HuAudFXPlay(0); + } + if (var_r26 != 0) { + if (++arg0->unk10 > 2) { + arg0->unk10 = 0; + } + HuAudFXPlay(0); + } + } + var_r29 = arg0->unk2C[arg0->unk10]; + if (!var_r29) { + return 0; + } + if (arg0->unk8->field00_bit0 == 0) { + fn_1_77C8(arg0->unk8, arg0->unk64); + } + sp8 = var_r29->unk10; + sp8.y++; + arg0->unk8->unk20 = sp8; + arg0->unk8->unk44 = 1.5f; + if ((var_r25 != 0) || (arg2 != 0)) { + HuAudFXPlay(0x769); + *arg1 = var_r29; + fn_1_7884(arg0->unk8); + arg0->unk6C = 0; + return 1; + } + return 0; +} + +void fn_1_5B34(unkStruct8* arg0) { + arg0->unk18 = 1; + arg0->unk1C = 0; +} + +static const s32 lbl_1_rodata_1C8[4] = {0, 1, 2, 3}; + +void fn_1_5B48(unkStruct8* arg0) { + switch (arg0->unk1C) { + case 0: + if (arg0->unk70 != 0) { + Hu3DMotionShiftSet(arg0->unk3C[0], arg0->unk40[2], 0.0f, 10.0f, 0); + } else { + CharModelMotionShiftSet(arg0->unk64, arg0->unk40[2], 0.0f, 10.0f, 0); + } + arg0->unk1C = 1; + break; + case 1: + if (Hu3DMotionEndCheck(arg0->unk3C[0]) != 0) { + arg0->unk18 = 0; + } + } +} + +void fn_1_5C10(unkStruct8* arg0) { + arg0->unk18 = 2; + arg0->unk1C = 0; +} + +void fn_1_5C24(unkStruct8* arg0) { + switch (arg0->unk1C) { + case 0: + if (arg0->unk70 != 0) { + Hu3DMotionShiftSet(arg0->unk3C[0], arg0->unk40[3], 0.0f, 10.0f, 0); + } else { + CharModelMotionShiftSet(arg0->unk64, arg0->unk40[3], 0.0f, 10.0f, 0); + } + arg0->unk1C = 1; + break; + case 1: + if (Hu3DMotionEndCheck(arg0->unk3C[0]) != 0) { + arg0->unk18 = 0; + } + } +} + +void fn_1_5CEC(unkStruct8* arg0) { + arg0->unk18 = 3; + arg0->unk1C = 0; +} + +void fn_1_5D00(unkStruct8* arg0) { + Vec sp8; + + sp8 = arg0->unk54; + switch (arg0->unk1C) { + case 0: + Hu3DModelAmbSet(arg0->unk3C[0], 0.8f, 0.8f, 0.8f); + if (arg0->unk70 != 0) { + Hu3DMotionShiftSet(arg0->unk3C[0], arg0->unk40[1], 0.0f, 10.0f, 0U); + } else { + CharModelMotionShiftSet(arg0->unk64, arg0->unk40[1], 0.0f, 10.0f, 0x40000001U); + Hu3DMotionStartEndSet(arg0->unk3C[0], 0.0f, 59.0f); + } + sp8.y = 0.0f; + fn_1_6264(arg0, &sp8, 0x3C); + arg0->unk1C = 1; + arg0->unk14 = 0; + return; + case 1: + if (arg0->unk98 == 0) { + arg0->unk18 = 0; + } + } +} + +void fn_1_5E54(unkStruct8* arg0, s32 arg1) { + Vec sp14; + Vec sp8; + f32 var_f31; + f32 var_f30; + f32 var_f29; + + if (arg0->unk70 != 0) { + var_f31 = 95.0f; + } else { + var_f31 = 80.0f; + } + sp14.y = var_f31; + + switch (arg0->unk0) { + case 0: + sp14.x = -30.0f + (30.0f * arg1); + sp14.z = 105.0f; + sp8.x = 0.0f; + sp8.y = 90.0f; + sp8.z = 0.0f; + break; + case 1: + sp14.x = 30.0f - (30.0f * arg1); + if (arg0->unk70 != 0) { + var_f30 = 30.0f; + } else { + var_f30 = 55.0f; + } + sp14.z = -50.0f - var_f30; + sp8.x = 0.0f; + if (arg0->unk70 != 0) { + var_f29 = 180.0f; + } else { + var_f29 = -90.0f; + } + sp8.y = var_f29; + sp8.z = 0.0f; + break; + } + arg0->unk48 = sp14; + arg0->unk54 = sp8; + arg0->unk18 = 4; + arg0->unk1C = 0; +} + +void fn_1_6074(unkStruct8* arg0) { + Vec sp8; + f32 var_f31; + f32 var_f30; + + switch (arg0->unk1C) { + case 0: + arg0->unk1C = 1; + arg0->unk14 = 0; + case 1: + sp8 = arg0->unk48; + if (arg0->unk0 == 0) { + var_f31 = -25.0f; + } else { + var_f31 = 25.0f; + } + sp8.z += var_f31; + fn_1_62F0(arg0, &sp8, 0x1E); + + arg0->unk1C = 2; + arg0->unk14 = 0; + break; + case 2: + if (arg0->unk14++ < 0x1E) break; + arg0->unk1C = 3; + case 3: + Hu3DModelAttrSet(arg0->unk3C[1], 0x40000001); + arg0->unk1C = 4; + arg0->unk14 = 0; + break; + case 4: + if (arg0->unk14 == 1) { + Hu3DModelAttrReset(arg0->unk3C[1], 0x40000001); + } + if (arg0->unk14++ < 0x1E) break; + arg0->unk1C = 5; + case 5: + sp8 = arg0->unk48; + if (arg0->unk0 == 0) { + var_f30 = -50.0f; + } else { + var_f30 = 50.0f; + } + sp8.z -= var_f30; + fn_1_62F0(arg0, &sp8, 12); + arg0->unk1C = 6; + arg0->unk14 = 0; + break; + case 6: + if (arg0->unk14++ >= 12) { + arg0->unk18 = 0; + } + break; + } +} + +void fn_1_6264(unkStruct8* arg0, Vec* arg1, s32 arg2) { + arg0->unk8C = *arg1; + arg0->unk80 = arg0->unk54; + arg0->unkB8 = 0.0f; + arg0->unkBC = (1.0f / arg2); + arg0->unk98 = 1; +} + +void fn_1_62F0(unkStruct8* arg0, Vec* arg1, s32 arg2) { + arg0->unkA8 = *arg1; + arg0->unk9C = arg0->unk48; + arg0->unkC0 = 0.0f; + arg0->unkC4 = (1.0f / arg2); + arg0->unkB4 = 1; +} + +void fn_1_637C(unkStruct8* arg0, s32 arg1) { + f32 var_f31; + + arg0->unkC8 = arg1; + switch (arg1) { + case 0: + Hu3DModelAttrReset(arg0->unk3C[0], 1); + Hu3DModelAttrSet(arg0->unk3C[0], 0x40000001); + Hu3DModelAttrSet(arg0->unk3C[1], 1); + arg0->unk48.x = 0.0f; + if (arg0->unk70 != 0) { + var_f31 = 70.0f; + } else { + var_f31 = 0.0f; + } + arg0->unk48.y = var_f31; + switch (arg0->unk0) { + case 0: + arg0->unk48.z = 150.0f; + arg0->unk54.y = 180.0f; + return; + case 1: + arg0->unk48.z = -150.0f; + arg0->unk54.y = 0.0f; + return; + } + break; + case 1: + Hu3DModelAttrReset(arg0->unk3C[1], 1); + Hu3DModelAttrSet(arg0->unk3C[0], 1); + break; + } +} + +void fn_1_64BC(unkStruct8* arg0, s32 arg1, s32 arg2) { + if (arg0->unk70 == 0) { + switch (arg1) { + case 0: + omVibrate(arg0->unk0, arg2, 6, 6); + return; + case 1: + omVibrate(arg0->unk0, arg2, 4, 2); + return; + case 2: + omVibrate(arg0->unk0, arg2, 12, 0); + break; + } + } +} + +static inline unkStruct8UnkC8(unkStruct8* arg0) { + if (arg0->unkC8 == 0) { + return 0; + } else { + return 1; + } +} + +void fn_1_6578(unkStruct8* arg0) { + s32 var_r30; + + var_r30 = unkStruct8UnkC8(arg0); + Hu3DModelPosSet(arg0->unk3C[var_r30], arg0->unk48.x, arg0->unk48.y, arg0->unk48.z); + Hu3DModelRotSet(arg0->unk3C[var_r30], arg0->unk54.x, arg0->unk54.y, arg0->unk54.z); + Hu3DModelScaleSet(arg0->unk3C[var_r30], arg0->unk60, arg0->unk60, arg0->unk60); +} + +void fn_1_6620(unkStruct8* arg0) { + s32 var_r26; + unkStruct4* temp_r27; + unkStruct4* temp_r30; + s32 var_r29; + s32 var_r28; + + arg0->unk20 = 0; + arg0->unk24 = 0; + + for (var_r29 = 0; var_r29 < 3; var_r29++) { + temp_r30 = arg0->unk2C[var_r29]; + if (temp_r30) { + fn_1_2A58(temp_r30); + } + } + for (var_r29 = 0; var_r29 < 3; var_r29++) { + var_r26 = 0; + temp_r30 = arg0->unk2C[var_r29]; + if (temp_r30) { + + for (var_r28 = 0; var_r28 < 3; var_r28++) { + temp_r27 = arg0->unk2C[var_r28]; + if ((var_r29 != var_r28) && (temp_r27) && (temp_r30->unk0 == temp_r27->unk0)) { + var_r26++; + } + } + if (var_r26 > 0) { + arg0->unk28 = temp_r30->unk0; + if (var_r26 == 1) { + arg0->unk20 = 1; + } else if (var_r26 == 2) { + arg0->unk24 = 1; + } + + for (var_r28 = 0; var_r28 < 3; var_r28++) { + temp_r27 = arg0->unk2C[var_r28]; + if ((temp_r27) && (temp_r30->unk0 == temp_r27->unk0)) { + fn_1_2A1C(temp_r27); + } + } + break; + } + } + } +} \ No newline at end of file diff --git a/src/REL/m446Dll/table.c b/src/REL/m446Dll/table.c index 0c5f808f..da6453c0 100644 --- a/src/REL/m446Dll/table.c +++ b/src/REL/m446Dll/table.c @@ -84,23 +84,20 @@ 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; + do { + 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; } - 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; + var_r31 = var_r31->unk8; + } while (var_r31); } s32 fn_1_3BF0(unkStruct6* arg0, unkStruct4* arg1, s32 arg2) {