From 89782119da359d66e08a646562461dc80606a7ab Mon Sep 17 00:00:00 2001 From: Kelebek1 Date: Sun, 17 Nov 2024 21:51:24 +0000 Subject: [PATCH] fragment24 --- include/variables.h | 11 +- linker_scripts/us/symbol_addrs.txt | 4 + src/1AB70.h | 2 +- src/225A0.c | 2 +- src/225A0.h | 8 + src/22630.h | 12 +- src/2D340.h | 90 +- src/2E110.c | 2 +- src/2E110.h | 2 +- src/2E460.h | 26 +- src/fragments/22/fragment22.c | 6 +- src/fragments/23/fragment23.h | 1 + src/fragments/23/fragment23_1A8800.c | 20 +- src/fragments/23/fragment23_1A9780.c | 16 +- src/fragments/23/fragment23_1AE680.c | 22 +- src/fragments/23/fragment23_1B4EA0.c | 36 +- src/fragments/23/fragment23_1BCF10.c | 6 +- src/fragments/24/fragment24.h | 881 +++++ src/fragments/24/fragment24_1CEA00.c | 3457 +++++++++++++++++--- src/fragments/24/fragment24_1D7B40.c | 4533 ++++++++++++++++++++++++++ src/fragments/24/fragment24_1E46B0.c | 1111 ++++++- src/fragments/25/fragment25.h | 4 +- src/fragments/26/fragment26.h | 177 +- src/memory.c | 4 +- src/memory.h | 2 +- tools/data2c.py | 23 +- yamls/us/rom.yaml | 29 +- 27 files changed, 9978 insertions(+), 509 deletions(-) create mode 100644 src/225A0.h create mode 100644 src/fragments/24/fragment24.h create mode 100644 src/fragments/24/fragment24_1D7B40.c diff --git a/include/variables.h b/include/variables.h index e713501..4431ac5 100644 --- a/include/variables.h +++ b/include/variables.h @@ -115,6 +115,12 @@ extern u8 D_4001638[]; extern u8 D_4001680[]; extern u8 D_40016C8[]; extern u8 D_4001710[]; +extern u8 D_4004A00[]; +extern u8 D_4005570[]; +extern u8 D_4001010[]; +extern u8 D_4001C90[]; +extern u8 D_4001FB8[]; +extern u8 D_4006AB8[]; extern u8 D_800818E0[0x20]; @@ -148,7 +154,9 @@ extern struct unk_D_86002F58_004_000* D_8006F09C; typedef struct unk_D_8006FF00 { /* 0x00 */ char unk_00[0x4]; /* 0x04 */ char* name; - /* 0x08 */ char unk_08[0x8]; + /* 0x08 */ char unk_08[0x4]; + /* 0x0C */ u8 unk_0C; + /* 0x0D */ char unk_0D[0x3]; /* 0x10 */ s16 unk_10; /* 0x12 */ s16 unk_12; /* 0x14 */ char unk_14[0x8]; @@ -227,5 +235,6 @@ typedef struct unk_D_70B10 { } unk_D_70B10; // size = 0x20 extern unk_func_88500020 D_800758E0; +extern unk_func_88500020 D_800758F0; #endif diff --git a/linker_scripts/us/symbol_addrs.txt b/linker_scripts/us/symbol_addrs.txt index 0efedea..ab6049b 100644 --- a/linker_scripts/us/symbol_addrs.txt +++ b/linker_scripts/us/symbol_addrs.txt @@ -369,6 +369,10 @@ D_4002D88 = 0x4002D88; D_4003010 = 0x4003010; D_4003298 = 0x4003298; D_4003520 = 0x4003520; +D_4001010 = 0x4001010; +D_4001C90 = 0x4001C90; +D_4001FB8 = 0x4001FB8; +D_4006AB8 = 0x4006AB8; D_88217C20 = 0x88217C20; // size:0x4 D_88217C24 = 0x88217C24; // size:0x4 D_88217C28 = 0x88217C28; // size:0x4 diff --git a/src/1AB70.h b/src/1AB70.h index 16242bc..134466f 100644 --- a/src/1AB70.h +++ b/src/1AB70.h @@ -5,7 +5,7 @@ typedef struct unk_func_88201DA0_034_008 { /* 0x00 */ char unk00[0x4]; -} unk_func_88201DA0_034_008; // size >= 1 +} unk_func_88201DA0_034_008; // size >= 0x4 void func_8001B058(void); void func_8001B0DC(unk_func_88201DA0_034_008*, s32, s32); diff --git a/src/225A0.c b/src/225A0.c index 77a5060..102f673 100644 --- a/src/225A0.c +++ b/src/225A0.c @@ -1,4 +1,4 @@ -#include "global.h" +#include "225A0.h" #pragma GLOBAL_ASM("asm/us/nonmatchings/225A0/func_800219A0.s") diff --git a/src/225A0.h b/src/225A0.h new file mode 100644 index 0000000..84a7cd6 --- /dev/null +++ b/src/225A0.h @@ -0,0 +1,8 @@ +#ifndef _225A0_H_ +#define _225A0_H_ + +#include "global.h" + +u32 func_800219FC(s32); + +#endif // _225A0_H_ diff --git a/src/22630.h b/src/22630.h index 6d6785d..dbe642a 100644 --- a/src/22630.h +++ b/src/22630.h @@ -15,14 +15,17 @@ typedef enum { } PokemonRomType; typedef struct unk_D_80070F84 { - /* 0x00 */ char unk00[0x5]; + /* 0x00 */ u8 unk_00; + /* 0x04 */ char unk01[0x4]; /* 0x05 */ u8 unk_05; /* 0x06 */ u8 unk_06; /* 0x07 */ u8 unk_07; /* 0x08 */ u8 unk_08; /* 0x09 */ u8 unk_09; /* 0x0A */ u8 unk_0A; - /* 0x0B */ char unk0B[0x8]; + /* 0x0B */ char unk0B[0x4]; + /* 0x0F */ u8 unk_0F[1]; + /* 0x10 */ char unk10[0x3]; /* 0x13 */ u8 unk_13; /* 0x14 */ char unk14[0x3]; } unk_D_80070F84; // size = 0x17 @@ -116,12 +119,13 @@ u32 func_800224B8(s32 arg0, u16 arg1); u16 func_800226C0(s32 arg0, u32 arg1); void func_80022734(unk_func_8820BE14_sp*); void func_800228B0(unk_func_8820BE14_sp*); +s8 func_80022A28(s32); u8 func_80022A38(s32 arg0); u8 func_80022A60(s32 arg0); unk_func_80022C28_ret* func_80022C28(s32, s32, s32, s32); unk_func_80022C28_ret* func_80022CC0(s32, s32, s32, s32, char*, s32); -void func_80022D24(unk_func_80022C28_ret*); -void func_80022D8C(unk_func_80022C28_ret*); +s32 func_80022D24(unk_func_80022C28_ret*); +s32 func_80022D8C(unk_func_80022C28_ret*); s32 func_80022E18(unk_func_80026268_arg0*, s32, unk_func_80022C28_ret*); s32 func_80022F24(unk_func_88205880_00D0*, s32, unk_func_80022C28_ret*); void func_80023068(void); diff --git a/src/2D340.h b/src/2D340.h index 1a7e481..ac84bb3 100644 --- a/src/2D340.h +++ b/src/2D340.h @@ -44,6 +44,12 @@ typedef struct unk_func_8820BE14_06C_000 { /* 0x04 */ unk_func_88200FA0_030_038 unk_04; } unk_func_8820BE14_06C_000; // size = 0x10 +typedef struct unk_func_8820BE14_06C_000_alt { + /* 0x00 */ s32 unk_00; + /* 0x04 */ unk_func_88200FA0_030_038 unk_04; + /* 0x10 */ unk_func_88205880_A030 unk_10; +} unk_func_8820BE14_06C_000_alt; // size = 0x1C + typedef struct unk_func_8820BE14_06C { /* 0x00 */ unk_func_8820BE14_06C_000* unk_00; /* 0x04 */ s32 unk_04; @@ -51,13 +57,95 @@ typedef struct unk_func_8820BE14_06C { /* 0x0C */ s32 unk_0C; } unk_func_8820BE14_06C; // size = 0x10 -void func_8002C740(s8*, unk_func_88201DA0_034*, s32, s32, s32); +typedef struct unk_func_8830867C_02C_0CC_000_000_000 { + /* 0x00 */ char unk00[0x8]; + /* 0x08 */ s32 unk_08; +} unk_func_8830867C_02C_0CC_000_000_000; // size >= 0xC + +typedef struct unk_func_8830867C_02C_0CC_000_000_010_000_000 { + /* 0x00 */ struct unk_func_8830867C_02C_0CC_000_000* unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ unk_func_80026268_arg0 unk_08; +} unk_func_8830867C_02C_0CC_000_000_010_000_000; // size >= 0x5C + +typedef struct unk_func_8830867C_02C_0CC_000_000_010_000 { + /* 0x00 */ unk_func_8830867C_02C_0CC_000_000_010_000_000* unk_00; +} unk_func_8830867C_02C_0CC_000_000_010_000; // size >= 0x4 + +typedef struct unk_func_8830867C_02C_0CC_000_000_010 { + /* 0x00 */ unk_func_8830867C_02C_0CC_000_000_010_000* unk_00; + /* 0x04 */ char unk04[0x4]; + /* 0x08 */ s32 unk_08; +} unk_func_8830867C_02C_0CC_000_000_010; // size = 0xC + +typedef struct unk_func_8830867C_02C_0CC_000_000 { + /* 0x00 */ unk_func_8830867C_02C_0CC_000_000_000* unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ unk_func_8830867C_02C_0CC_000_000_010 unk_10; +} unk_func_8830867C_02C_0CC_000_000; // size = 0x1C + +typedef struct unk_func_8830867C_02C_0CC_000_008 { + /* 0x00 */ u8 unk_00; + /* 0x01 */ char unk01[0x1]; + /* 0x02 */ u16 unk_02; + /* 0x04 */ char unk04[0x5]; + /* 0x09 */ u8 unk_09[4]; + /* 0x0D */ char unk0D[0x3]; + /* 0x10 */ u8 unk_10; + /* 0x11 */ u8 unk_11; + /* 0x12 */ char unk12[0x2]; + /* 0x14 */ u16 unk_14; + /* 0x16 */ u16 unk_16; + /* 0x18 */ u16 unk_18; + /* 0x1A */ u16 unk_1A; + /* 0x1C */ u16 unk_1C; + /* 0x1E */ u16 unk_1E; + /* 0x20 */ u8 unk_20[4]; + /* 0x24 */ u8 unk_24; + /* 0x26 */ u16 unk_26; + /* 0x28 */ u16 unk_28; + /* 0x2A */ u16 unk_2A; + /* 0x2C */ u16 unk_2C; + /* 0x2E */ u16 unk_2E; +} unk_func_8830867C_02C_0CC_000_008; // size = 0x30 + +typedef struct unk_func_8830867C_02C_0CC_000 { + /* 0x00 */ unk_func_8830867C_02C_0CC_000_000* unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ unk_func_8830867C_02C_0CC_000_008 unk_08; + /* 0x38 */ char unk_38[4]; + /* 0x3C */ char unk3C[0x20]; +} unk_func_8830867C_02C_0CC_000; // size = 0x5C + +typedef struct unk_func_8830867C_02C_0CC { + /* 0x00 */ unk_func_8830867C_02C_0CC_000** unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; +} unk_func_8830867C_02C_0CC; // size = 0xC + +typedef struct unk_func_8830867C_04C_030_02C_000_000_00C { + /* 0x00 */ s32 unk_00; + /* 0x04 */ char unk04[0x4]; + /* 0x08 */ s32 unk_08; +} unk_func_8830867C_04C_030_02C_000_000_00C; // size >= 0xC + +typedef void (*func_func_8002D1AC)(); +typedef s32 (*unk_D_8831A1F8)(s32, s32); + +void func_8002C740(unk_func_88201DA0_038*, unk_func_88201DA0_034*, s32, s32, s32); void func_8002C758(unk_func_8820BE14_06C*, s32, s32, MemoryPool*); void func_8002C88C(unk_func_8820BE14_06C*, u8*, s32); void func_8002C990(unk_func_8820BE14_06C*, s32); +s32 func_8002CB58(unk_func_8830867C_04C_030_02C_000_000_00C*, s32); void func_8002CBC0(unk_func_88200FA0_030_038*, s32, MemoryPool*); void func_8002CBB0(unk_func_88205880_A030*, void*, s32, s32); void func_8002CC2C(unk_func_88200FA0_030_038*, char*, s32); +void func_8002CC80(unk_func_8830867C_02C_0CC*, s32); +void func_8002D180(unk_func_8830867C_02C_0CC*, unk_D_8831A1F8); +void func_8002D1AC(unk_func_8830867C_02C_0CC*, unk_func_8830867C_02C_0CC*, func_func_8002D1AC, s32*); +s32 func_8002D348(u8*, u8*); void func_8002D3F0(f32*); Color_RGBA8 func_8002D444(Color_RGBA8, f32); diff --git a/src/2E110.c b/src/2E110.c index e3d8f31..7de14c3 100644 --- a/src/2E110.c +++ b/src/2E110.c @@ -28,7 +28,7 @@ void func_8002D5D4(u32 arg0, char* arg1) { } } -void func_8002D600(u32 arg0, s32 arg1) { +void func_8002D600(u32 arg0, char* arg1) { if ((arg0 != 0) && (arg0 < 0xA)) { D_800AF744[arg0] = arg1; } diff --git a/src/2E110.h b/src/2E110.h index c9a98d7..025db26 100644 --- a/src/2E110.h +++ b/src/2E110.h @@ -6,7 +6,7 @@ void func_8002D510(void); char** func_8002D5AC(s32 file_number); void func_8002D5D4(u32 arg0, char* arg1); -void func_8002D600(u32 arg0, s32 arg1); +void func_8002D600(u32 arg0, char* arg1); void func_8002D628(char* arg0, u32 arg1, s8* arg2); char* func_8002D7C0(char* arg0, s32 arg1, char** arg2, u32 file_number); s32 func_8002D80C(s8* arg0); diff --git a/src/2E460.h b/src/2E460.h index fb10860..6eb9eaa 100644 --- a/src/2E460.h +++ b/src/2E460.h @@ -3,6 +3,11 @@ #include "global.h" +typedef struct unk_func_8002D860 { + /* 0x00 */ char unk00[0x8]; + /* 0x08 */ s32 unk_08; +} unk_func_8002D860; // size >= 0xC + typedef struct ret_func_8002ED08 { /* 0x00 */ u8 unk_00[12]; } ret_func_8002ED08; // size = 0xC @@ -15,15 +20,34 @@ typedef struct unk_func_8820E99C_030_030 { /* 0x10 */ s32 unk_10; } unk_func_8820E99C_030_030; // size = 0x14 +typedef struct unk_D_80072B00 { + /* 0x00 */ char unk00[5]; + /* 0x05 */ u8 unk_05; +} unk_D_80072B00; // size = 0x6 + +typedef struct unk_func_8830867C_044_038_030 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ s32 unk_10; +} unk_func_8830867C_044_038_030; // size = 0x14 + +void func_8002D860(unk_func_8002D860*, s32); void func_8002D8C8(unk_func_88500020*, s32, s32); +s32 func_8002DF68(unk_func_8830867C_044_038_030*, s32); s32 func_8002EC08(s32); s32 func_8002ECDC(s32); s32 func_8002E0F4(unk_func_8820E99C_030_030*); +void func_8002E5A0(s32, s32, s32, s32); void func_8002E8E4(s32, s32, s32, s32); +unk_D_80072B00* func_8002ED40(s32); s32 func_8002EE1C(s32, s32, s32); void func_8002EE78(void); void func_8002EEA8(OSMesg); -ret_func_8002ED08* func_8002ED08(u8); +ret_func_8002ED08* func_8002ED08(s32); +s32 func_8002ED78(u8*, s32); +s32 func_8002EDEC(s32); void func_8002EF18(s32*); void func_8002EF44(void); s32 func_8002F1C0(u8); diff --git a/src/fragments/22/fragment22.c b/src/fragments/22/fragment22.c index 9a64455..6bf4613 100644 --- a/src/fragments/22/fragment22.c +++ b/src/fragments/22/fragment22.c @@ -2798,7 +2798,7 @@ void func_88001300(unk_func_88001300* arg0, s32 arg1, s32 arg2, s32 arg3, u8* ar arg0->unk_38 = mem_pool_alloc(arg6, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_38, 0, 0, temp_s0->unk_14.unk_00, temp_s0->unk_14.unk_02); - arg0->unk_38->unk_28 |= 0x200; + arg0->unk_38->unk_00.unk_28 |= 0x200; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s0, arg0->unk_38); sp5C = mem_pool_alloc(arg6, sizeof(unk_func_88001300_000)); @@ -3017,7 +3017,7 @@ void func_8800233C(unk_func_88001300* arg0) { func_8002EEA8(NULL); } - arg0->unk_38->unk_28 |= 0x201; + arg0->unk_38->unk_00.unk_28 |= 0x201; for (i = 0; i < 8; i++) { func_8002EEA8(NULL); @@ -3027,7 +3027,7 @@ void func_8800233C(unk_func_88001300* arg0) { temp_s0 = Memmap_GetFragmentVaddr(func_88506074); temp_s0(arg0->unk_34, func_8002D7C0(NULL, 0, D_88016CF4, 6)); // clang-format on } else { - arg0->unk_38->unk_28 |= 0x201; + arg0->unk_38->unk_00.unk_28 |= 0x201; func_88001258(arg0); } } else { diff --git a/src/fragments/23/fragment23.h b/src/fragments/23/fragment23.h index d46ddc2..991beec 100644 --- a/src/fragments/23/fragment23.h +++ b/src/fragments/23/fragment23.h @@ -700,6 +700,7 @@ void func_88216000(unk_func_8820BE14_02C_038* arg0, s32 arg1, s32 arg2); s32 func_882169D4(unk_func_8820BE14_02C_038* arg0, Controller* arg1); void func_88216F18(unk_func_8820BE14_02C_038* arg0, s32 arg1); void func_88217018(unk_func_8820BE14_02C_038* arg0, unk_func_8820BE14_06C_000* arg1, u32 arg2); +void func_88217060(unk_func_8820BE14_02C_038*, s32*, s32); void func_882170A8(unk_func_882170A8* arg0, s32 arg1, s32 arg2, unk_func_8820BE14_02C_038* arg3, s32 arg4); void func_8821711C(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); s32 func_8821738C(unk_func_882170A8* arg0, s32 arg1, s32 arg2); diff --git a/src/fragments/23/fragment23_1A8800.c b/src/fragments/23/fragment23_1A8800.c index 8430018..e958dc6 100644 --- a/src/fragments/23/fragment23_1A8800.c +++ b/src/fragments/23/fragment23_1A8800.c @@ -41,9 +41,9 @@ void func_88200290(unk_func_88503298* arg0, s32 arg1, s32 arg2, MemoryPool* arg3 arg0->unk_2C = mem_pool_alloc(arg3, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, var_s1, 0x68); - arg0->unk_2C->unk_28 |= 0x200; - arg0->unk_2C->unk_28 |= 0x400; - arg0->unk_2C->unk_28 &= ~1; + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); temp_s0 = mem_pool_alloc(arg3, sizeof(unk_func_885012A4)); @@ -95,9 +95,9 @@ void func_882004C8(unk_func_88200FA0_030* arg0, s32 arg1, s32 arg2, unk_func_880 arg0->unk_2C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, var_s2, 0xA4); - arg0->unk_2C->unk_28 |= 0x200; - arg0->unk_2C->unk_28 |= 0x400; - arg0->unk_2C->unk_28 &= ~1; + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); sp6C = mem_pool_alloc(arg4, sizeof(unk_func_8850B254)); @@ -159,7 +159,7 @@ s32 func_88200A30(unk_func_88200FA0_030* arg0, Controller* arg1) { if ((sp1C & 1) && (sp1C & 8)) { func_88200968(arg0, arg0->unk_30->unk_38); } - } else if (!(arg0->unk_2C->unk_28 & 1)) { + } else if (!(arg0->unk_2C->unk_00.unk_28 & 1)) { sp1C = 2; } else { sp1C = 1; @@ -168,14 +168,14 @@ s32 func_88200A30(unk_func_88200FA0_030* arg0, Controller* arg1) { } void func_88200ACC(unk_func_88200FA0_030* arg0) { - arg0->unk_2C->unk_28 |= 1; - arg0->unk_34->unk_2C->unk_28 |= 1; + arg0->unk_2C->unk_00.unk_28 |= 1; + arg0->unk_34->unk_2C->unk_00.unk_28 |= 1; } void func_88200AF4(unk_func_88200FA0_030* arg0) { arg0->unk_2C->unk_2C = 0xB; arg0->unk_34->unk_2C->unk_2C = 0xB; - while (arg0->unk_2C->unk_28 & 1) { + while (arg0->unk_2C->unk_00.unk_28 & 1) { func_8002EEA8(NULL); } } diff --git a/src/fragments/23/fragment23_1A9780.c b/src/fragments/23/fragment23_1A9780.c index d2c3091..0cda924 100644 --- a/src/fragments/23/fragment23_1A9780.c +++ b/src/fragments/23/fragment23_1A9780.c @@ -124,13 +124,14 @@ void func_88201DA0(unk_func_88201DA0* arg0, s32 arg1, s32 arg2, unk_func_8800130 arg0->unk_2C = mem_pool_alloc(arg6, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, 0x212, 0x148); - arg0->unk_2C->unk_28 |= 0x200; - arg0->unk_2C->unk_28 |= 0x400; - arg0->unk_2C->unk_28 &= ~1; + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); arg0->unk_58 = mem_pool_alloc(arg6, sizeof(unk_func_8850182C)); - ((func8850182C)Memmap_GetFragmentVaddr(func_8850182C))(arg0->unk_58, 0, 0, arg0->unk_2C->unk_14, 0x1C, D_88217C30); + ((func8850182C)Memmap_GetFragmentVaddr(func_8850182C))(arg0->unk_58, 0, 0, arg0->unk_2C->unk_00.unk_14.unk_00, 0x1C, + D_88217C30); ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, arg0->unk_58); arg0->unk_50 = mem_pool_alloc(arg6, sizeof(unk_func_8850878C)); @@ -163,7 +164,8 @@ void func_88202054(unk_func_88201DA0* arg0, u32 arg1, u32 arg2) { sprintf(&arg0->unk_54[strlen(arg0->unk_54)], " No.%d", arg2 + 1); arg0->unk_50->unk_00.unk_10.unk_00 = - (arg0->unk_2C->unk_14 - func_8001F5B0(arg0->unk_50->unk_2C, arg0->unk_50->unk_38, arg0->unk_54)) / 2; + (arg0->unk_2C->unk_00.unk_14.unk_00 - func_8001F5B0(arg0->unk_50->unk_2C, arg0->unk_50->unk_38, arg0->unk_54)) / + 2; arg0->unk_58->unk_2C = D_88217C38[arg1 - 1]; } @@ -804,7 +806,7 @@ void func_88203ED8(unk_func_88203ED8* arg0, s32 arg1, s32 arg2, unk_func_8820588 arg0->unk_2C = mem_pool_alloc(arg8, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, 0x228, 0x172); - arg0->unk_2C->unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 |= 0x400; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); sp98 = mem_pool_alloc(arg8, sizeof(unk_func_885012A4)); @@ -1529,7 +1531,7 @@ void func_88205E94(unk_func_88205880* arg0) { func_8001F738(gPlayer1Controller); func_882057B4(arg0->unk_002C, gPlayer1Controller); - while (arg0->unk_002C->unk_2C->unk_28 & 1) { + while (arg0->unk_002C->unk_2C->unk_00.unk_28 & 1) { func_8002EEA8(NULL); } diff --git a/src/fragments/23/fragment23_1AE680.c b/src/fragments/23/fragment23_1AE680.c index 9736ef2..bf9de27 100644 --- a/src/fragments/23/fragment23_1AE680.c +++ b/src/fragments/23/fragment23_1AE680.c @@ -288,9 +288,9 @@ void func_88206A20(unk_func_8820BE14_02C_078_034* arg0, s32 arg1, s32 arg2, Memo arg0->unk_2C = mem_pool_alloc(arg3, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, sp4C, 0x120); - arg0->unk_2C->unk_28 |= 0x200; - arg0->unk_2C->unk_28 |= 0x400; - arg0->unk_2C->unk_28 &= ~1; + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); @@ -338,9 +338,9 @@ void func_88206C4C(unk_func_8820BE14_02C_078* arg0, s32 arg1, s32 arg2, s32 arg3 arg0->unk_2C = mem_pool_alloc(arg6, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, sp48, 0x54); - arg0->unk_2C->unk_28 |= 0x200; - arg0->unk_2C->unk_28 |= 0x400; - arg0->unk_2C->unk_28 &= ~1; + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00, arg0->unk_2C); @@ -404,9 +404,9 @@ s32 func_88206F44(unk_func_8820BE14_02C_078* arg0, Controller* arg1) { &arg0->unk_38.unk_00[arg0->unk_30->unk_38]); if (arg0->unk_4C != 0) { - arg0->unk_34->unk_00.unk_10.unk_00 = -arg0->unk_34->unk_2C->unk_14; + arg0->unk_34->unk_00.unk_10.unk_00 = -arg0->unk_34->unk_2C->unk_00.unk_14.unk_00; } else { - arg0->unk_34->unk_00.unk_10.unk_00 = arg0->unk_2C->unk_14; + arg0->unk_34->unk_00.unk_10.unk_00 = arg0->unk_2C->unk_00.unk_14.unk_00; } arg0->unk_34->unk_00.unk_10.unk_02 = 8; @@ -1415,7 +1415,7 @@ void func_88209B54(unk_func_8820BE14_02C* arg0, s32 arg1, s32 arg2, unk_func_882 arg0->unk_2C = mem_pool_alloc(argA, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, 0x228, 0x160); - arg0->unk_2C->unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 |= 0x400; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); temp_s0 = mem_pool_alloc(argA, sizeof(unk_func_88001300_02C)); @@ -2473,7 +2473,7 @@ void func_8820C510(unk_func_8820BE14* arg0) { void func_8820C5BC(unk_func_8820BE14* arg0) { s32 sp24 = func_8820AFC4(arg0->unk_2C, gPlayer1Controller); - while (arg0->unk_2C->unk_2C->unk_28 & 1) { + while (arg0->unk_2C->unk_2C->unk_00.unk_28 & 1) { func_8002EEA8(0); } @@ -2494,7 +2494,7 @@ void func_8820C63C(unk_func_8820BE14* arg0) { sp24 = func_8820AFC4(arg0->unk_2C, gPlayer1Controller); - while (arg0->unk_2C->unk_2C->unk_28 & 1) { + while (arg0->unk_2C->unk_2C->unk_00.unk_28 & 1) { func_8002EEA8(NULL); } diff --git a/src/fragments/23/fragment23_1B4EA0.c b/src/fragments/23/fragment23_1B4EA0.c index fce511d..fc3a4d7 100644 --- a/src/fragments/23/fragment23_1B4EA0.c +++ b/src/fragments/23/fragment23_1B4EA0.c @@ -186,9 +186,9 @@ void func_8820D0F4(unk_func_8821421C_034* arg0, s32 arg1, s32 arg2, MemoryPool* arg0->unk_2C = mem_pool_alloc(arg3, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, 0x100, 0x3C); - arg0->unk_2C->unk_28 |= 0x200; - arg0->unk_2C->unk_28 |= 0x400; - arg0->unk_2C->unk_28 &= ~1; + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); @@ -372,9 +372,9 @@ void func_8820D9B8(unk_func_8821421C_02C_070* arg0, s32 arg1, s32 arg2, s32 arg3 arg0->unk_2C = mem_pool_alloc(arg7, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, sp4C, arg5 * 0x1C); - arg0->unk_2C->unk_28 |= 0x200; - arg0->unk_2C->unk_28 |= 0x400; - arg0->unk_2C->unk_28 &= ~1; + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); @@ -716,9 +716,9 @@ void func_8820E99C(unk_func_8820E99C* arg0, s32 arg1, s32 arg2, MemoryPool* arg3 arg0->unk_2C = mem_pool_alloc(arg3, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, sp40, 0x28); - arg0->unk_2C->unk_28 |= 0x200; - arg0->unk_2C->unk_28 |= 0x400; - arg0->unk_2C->unk_28 &= ~1; + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); @@ -977,9 +977,9 @@ void func_8820F3B8(unk_func_8821421C_038* arg0, s32 arg1, s32 arg2, unk_func_880 arg0->unk_44 = mem_pool_alloc(arg5, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_44, 0, 0, 0x228, 0x162); - arg0->unk_44->unk_28 |= 0x200; - arg0->unk_44->unk_28 |= 0x400; - arg0->unk_44->unk_28 &= ~1; + arg0->unk_44->unk_00.unk_28 |= 0x200; + arg0->unk_44->unk_00.unk_28 |= 0x400; + arg0->unk_44->unk_00.unk_28 &= ~1; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_44); @@ -1488,14 +1488,14 @@ void func_88210B38(unk_func_8821421C_02C_06C_02C* arg0, s32 arg1) { (!(&arg0->unk_2C[0]->unk_00.unk_00))) {} if (var_v1 == 0xC4) { - var_v1 -= arg0->unk_34->unk_2C->unk_16; + var_v1 -= arg0->unk_34->unk_2C->unk_00.unk_14.unk_02; var_v1 -= 4; } else { var_v1 += 0x20; } arg0->unk_34->unk_00.unk_10.unk_00 = - 0xD3 + (arg0->unk_2C[0]->unk_00.unk_00.unk_10.unk_00 - arg0->unk_34->unk_2C->unk_14); + 0xD3 + (arg0->unk_2C[0]->unk_00.unk_00.unk_10.unk_00 - arg0->unk_34->unk_2C->unk_00.unk_14.unk_00); arg0->unk_34->unk_00.unk_10.unk_02 = arg0->unk_2C[0]->unk_00.unk_00.unk_10.unk_02 + var_v1 & 0xFFFF; func_8820EC68(arg0->unk_34); @@ -1996,7 +1996,7 @@ s32 func_882118CC(unk_func_8821421C_02C_06C_02C* arg0, Controller* arg1) { case 1: if (sp2C & 2) { - if (arg0->unk_34->unk_2C->unk_28 & 1) { + if (arg0->unk_34->unk_2C->unk_00.unk_28 & 1) { func_88210BFC(arg0, 4); } else { func_88210BFC(arg0, 0); @@ -2006,7 +2006,7 @@ s32 func_882118CC(unk_func_8821421C_02C_06C_02C* arg0, Controller* arg1) { } else if (sp2C & 4) { func_80048B90(0x18); arg0->unk_2C[0]->unk_00.unk_34[arg0->unk_2C[0]->unk_00.unk_38] |= 0x100; - if (arg0->unk_34->unk_2C->unk_28 & 1) { + if (arg0->unk_34->unk_2C->unk_00.unk_28 & 1) { func_8820EC9C(arg0->unk_34); } func_88211380(arg0, arg1); @@ -2268,7 +2268,7 @@ void func_882121E0(unk_func_8821421C_02C* arg0, s32 arg1, s32 arg2, unk_func_882 arg0->unk_2C = mem_pool_alloc(argB, sizeof(unk_func_88001300_038)); ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, 0x228, 0x162); - arg0->unk_2C->unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 |= 0x400; ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); spC8 = mem_pool_alloc(argB, sizeof(unk_func_885012A4)); @@ -3005,7 +3005,7 @@ void func_88214720(unk_func_8821421C* arg0) { void func_882147BC(unk_func_8821421C* arg0) { s32 sp24 = func_88213618(arg0->unk_2C, gPlayer1Controller); - while (arg0->unk_2C->unk_2C->unk_28 & 1) { + while (arg0->unk_2C->unk_2C->unk_00.unk_28 & 1) { func_8002EEA8(0); } diff --git a/src/fragments/23/fragment23_1BCF10.c b/src/fragments/23/fragment23_1BCF10.c index 50ff5ae..8a0375d 100644 --- a/src/fragments/23/fragment23_1BCF10.c +++ b/src/fragments/23/fragment23_1BCF10.c @@ -626,7 +626,11 @@ void func_88217018(unk_func_8820BE14_02C_038* arg0, unk_func_8820BE14_06C_000* a ((func88506EE4)Memmap_GetFragmentVaddr(func_88506EE4))(arg0, &arg1->unk_04); } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/23/fragment23_1BCF10/func_88217060.s") +void func_88217060(unk_func_8820BE14_02C_038* arg0, s32* arg1, s32 arg2) { + arg0->unk_88 = arg1; + arg0->unk_8C = arg2; + ((func88506F50)Memmap_GetFragmentVaddr(func_88506F50))(arg0, arg1 + 1); +} void func_882170A8(unk_func_882170A8* arg0, s32 arg1, s32 arg2, unk_func_8820BE14_02C_038* arg3, s32 arg4) { ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_882170A8)); diff --git a/src/fragments/24/fragment24.h b/src/fragments/24/fragment24.h new file mode 100644 index 0000000..da3e286 --- /dev/null +++ b/src/fragments/24/fragment24.h @@ -0,0 +1,881 @@ +#ifndef _FRAGMENT24_H_ +#define _FRAGMENT24_H_ + +#include "global.h" +#include "src/fragments/25/fragment25.h" +#include "src/fragments/26/fragment26.h" +#include "src/fragments/29/fragment29.h" +#include "src/2E460.h" + +typedef struct unk_func_8830867C_02C_04C_018 { + /* 0x00 */ char unk00[0x8]; + /* 0x08 */ unk_func_88001300_000* unk_08; + /* 0x0C */ unk_func_88001300_000* unk_0C; + /* 0x10 */ unk_func_88001300_000* unk_10; + /* 0x14 */ unk_func_88001300_000* unk_14; + /* 0x18 */ unk_func_88001300_000* unk_18; + /* 0x1C */ unk_func_88001300_000* unk_1C; +} unk_func_8830867C_02C_04C_018; // size >= 0x20 + +typedef struct unk_func_8830867C_02C_04C { + /* 0x00 */ char unk00[0xC]; + /* 0x00 */ unk_func_88001300_03C_00C* unk_0C; + /* 0x10 */ unk_func_88001300_03C_010 unk_10; + /* 0x14 */ unk_func_88001300_03C_014 unk_14; + /* 0x18 */ unk_func_8830867C_02C_04C_018* unk_18; + /* 0x1C */ unk_func_88001300_03C_01C* unk_1C; + /* 0x20 */ s32 unk_20; + /* 0x24 */ s32 unk_24; + /* 0x28 */ s32 unk_28; + /* 0x2C */ s32 unk_2C; + /* 0x30 */ char unk30[0x8]; + /* 0x38 */ s16 unk_38; + /* 0x3A */ s16 unk_3A; + /* 0x3C */ s16 unk_3C; + /* 0x3E */ s16 unk_3E; +} unk_func_8830867C_02C_04C; // size = 0x40 + +typedef struct unk_func_8830867C_02C_050 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ struct unk_func_8830867C_02C* unk_2C; +} unk_func_8830867C_02C_050; // size = 0x30 + +typedef struct unk_func_8830867C_02C_0B4_030 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ char unk2C[0xC]; + /* 0x38 */ s32 unk_38; + /* 0x3C */ char unk3C[0x18]; +} unk_func_8830867C_02C_0B4_030; // size = 0x54 + +typedef struct unk_func_8830867C_02C_0B4 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_88001300_038* unk_2C; + /* 0x30 */ unk_func_8830867C_02C_0B4_030* unk_30; + /* 0x34 */ unk_func_88200FA0_030_038 unk_34; +} unk_func_8830867C_02C_0B4; // size = 0x40 + +typedef struct unk_func_8830867C_02C_0C0 { + /* 0x00 */ unk_func_882173EC unk_00; + /* 0x38 */ s32 unk_38; +} unk_func_8830867C_02C_0C0; // size = 0x3C + +typedef struct unk_func_8830867C_034_03C_038_02C_000 { + /* 0x00 */ char unk00[0x8]; + /* 0x08 */ s32 unk_08; + /* 0x0C */ char unk0C[0x10]; +} unk_func_8830867C_034_03C_038_02C_000; // size = 0x1C + +typedef struct unk_func_8830867C_034_03C_038_02C { + /* 0x00 */ unk_func_8830867C_034_03C_038_02C_000* unk_00; + /* 0x04 */ char unk04[0x4]; + /* 0x08 */ s32 unk_08; +} unk_func_8830867C_034_03C_038_02C; // size >= 0xC + +// Seems to be >= 0x58 in other places? +typedef struct unk_func_8830867C_02C_144_000 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ char unk08[0x4]; + /* 0x0C */ unk_func_8830867C_02C_0CC_000_000* unk_0C; + /* 0x10 */ char unk10[0x4]; + /* 0x14 */ s32 unk_14; + /* 0x18 */ char unk18[0x8]; +} unk_func_8830867C_02C_144_000; // size = 0x20 + +typedef struct unk_func_8830867C_02C_144_000_alt { + /* 0x00 */ char unk00[0x2C]; + /* 0x2C */ unk_func_8830867C_034_03C_038_02C unk_2C; + /* 0x38 */ char unk_38[0x14]; + /* 0x4C */ unk_func_8830867C_034_03C_038_02C unk_4C; +} unk_func_8830867C_02C_144_000_alt; // size >= 0x58 + +typedef struct unk_func_8830867C_02C_144 { + /* 0x00 */ unk_func_8830867C_02C_144_000* unk_00; + /* 0x04 */ char unk04[0x4]; + /* 0x08 */ s32 unk_08; +} unk_func_8830867C_02C_144; // size >= 0xC + +typedef struct unk_func_8830867C_02C_154 { + /* 0x00 */ u8 unk_00; + /* 0x01 */ u8 unk_01; + /* 0x02 */ u8 unk_02; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ u8* unk_0C; + /* 0x10 */ s32 unk_10; + /* 0x14 */ s32 unk_14; + /* 0x18 */ char unk18[0x4]; +} unk_func_8830867C_02C_154; // size = 0x1C + +typedef struct unk_func_8830867C_02C_1A8 { + /* 0x00 */ u8* unk_00; + /* 0x04 */ unk_func_8830867C_02C_154* unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; +} unk_func_8830867C_02C_1A8; // size = 0x10 + +typedef struct unk_func_8830867C_030_03C_034 { + /* 0x00 */ u16 unk_00; + /* 0x02 */ u16 unk_02; + /* 0x04 */ char unk04[0x2]; + /* 0x06 */ u16 unk_06; + /* 0x08 */ char unk08[0x2]; + /* 0x0A */ u16 unk_0A; +} unk_func_8830867C_030_03C_034; // size >= 0xC + +typedef struct unk_func_8830867C_030 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_88001300_038* unk_2C; + /* 0x30 */ unk_func_88001300_000_010 unk_30; + /* 0x34 */ unk_func_88001300_000_010 unk_34; + /* 0x38 */ unk_func_885012A4* unk_38; + /* 0x3C */ unk_func_88200FA0_030_030_1CEA00* unk_3C; + /* 0x40 */ unk_func_8830867C_02C_0CC unk_40; + /* 0x4C */ s32 unk_4C; + /* 0x50 */ s32 unk_50; +} unk_func_8830867C_030; // size = 0x54 + +typedef struct unk_func_8830867C_034_034 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ char unk2C[0x4]; + /* 0x30 */ s32 unk_30; +} unk_func_8830867C_034_034; // size = 0x34 + +typedef struct unk_func_8830867C_034_03C_038 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_8830867C_034_03C_038_02C* unk_2C; + /* 0x30 */ char unk30[0x4]; + /* 0x34 */ u16* unk_34; + /* 0x38 */ s32 unk_38; + /* 0x3C */ char unk3C[0x8]; + /* 0x44 */ unk_func_88001300_000* unk_44; + /* 0x48 */ char unk48[0xC]; +} unk_func_8830867C_034_03C_038; // size = 0x54 + +typedef struct unk_func_8830867C_034_03C { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_88001300_038* unk_2C; + /* 0x30 */ unk_func_88500994* unk_30; + /* 0x34 */ unk_func_88500994* unk_34; + /* 0x38 */ unk_func_8830867C_034_03C_038* unk_38[2]; + /* 0x40 */ char unk40[0x4]; +} unk_func_8830867C_034_03C; // size = 0x44 + +typedef struct unk_func_8830867C_034 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_88001300_038* unk_2C; + /* 0x30 */ unk_func_88200FA0_030_030_1CEA00* unk_30; + /* 0x34 */ unk_func_8830867C_034_034* unk_34; + /* 0x38 */ unk_func_8830867C_034_038* unk_38; + /* 0x3C */ unk_func_8830867C_034_03C* unk_3C; + /* 0x40 */ unk_func_8850878C* unk_40; +} unk_func_8830867C_034; // size = 0x44 + +typedef struct unk_func_8830867C_038_034 { + /* 0x00 */ char** unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; +} unk_func_8830867C_038_034; // size = 0xC + +typedef struct unk_func_8830867C_038 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_88001300_038* unk_2C; + /* 0x30 */ unk_func_88200FA0_030_030_1CEA00* unk_30; + /* 0x34 */ unk_func_8830867C_038_034 unk_34; + /* 0x40 */ unk_func_88001300_038* unk_40; +} unk_func_8830867C_038; // size = 0x44 + +typedef struct unk_func_8830867C_03C_030 { + /* 0x00 */ unk_func_8850878C* unk_00; + /* 0x00 */ s32 unk_04; +} unk_func_8830867C_03C_030; // size = 0x8 + +typedef struct unk_func_8830867C_03C { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_88001300_038* unk_2C; + /* 0x30 */ unk_func_8830867C_03C_030 unk_30[2]; + /* 0x40 */ unk_func_8850878C* unk_40; + /* 0x44 */ unk_func_8850878C* unk_44; + /* 0x48 */ unk_func_88001300_000* unk_48; + /* 0x4C */ unk_func_8830867C_03C_04C* unk_4C; + /* 0x50 */ unk_func_88001300_03C* unk_50; + /* 0x54 */ unk_func_8821421C_038_034* unk_54; + /* 0x58 */ unk_func_8830867C_03C_058 unk_58[15]; + /* 0xD0 */ unk_func_8830867C_03C_0D0 unk_D0; + /* 0xE0 */ u16 unk_E0; +} unk_func_8830867C_03C; // size = 0xE4 + +typedef struct unk_func_8830867C_040_030 { + /* 0x00 */ unk_func_8850878C* unk_00; + /* 0x04 */ u8* unk_04; +} unk_func_8830867C_040_030; // size = 0x8 + +typedef struct unk_func_8830867C_040 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_88001300_038* unk_2C; + /* 0x30 */ unk_func_8830867C_040_030 unk_30[4]; + /* 0x50 */ unk_func_8850878C* unk_50; + /* 0x54 */ unk_func_8850878C* unk_54; + /* 0x58 */ unk_func_88001300_000* unk_58; + /* 0x5C */ unk_func_8830867C_040_05C* unk_5C; + /* 0x60 */ unk_func_88001300_03C* unk_60; + /* 0x64 */ unk_func_8821421C_038_034* unk_64; + /* 0x68 */ unk_func_88205880_A030 unk_68; + /* 0x74 */ u16 unk_74; +} unk_func_8830867C_040; // size = 0x78 + +typedef struct unk_func_8830867C_044_038 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ char unk2C[0x4]; + /* 0x30 */ unk_func_8830867C_044_038_030 unk_30; + /* 0x44 */ unk_func_8820E99C_030_044* unk_44; +} unk_func_8830867C_044_038; // size = 0x48 + +typedef struct unk_func_8830867C_044 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_88001300_038* unk_2C; + /* 0x30 */ unk_func_8850878C* unk_30; + /* 0x34 */ unk_func_88001300_000* unk_34; + /* 0x38 */ unk_func_8830867C_044_038* unk_38; + /* 0x3C */ unk_func_8830867C_044_038* unk_3C; + /* 0x40 */ unk_func_8830867C_044_040* unk_40; + /* 0x44 */ unk_func_88001300_03C* unk_44; +} unk_func_8830867C_044; // size = 0x48 + +typedef struct unk_func_8830867C_048_04C { + /* 0x00 */ char unk00[0x1C]; + /* 0x1C */ s32 unk_1C; + /* 0x20 */ char unk20[0x4]; +} unk_func_8830867C_048_04C; // size = 0x24 + +typedef struct unk_func_8830867C_048 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_88001300_038* unk_2C; + /* 0x30 */ unk_func_88001300_038* unk_30; + /* 0x34 */ unk_func_88200FA0_030_030_1CEA00* unk_34; + /* 0x38 */ unk_func_88200FA0_030_030_1CEA00* unk_38[2]; + /* 0x40 */ unk_func_88500994* unk_40; + /* 0x44 */ unk_func_88500994* unk_44; + /* 0x48 */ unk_func_8830867C_048_048* unk_48; + /* 0x4C */ unk_func_8830867C_048_04C* unk_4C; + /* 0x50 */ char unk_50[0x80]; +} unk_func_8830867C_048; // size = 0xD0 + +typedef struct unk_func_8830867C_04C_030_02C_000_000 { + /* 0x00 */ u8 unk_00; + /* 0x01 */ u8 unk_01; + /* 0x02 */ char unk02[0x6]; + /* 0x08 */ s32 unk_08; + /* 0x0C */ unk_func_8830867C_04C_030_02C_000_000_00C unk_0C; +} unk_func_8830867C_04C_030_02C_000_000; // size >= 0x18 + +typedef struct unk_func_8830867C_04C_030_02C_000 { + /* 0x00 */ unk_func_8830867C_04C_030_02C_000_000* unk_00[1]; +} unk_func_8830867C_04C_030_02C_000; // size >= 0x8 + +typedef struct unk_func_8830867C_04C_030_02C { + /* 0x00 */ unk_func_8830867C_04C_030_02C_000* unk_00; + /* 0x04 */ char unk04[0x4]; + /* 0x08 */ s32 unk_08; +} unk_func_8830867C_04C_030_02C; // size >= 0xC + +typedef struct unk_func_8830867C_04C_030 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_8830867C_04C_030_02C* unk_2C; + /* 0x30 */ char unk30[0x4]; + /* 0x34 */ u16* unk_34; + /* 0x38 */ s32 unk_38; + /* 0x3C */ char unk3C[0x2]; + /* 0x3E */ s16 unk_3E; + /* 0x40 */ char unk40[0x18]; + /* 0x58 */ s32 unk_58; + /* 0x5C */ char unk5C[0x14]; +} unk_func_8830867C_04C_030; // size = 0x70 + +typedef void (*unk_func_8830867C_04C_078_030_040)(); + +typedef struct unk_func_8830867C_04C_078_030 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ void* unk_2C; + /* 0x30 */ s32 unk_30; + /* 0x34 */ u16* unk_34; + /* 0x38 */ s32 unk_38; + /* 0x3C */ s16 unk_3C; + /* 0x3E */ s16 unk_3E; + /* 0x40 */ unk_func_8830867C_04C_078_030_040 unk_40; + /* 0x44 */ unk_func_88001300_03C_01C* unk_44; + /* 0x48 */ s16 unk_48; + /* 0x4A */ s16 unk_4A; + /* 0x4C */ s16 unk_4C; + /* 0x4E */ s16 unk_4E; + /* 0x50 */ s16 unk_50; + /* 0x52 */ s16 unk_52; +} unk_func_8830867C_04C_078_030; // size = 0x54 + +typedef struct unk_func_8830867C_04C_078_044 { + /* 0x00 */ unk_func_88201DA0_034* unk_00; + /* 0x04 */ s32 unk_04; +} unk_func_8830867C_04C_078_044; // size = 0x8 + +typedef struct unk_func_8830867C_04C_078 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_88001300_038* unk_2C; + /* 0x30 */ unk_func_8830867C_04C_078_030* unk_30; + /* 0x34 */ unk_func_88201DA0_038 unk_34; + /* 0x44 */ unk_func_8830867C_04C_078_044 unk_44[1]; + /* 0x4C */ char unk4C[0x18]; +} unk_func_8830867C_04C_078; // size = 0x64 + +typedef struct unk_func_8830867C_04C_02C { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ s32 unk_2C; + /* 0x30 */ s32 unk_30; +} unk_func_8830867C_04C_02C; // size = 0x34 + +typedef struct unk_func_8830867C_04C { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_8830867C_04C_02C* unk_2C; + /* 0x30 */ unk_func_8830867C_04C_030* unk_30; + /* 0x34 */ unk_func_88500994* unk_34; + /* 0x38 */ char unk_38[4]; + /* 0x3C */ char unk3C[0x3C]; + /* 0x78 */ unk_func_8830867C_04C_078* unk_78; + /* 0x7C */ unk_func_8830867C_030* unk_7C; + /* 0x80 */ unk_func_8830867C_04C_080* unk_80; + /* 0x84 */ s32 unk_84; + /* 0x88 */ unk_func_80026268_arg0* unk_88; // maybe unk_func_8830867C_02C_0CC_000_008 + /* 0x8C */ s32 unk_8C; + /* 0x90 */ unk_func_88503298* unk_90; +} unk_func_8830867C_04C; // size = 0x94 + +typedef struct unk_func_8830867C_02C_C54_014 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ u8 unk_04[2]; +} unk_func_8830867C_02C_C54_014; // size >= 0x8 + +typedef struct unk_func_8830867C_02C_C54_01C { + /* 0x00 */ s32 unk_00; + /* 0x04 */ u8 unk_04[2]; +} unk_func_8830867C_02C_C54_01C; // size >= 0x8 + +typedef struct unk_func_8830867C_02C_C54_024 { + /* 0x00 */ u8 unk_00[4]; + /* 0x04 */ s32 unk_04; +} unk_func_8830867C_02C_C54_024; // size >= 0x8 + +typedef struct unk_func_8830867C_02C_C54 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ u8 unk_08; + /* 0x09 */ u8 unk_09; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ s32 unk_10; + /* 0x14 */ unk_func_8830867C_02C_C54_014 unk_14; + /* 0x1C */ unk_func_8830867C_02C_C54_01C unk_1C; + /* 0x24 */ unk_func_8830867C_02C_C54_024 unk_24; + /* 0x2C */ u8 unk_2C; +} unk_func_8830867C_02C_C54; // size = 0x30 + +typedef struct unk_func_8830867C_054 { + /* 0x00 */ s16 unk_00; + /* 0x02 */ s16 unk_02; + /* 0x04 */ MemoryPool* unk_04; + /* 0x08 */ unk_func_88001300_000* unk_08; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ s32 unk_10; +} unk_func_8830867C_054; // size >= 0x14 + +typedef struct unk_func_8830867C_02C_0E4 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ unk_func_8820BE14_06C unk_0C; + /* 0x1C */ s32 unk_1C; +} unk_func_8830867C_02C_0E4; // size = 0x20 + +typedef struct unk_func_8830867C_02C_0DC { + /* 0x00 */ s32* unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ char unk0C[0xC]; + /* 0x18 */ s32 unk_18; + /* 0x1C */ char unk1C[0xC]; + /* 0x28 */ s32 unk_28; +} unk_func_8830867C_02C_0DC; // size >= 0x2C + +typedef struct unk_func_8830867C_02C { + /* 0x000 */ unk_func_88001300_000 unk_000; + /* 0x02C */ unk_func_88001300_038* unk_02C; + /* 0x030 */ unk_func_8850B254* unk_030; + /* 0x034 */ unk_func_8830867C_02C_034* unk_034; + /* 0x038 */ unk_func_88500994* unk_038; + /* 0x03C */ unk_func_88200FA0_030_038 unk_03C; + /* 0x048 */ unk_func_8830867C_02C_048* unk_048; + /* 0x04C */ unk_func_8830867C_02C_04C* unk_04C; + /* 0x050 */ unk_func_8830867C_02C_050* unk_050; + /* 0x054 */ unk_func_88001300_000* unk_054; + /* 0x058 */ unk_func_88001300_000* unk_058; + /* 0x05C */ unk_func_88001300_000* unk_05C; + /* 0x060 */ unk_func_88001300_000* unk_060; + /* 0x064 */ unk_func_88001300_000* unk_064; + /* 0x068 */ unk_func_88001300_000* unk_068; + /* 0x06C */ unk_func_88001300_000* unk_06C; + /* 0x070 */ unk_func_88001300_000* unk_070; + /* 0x074 */ unk_func_88001300_000* unk_074; + /* 0x078 */ unk_func_88001300_000* unk_078; + /* 0x07C */ unk_func_88001300_000* unk_07C; + /* 0x080 */ unk_func_88001300_000* unk_080; + /* 0x084 */ unk_func_88001300_000* unk_084; + /* 0x088 */ unk_func_88001300_000* unk_088; + /* 0x08C */ unk_func_8830867C_030* unk_08C; + /* 0x090 */ unk_func_88509F48* unk_090; + /* 0x094 */ unk_func_8830867C_034* unk_094; + /* 0x098 */ unk_func_8830867C_038* unk_098; + /* 0x09C */ unk_func_8830867C_03C* unk_09C; + /* 0x0A0 */ unk_func_8830867C_040* unk_0A0; + /* 0x0A4 */ unk_func_8830867C_044* unk_0A4; + /* 0x0A8 */ unk_func_8830867C_048* unk_0A8; + /* 0x0AC */ unk_func_8830867C_04C* unk_0AC; + /* 0x0B0 */ unk_func_889000C4* unk_0B0; + /* 0x0B4 */ unk_func_8830867C_02C_0B4* unk_0B4; + /* 0x0B8 */ unk_func_8850CD44* unk_0B8; + /* 0x0BC */ unk_func_882173EC* unk_0BC; + /* 0x0C0 */ unk_func_8830867C_02C_0C0* unk_0C0; + /* 0x0C4 */ unk_func_882173EC* unk_0C4; + /* 0x0C8 */ unk_func_882173EC* unk_0C8; + /* 0x0CC */ unk_func_88200FA0_030_038 unk_0CC; + /* 0x0D8 */ s32 unk_0D8; + /* 0x0DC */ unk_func_8830867C_02C_0DC* unk_0DC; + /* 0x0E0 */ s32 unk_0E0; + /* 0x0E4 */ unk_func_8830867C_02C_0E4 unk_0E4[3]; + /* 0x144 */ unk_func_8830867C_02C_144 unk_144; + /* 0x150 */ char unk150[0x4]; + /* 0x154 */ unk_func_8830867C_02C_154 unk_154[3]; + /* 0x1A8 */ unk_func_8830867C_02C_1A8 unk_1A8[3]; + /* 0x1D8 */ char unk1D8[0xA70]; + /* 0xC48 */ unk_func_88200FA0_030_038 unk_C48; + /* 0xC54 */ unk_func_8830867C_02C_C54 unk_C54; + /* 0xC84 */ unk_func_8830867C_02C_C54 unk_C84; + /* 0xCB4 */ s32 unk_CB4; + /* 0xCB8 */ s32 unk_CB8; + /* 0xCBC */ s32 unk_CBC; + /* 0xCC0 */ s32 unk_CC0; + /* 0xCC4 */ s32 unk_CC4; + /* 0xCC8 */ s32 unk_CC8; + /* 0xCCC */ unk_func_8850878C* unk_CCC; + /* 0xCD0 */ s32 unk_CD0; + /* 0xCD4 */ s32* unk_CD4; + /* 0xCD8 */ FragmentEntry unk_CD8; + /* 0xCDC */ unk_func_8830867C_054* unk_CDC; +} unk_func_8830867C_02C; // size = 0xCE0 + +typedef struct unk_func_8830867C { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_8830867C_02C* unk_2C; + /* 0x30 */ unk_func_8830867C_030* unk_30; + /* 0x34 */ unk_func_8830867C_034* unk_34; + /* 0x38 */ unk_func_8830867C_038* unk_38; + /* 0x3C */ unk_func_8830867C_03C* unk_3C; + /* 0x40 */ unk_func_8830867C_040* unk_40; + /* 0x44 */ unk_func_8830867C_044* unk_44; + /* 0x48 */ unk_func_8830867C_048* unk_48; + /* 0x4C */ unk_func_8830867C_04C* unk_4C; + /* 0x50 */ unk_func_889000C4* unk_50; + /* 0x54 */ unk_func_8830867C_054 unk_54; + /* 0x68 */ unk_func_88001300_000* unk_68; + /* 0x6C */ s32 unk_6C; + /* 0x70 */ char** unk_70; + /* 0x74 */ char** unk_74; + /* 0x78 */ char** unk_78; + /* 0x7C */ char** unk_7C; + /* 0x80 */ char** unk_80; + /* 0x84 */ char** unk_84; + /* 0x88 */ char** unk_88; +} unk_func_8830867C; // size = 0x8C + +typedef struct unk_func_88302D98 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_8830867C_02C* unk_2C; +} unk_func_88302D98; // size = 0x30 + +typedef struct unk_func_88304850_arg2 { + /* 0x00 */ s32* unk_00; + /* 0x04 */ char unk04[4]; + /* 0x08 */ u8 unk_08; + /* 0x09 */ char unk09[0xD]; + /* 0x16 */ s16 unk_16; + /* 0x18 */ char unk18[0x14]; + /* 0x2C */ u8 unk_2C; + /* 0x2E */ s16 unk_2E; + /* 0x30 */ s16 unk_30; + /* 0x32 */ s16 unk_32; + /* 0x34 */ s16 unk_34; + /* 0x36 */ s16 unk_36; + /* 0x38 */ char unk_38[4]; + /* 0x3C */ char unk3C[0x4]; + /* 0x40 */ char unk_40[3]; + /* 0x43 */ char unk_43[1]; +} unk_func_88304850_arg2; // size >= 0x44 + +typedef struct unk_func_88309C38_arg2_004 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ Color_RGBA8 unk_04; +} unk_func_88309C38_arg2_004; // size >= 0x8 + +typedef struct unk_func_88309C38_arg2_00C { + /* 0x00 */ char unk00[0x14]; + /* 0x14 */ s32 unk_14; + /* 0x18 */ s32 unk_18; +} unk_func_88309C38_arg2_00C; // size >= 0x1C + +typedef struct unk_func_88309C38_arg2 { + /* 0x00 */ u8 unk_00; + /* 0x01 */ u8 unk_01; + /* 0x04 */ unk_func_88309C38_arg2_004* unk_04; + /* 0x08 */ char unk08[0x4]; + /* 0x0C */ unk_func_88309C38_arg2_00C* unk_0C; + /* 0x10 */ char unk10[0x4]; + /* 0x14 */ s32 unk_14; + /* 0x18 */ s32 unk_18; +} unk_func_88309C38_arg2; // size >= 0x1C + +typedef struct unk_func_88309160_arg2 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ char unk08[0x4]; + /* 0x0C */ unk_func_88309C38_arg2_00C* unk_0C; + /* 0x10 */ char unk10[0x4]; + /* 0x14 */ s32 unk_14; + /* 0x18 */ s32 unk_18; +} unk_func_88309160_arg2; // size >= 0x1C + +typedef struct unk_func_88310CA4_arg2 { + /* 0x00 */ u8* unk_00; + /* 0x04 */ u8* unk_04; + /* 0x08 */ char unk08[0x4]; + /* 0x0C */ unk_func_88309C38_arg2_00C* unk_0C; + /* 0x10 */ char unk10[0x4]; + /* 0x14 */ s32 unk_14; + /* 0x18 */ s32 unk_18; +} unk_func_88310CA4_arg2; // size >= 0x1C + +typedef struct unk_func_88310B70 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_8830867C_04C_030* unk_2C; + /* 0x30 */ unk_func_8850878C* unk_30; +} unk_func_88310B70; // size = 0x34 + +typedef struct unk_func_88313894_020 { + /* 0x00 */ char unk00[0xC]; + /* 0x0C */ unk_func_8830867C_02C_0CC_000_000* unk_0C; + /* 0x10 */ char unk10[0x4]; + /* 0x14 */ s32 unk_14; + /* 0x18 */ char unk18[0x4]; + /* 0x1C */ s32 unk_1C; +} unk_func_88313894_020; // size = 0x20 + +typedef struct unk_func_88316128 { + /* 0x00 */ char unk00[0x8]; + /* 0x08 */ u8 unk_08; + /* 0x09 */ char unk09[0xD]; + /* 0x16 */ u16 unk_16; + /* 0x18 */ char unk18[0x14]; + /* 0x2C */ u8 unk_2C; + /* 0x2E */ u16 unk_2E; + /* 0x30 */ u16 unk_30; + /* 0x32 */ u16 unk_32; + /* 0x34 */ u16 unk_34; + /* 0x36 */ u16 unk_36; + /* 0x38 */ u8 unk_38; + /* 0x39 */ char unk39[0xA]; + /* 0x43 */ u8 unk_43; +} unk_func_88316128; // size >= 0x44 + +extern char** D_8831A4C0; +extern char** D_8831A4C4; +extern char** D_8831A4C8; +extern char** D_8831A4CC; +extern char** D_8831A4D0; +extern char** D_8831A4D4; +extern char** D_8831A4D8; +extern Color_RGBA8 D_8831727C; +extern Color_RGBA8 D_88317280; +extern Color_RGBA8 D_88317284; +extern u32 D_883176D8[]; +extern u32 D_88317920[]; +extern u32 D_88317F28[]; +extern u32 D_88318530[]; +extern u32 D_883186E8[]; +extern u32 D_88318898[]; +extern u32 D_883198A0[]; +extern unk_D_8831A1F8 D_8831A1F8[]; + +void func_88300020(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88300090(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_883003E4(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88300454(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_88300640(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_883006B0(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_8830089C(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_8830090C(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_88300AF8(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88300B68(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_88300D54(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88300DC4(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_88300FB0(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88301020(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_8830133C(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_883013AC(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_883018D8(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88301948(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_88301B34(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88301BA4(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_88301D90(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88301E00(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_88301FB8(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88302028(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_88302214(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88302284(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_88302470(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_883024E0(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88302748(unk_func_8830867C_02C_050* arg0, s32 arg1, s32 arg2); +void func_8830290C(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +s32 func_88302968(unk_func_88001300_000* arg0, s32 arg1, s32 arg2); +void func_88302BB4(unk_func_8830867C_02C* arg0, MemoryPool* arg1); +void func_88302C18(unk_func_8830867C_02C* arg0); +void func_88302C7C(unk_func_8830867C_02C* arg0, MemoryPool* arg1); +void func_88302D98(unk_func_88302D98* arg0, s32 arg1, s32 arg2, unk_func_8830867C_02C* arg3); +s32 func_88302E04(unk_func_88302D98* arg0, s32 arg1, s32 arg2); +void func_88303520(unk_func_8830867C_02C* arg0); +void func_88304350(s32 arg0, s32 arg1, s32 arg2, u8* arg3, s32 arg4); +void func_88304490(s32 arg0, s32 arg1, s32 arg2, u8* arg3, s32 arg4); +void func_883045C0(s32 arg0, s32 arg1, s32 arg2, unk_func_88304850_arg2* arg3); +void func_88304608(s32 arg0, s32 arg1, s8* arg2, s32 arg3); +void func_88304680(s32 arg0, s32 arg1, char* arg2, s32 arg3); +void func_88304718(s32 arg0, s32 arg1, char* arg2, s32 arg3, u8* arg4); +s32 func_883047CC(unk_func_8830867C_02C* arg0, unk_func_88304850_arg2* arg1); +void func_88304850(s32 arg0, s32 arg1, unk_func_88304850_arg2* arg2, s32 arg3, s32 arg4, + unk_func_8830867C_02C_034* arg5); +void func_883050CC(unk_func_8830867C_02C* arg0); +void func_88305168(unk_func_8830867C_02C* arg0); +void func_883051B0(unk_func_8830867C_02C* arg0); +void func_883051F8(unk_func_8830867C_02C* arg0); +s32 func_88305220(unk_func_8830867C_02C* arg0, s32 arg1); +void func_88305230(unk_func_8830867C_02C* arg0, s32 arg1); +void func_88305240(unk_func_8830867C_02C* arg0, s32 arg1); +s32 func_88305254(unk_func_8830867C_02C* arg0, s32 arg1); +void func_88305268(unk_func_8830867C_02C* arg0, s32 arg1); +void func_88305270(unk_func_8830867C_02C* arg0); +s32 func_88305458(unk_func_8830867C_02C* arg0); +s32 func_883054DC(unk_func_8830867C_02C_0CC* arg0, unk_func_8830867C_02C_0CC_000* arg1); +void func_88305520(unk_func_8830867C_02C* arg0, unk_func_8830867C_02C_0CC_000* arg1, Controller* arg2); +void func_883057F4(unk_func_8830867C_02C_0CC_000_000* arg0); +void func_88305830(unk_func_8830867C_02C* arg0, unk_func_8830867C_02C_0CC_000* arg1, s32 arg2, s32 arg3); +void func_88305C7C(unk_func_8830867C_02C_0CC_000_008* arg0, s32 arg1); +void func_88305CDC(unk_func_8830867C_02C_0CC_000* arg0, unk_func_8830867C_04C_030_02C_000* arg1, s32 arg2); +void func_88305D7C(unk_func_8830867C_02C* arg0, s32 arg1); +s32 func_88305DA8(unk_func_8830867C_02C* arg0, Controller* arg1); +void func_88305DF4(unk_func_8830867C_02C* arg0, Controller* arg1); +void func_88305F28(unk_func_8830867C_02C* arg0); +s32 func_88306544(unk_func_8830867C_02C* arg0, Controller* arg1); +s32 func_8830681C(unk_func_8830867C_02C* arg0, Controller* arg1); +s32 func_88306C70(unk_func_8830867C_02C* arg0, unk_func_88001300_000* arg1, s32 arg2, Controller* arg3); +u32 func_88306F90(unk_func_8830867C_02C* arg0); +void func_88306FE4(void); +void func_88306FEC(unk_func_8830867C_02C_048* arg0, unk_func_8830867C_02C* arg1); +void func_88307038(unk_func_8830867C_02C* arg0, s32 arg1); +void func_88307110(unk_func_8830867C_02C* arg0); +s32 func_88307250(unk_func_8830867C_02C* arg0); +s32 func_88307264(unk_func_8830867C_02C* arg0, Controller* arg1, s32 arg2); +void func_883073E8(unk_func_8830867C_02C* arg0, s32 arg1); +void func_88307478(unk_func_8830867C_02C_048* arg0); +void func_883074D4(unk_func_8830867C_02C_048* arg0, Controller* arg1); +s32 func_8830757C(unk_func_8830867C_02C_048* arg0, Controller* arg1); +s32 func_88307628(unk_func_8830867C_02C_048* arg0, Controller* arg1); +s32 func_8830772C(unk_func_8830867C_02C_048* arg0, Controller* arg1, s32 arg2); +s32 func_88307C2C(unk_func_8830867C_02C_048* arg0, Controller* arg1, s32 arg2); +s32 func_8830858C(unk_func_8830867C_02C_048* arg0, Controller* arg1); +void func_88308D60(unk_func_8830867C* arg0); +void func_88308DFC(unk_func_8830867C* arg0); +s32 func_88308E84(UNUSED s32 arg0, UNUSED s32 arg1); + +void func_883092C8(unk_func_8830867C_04C_078* arg0, s32 arg1, s32 arg2, MemoryPool* arg3); +void func_883094CC(unk_func_8830867C_04C_078* arg0, unk_func_80026268_arg0* arg1); +void func_88309614(unk_func_8830867C_04C_078* arg0); +void func_883096BC(unk_func_8830867C_04C_078* arg0); +s32 func_88309728(unk_func_8830867C_04C_078* arg0, Controller* arg1); +void func_88309774(unk_func_8830867C_04C_078* arg0); +void func_883097D4(unk_func_8830867C_04C_078* arg0); +void func_883097E4(void); +s32 func_883097EC(unk_func_8830867C_034_03C_038_02C_000* arg0); +void func_88309808(void); +void func_88309810(unk_func_8830867C_034_03C* arg0); +void func_883098D0(unk_func_8830867C_034_03C* arg0, s32 arg1); +void func_88309960(unk_func_8830867C_034_03C* arg0); +void func_883099D8(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +s32 func_88309DC8(void); +void func_88309E28(unk_func_8830867C_034_03C* arg0, s32 arg1, s32 arg2, s32 arg3, MemoryPool* arg4); +s32 func_8830A474(unk_func_8830867C_034_03C* arg0, Controller* arg1); +void func_8830A520(unk_func_8830867C_034_03C* arg0, s32 arg1); +void func_8830A578(unk_func_8830867C_034_034* arg0, s32 arg1, s32 arg2, s32 arg3); +s32 func_8830A5E4(unk_func_8830867C_034_034* arg0, s32 arg1, s32 arg2); +s32 func_8830A840(unk_func_8830867C_02C_144_000* arg0); +void func_8830A88C(unk_func_8830867C_034* arg0, unk_func_8830867C_034_03C* arg1); +void func_8830A928(unk_func_8830867C_034* arg0); +void func_8830A9D8(unk_func_8830867C_034* arg0); +void func_8830AAA4(unk_func_8830867C_034* arg0, s32 arg1); +s32 func_8830AC0C(void); +void func_8830ACA0(unk_func_8830867C_034* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4); +void func_8830B2EC(unk_func_8830867C_034* arg0, unk_func_8830867C_02C_144* arg1); +void func_8830B354(unk_func_8830867C_034* arg0, s32 arg1); +s32 func_8830B380(unk_func_8830867C_034* arg0, Controller* arg1); +void func_8830B404(unk_func_8830867C_034_038* arg0, unk_func_8830867C_034* arg1); +s32 func_8830B450(unk_func_8830867C_034_038* arg0, Controller* arg1); +void func_8830B8A0(unk_func_8830867C_034* arg0); +void func_8830B938(unk_func_8830867C_034* arg0); +s32 func_8830B954(unk_func_8830867C_034* arg0, Controller* arg1); +void func_8830BA1C(s32 arg0, s32 arg1, char* arg2, s32 arg3, s32 arg4); +void func_8830BAC4(unk_func_8830867C_030* arg0, unk_func_88001300_000* arg1, MemoryPool* arg2); +void func_8830BCE8(unk_func_8830867C_030* arg0, char** arg1, s32 arg2); +void func_8830BE3C(unk_func_8830867C_030* arg0); +void func_8830BF30(unk_func_8830867C_030* arg0, s32 arg1); +s32 func_8830BF5C(unk_func_8830867C_030* arg0, Controller* arg1); +void func_8830BFE0(unk_func_8830867C_030* arg0, s32 arg1); +void func_8830C048(unk_func_8830867C_030* arg0); +u32 func_8830C058(unk_func_8830867C_030* arg0, Controller* arg1, s32 arg2); +void func_8830C150(s32 arg0, s32 arg1, char* arg2, s32 arg3, s32 arg4); +void func_8830C218(unk_func_8830867C_038* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4); +void func_8830CD4C(unk_func_8830867C_038* arg0, s32 arg1); +s32 func_8830CE00(unk_func_8830867C_038* arg0, Controller* arg1); +s32 func_8830CE84(unk_func_8830867C_038* arg0, Controller* arg1); +void func_8830CF88(unk_func_8830867C_044_038* arg0); +void func_8830CFBC(unk_func_8830867C_044_038* arg0, s32 arg1, s32 arg2, MemoryPool* arg3); +void func_8830D0B4(unk_func_8830867C_044_038* arg0, s32 arg1); +s32 func_8830D11C(unk_func_8830867C_044_038* arg0, s32 arg1, s32 arg2); +s32 func_8830D268(unk_func_8830867C_044_038* arg0, Controller* arg1); +void func_8830D2F8(unk_func_8830867C_044* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4); +void func_8830DAB8(unk_func_8830867C_044* arg0, s32 arg1, s32 arg2, s32 arg3); +void func_8830DBE0(unk_func_8830867C_044* arg0, s32 arg1); +s32 func_8830DC0C(unk_func_8830867C_044* arg0, Controller* arg1); +s32 func_8830DC58(unk_func_8830867C_044* arg0, Controller* arg1); +void func_8830DD8C(unk_func_8830867C_044_040* arg0, unk_func_8830867C_044* arg1); +s32 func_8830DDD8(unk_func_8830867C_044_040* arg0, Controller* arg1); +void func_8830E4A4(unk_func_8830867C_03C* arg0, unk_func_8850878C* arg1, char* arg2); +void func_8830E504(unk_func_8830867C_03C* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4); +void func_8830EE58(unk_func_8830867C_03C* arg0, unk_func_8830867C_02C_C54_01C* arg1); +void func_8830F05C(unk_func_8830867C_03C* arg0, unk_func_8830867C_02C_C54_01C* arg1); +void func_8830F09C(unk_func_8830867C_03C* arg0, s32 arg1); +s32 func_8830F0C8(unk_func_8830867C_03C* arg0, Controller* arg1); +s32 func_8830F114(unk_func_8830867C_03C* arg0, Controller* arg1); +void func_8830F254(unk_func_8830867C_03C_04C* arg0, unk_func_8830867C_03C* arg1); +s32 func_8830F2A0(unk_func_8830867C_03C_04C* arg0, Controller* arg1); +void func_8830FA10(void); +void func_8830FA18(void); +void func_8830FA20(unk_func_8830867C_040* arg0, unk_func_8850878C* arg1, char* arg2); +void func_8830FA80(unk_func_8830867C_040* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4); +void func_883103CC(unk_func_8830867C_040* arg0, unk_func_8830867C_02C_C54_024* arg1); +void func_883105D4(unk_func_8830867C_040* arg0, unk_func_8830867C_02C_C54_024* arg1); +void func_88310650(unk_func_8830867C_040* arg0, s32 arg1); +s32 func_8831067C(unk_func_8830867C_040* arg0, Controller* arg1); +s32 func_883106C8(unk_func_8830867C_040* arg0, Controller* arg1); +void func_88310808(unk_func_8830867C_040_05C* arg0, unk_func_8830867C_040* arg1); +s32 func_88310854(unk_func_8830867C_040_05C* arg0, Controller* arg1); +void func_88310B70(unk_func_88310B70* arg0, s32 arg1, s32 arg2, unk_func_8830867C_04C_030* arg3, MemoryPool* arg4); +s32 func_88310C38(unk_func_88310B70* arg0); +void func_883112B0(unk_func_8830867C_04C* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4); +s32 func_88311C64(s32 arg0, s32 arg1); +s32 func_88311D6C(s32 arg0, unk_func_8830867C_02C_0CC_000_008* arg1); +s32 func_88311E28(unk_func_8830867C_02C_0CC_000_008* arg0); +s32 func_88311EB4(s32 arg0, unk_func_8830867C_02C_0CC_000_008* arg1); +void func_88311F70(unk_func_8830867C_04C* arg0, unk_func_88200FA0_030_038* arg1); +void func_88312018(unk_func_8830867C_04C* arg0, unk_func_80026268_arg0* arg1); +void func_88312020(unk_func_8830867C_04C* arg0); +void func_88312108(unk_func_8830867C_04C* arg0); +void func_88312188(unk_func_8830867C_04C* arg0, s32 arg1); +void func_883121F0(unk_func_8830867C_04C* arg0, s32 arg1); +s32 func_8831221C(unk_func_8830867C_04C* arg0, s32* arg1); +void func_88312298(unk_func_8830867C_04C_080* arg0, unk_func_8830867C_04C* arg1); +s32 func_883122E4(unk_func_8830867C_04C_080* arg0); +s32 func_8831239C(unk_func_8830867C_04C_080* arg0); +void func_8831247C(unk_func_8830867C_04C_080* arg0); +s32 func_883125B4(unk_func_8830867C_04C_080* arg0, Controller* arg1); +s32 func_8831286C(unk_func_8830867C_04C* arg0, Controller* arg1); +void func_883128B8(unk_func_8830867C_04C* arg0); +void func_883128FC(unk_func_8830867C_04C* arg0); +s32 func_88312998(unk_func_8830867C_04C* arg0, Controller* arg1); +void func_88312B10(s32 arg0, s32 arg1, unk_func_88309160_arg2* arg2, s32 arg3, s32 arg4, unk_func_88200FA0_030_030_1CEA00* arg5); +void func_88312C7C(s32 arg0, s32 arg1, unk_func_88309160_arg2* arg2, s32 arg3, s32 arg4, unk_func_88200FA0_030_030_1CEA00* arg5); +void func_88312D7C(unk_func_8830867C_048* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4); +void func_88313740(unk_func_8830867C_048* arg0, unk_func_8830867C_02C_144* arg1); +void func_883137C4(unk_func_88200FA0_030_030_1CEA00* arg0, unk_func_8830867C_02C_0CC_000* arg1, unk_func_88313894_020* arg2); +void func_88313894(unk_func_8830867C_048* arg0, unk_func_8830867C_02C_0CC_000* arg1); +void func_88313950(char* arg0, s32 arg1, s32 arg2); +void func_883139E8(unk_func_8830867C_048* arg0, s32 arg1, s32 arg2); +void func_88313A34(unk_func_8830867C_048* arg0); +void func_88313A94(unk_func_8830867C_048* arg0); +void func_88313B4C(unk_func_8830867C_048* arg0); +void func_88313B64(unk_func_8830867C_048* arg0, s32 arg1); +s32 func_88313B90(unk_func_8830867C_048* arg0, Controller* arg1); +void func_88313C24(unk_func_8830867C_048_048* arg0, unk_func_8830867C_048* arg1); +s32 func_88313C70(unk_func_8830867C_048_048* arg0, Controller* arg1); +s32 func_88313E50(unk_func_8830867C_048* arg0, Controller* arg1); +void func_88313F24(s32 arg0, s32 arg1, s8* arg2, s32 arg3); +void func_88313FA0(unk_func_8830867C_02C_0B4* arg0, s32 arg1, s32 arg2, MemoryPool* arg3); +s32 func_883142F4(unk_func_8830867C_02C_0B4* arg0, Controller* arg1); +s32 func_88314340(unk_func_8830867C_02C_0B4* arg0, Controller* arg1); +void func_88314484(unk_func_882173EC* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +s32 func_88314518(unk_func_882173EC* arg0); +s32 func_88314574(unk_func_882173EC* arg0, s32 arg1, s32 arg2); +void func_88314920(unk_func_882173EC* arg0, s32 arg1, s32 arg2, unk_func_88001300_000_010 arg3); +void func_88314950(unk_func_8830867C_02C_0C0* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +s32 func_883149E4(unk_func_8830867C_02C_0C0* arg0); +s32 func_88314A38(unk_func_8830867C_02C_0C0* arg0, s32 arg1, s32 arg2); +void func_883151B8(unk_func_8830867C_02C_0C0* arg0, s32 arg1, s32 arg2, s32 arg3, unk_func_88001300_000_010 arg4); +void func_883151E8(unk_func_882173EC* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +s32 func_8831527C(unk_func_882173EC* arg0); +s32 func_883152D0(unk_func_882173EC* arg0, s32 arg1, s32 arg2); +void func_883156B8(unk_func_882173EC* arg0, char* arg1, char* arg2, unk_func_88001300_000_010 arg3); +void func_883156E8(unk_func_882173EC* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +s32 func_8831577C(unk_func_882173EC* arg0); +void func_883157D0(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6); +s32 func_88315A6C(unk_func_882173EC* arg0, s32 arg1, s32 arg2); +void func_88315C98(unk_func_882173EC* arg0, s32 arg1, s32 arg2, unk_func_88001300_000_010 arg3); + +s32 func_88315CD0(unk_func_88316128*, unk_func_88316128*); +s32 func_88315D48(unk_func_88316128*, unk_func_88316128*); +s32 func_88315D8C(unk_func_88316128*, unk_func_88316128*); +s32 func_88315DD0(unk_func_88316128*, unk_func_88316128*); +s32 func_88315E14(unk_func_88316128*, unk_func_88316128*); +s32 func_88315E58(unk_func_88316128*, unk_func_88316128*); +s32 func_88315E9C(unk_func_88316128*, unk_func_88316128*); +s32 func_88315EE0(unk_func_88316128*, unk_func_88316128*); +s32 func_88315F24(unk_func_88316128*, unk_func_88316128*); +s32 func_88315F68(unk_func_88316128*, unk_func_88316128*); +s32 func_88315FAC(unk_func_88316128*, unk_func_88316128*); +s32 func_88315FF0(unk_func_88316128*, unk_func_88316128*); +s32 func_88316034(unk_func_88316128*, unk_func_88316128*); +s32 func_88316078(unk_func_88316128*, unk_func_88316128*); +s32 func_883160BC(unk_func_8830867C_02C_0CC*, unk_func_8830867C_02C_0CC*); +s32 func_883160DC(unk_func_88316128* arg0, unk_func_88316128* arg1); +s32 func_88316128(unk_func_88316128*, unk_func_88316128*); +s32 func_88316174(unk_func_8830867C_02C_0CC*, unk_func_8830867C_02C_0CC*); +s32 func_883161D0(unk_func_8830867C_02C_0CC*, unk_func_8830867C_02C_0CC*); +int func_88316214(unk_func_8830867C_02C_0CC* arg0, u8* arg1); +s32 func_88316240(unk_func_8830867C_02C_0CC* arg0, unk_func_8830867C_02C_C54_01C* arg1); +s32 func_88316304(unk_func_8830867C_02C_0CC* arg0, unk_func_8830867C_02C_C54_024* arg1); +s32 func_883163A4(unk_func_8830867C_02C_0CC* arg0, s32* arg1); +s32 func_883163B8(unk_func_8830867C_02C_0CC* arg0, unk_func_8830867C_02C_C54_014* arg1); +s32 func_88316480(unk_func_88316128* arg0, u8* arg1); +void func_883164C0(unk_func_8830867C_02C_0E4*, s32, s32, MemoryPool*); +void func_883166A0(unk_func_8830867C_02C_144*); +void func_883167CC(unk_func_88200FA0_030_038*, unk_func_8830867C_02C_144*); +s32 func_883168B4(unk_func_8830867C_02C_144*); +void func_88316A58(unk_func_8830867C_02C_144*, s32); +void func_88316BEC(unk_func_8830867C_02C_154*, MemoryPool* arg1); +void func_88316D5C(unk_func_8830867C_02C_154*); +void func_88316DB8(unk_func_8830867C_02C_154*); +void func_88316F98(unk_func_88200FA0_030_038*, unk_func_8830867C_02C_1A8*, unk_func_8830867C_02C_154*, s32, s32); +void func_88317144(unk_func_8830867C_04C_030_02C_000*); + + +#endif // _FRAGMENT24_H_ diff --git a/src/fragments/24/fragment24_1CEA00.c b/src/fragments/24/fragment24_1CEA00.c index 2a51ea6..bbf4a89 100644 --- a/src/fragments/24/fragment24_1CEA00.c +++ b/src/fragments/24/fragment24_1CEA00.c @@ -1,482 +1,3207 @@ -#include "global.h" +#include "fragment24.h" +#include "src/1CF30.h" +#include "src/20330.h" +#include "src/22630.h" +#include "src/26820.h" +#include "src/29BA0.h" +#include "src/2D340.h" +#include "src/2E110.h" +#include "src/225A0.h" +#include "src/2E460.h" +#include "src/3FB0.h" +#include "src/49790.h" +#include "src/memmap.h" +#include "src/memory.h" +#include "src/stage_loader.h" +#include "src/fragments/25/fragment25.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88300020.s") +char** D_8831A4C0; +char** D_8831A4C4; +char** D_8831A4C8; +char** D_8831A4CC; +char** D_8831A4D0; +char** D_8831A4D4; +char** D_8831A4D8; +s32 pad_D_8831A4DC[8]; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88300090.s") +static Color_RGBA8 D_883171D0[] = { + { 0x31, 0x48, 0x6B, 0xFF }, + { 0x47, 0x5E, 0x80, 0xFF }, + { 0x2B, 0x40, 0x5F, 0xFF }, + { 0x31, 0x48, 0x6B, 0xFF }, +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883003E4.s") +void func_88300020(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_88300090; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x26; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88300454.s") +s32 func_88300090(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + u32 temp_t2; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88300640.s") + gDPPipeSync(gDisplayListHead++); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883006B0.s") + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830089C.s") + // clang-format off + temp_t2 = ((D_883171D0[0].r << 8) & 0xF800) | ((D_883171D0[0].g << 3) & 0x7C0) | ((D_883171D0[0].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830090C.s") + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88300AF8.s") + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88300B68.s") + gDPPipeSync(gDisplayListHead++); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88300D54.s") + gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); + gDPSetRenderMode(gDisplayListHead++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetTexturePersp(gDisplayListHead++, G_TP_NONE); + gDPSetTextureFilter(gDisplayListHead++, G_TF_POINT); + gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_DECALRGBA); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88300DC4.s") + gDPLoadTextureBlock(gDisplayListHead++, D_883176D8, G_IM_FMT_IA, G_IM_SIZ_8b, 32, 18, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88300FB0.s") + gSPTextureRectangle(gDisplayListHead++, (arg1 + 4) << 2, (arg2 + 1) << 2, (arg1 + 0x22) << 2, (arg2 + 0x13) << 2, + G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88301020.s") + return 0; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830133C.s") +void func_883003E4(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_88300454; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x5C; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883013AC.s") +s32 func_88300454(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_883171E0 = { 0xF0, 0xF0, 0xF0, 0xFF }; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883018D8.s") + char* sp1C; + s32 temp_t2; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88301948.s") + gDPPipeSync(gDisplayListHead++); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88301B34.s") + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88301BA4.s") + // clang-format off + temp_t2 = ((D_883171D0[1].r << 8) & 0xF800) | ((D_883171D0[1].g << 3) & 0x7C0) | ((D_883171D0[1].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88301D90.s") + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88301E00.s") + func_8001F3F4(); + func_8001F324(D_883171E0.r, D_883171E0.g, D_883171E0.b, D_883171E0.a); + func_8001EBE0(4, 0); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88301FB8.s") + sp1C = func_8002D7C0(NULL, 0, D_8831A4C4, 3); + func_8001F1E8(((arg0->unk_14.unk_00 - func_8001F5B0(0, 0, sp1C)) / 2) + arg1, arg2 + 2, sp1C); + func_8001F444(); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88302028.s") + return 0; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88302214.s") +void func_88300640(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_883006B0; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x5C; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88302284.s") +s32 func_883006B0(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_883171E4 = { 0xF0, 0xF0, 0xF0, 0xFF }; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88302470.s") + char* sp1C; + s32 temp_t2; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883024E0.s") + gDPPipeSync(gDisplayListHead++); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883026CC.s") + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88302748.s") + // clang-format off + temp_t2 = ((D_883171D0[0].r << 8) & 0xF800) | ((D_883171D0[0].g << 3) & 0x7C0) | ((D_883171D0[0].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830290C.s") + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88302968.s") + func_8001F3F4(); + func_8001F324(D_883171E4.r, D_883171E4.g, D_883171E4.b, D_883171E4.a); + func_8001EBE0(4, 0); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88302BB4.s") + sp1C = func_8002D7C0(NULL, 0, D_8831A4C4, 4); + func_8001F1E8(((arg0->unk_14.unk_00 - func_8001F5B0(0, 0, sp1C)) / 2) + arg1, arg2 + 2, sp1C); + func_8001F444(); + return 0; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88302C18.s") +void func_8830089C(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_8830090C; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x34; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88302C7C.s") +s32 func_8830090C(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_883171E8 = { 0xF0, 0xF0, 0xF0, 0xFF }; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88302D98.s") + char* sp1C; + s32 temp_t2; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88302E04.s") + gDPPipeSync(gDisplayListHead++); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88303520.s") + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883036AC.s") + // clang-format off + temp_t2 = ((D_883171D0[1].r << 8) & 0xF800) | ((D_883171D0[1].g << 3) & 0x7C0) | ((D_883171D0[1].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88304350.s") + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88304490.s") + func_8001F3F4(); + func_8001F324(D_883171E8.r, D_883171E8.g, D_883171E8.b, D_883171E8.a); + func_8001EBE0(4, 0); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883045C0.s") + sp1C = func_8002D7C0(NULL, 0, D_8831A4C4, 5); + func_8001F1E8(((arg0->unk_14.unk_00 - func_8001F5B0(0, 0, sp1C)) / 2) + arg1, arg2 + 2, sp1C); + func_8001F444(); + return 0; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88304608.s") +void func_88300AF8(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_88300B68; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x4C; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88304680.s") +s32 func_88300B68(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_883171EC = { 0xF0, 0xF0, 0xF0, 0xFF }; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88304718.s") + char* sp1C; + s32 temp_t2; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883047CC.s") + gDPPipeSync(gDisplayListHead++); + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + // clang-format off + temp_t2 = ((D_883171D0[0].r << 8) & 0xF800) | ((D_883171D0[0].g << 3) & 0x7C0) | ((D_883171D0[0].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); + + func_8001F3F4(); + func_8001F324(D_883171EC.r, D_883171EC.g, D_883171EC.b, D_883171EC.a); + func_8001EBE0(4, 0); + + sp1C = func_8002D7C0(NULL, 0, D_8831A4C4, 6); + func_8001F1E8(((arg0->unk_14.unk_00 - func_8001F5B0(0, 0, sp1C)) / 2) + arg1, arg2 + 2, sp1C); + func_8001F444(); + return 0; +} + +void func_88300D54(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_88300DC4; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x38; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} + +s32 func_88300DC4(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_883171F0 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + char* sp1C; + s32 temp_t2; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + // clang-format off + temp_t2 = ((D_883171D0[1].r << 8) & 0xF800) | ((D_883171D0[1].g << 3) & 0x7C0) | ((D_883171D0[1].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); + + func_8001F3F4(); + func_8001F324(D_883171F0.r, D_883171F0.g, D_883171F0.b, D_883171F0.a); + func_8001EBE0(4, 0); + + sp1C = func_8002D7C0(NULL, 0, D_8831A4C4, 7); + func_8001F1E8(((arg0->unk_14.unk_00 - func_8001F5B0(0, 0, sp1C)) / 2) + arg1, arg2 + 2, sp1C); + func_8001F444(); + return 0; +} + +void func_88300FB0(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_88301020; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x90; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} + +s32 func_88301020(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_883171F4 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + char* sp54; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + { + // clang-format off + s32 temp_t3 = ((D_883171D0[0].r << 8) & 0xF800) | ((D_883171D0[0].g << 3) & 0x7C0) | ((D_883171D0[0].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + gDPSetFillColor(gDisplayListHead++, (temp_t3 << 0x10) | temp_t3); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, arg1 + 0x47, (arg2 + arg0->unk_14.unk_02) - 1); + } + + { + // clang-format off + s32 sp34 = ((D_883171D0[1].r << 8) & 0xF800) | ((D_883171D0[1].g * 8) & 0x7C0) | ((D_883171D0[1].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + gDPSetFillColor(gDisplayListHead++, (sp34 << 0x10) | sp34); + gDPFillRectangle(gDisplayListHead++, arg1 + 0x48, arg2, (arg1 + (u32)arg0->unk_14.unk_00) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); + } + + func_8001F3F4(); + func_8001F324(D_883171F4.r, D_883171F4.g, D_883171F4.b, D_883171F4.a); + func_8001EBE0(4, 0); + + sp54 = func_8002D7C0(NULL, 0, D_8831A4C4, 8); + func_8001F1E8(((0x48 - func_8001F5B0(0, 0, sp54)) / 2) + arg1, arg2 + 2, sp54); + + sp54 = func_8002D7C0(NULL, 0, D_8831A4C4, 9); + func_8001F1E8(((0x48 - func_8001F5B0(0, 0, sp54)) / 2) + arg1 + 0x48, arg2 + 2, sp54); + + func_8001F444(); + return 0; +} + +void func_8830133C(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_883013AC; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x1A4; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} + +s32 func_883013AC(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_883171F8 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + char* temp_v0_16; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + { + // clang-format off + s32 temp_t3 = ((D_883171D0[0].r << 8) & 0xF800) | ((D_883171D0[0].g << 3) & 0x7C0) | ((D_883171D0[0].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (temp_t3 << 0x10) | temp_t3); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, arg1 + 0x68, (arg2 + arg0->unk_14.unk_02) - 1); + } + + { + // clang-format off + s32 sp5C = ((D_883171D0[1].r << 8) & 0xF800) | ((D_883171D0[1].g << 3) & 0x7C0) | ((D_883171D0[1].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (sp5C << 0x10) | sp5C); + gDPFillRectangle(gDisplayListHead++, arg1 + 0x69, arg2, arg1 + 0xD1, (arg2 + arg0->unk_14.unk_02) - 1); + } + + { + // clang-format off + s32 temp_a2 = ((D_883171D0[0].r << 8) & 0xF800) | ((D_883171D0[0].g << 3) & 0x7C0) | ((D_883171D0[0].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (temp_a2 << 0x10) | temp_a2); + gDPFillRectangle(gDisplayListHead++, arg1 + 0xD2, arg2, arg1 + 0x13A, (arg2 + arg0->unk_14.unk_02) - 1); + } + + { + // clang-format off + s32 temp_a0 = ((D_883171D0[1].r << 8) & 0xF800) | ((D_883171D0[1].g << 3) & 0x7C0) | ((D_883171D0[1].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (temp_a0 << 0x10) | temp_a0); + gDPFillRectangle(gDisplayListHead++, arg1 + 0x13B, arg2, arg1 + 0x1A3, (arg2 + arg0->unk_14.unk_02) - 1); + } + + func_8001F3F4(); + func_8001F324(D_883171F8.r, D_883171F8.g, D_883171F8.b, D_883171F8.a); + func_8001EBE0(4, 0); + + temp_v0_16 = func_8002D7C0(NULL, 0, D_8831A4C4, 0xA); + func_8001F1E8(((0x69 - func_8001F5B0(0, 0, temp_v0_16)) / 2) + arg1, arg2 + 2, temp_v0_16); + + temp_v0_16 = func_8002D7C0(NULL, 0, D_8831A4C4, 0xB); + func_8001F1E8(((0x69 - func_8001F5B0(0, 0, temp_v0_16)) / 2) + arg1 + 0x69, arg2 + 2, temp_v0_16); + + temp_v0_16 = func_8002D7C0(NULL, 0, D_8831A4C4, 0xC); + func_8001F1E8(((0x69 - func_8001F5B0(0, 0, temp_v0_16)) / 2) + arg1 + 0xD2, arg2 + 2, temp_v0_16); + + temp_v0_16 = func_8002D7C0(NULL, 0, D_8831A4C4, 0xD); + func_8001F1E8(((0x69 - func_8001F5B0(0, 0, temp_v0_16)) / 2) + arg1 + 0x13B, arg2 + 2, temp_v0_16); + + func_8001F444(); + return 0; +} + +void func_883018D8(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_88301948; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x46; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} + +s32 func_88301948(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_883171FC = { 0xF0, 0xF0, 0xF0, 0xFF }; + + char* sp1C; + s32 temp_t2; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + // clang-format off + temp_t2 = ((D_883171D0[0].r << 8) & 0xF800) | ((D_883171D0[0].g << 3) & 0x7C0) | ((D_883171D0[0].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); + + func_8001F3F4(); + func_8001F324(D_883171FC.r, D_883171FC.g, D_883171FC.b, D_883171FC.a); + func_8001EBE0(4, 0); + + sp1C = func_8002D7C0(NULL, 0, D_8831A4C4, 0xE); + func_8001F1E8(((arg0->unk_14.unk_00 - func_8001F5B0(0, 0, sp1C)) / 2) + arg1, arg2 + 2, sp1C); + + func_8001F444(); + return 0; +} + +void func_88301B34(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_88301BA4; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x46; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} + +s32 func_88301BA4(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_88317200 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + char* sp1C; + s32 temp_t2; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + // clang-format off + temp_t2 = ((D_883171D0[1].r << 8) & 0xF800) | ((D_883171D0[1].g << 3) & 0x7C0) | ((D_883171D0[1].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); + + func_8001F3F4(); + func_8001F324(D_88317200.r, D_88317200.g, D_88317200.b, D_88317200.a); + func_8001EBE0(4, 0); + + sp1C = func_8002D7C0(NULL, 0, D_8831A4C4, 0xF); + func_8001F1E8(((arg0->unk_14.unk_00 - func_8001F5B0(0, 0, sp1C)) / 2) + arg1, arg2 + 2, sp1C); + + func_8001F444(); + return 0; +} + +void func_88301D90(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_88301E00; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x46; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} + +s32 func_88301E00(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_88317204 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + s32 temp_t2; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + // clang-format off + temp_t2 = ((D_883171D0[0].r << 8) & 0xF800) | ((D_883171D0[0].g << 3) & 0x7C0) | ((D_883171D0[0].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); + + func_8001F3F4(); + func_8001F324(D_88317204.r, D_88317204.g, D_88317204.b, D_88317204.a); + func_8001EBE0(4, 0); + func_8001F1E8(arg1 + 4, arg2 + 2, func_8002D7C0(NULL, 0, D_8831A4C4, 0x10)); + func_8001F444(); + return 0; +} + +void func_88301FB8(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_88302028; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x46; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} + +s32 func_88302028(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_88317208 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + char* sp1C; + s32 temp_t2; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + // clang-format off + temp_t2 = ((D_883171D0[1].r << 8) & 0xF800) | ((D_883171D0[1].g << 3) & 0x7C0) | ((D_883171D0[1].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); + + func_8001F3F4(); + func_8001F324(D_88317208.r, D_88317208.g, D_88317208.b, D_88317208.a); + func_8001EBE0(4, 0); + sp1C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x11); + func_8001F1E8(((arg0->unk_14.unk_00 - func_8001F5B0(0, 0, sp1C)) / 2) + arg1, arg2 + 2, sp1C); + func_8001F444(); + return 0; +} + +void func_88302214(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_88302284; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x46; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} + +s32 func_88302284(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_8831720C = { 0xF0, 0xF0, 0xF0, 0xFF }; + + char* sp1C; + s32 temp_t2; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + // clang-format off + temp_t2 = ((D_883171D0[0].r << 8) & 0xF800) | ((D_883171D0[0].g << 3) & 0x7C0) | ((D_883171D0[0].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); + + func_8001F3F4(); + func_8001F324(D_8831720C.r, D_8831720C.g, D_8831720C.b, D_8831720C.a); + func_8001EBE0(4, 0); + sp1C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x12); + func_8001F1E8(((arg0->unk_14.unk_00 - func_8001F5B0(0, 0, sp1C)) / 2) + arg1, arg2 + 2, sp1C); + func_8001F444(); + return 0; +} + +void func_88302470(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_883024E0; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; + // clang-format off + arg0->unk_14.unk_00 = 0x46; arg0->unk_14.unk_02 = 0x14; + // clang-format on +} + +s32 func_883024E0(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_88317210 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + char* sp1C; + s32 temp_t2; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + // clang-format off + temp_t2 = ((D_883171D0[1].r << 8) & 0xF800) | ((D_883171D0[1].g << 3) & 0x7C0) | ((D_883171D0[1].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_14.unk_02) - 1); + + func_8001F3F4(); + func_8001F324(D_88317210.r, D_88317210.g, D_88317210.b, D_88317210.a); + func_8001EBE0(4, 0); + sp1C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x13); + func_8001F1E8(((arg0->unk_14.unk_00 - func_8001F5B0(0, 0, sp1C)) / 2) + arg1, arg2 + 2, sp1C); + func_8001F444(); + return 0; +} + +void func_883026CC(unk_func_8830867C_02C_050* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, + unk_func_8830867C_02C* arg5) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_02C_050)); + arg0->unk_00.unk_18 = func_88302748; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + arg0->unk_00.unk_14.unk_00 = arg3; + arg0->unk_00.unk_14.unk_02 = arg4; + arg0->unk_2C = arg5; +} + +s32 func_88302748(unk_func_8830867C_02C_050* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_88317214 = { 0xFF, 0xFF, 0xFF, 0xFF }; + + s32 temp_t7; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + { + s32 temp_t7 = ((D_88317214.r << 8) & 0xF800) | ((D_88317214.g << 3) & 0x7C0) | ((D_88317214.b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_t7 << 0x10) | temp_t7); + gDPFillRectangle(gDisplayListHead++, arg1, arg2 + 0x14, (arg0->unk_00.unk_14.unk_00 + arg1) - 1, arg2 + 0x15); + } + + { + s32 temp_t7 = ((D_88317214.r << 8) & 0xF800) | ((D_88317214.g << 3) & 0x7C0) | ((D_88317214.b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_t7 << 0x10) | temp_t7); + gDPFillRectangle(gDisplayListHead++, arg1 + 0x82, arg2, arg1 + 0x83, arg2 + 0x12D); + } + + return 0; +} + +void func_8830290C(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88001300_000)); + arg0->unk_18 = func_88302968; + arg0->unk_10.unk_00 = arg1; + arg0->unk_10.unk_02 = arg2; +} + +s32 func_88302968(unk_func_88001300_000* arg0, s32 arg1, s32 arg2) { + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_COPY); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + gDPSetAlphaCompare(gDisplayListHead++, G_AC_THRESHOLD); + gDPSetTexturePersp(gDisplayListHead++, G_TP_NONE); + + gDPLoadTextureBlock(gDisplayListHead++, D_883198A0, G_IM_FMT_RGBA, G_IM_SIZ_16b, 40, 28, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSPTextureRectangle(gDisplayListHead++, (arg1 + 0x100) << 2, (arg2 + 2) << 2, (arg1 + 0x127) << 2, + (arg2 + 0x1D) << 2, G_TX_RENDERTILE, 0, 0, 0x1000, 0x0400); + + gDPPipeSync(gDisplayListHead++); + + gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); + return 0; +} + +void func_88302BB4(unk_func_8830867C_02C* arg0, MemoryPool* arg1) { + s32 i; + + func_88316BEC(arg0->unk_154, arg1); + + for (i = 0; i < 3; i++) { + if (arg0->unk_154[i].unk_04 != 0) { + func_88316D5C(&arg0->unk_154[i]); + } + } +} + +void func_88302C18(unk_func_8830867C_02C* arg0) { + s32 i; + + for (i = 0; i < 3; i++) { + if ((arg0->unk_154[i].unk_04 != 0) && (arg0->unk_154[i].unk_08 != 0)) { + func_88316DB8(&arg0->unk_154[i]); + } + } +} + +void func_88302C7C(unk_func_8830867C_02C* arg0, MemoryPool* arg1) { + UNUSED s32 pad; + + arg0->unk_0E4[0].unk_00 = 0x20; + arg0->unk_0E4[0].unk_04 = func_80029080(); + arg0->unk_0E4[0].unk_08 = 0; + arg0->unk_0E4[0].unk_1C = 6; + func_8002C758(&arg0->unk_0E4[0].unk_0C, 0x1C, 1, arg1); + func_883164C0(&arg0->unk_0E4[0], 6, 1, arg1); + + arg0->unk_0E4[1].unk_00 = 0x21; + arg0->unk_0E4[1].unk_04 = arg0->unk_0E4[0].unk_04; + arg0->unk_0E4[1].unk_08 = 1; + arg0->unk_0E4[1].unk_1C = 0x14; + func_8002C758(&arg0->unk_0E4[1].unk_0C, 0x1C, 0xC, arg1); + func_883164C0(&arg0->unk_0E4[1], 0x14, 0, arg1); + + arg0->unk_0E4[2].unk_00 = 0x11; + arg0->unk_0E4[2].unk_04 = 0; + arg0->unk_0E4[2].unk_08 = 2; + arg0->unk_0E4[2].unk_1C = 0x14; + func_8002C758(&arg0->unk_0E4[2].unk_0C, 0x1C, 0xC, arg1); + func_883164C0(&arg0->unk_0E4[2], 0x14, 0, arg1); + + func_8002C740(&arg0->unk_144, arg0->unk_0E4, 0x20, 3, 3); +} + +void func_88302D98(unk_func_88302D98* arg0, s32 arg1, s32 arg2, unk_func_8830867C_02C* arg3) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88302D98)); + arg0->unk_00.unk_18 = func_88302E04; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + arg0->unk_2C = arg3; +} + +s32 func_88302E04(unk_func_88302D98* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_88317218 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + UNUSED s32 pad[4]; + char spF0[0x10]; + char* spEC; + s32 spE8; + s32 spE4; + + func_8002D600(1, arg0->unk_2C->unk_CD0 + 1); + func_8002D7C0(spF0, 0x20, D_8831A4C4, 2); + func_8001F3F4(); + func_8001F324(D_88317218.r, D_88317218.g, D_88317218.b, D_88317218.a); + func_8001EBE0(8, 0); + spEC = func_8002D7C0(NULL, 0, D_8831A4C4, 1); + spE8 = func_8001F5B0(0, 0, spEC); + func_8001F1E8(arg1 + 0x22, arg2 + 5, spEC); + spE4 = 0x206 - func_8001F5B0(0, 0, spF0); + func_8001F1E8(arg1 + spE4, arg2 + 5, spF0); + func_8001F444(); + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_COPY); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + gDPSetAlphaCompare(gDisplayListHead++, G_AC_THRESHOLD); + gDPSetTexturePersp(gDisplayListHead++, G_TP_NONE); + + gDPLoadTextureBlock(gDisplayListHead++, D_88317920, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 24, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSPTextureRectangle(gDisplayListHead++, (arg1 + 4) << 2, (arg2 + 3) << 2, (arg1 + 0x1D) << 2, (arg2 + 0x1A) << 2, + G_TX_RENDERTILE, 0, 0, 0x1000, 0x0400); + + gDPLoadTextureBlock(gDisplayListHead++, D_88317F28, G_IM_FMT_RGBA, G_IM_SIZ_16b, 32, 24, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSPTextureRectangle(gDisplayListHead++, ((arg1 + spE8) + 0x26) << 2, (arg2 + 3) << 2, ((arg1 + spE8) + 0x3F) << 2, + (arg2 + 0x1A) << 2, G_TX_RENDERTILE, 0, 0, 0x1000, 0x0400); + + gDPLoadTextureBlock(gDisplayListHead++, D_4005570, G_IM_FMT_RGBA, G_IM_SIZ_16b, 28, 26, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSPTextureRectangle(gDisplayListHead++, ((arg1 + spE4) - 0x1E) << 2, (arg2 + 2) << 2, ((arg1 + spE4) - 5) << 2, + (arg2 + 0x1B) << 2, G_TX_RENDERTILE, 0, 0, 0x1000, 0x0400); + + gDPLoadTextureBlock(gDisplayListHead++, D_4004A00, G_IM_FMT_RGBA, G_IM_SIZ_16b, 28, 26, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + gSPTextureRectangle(gDisplayListHead++, (arg1 + 0x20A) << 2, (arg2 + 2) << 2, (arg1 + 0x223) << 2, + (arg2 + 0x1B) << 2, G_TX_RENDERTILE, 0, 0, 0x1000, 0x0400); + + gDPPipeSync(gDisplayListHead++); + + gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); + + return 0; +} + +void func_88303520(unk_func_8830867C_02C* arg0) { + s32 sp1C; + unk_func_8830867C_02C_04C* ptr = arg0->unk_04C; + + sp1C = ptr->unk_24; + + switch (arg0->unk_038->unk_2C) { + case 0: + ptr = arg0->unk_04C; + ptr->unk_18->unk_08 = arg0->unk_058; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_0C = arg0->unk_05C; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_10 = arg0->unk_060; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_14 = arg0->unk_064; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_18 = arg0->unk_068; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_1C = 0; + + if (sp1C >= 7) { + sp1C = 6; + } + break; + + case 1: + ptr = arg0->unk_04C; + ptr->unk_18->unk_08 = arg0->unk_06C; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_0C = 0; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_10 = 0; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_14 = 0; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_18 = 0; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_1C = 0; + + if (sp1C >= 3) { + sp1C = 2; + } + break; + + case 2: + ptr = arg0->unk_04C; + ptr->unk_18->unk_08 = arg0->unk_070; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_0C = arg0->unk_074; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_10 = arg0->unk_078; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_14 = arg0->unk_07C; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_18 = arg0->unk_080; + + ptr = arg0->unk_04C; + ptr->unk_18->unk_1C = arg0->unk_084; + break; + } + + ((func8850CB48)Memmap_GetFragmentVaddr(func_8850CB48))(arg0->unk_04C, sp1C); +} + +void func_883036AC(unk_func_8830867C_02C* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, + unk_func_8830867C_030* arg4, unk_func_8830867C_034* arg5, unk_func_8830867C_038* arg6, + unk_func_8830867C_03C* arg7, unk_func_8830867C_040* arg8, unk_func_8830867C_044* arg9, + unk_func_8830867C_048* argA, unk_func_8830867C_04C* argB, unk_func_889000C4* argC, + FragmentEntry argD, unk_func_8830867C_054* argE, MemoryPool* argF, unk_D_800AC870* arg10) { + static s32 D_8831721C[] = { + 0x0000005C, + 0x00000034, + 0x0000004C, + }; + static s32 D_88317228[] = { 0x38, 0x48, 0x48 }; + static s32 D_88317234[] = { 0x69, 0x69, 0x69, 0x69 }; + static s32 D_88317244[] = { 0x46, 0x46, 0x46, 0x46, 0x46, 0x46 }; + static s32 D_8831725C[] = { + 0x00000000, + 0x00000006, + 0x0000000A, + 0x00000010, + }; + static Color_RGBA8 D_8831726C = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_88317270 = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_88317274 = { 0xFF, 0xFF, 0x00, 0xFF }; + + UNUSED s32 pad[2]; + unk_func_88001300_03C* tmp; + unk_func_88302D98* sp70; + unk_func_88001300_000* sp6C; + unk_func_88001300_000* sp68; + unk_func_88001300_000* sp64; + unk_func_88001300_03C_01C* sp60; + unk_func_8850BD40* sp5C; + unk_func_88507D4C* sp58; + unk_func_88507D4C* sp54; + unk_func_88503298* sp50; + + func_88302C7C(arg0, argF); + func_8002CBC0(&arg0->unk_03C, 0x1E6, argF); + func_8002CBC0(&arg0->unk_0CC, 0x1E6, argF); + func_883166A0(&arg0->unk_144); + + arg0->unk_0DC = D_8831721C; + + func_883167CC(&arg0->unk_03C, &arg0->unk_144); + func_88302BB4(arg0, argF); + + func_8002CBC0(&arg0->unk_C48, 0xAA, argF); + func_88316F98(&arg0->unk_C48, arg0->unk_1A8, arg0->unk_154, 3, 0xAA); + + arg0->unk_08C = arg4; + arg0->unk_094 = arg5; + arg0->unk_098 = arg6; + arg0->unk_09C = arg7; + arg0->unk_0A0 = arg8; + arg0->unk_0A4 = arg9; + arg0->unk_0A8 = argA; + arg0->unk_0AC = argB; + arg0->unk_0B0 = argC; + arg0->unk_CC4 = 0; + arg0->unk_CC8 = 0; + arg0->unk_0D8 = 0; + arg0->unk_CD0 = 0; + arg0->unk_CD4 = D_8831725C; + arg0->unk_0E0 = 0; + arg0->unk_CD8 = argD; + arg0->unk_CDC = argE; + + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_02C)); + + arg0->unk_000.unk_20 = func_88305DA8; + arg0->unk_000.unk_24 = func_88305D7C; + arg0->unk_000.unk_10.unk_00 = arg1; + arg0->unk_000.unk_10.unk_02 = arg2; + + arg0->unk_048 = mem_pool_alloc(argF, sizeof(unk_func_8830867C_02C_048)); + func_88306FEC(arg0->unk_048, arg0); + + arg0->unk_04C = mem_pool_alloc(argF, sizeof(unk_func_88001300_03C)); + ((func8850C284)Memmap_GetFragmentVaddr(func_8850C284))(arg0->unk_04C, 1, 8, argF); + arg0->unk_04C->unk_28 |= 0x200; + arg0->unk_04C->unk_38 = -4; + arg0->unk_04C->unk_3A = -4; + arg0->unk_04C->unk_3C = 8; + arg0->unk_04C->unk_3E = 8; + + arg0->unk_02C = mem_pool_alloc(argF, sizeof(unk_func_88001300_038)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_02C, 0, 0, 0x228, 0x172); + arg0->unk_02C->unk_00.unk_28 |= 0x200; + arg0->unk_02C->unk_00.unk_28 |= 0x400; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_02C); + + arg0->unk_030 = mem_pool_alloc(argF, sizeof(unk_func_8850B254)); + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(arg0->unk_030, 0, 0, 0x228, 0x20, D_8831726C, D_88317270); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_02C, arg0->unk_030); + + sp70 = mem_pool_alloc(argF, sizeof(unk_func_88302D98)); + func_88302D98(sp70, 0, 1, arg0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_030, sp70); + + arg0->unk_088 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_8830290C(arg0->unk_088, 0, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_030, arg0->unk_088); + + arg0->unk_050 = mem_pool_alloc(argF, sizeof(unk_func_8830867C_02C_050)); + func_883026CC(arg0->unk_050, 0, 0x34, 0x228, 0x12E, arg0); + + sp6C = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_88300020(sp6C, 0, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_050, sp6C); + tmp = arg0->unk_04C; + tmp->unk_18[0] = sp6C; + + arg0->unk_054 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_883003E4(arg0->unk_054, 0x26, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_050, arg0->unk_054); + tmp = arg0->unk_04C; + tmp->unk_18[1] = arg0->unk_054; + + arg0->unk_038 = mem_pool_alloc(argF, sizeof(unk_func_88500994)); + ((func88500994)Memmap_GetFragmentVaddr(func_88500994))(arg0->unk_038, 0, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_050, arg0->unk_038); + + sp68 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(sp68, 0x2C); + sp68->unk_10.unk_00 = 0; + sp68->unk_10.unk_02 = 0; + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_038, sp68); + + arg0->unk_058 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_88300640(arg0->unk_058, 0x84, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp68, arg0->unk_058); + + arg0->unk_05C = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_8830089C(arg0->unk_05C, 0xE0, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp68, arg0->unk_05C); + + arg0->unk_060 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_88300AF8(arg0->unk_060, 0x114, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp68, arg0->unk_060); + + arg0->unk_064 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_88300D54(arg0->unk_064, 0x160, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp68, arg0->unk_064); + + arg0->unk_068 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_88300FB0(arg0->unk_068, 0x198, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp68, arg0->unk_068); + + arg0->unk_06C = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_8830133C(arg0->unk_06C, 0x84, 0); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_038, arg0->unk_06C); + + sp64 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(sp64, 0x2C); + sp64->unk_10.unk_00 = 0; + sp64->unk_10.unk_02 = 0; + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_038, sp64); + + arg0->unk_070 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_883018D8(arg0->unk_070, 0x84, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, arg0->unk_070); + + arg0->unk_074 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_88301B34(arg0->unk_074, 0xCA, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, arg0->unk_074); + + arg0->unk_078 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_88301D90(arg0->unk_078, 0x110, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, arg0->unk_078); + + arg0->unk_07C = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_88301FB8(arg0->unk_07C, 0x156, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, arg0->unk_07C); + + arg0->unk_080 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_88302214(arg0->unk_080, 0x19C, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, arg0->unk_080); + + arg0->unk_084 = mem_pool_alloc(argF, sizeof(unk_func_88001300_000)); + func_88302470(arg0->unk_084, 0x1E2, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, arg0->unk_084); + + sp60 = mem_pool_alloc(argF, sizeof(unk_func_88001300_03C_01C)); + ((func88504570)Memmap_GetFragmentVaddr(func_88504570))(sp60, 0, 0, 0x10, 0x10, D_88317274); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_050, sp60); + arg0->unk_04C->unk_1C = sp60; + ((func8850CB48)Memmap_GetFragmentVaddr(func_8850CB48))(arg0->unk_04C, 1); + func_88303520(arg0); + + arg0->unk_034 = mem_pool_alloc(argF, sizeof(unk_func_8830867C_02C_034)); + ((func88506DCC)Memmap_GetFragmentVaddr(func_88506DCC))(arg0->unk_034, 0, 0x4A, func_88304850, 0x228, 0x14, 0xE, + argF); + ((func88506F1C)Memmap_GetFragmentVaddr(func_88506F1C))(arg0->unk_034, &arg0->unk_03C, argF); + arg0->unk_034->unk_70 = arg0; + arg0->unk_034->unk_00.unk_50 = 0x22; + arg0->unk_034->unk_00.unk_52 = -4; + arg0->unk_034->unk_00.unk_44->unk_00.unk_14.unk_00 = 0x64; + arg0->unk_034->unk_00.unk_44->unk_00.unk_14.unk_02 = 0x1C; + + sp5C = mem_pool_alloc(argF, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(sp5C, arg0->unk_034); + ((func8850CC74)Memmap_GetFragmentVaddr(func_8850CC74))(arg0->unk_048, sp5C); + ((func8850CC74)Memmap_GetFragmentVaddr(func_8850CC74))(arg0->unk_048, arg0->unk_04C); + + sp54 = mem_pool_alloc(argF, sizeof(unk_func_88507D4C)); + ((func88507D4C)Memmap_GetFragmentVaddr(func_88507D4C))(sp54, 0, 0x24, 0x228, 0, arg0->unk_034); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_02C, sp54); + + sp58 = mem_pool_alloc(argF, sizeof(unk_func_88507D4C)); + ((func88507D4C)Memmap_GetFragmentVaddr(func_88507D4C))(sp58, 0, arg0->unk_02C->unk_00.unk_14.unk_02 - 0x10, 0x228, + 1, arg0->unk_034); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_02C, sp58); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_02C, arg0->unk_050); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_02C, arg0->unk_034); + + sp50 = mem_pool_alloc(argF, sizeof(unk_func_88503298)); + ((func88503298)Memmap_GetFragmentVaddr(func_88503298))(sp50, arg0->unk_02C, arg3); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, sp50); + + arg0->unk_0B4 = mem_pool_alloc(argF, sizeof(unk_func_8830867C_02C_0B4)); + func_88313FA0(arg0->unk_0B4, 0x65, 0x228, argF); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_0B4); + + func_88313740(arg0->unk_0A8, &arg0->unk_144); + + arg0->unk_08C->unk_4C = 0x228; + arg0->unk_08C->unk_50 = 0x13E; + + arg0->unk_090 = mem_pool_alloc(argF, sizeof(unk_func_88509F48)); + ((func88509F48)Memmap_GetFragmentVaddr(func_88509F48))(arg0->unk_090, 0, 0, 0x228, 0x1A0, argF, arg10); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_090); + + arg0->unk_CCC = mem_pool_alloc(argF, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(arg0->unk_CCC, 0, 0, + mem_pool_alloc(argF, sizeof(char) * 0x140), 0x10); + arg0->unk_CCC->unk_3C = 0x20; + + arg0->unk_0B8 = mem_pool_alloc(argF, sizeof(unk_func_8850CD44)); + ((func8850CD44)Memmap_GetFragmentVaddr(func_8850CD44))(arg0->unk_0B8, 4, argF); + + arg0->unk_0BC = mem_pool_alloc(argF, sizeof(unk_func_882173EC)); + func_88314484(arg0->unk_0BC, 0, 0, D_88317234[0], 0x14); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_034, arg0->unk_0BC); + arg0->unk_0B8->unk_1C[0] = arg0->unk_0BC; + + arg0->unk_0C0 = mem_pool_alloc(argF, sizeof(unk_func_8830867C_02C_0C0)); + func_88314950(arg0->unk_0C0, 0, 0, D_88317234[0], 0x14); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_034, arg0->unk_0C0); + arg0->unk_0B8->unk_1C[1] = &arg0->unk_0C0->unk_00; + + arg0->unk_0C4 = mem_pool_alloc(argF, sizeof(unk_func_882173EC)); + func_883151E8(arg0->unk_0C4, 0, 0, D_88317244[0], 0x14); + + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_034, arg0->unk_0C4); + arg0->unk_0B8->unk_1C[2] = arg0->unk_0C4; + + arg0->unk_0C8 = mem_pool_alloc(argF, sizeof(unk_func_882173EC)); + func_883156E8(arg0->unk_0C8, 0, 0, D_88317228[0], 0x14); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_034, arg0->unk_0C8); + arg0->unk_0B8->unk_1C[3] = arg0->unk_0C8; + arg0->unk_CB8 = 0; + + func_883051F8(arg0); + func_883051B0(arg0); + func_88305270(arg0); +} + +void func_88304350(s32 arg0, s32 arg1, s32 arg2, u8* arg3, s32 arg4) { + Color_RGBA8 sp2C; + s32 sp28; + UNUSED s32 pad; + char* sp20; + + if ((*arg3 <= 0) || (*arg3 >= 0x98)) { + if (arg4 != 1) { + sp2C = ((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(0)->unk_04; + sp20 = "????"; + } else { + return; + } + } else { + sp28 = func_8002ED78(arg3, arg4); + if (sp28 != -1) { + sp2C = ((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(sp28)->unk_04; + sp20 = func_8002D7C0(NULL, 0, D_8831A4D4, func_800219FC(sp28)); + } else { + return; + } + } + + func_8001F3F4(); + func_8001EBE0(4, 0); + func_8001F324(sp2C.r, sp2C.g, sp2C.b, sp2C.a); + func_8001F1E8(((arg2 - func_8001F5B0(0, 0, sp20)) / 2) + arg0, arg1, sp20); + func_8001F444(); +} + +void func_88304490(s32 arg0, s32 arg1, s32 arg2, u8* arg3, s32 arg4) { + static Color_RGBA8 D_88317278 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + char* sp2C; + Color_RGBA8 sp28; + ret_func_8002ED08* sp24; + u8* sp18 = &arg3[arg4]; + + if (arg4 < func_8002ECDC(arg3)) { + sp24 = func_8002ED08(sp18[9]); + if (sp24 == NULL) { + sp28 = D_88317278; + sp2C = " ????? "; + } else { + sp28 = ((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(sp24->unk_00[1])->unk_04; + sp2C = func_8002D7C0(NULL, 0, D_8831A4CC, sp18[9] - 1); + } + func_8001F3F4(); + func_8001EBE0(4, 0); + func_8001F324(sp28.r, sp28.g, sp28.b, sp28.a); + func_8001F1E8(((arg2 - func_8001F5B0(0, 0, sp2C)) / 2) + arg0, arg1, sp2C); + func_8001F444(); + } +} + +Color_RGBA8 D_8831727C = { 0xF0, 0x96, 0x96, 0xFF }; +Color_RGBA8 D_88317280 = { 0xF0, 0xD2, 0x8C, 0xFF }; +Color_RGBA8 D_88317284 = { 0x96, 0xDC, 0xB4, 0xFF }; + +void func_883045C0(s32 arg0, s32 arg1, s32 arg2, unk_func_88304850_arg2* arg3) { + func_883157D0(arg0, arg1, arg2, 0x14, *(s32*)arg3->unk_00[0], arg3->unk_00[1], 0xFF); +} + +void func_88304608(s32 arg0, s32 arg1, s8* arg2, s32 arg3) { + static Color_RGBA8 D_88317288 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + func_8001F3F4(); + func_8001F324(D_88317288.r, D_88317288.g, D_88317288.b, D_88317288.a); + func_8001EBE0(4, 0); + func_8001F1E8(arg0, arg1, arg2, arg3); + func_8001F444(); +} + +void func_88304680(s32 arg0, s32 arg1, char* arg2, s32 arg3) { + static Color_RGBA8 D_8831728C = { 0xF0, 0xF0, 0xF0, 0xFF }; + char sp1C[12]; + + func_8001F3F4(); + func_8001F324(D_8831728C.r, D_8831728C.g, D_8831728C.b, D_8831728C.a); + func_8001EBE0(4, 0); + + sprintf(&sp1C, arg2, arg3); + + func_8001F1E8(arg0 - func_8001F5B0(0, 0, sp1C), arg1, sp1C); + func_8001F444(); +} + +void func_88304718(s32 arg0, s32 arg1, char* arg2, s32 arg3, u8* arg4) { + static Color_RGBA8 D_88317290 = { 0xF0, 0xF0, 0xF0, 0xFF }; + static char D_88317294[] = "?"; + + if ((*arg4 <= 0) || (*arg4 >= 0x98)) { + func_8001F3F4(); + func_8001F324(D_88317290.r, D_88317290.g, D_88317290.b, D_88317290.a); + func_8001EBE0(4, 0); + func_8001F1E8(arg0 - func_8001F5B0(0, 0, D_88317294), arg1, D_88317294); + func_8001F444(); + } else { + func_88304680(arg0, arg1, arg2, arg3); + } +} + +typedef struct unk_D_88317298 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; +} unk_D_88317298; // size = 0x8 + +s32 func_883047CC(unk_func_8830867C_02C* arg0, unk_func_88304850_arg2* arg1) { + static unk_D_88317298 D_88317298[] = { + { 0x19, 0x1E }, { 0xF, 0x14 }, { 0x32, 0x37 }, { 0x1, 0x1E }, { 0x1, 0x32 }, + }; + + unk_D_88317298* ptr; + s32 sp18 = 0; + + if (func_88305220(arg0, 0x20) != 0) { + ptr = &D_88317298[arg0->unk_C54.unk_2C]; + if (arg1->unk_2C < ptr->unk_00) { + sp18 = 1; + } else if (ptr->unk_04 < arg1->unk_2C) { + sp18 = 2; + } + } + return sp18; +} + +#ifdef NON_MATCHING +void func_88304850(s32 arg0, s32 arg1, unk_func_88304850_arg2* arg2, s32 arg3, s32 arg4, + unk_func_8830867C_02C_034* arg5) { + static Color_RGBA8 D_883172C0[] = { + { 0xF0, 0xF0, 0xF0, 0xFF }, + { 0xB2, 0xFF, 0xC3, 0xFF }, + { 0xFF, 0xB2, 0xC3, 0xFF }, + }; + static Color_RGBA8 D_883172CC[][2] = { + { + { 0x50, 0x51, 0x54, 0xFF }, + { 0x59, 0x5B, 0x5E, 0xFF }, + }, + { + { 0x43, 0x44, 0x46, 0xFF }, + { 0x4B, 0x4C, 0x4F, 0xFF }, + }, + }; + + s32 i; + Color_RGBA8 spBC; + s32 spA8; + s32 sp58; + s32 sp50; + s32 var_s1; + s32 temp_a0; + s32 temp_a0_2; + s32 temp_a3; + s32 temp_s7; + s32 var_s6; + unk_func_8830867C_02C* temp_s5; + + temp_s5 = arg5->unk_70; + if (temp_s5->unk_0AC->unk_2C->unk_30 & 2) { + var_s1 = temp_s5->unk_0AC->unk_00.unk_10.unk_00 - temp_s5->unk_000.unk_10.unk_00; + } else { + var_s1 = arg5->unk_00.unk_00.unk_14.unk_00; + } + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + temp_a3 = ((D_883171D0[arg3 & 1].r << 8) & 0xF800) | ((D_883171D0[arg3 & 1].g << 3) & 0x7C0) | + ((D_883171D0[arg3 & 1].b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a3 << 0x10) | temp_a3); + gDPFillRectangle(gDisplayListHead++, arg0, arg1, arg0 + 0x25, arg1 + 0x13); + + temp_a0 = ((D_883171D0[(arg3 & 1) + 1].r << 8) & 0xF800) | ((D_883171D0[(arg3 & 1) + 1].g << 3) & 0x7C0) | + ((D_883171D0[(arg3 & 1) + 1].b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a0 << 0x10) | temp_a0); + gDPFillRectangle(gDisplayListHead++, arg0 + 0x26, arg1, arg0 + 0x81, arg1 + 0x13); + + sp50 = arg0 + 0x84; + var_s6 = temp_s5->unk_CD4[temp_s5->unk_CD0]; + + for (i = arg0 + 0x84; i < var_s1 + arg0; i++) { + temp_a0_2 = ((D_883172CC[arg3 & 1][var_s6 & 1].r << 8) & 0xF800) | + ((D_883172CC[arg3 & 1][var_s6 & 1].g << 3) & 0x7C0) | + ((D_883172CC[arg3 & 1][var_s6 & 1].b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a0_2 << 0x10) | temp_a0_2); + gDPFillRectangle(gDisplayListHead++, sp50, arg1, (temp_s5->unk_0DC->unk_00[i] + sp50) - 1, arg1 + 0x13); + + sp50 += temp_s5->unk_0DC->unk_00[i]; + var_s6++; + } + + if (arg2 != NULL) { + func_8002E8E4(arg0 + 6, arg1 + 4, arg3 + 1, 3); + spBC = D_883172C0[func_883047CC(temp_s5, arg2)]; + if (arg4 & 4) { + spBC.a = 0x4D; + } else { + spBC.a = 0xFF; + } + func_8001F3F4(); + func_8001F324(spBC.r, spBC.g, spBC.b, spBC.a); + func_8001EBE0(4, 0); + spA8 = (0x5C - func_8001F5B0(0, 0, "WWWWWWWWWW")) / 2; + + if ((arg2->unk_08 <= 0) || (arg2->unk_08 >= 0x98)) { + func_8001F1E8(arg0 + spA8 + 0x26, arg1 + 2, "?????"); + } else { + func_8001F1E8(arg0 + spA8 + 0x26, arg1 + 2, func_8002D7C0(NULL, 0, D_8831A4D0, arg2->unk_08 - 1)); + } + + func_8001F444(); + + var_s6 = temp_s5->unk_CD4[temp_s5->unk_CD0]; + + for (i = sp50; i < var_s1 + arg0; i++) { + switch (var_s6) { + case 0: + func_88304608(sp50 + spA8, arg1 + 2, arg2->unk_40, 0); + break; + + case 1: + func_8002E8E4(sp50 + 4, arg1 + 4, arg2->unk_16, 5); + break; + + case 2: + func_88304608(sp50 + ((temp_s5->unk_0DC->unk_00[i] - func_8001F5B0(0, 0, "WWWWWWW")) / 2), arg1 + 2, + arg2->unk_43, 0); + break; + + case 3: + func_883045C0(sp50, arg1, temp_s5->unk_0DC->unk_00[i], arg2); + break; + + case 4: + case 5: + func_88304350(sp50, arg1 + 2, temp_s5->unk_0DC->unk_00[i], &arg2->unk_08, var_s6 - 4); + break; + + case 6: + case 7: + case 8: + case 9: + func_88304490(sp50, arg1 + 2, temp_s5->unk_0DC->unk_00[i], &arg2->unk_08, var_s6 - 6); + break; + + case 10: + func_88304718(sp50 + (temp_s5->unk_0DC->unk_00[i] - + ((temp_s5->unk_0DC->unk_00[i] - func_8001F5B0(0, 0, "000")) / 2)), + arg1 + 2, "%3d", arg2->unk_2C, &arg2->unk_08); + break; + + case 11: + func_88304718(sp50 + (temp_s5->unk_0DC->unk_00[i] - + ((temp_s5->unk_0DC->unk_00[i] - func_8001F5B0(0, 0, "000")) / 2)), + arg1 + 2, "%3d", arg2->unk_36, &arg2->unk_08); + break; + + case 12: + func_88304718(sp50 + (temp_s5->unk_0DC->unk_00[i] - + ((temp_s5->unk_0DC->unk_00[i] - func_8001F5B0(0, 0, "000")) / 2)), + arg1 + 2, "%3d", arg2->unk_30, &arg2->unk_08); + break; + + case 13: + func_88304718(sp50 + (temp_s5->unk_0DC->unk_00[i] - + ((temp_s5->unk_0DC->unk_00[i] - func_8001F5B0(0, 0, "000")) / 2)), + arg1 + 2, "%3d", arg2->unk_32, &arg2->unk_08); + break; + + case 14: + func_88304718(sp50 + (temp_s5->unk_0DC->unk_00[i] - + ((temp_s5->unk_0DC->unk_00[i] - func_8001F5B0(0, 0, "000")) / 2)), + arg1 + 2, "%3d", arg2->unk_34, &arg2->unk_08); + break; + + case 15: + func_88304718(sp50 + (temp_s5->unk_0DC->unk_00[i] - + ((temp_s5->unk_0DC->unk_00[i] - func_8001F5B0(0, 0, "000")) / 2)), + arg1 + 2, "%3d", arg2->unk_36, &arg2->unk_08); + break; + } + + var_s6++; + sp50 += temp_s5->unk_0DC->unk_00[i]; + } + } +} +#else +static Color_RGBA8 D_883172C0[] = { + { 0xF0, 0xF0, 0xF0, 0xFF }, + { 0xB2, 0xFF, 0xC3, 0xFF }, + { 0xFF, 0xB2, 0xC3, 0xFF }, +}; +static Color_RGBA8 D_883172CC[][2] = { + { + { 0x50, 0x51, 0x54, 0xFF }, + { 0x59, 0x5B, 0x5E, 0xFF }, + }, + { + { 0x43, 0x44, 0x46, 0xFF }, + { 0x4B, 0x4C, 0x4F, 0xFF }, + }, +}; #pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88304850.s") +#endif -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883050CC.s") +void func_883050CC(unk_func_8830867C_02C* arg0) { + arg0->unk_C84 = arg0->unk_C54; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305168.s") + arg0->unk_CBC = arg0->unk_034->unk_00.unk_38; + arg0->unk_CC0 = arg0->unk_034->unk_00.unk_38 - (arg0->unk_034->unk_58 / arg0->unk_034->unk_00.unk_3E); + arg0->unk_CB4 = 1; + arg0->unk_CB8 = 1; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883051B0.s") + arg0->unk_088->unk_28 |= 1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883051F8.s") +void func_88305168(unk_func_8830867C_02C* arg0) { + arg0->unk_C54 = arg0->unk_C84; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305220.s") + arg0->unk_CB4 = 0; + arg0->unk_088->unk_28 &= ~1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305230.s") +void func_883051B0(unk_func_8830867C_02C* arg0) { + arg0->unk_C84 = arg0->unk_C54; + arg0->unk_CB4 = 0; + arg0->unk_088->unk_28 &= ~1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305240.s") +void func_883051F8(unk_func_8830867C_02C* arg0) { + arg0->unk_C54.unk_04 = NULL; + arg0->unk_C54.unk_00 = 0; + // clang-format off + arg0->unk_C54.unk_08 = 1; arg0->unk_C54.unk_09 = 0x64; + // clang-format on + arg0->unk_C54.unk_0C = 0; + arg0->unk_C54.unk_1C.unk_00 = 0; + arg0->unk_C54.unk_24.unk_04 = 0; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305254.s") +s32 func_88305220(unk_func_8830867C_02C* arg0, s32 arg1) { + return (arg0->unk_C54.unk_04 & arg1) != 0; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305268.s") +void func_88305230(unk_func_8830867C_02C* arg0, s32 arg1) { + arg0->unk_C54.unk_04 |= arg1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305270.s") +void func_88305240(unk_func_8830867C_02C* arg0, s32 arg1) { + arg0->unk_C54.unk_04 &= ~arg1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305458.s") +s32 func_88305254(unk_func_8830867C_02C* arg0, s32 arg1) { + arg0->unk_C54.unk_04 ^= arg1; + return arg0->unk_C54.unk_04 & arg1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883054DC.s") +void func_88305268(unk_func_8830867C_02C* arg0, s32 arg1) { + arg0->unk_C54.unk_00 = arg1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305520.s") +void func_88305270(unk_func_8830867C_02C* arg0) { + ((func88506EE4)Memmap_GetFragmentVaddr(func_88506EE4))(arg0->unk_034, &arg0->unk_03C); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883057F4.s") + if (arg0->unk_C54.unk_04 != 0) { + if (arg0->unk_C54.unk_04 & 1) { + func_8002D1AC(arg0->unk_034->unk_00.unk_2C, &arg0->unk_0CC, func_88316214, &arg0->unk_C54.unk_08); + ((func88506EE4)Memmap_GetFragmentVaddr(func_88506EE4))(arg0->unk_034, &arg0->unk_0CC); + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305830.s") + if (arg0->unk_C54.unk_04 & 2) { + func_8002D1AC(arg0->unk_034->unk_00.unk_2C, &arg0->unk_0CC, func_88316240, &arg0->unk_C54.unk_1C); + ((func88506EE4)Memmap_GetFragmentVaddr(func_88506EE4))(arg0->unk_034, &arg0->unk_0CC); + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883058C4.s") + if (arg0->unk_C54.unk_04 & 4) { + func_8002D1AC(arg0->unk_034->unk_00.unk_2C, &arg0->unk_0CC, func_88316304, &arg0->unk_C54.unk_24); + ((func88506EE4)Memmap_GetFragmentVaddr(func_88506EE4))(arg0->unk_034, &arg0->unk_0CC); + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305BC4.s") + if (arg0->unk_C54.unk_04 & 8) { + func_8002D1AC(arg0->unk_034->unk_00.unk_2C, &arg0->unk_0CC, func_883163A4, &arg0->unk_C54.unk_10); + ((func88506EE4)Memmap_GetFragmentVaddr(func_88506EE4))(arg0->unk_034, &arg0->unk_0CC); + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305C7C.s") + if (arg0->unk_C54.unk_04 & 0x10) { + func_8002D1AC(arg0->unk_034->unk_00.unk_2C, &arg0->unk_0CC, func_883163B8, &arg0->unk_C54.unk_14); + ((func88506EE4)Memmap_GetFragmentVaddr(func_88506EE4))(arg0->unk_034, &arg0->unk_0CC); + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305CDC.s") + if (arg0->unk_C54.unk_04 & 0x20) { + func_8002D1AC(arg0->unk_034->unk_00.unk_2C, &arg0->unk_0CC, func_88316480, &arg0->unk_C54.unk_2C); + ((func88506EE4)Memmap_GetFragmentVaddr(func_88506EE4))(arg0->unk_034, &arg0->unk_0CC); + } + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305D7C.s") + func_8002D180(arg0->unk_034->unk_00.unk_2C, D_8831A1F8[arg0->unk_C54.unk_00]); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305DA8.s") +s32 func_88305458(unk_func_8830867C_02C* arg0) { + s32 var_a0 = func_883168B4(&arg0->unk_144); + s32 i; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305DF4.s") + for (i = 0; i < 3; i++) { + if ((arg0->unk_154[i].unk_04 != 0) && (arg0->unk_154[i].unk_08 != 0)) { + if (i == 0) { + var_a0 |= 2; + } else if (i == 1) { + var_a0 |= 8; + } else { + var_a0 |= 0x20; + } + } + } + return var_a0; +} + +s32 func_883054DC(unk_func_8830867C_02C_0CC* arg0, unk_func_8830867C_02C_0CC_000* arg1) { + unk_func_8830867C_02C_0CC_000** ptr = arg0->unk_00; + s32 i; + + for (i = 0; i < arg0->unk_08; i++) { + if (arg1 == ptr[i]) { + return i; + } + } + + return -1; +} + +void func_88305520(unk_func_8830867C_02C* arg0, unk_func_8830867C_02C_0CC_000* arg1, Controller* arg2) { + func88500A6C temp_v0_4; + s32 sp90; + s32 sp8C; + s32 sp88; + s32 sp84; + s32 sp80; + s32 sp7C; + unk_func_88001300_000_010 sp78; + unk_func_8830867C_02C_0CC_000* sp74; + s32 sp70; + char sp50[0x20]; + char sp30[0x20]; + unk_func_88500994* tmp; + + sp84 = 0; + sp80 = (arg1->unk_00->unk_00->unk_08 << 0x10) | arg1->unk_00->unk_04; + sp88 = arg0->unk_0A8->unk_34->unk_38; + + if (sp88 != 0) { + sp84 = arg0->unk_0A8->unk_38[arg0->unk_0A8->unk_4C->unk_1C]->unk_38; + } + + sp90 = arg0->unk_034->unk_00.unk_38; + sp8C = arg0->unk_034->unk_00.unk_38 - (arg0->unk_034->unk_58 / arg0->unk_034->unk_00.unk_3E); + sp74 = arg0->unk_034->unk_00.unk_2C->unk_00[sp90]; + + func_88305830(arg0, sp74, sp88, sp84); + sp7C = (arg1->unk_00->unk_00->unk_08 << 0x10) | arg1->unk_00->unk_04; + + temp_v0_4 = ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C)); + tmp = arg0->unk_038; + arg0->unk_CD0 = 0; + temp_v0_4(tmp, 0); + + func_88303520(arg0); + + sp78.unk_00 = arg0->unk_0DC->unk_08 + (s32)arg0->unk_0DC->unk_00 + arg0->unk_0DC->unk_04 + 0x84; + sp78.unk_02 = arg0->unk_034->unk_5C - arg0->unk_034->unk_58; + + func_88315C98(arg0->unk_0C8, sp80, sp7C, sp78); + func_80048B90(0x0120000D); + + ((func8850CF00)Memmap_GetFragmentVaddr(func_8850CF00))(arg0->unk_0B8, arg2); + + func_80048B90(0x29); + func_883167CC(&arg0->unk_03C, &arg0->unk_144); + func_88305270(arg0); + func_883051B0(arg0); + + sp70 = func_883054DC(arg0->unk_034->unk_00.unk_2C, sp74); + if (sp70 == -1) { + ((func88507C0C)Memmap_GetFragmentVaddr(func_88507C0C))(arg0->unk_034, sp90, sp8C); + func_8002D5D4(0x1A, arg1->unk_38); + func_88313950(sp50, sp80 >> 0x10, sp80 & 0xFFFF); + func_8002D5D4(0x25, sp50); + func_88313950(sp30, sp88, sp84); + func_8002D5D4(0x28, sp30); + func_8002D7C0(arg0->unk_CCC->unk_40, 0x140, D_8831A4C4, 0x5C); + ((func8850A10C)Memmap_GetFragmentVaddr(func_8850A10C))(arg0->unk_090, arg0->unk_CCC, 0, 0); + ((func8850A3CC)Memmap_GetFragmentVaddr(func_8850A3CC))(arg0->unk_090, arg2); + } else { + ((func88507C0C)Memmap_GetFragmentVaddr(func_88507C0C))(arg0->unk_034, sp70, sp8C); + } +} + +void func_883057F4(unk_func_8830867C_02C_0CC_000_000* arg0) { + unk_func_8830867C_02C_0CC_000_000_010_000* ptr = arg0->unk_10.unk_00; + s32 i; + + for (i = 0; i < arg0->unk_10.unk_08; i++, ptr++) { + ptr->unk_00->unk_04 = i; + } +} + +void func_88305830(unk_func_8830867C_02C* arg0, unk_func_8830867C_02C_0CC_000* arg1, s32 arg2, s32 arg3) { + unk_func_8830867C_02C_144_000* ptr = arg0->unk_144.unk_00; + unk_func_8830867C_02C_0CC_000_000* temp_s0 = &ptr[arg2].unk_0C[arg3]; + unk_func_8830867C_02C_0CC_000_000* sp24 = arg1->unk_00; + + func_8002CC80(&sp24->unk_10, arg1->unk_04); + func_883057F4(sp24); + + arg1->unk_00 = &temp_s0->unk_00; + arg1->unk_04 = temp_s0->unk_10.unk_08; + + func_8002CC2C(&temp_s0->unk_10, arg1, temp_s0->unk_10.unk_08); + + sp24->unk_0C = 1; + temp_s0->unk_0C = 1; +} + +s32 func_883058C4(unk_func_8830867C_02C_0CC_000* arg0, unk_func_8830867C_04C_030_02C_000* arg1, u32** arg2, + u32** arg3) { + unk_func_8830867C_02C_0CC_000_008* temp_s0 = &arg0->unk_08; + u16 sp3A; + s32 sp34; + + switch (arg1->unk_00[0]->unk_00) { + case 35: + sp34 = 1; + + *arg2 = temp_s0->unk_26; + temp_s0->unk_14 += 0xA00; + if (temp_s0->unk_14 >= 0x6401) { + temp_s0->unk_14 = 0x6400; + } + temp_s0->unk_26 = func_80022170(1, temp_s0->unk_00, temp_s0->unk_14, temp_s0->unk_24, temp_s0->unk_1E); + *arg3 = temp_s0->unk_26; + break; + + case 36: + sp34 = 2; + *arg2 = temp_s0->unk_28; + temp_s0->unk_16 += 0xA00; + if (temp_s0->unk_16 >= 0x6401) { + temp_s0->unk_16 = 0x6400; + } + temp_s0->unk_28 = func_80022170(2, temp_s0->unk_00, temp_s0->unk_16, temp_s0->unk_24, temp_s0->unk_1E); + *arg3 = temp_s0->unk_28; + break; + + case 37: + sp34 = 3; + *arg2 = temp_s0->unk_2A; + temp_s0->unk_18 += 0xA00; + if (temp_s0->unk_18 >= 0x6401) { + temp_s0->unk_18 = 0x6400; + } + temp_s0->unk_2A = func_80022170(3, temp_s0->unk_00, temp_s0->unk_18, temp_s0->unk_24, temp_s0->unk_1E); + *arg3 = temp_s0->unk_2A; + break; + + case 38: + sp34 = 4; + *arg2 = temp_s0->unk_2C; + temp_s0->unk_1A += 0xA00; + if (temp_s0->unk_1A >= 0x6401) { + temp_s0->unk_1A = 0x6400; + } + temp_s0->unk_2C = func_80022170(4, temp_s0->unk_00, temp_s0->unk_1A, temp_s0->unk_24, temp_s0->unk_1E); + *arg3 = temp_s0->unk_2C; + break; + + case 39: + sp34 = 5; + *arg2 = temp_s0->unk_2E; + temp_s0->unk_1C += 0xA00; + if (temp_s0->unk_1C >= 0x6401) { + temp_s0->unk_1C = 0x6400; + } + temp_s0->unk_2E = func_80022170(5, temp_s0->unk_00, temp_s0->unk_1C, temp_s0->unk_24, temp_s0->unk_1E); + *arg3 = temp_s0->unk_2E; + break; + + case 40: + sp34 = 0; + *arg2 = temp_s0->unk_24; + sp3A = temp_s0->unk_26; + *(s32*)&temp_s0->unk_10 = func_800224B8(temp_s0->unk_00, (temp_s0->unk_24 + 1) & 0xFFFF); + func_80022338(&arg0->unk_08); + temp_s0->unk_02 = (temp_s0->unk_02 + temp_s0->unk_26) - sp3A; + *arg3 = temp_s0->unk_24; + break; + } + + func_88317144(arg1); + arg0->unk_00->unk_0C = 1; + return sp34; +} + +void func_88305BC4(unk_func_8830867C_02C_0CC_000* arg0, unk_func_8830867C_04C_030_02C_000* arg1, s32 arg2, s32* arg3, + s32* arg4) { + s32 var_v1; + unk_D_80072B00* temp_v0; + unk_func_8830867C_02C_0CC_000_008* ptr = &arg0->unk_08; + + temp_v0 = func_8002ED40(ptr->unk_09[arg2]); + + var_v1 = temp_v0->unk_05 / 5; + if (var_v1 >= 7) { + var_v1 = 7; + } + + *arg3 = ((ptr->unk_20[arg2] >> 6) * var_v1) + temp_v0->unk_05; + *arg4 = *arg3 + var_v1; + + ptr->unk_20[arg2] += var_v1 + 0x40; + + func_88317144(arg1); + + arg0->unk_00->unk_0C = 1; +} + +void func_88305C7C(unk_func_8830867C_02C_0CC_000_008* arg0, s32 arg1) { + s32 i; + + for (i = arg1; i < 4; i++) { + arg0->unk_09[i] = 0; + } +} + +void func_88305CDC(unk_func_8830867C_02C_0CC_000* arg0, unk_func_8830867C_04C_030_02C_000* arg1, s32 arg2) { + unk_func_8830867C_02C_0CC_000_008* ptr = &arg0->unk_08; + s32 var_a0; + + if (arg1->unk_00[0]->unk_00 >= 0xC9) { + var_a0 = arg1->unk_00[0]->unk_00 - 0xC9; + } else { + var_a0 = arg1->unk_00[0]->unk_00 - 0x92; + } + + ptr->unk_09[arg2] = func_80022A28(var_a0); + ptr->unk_20[arg2] = func_8002ED40(ptr->unk_09[arg2])->unk_05; + + if (arg1->unk_00[0]->unk_00 >= 0xC9) { + func_88317144(arg1); + } + arg0->unk_00->unk_0C = 1; +} + +void func_88305D7C(unk_func_8830867C_02C* arg0, s32 arg1) { + arg0->unk_000.unk_2A = arg1; + arg0->unk_048->unk_14(arg0->unk_048, arg1); +} + +s32 func_88305DA8(unk_func_8830867C_02C* arg0, Controller* arg1) { + s32 var_v1; + + if (arg0->unk_02C->unk_30 & 2) { + var_v1 = arg0->unk_048->unk_10(arg0->unk_048, arg1); + } else { + var_v1 = 1; + } + return var_v1; +} + +void func_88305DF4(unk_func_8830867C_02C* arg0, Controller* arg1) { + s32 var_s3 = 0; + s32 temp_v0; + + arg0->unk_048->unk_14(arg0->unk_048, 1); + + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_02C); + + while (!(arg0->unk_02C->unk_30 & 2)) { + func_8002EEA8(NULL); + } + + func_8830B2EC(arg0->unk_094, &arg0->unk_144); + if (func_8830B954(arg0->unk_094, arg1) == 1) { + func_883167CC(&arg0->unk_03C, &arg0->unk_144); + func_88305270(arg0); + } + + while (var_s3 == 0) { + func_8002EEA8(NULL); + temp_v0 = func_88305DA8(arg0, arg1); + if (!(temp_v0 & 1) && (temp_v0 & 2)) { + var_s3 = 1; + } + ((func8850BC94)Memmap_GetFragmentVaddr(func_8850BC94))(temp_v0); + } + arg0->unk_02C->unk_2C = 0xB; +} + +#ifdef NON_MATCHING +void func_88305F28(unk_func_8830867C_02C* arg0) { + unk_func_8830867C_04C_030_02C_000_000* spDC; + unk_func_8830867C_02C_0CC_000* spD8; + s32 spD4; + s32 spD0; + s32 spCC; + unk_func_88001300_000_010 spC8; + func88500A6C temp_v0_4; + s32 spC0; + s32 spBC; + unk_func_88001300_000_010 spB8; + s32 spB4; + s32 spB0; + s32 spAC; + unk_func_88001300_000_010 spA8; + unk_func_8830867C_02C_0CC_000 sp4C; + char* sp48; + char* sp44; + s32 sp40; + unk_func_8830867C_02C_0CC_000_008* sp34; + + spDC = arg0->unk_0AC->unk_30->unk_2C->unk_00->unk_00[arg0->unk_0AC->unk_30->unk_38]; + spD0 = arg0->unk_034->unk_00.unk_38; + spD8 = arg0->unk_034->unk_00.unk_2C->unk_00[spD0]; + spCC = spD0 - (arg0->unk_034->unk_58 / arg0->unk_034->unk_00.unk_3E); + + if (spDC->unk_08 >= 0x64) { + spC0 = func_8002ECDC(&spD8->unk_08); + if (spC0 < 4) { + func_88305C7C(&spD8->unk_08, spC0); + spBC = -1; + sp34 = (u8*)spD8 + spC0; + } else { + spC0 = arg0->unk_0AC->unk_78->unk_30->unk_38; + sp34 = (u8*)spD8 + spC0; + spBC = sp34->unk_11; + } + func_88305CDC(spD8, spDC, spC0); + + temp_v0_4 = ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C)); + arg0->unk_CD0 = 1; + temp_v0_4(arg0->unk_038, 1); + + spC8.unk_00 = (arg0->unk_0DC->unk_18 * spC0) + 0x84; + spC8.unk_02 = arg0->unk_034->unk_5C - arg0->unk_034->unk_58; + + func_88314920(arg0->unk_0BC, spBC, sp34->unk_11, spC8); + func_88303520(arg0); + ((func8850CF00)Memmap_GetFragmentVaddr(func_8850CF00))(arg0->unk_0B8, gPlayer1Controller); + func_88305270(arg0); + func_883051B0(arg0); + spD4 = func_883054DC(arg0->unk_034->unk_00.unk_2C, spD8); + if (spD4 == -1) { + ((func88507C0C)Memmap_GetFragmentVaddr(func_88507C0C))(arg0->unk_034, spD0, spCC); + func_8002D5D4(0x1A, spD8->unk_38); + func_8002D5D4(0x1D, func_8002D7C0(NULL, 0, D_8831A4CC, spBC - 1)); + func_8002D5D4(0x1E, func_8002D7C0(NULL, 0, D_8831A4CC, sp34->unk_11 - 1)); + func_8002D7C0(arg0->unk_CCC->unk_40, 0x140, D_8831A4C4, 0x5D); + ((func8850A10C)Memmap_GetFragmentVaddr(func_8850A10C))(arg0->unk_090, arg0->unk_CCC, 0, 0); + ((func8850A3CC)Memmap_GetFragmentVaddr(func_8850A3CC))(arg0->unk_090, gPlayer1Controller); + } else { + ((func88507C0C)Memmap_GetFragmentVaddr(func_88507C0C))(arg0->unk_034, spD4, spCC); + } + } else if (spDC->unk_08 >= 0x32) { + spB4 = arg0->unk_0AC->unk_78->unk_30->unk_38; + if ((!arg0) && (!arg0)) {} + func_88305BC4(spD8, spDC, spB4, &spB0, &spAC); + + temp_v0_4 = ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C)); + arg0->unk_CD0 = 1; + temp_v0_4(arg0->unk_038, 1); + + spB8.unk_00 = (arg0->unk_0DC->unk_18 * spB4) + 0x84; + spB8.unk_02 = arg0->unk_034->unk_5C - arg0->unk_034->unk_58; + func_883151B8(arg0->unk_0C0, spD8->unk_08.unk_09[spB4], spB0, spAC, spB8); + func_88303520(arg0); + ((func8850CF00)Memmap_GetFragmentVaddr(func_8850CF00))(arg0->unk_0B8, gPlayer1Controller); + } else { + sp4C = *spD8; + + sp40 = func_883058C4(&sp4C, spDC, &sp48, &sp44); + + temp_v0_4 = ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C)); + arg0->unk_CD0 = 2; + temp_v0_4(arg0->unk_038, 2); + + spA8.unk_00 = (arg0->unk_0DC->unk_28 * sp40) + 0x84; + spA8.unk_02 = arg0->unk_034->unk_5C - arg0->unk_034->unk_58; + + func_883156B8(arg0->unk_0C4, sp48, sp44, spA8); + func_88303520(arg0); + ((func8850CF00)Memmap_GetFragmentVaddr(func_8850CF00))(arg0->unk_0B8, gPlayer1Controller); + + *spD8 = sp4C; + + func_88305270(arg0); + func_883051B0(arg0); + spD4 = func_883054DC(arg0->unk_034->unk_00.unk_2C, spD8); + if (spD4 == -1) { + ((func88507C0C)Memmap_GetFragmentVaddr(func_88507C0C))(arg0->unk_034, spD0, spCC); + func_8002D5D4(0x1A, spD8->unk_38); + func_8002D600(2, sp48); + func_8002D600(3, sp44); + func_8002D7C0(arg0->unk_CCC->unk_40, 0x140, D_8831A4C4, 0x5E); + ((func8850A10C)Memmap_GetFragmentVaddr(func_8850A10C))(arg0->unk_090, arg0->unk_CCC, 0, 0); + ((func8850A3CC)Memmap_GetFragmentVaddr(func_8850A3CC))(arg0->unk_090, gPlayer1Controller); + } else { + ((func88507C0C)Memmap_GetFragmentVaddr(func_88507C0C))(arg0->unk_034, spD4, spCC); + } + } + func_88316F98(&arg0->unk_C48, arg0->unk_1A8, arg0->unk_154, 3, 0xAA); +} +#else #pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88305F28.s") +#endif -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88306544.s") +s32 func_88306544(unk_func_8830867C_02C* arg0, Controller* arg1) { + char* sp28[6]; + u32 sp24; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830681C.s") + sp28[0] = func_8002D7C0(NULL, 0, D_8831A4C4, 0x17); + sp28[1] = func_8002D7C0(NULL, 0, D_8831A4C4, 0x18); + sp28[2] = func_8002D7C0(NULL, 0, D_8831A4C4, 0x19); + sp28[3] = func_8002D7C0(NULL, 0, D_8831A4C4, 0x1A); + sp28[4] = func_8002D7C0(NULL, 0, D_8831A4C4, 0x1B); + sp28[5] = func_8002D7C0(NULL, 0, D_8831A4C4, 0x1C); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88306C70.s") + func_8830BCE8(arg0->unk_08C, sp28, 6); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88306F90.s") + arg0->unk_08C->unk_30 = arg0->unk_054->unk_10; + arg0->unk_08C->unk_34 = arg0->unk_054->unk_14; + + func_8830BE3C(arg0->unk_08C); + + if ((arg0->unk_034->unk_00.unk_2C->unk_08 == 0) || (arg0->unk_C48.unk_08 == 0)) { + arg0->unk_08C->unk_3C->unk_34[3] |= 4; + } + + if ((arg0->unk_C54.unk_00 == 0) && (arg0->unk_C54.unk_04 == 0)) { + arg0->unk_08C->unk_3C->unk_34[5] |= 4; + } + + arg0->unk_04C->unk_14(arg0->unk_04C, 0x100); + sp24 = func_8830C058(arg0->unk_08C, arg1, arg0->unk_CC4); + arg0->unk_04C->unk_14(arg0->unk_04C, 1); + + arg0->unk_CC4 = arg0->unk_08C->unk_3C->unk_38; + + switch (sp24) { + case 0: + sp24 = 0; + break; + + case 1: + func_883050CC(arg0); + func_88305268(arg0, 0x11); + func_8002D180(arg0->unk_034->unk_00.unk_2C, D_8831A1F8[arg0->unk_C54.unk_00]); + ((func88507AE4)Memmap_GetFragmentVaddr(func_88507AE4))(arg0->unk_034, 0); + sp24 = 0; + break; + + case 2: + func_883050CC(arg0); + func_88305268(arg0, 0x12); + func_8002D180(arg0->unk_034->unk_00.unk_2C, D_8831A1F8[arg0->unk_C54.unk_00]); + ((func88507AE4)Memmap_GetFragmentVaddr(func_88507AE4))(arg0->unk_034, 0); + sp24 = 0; + break; + + case 3: + sp24 = 1; + break; + + case 4: + sp24 = 2; + break; + + case 5: + sp24 = 3; + break; + + case 6: + func_883051F8(arg0); + func_88305270(arg0); + func_883051B0(arg0); + arg0->unk_CB8 = 0; + sp24 = 0; + break; + } + + return sp24; +} + +s32 func_8830681C(unk_func_8830867C_02C* arg0, Controller* arg1) { + static char D_8831A500[0x20]; + + char* sp44[5]; + u32 sp40; + unk_func_8830867C_02C_0CC_000* sp3C; + u32 sp38; + s32 sp34; + s32 sp30; + s32 sp2C; + + sp3C = arg0->unk_034->unk_00.unk_2C->unk_00[arg0->unk_034->unk_00.unk_38]; + if (arg0->unk_C54.unk_04 & 8) { + sp38 = 0x24; + } else { + sp38 = 0x23; + } + + func_8002D5D4(0x19, func_8002D7C0(NULL, 0, D_8831A4D0, sp3C->unk_08.unk_00 - 1)); + func_8002D7C0(D_8831A500, 0x20, D_8831A4C4, sp38); + + sp44[0] = D_8831A500; + sp38 = (arg0->unk_C54.unk_04 & 0x10) ? (0x26) : (0x25); + sp44[1] = func_8002D7C0(NULL, 0, D_8831A4C4, sp38); + sp44[2] = func_8002D7C0(NULL, 0, D_8831A4C4, 0x27); + sp44[3] = func_8002D7C0(NULL, 0, D_8831A4C4, 0x28); + sp44[4] = func_8002D7C0(NULL, 0, D_8831A4C4, 0x29); + + func_8830BCE8(arg0->unk_08C, sp44, 5); + + arg0->unk_08C->unk_30.unk_00 = 0x26; + arg0->unk_08C->unk_30.unk_02 = (arg0->unk_034->unk_5C - arg0->unk_034->unk_58) + 0x16; + arg0->unk_08C->unk_34.unk_00 = 0x50; + arg0->unk_08C->unk_34.unk_02 = 0x14; + + func_8830BE3C(arg0->unk_08C); + + if (arg0->unk_C48.unk_08 == 0) { + arg0->unk_08C->unk_3C->unk_34[3] |= 4; + } + + if ((sp3C->unk_08.unk_00 <= 0) || (sp3C->unk_08.unk_00 >= 0x98)) { + arg0->unk_08C->unk_3C->unk_34[0] |= 4; + arg0->unk_08C->unk_3C->unk_34[1] |= 4; + arg0->unk_08C->unk_3C->unk_34[3] |= 4; + } + + arg0->unk_034->unk_00.unk_00.unk_24(&arg0->unk_034->unk_00.unk_00, 0x100); + + sp40 = func_8830C058(arg0->unk_08C, arg1, arg0->unk_CC8); + + arg0->unk_034->unk_00.unk_00.unk_24(&arg0->unk_034->unk_00.unk_00, 1); + arg0->unk_CC8 = arg0->unk_08C->unk_3C->unk_38; + + switch (sp40) { + case 0: + sp40 = 0; + break; + + case 1: + sp34 = arg0->unk_034->unk_00.unk_38 - (arg0->unk_034->unk_58 / arg0->unk_034->unk_00.unk_3E); + + func_883050CC(arg0); + if (func_88305254(arg0, 8) != 0) { + arg0->unk_C54.unk_10 = sp3C->unk_08.unk_00; + } + func_88305270(arg0); + ((func88507C0C)Memmap_GetFragmentVaddr(func_88507C0C))( + arg0->unk_034, func_883054DC(arg0->unk_034->unk_00.unk_2C, sp3C), sp34); + sp40 = 0; + break; + + case 2: + sp30 = arg0->unk_034->unk_00.unk_38 - (arg0->unk_034->unk_58 / arg0->unk_034->unk_00.unk_3E); + + func_883050CC(arg0); + if (func_88305254(arg0, 0x10) != 0) { + sp2C = sp3C->unk_08.unk_00 - 1; + + arg0->unk_C54.unk_14.unk_00 = 1; + + arg0->unk_C54.unk_14.unk_04[0] = D_80070FA0[sp2C].unk_06; + + if (D_80070FA0[sp2C].unk_06 != D_80070FA0[sp2C].unk_07) { + arg0->unk_C54.unk_14.unk_04[1] = D_80070FA0[sp2C].unk_07; + arg0->unk_C54.unk_14.unk_00++; + } + } + + func_88305270(arg0); + ((func88507C0C)Memmap_GetFragmentVaddr(func_88507C0C))( + arg0->unk_034, func_883054DC(arg0->unk_034->unk_00.unk_2C, sp3C), sp30); + sp40 = 0; + break; + + case 3: + sp40 = 1; + break; + + case 4: + sp40 = 2; + break; + + case 5: + sp40 = 3; + break; + } + + return sp40; +} + +typedef struct unk_D_883172F4 { + /* 0x00 */ u16* unk_00; + /* 0x04 */ s32 unk_04; +} unk_D_883172F4; // size = 0x8 + +s32 func_88306C70(unk_func_8830867C_02C* arg0, unk_func_88001300_000* arg1, s32 arg2, Controller* arg3) { + static s16 D_883172DC[] = { + 0x001E, + 0x001F, + 0x0020, + 0x0000, + }; + static s16 D_883172E4[] = { + 0x001E, + 0x001F, + }; + static s16 D_883172E8[] = { + 0x001D, + 0x0000, + }; + static s16 D_883172EC[] = { + 0x0021, + 0x0000, + }; + static s16 D_883172F0[] = { + 0x0022, + 0x0000, + }; + static unk_D_883172F4 D_883172F4[] = { + { + D_883172EC, + 0x00000001, + }, + { + D_883172E8, + 0x00000001, + }, + { + D_883172EC, + 0x00000001, + }, + { + D_883172F0, + 0x00000001, + }, + { + NULL, + 0x00000000, + }, + { + NULL, + 0x00000000, + }, + { + D_883172DC, + 0x00000003, + }, + { + D_883172E4, + 0x00000002, + }, + { + D_883172E4, + 0x00000002, + }, + { + D_883172E4, + 0x00000002, + }, + { + D_883172E4, + 0x00000002, + }, + { + D_883172E4, + 0x00000002, + }, + }; + + u32 var_s0; + s32 sp50; + s32 i; + char* sp40[3]; + + for (i = 0; i < D_883172F4[arg2 - 2].unk_04; i++) { + sp40[i] = func_8002D7C0(NULL, 0, D_8831A4C4, D_883172F4[arg2 - 2].unk_00[i]); + } + + func_8830BCE8(arg0->unk_08C, sp40, D_883172F4[arg2 - 2].unk_04); + + arg0->unk_08C->unk_30 = arg1->unk_10; + arg0->unk_08C->unk_34 = arg1->unk_14; + + func_8830BE3C(arg0->unk_08C); + arg0->unk_04C->unk_14(arg0->unk_04C, 0x100); + var_s0 = func_8830C058(arg0->unk_08C, arg3, 0); + arg0->unk_04C->unk_14(arg0->unk_04C, 1); + + switch (var_s0) { + case 0: + var_s0 = 0; + break; + + case 1: + switch (arg2) { + case 2: + sp50 = 0x10; + break; + + case 3: + sp50 = 0xE; + break; + + case 4: + sp50 = 0xF; + break; + + case 5: + sp50 = 1; + break; + + case 8: + sp50 = 3; + break; + + case 9: + sp50 = 5; + break; + + case 10: + sp50 = 7; + break; + + case 11: + sp50 = 9; + break; + + case 12: + sp50 = 0xB; + break; + + case 13: + sp50 = 0xD; + break; + } + + func_883050CC(arg0); + func_88305268(arg0, sp50); + func_8002D180(arg0->unk_034->unk_00.unk_2C, D_8831A1F8[arg0->unk_C54.unk_00]); + ((func88507AE4)Memmap_GetFragmentVaddr(func_88507AE4))(arg0->unk_034, 0); + var_s0 = 0; + break; + + case 2: + switch (arg2) { + case 8: + sp50 = 2; + break; + + case 9: + sp50 = 4; + break; + + case 10: + sp50 = 6; + break; + + case 11: + sp50 = 8; + break; + + case 12: + sp50 = 0xA; + break; + + case 13: + sp50 = 0xC; + break; + } + + func_883050CC(arg0); + func_88305268(arg0, sp50); + func_8002D180(arg0->unk_034->unk_00.unk_2C, D_8831A1F8[arg0->unk_C54.unk_00]); + + ((func88507AE4)Memmap_GetFragmentVaddr(func_88507AE4))(arg0->unk_034, 0); + var_s0 = 0; + break; + + case 3: + var_s0 = 1; + break; + } + + return var_s0; +} + +u32 func_88306F90(unk_func_8830867C_02C* arg0) { + s32 var_v1 = arg0->unk_04C->unk_24; + + if (var_v1 >= 2) { + switch (arg0->unk_038->unk_2C) { + case 0: + break; + + case 1: + var_v1 += 5; + break; + + case 2: + var_v1 += 6; + break; + } + } + + return var_v1; +} void func_88306FE4(void) { } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88306FEC.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88307038.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88307110.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88307250.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88307264.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883073E8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88307478.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883074D4.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830757C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88307628.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830772C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88307C2C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830858C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830867C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88308D60.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88308DFC.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88308E84.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88309160.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883092C8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883094CC.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88309614.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883096BC.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88309728.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88309774.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883097D4.s") - -void func_883097E4(void) { +void func_88306FEC(unk_func_8830867C_02C_048* arg0, unk_func_8830867C_02C* arg1) { + ((func8850CBA8)Memmap_GetFragmentVaddr(func_8850CBA8))(arg0); + arg0->unk_10 = func_8830858C; + arg0->unk_24 = arg1; } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883097EC.s") +void func_88307038(unk_func_8830867C_02C* arg0, s32 arg1) { + s32 sp24 = func_80029080(); -void func_88309808(void) { + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_0B0->unk_40, 2); + + func_8002EEA8(NULL); + func_88316A58(&arg0->unk_144, arg1); + func_88302C18(arg0); + + if (arg1 & 0x30) { + func_800284B4(3); + } + + if (arg1 & 0xF) { + if (arg1 & 5) { + func_80025540(sp24); + } + ((func88900970)Memmap_GetFragmentVaddr(func_88900970))(arg0->unk_0B0, sp24); + } + + if (arg1 & 0x30) { + func_80026E4C(3); + func_800284B4(3); + } } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88309810.s") +void func_88307110(unk_func_8830867C_02C* arg0) { + s32 i; + s32 var_v0; + unk_func_8830867C_02C_0CC_000** temp_v0_2; + unk_func_8830867C_04C_030_02C_000_000* temp_s1; + + temp_s1 = arg0->unk_0AC->unk_30->unk_2C->unk_00[arg0->unk_0AC->unk_30->unk_38].unk_00[0]; + temp_v0_2 = arg0->unk_034->unk_00.unk_2C->unk_00; + + for (i = 0; i < arg0->unk_034->unk_00.unk_2C->unk_08; i++) { + if ((temp_v0_2[i]->unk_08.unk_00 <= 0) || (temp_v0_2[i]->unk_08.unk_00 >= 0x98)) { + arg0->unk_034->unk_00.unk_34[i] |= 4; + } else { + if (temp_s1->unk_08 >= 0x64) { + var_v0 = func_88311D6C(**(u8**)&temp_s1->unk_00, &temp_v0_2[i]->unk_08); + } else if (temp_s1->unk_08 >= 0x32) { + var_v0 = func_88311E28(&temp_v0_2[i]->unk_08); + } else { + var_v0 = func_88311EB4(**(u8**)&temp_s1->unk_00, &temp_v0_2[i]->unk_08); + } + + if (var_v0 != 0) { + arg0->unk_034->unk_00.unk_34[i] |= 4; + } + } + } +} + +s32 func_88307250(unk_func_8830867C_02C* arg0) { + return arg0->unk_144.unk_00->unk_0C->unk_10.unk_08 == 0; +} + +s32 func_88307264(unk_func_8830867C_02C* arg0, Controller* arg1, s32 arg2) { + s32 sp34; + s32 sp30; + s32 temp_v0_2; + + sp34 = 1; + sp30 = func_88305458(arg0); + if (sp30 != 0) { + arg0->unk_048->unk_14(arg0->unk_048, 0); + ((func889006D4)Memmap_GetFragmentVaddr(func_889006D4))(arg0->unk_0B0, func_88307250(arg0)); + + temp_v0_2 = ((func88900808)Memmap_GetFragmentVaddr(func_88900808))(arg0->unk_0B0, arg1, 1); + if (temp_v0_2 == 0) { + func_88307038(arg0, sp30); + ((func889007AC)Memmap_GetFragmentVaddr(func_889007AC))(arg0->unk_0B0); + } else if (temp_v0_2 == 1) { + ((func889007AC)Memmap_GetFragmentVaddr(func_889007AC))(arg0->unk_0B0); + } else if (temp_v0_2 == 2) { + ((func889007AC)Memmap_GetFragmentVaddr(func_889007AC))(arg0->unk_0B0); + sp34 = 0; + } + + arg0->unk_048->unk_14(arg0->unk_048, 1); + } else if ((arg2 == 0) && (arg0->unk_CB8 != 0)) { + arg0->unk_048->unk_14(arg0->unk_048, 0); + if (func_88314340(arg0->unk_0B4, arg1) == 1) { + sp34 = 0; + } + arg0->unk_048->unk_14(arg0->unk_048, 1); + } + return sp34; +} + +void func_883073E8(unk_func_8830867C_02C* arg0, s32 arg1) { + if (arg1 != 0) { + arg0->unk_02C->unk_00.unk_28 |= 0x200; + arg0->unk_030->unk_00.unk_28 |= 1; + arg0->unk_04C->unk_14(arg0->unk_04C, 1); + } else { + arg0->unk_02C->unk_00.unk_28 &= ~0x200; + arg0->unk_030->unk_00.unk_28 &= ~1; + arg0->unk_04C->unk_14(arg0->unk_04C, 0); + } +} + +void func_88307478(unk_func_8830867C_02C_048* arg0) { + ((func8850628C)Memmap_GetFragmentVaddr(func_8850628C))(arg0->unk_24->unk_034); + arg0->unk_24->unk_0E0 = 0; + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 1); +} + +void func_883074D4(unk_func_8830867C_02C_048* arg0, Controller* arg1) { + func_883073E8(arg0->unk_24, 0); + func_8002EEA8(NULL); + func_8002EEA8(NULL); + + if (func_88312998(arg0->unk_24->unk_0AC, arg1) == 2) { + arg0->unk_24->unk_0E0 = 1; + func_88307110(arg0->unk_24); + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 0); + } else { + func_8002EEA8(NULL); + func_883073E8(arg0->unk_24, 1); + } +} + +s32 func_8830757C(unk_func_8830867C_02C_048* arg0, Controller* arg1) { + s32 sp1C = 2; + + func_80048B90(3); + + if (arg0->unk_24->unk_CB4 != 0) { + func_88305168(arg0->unk_24); + func_88305270(arg0->unk_24); + ((func88507C0C)Memmap_GetFragmentVaddr(func_88507C0C))(arg0->unk_24->unk_034, arg0->unk_24->unk_CBC, + arg0->unk_24->unk_CC0); + sp1C = 3; + } else if (func_88307264(arg0->unk_24, arg1, 0) == 0) { + sp1C = 3; + } + return sp1C; +} + +s32 func_88307628(unk_func_8830867C_02C_048* arg0, Controller* arg1) { + s32 var_v1 = 0; + + if (gPlayer1Controller->buttonPressed & 2) { + func_80048B90(2); + if (arg0->unk_24->unk_CD0 == 0) { + arg0->unk_24->unk_CD0 += 3; + } + arg0->unk_24->unk_CD0--; + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_24->unk_038, arg0->unk_24->unk_CD0); + func_88303520(arg0->unk_24); + var_v1 = 0x80000005; + } else if (gPlayer1Controller->buttonPressed & 1) { + func_80048B90(2); + if (arg0->unk_24->unk_CD0 >= 2) { + arg0->unk_24->unk_CD0 -= 3; + } + arg0->unk_24->unk_CD0++; + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_24->unk_038, arg0->unk_24->unk_CD0); + func_88303520(arg0->unk_24); + var_v1 = 0x80000005; + } + + return var_v1; +} + +s32 func_8830772C(unk_func_8830867C_02C_048* arg0, Controller* arg1, s32 arg2) { + UNUSED s32 pad; + s32 temp_v0; + unk_func_8830867C_02C_0CC_000* sp24; + unk_func_8830867C_02C_0CC_000* sp20; + + if (arg0->unk_24->unk_0E0 != 0) { + if (arg2 & 2) { + func_80048B90(3); + func_88307478(arg0); + func_883074D4(arg0, arg1); + arg2 = 1; + } else if (arg2 & 4) { + if (arg0->unk_24->unk_034->unk_00.unk_34[arg0->unk_24->unk_034->unk_00.unk_38] & 4) { + func_80048B90(8); + arg2 = 1; + } else { + func_80048B90(2); + func_88312018( + arg0->unk_24->unk_0AC, + &arg0->unk_24->unk_034->unk_00.unk_2C->unk_00[arg0->unk_24->unk_034->unk_00.unk_38]->unk_08); + + arg0->unk_24->unk_034->unk_00.unk_00.unk_24(&arg0->unk_24->unk_034->unk_00.unk_00, 0x100); + + if (func_88312998(arg0->unk_24->unk_0AC, arg1) == 1) { + func_8002EEA8(NULL); + func_88305F28(arg0->unk_24); + func_88307478(arg0); + func_883073E8(arg0->unk_24, 1); + } else { + arg0->unk_24->unk_034->unk_00.unk_00.unk_24(&arg0->unk_24->unk_034->unk_00.unk_00, 1); + } + } + } + arg2 = 1; + } else if (arg2 & 8) { + if (arg1->buttonPressed & 0x800) { + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 1); + ((func8850CB48)Memmap_GetFragmentVaddr(func_8850CB48))(arg0->unk_24->unk_04C, 1); + arg2 |= 0x80000001; + } + } else { + if (arg2 & 2) { + arg2 = func_8830757C(arg0, arg1); + } else if (arg2 & 4) { + if (arg0->unk_24->unk_034->unk_00.unk_2C->unk_08 == 0) { + func_80048B90(8); + arg2 = 1; + } else { + func_80048B90(2); + temp_v0 = func_8830681C(arg0->unk_24, arg1); + if (temp_v0 == 1) { + sp24 = arg0->unk_24->unk_034->unk_00.unk_2C->unk_00[arg0->unk_24->unk_034->unk_00.unk_38]; + + func_883139E8(arg0->unk_24->unk_0A8, sp24->unk_00->unk_00->unk_08, sp24->unk_00->unk_04); + func_88313894(arg0->unk_24->unk_0A8, sp24); + + arg0->unk_24->unk_034->unk_00.unk_00.unk_24(&arg0->unk_24->unk_034->unk_00.unk_00, 0x100); + + func_8002EEA8(NULL); + func_8002EEA8(NULL); + if (func_88313E50(arg0->unk_24->unk_0A8, arg1) == 1) { + func_88305520(arg0->unk_24, sp24, arg1); + } + func_8002EEA8(NULL); + + arg0->unk_24->unk_034->unk_00.unk_00.unk_24(&arg0->unk_24->unk_034->unk_00.unk_00, 1); + + arg2 = 1; + } else if (temp_v0 == 2) { + func_88311F70(arg0->unk_24->unk_0AC, &arg0->unk_24->unk_C48); + func_88312018( + arg0->unk_24->unk_0AC, + &arg0->unk_24->unk_034->unk_00.unk_2C->unk_00[arg0->unk_24->unk_034->unk_00.unk_38]->unk_08); + func_88312188(arg0->unk_24->unk_0AC, 0); + + arg0->unk_24->unk_034->unk_00.unk_00.unk_24(&arg0->unk_24->unk_034->unk_00.unk_00, 0x100); + + func_8002EEA8(NULL); + func_8002EEA8(NULL); + if (func_88312998(arg0->unk_24->unk_0AC, arg1) == 1) { + func_88305F28(arg0->unk_24); + } + func_8002EEA8(NULL); + + arg0->unk_24->unk_034->unk_00.unk_00.unk_24(&arg0->unk_24->unk_034->unk_00.unk_00, 1); + + arg2 = 1; + } else { + if (temp_v0 == 3) { + sp20 = arg0->unk_24->unk_034->unk_00.unk_2C->unk_00[arg0->unk_24->unk_034->unk_00.unk_38]; + + arg0->unk_24->unk_CDC->unk_0C = &sp20->unk_08; + arg0->unk_24->unk_CDC->unk_10 = sp20->unk_00->unk_00->unk_08; + + arg0->unk_24->unk_CD8(1, arg0->unk_24->unk_CDC); + + arg0->unk_24->unk_034->unk_00.unk_00.unk_24(&arg0->unk_24->unk_034->unk_00.unk_00, 0x100); + + if (arg0->unk_24->unk_CD8(4, arg0->unk_24->unk_CDC) == 1) { + sp20->unk_00->unk_0C = 1; + } + func_8002EEA8(NULL); + + arg0->unk_24->unk_034->unk_00.unk_00.unk_24(&arg0->unk_24->unk_034->unk_00.unk_00, 1); + } + arg2 = 1; + } + } + } else if (gPlayer1Controller->buttonPressed & 0x10) { + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 1); + arg2 = 0x80000005; + } else { + arg2 = func_88307628(arg0, arg1); + } + } + + return arg2; +} + +s32 func_88307C2C(unk_func_8830867C_02C_048* arg0, Controller* arg1, s32 arg2) { + u32 sp34; + s32 temp_s0_11; + s32 sp2C; + s32 sp28; + s32 sp24; + s32 temp_s0_23; + s32 temp_s0_27; + s32 temp_v0_2; + + if (arg2 & 8) { + if ((arg1->buttonPressed == 0x400) && (arg0->unk_24->unk_04C->unk_24 == 1)) { + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 0); + ((func88507AE4)Memmap_GetFragmentVaddr(func_88507AE4))( + arg0->unk_24->unk_034, arg0->unk_24->unk_034->unk_58 / arg0->unk_24->unk_034->unk_00.unk_3E); + arg0->unk_24->unk_034->unk_6C = 8; + arg0->unk_24->unk_034->unk_54 = 0x400; + arg2 |= 0x80000001; + } + } else { + if (arg2 & 2) { + arg2 = func_8830757C(arg0, arg1); + } else if (arg2 & 4) { + sp34 = func_88306F90(arg0->unk_24); + switch (sp34) { + case 0: + func_80048B90(3); + arg2 = 2; + if (func_88307264(arg0->unk_24, arg1, 1) == 0) { + arg2 = 3; + } + break; + + case 1: + func_80048B90(2); + temp_v0_2 = func_88306544(arg0->unk_24, arg1); + if (temp_v0_2 == 1) { + sp2C = -1; + if (func_88305220(arg0->unk_24, 0x20) != 0) { + sp2C = arg0->unk_24->unk_C54.unk_2C; + } + func_8830CD4C(arg0->unk_24->unk_098, sp2C); + + arg0->unk_24->unk_04C->unk_14(arg0->unk_24->unk_04C, 0x100); + + func_8002EEA8(NULL); + func_8002EEA8(NULL); + + sp2C = func_8830CE84(arg0->unk_24->unk_098, arg1); + func_8002EEA8(NULL); + + arg0->unk_24->unk_04C->unk_14(arg0->unk_24->unk_04C, 1); + + if (sp2C > 0) { + sp2C--; + func_883050CC(arg0->unk_24); + + if ((sp2C + 1) == arg0->unk_24->unk_098->unk_30->unk_2C->unk_08) { + func_88305240(arg0->unk_24, 0x20); + } else { + func_88305230(arg0->unk_24, 0x20); + arg0->unk_24->unk_C54.unk_2C = sp2C; + } + + func_88305270(arg0->unk_24); + arg2 = 1; + } + } else if (temp_v0_2 == 2) { + func_88311F70(arg0->unk_24->unk_0AC, &arg0->unk_24->unk_C48); + func_88312018(arg0->unk_24->unk_0AC, 0); + func_88312188(arg0->unk_24->unk_0AC, 1); + func_883074D4(arg0, arg1); + arg2 = 1; + } else { + if (temp_v0_2 == 3) { + func_8830B2EC(arg0->unk_24->unk_094, &arg0->unk_24->unk_144); + + arg0->unk_24->unk_04C->unk_14(arg0->unk_24->unk_04C, 0x100); + + func_8002EEA8(NULL); + func_8002EEA8(NULL); + if (func_8830B954(arg0->unk_24->unk_094, arg1) == 1) { + func_883167CC(&arg0->unk_24->unk_03C, &arg0->unk_24->unk_144); + func_88305270(arg0->unk_24); + func_883051B0(arg0->unk_24); + } + func_8002EEA8(NULL); + arg0->unk_24->unk_04C->unk_14(arg0->unk_24->unk_04C, 1); + } + } + arg2 = 1; + break; + + case 2: + func_80048B90(2); + func_88306C70(arg0->unk_24, arg0->unk_24->unk_058, sp34, arg1); + arg2 = 1; + break; + + case 3: + func_80048B90(2); + func_88306C70(arg0->unk_24, arg0->unk_24->unk_05C, sp34, arg1); + arg2 = 1; + break; + + case 4: + func_80048B90(2); + func_88306C70(arg0->unk_24, arg0->unk_24->unk_060, sp34, arg1); + arg2 = 1; + break; + + case 5: + func_80048B90(2); + func_88306C70(arg0->unk_24, arg0->unk_24->unk_064, sp34, arg1); + arg2 = 1; + break; + + case 8: + func_80048B90(2); + if (func_88306C70(arg0->unk_24, arg0->unk_24->unk_070, sp34, arg1) == 1) { + if (arg0->unk_24->unk_C54.unk_0C != 0) { + sp28 = arg0->unk_24->unk_C54.unk_09; + sp24 = arg0->unk_24->unk_C54.unk_08; + } else { + sp28 = arg0->unk_24->unk_C54.unk_08; + sp24 = arg0->unk_24->unk_C54.unk_09; + } + func_8830DAB8(arg0->unk_24->unk_0A4, sp28, sp24, func_88305220(arg0->unk_24, 1)); + + arg0->unk_24->unk_04C->unk_14(arg0->unk_24->unk_04C, 0x100); + + func_8002EEA8(NULL); + func_8002EEA8(NULL); + temp_s0_11 = func_8830DC58(arg0->unk_24->unk_0A4, arg1); + func_8002EEA8(NULL); + + arg0->unk_24->unk_04C->unk_14(arg0->unk_24->unk_04C, 1); + + if (temp_s0_11 != 0) { + if (temp_s0_11 == 1) { + func_883050CC(arg0->unk_24); + if (arg0->unk_24->unk_0A4->unk_3C->unk_30.unk_00 >= + arg0->unk_24->unk_0A4->unk_38->unk_30.unk_00) { + arg0->unk_24->unk_C54.unk_0C = 0; + arg0->unk_24->unk_C54.unk_08 = arg0->unk_24->unk_0A4->unk_38->unk_30.unk_00; + arg0->unk_24->unk_C54.unk_09 = arg0->unk_24->unk_0A4->unk_3C->unk_30.unk_00; + func_88305268(arg0->unk_24, 2); + } else { + arg0->unk_24->unk_C54.unk_0C = 1; + arg0->unk_24->unk_C54.unk_09 = arg0->unk_24->unk_0A4->unk_38->unk_30.unk_00; + arg0->unk_24->unk_C54.unk_08 = arg0->unk_24->unk_0A4->unk_3C->unk_30.unk_00; + func_88305268(arg0->unk_24, 3); + } + func_88305230(arg0->unk_24, 1); + func_88305270(arg0->unk_24); + arg2 = 1; + } else { + if (temp_s0_11 == 2) { + func_883050CC(arg0->unk_24); + arg0->unk_24->unk_C54.unk_08 = 1; + arg0->unk_24->unk_C54.unk_09 = 0x64; + arg0->unk_24->unk_C54.unk_0C = 0; + func_88305240(arg0->unk_24, 1); + func_88305270(arg0->unk_24); + } + } + } + } + arg2 = 1; + break; + + case 9: + func_80048B90(2); + func_88306C70(arg0->unk_24, arg0->unk_24->unk_074, sp34, arg1); + arg2 = 1; + break; + + case 10: + func_80048B90(2); + func_88306C70(arg0->unk_24, arg0->unk_24->unk_078, sp34, arg1); + arg2 = 1; + break; + + case 11: + func_80048B90(2); + func_88306C70(arg0->unk_24, arg0->unk_24->unk_07C, sp34, arg1); + arg2 = 1; + break; + + case 12: + func_80048B90(2); + func_88306C70(arg0->unk_24, arg0->unk_24->unk_080, sp34, arg1); + arg2 = 1; + break; + + case 13: + func_80048B90(2); + func_88306C70(arg0->unk_24, arg0->unk_24->unk_084, sp34, arg1); + arg2 = 1; + break; + + case 6: + func_80048B90(2); + func_8830EE58(arg0->unk_24->unk_09C, &arg0->unk_24->unk_C54.unk_1C); + + arg0->unk_24->unk_04C->unk_14(arg0->unk_24->unk_04C, 0x100); + + temp_s0_23 = func_8830F114(arg0->unk_24->unk_09C, arg1); + arg0->unk_24->unk_04C->unk_14(arg0->unk_24->unk_04C, 1); + + if (temp_s0_23 != 0) { + if (temp_s0_23 == 1) { + func_883050CC(arg0->unk_24); + func_8830F05C(arg0->unk_24->unk_09C, &arg0->unk_24->unk_C54.unk_1C); + if (arg0->unk_24->unk_C54.unk_1C.unk_00 == 0) { + func_88305240(arg0->unk_24, 2); + } else { + func_88305230(arg0->unk_24, 2); + } + func_88305270(arg0->unk_24); + } else if (temp_s0_23 == 2) { + func_883050CC(arg0->unk_24); + func_88305240(arg0->unk_24, 2); + arg0->unk_24->unk_C54.unk_1C.unk_00 = 0; + func_88305270(arg0->unk_24); + } + } + arg2 = 1; + break; + + case 7: + func_80048B90(2); + func_883103CC(arg0->unk_24->unk_0A0, &arg0->unk_24->unk_C54.unk_24); + + arg0->unk_24->unk_04C->unk_14(arg0->unk_24->unk_04C, 0x100); + + temp_s0_27 = func_883106C8(arg0->unk_24->unk_0A0, arg1); + + arg0->unk_24->unk_04C->unk_14(arg0->unk_24->unk_04C, 1); + + if (temp_s0_27 != 0) { + if (temp_s0_27 == 1) { + func_883050CC(arg0->unk_24); + func_883105D4(arg0->unk_24->unk_0A0, &arg0->unk_24->unk_C54.unk_24); + if (arg0->unk_24->unk_C54.unk_24.unk_04 == 0) { + func_88305240(arg0->unk_24, 4); + } else { + func_88305230(arg0->unk_24, 4); + } + func_88305270(arg0->unk_24); + arg2 = 1; + } else if (temp_s0_27 == 2) { + func_883050CC(arg0->unk_24); + func_88305240(arg0->unk_24, 4); + arg0->unk_24->unk_C54.unk_24.unk_04 = 0; + func_88305270(arg0->unk_24); + } + } + arg2 = 1; + break; + } + } else if (gPlayer1Controller->buttonPressed & 0x20) { + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 0); + arg2 = 0x80000005; + } else { + arg2 = func_88307628(arg0, arg1); + } + } + + return arg2; +} + +s32 func_8830858C(unk_func_8830867C_02C_048* arg0, Controller* arg1) { + s32 i; + s32 var_a2 = 0; + unk_func_8830867C_02C_048* var_a0; + + if (arg0->unk_20 > 0) { + var_a0 = arg0->unk_04; + + for (i = 0; i < arg0->unk_1C; i++) { + var_a0 = var_a0->unk_08; + } + + var_a2 = var_a0->unk_10(var_a0, arg1); + } + + if (var_a2 & 1) { + return var_a2; + } + + if (var_a2 == 0) { + if (arg1->buttonPressed & 0x4000) { + var_a2 = 0x80000002; + } else if (arg1->buttonPressed & 0x8000) { + var_a2 = 0x80000004; + } + } + + switch (arg0->unk_1C) { + case 0: + var_a2 = func_8830772C(arg0, arg1, var_a2); + break; + + case 1: + var_a2 = func_88307C2C(arg0, arg1, var_a2); + break; + } + + return var_a2; +} + +void func_8830867C(unk_func_8830867C* arg0, s32 arg1, s32 arg2, MemoryPool* arg3, unk_D_800AC870* arg4, char** arg5, + char** arg6, char** arg7, char** arg8, char** arg9) { + static Color_RGBA8 D_88317354 = { 0x1E, 0x50, 0x50, 0xFF }; + static Color_RGBA8 D_88317358 = { 0x00, 0x0A, 0x0A, 0xFF }; + + unk_func_88001300_000* sp8C; + unk_func_88001300_000* sp88; + FragmentEntry sp84; + unk_func_88500EE4* sp80; + unk_func_885088F4* sp7C; + unk_func_88509A2C* sp78; + unk_func_88509E34* sp74; + unk_func_88001300_000* sp70; + + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C)); + + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + + sp8C = mem_pool_alloc(arg3, sizeof(unk_func_88001300_000)); + ((func885031E8)Memmap_GetFragmentVaddr(func_885031E8))(sp8C, 0, 0, 0x280, 0x1E0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &sp8C->unk_00); + + sp80 = mem_pool_alloc(arg3, sizeof(unk_func_88500EE4)); + ((func88500EE4)Memmap_GetFragmentVaddr(func_88500EE4))(sp80, 0, 0, 0x280, 0x1E0, D_88318898, D_88317354, + D_88317358); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&sp8C->unk_00, &sp80->unk_00.unk_00); + + sp7C = mem_pool_alloc(arg3, sizeof(unk_func_885088F4)); + ((func885088F4)Memmap_GetFragmentVaddr(func_885088F4))(sp7C, 0x41, 0x15C, 0xDC); + sp7C->unk_2C = 5; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&sp8C->unk_00, &sp7C->unk_00.unk_00); + + sp78 = mem_pool_alloc(arg3, sizeof(unk_func_88509A2C)); + ((func88509A2C)Memmap_GetFragmentVaddr(func_88509A2C))(sp78, 0x38, 0x22, func_80029080(), + func_8002D7C0(NULL, 0, D_8831A4C0, 0)); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&sp7C->unk_00.unk_00, &sp78->unk_00.unk_00); + + sp74 = mem_pool_alloc(arg3, sizeof(unk_func_88509E34)); + ((func88509E34)Memmap_GetFragmentVaddr(func_88509E34))(sp74, 0, 0, func_8002D7C0(NULL, 0, D_8831A4C4, 0)); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&sp7C->unk_00.unk_00, &sp74->unk_00.unk_00); + + sp88 = mem_pool_alloc(arg3, sizeof(unk_func_88001300_000)); + ((func885031E8)Memmap_GetFragmentVaddr(func_885031E8))(sp88, 0, 0, 0x280, 0x1E0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &sp88->unk_00); + + arg0->unk_30 = mem_pool_alloc(arg3, sizeof(unk_func_8830867C_030)); + func_8830BAC4(arg0->unk_30, sp88, arg3); + + arg0->unk_34 = mem_pool_alloc(arg3, sizeof(unk_func_8830867C_034)); + func_8830ACA0(arg0->unk_34, 0x56, 0x78, sp88, arg3); + + arg0->unk_38 = mem_pool_alloc(arg3, sizeof(unk_func_8830867C_038)); + func_8830C218(arg0->unk_38, 0x56, 0x96, sp88, arg3); + + arg0->unk_3C = mem_pool_alloc(arg3, sizeof(unk_func_8830867C_03C)); + func_8830E504(arg0->unk_3C, 0xAA, 0x78, sp88, arg3); + + arg0->unk_40 = mem_pool_alloc(arg3, sizeof(unk_func_8830867C_040)); + func_8830FA80(arg0->unk_40, 0xAA, 0x78, sp88, arg3); + + arg0->unk_44 = mem_pool_alloc(arg3, sizeof(unk_func_8830867C_044)); + func_8830D2F8(arg0->unk_44, 0xAA, 0xF5, sp88, arg3); + + arg0->unk_48 = mem_pool_alloc(arg3, sizeof(unk_func_8830867C_048)); + func_88312D7C(arg0->unk_48, 0xAA, 0x78, sp88, arg3); + + arg0->unk_4C = mem_pool_alloc(arg3, sizeof(unk_func_8830867C_04C)); + func_883112B0(arg0->unk_4C, 0xE7, 0x94, sp88, arg3); + + arg0->unk_50 = mem_pool_alloc(arg3, sizeof(unk_func_889000C4)); + + ((func889000C4)Memmap_GetFragmentVaddr(func_889000C4))(arg0->unk_50, 0, 0, 0, arg5, arg3); + + sp84 = FRAGMENT_LOAD(fragment27); + + arg0->unk_54.unk_04 = arg3; + // clang-format off + arg0->unk_54.unk_00 = 0x38; arg0->unk_54.unk_02 = 0x4E; + // clang-format on + arg0->unk_68 = sp88; + arg0->unk_6C = 0; + arg0->unk_70 = arg6; + arg0->unk_74 = D_8831A4D0; + arg0->unk_78 = D_8831A4CC; + arg0->unk_7C = D_8831A4D4; + arg0->unk_80 = arg7; + arg0->unk_84 = arg8; + arg0->unk_88 = arg9; + + sp84(0, &arg0->unk_54); + + arg0->unk_2C = mem_pool_alloc(arg3, sizeof(unk_func_8830867C_02C)); + func_883036AC(arg0->unk_2C, 0x2C, 0x48, sp8C, arg0->unk_30, arg0->unk_34, arg0->unk_38, arg0->unk_3C, arg0->unk_40, + arg0->unk_44, arg0->unk_48, arg0->unk_4C, arg0->unk_50, sp84, &arg0->unk_54, arg3, arg4); + + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&sp88->unk_00, &arg0->unk_2C->unk_000.unk_00); + + sp70 = mem_pool_alloc(arg3, sizeof(unk_func_88001300_000)); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883098D0.s") + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(sp70, 0x2C); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88309960.s") + // clang-format off + sp70->unk_10.unk_00 = 0x2C; sp70->unk_10.unk_02 = 0x7C; + // clang-format on -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883099D8.s") + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &sp70->unk_00); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&sp70->unk_00, &arg0->unk_30->unk_00.unk_00); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &arg0->unk_34->unk_00.unk_00); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &arg0->unk_38->unk_00.unk_00); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &arg0->unk_3C->unk_00.unk_00); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &arg0->unk_40->unk_00.unk_00); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &arg0->unk_44->unk_00.unk_00); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &arg0->unk_48->unk_00.unk_00); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &arg0->unk_4C->unk_00.unk_00); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &arg0->unk_50->unk_00.unk_00); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(&arg0->unk_00.unk_00, &arg0->unk_54.unk_08->unk_00); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88309C38.s") + arg0->unk_50->unk_00.unk_10.unk_00 = + arg0->unk_2C->unk_000.unk_10.unk_00 + + ((arg0->unk_2C->unk_02C->unk_00.unk_14.unk_00 - arg0->unk_50->unk_2C->unk_14.unk_00) / 2); + arg0->unk_50->unk_00.unk_10.unk_02 = + arg0->unk_2C->unk_000.unk_10.unk_02 + + ((arg0->unk_2C->unk_02C->unk_00.unk_14.unk_02 - arg0->unk_50->unk_2C->unk_14.unk_02) / 2); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88309DC8.s") +void func_88308D60(unk_func_8830867C* arg0) { + s32 sp34 = 0; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88309E28.s") + while (sp34 == 0) { + func_800079C4(); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830A410.s") + ((func885008C4)Memmap_GetFragmentVaddr(func_885008C4))(&arg0->unk_00); + ((func88500828)Memmap_GetFragmentVaddr(func_88500828))(&arg0->unk_00, 0, 0); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830A474.s") + func_80007778(); + func_8002EF18(&sp34); + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830A520.s") +void func_88308DFC(unk_func_8830867C* arg0) { + func_8001F738(gPlayer1Controller); + func_88305DF4(arg0->unk_2C, gPlayer1Controller); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830A578.s") + while (arg0->unk_2C->unk_02C->unk_00.unk_28 & 1) { + func_8002EEA8(NULL); + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830A5E4.s") + func_8002EEA8(1); + osStopThread(NULL); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830A840.s") +s32 func_88308E84(UNUSED s32 arg0, UNUSED s32 arg1) { + unk_D_800AC870* sp54; + MemoryPool* sp50; + void* sp4C; + u8* sp48; + func_88002628_sp38* sp44; + char** sp40; + char** sp3C; + char** sp38; + char** sp34; + char** sp30; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830A88C.s") + main_pool_push_state('PCHK'); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830A928.s") + sp54 = func_8001E94C(0x1C, 0); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830A9D8.s") + ASSET_LOAD(D_04000000, fragment29_misc_1, 0); + FRAGMENT_LOAD(fragment26); + FRAGMENT_LOAD(fragment25); + FRAGMENT_LOAD(fragment29); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830AAA4.s") + func_8002D510(); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830AADC.s") + D_8831A4C0 = func_8002D5AC(0x2A); + D_8831A4CC = func_8002D5AC(0x25); + D_8831A4D0 = func_8002D5AC(0x24); + D_8831A4D4 = func_8002D5AC(0x26); + D_8831A4C4 = func_8002D5AC(5); + D_8831A4D8 = func_8002D5AC(0x27); + D_8831A4C8 = func_8002D5AC(0xC); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830AC0C.s") + sp40 = func_8002D5AC(7); + sp3C = func_8002D5AC(6); + sp38 = func_8002D5AC(0x28); + sp34 = func_8002D5AC(0x29); + sp30 = func_8002D5AC(0xB); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830ACA0.s") + sp48 = main_pool_alloc(0x1000, 0); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830B2EC.s") + sp50 = mem_pool_try_init(0x18000, 0); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830B354.s") + sp4C = mem_pool_alloc(sp50, sizeof(unk_func_8830867C)); + func_8830867C(sp4C, 0, 0, sp50, sp54, sp40, sp3C, sp38, sp34, sp30); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830B380.s") + sp44 = ALIGN16((u32)mem_pool_alloc(sp50, sizeof(func_88002628_sp38))); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830B404.s") + osCreateThread(&sp44->thread, 0x32, func_88308DFC, sp4C, sp48 + 0x1000, osGetThreadPri(NULL) - 1); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830B450.s") + func_8002EE78(); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830B8A0.s") + osStartThread(&sp44->thread); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830B938.s") + func_80007754(); + func_88308D60(sp4C); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830B954.s") + osDestroyThread(&sp44->thread); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830BA1C.s") + func_8000771C(); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830BAC4.s") + main_pool_pop_state('PCHK'); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830BCE8.s") + FRAGMENT_LOAD_AND_CALL2(fragment23, 4, 0); -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830BE3C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830BF30.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830BF5C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830BFE0.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830C048.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830C058.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830C150.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830C218.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830CD4C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830CE00.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830CE84.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830CF88.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830CFBC.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830D0B4.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830D11C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830D268.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830D2F8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830DAB8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830DBE0.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830DC0C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830DC58.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830DD8C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830DDD8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830E090.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830E4A4.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830E504.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830EE58.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830F05C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830F09C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830F0C8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830F114.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830F254.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830F2A0.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830F5DC.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830FA10.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830FA20.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8830FA80.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883103CC.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883105D4.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88310650.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8831067C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883106C8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88310808.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88310854.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88310B70.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88310C38.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88310CA4.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883112B0.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88311C64.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88311D6C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88311E28.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88311EB4.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88311F70.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88312018.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88312020.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88312108.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88312188.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883121F0.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8831221C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88312298.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883122E4.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8831239C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8831247C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883125B4.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8831286C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883128B8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883128FC.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88312998.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88312B10.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88312C7C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88312D7C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313740.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883137C4.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313894.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313950.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883139E8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313A34.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313A94.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313B4C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313B64.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313B90.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313C24.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313C70.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313E50.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313F24.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88313FA0.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883142F4.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88314340.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88314484.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88314518.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88314574.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88314920.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88314950.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883149E4.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88314A38.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883151B8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883151E8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8831527C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883152D0.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883156B8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883156E8.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_8831577C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_883157D0.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88315A6C.s") - -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1CEA00/func_88315C98.s") + return 0x25; +} diff --git a/src/fragments/24/fragment24_1D7B40.c b/src/fragments/24/fragment24_1D7B40.c new file mode 100644 index 0000000..f772d39 --- /dev/null +++ b/src/fragments/24/fragment24_1D7B40.c @@ -0,0 +1,4533 @@ +#include "fragment24.h" +#include "src/1CF30.h" +#include "src/20330.h" +#include "src/22630.h" +#include "src/29BA0.h" +#include "src/2D340.h" +#include "src/2E110.h" +#include "src/2E460.h" +#include "src/49790.h" +#include "src/hal_libc.h" +#include "src/memmap.h" +#include "src/memory.h" + +static u8 D_88317360[] = { + 0x5F, 0x45, 0x21, 0x12, 0x51, 0x58, 0x2A, 0x43, 0x96, 0x6F, 0x9C, 0x36, 0x66, 0x8D, 0x19, 0x37, 0xA1, 0xA0, 0x2F, + 9, 0x77, 0x9D, 0x83, 0x1E, 0x50, 0x44, 0x6D, 0x6E, 0x3A, 0x3C, 0x31, 0x3D, 0x8E, 0xC, 0xA3, 0x90, 0x92, 0x20, + 0x8F, 0x5D, 0x9B, 0x5B, 0x49, 0xA, 0x34, 0x6A, 0x74, 0x8A, 0x7F, 0x1C, 1, 0x27, 0x2D, 0x56, 0x9E, 0x3E, 0x8B, + 0x42, 0xB, 0x60, 0x10, 5, 0x3F, 0x59, 0x24, 0x87, 0x4D, 0x17, 0x71, 0x84, 0, 0x4F, 0x48, 0x35, 0x65, 0x7E, + 0x5E, 0x86, 0x79, 0x5A, 0x85, 0x22, 0x2B, 0x97, 0x95, 0x94, 0x93, 0x6C, 0x25, 0x2C, 0x1B, 0x98, 0x14, 0x61, 0x41, + 0x4E, 3, 0x63, 0x64, 0x91, 0x57, 0x53, 0x70, 0x1F, 0x67, 0x38, 0x54, 0x7C, 0x13, 0xA2, 0x1A, 7, 0x4B, 0x39, + 0x68, 0x30, 8, 0x52, 0x55, 0x72, 0x26, 0x4A, 0x7B, 0x7A, 0xD, 0x29, 0x9F, 0x11, 0x8C, 0x75, 0x80, 0x15, 4, + 0x46, 0x7D, 0x3B, 0x33, 0x23, 0x5C, 6, 0x47, 0x4C, 0x76, 0x99, 0xF, 0x1D, 0x82, 0x2E, 0x62, 0x81, 2, 0x18, + 0x28, 0x32, 0xE, 0x69, 0x6B, 0x40, 0x73, 0x16, 0x9A, 0x89, 0x78, 0x88, +}; + +void func_88309160(s32 arg0, s32 arg1, unk_func_88309160_arg2* arg2, s32 arg3, u32 arg4, + unk_func_88200FA0_030_030* arg5) { + static Color_RGBA8 D_88317404[] = { + { 0xF0, 0xF0, 0xF0, 0xFF }, + { 0xF0, 0xF0, 0xF0, 0x4D }, + }; + + Color_RGBA8 sp3C; + UNUSED s32 pad; + ret_func_8002ED08* sp34; + s32 new_var; + s32 var_v0; + char* sp28; + s32 var_v1; + unk_D_80072B00* temp_v0_2; + + if (arg2 != NULL) { + sp34 = func_8002ED08(arg2->unk_00); + if (sp34 == NULL) { + sp28 = "???????"; + } else { + sp28 = func_8002D7C0(NULL, 0, D_8831A4CC, arg2->unk_00 - 1); + } + + sp3C = D_88317404[(arg4 & 4) ? 1 : 0]; + + func_8001F3F4(); + func_8001F324(sp3C.r, sp3C.g, sp3C.b, sp3C.a); + func_8001EBE0(8, 0); + func_8001F1E8(arg0 + 8, arg1 + 4, sp28); + func_8001F444(); + + if (sp34 != NULL) { + temp_v0_2 = func_8002ED40(arg2->unk_00); + + var_v1 = temp_v0_2->unk_05 / 5; + if (var_v1 >= 7) { + var_v1 = 7; + } + + new_var = temp_v0_2->unk_05 + (var_v1 * (arg2->unk_04 >> 6)); + func_8002E5A0((arg5->unk_00.unk_14.unk_00 + arg0) - 0x19, arg1 + 0xC, new_var, 2); + } + } +} + +void func_883092C8(unk_func_8830867C_04C_078* arg0, s32 arg1, s32 arg2, MemoryPool* arg3) { + static Color_RGBA8 D_8831740C = { 0xA0, 0x96, 0x64, 0xFF }; + + UNUSED s32 pad; + s32 sp58; + UNUSED s32 pad2[2]; + s32 sp4C; + s32 temp_v1; + unk_func_885012A4* sp44; + + temp_v1 = func_8001F5B0(8, 0, "WWWWWWWWWWWW") + 0x29; + sp58 = temp_v1; + sp4C = temp_v1; + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_04C_078)); + + arg0->unk_00.unk_20 = func_88309728; + arg0->unk_00.unk_10.unk_00 = (arg2 - sp4C) - 8; + arg0->unk_00.unk_10.unk_02 = arg1; + + arg0->unk_2C = mem_pool_alloc(arg3, sizeof(unk_func_88001300_038)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, sp4C, 0x78); + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); + + sp44 = mem_pool_alloc(arg3, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(sp44, 0, 0, sp4C, 0x78, D_8831740C); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp44); + + arg0->unk_30 = mem_pool_alloc(arg3, sizeof(unk_func_88200FA0_030_030)); + ((func885060BC)Memmap_GetFragmentVaddr(func_885060BC))(arg0->unk_30, 0, 4, func_88309160, sp58, 0x1C, 4, 1, arg3); + ((func88506238)Memmap_GetFragmentVaddr(func_88506238))(arg0->unk_30, 4, arg3); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp44, arg0->unk_30); +} + +void func_883094CC(unk_func_8830867C_04C_078* arg0, unk_func_80026268_arg0* arg1) { + s32 i; + s32 temp_v0; + s32 sp34; + + temp_v0 = func_8002ECDC(arg1); + if ((temp_v0 - 1) >= arg0->unk_30->unk_38) { + sp34 = arg0->unk_30->unk_38; + } else { + sp34 = (temp_v0 - 1); + } + + for (i = 0; i < temp_v0; i++) { + arg0->unk_44[i].unk_00 = arg1->unk_09[i]; + arg0->unk_44[i].unk_04 = arg1->unk_20[i]; + } + + func_8002C740(&arg0->unk_34, arg0->unk_44, 8, 4, temp_v0); + ((func885063B8)Memmap_GetFragmentVaddr(func_885063B8))(arg0->unk_30, &arg0->unk_34); + ((func88506BFC)Memmap_GetFragmentVaddr(func_88506BFC))(arg0->unk_30, sp34); +} + +typedef struct unk_func_88309614 { + /* 0x00 */ char unk00[0x8]; + /* 0x08 */ s32 unk_08; +} unk_func_88309614; // size >= 0xC + +void func_88309614(unk_func_8830867C_04C_078* arg0) { + s32 i; + + for (i = 0; i < ((unk_func_88309614*)arg0->unk_30->unk_2C)->unk_08; i++) { + if ((func_8002ED08(arg0->unk_44[i].unk_00) == NULL) || (arg0->unk_44[i].unk_04 >= 0xC0)) { + arg0->unk_30->unk_34[i] |= 4; + } + } +} + +void func_883096BC(unk_func_8830867C_04C_078* arg0) { + static s32 D_88317410[] = { 0xF, 0x13, 0x39, 0x46, 0x94 }; + + s32 j; + s32 i; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 5; j++) { + if (*(s32*)&arg0->unk_44[i].unk_00 == D_88317410[j]) { + arg0->unk_30->unk_34[i] |= 4; + break; + } + } + } +} + +s32 func_88309728(unk_func_8830867C_04C_078* arg0, Controller* arg1) { + s32 var_v1; + + if (arg0->unk_2C->unk_30 & 2) { + var_v1 = arg0->unk_30->unk_00.unk_20(arg0->unk_30, arg1); + } else { + var_v1 = 1; + } + return var_v1; +} + +void func_88309774(unk_func_8830867C_04C_078* arg0) { + ((func88506CE4)Memmap_GetFragmentVaddr(func_88506CE4))(arg0->unk_30); + + arg0->unk_00.unk_24(&arg0->unk_00, 1); + + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_2C); +} + +void func_883097D4(unk_func_8830867C_04C_078* arg0) { + arg0->unk_2C->unk_2C = 0xB; +} + +void func_883097E4(void) { +} + +s32 func_883097EC(unk_func_8830867C_034_03C_038_02C_000* arg0) { + s32 var_v1 = 0; + + if (arg0->unk_08 != 0) { + var_v1 = 2; + } + return var_v1; +} + +void func_88309808(void) { +} + +void func_88309810(unk_func_8830867C_034_03C* arg0) { + s32 i; + s32 j; + unk_func_8830867C_034_03C_038* temp_s3; + unk_func_8830867C_034_03C_038_02C_000* var_s0; + + for (i = 0; i < 2; i++) { + temp_s3 = arg0->unk_38[i]; + var_s0 = temp_s3->unk_2C->unk_00; + + for (j = 0; j < temp_s3->unk_2C->unk_08; j++, var_s0++) { + temp_s3->unk_34[j] |= func_883097EC(var_s0); + } + } +} + +void func_883098D0(unk_func_8830867C_034_03C* arg0, s32 arg1) { + s32 i; + s32 var_v0; + unk_func_8830867C_034_03C_038* temp_a1; + + if (arg1 != 0) { + var_v0 = 2; + } else { + var_v0 = 0; + } + + if (arg0->unk_34->unk_2C != 0) { + temp_a1 = arg0->unk_38[arg0->unk_34->unk_2C - 1]; + + for (i = 0; i < temp_a1->unk_2C->unk_08; i++) { + temp_a1->unk_34[i] &= ~2; + temp_a1->unk_34[i] |= var_v0; + } + } +} + +void func_88309960(unk_func_8830867C_034_03C* arg0) { + s32 i; + s32 j; + unk_func_8830867C_034_03C_038* temp_v0; + unk_func_8830867C_034_03C_038_02C_000* ptr; + + for (i = 0; i < 2; i++) { + temp_v0 = arg0->unk_38[i]; + ptr = temp_v0->unk_2C->unk_00; + for (j = 0; j < temp_v0->unk_2C->unk_08; j++, ptr++) { + ptr->unk_08 = (temp_v0->unk_34[j] & 2) != 0; + } + } +} + +void func_883099D8(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { + func_8002E8E4(arg0, arg1, arg2, 2); + func_8002E8E4(arg0 + 0x1B, arg1, arg3, 2); + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); + gDPSetRenderMode(gDisplayListHead++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetTexturePersp(gDisplayListHead++, G_TP_NONE); + gDPSetTextureFilter(gDisplayListHead++, G_TF_POINT); + gDPSetCombineMode(gDisplayListHead++, G_CC_DECALRGBA, G_CC_DECALRGBA); + + gDPLoadTextureBlock(gDisplayListHead++, D_4006A60, G_IM_FMT_IA, G_IM_SIZ_8b, 8, 10, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gDisplayListHead++, (arg0 + 0x12) << 2, (arg1 + 2) << 2, (arg0 + 0x1A) << 2, (arg1 + 0xC) << 2, + G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400); +} + +void func_88309C38(s32 arg0, s32 arg1, unk_func_88309C38_arg2* arg2, s32 arg3, s32 arg4, + unk_func_8830867C_034_03C_038* arg5) { + static Color_RGBA8 D_88317424 = { 0xB2, 0xFF, 0xC3, 0xFF }; + static Color_RGBA8 D_88317428 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + UNUSED s32 pad; + char* sp38; + char sp34[4]; + UNUSED s32 pad2; + s32 sp2C; + s32 sp28; + + sp38 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x5F); + if (arg4 & 2) { + func_8002D8C8(&D_800758E0, arg0 + 8, arg1 + 2); + } else { + func_8002D8C8(&D_800758F0, arg0 + 8, arg1 + 2); + } + + func_8001F3F4(); + func_8001F324(D_88317428.r, D_88317428.g, D_88317428.b, D_88317428.a); + func_8001EBE0(8, 0); + func_8001F1E8(arg0 + 0x2C, arg1 + 2, sp38); + + sprintf(sp34, "%d", arg3 + 1); + + sp28 = func_8001F5B0(0, 0, " 00"); + sp2C = func_8001F5B0(0, 0, sp38); + + func_8001F1E8(((arg0 + sp2C + sp28) - func_8001F5B0(0, 0, sp34)) + 0x2C, arg1 + 2, sp34); + func_8001F444(); + func_883099D8((arg5->unk_00.unk_14.unk_00 + arg0) - 0x35, arg1 + 8, arg2->unk_18, arg2->unk_14); +} + +s32 func_88309DC8(void) { + UNUSED s32 pad[2]; + s32 sp1C = func_8001F5B0(8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, 0x5F)); + s32 sp20 = func_8001F5B0(8, 0, " 00"); + + return sp1C + sp20 + 0x3D; +} + +void func_88309E28(unk_func_8830867C_034_03C* arg0, s32 arg1, s32 arg2, s32 arg3, MemoryPool* arg4) { + static Color_RGBA8 D_8831742C = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_88317430 = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_88317434 = { 0xA0, 0x96, 0x64, 0xFF }; + + s32 pad2; + s32 pad3; + s32 tmp = arg3 * 0x18; + s32 sp80; + s32 temp_v0; + s32 sp78; + unk_func_8850B254* sp74; + unk_func_8850878C* sp70; + char* sp6C; + unk_func_885012A4* sp68; + unk_func_88001300_000* sp64; + unk_func_8830867C_034_034* sp60; + unk_func_8830867C_034_034* sp5C; + + temp_v0 = func_88309DC8(); + sp80 = temp_v0 + 0x34; + sp78 = temp_v0 + 0x46; + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_034_03C)); + + arg0->unk_00.unk_20 = func_8830A474; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + + arg0->unk_2C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_038)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, sp78, tmp + 0x20); + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); + + sp74 = mem_pool_alloc(arg4, sizeof(unk_func_8850B254)); + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(sp74, 0, 0, sp78, 0x14, D_8831742C, D_88317430); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp74); + + arg0->unk_30 = mem_pool_alloc(arg4, sizeof(unk_func_88500994)); + ((func88500994)Memmap_GetFragmentVaddr(func_88500994))(arg0->unk_30, 0, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp74, arg0->unk_30); + + sp70 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp70, 0, 0, "", 8); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_30, sp70); + sp6C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x60); + + sp70 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))( + sp70, (arg0->unk_2C->unk_00.unk_14.unk_00 - func_8001F5B0(8, 0, sp6C)) / 2, 0, sp6C, 8); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_30, sp70); + sp6C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x61); + + sp70 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))( + sp70, (arg0->unk_2C->unk_00.unk_14.unk_00 - func_8001F5B0(8, 0, sp6C)) / 2, 0, sp6C, 8); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_30, sp70); + + sp68 = mem_pool_alloc(arg4, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(sp68, 0, 0x18, sp78, tmp + 8, D_88317434); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp68); + + arg0->unk_34 = mem_pool_alloc(arg4, sizeof(unk_func_88500994)); + ((func88500994)Memmap_GetFragmentVaddr(func_88500994))(arg0->unk_34, 0, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp68, arg0->unk_34); + + sp64 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(sp64, 0x2C); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_34, sp64); + + arg0->unk_38[0] = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_034_03C_038)); + ((func885060BC)Memmap_GetFragmentVaddr(func_885060BC))(arg0->unk_38[0], 0x12, 4, func_88309C38, sp80, 0x18, arg3, 1, + arg4); + arg0->unk_38[0]->unk_00.unk_28 |= 0x100; + ((func88506238)Memmap_GetFragmentVaddr(func_88506238))(arg0->unk_38[0], arg3, arg4); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_34, arg0->unk_38[0]); + + sp60 = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_034_034)); + func_8830A578(sp60, -0x10, 8, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_38[0]->unk_44, sp60); + + arg0->unk_38[1] = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_034_03C_038)); + ((func885060BC)Memmap_GetFragmentVaddr(func_885060BC))(arg0->unk_38[1], 0x12, 4, func_88309C38, sp80, 0x18, arg3, 1, + arg4); + arg0->unk_38[1]->unk_00.unk_28 |= 0x100; + ((func88506238)Memmap_GetFragmentVaddr(func_88506238))(arg0->unk_38[1], arg3, arg4); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_34, arg0->unk_38[1]); + + sp5C = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_034_034)); + func_8830A578(sp5C, -0x10, 8, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_38[1]->unk_44, sp5C); +} + +void func_8830A410(unk_func_8830867C_034_03C* arg0, unk_func_8830867C_034_03C_038_02C* arg1, + unk_func_8830867C_034_03C_038_02C* arg2) { + ((func885063B8)Memmap_GetFragmentVaddr(func_885063B8))(arg0->unk_38[0], arg1); + ((func885063B8)Memmap_GetFragmentVaddr(func_885063B8))(arg0->unk_38[1], arg2); + func_88309810(arg0); +} + +s32 func_8830A474(unk_func_8830867C_034_03C* arg0, Controller* arg1) { + s32 var_v1 = 0; + unk_func_8830867C_034_03C_038* sp18; + + if (arg0->unk_2C->unk_30 & 2) { + if (arg0->unk_34->unk_2C != 0) { + sp18 = arg0->unk_38[arg0->unk_34->unk_2C - 1]; + var_v1 = sp18->unk_00.unk_20(sp18, arg1); + if ((var_v1 == 0) && (gPlayer1Controller->buttonPressed & 0x8000)) { + sp18->unk_34[sp18->unk_38] ^= 2; + var_v1 = 0x80000004; + } + } + } else { + var_v1 = 1; + } + return var_v1; +} + +void func_8830A520(unk_func_8830867C_034_03C* arg0, s32 arg1) { + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_30, arg1); + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_34, arg1); +} + +void func_8830A578(unk_func_8830867C_034_034* arg0, s32 arg1, s32 arg2, s32 arg3) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_034_034)); + arg0->unk_00.unk_18 = func_8830A5E4; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + arg0->unk_30 = arg3; +} + +s32 func_8830A5E4(unk_func_8830867C_034_034* arg0, s32 arg1, s32 arg2) { + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_COPY); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + gDPSetAlphaCompare(gDisplayListHead++, G_AC_THRESHOLD); + gDPSetTexturePersp(gDisplayListHead++, G_TP_NONE); + gDPLoadTextureBlock(gDisplayListHead++, (arg0->unk_30 != 0) ? D_883186E8 : D_88318530, G_IM_FMT_RGBA, G_IM_SIZ_16b, + 12, 18, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle(gDisplayListHead++, arg1 << 2, arg2 << 2, (arg1 + 0xA) << 2, (arg2 + 0x11) << 2, + G_TX_RENDERTILE, 0, 0, 0x1000, 0x0400); + gDPPipeSync(gDisplayListHead++); + gDPSetAlphaCompare(gDisplayListHead++, G_AC_NONE); + + return 0; +} + +s32 func_8830A840(unk_func_8830867C_02C_144_000* arg0) { + s32 i; + s32 var_v1 = 0; + unk_func_8830867C_02C_0CC_000_000* ptr = arg0->unk_0C; + + for (i = 0; i < arg0->unk_14; i++) { + if (ptr[i].unk_08 != 0) { + var_v1 |= 2; + } + } + + return var_v1; +} + +void func_8830A88C(unk_func_8830867C_034* arg0, unk_func_8830867C_034_03C* arg1) { + s32 i; + unk_func_8830867C_034_03C_038* temp_v0 = arg1->unk_38[arg1->unk_34->unk_2C - 1]; + s32 var_v1 = 0; + + for (i = 0; i < temp_v0->unk_2C->unk_08; i++) { + if (arg0) {} + + if (temp_v0->unk_34[i] & 2) { + var_v1 = 2; + break; + } + } + + arg0->unk_30->unk_34[arg0->unk_30->unk_38] &= ~2; + arg0->unk_30->unk_34[arg0->unk_30->unk_38] |= var_v1; +} + +void func_8830A928(unk_func_8830867C_034* arg0) { + s32 i; + unk_func_8830867C_02C_144_000* var_s2 = arg0->unk_30->unk_2C->unk_00; + + for (i = 0; i < arg0->unk_30->unk_2C->unk_08; i++, var_s2++) { + arg0->unk_30->unk_34[i] = 0; + arg0->unk_30->unk_34[i] |= func_8830A840(var_s2); + } +} + +void func_8830A9D8(unk_func_8830867C_034* arg0) { + static Color_RGBA8 D_88317438 = { 0xF0, 0xF0, 0xF0, 0xFF }; + static Color_RGBA8 D_8831743C = { 0xF0, 0xF0, 0xF0, 0x4D }; + + s32 i; + s32 var_a1; + unk_func_88200FA0_030_030_1CEA00* temp_v0 = arg0->unk_30; + unk_func_8830867C_02C_0CC* ptr = temp_v0->unk_2C; + + var_a1 = 1; + + for (i = 0; i < ptr->unk_08; i++) { + if (temp_v0->unk_34[i] & 2) { + var_a1 = 0; + break; + } + } + + if (var_a1 != 0) { + arg0->unk_40->unk_00.unk_28 |= 2; + arg0->unk_40->unk_30 = (0, D_8831743C); + arg0->unk_40->unk_44 = arg0->unk_40->unk_44; + } else { + arg0->unk_40->unk_00.unk_28 &= ~2; + arg0->unk_40->unk_30 = (0, D_88317438); + arg0->unk_40->unk_44 = arg0->unk_40->unk_44; + } +} + +void func_8830AAA4(unk_func_8830867C_034* arg0, s32 arg1) { + unk_func_8830867C_02C_144_000* ptr = &((unk_func_8830867C_02C_144*)(arg0->unk_30->unk_2C))->unk_00[arg1]; + unk_func_8830867C_02C_0CC_000_000* ptr2 = ptr->unk_0C; + + ptr2->unk_08 = (arg0->unk_30->unk_34[arg1] & 2) != 0; +} + +void func_8830AADC(s32 arg0, s32 arg1, unk_func_88309C38_arg2* arg2, s32 arg3, s32 arg4, + unk_func_88200FA0_030_030* arg5) { + static Color_RGBA8 D_88317440 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + Color_RGBA8 sp34; + UNUSED s32 pad[2]; + + if (arg2 != NULL) { + if (arg4 & 2) { + func_8002D8C8(&D_800758E0, arg0 + 8, arg1 + 4); + } else { + func_8002D8C8(&D_800758F0, arg0 + 8, arg1 + 4); + } + sp34 = D_88317440; + func_8001F3F4(); + func_8001F324(sp34.r, sp34.g, sp34.b, sp34.a); + func_8001EBE0(8, 0); + func_8001F1E8(arg0 + 0x2C, arg1 + 4, func_8002D7C0(NULL, 0, D_8831A4C4, arg3 + 0x3B)); + func_8001F444(); + if (arg2->unk_14 == 1) { + func_883099D8((arg5->unk_00.unk_14.unk_00 + arg0) - 0x35, arg1 + 0xC, arg2->unk_0C->unk_18, + arg2->unk_0C->unk_14); + } + } +} + +s32 func_8830AC0C(void) { + s32 i; + s32 var_s1 = 0; + s32 var_v1; + + for (i = 0; i < 3; i++) { + var_v1 = func_8001F5B0(8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, i + 0x3B)); + + if (i == 0) { + var_v1 += 0x3D; + } + + if (var_s1 < var_v1) { + var_s1 = var_v1; + } + } + + return var_s1; +} + +void func_8830ACA0(unk_func_8830867C_034* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4) { + static Color_RGBA8 D_88317444 = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_88317448 = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_8831744C = { 0xA0, 0x96, 0x64, 0xFF }; + static Color_RGBA8 D_88317450 = { 0xFF, 0xFF, 0x00, 0xFF }; + + UNUSED s32 pad[3]; + char* sp88; + s32 sp84; + s32 sp80; + unk_func_8850B254* sp7C; + unk_func_8850878C* sp78; + unk_func_885012A4* sp74; + unk_func_8850BD40* sp70; + unk_func_88001300_000* sp6C; + char* sp68; + s32 sp64; + s32 sp60; + unk_func_88001300_03C_01C* sp5C; + unk_func_8850BD40* sp58; + unk_func_8850BD40* sp54; + unk_func_88503298* sp50; + + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_034)); + + arg0->unk_00.unk_20 = func_8830B380; + arg0->unk_00.unk_24 = func_8830B354; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + + sp80 = func_8830AC0C() + 0x36; + sp88 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x39); + sp84 = func_8001F5B0(8, 0, sp88); + if (sp84 < sp80) { + sp84 = sp80; + } + sp84 += 0x10; + + arg0->unk_38 = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_034_038)); + func_8830B404(arg0->unk_38, arg0); + + arg0->unk_2C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_038)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, sp84, 0xAC); + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); + + sp7C = mem_pool_alloc(arg4, sizeof(unk_func_8850B254)); + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(sp7C, 0, 0, sp84, 0x2C, D_88317444, D_88317448); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp7C); + + sp78 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp78, 8, 0, sp88, 8); + sp78->unk_3C = 0x18; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp7C, sp78); + + sp74 = mem_pool_alloc(arg4, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(sp74, 0, 0x30, sp84, 0x7C, D_8831744C); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp74); + + arg0->unk_30 = mem_pool_alloc(arg4, sizeof(unk_func_88200FA0_030_030)); + ((func885060BC)Memmap_GetFragmentVaddr(func_885060BC))(arg0->unk_30, 0, 4, func_8830AADC, sp84 - 0x12, 0x1C, 3, 1, + arg4); + ((func88506238)Memmap_GetFragmentVaddr(func_88506238))(arg0->unk_30, 3, arg4); + arg0->unk_30->unk_00.unk_28 |= 0x300; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp74, arg0->unk_30); + + arg0->unk_34 = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_034_034)); + func_8830A578(arg0->unk_34, arg0->unk_30->unk_00.unk_14.unk_00 + 3, 9, 1); + arg0->unk_34->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_30->unk_44, arg0->unk_34); + + sp70 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(sp70, arg0->unk_30); + ((func8850CC74)Memmap_GetFragmentVaddr(func_8850CC74))(arg0->unk_38, sp70); + sp68 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x46); + sp64 = func_8001F5B0(8, 0, sp68); + sp60 = sp64 + 0x10; + if (sp60 < 0x48) { + sp60 = 0x48; + } + + sp6C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func8850A40C)Memmap_GetFragmentVaddr(func_8850A40C))(sp6C, (sp84 - sp60) / 2, 0x5C, sp60, 0x18); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp74, sp6C); + + arg0->unk_40 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(arg0->unk_40, (sp60 - sp64) / 2, 2, sp68, 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp6C, arg0->unk_40); + + sp5C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_03C_01C)); + ((func88504570)Memmap_GetFragmentVaddr(func_88504570))(sp5C, -3, -3, sp6C->unk_14.unk_00 + 6, + sp6C->unk_14.unk_02 + 6, D_88317450); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp6C, sp5C); + + sp58 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(sp58, sp6C); + ((func8850CC74)Memmap_GetFragmentVaddr(func_8850CC74))(arg0->unk_38, sp58); + + arg0->unk_3C = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_034_03C)); + func_88309E28(arg0->unk_3C, arg0->unk_2C->unk_00.unk_14.unk_00 + 0x10, 0, 0xC, arg4); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_3C); + + sp54 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(sp54, arg0->unk_3C); + ((func8850CC74)Memmap_GetFragmentVaddr(func_8850CC74))(arg0->unk_38, sp54); + + sp50 = mem_pool_alloc(arg4, sizeof(unk_func_88503298)); + ((func88503298)Memmap_GetFragmentVaddr(func_88503298))(sp50, arg0->unk_2C, arg3); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, sp50); +} + +void func_8830B2EC(unk_func_8830867C_034* arg0, unk_func_8830867C_02C_144* arg1) { + unk_func_8830867C_02C_144_000_alt* sp1C; + + ((func885063B8)Memmap_GetFragmentVaddr(func_885063B8))(arg0->unk_30, arg1); + + sp1C = arg1->unk_00; + func_8830A928(arg0); + func_8830A410(arg0->unk_3C, &sp1C->unk_2C, &sp1C->unk_4C); +} + +void func_8830B354(unk_func_8830867C_034* arg0, s32 arg1) { + arg0->unk_00.unk_2A = arg1; + arg0->unk_38->unk_14(arg0->unk_38, arg1); +} + +s32 func_8830B380(unk_func_8830867C_034* arg0, Controller* arg1) { + s32 sp1C; + + if (arg0->unk_2C->unk_30 & 2) { + sp1C = arg0->unk_38->unk_10(arg0->unk_38, arg1); + if (!(sp1C & 1) && (sp1C & 4)) { + func_8830AAA4(arg0, 0); + func_88309960(arg0->unk_3C); + } + } else { + sp1C = 1; + } + return sp1C; +} + +void func_8830B404(unk_func_8830867C_034_038* arg0, unk_func_8830867C_034* arg1) { + ((func8850CBA8)Memmap_GetFragmentVaddr(func_8850CBA8))(arg0); + arg0->unk_10 = func_8830B450; + arg0->unk_24 = arg1; +} + +s32 func_8830B450(unk_func_8830867C_034_038* arg0, Controller* arg1) { + s32 var_v1 = 0; + s32 i; + unk_func_8830867C_034_038* var_a0; + + if (arg0->unk_20 > 0) { + var_a0 = arg0->unk_04; + + for (i = 0; i < arg0->unk_1C; i++) { + var_a0 = var_a0->unk_08; + } + + var_v1 = var_a0->unk_10(var_a0, arg1); + } + + switch (arg0->unk_1C) { + case 0: + if (var_v1 & 1) { + if (var_v1 & 8) { + arg0->unk_24->unk_34->unk_00.unk_28 &= ~1; + if (arg0->unk_24->unk_30->unk_38 != 0) { + arg0->unk_24->unk_34->unk_00.unk_28 |= 1; + } + func_8830A520(arg0->unk_24->unk_3C, arg0->unk_24->unk_30->unk_38); + } + } else if (var_v1 & 8) { + if (arg1->buttonPressed & 0x800) { + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 1); + func_8830A520(arg0->unk_24->unk_3C, 0); + var_v1 |= 0x80000001; + } else if (arg1->buttonPressed & 0x400) { + arg0->unk_24->unk_34->unk_00.unk_28 &= ~1; + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 1); + func_8830A520(arg0->unk_24->unk_3C, 0); + var_v1 |= 0x80000001; + } else if ((arg1->buttonPressed & 0x100) && (arg0->unk_24->unk_30->unk_38 != 0)) { + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 2); + var_v1 |= 0x80000001; + } + } else { + if (arg1->buttonPressed & 0x8000) { + arg0->unk_24->unk_30->unk_34[arg0->unk_24->unk_30->unk_38] ^= 2; + if (arg0->unk_24->unk_30->unk_38 != 0) { + func_883098D0(arg0->unk_24->unk_3C, + arg0->unk_24->unk_30->unk_34[arg0->unk_24->unk_30->unk_38] & 2); + } + func_8830A9D8(arg0->unk_24); + var_v1 = 0x80000005; + } else if (arg1->buttonPressed & 0x4000) { + var_v1 = 0x80000002; + } + } + break; + + case 1: + if (arg1->buttonPressed & 0x800) { + arg0->unk_24->unk_34->unk_00.unk_28 |= 1; + ((func88506BFC)Memmap_GetFragmentVaddr(func_88506BFC))(arg0->unk_24->unk_30, + arg0->unk_24->unk_30->unk_2C->unk_08 - 1); + func_8830A520(arg0->unk_24->unk_3C, arg0->unk_24->unk_30->unk_38); + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 0); + var_v1 = 0x80000009; + } else if (arg1->buttonPressed & 0x400) { + ((func88506BFC)Memmap_GetFragmentVaddr(func_88506BFC))(arg0->unk_24->unk_30, 0); + func_8830A520(arg0->unk_24->unk_3C, arg0->unk_24->unk_30->unk_38); + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 0); + var_v1 = 0x80000009; + } else if (arg1->buttonPressed & 0x8000) { + if (arg0->unk_24->unk_40->unk_00.unk_28 & 2) { + var_v1 = 0x80000101; + } else { + var_v1 = 0x80000004; + } + } else if (arg1->buttonPressed & 0x4000) { + var_v1 = 0x80000002; + } + break; + + case 2: + if (!(var_v1 & 1)) { + if (var_v1 & 8) { + if (arg1->buttonPressed & 0x200) { + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, 0); + var_v1 = 0x80000009; + } + } else if (var_v1 & 4) { + func_8830A88C(arg0->unk_24, arg0->unk_24->unk_3C); + func_8830A9D8(arg0->unk_24); + var_v1 |= 1; + } else if (arg1->buttonPressed & 0x4000) { + var_v1 = 0x80000002; + } + } + break; + } + return var_v1; +} + +void func_8830B8A0(unk_func_8830867C_034* arg0) { + func_8830A520(arg0->unk_3C, 0); + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0->unk_38, 1); + arg0->unk_38->unk_14(arg0->unk_38, 1); + arg0->unk_34->unk_00.unk_28 &= ~1; + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_2C); + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_3C->unk_2C); +} + +void func_8830B938(unk_func_8830867C_034* arg0) { + arg0->unk_2C->unk_2C = 0xB; + arg0->unk_3C->unk_2C->unk_2C = 0xB; +} + +s32 func_8830B954(unk_func_8830867C_034* arg0, Controller* arg1) { + s32 var_s0 = 0; + s32 temp_v0; + + func_8830B8A0(arg0); + func_8001F738(arg1); + + while (var_s0 == 0) { + func_8002EEA8(var_s0); + temp_v0 = arg0->unk_00.unk_20(arg0, arg1); + if (!(temp_v0 & 1)) { + if (temp_v0 & 2) { + var_s0 = 1; + } else if (temp_v0 & 4) { + var_s0 = 2; + } + } + ((func8850BC94)Memmap_GetFragmentVaddr(func_8850BC94))(temp_v0); + } + + func_8830B938(arg0); + return var_s0 - 1; +} + +void func_8830BA1C(s32 arg0, s32 arg1, char* arg2, s32 arg3, s32 arg4) { + static Color_RGBA8 D_88317454 = { 0xF0, 0xF0, 0xF0, 0xFF }; + static Color_RGBA8 D_88317458 = { 0xF0, 0xF0, 0xF0, 0x4D }; + + Color_RGBA8 sp1C; + + if (arg4 & 4) { + sp1C = (0, D_88317458); + } else { + sp1C = (0, D_88317454); + } + + func_8001F3F4(); + func_8001F324(sp1C.r, sp1C.g, sp1C.b, sp1C.a); + func_8001EBE0(8, 0); + func_8001F1E8(arg0 + 8, arg1 + 4, arg2); + func_8001F444(); +} + +void func_8830BAC4(unk_func_8830867C_030* arg0, unk_func_88001300_000* arg1, MemoryPool* arg2) { + static Color_RGBA8 D_8831745C = { 0xA0, 0x96, 0x64, 0xFF }; + + unk_func_88503298* sp44; + + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_030)); + + arg0->unk_00.unk_20 = func_8830BF5C; + arg0->unk_00.unk_24 = func_8830BF30; + arg0->unk_00.unk_10.unk_00 = 0; + arg0->unk_00.unk_10.unk_02 = 0; + + arg0->unk_2C = mem_pool_alloc(arg2, sizeof(unk_func_88001300_038)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, 0x10, 0x10); + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); + + arg0->unk_38 = mem_pool_alloc(arg2, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(arg0->unk_38, 0, 0, 0x10, 0x10, D_8831745C); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, arg0->unk_38); + + arg0->unk_3C = mem_pool_alloc(arg2, sizeof(unk_func_88200FA0_030_030_1CEA00)); + ((func885060BC)Memmap_GetFragmentVaddr(func_885060BC))(arg0->unk_3C, 0, 4, func_8830BA1C, 0x10, 0x10, 0xA, 1, arg2); + ((func88506238)Memmap_GetFragmentVaddr(func_88506238))(arg0->unk_3C, 0xA, arg2); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, arg0->unk_3C); + + if (arg1 != NULL) { + sp44 = mem_pool_alloc(arg2, sizeof(unk_func_88503298)); + ((func88503298)Memmap_GetFragmentVaddr(func_88503298))(sp44, arg0->unk_2C, arg1); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, sp44); + } +} + +void func_8830BCE8(unk_func_8830867C_030* arg0, char** arg1, s32 arg2) { + s32 temp_v0; + s32 var_s1; + s32 i; + + var_s1 = 0; + for (i = 0; i < arg2; i++) { + temp_v0 = func_8001F5B0(8, 0, arg1[i]); + if (var_s1 < temp_v0) { + var_s1 = temp_v0; + } + } + + var_s1 += 0x10; + func_8002CBB0(&arg0->unk_40, arg1, arg2, arg2); + ((func8850633C)Memmap_GetFragmentVaddr(func_8850633C))(arg0->unk_3C, &arg0->unk_40); + + arg0->unk_3C->unk_4A = arg2; + + arg0->unk_2C->unk_00.unk_14.unk_00 = var_s1; + arg0->unk_2C->unk_00.unk_14.unk_02 = (arg0->unk_40.unk_08 * 0x1C) + 8; + + arg0->unk_3C->unk_3C = var_s1; + arg0->unk_3C->unk_3E = 0x1C; + arg0->unk_3C->unk_44->unk_00.unk_14.unk_00 = var_s1; + arg0->unk_3C->unk_44->unk_00.unk_14.unk_02 = 0x22; + arg0->unk_3C->unk_50 = 0; + arg0->unk_3C->unk_52 = -3; + arg0->unk_3C->unk_00.unk_14 = arg0->unk_2C->unk_00.unk_14; + arg0->unk_38->unk_00.unk_14 = arg0->unk_2C->unk_00.unk_14; +} + +void func_8830BE3C(unk_func_8830867C_030* arg0) { + s32 temp_a1; + s32 temp_v0; + s32 temp_v0_2; + s32 temp_v1_4; + + temp_v0 = arg0->unk_2C->unk_00.unk_14.unk_00 + 8; + temp_a1 = arg0->unk_2C->unk_00.unk_14.unk_02 + 8; + + if (arg0->unk_00.unk_28 & 0x100) { + if (arg0->unk_50 >= (arg0->unk_30.unk_02 + temp_a1)) { + arg0->unk_00.unk_10.unk_02 = arg0->unk_30.unk_02 + 4; + } else { + temp_a1 = ((arg0->unk_30.unk_02 + temp_a1) - arg0->unk_50); + arg0->unk_00.unk_10.unk_02 = (arg0->unk_30.unk_02 - temp_a1) + 4; + } + + temp_v0_2 = arg0->unk_30.unk_00 + arg0->unk_34.unk_00; + if (arg0->unk_4C >= (temp_v0_2 + temp_v0)) { + arg0->unk_00.unk_10.unk_00 = temp_v0_2 + 4; + } else { + arg0->unk_00.unk_10.unk_00 = (arg0->unk_30.unk_00 - temp_v0) + 4; + } + } else { + if (arg0->unk_4C >= (arg0->unk_30.unk_00 + temp_v0)) { + arg0->unk_00.unk_10.unk_00 = arg0->unk_30.unk_00 + 4; + } else { + temp_v1_4 = ((arg0->unk_30.unk_00 + temp_v0) - arg0->unk_4C); + arg0->unk_00.unk_10.unk_00 = (arg0->unk_30.unk_00 - temp_v1_4) + 4; + } + + temp_v0 = arg0->unk_30.unk_02 + arg0->unk_34.unk_02; + if (arg0->unk_50 >= (temp_v0 + temp_a1)) { + arg0->unk_00.unk_10.unk_02 = temp_v0 + 4; + } else { + arg0->unk_00.unk_10.unk_02 = (arg0->unk_30.unk_02 - temp_a1) + 4; + } + } +} + +void func_8830BF30(unk_func_8830867C_030* arg0, s32 arg1) { + arg0->unk_00.unk_2A = arg1; + arg0->unk_3C->unk_00.unk_24(&arg0->unk_3C->unk_00, arg1); +} + +s32 func_8830BF5C(unk_func_8830867C_030* arg0, Controller* arg1) { + s32 var_v1; + + if (arg0->unk_2C->unk_30 & 2) { + var_v1 = arg0->unk_3C->unk_00.unk_20(arg0->unk_3C, arg1); + if (var_v1 == 0) { + if (arg1->buttonPressed & 0x4000) { + var_v1 = 0x80000002; + } else if (arg1->buttonPressed & 0x8000) { + var_v1 = 0x80000004; + } + } + } else { + var_v1 = 1; + } + return var_v1; +} + +void func_8830BFE0(unk_func_8830867C_030* arg0, s32 arg1) { + arg0->unk_3C->unk_38 = arg1; + ((func88506CE4)Memmap_GetFragmentVaddr(func_88506CE4))(arg0->unk_3C); + arg0->unk_00.unk_24(&arg0->unk_00, 1); + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_2C); +} + +void func_8830C048(unk_func_8830867C_030* arg0) { + arg0->unk_2C->unk_2C = 0xB; +} + +u32 func_8830C058(unk_func_8830867C_030* arg0, Controller* arg1, s32 arg2) { + s32 var_s0; + s32 var_s1 = 0; + + func_8830BFE0(arg0, arg2); + + while (var_s1 == NULL) { + func_8002EEA8(var_s1); + var_s0 = arg0->unk_00.unk_20(arg0, arg1); + if (var_s0 & 2) { + var_s1 = 1; + } else if (var_s0 & 4) { + if (arg0->unk_3C->unk_34[arg0->unk_3C->unk_38] & 4) { + var_s0 = (var_s0 & ~4) | 0x100; + } else { + var_s1 = arg0->unk_3C->unk_38 + 2; + } + } + ((func8850BC94)Memmap_GetFragmentVaddr(func_8850BC94))(var_s0); + } + func_8830C048(arg0); + return var_s1 - 1; +} + +void func_8830C150(s32 arg0, s32 arg1, char* arg2, s32 arg3, s32 arg4) { + static Color_RGBA8 D_88317460 = { 0xF0, 0xF0, 0xF0, 0xFF }; + static Color_RGBA8 D_88317464 = { 0xF0, 0xF0, 0xF0, 0x4D }; + static Color_RGBA8 D_88317468 = { 0xF0, 0xF0, 0x00, 0xFF }; + + Color_RGBA8 sp24; + UNUSED s32 pad[2]; + + if (arg4 & 2) { + sp24 = (0, D_88317468); + } else if (arg4 & 4) { + sp24 = (0, D_88317464); + } else { + sp24 = (0, D_88317460); + } + + func_8001F3F4(); + func_8001F324(sp24.r, sp24.g, sp24.b, sp24.a); + func_8001EBE0(8, 0); + func_8001F1E8(arg0 + 0x11, arg1 + 4, arg2); + func_8001F444(); +} + +void func_8830C218(unk_func_8830867C_038* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4) { + static Color_RGBA8 D_8831746C = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_88317470 = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_88317474 = { 0xA0, 0x96, 0x64, 0xFF }; + static Color_RGBA8 D_88317478 = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_8831747C = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_88317480 = { 0xA0, 0x96, 0x64, 0xFF }; + static Color_RGBA8 D_88317484 = { 0xB2, 0xFF, 0xC3, 0xFF }; + static Color_RGBA8 D_88317488 = { 0xFF, 0xB2, 0xC3, 0xFF }; + + s32 i; + UNUSED s32 pad; + s32 spAC; + UNUSED s32 pad2; + s32 spA4; + UNUSED s32 pad3; + s32 sp9C; + s32 sp98; + s32 sp94; + s32 tmp; + s32 temp_v0; + unk_func_8850B254* sp88; + unk_func_8850878C* sp84; + s32 temp_v0_6; + s32 temp_v0_7; + unk_func_885012A4* temp_s0_2; + unk_func_88503298* temp_s0_3; + unk_func_8850B254* sp70; + char* sp6C; + unk_func_8850878C* sp68; + unk_func_885012A4* sp64; + unk_func_8850878C* sp60; + char* sp5C; + + spAC = func_8001F5B0(8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, 0x2A)); + func_8002CBC0(&arg0->unk_34, 4, arg4); + func_8002CC2C(&arg0->unk_34, func_8002D7C0(NULL, 0, D_8831A4C4, 0x2C), 0); + func_8002CC2C(&arg0->unk_34, func_8002D7C0(NULL, 0, D_8831A4C4, 0x2D), 1); + func_8002CC2C(&arg0->unk_34, func_8002D7C0(NULL, 0, D_8831A4C4, 0x30), 2); + func_8002CC2C(&arg0->unk_34, func_8002D7C0(NULL, 0, D_8831A4C4, 0x31), 3); + + for (i = 0; i < 4; i++) { + temp_v0 = func_8001F5B0(8, 0, arg0->unk_34.unk_00[i]); + if (spAC < temp_v0) { + spAC = temp_v0; + } + } + + arg0->unk_30 = mem_pool_alloc(arg4, sizeof(unk_func_88200FA0_030_030_1CEA00)); + ((func885060BC)Memmap_GetFragmentVaddr(func_885060BC))(arg0->unk_30, 0, 4, func_8830C150, spAC, 0x1C, 4, 1, arg4); + ((func88506384)Memmap_GetFragmentVaddr(func_88506384))(arg0->unk_30, &arg0->unk_34, arg4); + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, 0x44); + + arg0->unk_00.unk_20 = func_8830CE00; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + + arg0->unk_2C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_038)); + tmp = spAC + 0x10; + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, tmp, 0xA8); + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); + + sp88 = mem_pool_alloc(arg4, sizeof(unk_func_8850B254)); + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(sp88, 0, 0, tmp, 0x2C, D_8831746C, D_88317470); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp88); + + sp84 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp84, 8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, 0x2A), 8); + sp84->unk_3C = 0x18; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp88, sp84); + + temp_s0_2 = mem_pool_alloc(arg4, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(temp_s0_2, 0, 0x30, tmp, 0x78, D_88317474); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, temp_s0_2); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s0_2, arg0->unk_30); + + temp_s0_3 = mem_pool_alloc(arg4, sizeof(unk_func_88503298)); + ((func88503298)Memmap_GetFragmentVaddr(func_88503298))(temp_s0_3, arg0->unk_2C, arg3); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, temp_s0_3); + + arg0->unk_40 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_038)); + + sp9C = 0; + for (i = 0; i < 3; i++) { + temp_v0_6 = func_8001F5B0(8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, i + 0x32)); + if (sp9C < temp_v0_6) { + sp9C = temp_v0_6; + } + } + + sp98 = 0; + for (i = 0; i < 3; i++) { + temp_v0_7 = func_8001F5B0(8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, i + 0x35)); + if (sp98 < temp_v0_7) { + sp98 = temp_v0_7; + } + } + + spA4 = sp9C + sp98 + 0x10; + sp94 = func_8001F5B0(8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, 0x38)); + if (spA4 < sp94) { + spA4 = sp94; + } + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_40, arg0->unk_2C->unk_00.unk_14.unk_00 + 0x10, + 0x18, spA4 + 0x10, 0x90); + arg0->unk_40->unk_00.unk_28 |= 0x200; + arg0->unk_40->unk_00.unk_28 |= 0x400; + arg0->unk_40->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_40); + + sp70 = mem_pool_alloc(arg4, sizeof(unk_func_8850B254)); + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(sp70, 0, 0, arg0->unk_40->unk_00.unk_14.unk_00, 0x14, + D_88317478, D_8831747C); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_40, sp70); + sp6C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x2B); + + sp68 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))( + sp68, (arg0->unk_40->unk_00.unk_14.unk_00 - func_8001F5B0(8, 0, sp6C)) / 2, 0, sp6C, 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp70, sp68); + + sp64 = mem_pool_alloc(arg4, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(sp64, 0, 0x18, arg0->unk_40->unk_00.unk_14.unk_00, 0x78, + D_88317480); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_40, sp64); + + sp60 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + sp5C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x32); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp60, ((sp9C - func_8001F5B0(8, 0, sp5C)) / 2) + 8, 8, sp5C, + 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, sp60); + + sp60 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + sp5C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x33); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp60, ((sp9C - func_8001F5B0(8, 0, sp5C)) / 2) + 8, 0x24, + sp5C, 8); + sp60->unk_30 = (0, D_88317484); + sp60->unk_44 = sp60->unk_44; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, sp60); + + sp60 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + sp5C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x34); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp60, ((sp9C - func_8001F5B0(8, 0, sp5C)) / 2) + 8, 0x40, + sp5C, 8); + sp60->unk_30 = (0, D_88317488); + sp60->unk_44 = sp60->unk_44; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, sp60); + + sp60 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp60, sp9C + 0x18, 8, + func_8002D7C0(NULL, 0, D_8831A4C4, 0x35), 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, sp60); + + sp60 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp60, sp9C + 0x18, 0x24, + func_8002D7C0(NULL, 0, D_8831A4C4, 0x36), 8); + sp60->unk_30 = (0, D_88317484); + sp60->unk_44 = sp60->unk_44; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, sp60); + + sp60 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp60, sp9C + 0x18, 0x40, + func_8002D7C0(NULL, 0, D_8831A4C4, 0x37), 8); + sp60->unk_30 = (0, D_88317488); + sp60->unk_44 = sp60->unk_44; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, sp60); + + sp60 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + sp5C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x38); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp60, (arg0->unk_40->unk_00.unk_14.unk_00 - sp94) / 2, 0x5C, + sp5C, 8); + sp60->unk_3C = 0x18; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, sp60); +} + +void func_8830CD4C(unk_func_8830867C_038* arg0, s32 arg1) { + s32 sp1C; + + ((func8850628C)Memmap_GetFragmentVaddr(func_8850628C))(arg0->unk_30); + if (arg1 == -1) { + sp1C = 0; + arg0->unk_30->unk_34[arg0->unk_30->unk_2C->unk_08 - 1] |= 4; + } else { + sp1C = arg1; + arg0->unk_30->unk_34[arg1] |= 2; + } + ((func88506BFC)Memmap_GetFragmentVaddr(func_88506BFC))(arg0->unk_30, sp1C); +} + +s32 func_8830CE00(unk_func_8830867C_038* arg0, Controller* arg1) { + s32 var_v1; + + if (arg0->unk_2C->unk_30 & 2) { + var_v1 = arg0->unk_30->unk_00.unk_20(arg0->unk_30, arg1); + if (var_v1 == 0) { + if (arg1->buttonPressed & 0x4000) { + var_v1 = 0x80000002; + } else if (arg1->buttonPressed & 0x8000) { + var_v1 = 0x80000004; + } + } + } else { + var_v1 = 1; + } + return var_v1; +} + +s32 func_8830CE84(unk_func_8830867C_038* arg0, Controller* arg1) { + s32 temp_v0; + s32 var_s0; + + var_s0 = NULL; + arg0->unk_00.unk_24(&arg0->unk_00, 1); + + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_2C); + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_40); + + while (var_s0 == 0) { + func_8002EEA8(var_s0); + temp_v0 = arg0->unk_00.unk_20(arg0, arg1); + if (!(temp_v0 & 1)) { + if (temp_v0 & 2) { + var_s0 = 1; + } else if (temp_v0 & 4) { + var_s0 = arg0->unk_30->unk_38 + 2; + } + } + ((func8850BC94)Memmap_GetFragmentVaddr(func_8850BC94))(temp_v0); + } + arg0->unk_2C->unk_2C = 0xB; + arg0->unk_40->unk_2C = 0xB; + return var_s0 - 1; +} + +void func_8830CF88(unk_func_8830867C_044_038* arg0) { + s32 tmp = ((arg0->unk_30.unk_0C - arg0->unk_30.unk_10) - 1) * arg0->unk_44->unk_00.unk_14.unk_00; + + arg0->unk_44->unk_00.unk_10.unk_00 = tmp; + arg0->unk_44->unk_00.unk_10.unk_02 = arg0->unk_44->unk_00.unk_10.unk_02; +} + +void func_8830CFBC(unk_func_8830867C_044_038* arg0, s32 arg1, s32 arg2, MemoryPool* arg3) { + s32 sp2C; + + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_044_038)); + + arg0->unk_00.unk_18 = func_8830D11C; + arg0->unk_00.unk_20 = func_8830D268; + arg0->unk_00.unk_24 = func_8830D0B4; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + + sp2C = func_8001F5B0(8, 0, "0"); + + arg0->unk_44 = mem_pool_alloc(arg3, sizeof(unk_func_8820E99C_030_044)); + ((func88504F98)Memmap_GetFragmentVaddr(func_88504F98))(arg0->unk_44, -1, 0, sp2C + 2, 0x14); + arg0->unk_44->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_44); +} + +void func_8830D0B4(unk_func_8830867C_044_038* arg0, s32 arg1) { + arg0->unk_00.unk_2A = arg1; + arg0->unk_44->unk_00.unk_24(&arg0->unk_44->unk_00, arg1); + arg0->unk_44->unk_00.unk_28 &= ~1; + if (arg1 & 0x101) { + arg0->unk_44->unk_00.unk_28 |= 1; + } +} + +s32 func_8830D11C(unk_func_8830867C_044_038* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_8831748C = { 0xF0, 0xF0, 0xF0, 0xFF }; + + s32 i; + s32 var_s2 = arg0->unk_30.unk_00; + + func_8001F3F4(); + func_8001F324(D_8831748C.r, D_8831748C.g, D_8831748C.b, D_8831748C.a); + func_8001EBE0(8, 2); + + for (i = 0; i < arg0->unk_30.unk_0C; i++) { + func_8001F2E4((((arg0->unk_30.unk_0C - i) - 1) * arg0->unk_44->unk_00.unk_14.unk_00) + arg1, arg2, + (var_s2 % 10) + 0x30); + var_s2 /= 10; + } + + func_8001F444(); + return 0; +} + +s32 func_8830D268(unk_func_8830867C_044_038* arg0, Controller* arg1) { + s32 var_v1 = func_8002DF68(&arg0->unk_30, func_8001F750() & 0xFFFF); + + if (!(var_v1 & 1)) { + if (!(var_v1 & 8)) { + if (arg1->buttonPressed & 0x4000) { + var_v1 = 0x80000002; + } else if (arg1->buttonPressed & 0x8000) { + var_v1 = 0x80000004; + } + } + } else { + func_8830CF88(arg0); + } + return var_v1; +} + +void func_8830D2F8(unk_func_8830867C_044* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4) { + static Color_RGBA8 D_88317490 = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_88317494 = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_88317498 = { 0xA0, 0x96, 0x64, 0xFF }; + static Color_RGBA8 D_8831749C = { 0xC8, 0xC8, 0xFF, 0xFF }; + static Color_RGBA8 D_883174A0 = { 0xFF, 0xFF, 0x00, 0xFF }; + + s32 i; + s32 temp_v0; + s32 sp94; + s32 sp90; + s32 sp8C; + unk_func_8850878C* temp_s0_5; + unk_func_88001300_03C_01C* temp_s0_6; + unk_func_8850B254* sp80; + unk_func_88001300_03C* ptr; + unk_func_885012A4* sp78; + UNUSED s32 pad; + unk_func_8850878C* temp_s0; + unk_func_8850BD40* temp_s0_2; + unk_func_8850BD40* temp_s0_3; + unk_func_88001300_000* sp64; + char* sp60; + unk_func_8850878C* temp_s0_4; + s32 sp58; + s32 tmp; + unk_func_88503298* temp_s0_7; + + sp94 = func_8001F5B0(4, 0, func_8002D7C0(NULL, 0, D_8831A4C4, 0x48)); + sp90 = (func_8001F5B0(8, 0, "0") * 3) + 6; + sp8C = 0; + + for (i = 0; i < 2; i++) { + temp_v0 = func_8001F5B0(8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, i + 0x49)); + if (sp8C < temp_v0) { + sp8C = temp_v0; + } + } + + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_044)); + + arg0->unk_00.unk_20 = func_8830DC0C; + arg0->unk_00.unk_24 = func_8830DBE0; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + + arg0->unk_40 = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_044_040)); + func_8830DD8C(arg0->unk_40, arg0); + + arg0->unk_2C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_038)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, (sp90 + sp94) + sp90 + sp8C + 0x34, + 0x5C); + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); + + sp80 = mem_pool_alloc(arg4, sizeof(unk_func_8850B254)); + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(sp80, 0, 0, (sp90 + sp94) + sp90 + sp8C + 0x34, 0x14, + D_88317490, D_88317494); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp80); + + temp_s0 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(temp_s0, 8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, 0x47), 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp80, temp_s0); + + sp78 = mem_pool_alloc(arg4, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(sp78, 0, 0x18, (sp90 + sp94) + sp90 + sp8C + 0x34, 0x44, + D_88317498); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp78); + + arg0->unk_38 = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_044_038)); + func_8830CFBC(arg0->unk_38, 8, 0xA, arg4); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp78, arg0->unk_38); + + temp_s0_2 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(temp_s0_2, arg0->unk_38); + ((func8850CC74)Memmap_GetFragmentVaddr(func_8850CC74))(arg0->unk_40, temp_s0_2); + + arg0->unk_3C = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_044_038)); + func_8830CFBC(arg0->unk_3C, (sp90 + sp94) + 0x18, 0xA, arg4); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp78, arg0->unk_3C); + + temp_s0_3 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(temp_s0_3, arg0->unk_3C); + ((func8850CC74)Memmap_GetFragmentVaddr(func_8850CC74))(arg0->unk_40, temp_s0_3); + + temp_s0_4 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(temp_s0_4, sp90 + 0x10, 0xD, + func_8002D7C0(NULL, 0, D_8831A4C4, 0x48), 4); + temp_s0_4->unk_30 = D_8831749C; + temp_s0_4->unk_44 = temp_s0_4->unk_44; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp78, temp_s0_4); + + arg0->unk_44 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_03C)); + ((func8850C284)Memmap_GetFragmentVaddr(func_8850C284))(arg0->unk_44, 2, 1, arg4); + arg0->unk_44->unk_28 |= 0x100; + ((func8850CC74)Memmap_GetFragmentVaddr(func_8850CC74))(arg0->unk_40, arg0->unk_44); + + sp64 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + tmp = (sp90 * 2) + sp94 + 0x20; + ((func8850A40C)Memmap_GetFragmentVaddr(func_8850A40C))(sp64, tmp, 8, sp8C + 0xC, 0x18); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp78, sp64); + ptr = arg0->unk_44; + ptr->unk_18[0] = sp64; + sp60 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x49); + sp58 = func_8001F5B0(8, 0, sp60); + + temp_s0_5 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(temp_s0_5, ((sp8C - sp58) / 2) + 6, 2, sp60, 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp64, temp_s0_5); + + arg0->unk_34 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func8850A40C)Memmap_GetFragmentVaddr(func_8850A40C))(arg0->unk_34, tmp, 0x24, sp8C + 0xC, 0x18); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp78, arg0->unk_34); + arg0->unk_44->unk_18[arg0->unk_44->unk_2C] = arg0->unk_34; + sp60 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x4A); + sp58 = func_8001F5B0(8, 0, sp60); + + arg0->unk_30 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(arg0->unk_30, ((sp8C - sp58) / 2) + 6, 2, sp60, 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_34, arg0->unk_30); + ((func8850CAB4)Memmap_GetFragmentVaddr(func_8850CAB4))(arg0->unk_44); + + temp_s0_6 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_03C_01C)); + ((func88504570)Memmap_GetFragmentVaddr(func_88504570))(temp_s0_6, 0, 0, 0x10, 0x10, D_883174A0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp78, temp_s0_6); + arg0->unk_44->unk_1C = temp_s0_6; + + temp_s0_7 = mem_pool_alloc(arg4, sizeof(unk_func_88503298)); + ((func88503298)Memmap_GetFragmentVaddr(func_88503298))(temp_s0_7, arg0->unk_2C, arg3); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, temp_s0_7); +} + +void func_8830DAB8(unk_func_8830867C_044* arg0, s32 arg1, s32 arg2, s32 arg3) { + static Color_RGBA8 D_883174A4 = { 0xF0, 0xF0, 0xF0, 0xFF }; + static Color_RGBA8 D_883174A8 = { 0xF0, 0xF0, 0xF0, 0x4D }; + static Color_RGBA8 D_883174AC = { 0x66, 0x5B, 0x47, 0xFF }; + + unk_func_88001300_000* temp_v0; + unk_func_88001300_000* temp_v0_2; + unk_func_8850878C* temp_v1; + unk_func_8850878C* temp_v1_2; + + arg0->unk_38->unk_30.unk_0C = 3; + arg0->unk_38->unk_30.unk_00 = arg1; + arg0->unk_38->unk_30.unk_04 = 1; + arg0->unk_38->unk_30.unk_08 = 0x64; + arg0->unk_38->unk_30.unk_10 = 0; + + func_8830CF88(arg0->unk_38); + + arg0->unk_3C->unk_30.unk_0C = 3; + arg0->unk_3C->unk_30.unk_00 = arg2; + arg0->unk_3C->unk_30.unk_04 = 1; + arg0->unk_3C->unk_30.unk_08 = 0x64; + arg0->unk_3C->unk_30.unk_10 = 0; + + func_8830CF88(arg0->unk_3C); + + if (arg3 == 0) { + arg0->unk_34->unk_28 |= 2; + arg0->unk_30->unk_30 = (0, D_883174A8); + arg0->unk_30->unk_44 = arg0->unk_30->unk_44; + } else { + arg0->unk_34->unk_28 &= ~2; + arg0->unk_30->unk_30 = (0, D_883174A4); + arg0->unk_30->unk_44 = arg0->unk_30->unk_44; + } +} + +void func_8830DBE0(unk_func_8830867C_044* arg0, s32 arg1) { + arg0->unk_00.unk_2A = arg1; + arg0->unk_40->unk_14(arg0->unk_40, arg1); +} + +s32 func_8830DC0C(unk_func_8830867C_044* arg0, Controller* arg1) { + s32 var_v1; + + if (arg0->unk_2C->unk_30 & 2) { + var_v1 = arg0->unk_40->unk_10(arg0->unk_40, arg1); + } else { + var_v1 = 1; + } + return var_v1; +} + +s32 func_8830DC58(unk_func_8830867C_044* arg0, Controller* arg1) { + s32 temp_v0; + s32 var_v0; + s32 var_s0 = 0; + + ((func8850CB48)Memmap_GetFragmentVaddr(func_8850CB48))(arg0->unk_44, 0); + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0->unk_40, 0); + + arg0->unk_40->unk_14(arg0->unk_40, 1); + + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_2C); + while (var_s0 == 0) { + func_8002EEA8(var_s0); + + temp_v0 = arg0->unk_00.unk_20(arg0, arg1); + + if (!(temp_v0 & 1)) { + if (temp_v0 & 2) { + var_s0 = 1; + } else if (temp_v0 & 4) { + if (arg0->unk_44->unk_24 == 0) { + var_v0 = 1; + } else { + var_v0 = 2; + } + var_s0 = var_v0 + 1; + } + } + ((func8850BC94)Memmap_GetFragmentVaddr(func_8850BC94))(temp_v0); + } + arg0->unk_2C->unk_2C = 0xB; + return var_s0 - 1; +} + +void func_8830DD8C(unk_func_8830867C_044_040* arg0, unk_func_8830867C_044* arg1) { + ((func8850CBA8)Memmap_GetFragmentVaddr(func_8850CBA8))(arg0); + arg0->unk_10 = func_8830DDD8; + arg0->unk_24 = arg1; +} + +s32 func_8830DDD8(unk_func_8830867C_044_040* arg0, Controller* arg1) { + s32 var_v1; + UNUSED s32 pad; + s32 i; + unk_func_8830867C_034_038* var_a0; + + var_v1 = 0; + if (arg0->unk_20 > 0) { + var_a0 = arg0->unk_04; + + for (i = 0; i < arg0->unk_1C; i++) { + var_a0 = var_a0->unk_08; + } + var_v1 = var_a0->unk_10(var_a0, arg1); + } + + if (var_v1 & 1) { + return var_v1; + } + + if (var_v1 == 0) { + if (arg1->buttonPressed & 0x4000) { + var_v1 = 0x80000002; + } else if (arg1->buttonPressed & 0x8000) { + var_v1 = 0x80000004; + } + } + + if (var_v1 & 8) { + if (arg1->buttonPressed & 0x200) { + s32 var_a1 = arg0->unk_1C; + + if (var_a1 == 0) { + var_a1 = 3; + } + var_a1--; + + switch (var_a1) { + case 0: + arg0->unk_24->unk_38->unk_30.unk_10 = 0; + func_8830CF88(arg0->unk_24->unk_38); + break; + + case 1: + arg0->unk_24->unk_3C->unk_30.unk_10 = 0; + func_8830CF88(arg0->unk_24->unk_3C); + break; + } + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, var_a1); + var_v1 |= 0x80000001; + } else if (arg1->buttonPressed & 0x100) { + s32 var_a1 = arg0->unk_1C + 1; + + if (var_a1 == 3) { + var_a1 = 0; + } + + switch (var_a1) { + case 0: + arg0->unk_24->unk_38->unk_30.unk_10 = 2; + func_8830CF88(arg0->unk_24->unk_38); + break; + + case 1: + arg0->unk_24->unk_3C->unk_30.unk_10 = 2; + func_8830CF88(arg0->unk_24->unk_3C); + break; + } + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0, var_a1); + var_v1 |= 0x80000001; + } + } else if (!(var_v1 & 2) && (var_v1 & 4)) { + switch (arg0->unk_1C) { + case 2: + break; + + case 0: + case 1: + var_v1 = 1; + break; + } + } + return var_v1; +} + +void func_8830E090(s32 arg0, s32 arg1, unk_func_88309C38_arg2* arg2, s32 arg3, s32 arg4, + unk_func_8821421C_038_034* arg5) { + static Color_RGBA8 D_883174B0 = { 0x54, 0x4B, 0x3A, 0xFF }; + static Color_RGBA8 D_883174B4 = { 0x99, 0x89, 0x6A, 0xFF }; + + Color_RGBA8 sp84; + UNUSED s32 pad; + s32 sp7C; + s32 sp78; + char sp74[4]; + char* sp70; + UNUSED s32 pad2; + s32 temp_a0; + s32 temp_a3; + + sp7C = func_8001F5B0(4, 0, "00"); + sp78 = (arg5->unk_00.unk_3C - sp7C) - 0x18; + if (arg4 & 2) { + sp84 = func_8002D444(D_883174B0, 1.4f); + } else { + sp84 = (0, D_883174B0); + } + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + temp_a3 = ((sp84.r << 8) & 0xF800) | ((sp84.g << 3) & 0x7C0) | ((sp84.b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a3 << 0x10) | temp_a3); + gDPFillRectangle(gDisplayListHead++, arg0, arg1 + 1, (arg5->unk_00.unk_3C + arg0) - 1, + (arg1 + arg5->unk_00.unk_3E) - 2); + + temp_a0 = ((D_883174B4.r << 8) & 0xF800) | ((D_883174B4.g << 3) & 0x7C0) | ((D_883174B4.b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a0 << 0x10) | temp_a0); + gDPFillRectangle(gDisplayListHead++, arg0, arg1, (arg5->unk_00.unk_3C + arg0) - 1, arg1); + + temp_a0 = ((D_883174B4.r << 8) & 0xF800) | ((D_883174B4.g << 3) & 0x7C0) | ((D_883174B4.b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a0 << 0x10) | temp_a0); + gDPFillRectangle(gDisplayListHead++, arg0, (arg1 + arg5->unk_00.unk_3E) - 1, (arg5->unk_00.unk_3C + arg0) - 1, + (arg1 + arg5->unk_00.unk_3E) - 1); + + sprintf(sp74, "%d", arg3 + 1); + + func_8001F3F4(); + func_8001EBE0(4, 0); + func_8001F324(0xF0, 0xF0, 0xF0, 0xFF); + func_8001F1E8(((arg0 + sp7C) - func_8001F5B0(0, 0, sp74)) + 8, arg1 + 8, sp74); + func_8001F324(arg2->unk_04->unk_04.r, arg2->unk_04->unk_04.g, arg2->unk_04->unk_04.b, arg2->unk_04->unk_04.a); + func_8001EBE0(8, 0); + sp70 = func_8002D7C0(NULL, 0, D_8831A4D4, arg2->unk_04->unk_00); + func_8001F1E8(((sp78 - func_8001F5B0(0, 0, sp70)) / 2) + arg0 + sp7C + 0x10, arg1 + 4, sp70); + func_8001F444(); +} + +void func_8830E4A4(unk_func_8830867C_03C* arg0, unk_func_8850878C* arg1, char* arg2) { + arg1->unk_00.unk_10.unk_00 = ((arg0->unk_E0 - func_8001F5B0(8, 0, arg2)) / 2) + 6; + arg1->unk_40 = arg2; +} + +void func_8830E504(unk_func_8830867C_03C* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4) { + static Color_RGBA8 D_883174B8 = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_883174BC = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_883174C0 = { 0xA0, 0x96, 0x64, 0xFF }; + static Color_RGBA8 D_883174C4 = { 0xFF, 0xFF, 0x00, 0xFF }; + static s32 D_883174C8[] = { 0, 1, 2, 3, 4, 5, 7, 8, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A }; + + s32 spCC; + s32 i; + s32 spC4; + char* temp_v0_10; + UNUSED s32 pad; + unk_func_8830867C_03C* var_s1; + unk_func_8830867C_03C* var_s1_2; + s32 spB0; + UNUSED s32 pad2; + s32 temp_s1_3; + s32 temp_v0_2; + unk_func_885012A4* spA0; + unk_func_88001300_000* sp98[2]; + s32 var_v1; + s32 var_v1_2; + unk_func_8850878C* temp_s0; + unk_func_88001300_03C_01C* temp_s0_2; + unk_func_8850BD40* temp_s0_3; + unk_func_88503298* temp_s0_4; + unk_func_8850B254* temp_s1; + unk_func_88001300_000* temp_s1_4; + unk_func_88001300_03C* ptr; + unk_func_88507D4C* sp6C[2]; + unk_func_88001300_000* temp_s2_2; + + arg0->unk_E0 = func_8001F5B0(8, 0, "WWWWWWWW"); + spC4 = func_8001F5B0(4, 0, "00") + arg0->unk_E0 + 0x18; + spB0 = 0; + + for (i = 0; i < 2; i++) { + temp_v0_2 = func_8001F5B0(8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, i + 0x49)); + if (spB0 < temp_v0_2) { + spB0 = temp_v0_2; + } + } + + spCC = ((arg0->unk_E0 < spB0) ? spB0 : arg0->unk_E0) + spC4 + 0x30; + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_03C)); + + arg0->unk_00.unk_20 = func_8830F0C8; + arg0->unk_00.unk_24 = func_8830F09C; + // clang-format off + arg0->unk_00.unk_10.unk_00 = arg1; arg0->unk_00.unk_10.unk_02 = arg2; + // clang-format on + + arg0->unk_4C = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_03C_04C)); + func_8830F254(arg0->unk_4C, arg0); + + arg0->unk_2C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_038)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, spCC, 0x12C); + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); + + temp_s1 = mem_pool_alloc(arg4, sizeof(unk_func_8850B254)); + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(temp_s1, 0, 0, spCC, 0x14, D_883174B8, D_883174BC); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, temp_s1); + + temp_s0 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(temp_s0, 8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, 0x4B), 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s1, temp_s0); + + spA0 = mem_pool_alloc(arg4, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(spA0, 0, 0x18, spCC, 0x114, D_883174C0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, spA0); + + arg0->unk_50 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_03C)); + ((func8850C284)Memmap_GetFragmentVaddr(func_8850C284))(arg0->unk_50, 4, 1, arg4); + ((func8850BF80)Memmap_GetFragmentVaddr(func_8850BF80))(arg0->unk_4C, arg0->unk_50); + + for (i = 0; i < 2; i++) { + sp98[i] = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func8850A40C)Memmap_GetFragmentVaddr(func_8850A40C))(sp98[i], 0xC, 0x1C + (i * 0x1C), arg0->unk_E0 + 0xC, + 0x18); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spA0, sp98[i]); + + arg0->unk_50->unk_18[i * arg0->unk_50->unk_2C] = sp98[i]; + + arg0->unk_30[i].unk_00 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(arg0->unk_30[i].unk_00, 6, 2, "----", 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp98[i], arg0->unk_30[i].unk_00); + } + + temp_s2_2 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func8850A40C)Memmap_GetFragmentVaddr(func_8850A40C))(temp_s2_2, 0xC, 0xC4, spB0 + 0xC, 0x18); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spA0, temp_s2_2); + ptr = arg0->unk_50; + ptr->unk_18[2] = temp_s2_2; + temp_v0_10 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x49); + temp_s1_3 = func_8001F5B0(8, 0, temp_v0_10); + + arg0->unk_44 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(arg0->unk_44, ((spB0 - temp_s1_3) / 2) + 6, 2, temp_v0_10, + 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s2_2, arg0->unk_44); + + arg0->unk_48 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func8850A40C)Memmap_GetFragmentVaddr(func_8850A40C))(arg0->unk_48, 0xC, 0xE0, spB0 + 0xC, 0x18); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spA0, arg0->unk_48); + arg0->unk_50->unk_18[arg0->unk_50->unk_2C + 2] = arg0->unk_48; + temp_v0_10 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x4A); + temp_s1_3 = func_8001F5B0(8, 0, temp_v0_10); + + arg0->unk_40 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(arg0->unk_40, ((spB0 - temp_s1_3) / 2) + 6, 2, temp_v0_10, + 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_48, arg0->unk_40); + ((func8850CAB4)Memmap_GetFragmentVaddr(func_8850CAB4))(arg0->unk_50); + + temp_s0_2 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_03C_01C)); + ((func88504570)Memmap_GetFragmentVaddr(func_88504570))(temp_s0_2, 0, 0, 0x10, 0x10, D_883174C4); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spA0, temp_s0_2); + arg0->unk_50->unk_1C = temp_s0_2; + + func_8002C740(&arg0->unk_D0, arg0->unk_58, 8, 0xF, 0xF); + + for (i = 0; i < 15; i++) { + arg0->unk_58[i].unk_00 = D_883174C8[i]; + arg0->unk_58[i].unk_04 = ((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(D_883174C8[i]); + } + + var_v1_2 = ((arg0->unk_E0 < spB0) ? spB0 : arg0->unk_E0) + 0x24; + + temp_s1_4 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func8850AB48)Memmap_GetFragmentVaddr(func_8850AB48))(temp_s1_4, var_v1_2, 0xA, spC4, 0x100); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spA0, temp_s1_4); + + arg0->unk_54 = mem_pool_alloc(arg4, sizeof(unk_func_8821421C_038_034)); + ((func88506DCC)Memmap_GetFragmentVaddr(func_88506DCC))(arg0->unk_54, 0, 0x10, func_8830E090, spC4, 0x1C, 8, arg4); + ((func88506F8C)Memmap_GetFragmentVaddr(func_88506F8C))(arg0->unk_54, &arg0->unk_D0, arg4); + + temp_s0_3 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(temp_s0_3, arg0->unk_54); + ((func8850BF80)Memmap_GetFragmentVaddr(func_8850BF80))(arg0->unk_4C, temp_s0_3); + + sp6C[0] = mem_pool_alloc(arg4, sizeof(unk_func_88507D4C)); + ((func88507D4C)Memmap_GetFragmentVaddr(func_88507D4C))(sp6C[0], 0, 0, spC4, 0, arg0->unk_54); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s1_4, sp6C[0]); + + sp6C[1] = mem_pool_alloc(arg4, sizeof(unk_func_88507D4C)); + ((func88507D4C)Memmap_GetFragmentVaddr(func_88507D4C))(sp6C[1], 0, arg0->unk_54->unk_00.unk_00.unk_14.unk_02 + 0x10, + spC4, 1, arg0->unk_54); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s1_4, sp6C[1]); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s1_4, arg0->unk_54); + + temp_s0_4 = mem_pool_alloc(arg4, sizeof(unk_func_88503298)); + ((func88503298)Memmap_GetFragmentVaddr(func_88503298))(temp_s0_4, arg0->unk_2C, arg3); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, temp_s0_4); +} + +void func_8830EE58(unk_func_8830867C_03C* arg0, unk_func_8830867C_02C_C54_01C* arg1) { + static Color_RGBA8 D_88317504 = { 0xF0, 0xF0, 0xF0, 0xFF }; + static Color_RGBA8 D_88317508 = { 0xF0, 0xF0, 0xF0, 0x4D }; + static Color_RGBA8 D_8831750C = { 0x66, 0x5B, 0x47, 0xFF }; + + s32 i; + char* var_s3; + + ((func8850628C)Memmap_GetFragmentVaddr(func_8850628C))(arg0->unk_54); + + for (i = 0; i < 2; i++) { + if (i < arg1->unk_00) { + arg0->unk_30[i].unk_04 = arg1->unk_04[i]; + var_s3 = + func_8002D7C0(NULL, 0, D_8831A4D4, + ((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(arg0->unk_30[i].unk_04)->unk_00); + arg0->unk_30[i].unk_00->unk_30 = + ((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(arg0->unk_30[i].unk_04)->unk_04; + arg0->unk_30[i].unk_00->unk_44 = arg0->unk_30[i].unk_00->unk_44; + arg0->unk_54->unk_00.unk_34[func_8002EDEC(arg0->unk_30[i].unk_04)] |= 2; + } else { + arg0->unk_30[i].unk_04 = -1; + var_s3 = "----"; + arg0->unk_30[i].unk_00->unk_30 = (0, D_88317504); + arg0->unk_30[i].unk_00->unk_44 = arg0->unk_30[i].unk_00->unk_44; + } + func_8830E4A4(arg0, arg0->unk_30[i].unk_00, var_s3); + } + + if (arg1->unk_00 == 0) { + arg0->unk_48->unk_28 |= 2; + arg0->unk_40->unk_30 = (0, D_88317508); + arg0->unk_40->unk_44 = arg0->unk_40->unk_44; + } else { + arg0->unk_48->unk_28 &= ~2; + arg0->unk_40->unk_30 = (0, D_88317504); + arg0->unk_40->unk_44 = arg0->unk_40->unk_44; + } +} + +void func_8830F05C(unk_func_8830867C_03C* arg0, unk_func_8830867C_02C_C54_01C* arg1) { + s32 i; + s32 var_v0 = 0; + + for (i = 0; i < 2; i++) { + if (arg0->unk_30[i].unk_04 != -1) { + arg1->unk_04[var_v0] = arg0->unk_30[i].unk_04; + var_v0++; + } + } + + arg1->unk_00 = var_v0; +} + +void func_8830F09C(unk_func_8830867C_03C* arg0, s32 arg1) { + arg0->unk_00.unk_2A = arg1; + arg0->unk_4C->unk_14(arg0->unk_4C, arg1); +} + +s32 func_8830F0C8(unk_func_8830867C_03C* arg0, Controller* arg1) { + s32 var_v1; + + if (arg0->unk_2C->unk_30 & 2) { + var_v1 = arg0->unk_4C->unk_10(arg0->unk_4C, arg1); + } else { + var_v1 = 1; + } + return var_v1; +} + +s32 func_8830F114(unk_func_8830867C_03C* arg0, Controller* arg1) { + s32 temp_v0; + s32 var_v0; + s32 var_s0 = 0; + + ((func88507AE4)Memmap_GetFragmentVaddr(func_88507AE4))(arg0->unk_54, 0); + ((func8850CB48)Memmap_GetFragmentVaddr(func_8850CB48))(arg0->unk_50, 0); + + arg0->unk_4C->unk_14(arg0->unk_4C, 1); + + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_2C); + + while (var_s0 == NULL) { + func_8002EEA8(var_s0); + + temp_v0 = arg0->unk_00.unk_20(arg0, arg1); + + if (!(temp_v0 & 1)) { + if (temp_v0 & 2) { + var_s0 = 1; + } else if (temp_v0 & 4) { + if (arg0->unk_50->unk_24 == 2) { + var_v0 = 1; + } else { + var_v0 = 2; + } + var_s0 = var_v0 + 1; + } + } + ((func8850BC94)Memmap_GetFragmentVaddr(func_8850BC94))(temp_v0); + } + arg0->unk_2C->unk_2C = 0xB; + return var_s0 - 1; +} + +void func_8830F254(unk_func_8830867C_03C_04C* arg0, unk_func_8830867C_03C* arg1) { + ((func8850BDF0)Memmap_GetFragmentVaddr(func_8850BDF0))(arg0); + arg0->unk_10 = func_8830F2A0; + arg0->unk_24 = arg1; +} + +s32 func_8830F2A0(unk_func_8830867C_03C_04C* arg0, Controller* arg1) { + s32 var_t2; + unk_func_8830867C_03C_04C* var_a0; + s32 i; + + var_t2 = 0; + if (arg0->unk_20 > 0) { + var_a0 = arg0->unk_04; + for (i = 0; i < arg0->unk_1C; i++) { + var_a0 = var_a0->unk_08; + } + + var_t2 = var_a0->unk_10(var_a0, arg1); + } + + if (var_t2 & 1) { + return var_t2; + } + + if (var_t2 == 0) { + if (arg1->buttonPressed & 0x4000) { + var_t2 = 0x80000002; + } else if (arg1->buttonPressed & 0x8000) { + var_t2 = 0x80000004; + } + } + + if (var_t2 & 2) { + if (arg0->unk_1C == 1) { + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 0); + var_t2 |= 1; + } + } else if (var_t2 & 4) { + switch (arg0->unk_1C) { + case 0: + switch (arg0->unk_24->unk_50->unk_24) { + case 2: + case 3: + break; + + case 0: + case 1: + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 1); + var_t2 |= 1; + break; + } + break; + + case 1: + if (arg0->unk_24->unk_54->unk_00.unk_34[arg0->unk_24->unk_54->unk_00.unk_38] & 2) { + var_t2 = (var_t2 & ~4) | 0x101; + } else { + if (arg0->unk_24->unk_30[arg0->unk_24->unk_50->unk_24].unk_04 != -1) { + arg0->unk_24->unk_54->unk_00 + .unk_34[func_8002EDEC(arg0->unk_24->unk_30[arg0->unk_24->unk_50->unk_24].unk_04)] &= ~2; + } + arg0->unk_24->unk_54->unk_00.unk_34[arg0->unk_24->unk_54->unk_00.unk_38] |= 2; + + arg0->unk_24->unk_30[arg0->unk_24->unk_50->unk_24].unk_04 = + arg0->unk_24->unk_58[arg0->unk_24->unk_54->unk_00.unk_38].unk_00; + func_8830E4A4( + arg0->unk_24, arg0->unk_24->unk_30[arg0->unk_24->unk_50->unk_24].unk_00, + func_8002D7C0(NULL, 0, D_8831A4D4, + arg0->unk_24->unk_58[arg0->unk_24->unk_54->unk_00.unk_38].unk_04->unk_00)); + arg0->unk_24->unk_30[arg0->unk_24->unk_50->unk_24].unk_00->unk_30 = + arg0->unk_24->unk_58[arg0->unk_24->unk_54->unk_00.unk_38].unk_04->unk_04; + arg0->unk_24->unk_30[arg0->unk_24->unk_50->unk_24].unk_00->unk_44 = + arg0->unk_24->unk_30[arg0->unk_24->unk_50->unk_24].unk_00->unk_44; + arg0->unk_24->unk_50->unk_24++; + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 0); + var_t2 |= 1; + } + break; + } + } + return var_t2; +} + +void func_8830F5DC(s32 arg0, s32 arg1, unk_func_88309C38_arg2* arg2, s32 arg3, s32 arg4, + unk_func_8821421C_038_034* arg5) { + static Color_RGBA8 D_88317510 = { 0x54, 0x4B, 0x3A, 0xFF }; + static Color_RGBA8 D_88317514 = { 0x99, 0x89, 0x6A, 0xFF }; + + Color_RGBA8 sp84; + UNUSED s32 pad; + s32 sp7C; + s32 sp78; + char sp74[4]; + char* sp70; + UNUSED s32 pad2; + s32 temp_a0; + s32 temp_a3; + + sp7C = func_8001F5B0(4, 0, "000"); + sp78 = (arg5->unk_00.unk_3C - sp7C) - 0x18; + if (arg4 & 2) { + sp84 = func_8002D444(D_88317510, 1.4f); + } else { + sp84 = (0, D_88317510); + } + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + temp_a3 = ((sp84.r << 8) & 0xF800) | ((sp84.g << 3) & 0x7C0) | ((sp84.b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a3 << 0x10) | temp_a3); + gDPFillRectangle(gDisplayListHead++, arg0, arg1 + 1, (arg5->unk_00.unk_3C + arg0) - 1, + (arg1 + arg5->unk_00.unk_3E) - 2); + + temp_a0 = ((D_88317514.r << 8) & 0xF800) | ((D_88317514.g << 3) & 0x7C0) | ((D_88317514.b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a0 << 0x10) | temp_a0); + gDPFillRectangle(gDisplayListHead++, arg0, arg1, (arg5->unk_00.unk_3C + arg0) - 1, arg1); + + temp_a0 = ((D_88317514.r << 8) & 0xF800) | ((D_88317514.g << 3) & 0x7C0) | ((D_88317514.b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a0 << 0x10) | temp_a0); + gDPFillRectangle(gDisplayListHead++, arg0, (arg1 + arg5->unk_00.unk_3E) - 1, (arg5->unk_00.unk_3C + arg0) - 1, + (arg1 + arg5->unk_00.unk_3E) - 1); + + sprintf(sp74, "%d", arg3 + 1); + func_8001F3F4(); + func_8001EBE0(4, 0); + func_8001F324(0xF0, 0xF0, 0xF0, 0xFF); + func_8001F1E8(((arg0 + sp7C) - func_8001F5B0(0, 0, sp74)) + 8, arg1 + 8, sp74); + + sp84 = (((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(arg2->unk_01))->unk_04; + func_8001F324(sp84.r, sp84.g, sp84.b, sp84.a); + func_8001EBE0(8, 0); + + sp70 = func_8002D7C0(NULL, 0, D_8831A4CC, arg2->unk_00 - 1); + func_8001F1E8(((sp78 - func_8001F5B0(0, 0, sp70)) / 2) + arg0 + sp7C + 0x10, arg1 + 4, sp70); + func_8001F444(); +} + +void func_8830FA10(void) { +} + +void func_8830FA18(void) { +} + +void func_8830FA20(unk_func_8830867C_040* arg0, unk_func_8850878C* arg1, char* arg2) { + arg1->unk_00.unk_10.unk_00 = ((arg0->unk_74 - func_8001F5B0(8, 0, arg2)) / 2) + 6; + arg1->unk_40 = arg2; +} + +void func_8830FA80(unk_func_8830867C_040* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4) { + static Color_RGBA8 D_88317518 = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_8831751C = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_88317520 = { 0xA0, 0x96, 0x64, 0xFF }; + static Color_RGBA8 D_88317524 = { 0xFF, 0xFF, 0x00, 0xFF }; + + s32 spCC; + s32 i; + s32 spC4; + unk_func_8850878C* temp_s0; + unk_func_88001300_03C_01C* temp_s0_2; + unk_func_8850BD40* temp_s0_3; + unk_func_88503298* temp_s0_4; + s32 spB0; + s32 temp_s1_2; + s32 temp_s1_3; + s32 temp_v0_2; + unk_func_885012A4* spA0; + unk_func_88001300_000* sp90[4]; + unk_func_88001300_03C* ptr; + s32 var_v1_2; + char* temp_v0_10; + UNUSED s32 pad[2]; + unk_func_8850B254* temp_s1; + unk_func_88001300_000* temp_s1_4; + unk_func_88001300_000* temp_s2_2; + unk_func_88507D4C* sp68[2]; + s32* temp_s2_3; + + arg0->unk_74 = func_8001F5B0(8, 0, "WWWWWWWWWWWW"); + spC4 = func_8001F5B0(4, 0, "000") + arg0->unk_74 + 0x18; + spB0 = 0; + + for (i = 0; i < 2; i++) { + temp_v0_2 = func_8001F5B0(8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, i + 0x49)); + if (spB0 < temp_v0_2) { + spB0 = temp_v0_2; + } + } + + spCC = ((arg0->unk_74 < spB0) ? spB0 : arg0->unk_74) + spC4 + 0x30; + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_040)); + + arg0->unk_00.unk_20 = func_8831067C; + arg0->unk_00.unk_24 = func_88310650; + // clang-format off + arg0->unk_00.unk_10.unk_00 = arg1; arg0->unk_00.unk_10.unk_02 = arg2; + // clang-format on + + arg0->unk_5C = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_040_05C)); + func_88310808(arg0->unk_5C, arg0); + + arg0->unk_2C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_038)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, spCC, 0x12C); + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); + + temp_s1 = mem_pool_alloc(arg4, sizeof(unk_func_8850B254)); + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(temp_s1, 0, 0, spCC, 0x14, D_88317518, D_8831751C); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, temp_s1); + + temp_s0 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(temp_s0, 8, 0, func_8002D7C0(NULL, 0, D_8831A4C4, 0x4C), 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s1, temp_s0); + + spA0 = mem_pool_alloc(arg4, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(spA0, 0, 0x18, spCC, 0x114, D_88317520); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, spA0); + + arg0->unk_60 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_03C)); + ((func8850C284)Memmap_GetFragmentVaddr(func_8850C284))(arg0->unk_60, 6, 1, arg4); + ((func8850BF80)Memmap_GetFragmentVaddr(func_8850BF80))(arg0->unk_5C, arg0->unk_60); + + for (i = 0; i < 4; i++) { + sp90[i] = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func8850A40C)Memmap_GetFragmentVaddr(func_8850A40C))(sp90[i], 0xC, (i + 1) * 0x1C, arg0->unk_74 + 0xC, 0x18); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spA0, sp90[i]); + arg0->unk_60->unk_18[i * arg0->unk_60->unk_2C] = sp90[i]; + + arg0->unk_30[i].unk_00 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(arg0->unk_30[i].unk_00, 6, 2, "-------", 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp90[i], arg0->unk_30[i].unk_00); + } + + temp_s2_2 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func8850A40C)Memmap_GetFragmentVaddr(func_8850A40C))(temp_s2_2, 0xC, 0xC4, spB0 + 0xC, 0x18); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spA0, temp_s2_2); + ptr = arg0->unk_60; + ptr->unk_18[4] = temp_s2_2; + temp_v0_10 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x49); + temp_s1_3 = func_8001F5B0(8, 0, temp_v0_10); + + arg0->unk_54 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(arg0->unk_54, ((spB0 - temp_s1_3) / 2) + 6, 2, temp_v0_10, + 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s2_2, arg0->unk_54); + + arg0->unk_58 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func8850A40C)Memmap_GetFragmentVaddr(func_8850A40C))(arg0->unk_58, 0xC, 0xE0, spB0 + 0xC, 0x18); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spA0, arg0->unk_58); + arg0->unk_60->unk_18[arg0->unk_60->unk_2C + 4] = arg0->unk_58; + temp_v0_10 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x4A); + temp_s1_3 = func_8001F5B0(8, 0, temp_v0_10); + + arg0->unk_50 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(arg0->unk_50, ((spB0 - temp_s1_3) / 2) + 6, 2, temp_v0_10, + 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_58, arg0->unk_50); + ((func8850CAB4)Memmap_GetFragmentVaddr(func_8850CAB4))(arg0->unk_60); + + temp_s0_2 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_03C_01C)); + ((func88504570)Memmap_GetFragmentVaddr(func_88504570))(temp_s0_2, 0, 0, 0x10, 0x10, D_88317524); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spA0, temp_s0_2); + arg0->unk_60->unk_1C = temp_s0_2; + + temp_s2_3 = mem_pool_alloc(arg4, sizeof(s32) * 0xA4); + + for (i = 0; i < 0xA4; i++) { + temp_s2_3[D_88317360[i]] = func_8002ED08(i + 1); + } + + func_8002CBB0(&arg0->unk_68, temp_s2_3, 0xA4, 0xA4); + + var_v1_2 = ((arg0->unk_74 < spB0) ? spB0 : arg0->unk_74) + 0x24; + + temp_s1_4 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func8850AB48)Memmap_GetFragmentVaddr(func_8850AB48))(temp_s1_4, var_v1_2, 0xA, spC4, 0x100); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spA0, temp_s1_4); + + arg0->unk_64 = mem_pool_alloc(arg4, sizeof(unk_func_8821421C_038_034)); + ((func88506DCC)Memmap_GetFragmentVaddr(func_88506DCC))(arg0->unk_64, 0, 0x10, func_8830F5DC, spC4, 0x1C, 8, arg4); + ((func88506F1C)Memmap_GetFragmentVaddr(func_88506F1C))(arg0->unk_64, &arg0->unk_68, arg4); + + temp_s0_3 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(temp_s0_3, arg0->unk_64); + ((func8850BF80)Memmap_GetFragmentVaddr(func_8850BF80))(arg0->unk_5C, temp_s0_3); + + sp68[0] = mem_pool_alloc(arg4, sizeof(unk_func_88507D4C)); + ((func88507D4C)Memmap_GetFragmentVaddr(func_88507D4C))(sp68[0], 0, 0, spC4, 0, arg0->unk_64); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s1_4, sp68[0]); + + sp68[1] = mem_pool_alloc(arg4, sizeof(unk_func_88507D4C)); + ((func88507D4C)Memmap_GetFragmentVaddr(func_88507D4C))(sp68[1], 0, arg0->unk_64->unk_00.unk_00.unk_14.unk_02 + 0x10, + spC4, 1, arg0->unk_64); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s1_4, sp68[1]); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(temp_s1_4, arg0->unk_64); + + temp_s0_4 = mem_pool_alloc(arg4, sizeof(unk_func_88503298)); + ((func88503298)Memmap_GetFragmentVaddr(func_88503298))(temp_s0_4, arg0->unk_2C, arg3); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, temp_s0_4); +} + +void func_883103CC(unk_func_8830867C_040* arg0, unk_func_8830867C_02C_C54_024* arg1) { + static Color_RGBA8 D_88317528 = { 0xF0, 0xF0, 0xF0, 0xFF }; + static Color_RGBA8 D_8831752C = { 0xF0, 0xF0, 0xF0, 0x4D }; + + s32 i; + char* var_s1; + ret_func_8002ED08* temp_v0; + + ((func8850628C)Memmap_GetFragmentVaddr(func_8850628C))(arg0->unk_64); + + for (i = 0; i < 4; i++) { + if (i < arg1->unk_04) { + temp_v0 = func_8002ED08(arg1->unk_00[i]); + arg0->unk_30[i].unk_04 = temp_v0; + var_s1 = func_8002D7C0(NULL, 0, D_8831A4CC, temp_v0->unk_00[0] - 1); + arg0->unk_30[i].unk_00->unk_30 = + (((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(arg0->unk_30[i].unk_04[1]))->unk_04; + arg0->unk_30[i].unk_00->unk_44 = arg0->unk_30[i].unk_00->unk_44; + arg0->unk_64->unk_00.unk_34[D_88317360[arg0->unk_30[i].unk_04[0] - 1]] |= 2; + } else { + arg0->unk_30[i].unk_04 = NULL; + var_s1 = "-------"; + arg0->unk_30[i].unk_00->unk_30 = (0, D_88317528); + arg0->unk_30[i].unk_00->unk_44 = arg0->unk_30[i].unk_00->unk_44; + } + func_8830FA20(arg0, arg0->unk_30[i].unk_00, var_s1); + } + + if (arg1->unk_04 == 0) { + arg0->unk_58->unk_28 |= 2; + arg0->unk_50->unk_30 = (0, D_8831752C); + arg0->unk_50->unk_44 = arg0->unk_50->unk_44; + } else { + arg0->unk_58->unk_28 &= ~2; + arg0->unk_50->unk_30 = (0, D_88317528); + arg0->unk_50->unk_44 = arg0->unk_50->unk_44; + } +} + +void func_883105D4(unk_func_8830867C_040* arg0, unk_func_8830867C_02C_C54_024* arg1) { + s32 var_v0 = 0; + s32 i; + + for (i = 0; i < 4; i++) { + if (arg0->unk_30[i].unk_04 != NULL) { + arg1->unk_00[var_v0++] = arg0->unk_30[i].unk_04[0]; + } + } + + arg1->unk_04 = var_v0; +} + +void func_88310650(unk_func_8830867C_040* arg0, s32 arg1) { + arg0->unk_00.unk_2A = arg1; + arg0->unk_5C->unk_14(arg0->unk_5C, arg1); +} + +s32 func_8831067C(unk_func_8830867C_040* arg0, Controller* arg1) { + s32 var_v1; + + if (arg0->unk_2C->unk_30 & 2) { + var_v1 = arg0->unk_5C->unk_10(arg0->unk_5C, arg1); + } else { + var_v1 = 1; + } + return var_v1; +} + +s32 func_883106C8(unk_func_8830867C_040* arg0, Controller* arg1) { + s32 i; + s32 temp_v0; + s32 var_v0; + s32 var_s0 = 0; + + ((func88507AE4)Memmap_GetFragmentVaddr(func_88507AE4))(arg0->unk_64, 0); + ((func8850CB48)Memmap_GetFragmentVaddr(func_8850CB48))(arg0->unk_60, 0); + arg0->unk_5C->unk_14(arg0->unk_5C, 1); + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_2C); + + while (var_s0 == 0) { + func_8002EEA8(var_s0); + temp_v0 = arg0->unk_00.unk_20(arg0, arg1); + + if (!(temp_v0 & 1)) { + if (temp_v0 & 2) { + var_s0 = 1; + } else if (temp_v0 & 4) { + if (arg0->unk_60->unk_24 == 4) { + var_v0 = 1; + } else { + var_v0 = 2; + } + var_s0 = var_v0 + 1; + } + } + ((func8850BC94)Memmap_GetFragmentVaddr(func_8850BC94))(temp_v0); + } + + arg0->unk_2C->unk_2C = 0xB; + return var_s0 - 1; +} + +void func_88310808(unk_func_8830867C_040_05C* arg0, unk_func_8830867C_040* arg1) { + ((func8850BDF0)Memmap_GetFragmentVaddr(func_8850BDF0))(arg0); + arg0->unk_10 = func_88310854; + arg0->unk_24 = arg1; +} + +#ifdef NON_MATCHING +s32 func_88310854(unk_func_8830867C_040_05C* arg0, Controller* arg1) { + s32 var_t2; + s32 i; + unk_func_8830867C_040_05C* var_a0; + unk_func_88205880_A030* ptr; + u8* ptr2; + + var_t2 = 0; + if (arg0->unk_20 > 0) { + var_a0 = arg0->unk_04; + + for (i = 0; i < arg0->unk_1C; i++) { + var_a0 = var_a0->unk_08; + } + + var_t2 = var_a0->unk_10(var_a0, arg1); + } + + if (var_t2 & 1) { + return var_t2; + } + + if (var_t2 == 0) { + if (arg1->buttonPressed & 0x4000) { + var_t2 = 0x80000002; + } else if (arg1->buttonPressed & 0x8000) { + var_t2 = 0x80000004; + } + } + + if (var_t2 & 2) { + if (arg0->unk_1C == 1) { + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 0); + var_t2 |= 1; + } + } else if (var_t2 & 4) { + switch (arg0->unk_1C) { + case 0: + switch (arg0->unk_24->unk_60->unk_24) { + case 4: + case 5: + break; + + case 0: + case 1: + case 2: + case 3: + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 1); + var_t2 |= 1; + break; + } + break; + + case 1: + if (arg0->unk_24->unk_64->unk_00.unk_34[arg0->unk_24->unk_64->unk_00.unk_38] & 2) { + var_t2 = (var_t2 & ~4) | 0x101; + } else { + if (arg0->unk_24->unk_30[arg0->unk_24->unk_60->unk_24].unk_04 != NULL) { + arg0->unk_24->unk_64->unk_00 + .unk_34[D_88317360[arg0->unk_24->unk_30[arg0->unk_24->unk_60->unk_24].unk_04[0]]] &= ~2; + } + arg0->unk_24->unk_64->unk_00.unk_34[arg0->unk_24->unk_64->unk_00.unk_38] |= 2; + + ptr = arg0->unk_24->unk_64->unk_00.unk_2C; + ptr2 = ptr->unk_00[arg0->unk_24->unk_64->unk_00.unk_38]; + arg0->unk_24->unk_30[arg0->unk_24->unk_60->unk_24].unk_04 = ptr2; + + func_8830FA20(arg0->unk_24, arg0->unk_24->unk_30[arg0->unk_24->unk_60->unk_24].unk_00, + func_8002D7C0(NULL, 0, D_8831A4CC, ptr2[0] - 1)); + + arg0->unk_24->unk_30[arg0->unk_24->unk_60->unk_24].unk_00->unk_30 = + ((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(ptr2[1])->unk_04; + arg0->unk_24->unk_30[arg0->unk_24->unk_60->unk_24].unk_00->unk_44 = + arg0->unk_24->unk_30[arg0->unk_24->unk_60->unk_24].unk_00->unk_44; + + arg0->unk_24->unk_60->unk_24++; + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 0); + var_t2 |= 1; + } + break; + } + } + return var_t2; +} +#else +#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1D7B40/func_88310854.s") +#endif + +void func_88310B70(unk_func_88310B70* arg0, s32 arg1, s32 arg2, unk_func_8830867C_04C_030* arg3, MemoryPool* arg4) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_88310B70)); + + arg0->unk_00.unk_1C = func_88310C38; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + + arg0->unk_30 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(arg0->unk_30, 0, 0, 0, 8); + arg0->unk_30->unk_3C = 0x18; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_30); + + arg0->unk_2C = arg3; +} + +s32 func_88310C38(unk_func_88310B70* arg0) { + arg0->unk_30->unk_40 = + func_8002D7C0(NULL, 0, D_8831A4C8, **(u8**)arg0->unk_2C->unk_2C->unk_00[arg0->unk_2C->unk_38].unk_00[0] - 1); + return 0; +} + +void func_88310CA4(s32 arg0, s32 arg1, unk_func_88310CA4_arg2* a2, s32 arg3, s32 arg4, + unk_func_8830867C_04C_030* arg5) { + static Color_RGBA8 D_88317530[2] = { + { 0x80, 0x79, 0x6C, 0xFF }, + { 0x67, 0x60, 0x53, 0xFF }, + }; + static Color_RGBA8 D_88317538 = { 0x99, 0x91, 0x81, 0xFF }; + static Color_RGBA8 D_8831753C = { 0xB4, 0x82, 0xDC, 0xFF }; + static Color_RGBA8 D_88317540[] = { + { 0xF0, 0xF0, 0xF0, 0xFF }, + { 0xF0, 0xF0, 0xF0, 0x4D }, + }; + + Color_RGBA8 sp8C; + unk_func_88310CA4_arg2* arg2 = a2; + char* sp84; + s32 temp_a0; + s32 temp_t2; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + // clang-format off + temp_t2 = ((D_88317530[0].r << 8) & 0xF800) | ((D_88317530[0].g << 3) & 0x7C0) | ((D_88317530[0].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + gDPSetFillColor(gDisplayListHead++, (temp_t2 << 0x10) | temp_t2); + gDPFillRectangle(gDisplayListHead++, arg0, arg1 + 1, arg0 + 0x105, (arg1 + arg5->unk_00.unk_14.unk_02) - 4); + + temp_a0 = + ((D_88317530[1].r << 8) & 0xF800) | ((D_88317530[1].g << 3) & 0x7C0) | ((D_88317530[1].b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a0 << 0x10) | temp_a0); + gDPFillRectangle(gDisplayListHead++, arg0 + 0x106, arg1 + 1, (arg0 + (u32)arg5->unk_00.unk_14.unk_00) - 1, + (arg1 + arg5->unk_00.unk_14.unk_02) - 2); + + temp_a0 = ((D_88317538.r << 8) & 0xF800) | ((D_88317538.g << 3) & 0x7C0) | ((D_88317538.b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a0 << 0x10) | temp_a0); + gDPFillRectangle(gDisplayListHead++, arg0, arg1, (arg5->unk_00.unk_14.unk_00 + arg0) - 1, arg1); + + temp_a0 = ((D_88317538.r << 8) & 0xF800) | ((D_88317538.g << 3) & 0x7C0) | ((D_88317538.b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_a0 << 0x10) | temp_a0); + gDPFillRectangle(gDisplayListHead++, arg0, (arg1 + arg5->unk_00.unk_14.unk_02) - 1, + (arg5->unk_00.unk_14.unk_00 + arg0) - 1, (arg1 + arg5->unk_00.unk_14.unk_02) - 1); + + if (arg2 != NULL) { + char sp30[0x10]; + + sp8C = D_88317540[(arg4 & 4) ? 1 : 0]; + + func_8001F3F4(); + func_8001F324(sp8C.r, sp8C.g, sp8C.b, sp8C.a); + func_8001EBE0(8, 0); + func_8001F1E8(arg0 + 0x19, arg1 + 4, func_8002D7C0(NULL, 0, D_8831A4D8, arg2->unk_00[0] - 1)); + + if (arg2->unk_04[0] == 0x12) { + sp84 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x51); + func_8001EBE0(8, 0); + func_8001F1E8((((arg5->unk_00.unk_14.unk_00 - func_8001F5B0(0, 0, sp84)) - 0x106) / 2) + arg0 + 0x106, + arg1 + 4, sp84); + } else if (arg2->unk_04[0] == 0x22) { + sp84 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x50); + func_8001EBE0(8, 0); + func_8001F1E8((((arg5->unk_00.unk_14.unk_00 - func_8001F5B0(0, 0, sp84)) - 0x106) / 2) + arg0 + 0x106, + arg1 + 4, sp84); + } else { + sp84 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x4F); + func_8001EBE0(8, 0); + func_8001F1E8((((arg5->unk_00.unk_14.unk_00 - func_8001F5B0(0, 0, sp84)) - 0x106) / 2) + arg0 + 0x106, + arg1 + 4, sp84); + } + + if (func_8002F264(arg2->unk_00[0]) == 0) { + func_8001EBE0(8, 0); + sprintf(sp30, "%s%02d", func_8002D7C0(NULL, 0, D_8831A4C4, 0x64), arg2->unk_00[1]); + func_8001F1E8((arg0 - func_8001F5B0(0, 0, sp30)) + 0xED, arg1 + 4, sp30); + } + func_8001F444(); + } +} + +void func_883112B0(unk_func_8830867C_04C* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4) { + static Color_RGBA8 D_88317548 = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_8831754C = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_88317550 = { 0x43, 0x35, 0x1C, 0xFF }; + static Color_RGBA8 D_88317554 = { 0xFF, 0xFF, 0xFF, 0xFF }; + static Color_RGBA8 D_88317558 = { 0x14, 0xF0, 0xB4, 0xFF }; + static Color_RGBA8 D_8831755C = { 0x71, 0xE9, 0xF9, 0xFF }; + static Color_RGBA8 D_88317560 = { 0x3C, 0x7B, 0x84, 0xFF }; + static Color_RGBA8 D_88317564 = { 0x93, 0xFA, 0x71, 0xFF }; + static Color_RGBA8 D_88317568 = { 0x51, 0x89, 0x3E, 0xFF }; + static Color_RGBA8 D_8831756C = { 0xFE, 0x73, 0xFE, 0xFF }; + static Color_RGBA8 D_88317570 = { 0x97, 0x44, 0x97, 0xFF }; + static Color_RGBA8 D_88317574 = { 0xFF, 0x73, 0x73, 0xFF }; + static Color_RGBA8 D_88317578 = { 0x83, 0x3B, 0x3B, 0xFF }; + + UNUSED s32 pad[3]; + unk_func_8850B254* sp88; + unk_func_8850878C* sp84; + unk_func_88507D4C* sp80; + unk_func_88507D4C* sp7C; + unk_func_8850BD40* sp78; + unk_func_885012A4* sp74; + unk_func_8850878C* sp70; + unk_func_8850878C* sp6C; + unk_func_8850878C* sp68; + unk_func_8850878C* sp64; + unk_func_8850878C* sp60; + unk_func_88310B70* sp5C; + unk_func_8850BD40* sp58; + unk_func_8850BD40* sp54; + char** sp50; + unk_func_8850BD40* sp4C; + + func_88312018(arg0, NULL); + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_04C)); + + arg0->unk_00.unk_20 = func_8831286C; + arg0->unk_00.unk_24 = func_883121F0; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + + arg0->unk_80 = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_04C_080)); + func_88312298(arg0->unk_80, arg0); + + arg0->unk_2C = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_04C_02C)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, 0x166, 0x118); + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); + + sp88 = mem_pool_alloc(arg4, sizeof(unk_func_8850B254)); + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(sp88, 0, 0, 0x166, 0x14, D_88317548, D_8831754C); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp88); + arg0->unk_38[0] = '\0'; + + sp84 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp84, 8, 0, arg0->unk_38, 8); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp88, sp84); + + arg0->unk_30 = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_04C_030)); + ((func88506DCC)Memmap_GetFragmentVaddr(func_88506DCC))(arg0->unk_30, 0, 0x28, func_88310CA4, 0x166, 0x1C, 5, arg4); + ((func88506238)Memmap_GetFragmentVaddr(func_88506238))(arg0->unk_30, 0xAA, arg4); + + sp7C = mem_pool_alloc(arg4, sizeof(unk_func_88507D4C)); + ((func88507D4C)Memmap_GetFragmentVaddr(func_88507D4C))(sp7C, 0, 0x18, arg0->unk_30->unk_00.unk_14.unk_00, 0, + arg0->unk_30); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp7C); + + sp80 = mem_pool_alloc(arg4, sizeof(unk_func_88507D4C)); + ((func88507D4C)Memmap_GetFragmentVaddr(func_88507D4C))(sp80, 0, arg0->unk_30->unk_00.unk_14.unk_02 + 0x28, + arg0->unk_30->unk_00.unk_14.unk_00, 1, arg0->unk_30); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp80); + + sp78 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(sp78, arg0->unk_30); + ((func8850BF80)Memmap_GetFragmentVaddr(func_8850BF80))(arg0->unk_80, sp78); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, arg0->unk_30); + + sp74 = mem_pool_alloc(arg4, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(sp74, 0, 0xC4, 0x166, 0x54, D_88317550); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp74); + + arg0->unk_34 = mem_pool_alloc(arg4, sizeof(unk_func_88500994)); + ((func88500994)Memmap_GetFragmentVaddr(func_88500994))(arg0->unk_34, 0, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp74, arg0->unk_34); + + sp70 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp70, 0x12, 8, func_8002D7C0(NULL, 0, D_8831A4C4, 0x52), 8); + sp70->unk_30 = (0, D_88317554); + sp70->unk_44 = sp70->unk_44; + sp70->unk_34 = (0, D_88317558); + sp70->unk_44 = 1; + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_34, sp70); + + sp6C = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp6C, 0x17, 8, func_8002D7C0(NULL, 0, D_8831A4C4, 0x53), 8); + sp6C->unk_30 = (0, D_8831755C); + sp6C->unk_44 = sp6C->unk_44; + sp6C->unk_34 = (0, D_88317560); + sp6C->unk_44 = 1; + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_34, sp6C); + + sp68 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp68, 0x1C, 8, func_8002D7C0(NULL, 0, D_8831A4C4, 0x54), 8); + sp68->unk_30 = (0, D_88317564); + sp68->unk_44 = sp68->unk_44; + sp68->unk_34 = (0, D_88317568); + sp68->unk_44 = 1; + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_34, sp68); + + sp64 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp64, 0x21, 8, func_8002D7C0(NULL, 0, D_8831A4C4, 0x55), 8); + sp64->unk_30 = (0, D_8831756C); + sp64->unk_44 = sp64->unk_44; + sp64->unk_34 = (0, D_88317570); + sp64->unk_44 = 1; + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_34, sp64); + + sp60 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp60, 0x26, 8, func_8002D7C0(NULL, 0, D_8831A4C4, 0x56), 8); + sp60->unk_30 = (0, D_88317574); + sp60->unk_44 = sp60->unk_44; + sp60->unk_34 = (0, D_88317578); + sp60->unk_44 = 1; + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_34, sp60); + + sp5C = mem_pool_alloc(arg4, sizeof(unk_func_88310B70)); + func_88310B70(sp5C, 8, 0x20, arg0->unk_30, arg4); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp74, sp5C); + + sp58 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(sp58, arg0->unk_34); + ((func8850BF80)Memmap_GetFragmentVaddr(func_8850BF80))(arg0->unk_80, sp58); + + arg0->unk_78 = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_04C_078)); + func_883092C8(arg0->unk_78, 0x35, arg0->unk_2C->unk_00.unk_14.unk_00, arg4); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_78); + + sp54 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(sp54, arg0->unk_78); + ((func8850BF80)Memmap_GetFragmentVaddr(func_8850BF80))(arg0->unk_80, sp54); + + sp50 = mem_pool_alloc(arg4, sizeof(char*) * 2); + sp50[0] = func_8002D7C0(NULL, 0, D_8831A4C4, 0x57); + sp50[1] = func_8002D7C0(NULL, 0, D_8831A4C4, 0x58); + + arg0->unk_7C = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_030)); + func_8830BAC4(arg0->unk_7C, NULL, arg4); + arg0->unk_7C->unk_4C = 0x280; + arg0->unk_7C->unk_50 = 0x1E0; + func_8830BCE8(arg0->unk_7C, sp50, 1); + arg0->unk_7C->unk_30.unk_00 = arg0->unk_2C->unk_00.unk_14.unk_00 - 0x57; + arg0->unk_7C->unk_30.unk_02 = 0xB4; + arg0->unk_7C->unk_34.unk_00 = 0x20; + arg0->unk_7C->unk_34.unk_02 = 0x10; + func_8830BE3C(arg0->unk_7C); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_7C); + + sp4C = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(sp4C, arg0->unk_7C); + ((func8850BF80)Memmap_GetFragmentVaddr(func_8850BF80))(arg0->unk_80, sp4C); + + arg0->unk_90 = mem_pool_alloc(arg4, sizeof(unk_func_88503298)); + ((func88503298)Memmap_GetFragmentVaddr(func_88503298))(arg0->unk_90, arg0->unk_2C, arg3); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_90); +} + +s32 func_88311C64(s32 arg0, s32 arg1) { + static unk_D_80070F84 D_8831757C[] = { + { + 0x06, + { + 0x4E, + 0x54, + 0x4E, + 0x64, + }, + 0x55, + 0x14, + 0x02, + 0x2D, + 0xD1, + 0x0A, + { + 0x2D, + 0x34, + 0x2B, + 0x03, + }, + { + 0xB5, + }, + { + 0x43, + 0x4F, + 0xCE, + }, + 0xE3, + { + 0x08, + 0x2E, + 0x00, + }, + }, + { + 0x0C, + { + 0x3C, + 0x2D, + 0x32, + 0x46, + }, + 0x50, + 0x07, + 0x02, + 0x2D, + 0xA0, + 0x5D, + { + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + 0x2A, + }, + { + 0x43, + 0x38, + 0xF0, + }, + 0x43, + { + 0x28, + 0x42, + 0x00, + }, + }, + { + 0x30, + { + 0x3C, + 0x37, + 0x32, + 0x2D, + }, + 0x28, + 0x07, + 0x03, + 0xBE, + 0x4B, + 0x21, + { + 0x32, + 0x00, + 0x00, + 0x00, + }, + { + 0x20, + }, + { + 0x03, + 0x38, + 0xD0, + }, + 0x03, + { + 0x28, + 0x42, + 0x00, + }, + }, + { + 0x31, + { + 0x46, + 0x41, + 0x3C, + 0x5A, + }, + 0x5A, + 0x07, + 0x03, + 0x4B, + 0x8A, + 0x21, + { + 0x32, + 0x4D, + 0x8D, + 0x00, + }, + { + 0x2A, + }, + { + 0x43, + 0x38, + 0xF0, + }, + 0x43, + { + 0x28, + 0x42, + 0x00, + }, + }, + { + 0x32, + { + 0x0A, + 0x37, + 0x19, + 0x5F, + }, + 0x2D, + 0x04, + 0x04, + 0xFF, + 0x51, + 0x0A, + { + 0x00, + 0x00, + 0x00, + 0x00, + }, + { + 0xA0, + }, + { + 0x03, + 0x08, + 0xCE, + }, + 0x02, + { + 0x88, + 0x06, + 0x00, + }, + }, + { + 0x33, + { + 0x23, + 0x50, + 0x32, + 0x78, + }, + 0x46, + 0x04, + 0x04, + 0x32, + 0x99, + 0x0A, + { + 0x2D, + 0x5B, + 0x00, + 0x00, + }, + { + 0xA0, + }, + { + 0x43, + 0x08, + 0xCE, + }, + 0x02, + { + 0x88, + 0x06, + 0x00, + }, + }, + { + 0x8D, + { + 0x3C, + 0x73, + 0x69, + 0x50, + }, + 0x46, + 0x05, + 0x15, + 0x2D, + 0xC9, + 0x0A, + { + 0x6A, + 0x47, + 0x00, + 0x00, + }, + { + 0xB6, + }, + { + 0x7F, + 0x0D, + 0xC0, + }, + 0x83, + { + 0x08, + 0x16, + 0x00, + }, + }, + { + 0x96, + { + 0x6A, + 0x6E, + 0x5A, + 0x82, + }, + 0x9A, + 0x18, + 0x18, + 0x03, + 0xDC, + 0x5D, + { + 0x32, + 0x81, + 0x5E, + 0x05, + }, + { + 0xB1, + }, + { + 0x7F, + 0xAF, + 0xF1, + }, + 0xAF, + { + 0x38, + 0x63, + 0x00, + }, + }, + { + 0x97, + { + 0x64, + 0x64, + 0x64, + 0x64, + }, + 0x64, + 0x18, + 0x18, + 0x2D, + 0x40, + 0x01, + { + 0x00, + 0x00, + 0x00, + 0x03, + }, + { + 0xFF, + }, + { + 0xFF, + 0xFF, + 0xFF, + }, + 0xFF, + { + 0xFF, + 0x7F, + 0x00, + }, + }, + }; + + unk_D_80070F84* var_v1; + s32 i; + + var_v1 = &D_80070FA0[arg0 - 1]; + + if (func_80024F68(func_80029080()) == 7) { + for (i = 0; i < 9; i++) { + if (arg0 == D_8831757C[i].unk_00) { + var_v1 = &D_8831757C[i]; + } + } + } + return ((var_v1->unk_0F[arg1 / 8] >> (arg1 % 8)) & 1) != 0; +} + +s32 func_88311D6C(s32 arg0, unk_func_8830867C_02C_0CC_000_008* arg1) { + s32 i; + s32 temp_v0; + s32 var_s3; + s32 var_s4; + + if (arg0 >= 0xC9) { + var_s3 = arg0 - 0xC9; + } else { + var_s3 = arg0 - 0x92; + } + + temp_v0 = func_8002ECDC(arg1); + var_s4 = 0; + for (i = 0; i < temp_v0; i++) { + if (func_80022A28(var_s3) == arg1->unk_09[i]) { + break; + } + } + + if (i < temp_v0) { + var_s4 = 8; + } + + if (func_88311C64(arg1->unk_00, var_s3) == 0) { + var_s4 |= 0x10; + } + return var_s4; +} + +s32 func_88311E28(unk_func_8830867C_02C_0CC_000_008* arg0) { + s32 sp2C = 0; + s32 temp_v0 = func_8002ECDC(arg0); + s32 i; + + for (i = 0; i < temp_v0; i++) { + if ((func_8002ED08(arg0->unk_09[i]) != NULL) && (arg0->unk_20[i] < 0xC0)) { + break; + } + } + + if (i >= temp_v0) { + sp2C = 4; + } + + return sp2C; +} + +s32 func_88311EB4(s32 arg0, unk_func_8830867C_02C_0CC_000_008* arg1) { + s32 var_v1 = 0; + + switch (arg0) { + case 35: + if (arg1->unk_14 >= 0x6400) { + var_v1 = 1; + } + break; + + case 36: + if (arg1->unk_16 >= 0x6400) { + var_v1 = 1; + } + break; + + case 37: + if (arg1->unk_18 >= 0x6400) { + var_v1 = 1; + } + break; + + case 38: + if (arg1->unk_1A >= 0x6400) { + var_v1 = 1; + } + break; + + case 39: + if (arg1->unk_1C >= 0x6400) { + var_v1 = 1; + } + break; + + case 40: + if (arg1->unk_24 >= 0x64) { + var_v1 = 2; + } + break; + } + return var_v1; +} + +void func_88311F70(unk_func_8830867C_04C* arg0, unk_func_88200FA0_030_038* arg1) { + s32 sp1C; + s32 sp18; + + sp18 = arg0->unk_30->unk_38; + sp1C = sp18 - (arg0->unk_30->unk_58 / arg0->unk_30->unk_3E); + + ((func88506EE4)Memmap_GetFragmentVaddr(func_88506EE4))(arg0->unk_30, arg1); + ((func88507C0C)Memmap_GetFragmentVaddr(func_88507C0C))(arg0->unk_30, sp18, sp1C); +} + +void func_88312018(unk_func_8830867C_04C* arg0, unk_func_80026268_arg0* arg1) { + arg0->unk_88 = arg1; +} + +void func_88312020(unk_func_8830867C_04C* arg0) { + s32 i; + s32 var_v0; + unk_func_8830867C_04C_030_02C_000* var_s2 = arg0->unk_30->unk_2C->unk_00; + + for (i = 0; i < arg0->unk_30->unk_2C->unk_08; i++) { + if (var_s2->unk_00[i]->unk_08 >= 0x64) { + var_v0 = func_88311D6C(**(u8**)&var_s2->unk_00[i]->unk_00, arg0->unk_88); + } else if (var_s2->unk_00[i]->unk_08 >= 0x32) { + var_v0 = func_88311E28(arg0->unk_88); + } else { + var_v0 = func_88311EB4(**(u8**)&var_s2->unk_00[i]->unk_00, arg0->unk_88); + } + + if (var_v0 != 0) { + arg0->unk_30->unk_34[i] |= 4; + } + } +} + +void func_88312108(unk_func_8830867C_04C* arg0) { + u32 sp1C; + + if (arg0->unk_88 != NULL) { + sp1C = 0x4D; + func_8002D5D4(0x19, func_8002D7C0(NULL, 0, D_8831A4D0, arg0->unk_88->unk_00 - 1)); + } else { + sp1C = 0x4E; + } + func_8002D7C0(arg0->unk_38, 0x40, D_8831A4C4, sp1C); +} + +void func_88312188(unk_func_8830867C_04C* arg0, s32 arg1) { + arg0->unk_8C = arg1; + + if (arg1 != 0) { + arg0->unk_90->unk_00.unk_28 &= ~1; + } else { + arg0->unk_90->unk_00.unk_28 |= 1; + } + + func_88312108(arg0); + + if (arg1 == 0) { + func_88312020(arg0); + } +} + +void func_883121F0(unk_func_8830867C_04C* arg0, s32 arg1) { + arg0->unk_00.unk_2A = arg1; + arg0->unk_80->unk_14(arg0->unk_80, arg1); +} + +s32 func_8831221C(unk_func_8830867C_04C* arg0, s32* arg1) { + s32 sp1C = 0; + unk_func_8830867C_04C_030_02C_000_000* ptr = arg0->unk_30->unk_2C->unk_00[arg0->unk_30->unk_38].unk_00[0]; + + if (ptr->unk_08 >= 0x64) { + sp1C = 0; + if (func_8002ECDC(arg1) >= 4) { + sp1C = 2; + } + } else if (ptr->unk_08 >= 0x32) { + sp1C = 1; + } + return sp1C; +} + +void func_88312298(unk_func_8830867C_04C_080* arg0, unk_func_8830867C_04C* arg1) { + ((func8850BDF0)Memmap_GetFragmentVaddr(func_8850BDF0))(arg0); + arg0->unk_10 = func_883125B4; + arg0->unk_24 = arg1; +} + +s32 func_883122E4(unk_func_8830867C_04C_080* arg0) { + s32 sp24 = 0; + + if (arg0->unk_24->unk_8C != 0) { + func_88312018(arg0->unk_24, NULL); + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_24->unk_34, 1); + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 1); + sp24 = 1; + } else { + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_24->unk_34, 0); + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 0); + } + return sp24; +} + +s32 func_8831239C(unk_func_8830867C_04C_080* arg0) { + s32 sp24 = 0; + + switch (arg0->unk_24->unk_84) { + case 0: + sp24 = func_883122E4(arg0); + break; + + case 1: + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 2); + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_24->unk_34, 2); + break; + + case 2: + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 2); + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_24->unk_34, 3); + break; + } + + func_8830C048(arg0->unk_24->unk_7C); + return sp24; +} + +void func_8831247C(unk_func_8830867C_04C_080* arg0) { + arg0->unk_24->unk_84 = func_8831221C(arg0->unk_24, arg0->unk_24->unk_88); + if (arg0->unk_24->unk_84 > 0) { + func_883094CC(arg0->unk_24->unk_78, arg0->unk_24->unk_88); + if (arg0->unk_24->unk_84 == 1) { + func_88309614(arg0->unk_24->unk_78); + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_24->unk_34, 2); + } else if (arg0->unk_24->unk_84 == 2) { + func_883096BC(arg0->unk_24->unk_78); + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_24->unk_34, 3); + } + func_88309774(arg0->unk_24->unk_78); + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 2); + } else { + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_24->unk_34, 4); + func_8830BFE0(arg0->unk_24->unk_7C, 0); + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 3); + } +} + +s32 func_883125B4(unk_func_8830867C_04C_080* arg0, Controller* arg1) { + s32 i; + s32 var_s0; + unk_func_8830867C_04C_080* var_a0; + + var_s0 = 0; + if (arg0->unk_20 > 0) { + var_a0 = arg0->unk_04; + for (i = 0; i < arg0->unk_1C; i++) { + var_a0 = var_a0->unk_08; + } + var_s0 = var_a0->unk_10(var_a0, arg1); + } + + if (var_s0 & 1) { + return var_s0; + } + + if (var_s0 == 0) { + if (arg1->buttonPressed & 0x4000) { + var_s0 = 0x80000002; + } else if (arg1->buttonPressed & 0x8000) { + var_s0 = 0x80000004; + } + } + + if (var_s0 & 2) { + switch (arg0->unk_1C) { + case 2: + func_883097D4(arg0->unk_24->unk_78); + if (func_883122E4(arg0) == 0) { + var_s0 |= 1; + } + break; + + case 3: + if (func_8831239C(arg0) == 0) { + var_s0 |= 1; + } + break; + } + } else if (var_s0 & 4) { + switch (arg0->unk_1C) { + case 0: + if (arg0->unk_24->unk_8C != 0) { + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_24->unk_34, 1); + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 1); + } else { + if (arg0->unk_24->unk_30->unk_34[arg0->unk_24->unk_30->unk_38] & 4) { + var_s0 = (var_s0 & ~4) | 0x100; + } else { + func_8831247C(arg0); + var_s0 |= 1; + } + } + break; + + case 2: + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_24->unk_34, 4); + func_8830BFE0(arg0->unk_24->unk_7C, 0); + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 3); + var_s0 |= 1; + break; + + case 3: + switch (arg0->unk_24->unk_7C->unk_3C->unk_38) { + case 0: + func_80048B90(0x22); + func_80048B90(0x0120000D); + var_s0 &= 0x7FFFFFFF; + break; + + case 1: + var_s0 = (var_s0 & ~4) | 2; + if (func_8831239C(arg0) == 0) { + var_s0 |= 1; + } + break; + } + break; + } + } + + return var_s0; +} + +s32 func_8831286C(unk_func_8830867C_04C* arg0, Controller* arg1) { + s32 var_v1; + + if (arg0->unk_2C->unk_30 & 2) { + var_v1 = arg0->unk_80->unk_10(arg0->unk_80, arg1); + } else { + var_v1 = 1; + } + return var_v1; +} + +void func_883128B8(unk_func_8830867C_04C* arg0) { + arg0->unk_00.unk_24(&arg0->unk_00, 1); + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_2C); +} + +void func_883128FC(unk_func_8830867C_04C* arg0) { + if (arg0->unk_7C->unk_2C->unk_00.unk_28 & 1) { + arg0->unk_7C->unk_2C->unk_2C = 0xB; + } + + if (arg0->unk_78->unk_2C->unk_00.unk_28 & 1) { + arg0->unk_78->unk_2C->unk_2C = 0xB; + } + + arg0->unk_2C->unk_2C = 0xB; + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0->unk_80, 0); + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_34, 0); +} + +s32 func_88312998(unk_func_8830867C_04C* arg0, Controller* arg1) { + s32 temp_v0; + s32 var_s0 = 0; + + if (arg0->unk_80->unk_1C == 0) { + func_883128B8(arg0); + } + + if (arg0->unk_80->unk_1C == 1) { + if (arg0->unk_88 == NULL) { + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0->unk_80, 0); + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_34, 0); + } else { + func_8831247C(arg0->unk_80); + } + } + + while (var_s0 == 0) { + func_8002EEA8(var_s0); + + temp_v0 = arg0->unk_00.unk_20(arg0, arg1); + if (!(temp_v0 & 1)) { + if (temp_v0 & 2) { + if (arg0->unk_80->unk_1C == 1) { + var_s0 = 3; + } else { + var_s0 = 1; + } + } else if (temp_v0 & 4) { + if (arg0->unk_80->unk_1C == 1) { + var_s0 = 3; + } else { + var_s0 = 2; + } + } + } + ((func8850BC94)Memmap_GetFragmentVaddr(func_8850BC94))(temp_v0); + } + + if (var_s0 != 3) { + func_883128FC(arg0); + } + return var_s0 - 1; +} + +void func_88312B10(s32 arg0, s32 arg1, unk_func_88309160_arg2* arg2, s32 arg3, s32 arg4, + unk_func_88200FA0_030_030_1CEA00* arg5) { + static Color_RGBA8 D_8831764C = { 0xFF, 0xB2, 0xC3, 0xFF }; + static Color_RGBA8 D_88317650[] = { + { 0xF0, 0xF0, 0xF0, 0xFF }, + { 0xF0, 0xF0, 0xF0, 0x4D }, + { 0xFF, 0xB2, 0xC3, 0xFF }, + }; + + Color_RGBA8 sp34; + s32 var_v0; + char* sp2C; + char sp28[4]; + + sp2C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x5F); + if (arg4 & 4) { + var_v0 = 1; + } else { + var_v0 = 0; + } + + sp34 = D_88317650[var_v0]; + + func_8001F3F4(); + func_8001F324(sp34.r, sp34.g, sp34.b, sp34.a); + func_8001EBE0(8, 0); + func_8001F1E8(arg0 + 8, arg1 + 2, sp2C); + + sprintf(sp28, "%d", arg3 + 1); + + func_8001F1E8(((arg0 + func_8001F5B0(0, 0, sp2C) + func_8001F5B0(0, 0, " 00")) - func_8001F5B0(0, 0, sp28)) + 8, + arg1 + 2, sp28); + func_8001F444(); + func_883099D8((arg5->unk_00.unk_14.unk_00 + arg0) - 0x35, arg1 + 8, arg2->unk_18, arg2->unk_14); +} + +void func_88312C7C(s32 arg0, s32 arg1, unk_func_88309160_arg2* arg2, s32 arg3, s32 arg4, + unk_func_88200FA0_030_030_1CEA00* arg5) { + static Color_RGBA8 D_8831765C[] = { + { 0xF0, 0xF0, 0xF0, 0xFF }, + { 0xF0, 0xF0, 0xF0, 0x4D }, + }; + + Color_RGBA8 sp2C; + UNUSED s32 pad[2]; + s32 var_v0; + + if (arg4 & 4) { + var_v0 = 1; + } else { + var_v0 = 0; + } + + sp2C = D_8831765C[var_v0]; + + func_8001F3F4(); + func_8001F324(sp2C.r, sp2C.g, sp2C.b, sp2C.a); + func_8001EBE0(8, 0); + func_8001F1E8(arg0 + 8, arg1 + 4, func_8002D7C0(NULL, 0, D_8831A4C4, arg3 + 0x3B)); + func_8001F444(); + if (arg2->unk_14 == 1) { + func_883099D8((arg5->unk_00.unk_14.unk_00 + arg0) - 0x35, arg1 + 0xC, arg2->unk_0C->unk_18, + arg2->unk_0C->unk_14); + } +} + +void func_88312D7C(unk_func_8830867C_048* arg0, s32 arg1, s32 arg2, unk_func_88001300_000* arg3, MemoryPool* arg4) { + static Color_RGBA8 D_88317664 = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_88317668 = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_8831766C = { 0xA0, 0x96, 0x64, 0xFF }; + static Color_RGBA8 D_88317670 = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_88317674 = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_88317678 = { 0xA0, 0x96, 0x64, 0xFF }; + + UNUSED s32 pad[2]; + s32 spBC; + UNUSED s32 pad3; + unk_func_8850B254* spB4; + unk_func_8850878C* spB0; + unk_func_885012A4* spAC; + unk_func_8850BD40* spA8; + UNUSED s32 pad4; + s32 spA0; + s32 temp_v0_2; + s32 sp98; + UNUSED s32 pad5; + char* sp90; + char* sp8C; + s32 sp88; + s32 sp84; + unk_func_8850B254* sp80; + unk_func_8850878C* sp7C; + unk_func_885012A4* sp78; + unk_func_88001300_000* sp74; + unk_func_8850BD40* sp70; + unk_func_8850BD40* sp6C; + unk_func_88503298* sp68; + + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_048)); + + arg0->unk_00.unk_20 = func_88313B90; + arg0->unk_00.unk_24 = func_88313B64; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + + arg0->unk_48 = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_048_048)); + func_88313C24(arg0->unk_48, arg0); + spBC = func_8830AC0C(); + + func_883139E8(arg0, 0, 0); + temp_v0_2 = func_8001F5B0(8, 0, arg0->unk_50); + if (spBC < temp_v0_2) { + spBC = temp_v0_2; + } + + func_883139E8(arg0, 1, 0xB); + temp_v0_2 = func_8001F5B0(8, 0, arg0->unk_50); + if (spBC < temp_v0_2) { + spBC = temp_v0_2; + } + + func_883139E8(arg0, 2, 0xB); + temp_v0_2 = func_8001F5B0(8, 0, arg0->unk_50); + if (spBC < temp_v0_2) { + spBC = temp_v0_2; + } + + spBC += 0x10; + + arg0->unk_2C = mem_pool_alloc(arg4, sizeof(unk_func_88001300_038)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, spBC, 0x8C); + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); + + spB4 = mem_pool_alloc(arg4, sizeof(unk_func_8850B254)); + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(spB4, 0, 0, spBC, 0x2C, D_88317664, D_88317668); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, spB4); + arg0->unk_50[0] = '\0'; + + spB0 = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(spB0, 8, 0, arg0->unk_50, 8); + spB0->unk_3C = 0x18; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spB4, spB0); + + spAC = mem_pool_alloc(arg4, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(spAC, 0, 0x30, spBC, 0x5C, D_8831766C); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, spAC); + + arg0->unk_34 = mem_pool_alloc(arg4, sizeof(unk_func_88200FA0_030_030_1CEA00)); + ((func885060BC)Memmap_GetFragmentVaddr(func_885060BC))(arg0->unk_34, 0, 4, func_88312C7C, spBC, 0x1C, 3, 1, arg4); + ((func88506238)Memmap_GetFragmentVaddr(func_88506238))(arg0->unk_34, 3, arg4); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(spAC, arg0->unk_34); + + spA8 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(spA8, arg0->unk_34); + ((func8850BF80)Memmap_GetFragmentVaddr(func_8850BF80))(arg0->unk_48, spA8); + + arg0->unk_4C = mem_pool_alloc(arg4, sizeof(unk_func_8830867C_048_04C)); + ((func8850CBA8)Memmap_GetFragmentVaddr(func_8850CBA8))(arg0->unk_4C); + ((func8850BF80)Memmap_GetFragmentVaddr(func_8850BF80))(arg0->unk_48, arg0->unk_4C); + + spA0 = func_88309DC8(); + sp90 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x60); + sp8C = func_8002D7C0(NULL, 0, D_8831A4C4, 0x61); + sp88 = func_8001F5B0(8, 0, sp90); + sp84 = func_8001F5B0(8, 0, sp8C); + + sp98 = spA0; + if (spA0 < sp88) { + sp98 = sp88; + } + + if (sp98 < sp84) { + sp98 = sp84; + } + sp98 += 0x10; + spA0 += 0x10; + + arg0->unk_30 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_038)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_30, arg0->unk_2C->unk_00.unk_14.unk_00 + 0x10, 0, + sp98, 0x140); + arg0->unk_30->unk_00.unk_28 |= 0x200; + arg0->unk_30->unk_00.unk_28 |= 0x400; + arg0->unk_30->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_30); + + sp80 = mem_pool_alloc(arg4, sizeof(unk_func_8850B254)); + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(sp80, 0, 0, sp98, 0x14, D_88317670, D_88317674); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_30, sp80); + + arg0->unk_40 = mem_pool_alloc(arg4, sizeof(unk_func_88500994)); + ((func88500994)Memmap_GetFragmentVaddr(func_88500994))(arg0->unk_40, 0, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp80, arg0->unk_40); + + sp7C = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp7C, 0, 0, "", 8); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_40, sp7C); + + sp7C = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp7C, (sp98 - sp88) / 2, 0, sp90, 8); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_40, sp7C); + + sp7C = mem_pool_alloc(arg4, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp7C, (sp98 - sp84) / 2, 0, sp8C, 8); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_40, sp7C); + + sp78 = mem_pool_alloc(arg4, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(sp78, 0, 0x18, sp98, 0x128, D_88317678); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_30, sp78); + + arg0->unk_44 = mem_pool_alloc(arg4, sizeof(unk_func_88500994)); + ((func88500994)Memmap_GetFragmentVaddr(func_88500994))(arg0->unk_44, 0, 0); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp78, arg0->unk_44); + + sp74 = mem_pool_alloc(arg4, sizeof(unk_func_88001300_000)); + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(sp74, 0x2C); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_44, sp74); + + arg0->unk_38[0] = mem_pool_alloc(arg4, sizeof(unk_func_88200FA0_030_030_1CEA00)); + ((func885060BC)Memmap_GetFragmentVaddr(func_885060BC))(arg0->unk_38[0], (sp98 - spA0) / 2, 4, func_88312B10, spA0, + 0x18, 0xC, 1, arg4); + ((func88506238)Memmap_GetFragmentVaddr(func_88506238))(arg0->unk_38[0], 0xC, arg4); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_44, arg0->unk_38[0]); + + sp70 = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(sp70, arg0->unk_38[0]); + ((func8850CC74)Memmap_GetFragmentVaddr(func_8850CC74))(arg0->unk_4C, sp70); + + arg0->unk_38[1] = mem_pool_alloc(arg4, sizeof(unk_func_88200FA0_030_030_1CEA00)); + ((func885060BC)Memmap_GetFragmentVaddr(func_885060BC))(arg0->unk_38[1], 0, 4, func_88312B10, spA0, 0x18, 0xC, 1, + arg4); + ((func88506238)Memmap_GetFragmentVaddr(func_88506238))(arg0->unk_38[1], 0xC, arg4); + ((func88500A3C)Memmap_GetFragmentVaddr(func_88500A3C))(arg0->unk_44, arg0->unk_38[1]); + + sp6C = mem_pool_alloc(arg4, sizeof(unk_func_8850BD40)); + ((func8850BD40)Memmap_GetFragmentVaddr(func_8850BD40))(sp6C, arg0->unk_38[1]); + ((func8850CC74)Memmap_GetFragmentVaddr(func_8850CC74))(arg0->unk_4C, sp6C); + + sp68 = mem_pool_alloc(arg4, sizeof(unk_func_88503298)); + ((func88503298)Memmap_GetFragmentVaddr(func_88503298))(sp68, arg0->unk_2C, arg3); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, sp68); +} + +void func_88313740(unk_func_8830867C_048* arg0, unk_func_8830867C_02C_144* arg1) { + unk_func_8830867C_02C_144_000_alt* sp24; + + ((func885063B8)Memmap_GetFragmentVaddr(func_885063B8))(arg0->unk_34, arg1); + sp24 = arg1->unk_00; + ((func885063B8)Memmap_GetFragmentVaddr(func_885063B8))(arg0->unk_38[0], &sp24->unk_2C); + ((func885063B8)Memmap_GetFragmentVaddr(func_885063B8))(arg0->unk_38[1], &sp24->unk_4C); +} + +typedef struct unk_func_88313894 { + /* 0x00 */ char unk00[0xC]; + /* 0x0C */ unk_func_8830867C_02C_0CC_000_000* unk_0C; + /* 0x10 */ char unk10[0xC]; + /* 0x1C */ s32 unk_1C; + /* 0x20 */ unk_func_88313894_020 unk_20; + /* 0x40 */ unk_func_88313894_020 unk_40; +} unk_func_88313894; // size >= 0x60 + +void func_883137C4(unk_func_88200FA0_030_030_1CEA00* arg0, unk_func_8830867C_02C_0CC_000* arg1, + unk_func_88313894_020* arg2) { + unk_func_8830867C_02C_0CC_000_000* sp24 = arg2->unk_0C; + s32 i; + + ((func8850628C)Memmap_GetFragmentVaddr(func_8850628C))(arg0); + + for (i = 0; i < arg2->unk_14; i++, sp24++) { + if (sp24 == arg1->unk_00) { + arg0->unk_34[i] |= 4; + } else if (sp24->unk_10.unk_08 >= arg2->unk_1C) { + arg0->unk_34[i] |= 4; + } + } +} + +void func_88313894(unk_func_8830867C_048* arg0, unk_func_8830867C_02C_0CC_000* arg1) { + u16* temp_v0_2; + u16* temp_v0_3; + unk_func_88313894* temp_s1; + unk_func_8830867C_02C_0CC_000_000* temp_v0; + + temp_s1 = arg0->unk_34->unk_2C->unk_00; + ((func8850628C)Memmap_GetFragmentVaddr(func_8850628C))(arg0->unk_34); + + temp_v0 = temp_s1->unk_0C; + if (temp_v0 == arg1->unk_00) { + arg0->unk_34->unk_34[0] |= 4; + } else if (temp_v0->unk_10.unk_08 >= temp_s1->unk_1C) { + arg0->unk_34->unk_34[0] |= 4; + } + + func_883137C4(arg0->unk_38[0], arg1, &temp_s1->unk_20); + func_883137C4(arg0->unk_38[1], arg1, &temp_s1->unk_40); +} + +void func_88313950(char* arg0, s32 arg1, s32 arg2) { + static u16 D_8831767C[4] = { 0x3B, 0x62, 0x63, 0 }; + + HAL_Strcpy(arg0, func_8002D7C0(NULL, 0, D_8831A4C4, D_8831767C[arg1])); + if (arg1 != 0) { + sprintf(&arg0[strlen(arg0)], " %d", arg2 + 1); + } +} + +void func_883139E8(unk_func_8830867C_048* arg0, s32 arg1, s32 arg2) { + char sp18[32]; + + func_88313950(sp18, arg1, arg2); + func_8002D5D4(0x25, sp18); + func_8002D7C0(arg0->unk_50, 0x80, D_8831A4C4, 0x3A); +} + +void func_88313A34(unk_func_8830867C_048* arg0) { + s32 sp24 = arg0->unk_34->unk_38; + + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_44, sp24); + ((func88500A6C)Memmap_GetFragmentVaddr(func_88500A6C))(arg0->unk_40, sp24); +} + +void func_88313A94(unk_func_8830867C_048* arg0) { + ((func88506CE4)Memmap_GetFragmentVaddr(func_88506CE4))(arg0->unk_34); + ((func88506CE4)Memmap_GetFragmentVaddr(func_88506CE4))(arg0->unk_38[0]); + ((func88506CE4)Memmap_GetFragmentVaddr(func_88506CE4))(arg0->unk_38[1]); + func_88313A34(arg0); + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0->unk_48, 0); + + arg0->unk_48->unk_14(arg0->unk_48, 1); + + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_2C); + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_30); +} + +void func_88313B4C(unk_func_8830867C_048* arg0) { + arg0->unk_2C->unk_2C = 0xB; + arg0->unk_30->unk_2C = 0xB; +} + +void func_88313B64(unk_func_8830867C_048* arg0, s32 arg1) { + arg0->unk_00.unk_2A = arg1; + arg0->unk_48->unk_14(arg0->unk_48, arg1); +} + +s32 func_88313B90(unk_func_8830867C_048* arg0, Controller* arg1) { + s32 var_v1; + + if (arg0->unk_2C->unk_30 & 2) { + var_v1 = arg0->unk_48->unk_10(arg0->unk_48, arg1); + if (!(var_v1 & 1)) { + if (var_v1 & 2) { + func_88313B4C(arg0); + } else if (var_v1 & 4) { + func_88313B4C(arg0); + } + } + } else { + var_v1 = 1; + } + return var_v1; +} + +void func_88313C24(unk_func_8830867C_048_048* arg0, unk_func_8830867C_048* arg1) { + ((func8850BDF0)Memmap_GetFragmentVaddr(func_8850BDF0))(arg0); + arg0->unk_10 = func_88313C70; + arg0->unk_24 = arg1; +} + +s32 func_88313C70(unk_func_8830867C_048_048* arg0, Controller* arg1) { + s32 var_a2; + s32 i; + unk_func_8830867C_048_048* var_a0; + unk_func_88200FA0_030_030_1CEA00* temp_v0_4; + + var_a2 = 0; + if (arg0->unk_20 > 0) { + var_a0 = arg0->unk_04; + + for (i = 0; i < arg0->unk_1C; i++) { + var_a0 = var_a0->unk_08; + } + + var_a2 = var_a0->unk_10(var_a0, arg1); + } + + switch (arg0->unk_1C) { + case 0: + if (var_a2 & 1) { + if (var_a2 & 8) { + func_88313A34(arg0->unk_24); + } + } else if (arg1->buttonPressed & 0x8000) { + if (arg0->unk_24->unk_34->unk_38 != 0) { + ((func8850CD24)Memmap_GetFragmentVaddr(func_8850CD24))(arg0->unk_24->unk_4C, + arg0->unk_24->unk_34->unk_38 - 1); + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 1); + var_a2 |= 1; + } + var_a2 |= 0x80000004; + } else if (arg1->buttonPressed & 0x4000) { + var_a2 |= 0x80000002; + } + break; + + case 1: + if (!(var_a2 & 1)) { + if (arg1->buttonPressed & 0x8000) { + temp_v0_4 = arg0->unk_24->unk_38[arg0->unk_24->unk_34->unk_38 - 1]; + if (temp_v0_4->unk_34[temp_v0_4->unk_38] & 4) { + var_a2 = 0x80000101; + } else { + var_a2 = 0x80000004; + } + } else if (arg1->buttonPressed & 0x4000) { + ((func8850C064)Memmap_GetFragmentVaddr(func_8850C064))(arg0, 0); + var_a2 = 0x80000003; + } + } + break; + } + return var_a2; +} + +s32 func_88313E50(unk_func_8830867C_048* arg0, Controller* arg1) { + s32 temp_v0; + s32 var_s0; + s32 var_s1 = 0; + + func_88313A94(arg0); + + while (var_s1 == 0) { + func_8002EEA8(var_s1); + + var_s0 = arg0->unk_00.unk_20(arg0, arg1); + if (!(var_s0 & 1)) { + if (var_s0 & 2) { + var_s1 = 1; + } else if (var_s0 & 4) { + var_s0 = 0x80000801; + var_s1 = 2; + } + } + ((func8850BC94)Memmap_GetFragmentVaddr(func_8850BC94))(var_s0); + } + + func_88313B4C(arg0); + return var_s1 - 1; +} + +void func_88313F24(s32 arg0, s32 arg1, s8* arg2, s32 arg3) { + static Color_RGBA8 D_88317684 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + func_8001F3F4(); + func_8001F324(D_88317684.r, D_88317684.g, D_88317684.b, D_88317684.a); + func_8001EBE0(8, 0); + func_8001F1E8(arg0 + 8, arg1 + 4, arg2); + func_8001F444(); +} + +void func_88313FA0(unk_func_8830867C_02C_0B4* arg0, s32 arg1, s32 arg2, MemoryPool* arg3) { + static Color_RGBA8 D_88317688 = { 0x64, 0x96, 0xB4, 0xFF }; + static Color_RGBA8 D_8831768C = { 0x3C, 0x64, 0x78, 0xFF }; + static Color_RGBA8 D_88317690 = { 0xA0, 0x96, 0x64, 0xFF }; + + UNUSED s32 pad; + s32 sp68; + UNUSED s32 pad2[2]; + s32 sp5C; + s32 temp_v1; + unk_func_8850B254* sp54; + char* sp50; + unk_func_8850878C* sp4C; + unk_func_885012A4* sp48; + + sp54 = mem_pool_alloc(arg3, sizeof(unk_func_8850B254)); + sp50 = func_8002D7C0(NULL, 0, D_8831A4C4, 0x59); + + sp4C = mem_pool_alloc(arg3, sizeof(unk_func_8850878C)); + ((func8850878C)Memmap_GetFragmentVaddr(func_8850878C))(sp4C, 8, 0, sp50, 8); + temp_v1 = func_8001F5B0(8, 0, sp50) + 0x10; + sp68 = temp_v1; + sp5C = temp_v1; + ((func8850B254)Memmap_GetFragmentVaddr(func_8850B254))(sp54, 0, 0, sp5C, 0x14, D_88317688, D_8831768C); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp54, sp4C); + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, 0x40); + + arg0->unk_00.unk_20 = func_883142F4; + arg0->unk_00.unk_10.unk_00 = (arg2 - sp5C) / 2; + arg0->unk_00.unk_10.unk_02 = arg1; + + arg0->unk_2C = mem_pool_alloc(arg3, sizeof(unk_func_88001300_038)); + ((func88502274)Memmap_GetFragmentVaddr(func_88502274))(arg0->unk_2C, 0, 0, sp5C, 0x58); + arg0->unk_2C->unk_00.unk_28 |= 0x200; + arg0->unk_2C->unk_00.unk_28 |= 0x400; + arg0->unk_2C->unk_00.unk_28 &= ~1; + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0, arg0->unk_2C); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp54); + + sp48 = mem_pool_alloc(arg3, sizeof(unk_func_885012A4)); + ((func885012A4)Memmap_GetFragmentVaddr(func_885012A4))(sp48, 0, 0x18, sp5C, 0x40, D_88317690); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(arg0->unk_2C, sp48); + + arg0->unk_30 = mem_pool_alloc(arg3, sizeof(unk_func_8830867C_02C_0B4_030)); + ((func885060BC)Memmap_GetFragmentVaddr(func_885060BC))(arg0->unk_30, 0, 4, func_88313F24, sp68, 0x1C, 2, 1, arg3); + + func_8002CBC0(&arg0->unk_34, 2, arg3); + func_8002CC2C(&arg0->unk_34, func_8002D7C0(NULL, 0, D_8831A4C4, 0x5A), 0); + func_8002CC2C(&arg0->unk_34, func_8002D7C0(NULL, 0, D_8831A4C4, 0x5B), 1); + + ((func88506384)Memmap_GetFragmentVaddr(func_88506384))(arg0->unk_30, &arg0->unk_34, arg3); + ((func8850068C)Memmap_GetFragmentVaddr(func_8850068C))(sp48, arg0->unk_30); +} + +s32 func_883142F4(unk_func_8830867C_02C_0B4* arg0, Controller* arg1) { + s32 var_v1; + + if (arg0->unk_2C->unk_30 & 2) { + var_v1 = arg0->unk_30->unk_00.unk_20(arg0->unk_30, arg1); + } else { + var_v1 = 1; + } + return var_v1; +} + +s32 func_88314340(unk_func_8830867C_02C_0B4* arg0, Controller* arg1) { + s32 temp_v0_3; + s32 var_s0; + s32 var_s1 = 0; + + ((func88506BFC)Memmap_GetFragmentVaddr(func_88506BFC))(arg0->unk_30, 0); + + arg0->unk_00.unk_24(&arg0->unk_00, 1); + + ((func88502C98)Memmap_GetFragmentVaddr(func_88502C98))(arg0->unk_2C); + + while (var_s1 == 0) { + func_8002EEA8(var_s1); + + var_s0 = arg0->unk_00.unk_20(arg0, arg1); + + if (!(var_s0 & 1)) { + if (arg1->buttonPressed & 0x4000) { + var_s0 = 0x80000003; + var_s1 = 2; + } else if (arg1->buttonPressed & 0x8000) { + temp_v0_3 = arg0->unk_30->unk_38; + var_s1 = temp_v0_3 + 1; + if (temp_v0_3 == 0) { + var_s0 = 4; + } else { + var_s0 = 2; + } + var_s0 |= 0x80000001; + } + } + ((func8850BC94)Memmap_GetFragmentVaddr(func_8850BC94))(var_s0); + } + + arg0->unk_2C->unk_2C = 0xB; + return var_s1 - 1; +} + +void func_88314484(unk_func_882173EC* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_882173EC)); + arg0->unk_00.unk_1C = func_88314518; + arg0->unk_00.unk_18 = func_88314574; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + arg0->unk_00.unk_14.unk_00 = arg3; + arg0->unk_00.unk_14.unk_02 = arg4; + arg0->unk_2C = 0x3C; + arg0->unk_00.unk_28 &= ~1; +} + +s32 func_88314518(unk_func_882173EC* arg0) { + if (arg0->unk_2C >= 0x3C) { + arg0->unk_00.unk_28 &= ~0x101; + return 0; + } + + arg0->unk_00.unk_28 |= 0x100; + arg0->unk_2C++; + if ((*((s32*)&arg0->unk_30) == -1) && (arg0->unk_2C == 0x15)) { + arg0->unk_2C = 0x29; + } + return 0; +} + +s32 func_88314574(unk_func_882173EC* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_88317694[] = { + { 0x00, 0x00, 0x00, 0xFF }, + { 0x32, 0x32, 0x32, 0xFF }, + }; + + char* sp6C = NULL; + Color_RGBA8 sp68; + s32 sp64 = arg0->unk_2C - 1; + s32 temp_t3; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + // clang-format off + temp_t3 = ((D_88317694[(sp64 / 3) & 1].r << 8) & 0xF800) | ((D_88317694[(sp64 / 3) & 1].g << 3) & 0x7C0) | ((D_88317694[(sp64 / 3) & 1].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + gDPSetFillColor(gDisplayListHead++, (temp_t3 << 0x10) | temp_t3); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_00.unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_00.unk_14.unk_02) - 1); + + if (sp64 < 0x14) { + if (*(s32*)&arg0->unk_30 != -1) { + ret_func_8002ED08* sp44; + UNUSED s32 pad[2]; + + sp44 = func_8002ED08(*(s32*)&arg0->unk_30); + sp68 = ((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(sp44->unk_00[1])->unk_04; + sp6C = func_8002D7C0(NULL, 0, D_8831A4CC, *(s32*)&arg0->unk_30 - 1); + sp68.a = 0xFF; + } + } else if (sp64 < 0x28) { + ret_func_8002ED08* sp38; + UNUSED s32 pad2[2]; + + sp38 = func_8002ED08(*(s32*)&arg0->unk_30); + sp68 = ((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(sp38->unk_00[1])->unk_04; + sp6C = func_8002D7C0(NULL, 0, D_8831A4CC, *(s32*)&arg0->unk_30 - 1); + sp68.a = ((-sp64 * 0xFF) + 0x26D9) / 20; + } else { + ret_func_8002ED08* sp2C; + + sp2C = func_8002ED08(*(s32*)&arg0->unk_34); + sp68 = ((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(sp2C->unk_00[1])->unk_04; + sp6C = func_8002D7C0(NULL, 0, D_8831A4CC, *(s32*)&arg0->unk_34 - 1); + sp68.a = ((sp64 * 0xFF) - 0x27D8) / 20; + } + + if (sp6C != NULL) { + func_8001F3F4(); + func_8001EBE0(4, 0); + func_8001F324(sp68.r, sp68.g, sp68.b, sp68.a); + func_8001F1E8(((arg0->unk_00.unk_14.unk_00 - func_8001F5B0(0, 0, sp6C)) / 2) + arg1, + ((arg0->unk_00.unk_14.unk_02 - 0x10) / 2) + arg2, sp6C); + func_8001F444(); + } + return 0; +} + +void func_88314920(unk_func_882173EC* arg0, s32 arg1, s32 arg2, unk_func_88001300_000_010 arg3) { + arg0->unk_2C = 0; + *(s32*)&arg0->unk_30 = arg1; + *(s32*)&arg0->unk_34 = arg2; + arg0->unk_00.unk_10 = arg3; + arg0->unk_00.unk_28 |= 1; +} + +void func_88314950(unk_func_8830867C_02C_0C0* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_8830867C_02C_0C0)); + arg0->unk_00.unk_00.unk_1C = func_883149E4; + arg0->unk_00.unk_00.unk_18 = func_88314A38; + arg0->unk_00.unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_00.unk_10.unk_02 = arg2; + arg0->unk_00.unk_00.unk_14.unk_00 = arg3; + arg0->unk_00.unk_00.unk_14.unk_02 = arg4; + arg0->unk_00.unk_2C = 0x5C; + arg0->unk_00.unk_00.unk_28 &= ~1; +} + +s32 func_883149E4(unk_func_8830867C_02C_0C0* arg0) { + if (arg0->unk_00.unk_2C >= 0x5C) { + arg0->unk_00.unk_00.unk_28 &= ~1; + return 0; + } + + if (arg0->unk_00.unk_2C >= 0x5B) { + arg0->unk_00.unk_00.unk_28 &= ~0x100; + } + + arg0->unk_00.unk_2C++; + return 0; +} + +s32 func_88314A38(unk_func_8830867C_02C_0C0* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_8831769C = { 0xF0, 0xF0, 0xF0, 0xFF }; + static Color_RGBA8 D_883176A0[] = { + { 0x00, 0x00, 0x00, 0xFF }, + { 0x32, 0x32, 0x32, 0xFF }, + }; + + UNUSED s32 pad; + s32 sp98; + s32 sp94; + s32 sp90; + Color_RGBA8 sp8C; + char* sp88; + char sp84[4]; + s32 sp80; + ret_func_8002ED08* temp_s0; + s32 sp78; + s32 sp74; + s32 sp70; + s32 temp_t0; + + sp90 = arg0->unk_00.unk_2C - 1; + sp80 = func_8001F5B0(4, 0, "00") + 4; + sp74 = (arg0->unk_00.unk_00.unk_14.unk_02 - 0x10) / 2; + temp_s0 = func_8002ED08(*(s32*)&arg0->unk_00.unk_30); + sp8C = (((func884000C4)Memmap_GetFragmentVaddr(func_884000C4))(temp_s0->unk_00[1]))->unk_04; + sp88 = func_8002D7C0(NULL, 0, D_8831A4CC, *(s32*)&arg0->unk_00.unk_30 - 1); + sp70 = strlen(sp88); + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + temp_t0 = ((D_883176A0[(sp90 / 3) & 1].r << 8) & 0xF800) | ((D_883176A0[(sp90 / 3) & 1].g << 3) & 0x7C0) | + ((D_883176A0[(sp90 / 3) & 1].b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_t0 << 0x10) | temp_t0); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_00.unk_00.unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_00.unk_00.unk_14.unk_02) - 1); + + if (sp90 < 0x10) { + sp78 = arg0->unk_00.unk_00.unk_14.unk_00 - ((sp80 * sp90) / 16); + sp98 = (((sp78 - func_8001F5B0(4, 0, sp88, arg1)) - sp70) - 7) / sp70; + if (arg2) {} + sp94 = arg2 + sp74; + } else if (sp90 < 0x24) { + sp78 = arg0->unk_00.unk_00.unk_14.unk_00 - sp80; + sp98 = (((sp78 - func_8001F5B0(4, 0, sp88, arg1)) - sp70) - 7) / sp70; + sp94 = arg2 + sp74; + } else if (sp90 < 0x38) { + s32 sp50 = sp90 - 0x24; + UNUSED s32 pad3[3]; + + sp78 = arg0->unk_00.unk_00.unk_14.unk_00 - sp80; + sp98 = (((sp78 - func_8001F5B0(4, 0, sp88, arg1)) - sp70) - 7) / sp70; + sp94 = (arg2 + sp74) - ((arg0->unk_00.unk_00.unk_14.unk_02 * sp50) / 20); + } else if (sp90 < 0x4C) { + sp78 = arg0->unk_00.unk_00.unk_14.unk_00 - sp80; + sp98 = (((sp78 - func_8001F5B0(4, 0, sp88, arg1)) - sp70) - 7) / sp70; + sp94 = (arg2 + sp74) - arg0->unk_00.unk_00.unk_14.unk_02; + } else if (sp90 < 0x5C) { + sp78 = arg0->unk_00.unk_00.unk_14.unk_00 - ((sp80 * (0x5B - sp90)) / 16); + sp98 = (((sp78 - func_8001F5B0(4, 0, sp88, arg1)) - sp70) - 7) / sp70; + sp94 = (arg2 + sp74) - arg0->unk_00.unk_00.unk_14.unk_02; + } + + if (sp98 > 0) { + if (1) {} + sp98 = 0; + } + + gDPPipeSync(gDisplayListHead++); + gDPSetScissorFrac(gDisplayListHead++, G_SC_NON_INTERLACE, arg1 * 4.0f, arg2 * 4.0f, + (arg0->unk_00.unk_00.unk_14.unk_00 + arg1) * 4.0f, + (arg2 + arg0->unk_00.unk_00.unk_14.unk_02) * 4.0f); + + func_8001F3F4(); + func_8001EBE0(4, sp98); + func_8001F324(sp8C.r, sp8C.g, sp8C.b, sp8C.a); + func_8001F1E8(((sp78 - func_8001F5B0(4, sp98, sp88)) / 2) + arg1, arg2 + sp74, sp88); + func_8001EBE0(4, 0); + func_8001F324(D_8831769C.r, D_8831769C.g, D_8831769C.b, D_8831769C.a); + + sprintf(sp84, "%d", *(s32*)&arg0->unk_00.unk_34); + + func_8001F1E8(((arg1 + sp78 + sp80) - func_8001F5B0(0, 0, sp84)) - 4, sp94, sp84); + + sprintf(sp84, "%d", arg0->unk_38); + + func_8001F1E8(((arg1 + sp78 + sp80) - func_8001F5B0(0, 0, sp84)) - 4, arg0->unk_00.unk_00.unk_14.unk_02 + sp94, + sp84); + func_8001F444(); + + gDPPipeSync(gDisplayListHead++); + gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, 640, 480); + + return 0; +} + +void func_883151B8(unk_func_8830867C_02C_0C0* arg0, s32 arg1, s32 arg2, s32 arg3, unk_func_88001300_000_010 arg4) { + arg0->unk_00.unk_2C = 0; + *(s32*)&arg0->unk_00.unk_30 = arg1; + *(s32*)&arg0->unk_00.unk_34 = arg2; + arg0->unk_38 = arg3; + arg0->unk_00.unk_00.unk_10 = arg4; + arg0->unk_00.unk_00.unk_28 |= 0x101; +} + +void func_883151E8(unk_func_882173EC* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_882173EC)); + arg0->unk_00.unk_1C = func_8831527C; + arg0->unk_00.unk_18 = func_883152D0; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + arg0->unk_00.unk_14.unk_00 = arg3; + arg0->unk_00.unk_14.unk_02 = arg4; + arg0->unk_2C = 0x28; + arg0->unk_00.unk_28 &= ~1; +} + +s32 func_8831527C(unk_func_882173EC* arg0) { + if (arg0->unk_2C >= 0x28) { + arg0->unk_00.unk_28 &= ~1; + return 0; + } + if (arg0->unk_2C >= 0x27) { + arg0->unk_00.unk_28 &= ~0x100; + } + arg0->unk_2C += 1; + return 0; +} + +s32 func_883152D0(unk_func_882173EC* arg0, s32 arg1, s32 arg2) { + static Color_RGBA8 D_883176A8 = { 0xF0, 0xF0, 0xF0, 0xFF }; + static Color_RGBA8 D_883176AC[] = { + { 0x00, 0x00, 0x00, 0xFF }, + { 0x32, 0x32, 0x32, 0xFF }, + }; + + char sp7C[4]; + s32 sp78; + s32 sp74; + UNUSED s32 pad; + s32 temp_t0; + s32 temp_t3; + s32 var_s4; + + sp78 = func_8001F5B0(4, 0, "000"); + temp_t3 = arg0->unk_2C - 1; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + temp_t0 = ((D_883176AC[(temp_t3 / 3) & 1].r << 8) & 0xF800) | ((D_883176AC[(temp_t3 / 3) & 1].g << 3) & 0x7C0) | + ((D_883176AC[(temp_t3 / 3) & 1].b >> 2) & 0x3E) | 1; + gDPPipeSync(gDisplayListHead++); + gDPSetFillColor(gDisplayListHead++, (temp_t0 << 0x10) | temp_t0); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_00.unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_00.unk_14.unk_02) - 1); + + sp74 = ((arg0->unk_00.unk_14.unk_00 - sp78) / 2) + arg1; + var_s4 = ((arg0->unk_00.unk_14.unk_02 - 0x10) / 2) + arg2; + if (temp_t3 >= 0x14) { + var_s4 -= (arg0->unk_00.unk_14.unk_02 * (temp_t3 - 0x14)) / 20; + } + + gDPPipeSync(gDisplayListHead++); + gDPSetScissorFrac(gDisplayListHead++, G_SC_NON_INTERLACE, arg1 * 4.0f, arg2 * 4.0f, + (arg0->unk_00.unk_14.unk_00 + arg1) * 4.0f, (arg2 + arg0->unk_00.unk_14.unk_02) * 4.0f); + + func_8001F3F4(); + func_8001EBE0(4, 0); + func_8001F324(D_883176A8.r, D_883176A8.g, D_883176A8.b, D_883176A8.a); + + sprintf(sp7C, "%d", *(s32*)&arg0->unk_30); + + func_8001F1E8((sp74 + sp78) - func_8001F5B0(0, 0, sp7C), var_s4, sp7C); + + sprintf(sp7C, "%d", *(s32*)&arg0->unk_34); + + func_8001F1E8((sp74 + sp78) - func_8001F5B0(0, 0, sp7C), arg0->unk_00.unk_14.unk_02 + var_s4, sp7C); + func_8001F444(); + + gDPPipeSync(gDisplayListHead++); + gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, 640, 480); + + return 0; +} + +void func_883156B8(unk_func_882173EC* arg0, char* arg1, char* arg2, unk_func_88001300_000_010 arg3) { + arg0->unk_2C = 0; + *(char**)&arg0->unk_30 = arg1; + *(char**)&arg0->unk_34 = arg2; + arg0->unk_00.unk_10 = arg3; + arg0->unk_00.unk_28 |= 0x101; +} + +void func_883156E8(unk_func_882173EC* arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { + ((func885007CC)Memmap_GetFragmentVaddr(func_885007CC))(arg0, sizeof(unk_func_882173EC)); + + arg0->unk_00.unk_1C = func_8831577C; + arg0->unk_00.unk_18 = func_88315A6C; + arg0->unk_00.unk_10.unk_00 = arg1; + arg0->unk_00.unk_10.unk_02 = arg2; + arg0->unk_00.unk_14.unk_00 = arg3; + arg0->unk_00.unk_14.unk_02 = arg4; + arg0->unk_2C = 0x3C; + arg0->unk_00.unk_28 &= ~1; +} + +s32 func_8831577C(unk_func_882173EC* arg0) { + if (arg0->unk_2C >= 0x3C) { + arg0->unk_00.unk_28 &= ~1; + return 0; + } + if (arg0->unk_2C >= 0x3B) { + arg0->unk_00.unk_28 &= ~0x100; + } + arg0->unk_2C++; + return 0; +} + +void func_883157D0(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6) { + static Color_RGBA8 D_883176B4 = { 0xF0, 0xF0, 0xF0, 0xFF }; + + Color_RGBA8 sp2C; + char sp24[8]; + UNUSED s32 pad; + + func_8001F3F4(); + func_8001EBE0(4, 0); + + switch (arg4) { + case 32: + sp2C = (0, D_8831727C); + func_8001F324(sp2C.r, sp2C.g, sp2C.b, arg6); + func_8001F1E8(arg0 + 4, ((arg3 - 0x10) / 2) + arg1, func_8002D7C0(NULL, 0, D_8831A4C4, 0x14)); + break; + + case 33: + func_8001F324(D_883176B4.r, D_883176B4.g, D_883176B4.b, arg6); + sprintf(sp24, "%d", arg5 + 1); + func_8001F1E8(((arg0 + arg2) - func_8001F5B0(0, 0, sp24)) - 4, ((arg3 - 0x10) / 2) + arg1, sp24); + + sp2C = (0, D_88317280); + func_8001F324(sp2C.r, sp2C.g, sp2C.b, arg6); + func_8001F1E8(arg0 + 4, ((arg3 - 0x10) / 2) + arg1, func_8002D7C0(NULL, 0, D_8831A4C4, 0x15)); + break; + + case 17: + func_8001F324(D_883176B4.r, D_883176B4.g, D_883176B4.b, arg6); + sprintf(sp24, "%d", arg5 + 1); + func_8001F1E8(((arg0 + arg2) - func_8001F5B0(0, 0, sp24)) - 4, ((arg3 - 0x10) / 2) + arg1, sp24); + + sp2C = (0, D_88317284); + func_8001F324(sp2C.r, sp2C.g, sp2C.b, arg6); + func_8001F1E8(arg0 + 4, ((arg3 - 0x10) / 2) + arg1, func_8002D7C0(NULL, 0, D_8831A4C4, 0x16)); + break; + } + func_8001F444(); +} + +s32 func_88315A6C(unk_func_882173EC* arg0, s32 arg1, s32 arg2) { + static s32 D_883176B8[] = { 0x20, 0x21, 0x11 }; + static Color_RGBA8 D_883176C4[] = { + { 0x00, 0x00, 0x00, 0xFF }, + { 0x32, 0x32, 0x32, 0xFF }, + }; + + s32 temp_t0 = arg0->unk_2C - 1; + s32 temp_t4; + s32 var_v0; + s32 var_v1; + + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_FILL); + gDPSetRenderMode(gDisplayListHead++, G_RM_NOOP, G_RM_NOOP2); + + // clang-format off + temp_t4 = ((D_883176C4[(temp_t0 / 3) & 1].r << 8) & 0xF800) | ((D_883176C4[(temp_t0 / 3) & 1].g << 3) & 0x7C0) | ((D_883176C4[(temp_t0 / 3) & 1].b >> 2) & 0x3E) | 1; gDPPipeSync(gDisplayListHead++); + // clang-format on + gDPSetFillColor(gDisplayListHead++, (temp_t4 << 0x10) | temp_t4); + gDPFillRectangle(gDisplayListHead++, arg1, arg2, (arg0->unk_00.unk_14.unk_00 + arg1) - 1, + (arg2 + arg0->unk_00.unk_14.unk_02) - 1); + + if (temp_t0 < 0x14) { + var_v1 = 0xFF; + var_v0 = *(s32*)&arg0->unk_30; + } else if (temp_t0 < 0x28) { + var_v1 = ((-temp_t0 * 0xFF) + 0x26D9) / 20; + var_v0 = *(s32*)&arg0->unk_30; + } else { + var_v1 = ((temp_t0 * 0xFF) - 0x27D8) / 20; + var_v0 = *(s32*)&arg0->unk_34; + } + + func_883157D0(arg1, arg2, arg0->unk_00.unk_14.unk_00, arg0->unk_00.unk_14.unk_02, D_883176B8[var_v0 >> 0x10], + var_v0 & 0xFFFF, var_v1); + return 0; +} + +void func_88315C98(unk_func_882173EC* arg0, s32 arg1, s32 arg2, unk_func_88001300_000_010 arg3) { + arg0->unk_2C = 0; + *(s32*)&arg0->unk_30 = arg1; + *(s32*)&arg0->unk_34 = arg2; + arg0->unk_00.unk_10 = arg3; + arg0->unk_00.unk_28 |= 0x101; +} diff --git a/src/fragments/24/fragment24_1E46B0.c b/src/fragments/24/fragment24_1E46B0.c index 2281cf6..ff6cc04 100644 --- a/src/fragments/24/fragment24_1E46B0.c +++ b/src/fragments/24/fragment24_1E46B0.c @@ -1,83 +1,1110 @@ -#include "global.h" +#include "fragment24.h" +#include "src/22630.h" +#include "src/26820.h" +#include "src/29BA0.h" +#include "src/2D340.h" +#include "src/2E460.h" +#include "src/hal_libc.h" +#include "src/memory.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315CD0.s") +static Gfx D_883176D0[] = { + gsSPEndDisplayList(), +}; +u32 D_883176D8[] = { + 0x00000000, 0x00000000, 0x0000051D, 0x4F0C0300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x020B5FDF, 0xFFBF2F08, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000007, + 0x1FAFFFFF, 0xFFFFFF7F, 0x0D040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00030C6F, 0xEFFFFFFF, + 0xFFFFFFFF, 0xCF3F0901, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x082FBFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF8F0D, 0x04000000, 0x00000000, 0x00000000, 0x0000040D, 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFCF, + 0x3F090100, 0x00000000, 0x00000000, 0x01094FCF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF8F1E05, + 0x00000000, 0x00000000, 0x0D7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFCF2F, 0x07000000, + 0x00000000, 0x081B1A1A, 0x1A1A1A1A, 0x1A1A1A1A, 0x1A1A1A1A, 0x1A1A1A1A, 0x1A1A2A0B, 0x03000000, 0x00000000, + 0x00000000, 0x01080808, 0x08080808, 0x08080808, 0x08080904, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x031FDFFF, 0xEFEFEFEF, 0xEFEFEFEF, 0xEFFF7F08, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x031FEFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF8F08, 0x02050505, 0x05050505, 0x05050000, 0x00000000, 0x031FEFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF8F08, 0x085FBFAF, 0x2F3FAF1F, 0x7F1F0000, 0x00000000, 0x031FEFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF8F08, 0x087FFFFF, 0x4F5FFF2F, 0xBF1F0000, 0x00000000, 0x020FCFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF8F08, + 0x087FFFFF, 0x4F5FFF2F, 0xBF1F0000, 0x00000000, 0x00094FEF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF8F08, 0x087FFFFF, + 0x4F5FFF2F, 0xBF1F0000, 0x00000000, 0x0000082F, 0xAFEFFFFF, 0xFFFFFFFF, 0xFFFF8F08, 0x087FFFFF, 0x4F5FFF2F, + 0xBF1F0000, 0x00000000, 0x00000002, 0x081C4E6F, 0x6F6F6F6F, 0x6F7F3F07, 0x073F7F6F, 0x1F2F6F0F, 0x4F0D0000, +}; +static Gfx D_88317918[] = { + gsSPEndDisplayList(), +}; +u32 D_88317920[] = { + 0x42104210, 0x42104210, 0x42104210, 0x421139CF, 0x39CF39CF, 0x39CF39CF, 0x39CF39CF, 0x39CF39CF, 0x39CF39CF, + 0x39CF39CF, 0x39CF39CF, 0x39CF39CF, 0x42114210, 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x42104210, + 0x421139CF, 0x4A538C63, 0xC631D6B5, 0xDEF7DEF7, 0xDEF7DEF7, 0xDEF7DEF7, 0xDEF7DEF7, 0xDEF7DEF7, 0xDEF7DEF7, + 0xDEF7BDEF, 0x4A534211, 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x42104211, 0x39CF6B5B, 0xC631D6B5, + 0xD6B5DEF7, 0xEF7BE739, 0xEF7BEF7B, 0xEF7BE739, 0xEF7BEF7B, 0xEF7BEF7B, 0xEF7BEF7B, 0xE739BDEF, 0x8C634211, + 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x421139CF, 0x739DCE73, 0xCE73D6B5, 0xEF7BEF7B, 0xE739EF7B, + 0xEF7BEF7B, 0xE739DEF7, 0xDEF7DEF7, 0xDEF7DEF7, 0xDEF7DEF7, 0xFFFFAD6B, 0x7BDF4A53, 0x39CE4210, 0x42104210, + 0x42104210, 0x42104211, 0x39CF739D, 0xC631BDEF, 0xE739E739, 0xD6B5CE73, 0xB5AD6B5B, 0x5AD75AD7, 0x8421C631, + 0xCE73CE73, 0xCE73CE73, 0xCE73C631, 0xE739B5AD, 0x6B5B4211, 0x42104210, 0x42104210, 0x42104210, 0x421039CF, + 0x5AD7B5AD, 0xBDEFDEF7, 0xD6B5C631, 0xC631D6B5, 0x739D2109, 0x739D6B5B, 0x18C7AD6B, 0xCE73C631, 0xC631C631, + 0xC631C631, 0xEF7BAD6B, 0x6B5B4211, 0x42104210, 0x42104210, 0x42104210, 0x42114211, 0x94A5AD6B, 0xCE73D6B5, + 0xC631C631, 0xC631CE73, 0x63196B5B, 0xFFFFFFFF, 0x318DA529, 0xCE73C631, 0xC631C631, 0xC631BDEF, 0xE739AD6B, + 0x6B5B4211, 0x42104210, 0x42104210, 0x42104210, 0x42115295, 0xA529B5AD, 0xD6B5BDEF, 0xBDEFBDEF, 0xBDEFCE73, + 0x63196319, 0xFFFFFFFF, 0x318D9CE7, 0xC631BDEF, 0xBDEFBDEF, 0xBDEFBDEF, 0xDEF7A529, 0x739D4211, 0x42104210, + 0x42104210, 0x42104210, 0x42116B5B, 0x94A5CE73, 0xC631B5AD, 0xBDEFBDEF, 0xBDEFC631, 0x5AD76319, 0xFFFFFFFF, + 0x318D9CE7, 0xBDEFB5AD, 0xBDEFBDEF, 0xBDEFB5AD, 0xD6B5A529, 0x6B5B4211, 0x42104210, 0x42104210, 0x42104210, + 0x4211739D, 0x94A5CE73, 0xBDEFAD6B, 0xB5ADB5AD, 0xB5ADBDEF, 0x5AD76B5B, 0xFFFFFFFF, 0x318D94A5, 0xBDEFB5AD, + 0xB5ADB5AD, 0xB5ADB5AD, 0xC631A529, 0x6B5B4A53, 0x39CE4210, 0x42104210, 0x42104210, 0x4211739D, 0x9CE7C631, + 0xB5ADAD6B, 0xAD6BAD6B, 0xAD6BBDEF, 0x5AD76319, 0xFFFFFFFF, 0x318D8C63, 0xB5ADB5AD, 0xAD6BAD6B, 0xAD6BB5AD, + 0xBDEFA529, 0x6B5B4211, 0x42104210, 0x42104210, 0x42104210, 0x4211739D, 0x9CE7BDEF, 0xAD6BAD6B, 0xAD6BAD6B, + 0xAD6BB5AD, 0x52956319, 0xFFFFFFFF, 0x318D8C63, 0xAD6BAD6B, 0xAD6BAD6B, 0xAD6BA529, 0xC6319CE7, 0x6B5B4A53, + 0x39CE4210, 0x42104210, 0x42104210, 0x4211739D, 0x9CE7B5AD, 0xA529AD6B, 0xA529A529, 0xA529B5AD, 0x52956319, + 0xFFFFFFFF, 0x318D8421, 0xAD6BA529, 0xA529A529, 0xA529A529, 0xBDEF9CE7, 0x6B5B4A53, 0x42104210, 0x42104210, + 0x42104210, 0x42116B5B, 0x94A5BDEF, 0x9CE7A529, 0xA529A529, 0xA529A529, 0x52956319, 0xFFFFFFFF, 0x318D8421, + 0xA529A529, 0xA529A529, 0xA5299CE7, 0xB5AD9CE7, 0x6B5B4A53, 0x39CE4210, 0x42104210, 0x42104210, 0x42116319, + 0x8421BDEF, 0x9CE79CE7, 0x9CE79CE7, 0x9CE7A529, 0x4A536B5B, 0xFFFFFFFF, 0x294B8421, 0x94A59CE7, 0x94A59CE7, + 0x9CE79CE7, 0xAD6B9CE7, 0x739D4211, 0x42104210, 0x42104210, 0x42104210, 0x42115AD7, 0x739DA529, 0xA52994A5, + 0x9CE794A5, 0x94A5A529, 0x4A536319, 0xFFFFFFFF, 0x294B2109, 0x294B2109, 0x294B2109, 0x4A5394A5, 0xAD6B9CE7, + 0x6B5B4211, 0x42104210, 0x42104210, 0x42104210, 0x42114A53, 0x63198C63, 0xAD6B94A5, 0x94A594A5, 0x94A59CE7, + 0x42116B5B, 0xFFFFFFFF, 0xD6B5C631, 0xC631C631, 0xC631A529, 0x18C78C63, 0xA52994A5, 0x739D4211, 0x42104210, + 0x42104210, 0x42104210, 0x42114211, 0x5AD76B5B, 0x9CE79CE7, 0x8C638C63, 0x8C639CE7, 0x42116319, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFEF7B, 0x21098421, 0x9CE794A5, 0x739D4211, 0x42104210, 0x42104210, 0x42104210, + 0x42104211, 0x42115AD7, 0x739D9CE7, 0x9CE78421, 0x8C638C63, 0x52952109, 0x6B5B6319, 0x63196319, 0x63196319, + 0x63195295, 0x21098421, 0x9CE794A5, 0x6B5B4A53, 0x39CE4210, 0x42104210, 0x42104210, 0x42104211, 0x42114A53, + 0x52956B5B, 0x9CE79CE7, 0x8C638421, 0x7BDF4A53, 0x42114211, 0x42114211, 0x42114211, 0x421139CF, 0x6B5B8421, + 0x94A58C63, 0x739D4211, 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x42114211, 0x4A535295, 0x63197BDF, + 0x9CE794A5, 0x94A594A5, 0x94A594A5, 0x94A594A5, 0x94A594A5, 0x94A594A5, 0x94A58C63, 0x9CE78421, 0x6B5B4211, + 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x42104211, 0x42114211, 0x52955295, 0x6319739D, 0x7BDF8C63, + 0x84218421, 0x84218421, 0x84218421, 0x84218421, 0x84218421, 0x7BDF6319, 0x5AD74211, 0x42104210, 0x42104210, + 0x42104210, 0x42104210, 0x42104210, 0x42114211, 0x42114A53, 0x4A534A53, 0x52954A53, 0x52955295, 0x52955295, + 0x52955295, 0x52955295, 0x52955295, 0x4A535295, 0x42114211, 0x42104210, 0x42104210, 0x42104210, 0x42104210, + 0x42104210, 0x42104210, 0x42114211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, + 0x42114211, 0x42114211, 0x42114210, 0x42104210, 0x42104210, 0x42104210, +}; +static Gfx D_88317F20[] = { + gsSPEndDisplayList(), +}; +u32 D_88317F28[] = { + 0x421039CF, 0x4A534211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, + 0x39CF4211, 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x39CF6B5B, 0xD6B5DEF7, + 0xDEF7DEF7, 0xDEF7DEF7, 0xDEF7DEF7, 0xDEF7DEF7, 0xDEF7DEF7, 0xDEF7DEF7, 0xD6B5B5AD, 0x7BDF39CF, 0x42114211, + 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x4A53A529, 0xCE73EF7B, 0xEF7BE739, 0xEF7BEF7B, + 0xEF7BEF7B, 0xEF7BE739, 0xEF7BEF7B, 0xEF7BE739, 0xD6B5DEF7, 0xD6B5AD6B, 0x529539CF, 0x42114210, 0x42104210, + 0x42104210, 0x42104210, 0x42104210, 0x52958421, 0xD6B5F7BD, 0xDEF7DEF7, 0xEF7BEF7B, 0xEF7BE739, 0xEF7BEF7B, + 0xE739E739, 0xDEF7EF7B, 0xEF7BE739, 0xD6B5CE73, 0xBDEF5295, 0x42114211, 0x42104210, 0x42104210, 0x42104210, + 0x42104210, 0x5295739D, 0xCE73E739, 0xC631B5AD, 0x739D6B5B, 0x6B5B6B5B, 0x6B5B6B5B, 0x739D94A5, 0xCE73CE73, + 0xCE73D6B5, 0xEF7BD6B5, 0xC631B5AD, 0x529539CF, 0x42114210, 0x42104210, 0x42104210, 0x42104210, 0x5295739D, + 0xCE73DEF7, 0xCE735295, 0x318D5AD7, 0x63196319, 0x63196319, 0x4A532109, 0x294BAD6B, 0xCE73CE73, 0xC631DEF7, + 0xD6B5BDEF, 0x9CE74211, 0x42114210, 0x42104210, 0x42104210, 0x42104210, 0x5295739D, 0xC631DEF7, 0xC6314211, + 0x94A5FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFEF7B, 0x6B5B18C7, 0xB5ADC631, 0xC631C631, 0xDEF7BDEF, 0xB5AD739D, + 0x39CF4211, 0x42104210, 0x42104210, 0x42104210, 0x5295739D, 0xC631CE73, 0xC6314211, 0x94A5FFFF, 0xF7BDAD6B, + 0xAD6BAD6B, 0xF7BDFFFF, 0xFFFF4211, 0x5295C631, 0xC631BDEF, 0xC631D6B5, 0xA52994A5, 0x42114211, 0x42104210, + 0x42104210, 0x42104210, 0x5295739D, 0xBDEFCE73, 0xBDEF4211, 0x8C63FFFF, 0xCE731085, 0x318D294B, 0x318DEF7B, + 0xFFFFA529, 0x318DB5AD, 0xBDEFBDEF, 0xB5ADD6B5, 0xB5AD8C63, 0x5AD739CF, 0x42104210, 0x42104210, 0x42104210, + 0x5295739D, 0xB5ADC631, 0xBDEF4211, 0x8C63FFFF, 0xCE73294B, 0xB5ADAD6B, 0x1085B5AD, 0xFFFFBDEF, 0x294BB5AD, + 0xB5ADB5AD, 0xB5ADBDEF, 0xC6318C63, 0x63194211, 0x42104210, 0x42104210, 0x42104210, 0x5295739D, 0xB5ADBDEF, + 0xB5AD39CF, 0x94A5FFFF, 0xCE730843, 0x39CF294B, 0x294BEF7B, 0xFFFF9CE7, 0x318DAD6B, 0xB5ADAD6B, 0xAD6BB5AD, + 0xC6318C63, 0x63194211, 0x42104210, 0x42104210, 0x42104210, 0x5295739D, 0xB5ADB5AD, 0xAD6B4211, 0x8C63FFFF, + 0xF7BD94A5, 0x94A59CE7, 0xE739FFFF, 0xFFFF4211, 0x4A53B5AD, 0xAD6BA529, 0xAD6BAD6B, 0xC6318421, 0x63194211, + 0x42104210, 0x42104210, 0x42104210, 0x5295739D, 0xAD6BB5AD, 0xAD6B39CF, 0x94A5FFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFE739, 0x631918C7, 0x9CE7A529, 0xAD6BA529, 0xA529AD6B, 0xBDEF8421, 0x63194211, 0x42104210, 0x42104210, + 0x42104210, 0x5295739D, 0xAD6BAD6B, 0xA52939CF, 0x94A5FFFF, 0xE7395AD7, 0x5AD7CE73, 0xFFFFC631, 0x00017BDF, + 0xA529A529, 0xA529A529, 0x9CE7A529, 0xBDEF8421, 0x5AD74211, 0x42104210, 0x42104210, 0x42104210, 0x5295739D, + 0xAD6BA529, 0xA529318D, 0x94A5FFFF, 0xCE731085, 0x18C74A53, 0xFFFFFFFF, 0x5AD7318D, 0x9CE79CE7, 0x9CE79CE7, + 0x9CE7A529, 0xAD6B7BDF, 0x5AD739CF, 0x42104210, 0x42104210, 0x42104210, 0x5295739D, 0xA529A529, 0x9CE7318D, + 0x94A5FFFF, 0xCE73294B, 0x7BDF1085, 0xC631FFFF, 0xDEF71085, 0x6B5B9CE7, 0x9CE794A5, 0x9CE7AD6B, 0x94A56B5B, + 0x529539CF, 0x42104210, 0x42104210, 0x42104210, 0x5295739D, 0xA5299CE7, 0x94A5318D, 0x94A5FFFF, 0xCE732109, + 0x94A539CF, 0x4A53FFFF, 0xFFFF7BDF, 0x18C794A5, 0x8C6394A5, 0x9CE7AD6B, 0x739D6319, 0x42114211, 0x42104210, + 0x42104210, 0x42104210, 0x5295739D, 0x9CE79CE7, 0x94A5294B, 0x9CE7FFFF, 0xDEF72109, 0x8C637BDF, 0x0843C631, + 0xFFFFFFFF, 0x294B5295, 0x94A594A5, 0xA5298C63, 0x63195295, 0x42114211, 0x42104210, 0x42104210, 0x42104210, + 0x5295739D, 0x9CE794A5, 0x8C63318D, 0x42117BDF, 0x5AD72109, 0x842194A5, 0x318D318D, 0x739D8421, 0x294B318D, + 0x94A59CE7, 0x94A56319, 0x5AD74211, 0x42114210, 0x42104210, 0x42104210, 0x42104210, 0x5295739D, 0x9CE78C63, + 0x84216B5B, 0x39CF318D, 0x318D6319, 0x84218C63, 0x7BDF39CF, 0x318D318D, 0x39CF7BDF, 0xA5298C63, 0x63195295, + 0x42114211, 0x42114210, 0x42104210, 0x42104210, 0x42104210, 0x4A53739D, 0x8C639CE7, 0x8C638C63, 0x9CE794A5, + 0x94A594A5, 0x8C638C63, 0x94A594A5, 0x94A59CE7, 0xA52994A5, 0x7BDF5AD7, 0x52954211, 0x42114211, 0x42104210, + 0x42104210, 0x42104210, 0x42104210, 0x4A535AD7, 0x6B5B7BDF, 0x84218421, 0x84218421, 0x84218421, 0x84218421, + 0x84218421, 0x84218421, 0x6B5B5AD7, 0x52954A53, 0x4A5339CF, 0x42114210, 0x42104210, 0x42104210, 0x42104210, + 0x42104210, 0x42114A53, 0x4A535295, 0x4A535295, 0x52955295, 0x52955295, 0x52955295, 0x52955295, 0x52954A53, + 0x52954A53, 0x42114211, 0x42114211, 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x42104211, + 0x42114211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, 0x42114211, + 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x42104210, 0x42104210, +}; +static Gfx D_88318528[] = { + gsSPEndDisplayList(), +}; +u32 D_88318530[] = { + 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x52895289, 0x5289FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, + 0xFFFE5289, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x5289FFDB, 0xFFDBFFDB, 0x5287FFFE, + 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFE5289, 0xFFDBFFDB, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x5289FFDB, + 0xFFDBFFDB, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, 0xFFFE5289, 0xFFDBFFDB, 0xFFDBFFFF, 0xFFDBFFDB, 0x5287FFFE, + 0xFFFEFFFE, 0x5289FFDB, 0xFFDBFFDB, 0xFFFFFFFF, 0xFFDBFFDB, 0x5287FFFE, 0xFFFE5289, 0xFFDBFFDB, 0xFFDBFFFF, + 0xFFFFFFFF, 0xFFDBFFDB, 0x5287FFFE, 0x5289FFD9, 0xFFDBFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDBFFDB, 0x5287FFFE, + 0x5289FFD9, 0xFFDBFFDB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDBFFDB, 0x5287FFFE, 0xFFFE5289, 0xFFDBFFDB, 0xFFDBFFFF, + 0xFFFFFFFF, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, 0x5289FFDB, 0xFFDBFFDB, 0xFFFFFFFF, 0xFFDBFFDB, 0x5287FFFE, + 0xFFFEFFFE, 0xFFFE5289, 0xFFDBFFDB, 0xFFDBFFFF, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x5289FFDB, + 0xFFDBFFDB, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFE5289, 0xFFDBFFDB, 0xFFDBFFDB, 0x5287FFFE, + 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x5289FFDB, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, + 0xFFFE5289, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x52895289, 0x5289FFFE, +}; +static Gfx D_883186E0[] = { + gsSPEndDisplayList(), +}; +u32 D_883186E8[] = { + 0x52895289, 0x5289FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x5289FFD9, 0xFFDB5287, 0xFFFEFFFE, + 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x5289FFD9, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, + 0x5289FFD9, 0xFFDBFFDB, 0xFFDB5287, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x5289FFD9, 0xFFDBFFDB, 0xFFDBFFDB, + 0x5287FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x5289FFD9, 0xFFDBFFFF, 0xFFDBFFDB, 0xFFDB5287, 0xFFFEFFFE, 0xFFFEFFFE, + 0x5289FFD9, 0xFFDBFFFF, 0xFFFFFFDB, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, 0x5289FFD9, 0xFFDBFFFF, 0xFFFFFFFF, + 0xFFDBFFDB, 0xFFDB5287, 0xFFFEFFFE, 0x5289FFD9, 0xFFDBFFFF, 0xFFFFFFFF, 0xFFFFFFDB, 0xFFDBFFDB, 0x5287FFFE, + 0x5289FFD9, 0xFFDBFFFF, 0xFFFFFFFF, 0xFFFFFFDB, 0xFFDBFFDB, 0x5287FFFE, 0x5289FFD9, 0xFFDBFFFF, 0xFFFFFFFF, + 0xFFDBFFDB, 0xFFDB5287, 0xFFFEFFFE, 0x5289FFD9, 0xFFDBFFFF, 0xFFFFFFDB, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, + 0x5289FFD9, 0xFFDBFFFF, 0xFFDBFFDB, 0xFFDB5287, 0xFFFEFFFE, 0xFFFEFFFE, 0x5289FFD9, 0xFFDBFFDB, 0xFFDBFFDB, + 0x5287FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x5289FFD9, 0xFFDBFFDB, 0xFFDB5287, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, + 0x5289FFD9, 0xFFDBFFDB, 0x5287FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x5289FFD9, 0xFFDB5287, 0xFFFEFFFE, + 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0x52895289, 0x5289FFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, 0xFFFEFFFE, +}; +u32 D_88318898[] = { + 0xAA99A989, 0x9998AAAA, 0xBA9B9899, 0x99A99AA9, 0x88998999, 0x9A98A988, 0x9989989A, 0x98989989, 0x999A98A9, + 0x88000000, 0x00000000, 0x0007AB99, 0x98575000, 0x00000000, 0x00000000, 0x01458999, 0x98899A9A, 0xABA89999, + 0x9888A9AA, 0x999898A9, 0x99AA8888, 0x99788989, 0x99888888, 0x9999AA89, 0x88997889, 0x99233333, 0x33222220, + 0x0004A977, 0x85674000, 0x00000000, 0x00000000, 0x01358A98, 0x999AA999, 0xB99A98AA, 0x9989A89A, 0x99999A99, + 0x8A989989, 0x98988988, 0x99989999, 0x888A8899, 0x89999899, 0x8BCCCDDC, 0xCCCCCBB6, 0x00008975, 0x56660000, + 0x13222222, 0x22333331, 0x00357999, 0x8AAA98AA, 0xA8999899, 0x9BAAA9A9, 0x889BAA89, 0x99888888, 0x98A99A99, + 0x9878AAA8, 0x8A998888, 0x8999A9AA, 0x8BBCCCCC, 0xCCBBBBB9, 0x00002887, 0x76510000, 0x23222222, 0x23333331, + 0x00257998, 0xAA989A9A, 0xA899AAB9, 0xA999989A, 0x89BA98A9, 0x9988899A, 0x99989888, 0x988AA879, 0x98997889, + 0x9A998988, 0x89BBBBBB, 0xBBBBAAAA, 0x30000045, 0x52000000, 0x22222222, 0x33333330, 0x00246999, 0xBBA79AAB, + 0xAAB99AA9, 0xAA98879A, 0xA9BB979A, 0xAA9A9899, 0x99988778, 0x9A8AA978, 0x99AA9A89, 0x9A8A9887, 0x79AABBBB, + 0xBAAAAA99, 0x81000000, 0x00000002, 0x22222223, 0x33333320, 0x001369A9, 0xAB99999A, 0x9AB99AAB, 0xBA9A99A9, + 0x9AAB9999, 0x989A98A9, 0xAAA99989, 0x9999A889, 0x98989A88, 0xA9AAA8A9, 0x999AAAAA, 0xAAA99998, 0x87100000, + 0x00000022, 0x22222223, 0x33333320, 0x0024799A, 0xA989A9A9, 0x89ABBBBB, 0xABB8ABAA, 0xABA989A9, 0x9889A9AA, + 0xB9AA89AA, 0xA9B98889, 0x99989ABA, 0xAAB9AA8A, 0xAA899999, 0x99999888, 0x87610000, 0x00000222, 0x22222233, + 0x33333300, 0x00258AAB, 0x88AAA9A9, 0xAA9BBA9A, 0xAB9AAAA9, 0xA9899754, 0x66679999, 0x99A989AA, 0x999779A9, + 0x9A8999AA, 0x9999B99A, 0xAA888999, 0x98888877, 0x77664210, 0x00122222, 0x22222333, 0x33333300, 0x002589A9, + 0x8A9A9A99, 0xAA99ABA8, 0xA99ABA89, 0x85422222, 0x22222478, 0x999799A9, 0x99979999, 0x9889999A, 0xA979989A, + 0xAA878888, 0x88877777, 0x66655544, 0x33222222, 0x22223333, 0x33334100, 0x002589AA, 0x9BB98999, 0x9ABBBA99, + 0xAA9A9984, 0x22222222, 0x22222111, 0x36999AA9, 0x8899AA87, 0x89889AAA, 0xA88AA99B, 0xAA867777, 0x77777666, + 0x65554443, 0x32222222, 0x22233333, 0x33343000, 0x01368989, 0xAA9BAA99, 0x9A89AA9A, 0xBA997322, 0x22222222, + 0x22222211, 0x11279999, 0x9A99A999, 0x99999899, 0x989A9999, 0x99985666, 0x66666655, 0x55444333, 0x22222222, + 0x22333333, 0x33441000, 0x013689BA, 0x9BABAAAA, 0x99A9899A, 0xBA842222, 0x22222222, 0x22222111, 0x11113789, + 0xA99999AA, 0x99A88988, 0x889AAA97, 0x899A6555, 0x66555555, 0x44433322, 0x22222222, 0x22333333, 0x34430000, + 0x023689AB, 0xAA99AA99, 0x9A98AA99, 0x97322222, 0x22222222, 0x22222211, 0x11111159, 0xAB9A9999, 0x98889989, + 0x999A98A9, 0x89998445, 0x55554444, 0x33332222, 0x22222222, 0x23333333, 0x34300000, 0x02579A99, 0x99999A9A, + 0xAAB9A889, 0x62222222, 0x22222222, 0x22222221, 0x11111116, 0x9AA99988, 0xA99AAA89, 0x88998889, 0x89A99733, + 0x44444333, 0x32222222, 0x22222222, 0x33333333, 0x44100000, 0x13679AA9, 0x9AAAA999, 0xAA9A8896, 0x22222222, + 0x22222222, 0x22222211, 0x11111110, 0x489A9899, 0x898A8899, 0x89999899, 0x89998962, 0x33333222, 0x22222222, + 0x22222223, 0x33333334, 0x42000000, 0x24779A99, 0x9BBA98AA, 0xA8998972, 0x22222222, 0x33322222, 0x22222111, + 0x11111100, 0x15899899, 0x9A997989, 0x8989A9A9, 0x8A9889A6, 0x12222211, 0x11122222, 0x22222233, 0x33333344, + 0x30000001, 0x36899A98, 0xBB98999A, 0xA9999822, 0x22222333, 0x44433222, 0x22222211, 0x11111110, 0x005998A9, + 0x98A98899, 0xAA998988, 0x78989A98, 0x41111111, 0x11222222, 0x22222333, 0x33333442, 0x00000012, 0x46788999, + 0xBBAAAAAB, 0xA9BA8322, 0x22223346, 0x67654322, 0x22222211, 0x11111100, 0x001789AA, 0xA9AAAA89, 0x999A9888, + 0x79A99AA9, 0x77211111, 0x12222222, 0x22223333, 0x33334310, 0x00000024, 0x57889AB9, 0xAB9A999A, 0x8AA94222, + 0x2223357A, 0xCCA85422, 0x22222111, 0x11111100, 0x000388AA, 0x9A989A99, 0xA9AAA9A9, 0x99999AA8, 0x99831111, + 0x22222222, 0x22233333, 0x33343000, 0x00000246, 0x79A9A99A, 0xA9999AA9, 0x89A72222, 0x223358CF, 0xFFEA6432, + 0x22111111, 0x11111100, 0x00004688, 0x88989ABA, 0xAAB9AA8A, 0xAAAAA988, 0x9A995212, 0x22222222, 0x22233333, + 0x33310000, 0x00002458, 0x99ABBAAB, 0x88A998A9, 0x88932222, 0x22347CFF, 0xFFFA7432, 0x22211111, 0x11111000, + 0x00001678, 0x889998AA, 0xA999A89A, 0xAA99878A, 0xA9998853, 0x22222222, 0x22333333, 0x21000000, 0x00123569, + 0x99AABAA9, 0x8B99AA9A, 0x8A722222, 0x22359FFF, 0xFFEA6422, 0x22111111, 0x11111000, 0x00000358, 0x9AA9989A, + 0xA979989A, 0xAA9A88A9, 0x99988986, 0x43222222, 0x23333210, 0x00000000, 0x01245579, 0x8ABBAAAA, 0x9A999998, + 0x89522222, 0x2346BFFF, 0xFFC84100, 0x00011111, 0x11111000, 0x00000046, 0x89989ABA, 0xA89AA99B, 0xAA899AA9, + 0x88998999, 0x96522111, 0x11100000, 0x00000001, 0x235677AA, 0xA9BBBA9A, 0xAA8B9987, 0x78222222, 0x2347AEFF, + 0xFD832100, 0x00000111, 0x11110000, 0x00000025, 0x68788789, 0x989AA999, 0x99AB999A, 0xA9999987, 0x88654321, + 0x10000000, 0x00000122, 0x346789BA, 0xA999AABA, 0xAAAAAAA9, 0x86222222, 0x23469CDD, 0xB7421000, 0x00000011, + 0x11100000, 0x00000014, 0x68A89998, 0x999AAA97, 0x899A9AA9, 0xA9A9A899, 0x88877654, 0x32211111, 0x11222344, + 0x67789ABB, 0xAA88A9AB, 0xAAB9AA89, 0xA5222222, 0x22356898, 0x63210000, 0x00000000, 0x11100000, 0x00000002, + 0x578A9989, 0x99999899, 0x99998988, 0x8A898998, 0x89988876, 0x55443333, 0x33344567, 0x879A99AA, 0x9AA9AAA9, + 0x999AA99A, 0xA3222222, 0x22334555, 0x21100169, 0x86200000, 0x11000000, 0x00000001, 0x358AAA99, 0x89998899, + 0x89A99989, 0x99A89AA9, 0x9989A887, 0x87666565, 0x56677799, 0xA9A99AA9, 0x89A99AAA, 0xA98BA89A, 0x92222222, + 0x22233332, 0x10003CBB, 0xBA920000, 0x00000000, 0x00000000, 0x24799898, 0x8999A999, 0x899989A9, 0xA8899A88, + 0x988999A9, 0x98898778, 0x889788AA, 0x89999A9A, 0xA9A99A99, 0xA99AA9AB, 0x82222222, 0x22222221, 0x0001BBBD, + 0xCA980000, 0x00000000, 0x00000000, 0x147A9989, 0x8989A999, 0x8A9889AA, 0x988A9979, 0x99898AA9, 0xAA9A988A, + 0xBA989AA9, 0x89A9999B, 0xAAAAAB98, 0x99989999, 0x97000000, 0x00000000, 0x0006BCEA, 0x98884000, 0x00000000, + 0x00000000, 0x13689999, 0xAB898887, 0x78999A98, 0x7999A989, 0x99BA9989, 0x878899AB, 0x978A9AB9, 0x99AACAA9, + 0x998889AA, 0x8998AAA8, 0xA8000000, 0x00000000, 0x0008BDB9, 0x98586000, 0x00000000, 0x00000000, 0x02479A89, + 0x999AA888, 0x89A98AB9, 0x799AA9AA, 0x8A999B98, 0x988AA99B, 0xB889ABAA, 0xB99B9AAB, 0x99989AB9, 0x99999889, + 0x88000000, 0x00000000, 0x0007AB99, 0x98575000, 0x00000000, 0x00000000, 0x01458AA9, 0xAAA99999, 0xA999AA98, + 0x9989889A, 0x9AAAAA99, 0x99A99AAA, 0x89998989, 0xAA9BAAAA, 0x999A9A9A, 0x88998899, 0x99233333, 0x33222220, + 0x0004A977, 0x85773000, 0x00000000, 0x00000000, 0x013589B9, 0x99A9A98A, 0xA9999888, 0x9999888A, 0xB99A9AA9, + 0x9AA99A98, 0x8999A988, 0x9AA99A9A, 0xA89AA9A9, 0x89999899, 0x9BCCCDDC, 0xCCCCCBB6, 0x00008975, 0x56750000, + 0x13222222, 0x22333331, 0x0035799A, 0xA989A89A, 0x9A9A8799, 0x99999AA9, 0x9AA88998, 0x9AAA9A77, 0x9A99999A, + 0x99AA989A, 0x98A9AA99, 0x8999A999, 0x8BBCCCCC, 0xCCBBBBB9, 0x00002887, 0x76510000, 0x23222222, 0x23333331, + 0x0025789A, 0x988998AA, 0xAA9988A9, 0x78887999, 0x9A988A99, 0xAB9A9979, 0xA879888A, 0x99AA989A, 0x89AAA998, + 0x9A998988, 0x8ABBBBBB, 0xBBBBAAAA, 0x30000045, 0x52000000, 0x22222222, 0x33333330, 0x002479AA, 0x989A999A, + 0x9A999A99, 0x9999899A, 0xB998AA99, 0x9AAA9A9A, 0x9A999989, 0xAAA998A9, 0x99A9A999, 0x9AAA9887, 0x89AABBBB, + 0xBAAAAA99, 0x81000000, 0x00000002, 0x22222223, 0x33333320, 0x00246888, 0x879AAA88, 0x899B99AA, 0x99999888, + 0x8888AAA9, 0x8899AA99, 0xAA999998, 0x889888AA, 0xA98899B9, 0xAA9AA9A9, 0x999AAAAA, 0xAAA99998, 0x87100000, + 0x00000022, 0x22222223, 0x33333320, 0x00247989, 0x999A99A8, 0x89899AA9, 0xAA999899, 0x89A9AA99, 0xA789899A, + 0x99AA9999, 0xA999A9AA, 0x9A979999, 0xAA999989, 0xAA899999, 0x99999888, 0x87610000, 0x00000222, 0x22222233, + 0x33333300, 0x00258989, 0x88998889, 0x99A98888, 0x79899AA8, 0x89889988, 0x999AA888, 0x888A899A, 0xA8998998, + 0x88999AA9, 0x9999A99A, 0xA9888999, 0x98888877, 0x77664210, 0x00122222, 0x22222333, 0x33333300, 0x00257999, + 0x89998899, 0x88A99989, 0x99989A99, 0x99899754, 0x65679999, 0x999998A9, 0x99A89AA9, 0x88A8899A, 0x8989989A, + 0xAA878888, 0x88877777, 0x66655544, 0x33222222, 0x22223333, 0x33334100, 0x01356888, 0x8899A999, 0x899878A9, + 0x988A9979, 0x85422222, 0x22222347, 0xA99799A9, 0x7988899A, 0xA9A99997, 0x9999999B, 0xAA867777, 0x77777666, + 0x65554443, 0x32222222, 0x22233333, 0x33343000, 0x0135688A, 0x89899999, 0x899789A9, 0x99999954, 0x22222222, + 0x22222111, 0x26999998, 0x88A9999A, 0x99999A88, 0xAA999999, 0x99985666, 0x66666655, 0x55444333, 0x22222222, + 0x22333333, 0x33441000, 0x01467999, 0xAA898887, 0x77999A98, 0x69997322, 0x22222222, 0x22222111, 0x11179AA9, + 0x9999A999, 0x897778A9, 0x9B9A9998, 0x899A6555, 0x66555555, 0x44433322, 0x22222222, 0x22333333, 0x34430000, + 0x02569A78, 0x999AA899, 0x89998AA8, 0x89842222, 0x22222222, 0x22222111, 0x11112899, 0xA88A99AA, 0x999899A8, + 0xA98A99A9, 0x89998445, 0x55554444, 0x33332222, 0x22222222, 0x23333333, 0x34300000, 0x12569AAA, 0xBAB9A989, + 0xAAA9A988, 0x97322222, 0x22222222, 0x22222111, 0x11111159, 0xABABABAA, 0xA99AAA9B, 0x98998899, 0x89999733, + 0x44444333, 0x32222222, 0x22222222, 0x33333333, 0x44100000, 0x145789BA, 0x999AA99A, 0xA9999889, 0x62222222, + 0x22222222, 0x22222111, 0x11111104, 0x8AA99AAA, 0xA9AAA9A9, 0x79999999, 0x89998972, 0x33333222, 0x22222222, + 0x22222223, 0x33333334, 0x42000001, 0x2469A99A, 0xA989989A, 0x9A9A8796, 0x22222222, 0x22222222, 0x22222111, + 0x11111100, 0x38AA989A, 0x98AAAAAA, 0x8AA8A989, 0x8A988AA6, 0x12222211, 0x11122222, 0x22222233, 0x33333344, + 0x30000001, 0x3568999A, 0xA98998AB, 0xAA898972, 0x22222222, 0x33332222, 0x22222111, 0x11111100, 0x039A989A, + 0x99BBA999, 0xAA9A9999, 0x78989A98, 0x54111111, 0x11222222, 0x22222333, 0x33333442, 0x00000013, 0x568899AA, + 0x989A9999, 0x9A9A9822, 0x22222333, 0x44433222, 0x22221111, 0x11111100, 0x005899A9, 0x99A9A9AA, 0x9AAA9999, + 0x79999AA9, 0x9A211111, 0x12222222, 0x22223333, 0x33334310, 0x00000124, 0x67988888, 0x889AAA88, 0x899B8322, + 0x22223346, 0x77654322, 0x22221111, 0x11111100, 0x000578AB, 0xA98899BA, 0xAA99A999, 0x99999AA8, 0xAA831111, + 0x22222222, 0x22233333, 0x33342000, 0x00001246, 0x77989989, 0x999A98A8, 0x89994222, 0x2223358B, 0xCCA85322, + 0x22211111, 0x11111100, 0x000078AA, 0x9A989999, 0x98888A9A, 0xAAAAA988, 0x98886212, 0x22222222, 0x22233333, + 0x33310000, 0x00001346, 0x8899A989, 0x88998889, 0x99A72222, 0x223359DF, 0xFFEA6432, 0x22111111, 0x11111100, + 0x00003788, 0x88999AA8, 0x9999A989, 0xAA99879A, 0xA9899853, 0x22222222, 0x22333333, 0x21000000, 0x00123578, + 0x889A9999, 0x89998899, 0x88932222, 0x22348DFF, 0xFFFA6422, 0x22111111, 0x11111000, 0x00000578, 0x88A88A99, + 0x8AAA97A9, 0xA99A88A9, 0x9A988886, 0x53222222, 0x23333210, 0x00000000, 0x01236788, 0x7A998888, 0x8899A99A, + 0x89722222, 0x2236AFFF, 0xFFEA6322, 0x21111111, 0x11111000, 0x00000259, 0x9AA99A97, 0xAA98999A, 0x98899AA9, + 0x88998999, 0x76522111, 0x10000000, 0x00000001, 0x22467879, 0x98997889, 0x9A899998, 0x89522222, 0x2347BFFF, + 0xFFC83100, 0x00011111, 0x11111000, 0x00000046, 0x89989A88, 0xAB978AAB, 0xA9AA99A9, 0xA9998888, 0x98764321, + 0x10000000, 0x00000112, 0x45689868, 0x99AA9A99, 0x9A899887, 0x77222222, 0x2347BFFF, 0xFD832000, 0x00000111, + 0x11110000, 0x00000025, 0x687789A9, 0xAB98999A, 0x9AB89A9A, 0xAA999899, 0x88987654, 0x32211111, 0x11223345, + 0x6779A988, 0x9898AA88, 0xA9AAA8A9, 0x86222222, 0x23469CDD, 0xB7421000, 0x00000011, 0x11100000, 0x00000014, + 0x68A899A9, 0xA989A999, 0x89ABABBB, 0xAA9999A9, 0x99988876, 0x54443334, 0x43455578, 0x98A98889, 0x99989AAA, + 0xBAB9AA89, 0xA5222222, 0x22356888, 0x63210000, 0x00000000, 0x11100000, 0x00000002, 0x578BAA9B, 0x889A99A9, + 0x999BA99A, 0xABA9AAA9, 0x9989A987, 0x77666655, 0x66777889, 0x99988999, 0x9A8999AA, 0x999AA99A, 0xA2222222, + 0x22334555, 0x21100169, 0x86200000, 0x11000000, 0x00000001, 0x358AA9A9, 0x799A9A99, 0xAA99AA98, 0x9989AAB9, + 0x998A99A9, 0x98987888, 0x7788899A, 0xA9979999, 0x9889A999, 0xA989989A, 0x92222222, 0x22233332, 0x10003CCB, + 0xBA920000, 0x00000000, 0x00000000, 0x2479AAAA, 0x8AA88998, 0x9AAABA98, 0xAA9ABBA9, 0x989AA889, 0x88999A99, + 0x89A99BAA, 0x9888AA87, 0x888899AA, 0xA989A9AB, 0x82222222, 0x22222221, 0x0001CCCD, 0xCA981000, 0x00000000, + 0x00000000, 0x147AA989, 0xAA9AAA99, 0x9A9AA99A, 0xAA9999AA, 0xBAAA9AA9, 0x98999998, 0x9A999999, 0x9AA999A9, + 0x99999899, 0x989A9999, 0x87000000, 0x00000000, 0x0006BCEA, 0x98784000, 0x00000000, 0x00000000, 0x135799AA, + 0x9AAA9A9A, 0x9999889A, 0xBBA989A9, 0xBA9BAA9A, 0x98888888, 0x9AAA9889, 0x9AA8AAA9, 0x99988888, 0x889AAA88, + 0x88000000, 0x00000000, 0x0008BDB9, 0x99586000, 0x00000000, 0x00000000, 0x024699BA, +}; +static Gfx D_88319898[] = { + gsSPEndDisplayList(), +}; +u32 D_883198A0[] = { + 0x435E435E, 0x435E435F, 0x435F435F, 0x435F435F, 0x431F3B5F, 0x43613B1F, 0x435F435F, 0x435F435F, 0x435F435F, + 0x435F435F, 0x435F435F, 0x435F435F, 0x435F435F, 0x435F435F, 0x435F435F, 0x435F3B1F, 0x435F3B1F, 0x435F435F, + 0x435F435E, 0x435E435E, 0x435E435E, 0x435F435F, 0x435F3B1F, 0x43614361, 0x3B5F431D, 0x3B1F435F, 0x3B5F435F, + 0x435F435F, 0x3B1F4361, 0x43614361, 0x43614361, 0x3B5F4361, 0x435F431F, 0x435F435F, 0x435F3B1F, 0x43613B5F, + 0x435F3B21, 0x435F435F, 0x435F435F, 0x435E435E, 0x435E435F, 0x3B1F43A1, 0x43213B5F, 0x3299218F, 0x00870003, + 0x11093ADB, 0x43613B1F, 0x435F4361, 0x32DB2215, 0x2191218F, 0x2191218F, 0x22132A9B, 0x435F4361, 0x3B1F435F, + 0x3B1F3B1F, 0x218F0085, 0x08872191, 0x3B5F435F, 0x3B1F435F, 0x435F435E, 0x435F3B61, 0x3ADB21D3, 0x110B0043, + 0x00011043, 0x5B198C21, 0x084321D1, 0x43614361, 0x2A99110B, 0x39D1841F, 0x94E5A527, 0x9CE78CE1, 0x6BDB320F, + 0x190B2215, 0x4361435F, 0x43612A57, 0x00016B5B, 0x6B590001, 0x194F4361, 0x435F3B5F, 0x435F435F, 0x3B1F194D, + 0x00010841, 0x290B5B17, 0xA4E7E73B, 0xFFFFD6B7, 0x084121D1, 0x43611991, 0x39CF94A5, 0xD6F3BEEF, 0x96657DA1, + 0x7DDF859F, 0x862185E3, 0x63D71987, 0x214F3B1D, 0x43612255, 0x0843F7BD, 0xFFFF7BDF, 0x00012A15, 0x43613B5F, + 0x435F435F, 0x2A150041, 0x8C21CEB5, 0xFFFFFFFF, 0xFFFFFFFF, 0xDEF718C7, 0x10C932DB, 0x194D6B5B, 0xD6F59E67, + 0x44912409, 0x1B871BC7, 0x1BC71BC7, 0x23C92C0B, 0x54D55D17, 0x2A8910C9, 0x3ADD2A95, 0x0003A529, 0xFFFFFFFF, + 0x5AD70001, 0x32994361, 0x3B5F435F, 0x21D11085, 0xD675FFFF, 0xFFFFFFFF, 0xFFFFF7BD, 0x318D0043, 0x3ADD114D, + 0x8421D733, 0x55172387, 0x0B430B03, 0x0B051343, 0x13051345, 0x1BC71BC7, 0x1B87340D, 0x44D11AC5, 0x10C732DD, + 0x190B0885, 0xCE73FFFF, 0xEF7B18C7, 0x10C93B5F, 0x431F435F, 0x3ADB0885, 0x08438C65, 0xFFFDFFFF, 0xFFFF7BE1, + 0x00013AD9, 0x19D362D7, 0xCF734C93, 0x1BC71B09, 0x63D96BD9, 0x6BDB6BDB, 0x6BDB5B97, 0x2ACB1B47, 0x1BC723C9, + 0x2BCB2C4B, 0x1203110D, 0x431F0043, 0x39CFFFFF, 0xFFFF94A5, 0x00013299, 0x43613B5F, 0x43613B1D, 0x10C90001, + 0xBE31FFFF, 0xDEF70843, 0x194D3ADD, 0x298DB66D, 0x65191BC7, 0x1BC72B4B, 0xFFBFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xF7BD8D23, 0x1B4723C9, 0x1BC72C0B, 0x1B8708C3, 0x32572A57, 0x0001A529, 0xFFFFEF7B, 0x0843194D, 0x43613B5F, + 0x435F4361, 0x199118C7, 0xF7BDFFFF, 0x84210001, 0x3ADD1991, 0x741B8DE3, 0x23C91BC7, 0x1BC92B4B, 0xFFFDF7FF, + 0x9E278DE1, 0x8DE39627, 0xF7BBFFFF, 0x6D1B1B87, 0x23C92409, 0x23C91243, 0x10C93B61, 0x0887398D, 0xFFFFFFFF, + 0x5AD70885, 0x3B1F435F, 0x435F435F, 0x00875295, 0xFFFFFFFF, 0x21091109, 0x3B1F214D, 0x9E274C91, 0x1B871BC9, + 0x23C72B4B, 0xF7FDF7BD, 0x3C8F1B87, 0x1B871385, 0x5C57FFFF, 0xC6F11BC7, 0x23C923C9, 0x1BC71B07, 0x08C33A9B, + 0x22550803, 0xCE73FFFF, 0xA5290001, 0x3ADD3B5F, 0x435F3B1F, 0x0003739D, 0xFFFFD6B5, 0x00012A15, 0x2A99420F, + 0x85E32C09, 0x1BC923C9, 0x1BC72B4B, 0xFFBDEFFD, 0x445113C5, 0x1BC70B03, 0x3ACFFFFF, 0xCF3323C9, 0x1BC723C9, + 0x23C91B47, 0x090321D1, 0x3ADD0001, 0x8C63FFFF, 0xC6310001, 0x32993B61, 0x435F3B1F, 0x00018C63, 0xFFFFAD6B, + 0x00013B1D, 0x21D54AD1, 0x655923C9, 0x1BC923C7, 0x1BC92B4B, 0xFFBDEFFD, 0x53D3330D, 0x3B4F4311, 0xC631FFFF, + 0x96251BC7, 0x238923C9, 0x1C072349, 0x0901194D, 0x3B5F0045, 0x62D7FFFF, 0xD6B50843, 0x32993B5F, 0x435F3B1F, + 0x000194A5, 0xFFFFA529, 0x00013B5F, 0x21D34311, 0x55152389, 0x23C723C9, 0x1BC72B4B, 0xF7BDFFFF, 0xFFFFFFFF, + 0xFFBFFFFF, 0xFFFFAE6B, 0x2B8B1B87, 0x23C923C9, 0x23C91B87, 0x0901110D, 0x43611109, 0x4A53FFFF, 0xE7390843, + 0x2A574361, 0x435F3B1F, 0x000194A5, 0xFFFF9CE7, 0x00434361, 0x21D3430F, 0x54D51BC7, 0x23C923C9, 0x1BC72B4B, + 0xF7BDFFFF, 0xD775C6F1, 0xC6F1CF33, 0xEFBBF7FD, 0x7CDF1B87, 0x1BC723C9, 0x23C91B87, 0x0901110D, 0x4361110B, + 0x4A53FFFF, 0xE6F70885, 0x2A574361, 0x435F3B1F, 0x000194A5, 0xFFFFAD6B, 0x00013B1D, 0x21D5328B, 0x4CD31BC9, + 0x23C723C9, 0x1BC72B4B, 0xFFBFEFFB, 0x4C932C0B, 0x2C0B2C0B, 0x3C4FCEF3, 0xFFFF4451, 0x1B8723C9, 0x24091B47, + 0x00C1190D, 0x435F0887, 0x52D5FFFF, 0xDEF70885, 0x32574361, 0x435F3B1F, 0x00017BDF, 0xFFFFC631, 0x00013297, + 0x2A5919C7, 0x344D23C9, 0x23C923C9, 0x1BC72B4B, 0xFFBFEFFB, 0x44911B87, 0x1BC71BC7, 0x0B4384E1, 0xFFFF8DE3, + 0x1BC71BC7, 0x23C91AC7, 0x0081218F, 0x3B1F0003, 0x739DFFFF, 0xCE730001, 0x32994361, 0x435F3B1F, 0x08855AD7, + 0xFFFFF7BD, 0x1085114D, 0x42DD0905, 0x23C923C9, 0x23C923C9, 0x1BC72B4B, 0xFFBFEFFB, 0x3C4F1385, 0x1B871345, + 0x0201B5AD, 0xFFFF9625, 0x1B872409, 0x1BC71205, 0x08433297, 0x2A990001, 0xB56DFFFF, 0xB5AD0001, 0x329B435F, + 0x435F3B61, 0x110B318D, 0xFFFFFFFF, 0x5AD70043, 0x4361194D, 0x124323C9, 0x23C923C9, 0x1BC72B4B, 0xFFBFEFFB, + 0x5C174B53, 0x4B935355, 0x94E5FFFF, 0xFFFF6D5B, 0x1B872409, 0x1B470903, 0x0885435F, 0x194F1085, 0xF7BDFFFF, + 0x84210003, 0x3B1D435F, 0x435F3B61, 0x29D30843, 0xCE73FFFF, 0xBDF10001, 0x2A133299, 0x08C31B47, 0x23C923C9, + 0x1BC72B4B, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xA6692BCB, 0x1BC723C9, 0x12050041, 0x21D13ADD, + 0x00016B5B, 0xFFFFFFFF, 0x19090845, 0x3B5F435F, 0x435F3B1F, 0x3ADD0001, 0x635BFFFF, 0xFFFF5295, 0x00033B1D, + 0x194D0943, 0x1B4723C9, 0x23C7240B, 0x9E27B66D, 0xB6ADB6AD, 0xB6ADB6AD, 0x9E276D1B, 0x24091BC7, 0x23C91A87, + 0x00C11087, 0x3B1F194B, 0x1085E6F9, 0xFFFFFFFF, 0x63190001, 0x10C932DB, 0x435F435F, 0x3B61194D, 0x1043E739, + 0xFFFFDEF7, 0x08431109, 0x3B1F0887, 0x11431B47, 0x1BC723C9, 0x1BC71BC7, 0x1BC71BC7, 0x1BC72389, 0x1BC71B87, + 0x23C91C07, 0x1A8708C3, 0x004132DB, 0x2A150001, 0x9463FFFF, 0xFFFFFFFF, 0xFFFFBDEF, 0x18C710C9, 0x435F435F, + 0x3B1F3ADD, 0x00015295, 0xFFFFFFFF, 0xA5290001, 0x2A13329B, 0x08850903, 0x1A851B89, 0x23C71C09, 0x23C923C9, + 0x23C923C9, 0x1C0723C9, 0x1B871245, 0x08C30041, 0x2A153299, 0x00015297, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x42110887, 0x435F435F, 0x435F3B61, 0x29D30001, 0x8421FFFF, 0xFFFF39CF, 0x08C94361, 0x3ADD1109, 0x00410943, + 0x1A451307, 0x23471B47, 0x1B872349, 0x1AC71245, 0x09430041, 0x08853257, 0x3B1D0003, 0x4A93FFFF, 0xFFFFFFFF, + 0xDEF78C63, 0x52952107, 0x00032A13, 0x435F435F, 0x435F431F, 0x3B61218F, 0x00016319, 0x63190843, 0x198F435F, + 0x43613B1F, 0x2A130885, 0x00410881, 0x00C30941, 0x090308C1, 0x00C10041, 0x0843198F, 0x3ADD43A1, 0x32590001, + 0x94A5B5ED, 0x6B19294D, 0x08410001, 0x088719D1, 0x3259435F, 0x435E435F, 0x435F435F, 0x3B1F435F, 0x194F0043, + 0x0043110B, 0x3ADD435F, 0x3B1F435F, 0x43613B1D, 0x29D3114D, 0x10C910C7, 0x10C710C9, 0x110B21D1, 0x3A9B439F, + 0x3B21435F, 0x3B1D0885, 0x08430001, 0x0001110B, 0x21D1329B, 0x435F4361, 0x43613B5E, 0x435E435E, 0x435F435F, + 0x435F3B1F, 0x435F3B1F, 0x3B1F435F, 0x435F3B1F, 0x435F435F, 0x435F3B1F, 0x43614361, 0x3B5D431F, 0x3B1F3B1F, + 0x435F4361, 0x435F3B5F, 0x435F435F, 0x3B1F3ADD, 0x2A132A99, 0x3B1D4361, 0x4361435F, 0x3B5F431F, 0x435E435E, + 0x435E435E, 0x435E435F, 0x435F435F, 0x431F3B5F, 0x43613B5F, 0x431F435F, 0x435F435F, 0x435F435F, 0x435F435F, + 0x3B1F435F, 0x435F435F, 0x3B5F431F, 0x435F435F, 0x435F435F, 0x435F3B1F, 0x43614361, 0x3B5F435F, 0x431F435F, + 0x435F435E, 0x435E435E, +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315CFC.s") +s32 func_88315CD0(unk_func_88316128* arg0, unk_func_88316128* arg1) { + return (arg0 == arg1) ? 0 : (arg0 < arg1) ? -1 : 1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315D48.s") +s32 func_88315CFC(unk_func_8830867C_02C_0CC* arg0, unk_func_8830867C_02C_0CC* arg1) { + s32 var_v1 = *(s32*)&arg0->unk_00[0]->unk_08.unk_00 - *(s32*)&arg1->unk_00[0]->unk_08.unk_00; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315D8C.s") + if (var_v1 == 0) { + var_v1 = (s32)arg0->unk_00[1] - (s32)arg1->unk_00[1]; + if (var_v1 == 0) { + var_v1 = arg0->unk_04 - arg1->unk_04; + } + } + return var_v1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315DD0.s") +s32 func_88315D48(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg0->unk_2C - arg1->unk_2C; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315E14.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315E58.s") +s32 func_88315D8C(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg1->unk_2C - arg0->unk_2C; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315E9C.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315EE0.s") +s32 func_88315DD0(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg0->unk_2E - arg1->unk_2E; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315F24.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315F68.s") +s32 func_88315E14(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg1->unk_2E - arg0->unk_2E; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315FAC.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88315FF0.s") +s32 func_88315E58(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg0->unk_30 - arg1->unk_30; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316034.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316078.s") +s32 func_88315E9C(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg1->unk_30 - arg0->unk_30; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_883160BC.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_883160DC.s") +s32 func_88315EE0(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg0->unk_32 - arg1->unk_32; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316128.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316174.s") +s32 func_88315F24(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg1->unk_32 - arg0->unk_32; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_883161D0.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316214.s") +s32 func_88315F68(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg0->unk_34 - arg1->unk_34; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316240.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316304.s") +s32 func_88315FAC(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg1->unk_34 - arg0->unk_34; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_883163A4.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_883163B8.s") +s32 func_88315FF0(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg0->unk_36 - arg1->unk_36; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316480.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_883164C0.s") +s32 func_88316034(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg1->unk_36 - arg0->unk_36; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_883166A0.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_883167CC.s") +s32 func_88316078(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0 = arg0->unk_16 - arg1->unk_16; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316874.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_883168B4.s") +s32 func_883160BC(unk_func_8830867C_02C_0CC* arg0, unk_func_8830867C_02C_0CC* arg1) { + return func_88315CFC(arg0, arg1); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316A58.s") +s32 func_883160DC(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316BEC.s") + var_v0 = func_8002D348(&arg0->unk_43, &arg1->unk_43); + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316D5C.s") +s32 func_88316128(unk_func_88316128* arg0, unk_func_88316128* arg1) { + s32 var_v0; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316DB8.s") + var_v0 = func_8002D348(&arg0->unk_38, &arg1->unk_38); + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316E10.s") +s32 func_88316174(unk_func_8830867C_02C_0CC* arg0, unk_func_8830867C_02C_0CC* arg1) { + static u8 D_8831A160[] = { + 0x09, 0x38, 0x8B, 0x0E, 0x0F, 0x0D, 0x81, 0x90, 0x08, 0x0B, 0x50, 0x0A, 0x91, 0x3F, 0x06, 0x66, 0x65, + 0x64, 0x73, 0x72, 0x80, 0x25, 0x1F, 0x03, 0x67, 0x70, 0x76, 0x77, 0x58, 0x5A, 0x57, 0x59, 0x5B, 0x56, + 0x11, 0x10, 0x8F, 0x5C, 0x39, 0x94, 0x96, 0x2B, 0x5D, 0x2A, 0x8D, 0x61, 0x62, 0x8A, 0x89, 0x15, 0x1D, + 0x4F, 0x63, 0x6F, 0x2D, 0x4D, 0x6E, 0x31, 0x04, 0x69, 0x6A, 0x6B, 0x00, 0x3E, 0x02, 0x48, 0x47, 0x46, + 0x07, 0x92, 0x8C, 0x86, 0x87, 0x29, 0x2F, 0x2E, 0x6C, 0x71, 0x7E, 0x7D, 0x4B, 0x4C, 0x24, 0x18, 0x17, + 0x7B, 0x14, 0x30, 0x55, 0x7C, 0x12, 0x27, 0x33, 0x28, 0x60, 0x1C, 0x37, 0x43, 0x41, 0x8E, 0x21, 0x22, + 0x23, 0x13, 0x4E, 0x35, 0x34, 0x45, 0x42, 0x93, 0x75, 0x74, 0x0C, 0x84, 0x40, 0x36, 0x79, 0x2C, 0x7A, + 0x83, 0x82, 0x54, 0x78, 0x3B, 0x20, 0x4A, 0x68, 0x85, 0x49, 0x32, 0x44, 0x16, 0x1E, 0x88, 0x3A, 0x26, + 0x6D, 0x5E, 0x5F, 0x3C, 0x3D, 0x01, 0x7F, 0x05, 0x95, 0x53, 0x1B, 0x19, 0x1A, 0x52, 0x51, 0x00, + }; + s32 var_v0 = D_8831A160[*(u8*)&arg0->unk_08 - 1] - D_8831A160[*(u8*)&arg1->unk_08 - 1]; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316E60.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316F24.s") +s32 func_883161D0(unk_func_8830867C_02C_0CC* arg0, unk_func_8830867C_02C_0CC* arg1) { + s32 var_v0 = *(u8*)&arg0->unk_08 - *(u8*)&arg1->unk_08; + s32 ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316F68.s") + if (var_v0 != 0) { + ret = var_v0; + } else { + ret = func_88315CD0(arg0, arg1); + } + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88316F98.s") +unk_D_8831A1F8 D_8831A1F8[] = { + func_88315CD0, func_883160BC, func_88315D48, func_88315D8C, func_88315DD0, func_88315E14, func_88315E58, + func_88315E9C, func_88315EE0, func_88315F24, func_88315F68, func_88315FAC, func_88315FF0, func_88316034, + func_88316078, func_883160DC, func_88316128, func_88316174, func_883161D0, +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/24/fragment24_1E46B0/func_88317144.s") +typedef struct unk_func_88316214 { + /* 0x00 */ char unk00[0x2C]; + /* 0x2C */ u8 unk_2C; +} unk_func_88316214; // size >= 0x30 + +int func_88316214(unk_func_8830867C_02C_0CC* a0, u8* arg1) { + unk_func_88316214* arg0 = a0; + return (arg0->unk_2C >= arg1[0]) && (arg1[1] >= arg0->unk_2C); +} + +s32 func_88316240(unk_func_8830867C_02C_0CC* arg0, unk_func_8830867C_02C_C54_01C* a1) { + UNUSED s32 pad; + s32 i; + s32 j; + s32 var_v1; + unk_func_8830867C_02C_C54_01C* arg1 = a1; + s32 idx = *(u8*)&arg0->unk_08 - 1; + u8 spC[2]; + + spC[0] = D_80070FA0[idx].unk_06; + spC[1] = D_80070FA0[idx].unk_07; + + if (spC[0] == spC[1]) { + var_v1 = 1; + } else { + var_v1 = 2; + } + + for (i = 0; i < arg1->unk_00; i++) { + for (j = 0; j < var_v1; j++) { + if (arg1->unk_04[i] == spC[j]) { + break; + } + } + + if (j >= var_v1) { + return 0; + } + } + + return 1; +} + +typedef struct unk_func_88316304 { + /* 0x00 */ unk_func_8830867C_02C_0CC_000** unk_00; + /* 0x04 */ char unk04[0x4]; + /* 0x08 */ u8 unk_08; + /* 0x09 */ char unk09[0x8]; + /* 0x11 */ u8 unk_11[1]; +} unk_func_88316304; // size >= 0x12 + +s32 func_88316304(unk_func_8830867C_02C_0CC* a0, unk_func_8830867C_02C_C54_024* a1) { + unk_func_88316304* arg0 = a0; + unk_func_8830867C_02C_C54_024* arg1 = a1; + s32 i; + s32 j; + s32 temp_v0 = func_8002ECDC(&arg0->unk_08); + + for (i = 0; i < arg1->unk_04; i++) { + for (j = 0; j < temp_v0; j++) { + if (arg1->unk_00[i] == arg0->unk_11[j]) { + break; + } + } + + if (j >= temp_v0) { + return 0; + } + } + + return 1; +} + +s32 func_883163A4(unk_func_8830867C_02C_0CC* arg0, s32* arg1) { + return *(u8*)&arg0->unk_08 == *arg1; +} + +s32 func_883163B8(unk_func_8830867C_02C_0CC* arg0, unk_func_8830867C_02C_C54_014* a1) { + UNUSED s32 pad; + s32 i; + s32 j; + s32 var_v1; + unk_func_8830867C_02C_C54_014* arg1 = a1; + s32 idx = *(u8*)&arg0->unk_08 - 1; + s32 sp8[2]; + + sp8[0] = D_80070FA0[idx].unk_06; + sp8[1] = D_80070FA0[idx].unk_07; + + if (sp8[0] == sp8[1]) { + var_v1 = 1; + } else { + var_v1 = 2; + } + + if (var_v1 != arg1->unk_00) { + return 0; + } + + for (i = 0; i < arg1->unk_00; i++) { + for (j = 0; j < var_v1; j++) { + if (arg1->unk_04[i] == sp8[j]) { + break; + } + } + + if (j >= var_v1) { + return 0; + } + } + + return 1; +} + +s32 func_88316480(unk_func_88316128* arg0, u8* arg1) { + static u8 D_8831A244[] = { + 0x03, 0x04, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; + + return ((1 << D_8831A244[*arg1]) & ((D_8006FF00 + arg0->unk_08 - 1)->unk_0C)) != 0; +} + +typedef struct unk_func_883164C0 { + /* 0x00 */ char unk00[0x5C]; +} unk_func_883164C0; // size = 0x5C + +void func_883164C0(unk_func_8830867C_02C_0E4* arg0, s32 arg1, s32 arg2, MemoryPool* arg3) { + s32 i; + s32 j; + s32 temp_lo; + unk_func_8820BE14_06C_000_alt* var_s1; + unk_func_883164C0** var_s2; + unk_func_883164C0* var_s3; + + temp_lo = arg0->unk_0C.unk_04 * arg1; + + var_s3 = mem_pool_alloc(arg3, temp_lo * sizeof(unk_func_883164C0)); + var_s2 = mem_pool_alloc(arg3, temp_lo * sizeof(unk_func_883164C0*)); + + var_s1 = arg0->unk_0C.unk_00; + bzero(var_s3, temp_lo * sizeof(unk_func_883164C0)); + + arg0->unk_0C.unk_08 = arg0->unk_0C.unk_04; + + for (i = 0; i < arg0->unk_0C.unk_08; i++) { + var_s1[i].unk_00 = arg0; + var_s1[i].unk_04.unk_00 = i; + var_s1[i].unk_04.unk_04 = arg2; + var_s1[i].unk_04.unk_08 = 0; + + // clang-format off + for (j = 0; j < arg1; j++) { var_s2[j] = &var_s3[j]; } + // clang-format on + + func_8002CBB0(&var_s1[i].unk_10, var_s2, arg1, 0); + + var_s2 += arg1; + var_s3 += arg1; + } +} + +void func_883166A0(unk_func_8830867C_02C_144* arg0) { + s32 i; + s32 j; + s32 var_s1; + unk_func_80022C28_ret* temp_v0; + unk_func_8830867C_02C_0CC_000_000* var_s3; + unk_func_8830867C_02C_0CC_000_000_010_000* var_s0; + unk_func_8830867C_02C_144_000* var_s5; + + var_s5 = arg0->unk_00; + if (func_8002513C(var_s5[1].unk_04) == 0) { + func_80024208(var_s5[1].unk_04); + } + + for (i = 0; i < arg0->unk_08; i++, var_s5++) { + var_s3 = var_s5->unk_0C; + + for (j = 0; j < var_s5->unk_14; j++, var_s3++) { + temp_v0 = func_80022C28(var_s5->unk_00, var_s5->unk_04, j, 0); + var_s1 = 0; + + if (temp_v0 != NULL) { + var_s0 = var_s3->unk_10.unk_00; + + while (true) { + if (func_80022E18(&var_s0->unk_00->unk_08, 1, temp_v0) == 0) { + break; + } + + var_s0->unk_00->unk_00 = var_s3; + var_s0->unk_00->unk_04 = var_s1; + + var_s0++; + var_s1++; + } + + func_80022D8C(temp_v0); + } + + var_s3->unk_10.unk_08 = var_s1; + } + } +} + +void func_883167CC(unk_func_88200FA0_030_038* arg0, unk_func_8830867C_02C_144* arg1) { + s32 i; + s32 j; + s32 x; + unk_func_88205880_00D0** var_v0; + unk_func_8830867C_02C_0CC_000_000* var_v1; + unk_func_8830867C_02C_0CC_000_000_010_000* var_t0; + unk_func_8830867C_02C_144_000* var_a2; + + var_v0 = arg0->unk_00; + var_a2 = arg1->unk_00; + + for (i = 0; i < arg1->unk_08; i++, var_a2++) { + var_v1 = var_a2->unk_0C; + + for (j = 0; j < var_a2->unk_14; j++, var_v1++) { + if (var_v1->unk_08 != 0) { + var_t0 = var_v1->unk_10.unk_00; + + for (x = 0; x < var_v1->unk_10.unk_08; x++, var_t0++, var_v0++) { + *var_v0 = var_t0->unk_00; + } + } + } + } + + arg0->unk_08 = var_v0 - arg0->unk_00; +} + +s32 func_88316874(s32 arg0) { + s32 ret = 0; + + switch (arg0) { + case 32: + ret = 1; + break; + + case 33: + ret = 4; + break; + + case 17: + ret = 0x10; + break; + } + + return ret; +} + +s32 func_883168B4(unk_func_8830867C_02C_144* arg0) { + s32 var_s7 = 0; + s32 j; + s32 x; + s32 i; + unk_func_80022C28_ret* temp_v0; + unk_func_8830867C_02C_0CC_000_000* var_s3; + unk_func_8830867C_02C_0CC_000_000_010_000* var_s0; + unk_func_8830867C_02C_144_000* var_s5 = arg0->unk_00; + unk_func_80026268_arg0 sp4C; + + for (i = 0; i < arg0->unk_08; i++, var_s5++) { + var_s3 = var_s5->unk_0C; + + for (j = 0; j < var_s5->unk_14; j++, var_s3++) { + if (var_s3->unk_0C != 0) { + temp_v0 = func_80022C28(var_s5->unk_00, var_s5->unk_04, j, 0); + if (temp_v0 == NULL) { + continue; + } + + var_s3->unk_0C = 0; + if (func_8002EE1C(var_s5->unk_00, var_s5->unk_04, j) != var_s3->unk_10.unk_08) { + var_s3->unk_0C = 1; + var_s7 |= func_88316874(var_s5->unk_00); + } else { + var_s0 = var_s3->unk_10.unk_00; + + for (x = 0; x < var_s3->unk_10.unk_08; x++, var_s0++) { + bzero(&sp4C, sizeof(unk_func_80026268_arg0)); + func_80022E18(&sp4C, 1, temp_v0); + if (bcmp(&sp4C, &var_s0->unk_00->unk_08, sizeof(unk_func_80026268_arg0)) != 0) { + var_s3->unk_0C = 1; + var_s7 |= func_88316874(var_s5->unk_00); + break; + } + } + } + func_80022D8C(temp_v0); + } + } + } + + return var_s7; +} + +void func_88316A58(unk_func_8830867C_02C_144* arg0, s32 arg1) { + UNUSED s32 pad[4]; + s32 i; + s32 j; + s32 x; + s32 var_s7; + unk_func_80022C28_ret* temp_s3; + unk_func_8830867C_02C_0CC_000_000* var_s4; + unk_func_8830867C_02C_0CC_000_000_010_000* var_s0; + unk_func_8830867C_02C_144_000* var_s2; + s32 tmp; + + var_s2 = arg0->unk_00; + + for (i = 0; i < arg0->unk_08; i++, var_s2++) { + var_s4 = var_s2->unk_0C; + var_s7 = 0; + + for (j = 0; j < var_s2->unk_14; j++, var_s4++) { + if (var_s4->unk_0C != 0) { + var_s0 = var_s4->unk_10.unk_00; + temp_s3 = func_80022C28(var_s2->unk_00, var_s2->unk_04, j, 1); + + for (x = 0; x < var_s4->unk_10.unk_08; x++, var_s0++) { + func_80022F24(&var_s0->unk_00->unk_08, 1, temp_s3); + if ((var_s2->unk_00 == 0x20) || (var_s2->unk_00 == 0x21)) { + if ((var_s0->unk_00->unk_08.unk_00 > 0) && (var_s0->unk_00->unk_08.unk_00 < 0x98)) { + func_800256F4(var_s2->unk_04, var_s0->unk_00->unk_08.unk_00, 3); + } + } + } + + tmp = var_s2->unk_00; + if ((tmp == 0x10) || (tmp == 0x11) || (tmp == 0x12)) { + func_80022D24(temp_s3); + } else { + func_80022D8C(temp_s3); + } + + if (1) {} + } + } + } +} + +void func_88316BEC(unk_func_8830867C_02C_154* arg0, MemoryPool* arg1) { + UNUSED s32 pad; + s32 temp_s1; + char sp54[4]; + unk_func_8002D860 sp48; + char sp38[16]; + s32 i; + + arg0->unk_00 = 0x23; + arg0->unk_01 = func_80029080(); + arg0->unk_02 = 0; + arg0->unk_04 = 1; + func_8002C758(&arg0[0].unk_0C, 2, 0x14, arg1); + + arg0[1].unk_00 = 0x22; + arg0[1].unk_01 = arg0->unk_01; + arg0[1].unk_02 = 0; + arg0[1].unk_04 = 1; + func_8002C758(&arg0[1].unk_0C, 2, 0x32, arg1); + + arg0[2].unk_00 = 0x12; + arg0[2].unk_01 = 0; + func_8002C758(&arg0[2].unk_0C, 2, 0x64, arg1); + + func_8002D860(&sp48, arg0->unk_01); + + for (i = 0; i < 4; i++) { + if ((func_80027164(0x12, i) != 0) && (func_800275E0(0x12, i) > 0)) { + temp_s1 = func_80027184(0x12, i); + func_800272BC(0x12, i, &sp38); + if ((sp48.unk_08 == temp_s1) && (HAL_Strcmp(sp54, sp38) == 0)) { + break; + } + } + } + + if (i < 4) { + arg0[2].unk_02 = i; + arg0[2].unk_04 = 1; + } else { + arg0[2].unk_04 = 0; + } +} + +void func_88316D5C(unk_func_8830867C_02C_154* arg0) { + unk_func_80022C28_ret* sp24; + + sp24 = func_80022C28(arg0->unk_00, arg0->unk_01, arg0->unk_02, 0); + arg0->unk_14 = func_80022E18(arg0->unk_0C, arg0->unk_10, sp24); + func_80022D8C(sp24); + arg0->unk_08 = 0; +} + +void func_88316DB8(unk_func_8830867C_02C_154* arg0) { + unk_func_80022C28_ret* sp24 = func_80022C28(arg0->unk_00, arg0->unk_01, arg0->unk_02, 1); + + func_80022F24(arg0->unk_0C, arg0->unk_14, sp24); + func_80022D8C(sp24); + arg0->unk_08 = 0; +} + +s32 func_88316E10(s32* arg0) { + if ((*arg0 >= 0xC9) && (*arg0 < 0xFB)) { + *arg0 -= 0x65; + return 1; + } + if ((*arg0 >= 0xC4) && (*arg0 < 0xC9)) { + *arg0 += 4; + return 1; + } + return 0; +} + +s32 func_88316E60(s32* arg0) { + static u8 D_8831A250[] = { 0x23, 0x24, 0x25, 0x26, 0x27, 0x28 }; + + s32 i; + + for (i = 0; i < 6; i++) { + if (*arg0 == D_8831A250[i]) { + *arg0 = i; + return 1; + } + } + + return 0; +} + +s32 func_88316F24(s32* arg0) { + static u8 D_8831A258[] = { 0x4F }; + + s32 i; + + for (i = 0; i < 1; i++) { + if (*arg0 == D_8831A258[i]) { + *arg0 = i + 0x32; + return 1; + } + } + + return 0; +} + +s32 func_88316F68(unk_func_88200FA0_030_038* arg0, unk_func_88200FA0_030_038* arg1) { + return (arg0->unk_08 - arg1->unk_08 != 0) ? arg0->unk_08 - arg1->unk_08 : (s32)arg0[1].unk_00 - (s32)arg1[1].unk_00; +} + +void func_88316F98(unk_func_88200FA0_030_038* arg0, unk_func_8830867C_02C_1A8* arg1, unk_func_8830867C_02C_154* arg2, + s32 arg3, s32 arg4) { + unk_func_88205880_00D0** var_s6; + unk_func_8830867C_02C_154* var_s4; + s32 i; + unk_func_8830867C_02C_1A8* var_s1; + s32 j; + s32 sp50; + s32 var_s0; + s32 var_v0; + u8* var_s2; + + var_s6 = arg0->unk_00; + var_s4 = arg2; + var_s1 = arg1; + func_8002CBB0(arg0, var_s6, arg4, 0); + + for (i = 0; i < arg3; i++, var_s4++) { + if (var_s4->unk_04 != 0) { + var_s2 = var_s4->unk_0C; + + for (j = 0; j < var_s4->unk_14; j++, var_s2 += 2) { + var_s0 = 0; + sp50 = *var_s2; + if (func_88316E10(&sp50) != 0) { + var_s0 = 1; + } else if (func_88316E60(&sp50) != 0) { + var_s0 = 1; + } else if (func_88316F24(&sp50) != 0) { + var_s0 = 1; + } + + if (var_s0 != 0) { + var_s1->unk_00 = var_s2; + var_s1->unk_04 = var_s4; + var_s1->unk_08 = sp50; + + if (var_s4->unk_00 == 0x23) { + var_s1->unk_0C = 0; + } else { + if (var_s4->unk_00 == 0x22) { + var_v0 = 1; + } else { + var_v0 = 2; + } + var_s1->unk_0C = var_v0; + } + *var_s6 = var_s1; + + var_s1++; + var_s6++; + } + } + } + } + + arg0->unk_08 = ((s32)var_s1 - (s32)arg1) >> 4; + func_8002D180(arg0, func_88316F68); +} + +void func_88317144(unk_func_8830867C_04C_030_02C_000* arg0) { + if ((func_8002F264(arg0->unk_00[0]->unk_00) != 0) || (arg0->unk_00[0]->unk_01 < 2)) { + s32 tmp = arg0->unk_00[1]->unk_0C.unk_00; + + func_8002CB58(&arg0->unk_00[1]->unk_0C, ((s32)arg0->unk_00[0] - tmp) >> 1); + } else { + arg0->unk_00[0]->unk_01--; + } + arg0->unk_00[1]->unk_08 = 1; +} diff --git a/src/fragments/25/fragment25.h b/src/fragments/25/fragment25.h index 10a6518..ce6250c 100644 --- a/src/fragments/25/fragment25.h +++ b/src/fragments/25/fragment25.h @@ -9,8 +9,8 @@ typedef struct unk_D_88400138 { /* 0x08 */ Color_RGBA8 unk_08; } unk_D_88400138; // size = 0xC -typedef unk_D_88400138* (*func884000C4)(u8); +typedef unk_D_88400138* (*func884000C4)(s32); -unk_D_88400138* func_884000C4(u8); +unk_D_88400138* func_884000C4(s32); #endif // _FRAGMENT25_H_ diff --git a/src/fragments/26/fragment26.h b/src/fragments/26/fragment26.h index 7bc4dd9..1ea0d13 100644 --- a/src/fragments/26/fragment26.h +++ b/src/fragments/26/fragment26.h @@ -8,6 +8,7 @@ #include "src/29BA0.h" #include "src/1AB70.h" #include "src/2D340.h" +#include "src/fragments/25/fragment25.h" struct unk_func_88001300; struct unk_func_88001300_000; @@ -51,8 +52,7 @@ typedef struct unk_func_88001300_02C { } unk_func_88001300_02C; // size = 0x30 typedef struct unk_func_88001300_030 { - /* 0x00 */ unk_func_88001300_000_000 unk_00; - /* 0x0C */ char unk0C[0x20]; + /* 0x00 */ unk_func_88001300_000 unk_00; /* 0x2C */ Color_RGBA8_u32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; @@ -60,14 +60,7 @@ typedef struct unk_func_88001300_030 { } unk_func_88001300_030; // size = 0x3C typedef struct unk_func_88001300_038 { - /* 0x00 */ u8* unk_00[1]; - /* 0x04 */ char unk04[0x8]; - /* 0x0C */ s32 unk_0C; - /* 0x10 */ char unk10[0x4]; - /* 0x14 */ s16 unk_14; - /* 0x16 */ s16 unk_16; - /* 0x18 */ char unk18[0x10]; - /* 0x28 */ u16 unk_28; + /* 0x00 */ unk_func_88001300_000 unk_00; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; } unk_func_88001300_038; // size = 0x34 @@ -107,9 +100,13 @@ typedef struct unk_func_88001300_03C { /* 0x1C */ unk_func_88001300_03C_01C* unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; - /* 0x28 */ char unk28[0x4]; + /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; - /* 0x30 */ char unk30[0x10]; + /* 0x30 */ char unk30[0x8]; + /* 0x38 */ s16 unk_38; + /* 0x3A */ s16 unk_3A; + /* 0x3C */ s16 unk_3C; + /* 0x3E */ s16 unk_3E; } unk_func_88001300_03C; // size = 0x40 typedef struct unk_func_88001300 { @@ -228,6 +225,25 @@ typedef struct unk_func_88200FA0_030_030_1AE680 { /* 0x52 */ s16 unk_52; } unk_func_88200FA0_030_030_1AE680; // size = 0x54 +// Copy of above with unk_2C changed just for fragment24_1CEA00 +typedef struct unk_func_88200FA0_030_030_1CEA00 { + /* 0x00 */ unk_func_88001300_000 unk_00; + /* 0x2C */ unk_func_8830867C_02C_0CC* unk_2C; + /* 0x30 */ s32 unk_30; + /* 0x34 */ u16* unk_34; + /* 0x38 */ s32 unk_38; + /* 0x3C */ s16 unk_3C; + /* 0x3E */ s16 unk_3E; + /* 0x40 */ unk_func_88200FA0_030_030_040 unk_40; + /* 0x44 */ unk_func_88001300_03C_01C* unk_44; + /* 0x48 */ s16 unk_48; + /* 0x4A */ s16 unk_4A; + /* 0x4C */ s16 unk_4C; + /* 0x4E */ s16 unk_4E; + /* 0x50 */ s16 unk_50; + /* 0x52 */ s16 unk_52; +} unk_func_88200FA0_030_030_1CEA00; // size = 0x54 + typedef struct unk_func_8850182C { /* 0x00 */ unk_func_88001300_000 unk_00; /* 0x2C */ Color_RGBA8 unk_2C; @@ -235,7 +251,7 @@ typedef struct unk_func_8850182C { typedef struct unk_func_889000C4 { /* 0x00 */ unk_func_88001300_000 unk_00; - /* 0x2C */ void* unk_2C; + /* 0x2C */ unk_func_88001300_000* unk_2C; /* 0x30 */ void* unk_30; /* 0x34 */ unk_func_88200FA0_030_038 unk_34; /* 0x40 */ void* unk_40; @@ -354,7 +370,6 @@ typedef struct unk_func_882025E0_1A9780 { /* 0x3C */ unk_func_882025E0_03C unk_3C[5]; } unk_func_882025E0_1A9780; // size = 0x78 - typedef s32 (*unk_func_88203ED8_064_010)(struct unk_func_88203ED8_064*, Controller*); typedef void (*unk_func_88203ED8_064_014)(struct unk_func_88203ED8_064*); @@ -503,6 +518,124 @@ typedef struct unk_func_8820E99C_030_044 { /* 0x30 */ s32 unk_30; } unk_func_8820E99C_030_044; // size = 0x34 +struct unk_func_8830867C_02C; + +typedef struct unk_func_8830867C_02C_034 { + /* 0x00 */ unk_func_88200FA0_030_030_1CEA00 unk_00; + /* 0x54 */ s16 unk_54; + /* 0x58 */ s32 unk_58; + /* 0x5C */ s32 unk_5C; + /* 0x60 */ char unk60[0xC]; + /* 0x6C */ s32 unk_6C; + /* 0x70 */ struct unk_func_8830867C_02C* unk_70; +} unk_func_8830867C_02C_034; // size = 0x74 + +typedef s32 (*unk_func_8830867C_02C_048_010)(struct unk_func_8830867C_02C_048*, Controller*); +typedef void (*unk_func_8830867C_02C_048_014)(struct unk_func_8830867C_02C_048*, s32); + +typedef struct unk_func_8830867C_02C_048 { + /* 0x00 */ char unk00[0x4]; + /* 0x04 */ struct unk_func_8830867C_02C_048* unk_04; + /* 0x08 */ struct unk_func_8830867C_02C_048* unk_08; + /* 0x0C */ char unk0C[0x4]; + /* 0x10 */ unk_func_8830867C_02C_048_010 unk_10; + /* 0x14 */ unk_func_8830867C_02C_048_014 unk_14; + /* 0x18 */ char unk18[0x4]; + /* 0x1C */ s32 unk_1C; + /* 0x20 */ s32 unk_20; + /* 0x24 */ struct unk_func_8830867C_02C* unk_24; +} unk_func_8830867C_02C_048; // size = 0x28 + +typedef struct unk_func_8830867C_034_038 { + /* 0x00 */ char unk00[0x4]; + /* 0x04 */ struct unk_func_8830867C_034_038* unk_04; + /* 0x08 */ struct unk_func_8830867C_034_038* unk_08; + /* 0x0C */ char unk0C[0x4]; + /* 0x10 */ unk_func_8830867C_02C_048_010 unk_10; + /* 0x14 */ unk_func_8830867C_02C_048_014 unk_14; + /* 0x18 */ char unk18[0x4]; + /* 0x1C */ s32 unk_1C; + /* 0x20 */ s32 unk_20; + /* 0x24 */ struct unk_func_8830867C_034* unk_24; +} unk_func_8830867C_034_038; // size = 0x28 + +typedef struct unk_func_8830867C_044_040 { + /* 0x00 */ char unk00[0x4]; + /* 0x04 */ struct unk_func_8830867C_034_038* unk_04; + /* 0x08 */ struct unk_func_8830867C_034_038* unk_08; + /* 0x0C */ char unk0C[0x4]; + /* 0x10 */ unk_func_8830867C_02C_048_010 unk_10; + /* 0x14 */ unk_func_8830867C_02C_048_014 unk_14; + /* 0x18 */ char unk18[0x4]; + /* 0x1C */ s32 unk_1C; + /* 0x20 */ s32 unk_20; + /* 0x24 */ struct unk_func_8830867C_044* unk_24; +} unk_func_8830867C_044_040; // size = 0x28 + +typedef struct unk_func_8830867C_03C_058 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ unk_D_88400138* unk_04; +} unk_func_8830867C_03C_058; // size = 0x8 + +typedef struct unk_func_8830867C_03C_0D0 { + /* 0x00 */ unk_func_8830867C_03C_058** unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; +} unk_func_8830867C_03C_0D0; // size = 0x10 + +typedef struct unk_func_8830867C_03C_04C { + /* 0x00 */ char unk00[0x4]; + /* 0x04 */ struct unk_func_8830867C_03C_04C* unk_04; + /* 0x08 */ struct unk_func_8830867C_03C_04C* unk_08; + /* 0x0C */ char unk0C[0x4]; + /* 0x10 */ unk_func_8830867C_02C_048_010 unk_10; + /* 0x14 */ unk_func_8830867C_02C_048_014 unk_14; + /* 0x18 */ char unk18[0x4]; + /* 0x1C */ s32 unk_1C; + /* 0x20 */ s32 unk_20; + /* 0x24 */ struct unk_func_8830867C_03C* unk_24; +} unk_func_8830867C_03C_04C; // size = 0x28 + +typedef struct unk_func_8830867C_040_05C { + /* 0x00 */ char unk00[0x4]; + /* 0x04 */ struct unk_func_8830867C_040_05C* unk_04; + /* 0x08 */ struct unk_func_8830867C_040_05C* unk_08; + /* 0x0C */ char unk0C[0x4]; + /* 0x10 */ unk_func_8830867C_02C_048_010 unk_10; + /* 0x14 */ unk_func_8830867C_02C_048_014 unk_14; + /* 0x18 */ char unk18[0x4]; + /* 0x1C */ s32 unk_1C; + /* 0x20 */ s32 unk_20; + /* 0x24 */ struct unk_func_8830867C_040* unk_24; +} unk_func_8830867C_040_05C; // size = 0x28 + +typedef struct unk_func_8830867C_04C_080 { + /* 0x00 */ char unk00[0x4]; + /* 0x04 */ struct unk_func_8830867C_04C_080* unk_04; + /* 0x08 */ struct unk_func_8830867C_04C_080* unk_08; + /* 0x0C */ char unk0C[0x4]; + /* 0x10 */ unk_func_8830867C_02C_048_010 unk_10; + /* 0x14 */ unk_func_8830867C_02C_048_014 unk_14; + /* 0x18 */ char unk18[0x4]; + /* 0x1C */ s32 unk_1C; + /* 0x20 */ s32 unk_20; + /* 0x24 */ struct unk_func_8830867C_04C* unk_24; +} unk_func_8830867C_04C_080; // size = 0x28 + +typedef struct unk_func_8830867C_048_048 { + /* 0x00 */ char unk00[0x4]; + /* 0x04 */ struct unk_func_8830867C_048_048* unk_04; + /* 0x08 */ struct unk_func_8830867C_048_048* unk_08; + /* 0x0C */ char unk0C[0x4]; + /* 0x10 */ unk_func_8830867C_02C_048_010 unk_10; + /* 0x14 */ unk_func_8830867C_02C_048_014 unk_14; + /* 0x18 */ char unk18[0x4]; + /* 0x1C */ s32 unk_1C; + /* 0x20 */ s32 unk_20; + /* 0x24 */ struct unk_func_8830867C_048* unk_24; +} unk_func_8830867C_048_048; // size = 0x28 + typedef void (*func88500020)(unk_func_88500020*, s32, s32); typedef void (*func88500668)(unk_func_882025E0*, s32); typedef void (*func8850068C)(unk_func_88001300_000_000*, unk_func_88001300_000_000*); @@ -532,6 +665,7 @@ typedef void (*func88506074)(unk_func_88001300_034*, char*); typedef void (*func885060BC)(unk_func_88200FA0_030_030*, s32, s32, unk_func_88200FA0_030_030_040, s32, s32, s32, s32, MemoryPool*); typedef void (*func88506238)(unk_func_88200FA0_030_030*, s32, MemoryPool*); typedef void (*func8850628C)(unk_func_88200FA0_030_030*); +typedef void (*func8850633C)(unk_func_88200FA0_030_030_1CEA00*, unk_func_8830867C_02C_0CC*); typedef void (*func88506384)(unk_func_88200FA0_030_030*, unk_func_88200FA0_030_038*, MemoryPool*); typedef void (*func885063B8)(unk_func_88200FA0_030_030*, unk_func_88201DA0_038*); typedef void (*func88506404)(unk_func_88200FA0_030_030*, u8*, MemoryPool*); @@ -539,11 +673,14 @@ typedef void (*func88506BFC)(unk_func_88200FA0_030_030*, s32); typedef void (*func88506CE4)(unk_func_88200FA0_030_030*); typedef void (*func88506DCC)(unk_func_8821421C_038_034*, s32, s32, void (*)(), s32, s32, s32, MemoryPool*); typedef void (*func88506EE4)(unk_func_8820BE14_02C_038*, unk_func_88200FA0_030_038*); +typedef void (*func88506F1C)(unk_func_8830867C_02C_034*, unk_func_88200FA0_030_038*, MemoryPool*); typedef void (*func88506F50)(unk_func_8821421C_038_034*, unk_func_8821421C_038_050**); +typedef void (*func88506F8C)(unk_func_8821421C_038_034*, unk_func_8830867C_03C_0D0*, MemoryPool*); typedef void (*func88506FC0)(unk_func_8820BE14_02C_038*); typedef void (*func88506FE0)(unk_func_8820BE14_02C_038*); typedef void (*func88507AE4)(unk_func_8820BE14_02C_038*, s32); typedef void (*func88507B80)(unk_func_8820BE14_02C_038*, s32); +typedef void (*func88507C0C)(unk_func_8830867C_02C_034*, s32, s32); typedef void (*func88507CC4)(unk_func_8820BE14_02C_038*, unk_func_88205880_00D0*); typedef void (*func88507CEC)(unk_func_8820BE14_02C_038*); typedef void (*func88507D4C)(unk_func_88507D4C*, s32, s32, s32, s32, unk_func_8820BE14_02C_038*); @@ -568,7 +705,9 @@ typedef void (*func8850C064)(unk_func_88203ED8_064*, s32); typedef void (*func8850C284)(unk_func_88001300_03C*, s32, s32, MemoryPool*); typedef void (*func8850CAB4)(unk_func_88001300_03C*); typedef void (*func8850CB48)(unk_func_88001300_03C*, s32); +typedef void (*func8850CBA8)(unk_func_8830867C_02C_048*); typedef void (*func8850CC74)(unk_func_88001300_000*, unk_func_88001300_000*); +typedef void (*func8850CD24)(unk_func_8830867C_02C_048*, s32); typedef void (*func8850CD44)(unk_func_8850CD44*, s32, MemoryPool*); typedef void (*func8850CF00)(unk_func_8850CD44*, s32); @@ -581,7 +720,7 @@ void func_88500828(unk_func_88001300_000*, s32, s32); void func_885008C4(unk_func_88001300_000*); void func_8850093C(s32, s32); void func_88500994(unk_func_88500994*, s32, s32); -void func_88500A3C(unk_func_88500994*, unk_func_8850878C*); +void func_88500A3C(unk_func_88001300_000*, unk_func_88001300_000*); void func_88500A6C(unk_func_88500994*, s32); void func_88500E34(unk_func_88500E34*, s32, s32, s32, s32, u8*); void func_88500EE4(unk_func_88500EE4*, s32, s32, s32, s32, u8*, Color_RGBA8, Color_RGBA8); @@ -602,6 +741,7 @@ void func_88506074(unk_func_88001300_034* arg0, char* arg1); void func_885060BC(unk_func_88200FA0_030_030*, s32, s32, unk_func_88200FA0_030_030_040, s32, s32, s32, s32, MemoryPool*); void func_88506238(unk_func_88200FA0_030_030*, s32, MemoryPool*); void func_8850628C(unk_func_88200FA0_030_030*); +void func_8850633C(unk_func_88200FA0_030_030_1CEA00*, unk_func_8830867C_02C_0CC*); void func_88506384(unk_func_88200FA0_030_030*, unk_func_88200FA0_030_038*, MemoryPool*); void func_885063B8(unk_func_88200FA0_030_030*, unk_func_88201DA0_038*); void func_88506404(unk_func_88200FA0_030_030*, u8*, MemoryPool*); @@ -609,11 +749,14 @@ void func_88506BFC(unk_func_88200FA0_030_030*, s32); void func_88506CE4(unk_func_88200FA0_030_030*); void func_88506DCC(unk_func_8821421C_038_034*, s32, s32, void (*)(), s32, s32, s32, MemoryPool*); void func_88506EE4(unk_func_8820BE14_02C_038*, unk_func_88200FA0_030_038*); +void func_88506F1C(unk_func_8830867C_02C_034*, unk_func_88200FA0_030_038*, MemoryPool*); void func_88506F50(unk_func_8821421C_038_034*, unk_func_8821421C_038_050**); +void func_88506F8C(unk_func_8821421C_038_034*, unk_func_8830867C_03C_0D0*, MemoryPool*); void func_88506FC0(unk_func_8820BE14_02C_038*); void func_88506FE0(unk_func_8820BE14_02C_038*); void func_88507AE4(unk_func_8820BE14_02C_038*, s32); void func_88507B80(unk_func_8820BE14_02C_038*, s32); +void func_88507C0C(unk_func_8830867C_02C_034*, s32, s32); void func_88507CC4(unk_func_8820BE14_02C_038*, unk_func_88205880_00D0*); void func_88507CEC(unk_func_8820BE14_02C_038*); void func_88507D4C(unk_func_88507D4C*, s32, s32, s32, s32, unk_func_8820BE14_02C_038*); @@ -637,8 +780,10 @@ void func_8850BFB0(unk_func_88203ED8_064*); void func_8850C064(unk_func_88203ED8_064*, s32); void func_8850C284(unk_func_88001300_03C*, s32, s32, MemoryPool*); void func_8850CAB4(unk_func_88001300_03C*); -void func_8850CB48(unk_func_88001300_03C*, s32, s32); +void func_8850CB48(unk_func_88001300_03C*, s32); +void func_8850CBA8(unk_func_8830867C_02C_048*); void func_8850CC74(unk_func_88001300_000*, unk_func_88001300_000*); +void func_8850CD24(unk_func_8830867C_02C_048*, s32); void func_8850CD44(unk_func_8850CD44*, s32, MemoryPool*); void func_8850CF00(unk_func_8850CD44*, s32); diff --git a/src/memory.c b/src/memory.c index 81d96e7..d6aedd3 100644 --- a/src/memory.c +++ b/src/memory.c @@ -46,7 +46,7 @@ MainPool* mem_pool_init(MainPool* pool, s32 size) { /** * Allocate from a memory pool. Return NULL if there is not enough space. */ -void* mem_pool_alloc(MainPool* node, s32 size) { +void* mem_pool_alloc(MemoryPool* node, s32 size) { struct MemoryBlock* freeBlock; void* addr; @@ -54,7 +54,7 @@ void* mem_pool_alloc(MainPool* node, s32 size) { addr = NULL; size = ALIGN4(size) + sizeof(struct MemoryBlock); - freeBlock = (struct MemoryBlock*)&node->end; + freeBlock = &node->freeList; while (freeBlock->next != NULL) { if (freeBlock->next->size >= size) { diff --git a/src/memory.h b/src/memory.h index f73182f..3344708 100644 --- a/src/memory.h +++ b/src/memory.h @@ -70,7 +70,7 @@ MainPool*main_pool_get_pool(void); // memory.c MemoryPool *mem_pool_try_init(u32 size, s32 side); MainPool* mem_pool_init(MainPool* pool, s32 size); -void *mem_pool_alloc(MainPool* node, s32 size); +void *mem_pool_alloc(MemoryPool* node, s32 size); void mem_pool_free(MemoryPool* pool, void* addr); void *func_80002D10(u32 size, s32 side); diff --git a/tools/data2c.py b/tools/data2c.py index 019d855..4d178c7 100755 --- a/tools/data2c.py +++ b/tools/data2c.py @@ -572,17 +572,28 @@ def dump_data(offset, struct, counts): return out - if name in STRUCTS: out += indent + "{ " - #print(STRUCTS[name]) for member in STRUCTS[name]["data"]: - if member["type"] in STRUCTS: - out = output_struct(data, member["type"], out, offset + member["offset"], indent) + if len(member["counts"]) > 0: + out += "{ " + + for count in member["counts"]: + for i in range(count): + if member["type"] in STRUCTS: + out = output_struct(data, member["type"], out, offset + member["offset"], indent + (" " * i)) + else: + base_size = BASE_TYPES[member["type"]] + out = output_type(member["type"], base_size, offset + member["offset"] + (i * base_size), out) + + out += "}, " + else: - #print(member) - out = output_type(member["type"], member["size"], offset + member["offset"], out) + if member["type"] in STRUCTS: + out = output_struct(data, member["type"], out, offset + member["offset"], indent) + else: + out = output_type(member["type"], member["size"], offset + member["offset"], out) if len(STRUCTS[name]["data"]) <= 4: out = out[:-2] diff --git a/yamls/us/rom.yaml b/yamls/us/rom.yaml index 8098686..ed02a1e 100644 --- a/yamls/us/rom.yaml +++ b/yamls/us/rom.yaml @@ -1146,18 +1146,18 @@ - [0x1B4EA0, c, fragments/23/fragment23_1B4EA0] - [0x1BCF10, c, fragments/23/fragment23_1BCF10] - [0x1C0160, c, fragments/23/fragment23_882181B0] - - [0x1C0160, .data, fragments/23/fragment23_1A8800] # fragment23_1A8800 - - [0x1C0190, .data, fragments/23/fragment23_1A9780] # fragment23_1A9780 - - [0x1C0280, .data, fragments/23/fragment23_1AE680] # fragment23_1AE680 - - [0x1C0540, .data, fragments/23/fragment23_1B4EA0] # fragment23_1B4EA0 - - [0x1C0720, .data, fragments/23/fragment23_882181B0] # fragment23_882181B0 - - [0x1CD3C0, .rodata, fragments/23/fragment23_1A9780] # fragment23_1A9780 + - [0x1C0160, .data, fragments/23/fragment23_1A8800] + - [0x1C0190, .data, fragments/23/fragment23_1A9780] + - [0x1C0280, .data, fragments/23/fragment23_1AE680] + - [0x1C0540, .data, fragments/23/fragment23_1B4EA0] + - [0x1C0720, .data, fragments/23/fragment23_882181B0] + - [0x1CD3C0, .rodata, fragments/23/fragment23_1A9780] - [0x1CD400, .rodata, fragments/23/fragment23_1AE680] - [0x1CD470, .rodata, fragments/23/fragment23_1B4EA0] - - {vram: 0x88224F90, type: .bss, name: fragments/23/fragment23_1A8800} # fragment23_1A8800 - - {vram: 0x88224FA0, type: .bss, name: fragments/23/fragment23_1A9780} # fragment23_1A9780 - - {vram: 0x88224FC0, type: .bss, name: fragments/23/fragment23_1B4EA0} # fragment23_1B4EA0 + - {vram: 0x88224F90, type: .bss, name: fragments/23/fragment23_1A8800} + - {vram: 0x88224FA0, type: .bss, name: fragments/23/fragment23_1A9780} + - {vram: 0x88224FC0, type: .bss, name: fragments/23/fragment23_1B4EA0} - name: fragment23_relocs type: code @@ -1176,12 +1176,15 @@ subsegments: - [0x1CE9E0, textbin, fragments/24/fragment24_header] - [0x1CEA00, c, fragments/24/fragment24_1CEA00] + - [0x1D7B40, c, fragments/24/fragment24_1D7B40] - [0x1E46B0, c, fragments/24/fragment24_1E46B0] - - [0x1E5BB0, data, fragments/24/fragment24_data] - - [0x1E8C40, rodata, fragments/24/fragment24_rodata_1E8C40] - - [0x1E8DB0, rodata, fragments/24/fragment24_rodata_1E8DB0] + - [0x1E5BB0, .data, fragments/24/fragment24_1CEA00] + - [0x1E5D40, .data, fragments/24/fragment24_1D7B40] + - [0x1E60B0, .data, fragments/24/fragment24_1E46B0] + - [0x1E8C40, .rodata, fragments/24/fragment24_1CEA00] + - [0x1E8DB0, .rodata, fragments/24/fragment24_1D7B40] - - {vram: 0x8831A4C0, type: bss, name: fragments/24/fragment24_bss} + - {vram: 0x8831A4C0, type: .bss, name: fragments/24/fragment24_1CEA00} - name: fragment24_relocs type: code