diff --git a/include/variables.h b/include/variables.h index b335e5c..ce77874 100644 --- a/include/variables.h +++ b/include/variables.h @@ -507,6 +507,8 @@ extern u8 D_200A780[]; extern u8 D_2000980[]; extern u8 D_2000A60[]; extern u8 D_3008200[]; +extern u8 D_4000C40[]; +extern u8 D_4000DD0[]; extern LEODiskID D_800818E0; @@ -641,4 +643,6 @@ typedef struct unk_D_80072338 { } unk_D_80072338; // size = 0xC extern unk_D_80072338 D_80072338[]; +extern char D_8006FEE8[][0x1C]; + #endif diff --git a/linker_scripts/us/symbol_addrs.txt b/linker_scripts/us/symbol_addrs.txt index 5bc2be6..e278a37 100644 --- a/linker_scripts/us/symbol_addrs.txt +++ b/linker_scripts/us/symbol_addrs.txt @@ -757,4 +757,6 @@ D_826083D0 = 0x826083D0; // size:0x168 D_82607420 = 0x82607420; // size:0x730 D_82608568 = 0x82608568; // size:0x75F80 D_3008200 = 0x3008200; -D_8267E4F8 = 0x8267E4F8; // size:0x258 \ No newline at end of file +D_8267E4F8 = 0x8267E4F8; // size:0x258 +D_4000C40 = 0x4000C40; +D_4000DD0 = 0x4000DD0; \ No newline at end of file diff --git a/src/22630.c b/src/22630.c index 2fea46a..392e1b1 100644 --- a/src/22630.c +++ b/src/22630.c @@ -91,8 +91,6 @@ char* func_80021C80(char* arg0, char* arg1) { } char* func_80021CA4(char* arg0, s32 arg1) { - extern char D_8006FEE8[][0x1C]; - func_80021C80(arg0, (char*)*(u32*)D_8006FEE8[arg1]); return arg0; } diff --git a/src/fragments/55/fragment55.h b/src/fragments/55/fragment55.h new file mode 100644 index 0000000..18cde3a --- /dev/null +++ b/src/fragments/55/fragment55.h @@ -0,0 +1,109 @@ +#ifndef _FRAGMENT55_H_ +#define _FRAGMENT55_H_ + +#include "global.h" +#include "src/29BA0.h" + +typedef struct unk_D_83003CE0 { + /* 0x00 */ char* unk_00[29]; + /* 0x74 */ char* unk_74; + /* 0x78 */ char* unk_78; + /* 0x7C */ char* unk_7C; + /* 0x80 */ char* unk_80; + /* 0x84 */ char* unk_84; + /* 0x88 */ char* unk_88; + /* 0x8C */ char* unk_8C; + /* 0x90 */ char* unk_90; + /* 0x94 */ char* unk_94; + /* 0x98 */ char* unk_98; + /* 0x9C */ char unk9C[0x64]; +} unk_D_83003CE0; // size = 0x100 + +typedef struct unk_D_83079E70_014_000 { + /* 0x00 */ s16 unk_00; + /* 0x02 */ s16 unk_02; +} unk_D_83079E70_014_000; // size = 0x4 + +typedef struct unk_D_83079E70_000 { + /* 0x00 */ unk_D_83079E70_014_000 unk_00[6]; + /* 0x18 */ struct unk_D_83079E70_000* unk_18; + /* 0x1C */ struct unk_D_83079E70_000* unk_1C; +} unk_D_83079E70_000; // size = 0x20 + +typedef struct unk_D_83079E70 { + /* 0x00 */ s16 unk_00; + /* 0x02 */ s16 unk_02; + /* 0x04 */ s16 unk_04; + /* 0x06 */ s16 unk_06; + /* 0x08 */ s16 unk_08; + /* 0x0A */ s16 unk_0A; + /* 0x0C */ s16 unk_0C; + /* 0x10 */ unk_D_83079E70_000* unk_10; + /* 0x14 */ unk_D_83079E70_000 unk_14[6]; +} unk_D_83079E70; // size = 0xD4 + +extern unk_D_83003CE0 D_83003CE0; +extern unk_D_83003CE0 D_83003DE0; + +extern char** D_830039C0; + +char* func_83000020(s32 arg0); +void func_83000058(void); +void func_83000130(void); +s16* func_83000160(unk_D_800AE540* arg0); +char* func_830003A4(s8 arg0); +char* func_83000418(s8 arg0); +s32 func_830004BC(s16* arg0); +void func_83000508(void); +void func_8300059C(void); +void func_83000710(void); +void func_83000750(void); +s32 func_830007C4(void); +void func_830007F4(void); +void func_83000A30(void); +void func_83000F10(s16 arg0, s16 arg1, s16 arg2, s16 arg3); +void func_83001178(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, u8 arg6); +void func_830014B0(s16 arg0, s16 arg1); +void func_830015EC(s16 arg0, s16 arg1); +void func_830017C0(void); +void func_83001A9C(void); +void func_83001B64(void); +void func_83001C4C(void); +void func_83001CF8(void); +s32 func_83002030(void); +void func_830020D0(void); +s32 func_83002120(UNUSED s32 arg0, UNUSED s32 arg1); + +s32 func_83002270(s8* arg0); +void func_830022B0(void); +void func_83002324(void); +void func_83002370(void); +void func_830023B8(void); +void func_830023CC(void); +void func_8300243C(void); +void func_830025F8(s16 arg0); +s32 func_8300269C(void); +s32 func_830026C0(void); + +s32 func_830026D0(s16 arg0, s16 arg1); +s16 func_830027C8(s16 arg0); +s32 func_83002848(unk_D_83079E70_000* arg0, s16 arg1, s16 arg2); +unk_D_83079E70_000* func_83002950(unk_D_83079E70_000* arg0, s32 arg1); +s32 func_83002974(unk_D_83079E70* arg0); +s32 func_83002A0C(unk_D_83079E70* arg0); +void func_83002AB4(unk_D_83079E70* arg0); +void func_83002B1C(unk_D_83079E70* arg0); +void func_83002BA4(unk_D_83079E70* arg0); +void func_83002C30(unk_D_83079E70* arg0); +void func_83002C74(s16 arg0, s16 arg1, unk_D_83079E70* arg2); +void func_83002F9C(s16 arg0, s16 arg1); +void func_83003054(s16 arg0, s16 arg1, unk_D_83079E70_000* arg2); +void func_830032D8(s32 arg0); +void func_830033F0(void); +void func_83003484(void); +void func_830038DC(void); +s32 func_83003988(void); +s32 func_830039AC(void); + + +#endif // _FRAGMENT55_H_ diff --git a/src/fragments/55/fragment55_2BED40.c b/src/fragments/55/fragment55_2BED40.c index 36637a5..2b55327 100644 --- a/src/fragments/55/fragment55_2BED40.c +++ b/src/fragments/55/fragment55_2BED40.c @@ -1,53 +1,825 @@ -#include "global.h" +#include "fragment55.h" +#include "src/1AB70.h" +#include "src/1CF30.h" +#include "src/20330.h" +#include "src/20470.h" +#include "src/26820.h" +#include "src/2E110.h" +#include "src/3FB0.h" +#include "src/49790.h" +#include "src/controller.h" +#include "src/memory.h" +#include "src/stage_loader.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83000020.s") +static s16 D_83003C80; +static s16 D_83003C82; +static u16 D_83003C84; +static BinArchive* D_83003C88; +static void* D_83003C8C; +static s16 D_83003C90; +static s16 D_83003C92; +static s16 D_83003C94; +static s32 D_83003C98; +static char* D_83003C9C; +static s16* D_83003CA0; +static s16 D_83003CA4; +static s16 D_83003CA6; +static char* D_83003CA8; +static char* D_83003CAC; +static char* D_83003CB0; +static char* D_83003CB4; +static char* D_83003CB8; +static char* D_83003CBC; +static char* D_83003CC0; +static char* D_83003CC4; +static char* D_83003CC8; +static char* D_83003CCC; +static char* D_83003CD0; +static char* D_83003CD4; +static char* D_83003CD8; +static char* D_83003CDC; +unk_D_83003CE0 D_83003CE0; +unk_D_83003CE0 D_83003DE0; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83000058.s") +char** D_830039C0 = NULL; +static char** D_830039C4 = NULL; +static u8 D_830039C8[] = { + 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0F, +}; +static s16 D_830039D4[] = { + 0x0007, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0023, 0xFFFF, +}; +static s16 D_830039E8[] = { + 0x0007, 0x0000, 0x0001, 0x001D, 0x0003, 0x0004, 0x0005, 0x0009, 0x0023, 0xFFFF, +}; +static s16 D_830039FC[] = { + 0x0007, 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0023, 0xFFFF, 0x0000, +}; +static s16 D_83003A10[] = { + 0x000B, 0x0000, 0x0001, 0x000A, 0x0004, 0x0005, 0x0006, 0x0023, 0xFFFF, 0x0000, +}; +static s16 D_83003A24[] = { + 0x000B, 0x0000, 0x0001, 0x001E, 0x0004, 0x0005, 0x0009, 0x0023, 0xFFFF, 0x0000, +}; +static s16 D_83003A38[] = { + 0x000B, 0x0000, 0x0001, 0x000A, 0x0004, 0x0005, 0x0023, 0xFFFF, 0x000E, 0x0000, 0x0001, 0x000C, 0x000D, + 0x0004, 0x0005, 0x0006, 0x0023, 0xFFFF, 0x000E, 0x0000, 0x0001, 0x001F, 0x000D, 0x0004, 0x0005, 0x0009, + 0x0023, 0xFFFF, 0x000E, 0x0000, 0x0001, 0x000C, 0x000D, 0x0004, 0x0005, 0x0023, 0xFFFF, 0x0000, +}; +static s16 D_83003A84[] = { + 0x0013, 0x0000, 0x0001, 0x000F, 0x0010, 0x0011, 0x0012, 0x0004, 0x0005, 0x0006, 0x0023, 0xFFFF, +}; +static s16 D_83003A9C[] = { + 0x0013, 0x0000, 0x0001, 0x0020, 0x0010, 0x0011, 0x0012, 0x0004, 0x0005, 0x0009, 0x0023, 0xFFFF, +}; +static s16 D_83003AB4[] = { + 0x0013, 0x0000, 0x0001, 0x000F, 0x0010, 0x0011, 0x0012, 0x0004, 0x0005, 0x0023, 0xFFFF, 0x0000, +}; +static s16 D_83003ACC[] = { + 0x0000, 0x0001, 0x0016, 0x0017, 0x0004, 0x0005, 0x0006, 0x0023, 0xFFFF, 0x0000, +}; +static s16 D_83003AE0[] = { + 0x0000, 0x0001, 0x0021, 0x0017, 0x0004, 0x0005, 0x0009, 0x0023, 0xFFFF, 0x0000, +}; +static s16 D_83003AF4[] = { + 0x0000, 0x0001, 0x0016, 0x0017, 0x0004, 0x0005, 0x0023, 0xFFFF, +}; +static s16 D_83003B04[] = { + 0x0015, 0x0000, 0x0001, 0x0024, 0x0004, 0x0006, 0x0023, 0xFFFF, +}; +static s16 D_83003B14[] = { + 0x0015, 0x0000, 0x0001, 0x0014, 0x0004, 0x0009, 0x0023, 0xFFFF, +}; +static s16 D_83003B24[] = { + 0x0015, 0x0000, 0x0001, 0x0014, 0x0004, 0x0023, 0xFFFF, 0x0000, +}; +static s16 D_83003B34[] = { + 0x0015, 0x001A, 0x0014, 0x0025, 0x0022, 0x0026, 0x0023, 0xFFFF, +}; +static s16 D_83003B44[] = { + 0x0015, 0x0000, 0x0001, 0x0014, 0x0019, 0x0004, 0x0023, 0xFFFF, +}; +static s16 D_83003B54[] = { + 0x0015, 0x001C, 0x001B, 0x0014, 0x0023, 0xFFFF, +}; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83000130.s") +char* func_83000020(s32 arg0) { + return func_8002D7C0(NULL, 0, D_830039C4, arg0 - 1); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83000160.s") +void func_83000058(void) { + unk_func_80027FA0 sp20; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_830003A4.s") + if (D_800AE540.unk_0000 != 0xA) { + D_83003C88 = func_800044F4(backgrounds_ROM_START, battle_headers_ROM_START, 1, 1); + if (D_800AE540.unk_0000 == 7) { + func_80028AFC(2); + func_80027FA0(&sp20, D_800AE540.unk_11F2); + if (sp20.unk_04 < 8) { + D_83003C8C = func_8000484C(D_83003C88, 0xD); + } else { + D_83003C8C = func_8000484C(D_83003C88, 0x10); + } + } else { + D_83003C8C = func_8000484C(D_83003C88, D_830039C8[D_800AE540.unk_0000]); + } + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83000418.s") +void func_83000130(void) { + Cont_StartReadInputs(); + Cont_ReadInputs(); + func_8001F730(); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_830004BC.s") +s16* func_83000160(unk_D_800AE540* arg0) { + s16* var_v1 = NULL; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83000508.s") + switch (arg0->unk_0001) { + case 1: + switch (arg0->unk_0000) { + case 1: + var_v1 = D_830039D4; + break; + case 10: + var_v1 = D_830039E8; + break; + case 0: + var_v1 = D_830039FC; + break; + } + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_8300059C.s") + case 2: + switch (arg0->unk_0000) { + case 2: + var_v1 = D_83003A10; + break; + case 10: + var_v1 = D_83003A24; + break; + case 0: + var_v1 = D_83003A38; + break; + } + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83000710.s") + case 3: + switch (arg0->unk_0000) { + case 3: + var_v1 = D_830039D4; + break; + case 10: + var_v1 = D_830039E8; + break; + case 0: + var_v1 = D_830039FC; + break; + } + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83000750.s") + case 4: + switch (arg0->unk_0000) { + case 4: + var_v1 = D_83003A84; + break; + case 10: + var_v1 = D_83003A9C; + break; + case 0: + var_v1 = D_83003AB4; + break; + } + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_830007C4.s") + case 5: + switch (arg0->unk_0000) { + case 5: + var_v1 = D_83003ACC; + break; + case 10: + var_v1 = D_83003AE0; + break; + case 0: + var_v1 = D_83003AF4; + break; + } + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_830007F4.s") + case 6: + switch (arg0->unk_0000) { + case 6: + var_v1 = D_83003B04; + break; + case 10: + var_v1 = D_83003B14; + break; + case 0: + var_v1 = D_83003B24; + break; + } + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83000A30.s") + case 0: + switch (arg0->unk_0000) { + case 0: + var_v1 = D_83003B34; + break; + } + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83000F10.s") + case 7: + switch (arg0->unk_0000) { + case 7: + var_v1 = D_83003B44; + break; + } + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83001178.s") + case 8: + switch (arg0->unk_0000) { + case 8: + var_v1 = D_83003B54; + break; + } + break; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_830014B0.s") + return var_v1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_830015EC.s") +char* func_830003A4(s8 arg0) { + char* ret; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_830017C0.s") + switch (arg0) { + case 0: + ret = D_83003CAC; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83001A9C.s") + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + ret = D_83003CA8; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83001B64.s") + case 7: + ret = D_83003CB4; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83001C4C.s") + case 8: + ret = D_83003CB8; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83001CF8.s") + case 10: + ret = D_83003CB0; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83002030.s") + default: + ret = NULL; + break; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_830020D0.s") + return ret; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2BED40/func_83002120.s") +char* func_83000418(s8 arg0) { + char* ret; + + switch (arg0) { + case 0: + ret = D_83003CBC; + break; + + case 1: + ret = D_83003CC0; + break; + + case 2: + ret = D_83003CC4; + break; + + case 3: + ret = D_83003CC8; + break; + + case 4: + ret = D_83003CCC; + break; + + case 5: + ret = D_83003CD0; + break; + + case 6: + ret = D_83003CD4; + break; + + case 7: + ret = D_83003CD8; + break; + + case 8: + ret = D_83003CDC; + break; + + default: + ret = NULL; + break; + } + + return ret; +} + +s32 func_830004BC(s16* arg0) { + s32 ret = 0; + + while (*arg0 != -1) { + if (D_83003DE0.unk_00[*arg0] == '\x00') { + ret = 1; + break; + } + arg0++; + } + + return ret; +} + +void func_83000508(void) { + s32 temp_lo; + + D_83003C82--; + + D_83003C92 = temp_lo = ((0xA - D_83003C82) << 0xA) / 10; + + if (D_83003C84 & 4) { + D_83003C94 = temp_lo; + } + + if (D_83003C82 <= 0) { + D_83003C80 = 1; + D_83003C90 = 2; + } +} + +void func_8300059C(void) { + s16 tmp = D_83003CA6; + + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_DUP)) { + D_83003CA6--; + if (D_83003CA6 < 0) { + D_83003CA6 = D_83003CA4 - 1; + } + } + + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_DDOWN)) { + D_83003CA6++; + if (D_83003CA6 >= D_83003CA4) { + D_83003CA6 = 0; + } + } + + if (D_83003CA6 != tmp) { + func_80048B90(1); + } + + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_A)) { + D_83003C80 = 2; + D_83003C82 = 0; + + if (D_83003DE0.unk_00[D_83003CA0[D_83003CA6]] != NULL) { + func_830025F8(D_83003CA0[D_83003CA6]); + } else { + func_830038DC(); + func_80048B90(4); + } + + func_80048B90(2); + } else if (BTN_IS_PRESSED(gPlayer1Controller, BTN_B)) { + D_83003C80 = 3; + D_83003C82 = 0xA; + D_83003C90 = -1; + func_80048B90(3); + } +} + +void func_83000710(void) { + if ((func_8300269C() == 0) && (func_83003988() == 0)) { + D_83003C80 = 1; + } +} + +void func_83000750(void) { + s32 temp_lo; + + D_83003C82--; + temp_lo = (D_83003C82 << 0xA) / 10; + + D_83003C92 = temp_lo; + if (D_83003C84 & 4) { + D_83003C94 = temp_lo; + } + + if (D_83003C82 <= 0) { + D_83003C80 = 4; + D_83003C82 = 2; + D_83003C90 = -1; + } +} + +s32 func_830007C4(void) { + s32 var_v1 = 0; + + D_83003C82--; + if (D_83003C82 <= 0) { + var_v1 = 1; + } + return var_v1; +} + +void func_830007F4(void) { + gDPPipeSync(gDisplayListHead++); + + gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); + gDPSetTexturePersp(gDisplayListHead++, G_TP_NONE); + gDPSetCombineLERP(gDisplayListHead++, ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, ENVIRONMENT, 0, + ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, ENVIRONMENT, 0); + gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2); + gDPSetEnvColor(gDisplayListHead++, 140, 190, 200, 255); + gDPSetPrimColor(gDisplayListHead++, 0, 0, 110, 160, 170, 255); + gSPClearGeometryMode(gDisplayListHead++, G_ZBUFFER | G_LIGHTING); + + gDPLoadTextureBlock_4b(gDisplayListHead++, D_302EBC0, G_IM_FMT_I, 128, 64, 0, G_TX_NOMIRROR | G_TX_WRAP, + G_TX_NOMIRROR | G_TX_WRAP, 7, 6, G_TX_NOLOD, G_TX_NOLOD); + + func_8001C330(0, 0, 0x280, 0x1E0, 0, 0, 0x400, 0x400, 0); + + gSPDisplayList(gDisplayListHead++, D_8006F630); +} + +void func_83000A30(void) { + UNUSED s32 pad; + s16 temp_s1; + s16 spD8; + + if (D_83003C94 == 0) { + return; + } + + temp_s1 = (((-D_83003C94 * 0x10) + 0x4000) / 1024) + 0x28; + spD8 = (D_83003C94 << 5) / 1024; + + gSPDisplayList(gDisplayListHead++, D_8006F558); + gDPSetEnvColor(gDisplayListHead++, 100, 100, 200, 255); + gDPSetPrimColor(gDisplayListHead++, 0, 0, 40, 40, 140, 255); + + gDPLoadTextureBlock(gDisplayListHead++, D_20003C0, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + func_8001C330(0x38, temp_s1, 0x10, spD8, 0, 0, 0x3F0, 0x8000 / spD8, 0); + + gDPLoadTextureBlock(gDisplayListHead++, D_20005C0, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 32, 0, G_TX_NOMIRROR | G_TX_CLAMP, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + func_8001C330(0x240, temp_s1, 0x10, spD8, 0, 0, 0x400, 0x8000 / spD8, 0); + func_8001C330(0x48, temp_s1, 0x1F8, spD8, 0, 0, 0, 0x8000 / spD8, 0); + + if (D_83003C94 < 0x400) { + gSPDisplayList(gDisplayListHead++, D_8006F630); + } else { + gSPDisplayList(gDisplayListHead++, D_8006F518); + + func_8001C6AC(0x30, temp_s1 - 8, 0x30, 0x18, D_2006C00, 0x30, 0); + func_8001C6AC(0x30, temp_s1 + 0x10, 0x30, 0x18, D_2007500, 0x30, 0); + + gSPDisplayList(gDisplayListHead++, D_8006F630); + + func_8001F3F4(); + func_8001EBE0(0x10, 0); + + if (D_83003C98 != 0) { + char sp48[0x40]; + char* temp_v0_21; + + func_8001F324(0, 0, 0, 0xFF); + func_8002D5D4(0x26, D_83003C98); + temp_v0_21 = func_8002D7C0(sp48, sizeof(sp48), D_830039C0, 0); + func_8001F1E8(0x6A, temp_s1 + 4, temp_v0_21); + func_8001F324(0xFF, 0xFF, 0x77, 0xFF); + func_8001F1E8(0x68, temp_s1 + 2, temp_v0_21); + } + + func_8001F444(); + } +} + +void func_83000F10(s16 arg0, s16 arg1, s16 arg2, s16 arg3) { + gSPDisplayList(gDisplayListHead++, D_8006F518); + + func_8001CADC(arg0 - 7, arg1 - 7, 8, 8, D_2000340, 8, 0); + func_8001CADC((arg0 + arg2) - 1, arg1 - 7, 8, 8, D_2000380, 8, 0); + func_8001C330(arg0 + 1, arg1 - 7, arg2 - 2, 8, 0, 0, 0, 0x400, 0); + func_8001CADC(arg0 - 7, (arg1 + arg3) - 1, 8, 8, D_20002C0, 8, 0); + func_8001C330(arg0 - 7, arg1 + 1, 8, arg3 - 2, 0, 0, 0x400, 0, 0); + func_8001CADC((arg0 + arg2) - 1, (arg1 + arg3) - 1, 8, 8, D_2000300, 8, 0); + func_8001C330(arg0 + 1, (arg1 + arg3) - 1, arg2 - 2, 8, 0, 0, 0, 0x400, 0); + func_8001C330((arg0 + arg2) - 1, arg1 + 1, 8, arg3 - 2, 0, 0, 0x400, 0, 0); + + gSPDisplayList(gDisplayListHead++, D_8006F630); +} + +void func_83001178(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, u8 arg6) { + gSPDisplayList(gDisplayListHead++, D_8006F518); + + gDPSetRenderMode(gDisplayListHead++, G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2); + gDPSetEnvColor(gDisplayListHead++, arg4, arg5, arg6, 255); + + func_8001CADC(arg0, arg1, 8, 8, D_2000B40, 8, 0); + func_8001CADC((arg0 + arg2) - 8, arg1, 8, 8, D_2000B80, 8, 0); + func_8001C330(arg0 + 8, arg1, arg2 - 0x10, 8, 0, 0, 0, 0x400, 0); + func_8001CADC(arg0, (arg1 + arg3) - 8, 8, 8, D_2000BC0, 8, 0); + func_8001C330(arg0, arg1 + 8, 8, arg3 - 0x10, 0, 0, 0x400, 0, 0); + func_8001CADC((arg0 + arg2) - 8, (arg1 + arg3) - 8, 8, 8, D_2000C00, 8, 0); + func_8001C330(arg0 + 8, (arg1 + arg3) - 8, arg2 - 0x10, 8, 0, 0, 0, 0x400, 0); + func_8001C330((arg0 + arg2) - 8, arg1 + 8, 8, arg3 - 0x10, 0, 0, 0x400, 0, 0); + + gSPDisplayList(gDisplayListHead++, D_8006F498); + + func_8001C604(arg0 + 8, arg1 + 8, arg2 - 0x10, arg3 - 0x10, arg4, arg5, arg6, 0xFF); + + gSPDisplayList(gDisplayListHead++, D_8006F630); +} + +void func_830014B0(s16 arg0, s16 arg1) { + gDPLoadTextureTile(gDisplayListHead++, D_4000C40, G_IM_FMT_IA, G_IM_SIZ_8b, 20, 0, 0, 0, 19, 19, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + + func_8001C330(arg0, arg1, 0x14, 0x14, 0, 0, 0x400, 0x400, 0); +} + +void func_830015EC(s16 arg0, s16 arg1) { + s16 tmp; + s32 i; + char sp48[0x40]; + + func_8001EBE0(0x10, 0); + func_8001F324(0xFF, 0xFF, 0xFF, 0xFF); + + if (D_83003C9C != NULL) { + if (D_83003C9C != D_83003CBC) { + func_8002D5D4(0x27, D_83003C9C); + func_8001F1E8(arg0 + 0x10, arg1 + 4, func_8002D7C0(sp48, sizeof(sp48), D_830039C0, 1)); + } else { + func_8001F1E8(arg0 + 0x10, arg1 + 4, D_83003C9C); + } + } + + func_8001F1E8(arg0 + 0x30, arg1 + 0x134, func_8002D7C0(NULL, 0, D_830039C0, 2)); + func_8001EBE0(8, 0); + + for (i = 0; i < D_83003CA4; i++) { + if (i != D_83003CA6) { + func_8001F324(0xFF, 0xFF, 0xFF, 0xFF); + } else { + func_8001F324(0xFF, 0xFF, 0, 0xFF); + } + tmp = D_83003CA0[i]; + func_8001F1E8(arg0 + 0x54, arg1 + 0x26 + i * 0x18, D_83003CE0.unk_00[tmp]); + } +} + +void func_830017C0(void) { + static s16 D_83003B60 = 0; + + s32 i; + s16 temp_s3; + s16 temp_s2; + + if (D_83003C92 == 0) { + return; + } + + temp_s3 = (((-D_83003C92 * 0xA8) + 0x2A000) / 1024) + 0x5C; + temp_s2 = (D_83003C92 * 0x150) / 1024; + func_83000F10(0x38, temp_s3, 0x210, temp_s2); + + if (D_83003C92 >= 0x400) { + func_83001178(0x38, temp_s3, 0x210, 0x20, 0x3C, 0x3C, 0xA0); + func_83001178(0x38, temp_s3 + 0x20, 0x210, 0x110, 0x1E, 0x1E, 0x64); + func_83001178(0x38, temp_s3 + 0x130, 0x210, 0x20, 0x3C, 0x3C, 0xA0); + if ((func_830026C0() == 0) && (func_830039AC() == 0)) { + s16 sins = SINS(D_83003B60) * 3.0f; + + func_800207FC(sins + 0x48, temp_s3 + (D_83003CA6 * 0x18) + 0x2A); + D_83003B60 += 0x1000; + } + + gSPDisplayList(gDisplayListHead++, D_8006F518); + + func_8001C6AC(0x48, temp_s3 + 0x132, 0x1C, 0x1C, D_04000000, 0x1C, 0); + + for (i = 0; i < D_83003CA4; i++) { + func_830014B0(0x74, temp_s3 + 0x28 + i * 0x18); + } + + gSPDisplayList(gDisplayListHead++, D_8006F630); + + func_8001F3F4(); + func_830015EC(0x38, temp_s3); + func_8001F444(); + } +} + +void func_83001A9C(void) { + func_800079C4(); + if (D_83003C90 != 0) { + if (D_800AE540.unk_0000 == 0xA) { + func_830007F4(); + } else { + func_8001D924(D_83003C8C); + } + + func_83000A30(); + + if (D_83003C90 > 0) { + D_83003C90--; + } + } + + if ((func_830026C0() < 0x400) && (func_830039AC() < 0x400)) { + func_830017C0(); + } + + func_8300243C(); + func_83003484(); + func_80007778(); +} + +void func_83001B64(void) { + s32 i; + + for (i = 0; i < 29; i++) { + D_83003CE0.unk_00[i] = func_8002D7C0(NULL, 0, D_830039C0, i + 4); + } + + D_83003CE0.unk_74 = D_83003CE0.unk_00[2]; + D_83003CE0.unk_78 = D_83003CE0.unk_00[10]; + D_83003CE0.unk_7C = D_83003CE0.unk_00[12]; + D_83003CE0.unk_80 = D_83003CE0.unk_00[15]; + D_83003CE0.unk_84 = D_83003CE0.unk_00[22]; + D_83003CE0.unk_88 = D_83003CE0.unk_00[27]; + D_83003CE0.unk_8C = func_8002D7C0(NULL, 0, D_830039C0, 0x21); + D_83003CE0.unk_90 = D_83003CE0.unk_00[20]; + D_83003CE0.unk_94 = D_83003CE0.unk_00[4]; + D_83003CE0.unk_98 = func_8002D7C0(NULL, 0, D_830039C0, 0x22); +} + +void func_83001C4C(void) { + s32 i; + s32 var_s2 = 0; + + for (i = 0; i < 39; i++) { + switch (i) { + case 7: + case 11: + case 14: + case 19: + case 24: + D_83003DE0.unk_00[i] = NULL; + break; + + default: + D_83003DE0.unk_00[i] = func_8002D7C0(NULL, 0, D_830039C0, var_s2 + 0x23); + var_s2++; + break; + } + } +} + +void func_83001CF8(void) { + D_83003C80 = 0; + D_83003C82 = 0xA; + D_83003C90 = -1; + D_83003C92 = 0; + func_80048B90(4); + D_83003C98 = 0; + D_83003C9C = NULL; + D_83003CA6 = 0; + D_83003C84 = 0; + + D_83003CA0 = func_83000160(&D_800AE540); + if (D_83003CA0 == 0) { + D_83003CA4 = 0; + } else { + D_83003CA4 = 0; + while (D_83003CA0[D_83003CA4] != -1) { + D_83003CA4++; + } + } + + func_83001B64(); + func_83001C4C(); + + D_83003CA8 = func_8002D7C0(NULL, 0, D_830039C0, 0x46); + D_83003CAC = func_8002D7C0(NULL, 0, D_830039C0, 0x45); + D_83003CB0 = func_8002D7C0(NULL, 0, D_830039C0, 0x49); + D_83003CB4 = func_8002D7C0(NULL, 0, D_830039C0, 0x47); + D_83003CB8 = func_8002D7C0(NULL, 0, D_830039C0, 0x48); + D_83003CBC = func_8002D7C0(NULL, 0, D_830039C0, 0x4A); + D_83003CC0 = func_8002D7C0(NULL, 0, D_830039C0, 0x4D); + D_83003CC4 = func_8002D7C0(NULL, 0, D_830039C0, 0x4C); + D_83003CC8 = func_8002D7C0(NULL, 0, D_830039C0, 0x4B); + D_83003CCC = func_8002D7C0(NULL, 0, D_830039C0, 0x4E); + D_83003CD0 = func_8002D7C0(NULL, 0, D_830039C0, 0x4F); + D_83003CD4 = func_8002D7C0(NULL, 0, D_830039C0, 0x50); + + D_83003CD8 = D_83003CB4; + D_83003CDC = D_83003CB8; + + D_83003C98 = func_830003A4(D_800AE540.unk_0000); + D_83003C9C = func_83000418(D_800AE540.unk_0001); + + if (D_800AE540.unk_11F2 != 0) { + D_83003C84 |= 1; + } + + if (func_830004BC(D_83003CA0) != 0) { + D_83003C84 |= 2; + } + + if (D_83003C84 & 4) { + D_83003C94 = 0; + } else { + D_83003C94 = 0x400; + } + + func_830023B8(); + + func_830032D8((D_83003C84 & 2) ? 1 : 0); +} + +s32 func_83002030(void) { + s32 sp1C = 1; + + switch (D_83003C80) { + case 0: + func_83000508(); + break; + + case 1: + func_8300059C(); + break; + + case 2: + func_83000710(); + break; + + case 3: + func_83000750(); + break; + + case 4: + if (func_830007C4() != 0) { + sp1C = 0; + } + break; + } + return sp1C; +} + +void func_830020D0(void) { + func_83001CF8(); + do { + func_83000130(); + func_830023CC(); + func_830033F0(); + func_83001A9C(); + } while (func_83002030() != 0); +} + +s32 func_83002120(UNUSED s32 arg0, UNUSED s32 arg1) { + main_pool_push_state('EXPL'); + + func_8001E94C(0x1C, 0); + + ASSET_LOAD(D_1000000, common_menu1_ui, 0); + ASSET_LOAD(D_2000000, common_menu2_ui, 0); + ASSET_LOAD(D_3000000, menu_select_ui, 0); + ASSET_LOAD(D_04000000, rental_rules_ui, 0); + + func_83000058(); + func_8001B058(); + func_8002D510(); + D_830039C0 = func_8002D5AC(0x20); + D_830039C4 = func_8002D5AC(0x24); + func_80007754(); + func_830020D0(); + func_8000771C(); + + main_pool_pop_state('EXPL'); + + return 0; +} diff --git a/src/fragments/55/fragment55_2C0F90.c b/src/fragments/55/fragment55_2C0F90.c index 6456c96..85cc177 100644 --- a/src/fragments/55/fragment55_2C0F90.c +++ b/src/fragments/55/fragment55_2C0F90.c @@ -1,21 +1,120 @@ -#include "global.h" +#include "fragment55.h" +#include "src/1CF30.h" +#include "src/49790.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C0F90/func_83002270.s") +static s16 D_83003EE0; +static s16 D_83003EE2; +static s16 D_83003EE4; +static s16 D_83003EE6; +static s16 D_83003EE8; +static s16 D_83003EEA; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C0F90/func_830022B0.s") +s32 func_83002270(s8* arg0) { + s16 var_v1 = 1; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C0F90/func_83002324.s") + while (*arg0 != 0) { + if (*arg0 == '\n') { + var_v1++; + } + arg0++; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C0F90/func_83002370.s") + return var_v1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C0F90/func_830023B8.s") +void func_830022B0(void) { + D_83003EE2--; + D_83003EE6 = ((5 - D_83003EE2) << 0xA) / 5; + if (D_83003EE2 <= 0) { + D_83003EE0 = 2; + D_83003EE2 = 0; + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C0F90/func_830023CC.s") +void func_83002324(void) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_A | BTN_B)) { + D_83003EE0 = 3; + D_83003EE2 = 5; + func_80048B90(3); + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C0F90/func_8300243C.s") +void func_83002370(void) { + D_83003EE2--; + D_83003EE6 = (D_83003EE2 << 0xA) / 5; + if (D_83003EE2 <= 0) { + D_83003EE0 = 0; + D_83003EE2 = 0; + } +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C0F90/func_830025F8.s") +void func_830023B8(void) { + D_83003EE0 = 0; + D_83003EE6 = 0; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C0F90/func_8300269C.s") +void func_830023CC(void) { + if (D_83003EE0 != 0) { + switch (D_83003EE0) { + case 1: + func_830022B0(); + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C0F90/func_830026C0.s") + case 2: + func_83002324(); + break; + + case 3: + func_83002370(); + break; + } + } +} + +void func_8300243C(void) { + s16 temp_s0; + + if (D_83003EE6 != 0) { + temp_s0 = D_83003EE8 + (((D_83003EEA / 2) * (0x400 - D_83003EE6)) / 1024); + func_83000F10(0x48, temp_s0, 0x1F0, (D_83003EEA * D_83003EE6) / 1024); + if (D_83003EE6 >= 0x400) { + func_83001178(0x48, temp_s0, 0x1F0, 0x20, 0x1E, 0x64, 0x64); + func_83001178(0x48, temp_s0 + 0x20, 0x1F0, D_83003EEA - 0x20, 0x3C, 0x3C, 0xA0); + func_8001F3F4(); + func_8001EBE0(8, 0); + func_8001F324(0xFF, 0xFF, 0xFF, 0xFF); + func_8001F3B4(0x18); + func_8001F1E8(0x50, temp_s0 + 6, D_83003CE0.unk_00[D_83003EE4]); + func_8001EBE0(8, 0); + func_8001F1E8(0x50, temp_s0 + 0x28, D_83003DE0.unk_00[D_83003EE4]); + func_8001F444(); + } + } +} + +void func_830025F8(s16 arg0) { + s32 tmp; + + D_83003EE0 = 1; + D_83003EE2 = 5; + D_83003EE6 = 0; + D_83003EE4 = arg0; + tmp = (func_83002270(D_83003DE0.unk_00[D_83003EE4]) * 0x18); + D_83003EEA = 0x2C + tmp; + D_83003EE8 = ((0x1E0 - D_83003EEA) / 2) + 0x14; +} + +s32 func_8300269C(void) { + s32 ret; + + if (D_83003EE0 != 0) { + ret = 1; + } else { + ret = 0; + } + return ret; +} + +s32 func_830026C0(void) { + return D_83003EE6; +} diff --git a/src/fragments/55/fragment55_2C13F0.c b/src/fragments/55/fragment55_2C13F0.c index df426b4..ac72da6 100644 --- a/src/fragments/55/fragment55_2C13F0.c +++ b/src/fragments/55/fragment55_2C13F0.c @@ -1,39 +1,450 @@ -#include "global.h" +#include "fragment55.h" +#include "src/1AB70.h" +#include "src/1CF30.h" +#include "src/20470.h" +#include "src/22630.h" +#include "src/2E110.h" +#include "src/49790.h" +#include "src/6BC0.h" -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_830026D0.s") +static u16 D_83003EF0[151][0x640]; +static unk_D_83079E70 D_83079E70; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_830027C8.s") +s32 func_830026D0(s16 arg0, s16 arg1) { + s32 var_v1; + s16 sp2; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83002848.s") + if ((arg0 <= 0) || (arg0 >= 0x98)) { + return 0; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83002950.s") + var_v1 = 0; + switch (arg1) { + case 0: + var_v1 = 1; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83002974.s") + case 1: + sp2 = 1; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83002A0C.s") + case 2: + sp2 = 2; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83002AB4.s") + case 3: + sp2 = 1; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83002B1C.s") + case 4: + sp2 = 8; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83002BA4.s") + case 5: + sp2 = 0x10; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83002C30.s") + case 6: + sp2 = 0x20; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83002C74.s") + case 7: + var_v1 = 1; + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83002F9C.s") + case 8: + var_v1 = 1; + break; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83003054.s") + if (var_v1 == 0) { + if (D_8006FEE8[arg0][8] & sp2) { + var_v1 = 1; + } else { + var_v1 = 0; + } + } + return var_v1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_830032D8.s") +s16 func_830027C8(s16 arg0) { + s16 i; + s16 var_s1 = 0; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_830033F0.s") + for (i = 1; i < 152; i++) { + if (func_830026D0(i, arg0) != 0) { + var_s1++; + } + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83003484.s") + return var_s1; +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_830038DC.s") +s32 func_83002848(unk_D_83079E70_000* arg0, s16 arg1, s16 arg2) { + s32 i; + s16 var_a0; + s32 var_s1; + s32 var_s3; -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_83003988.s") + for (i = 0; i < 6; i++) { + arg0->unk_00[i].unk_00 = 0; + arg0->unk_00[i].unk_02 = 0; + } -#pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/55/fragment55_2C13F0/func_830039AC.s") + var_s3 = 0; + var_s1 = (arg1 * 6) + 1; + for (i = 0; i < 6; i++, var_s1++) { + var_a0 = var_s1; + if ((var_a0 <= 0) || (var_a0 >= 0x98)) { + var_a0 = 0; + } else { + var_s3++; + } + arg0->unk_00[i].unk_00 = var_a0; + + if (func_830026D0(var_a0, arg2) != 0) { + arg0->unk_00[i].unk_02 = 1; + } else { + arg0->unk_00[i].unk_02 = 0; + } + } + + return var_s3; +} + +unk_D_83079E70_000* func_83002950(unk_D_83079E70_000* arg0, s32 arg1) { + while (arg1-- > 0) { + arg0 = arg0->unk_18; + } + + return arg0; +} + +s32 func_83002974(unk_D_83079E70* arg0) { + s32 sp1C = 0; + + if (func_83002848(arg0->unk_10->unk_1C, arg0->unk_08 - 1, D_800AE540.unk_0001) > 0) { + arg0->unk_00 = 3; + arg0->unk_02 = 4; + arg0->unk_08--; + arg0->unk_10 = arg0->unk_10->unk_1C; + arg0->unk_0A = -1; + arg0->unk_0C = -1; + sp1C = 1; + func_80048B90(1); + } + + return sp1C; +} + +s32 func_83002A0C(unk_D_83079E70* arg0) { + s32 sp1C = 0; + + if (func_83002848(func_83002950(arg0->unk_10, 5), arg0->unk_08 + 5, D_800AE540.unk_0001) > 0) { + arg0->unk_00 = 3; + arg0->unk_02 = 4; + arg0->unk_08++; + arg0->unk_10 = arg0->unk_10->unk_18; + arg0->unk_0A = 1; + arg0->unk_0C = -1; + sp1C = 1; + func_80048B90(1); + } + + return sp1C; +} + +void func_83002AB4(unk_D_83079E70* arg0) { + arg0->unk_02--; + arg0->unk_04 = ((5 - arg0->unk_02) << 0xA) / 5; + if (arg0->unk_02 <= 0) { + arg0->unk_00 = 2; + arg0->unk_02 = 0; + arg0->unk_0C = 2; + } +} + +void func_83002B1C(unk_D_83079E70* arg0) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_A | BTN_B)) { + arg0->unk_00 = 4; + arg0->unk_02 = 5; + arg0->unk_0C = -1; + func_80048B90(3); + } else if (BTN_IS_DOWN(gPlayer1Controller, BTN_DUP)) { + func_83002974(arg0); + } else if (BTN_IS_DOWN(gPlayer1Controller, BTN_DDOWN)) { + func_83002A0C(arg0); + } +} + +void func_83002BA4(unk_D_83079E70* arg0) { + s32 var_v1; + + arg0->unk_02--; + if (arg0->unk_02 <= 0) { + var_v1 = 0; + if (BTN_IS_DOWN(gPlayer1Controller, BTN_DUP)) { + var_v1 = func_83002974(arg0); + } else if (BTN_IS_DOWN(gPlayer1Controller, BTN_DDOWN)) { + var_v1 = func_83002A0C(arg0); + } + + if (var_v1 == 0) { + arg0->unk_00 = 2; + arg0->unk_02 = 0; + arg0->unk_0C = 2; + } + } +} + +void func_83002C30(unk_D_83079E70* arg0) { + arg0->unk_02--; + arg0->unk_04 = (arg0->unk_02 << 0xA) / 5; + if (arg0->unk_02 <= 0) { + arg0->unk_00 = 0; + arg0->unk_02 = 0; + arg0->unk_0C = -1; + } +} + +void func_83002C74(s16 arg0, s16 arg1, unk_D_83079E70* arg2) { + static s16 D_83003B70 = 0; + + s16 temp_t0; + + gSPDisplayList(gDisplayListHead++, D_8006F558); + gDPSetEnvColor(gDisplayListHead++, 130, 130, 220, 255); + gDPSetPrimColor(gDisplayListHead++, 0, 0, 60, 60, 150, 255); + + func_8001CADC(arg0, arg1, 0x10, 8, D_200A200, 0x10, 0); + func_8001CADC(arg0, arg1 + 0x114, 0x10, 8, D_200A280, 0x10, 0); + func_8001C330(arg0, arg1 + 8, 0x10, 0x10C, 0, 0, 0x400, 0, 0); + + if (arg2->unk_00 != 3) { + temp_t0 = (arg2->unk_08 * 0x10C) / 21; + } else if (arg2->unk_0A > 0) { + temp_t0 = (((arg2->unk_08 * 4) - arg2->unk_02) * 0x10C) / 84; + } else { + temp_t0 = (((arg2->unk_08 * 4) + arg2->unk_02) * 0x10C) / 84; + } + + gSPDisplayList(gDisplayListHead++, D_8006F518); + + if (D_83003B70 < 4) { + func_8001C6AC(arg0 - 4, (arg1 + temp_t0) - 4, 0x18, 0x18, D_200A300, 0x18, 0); + } else { + func_8001C6AC(arg0 - 4, (arg1 + temp_t0) - 4, 0x18, 0x18, D_200A780, 0x18, 0); + } + + gSPDisplayList(gDisplayListHead++, D_8006F630); + + func_8001F3F4(); + D_83003B70 = (D_83003B70 + 1) % 8; +} + +void func_83002F9C(s16 arg0, s16 arg1) { + gDPPipeSync(gDisplayListHead++); + + gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2); + gDPSetEnvColor(gDisplayListHead++, 60, 60, 160, 255); + + func_8001CF10(arg0, arg1, 0x20, 0x14, D_4000DD0, 0x20, 0); +} + +void func_83003054(s16 arg0, s16 arg1, unk_D_83079E70_000* arg2) { + UNUSED s32 pad; + s32 i; + Color_RGB8* var_v0; + Color_RGB8 sp78 = { 0x3C, 0x3C, 0xA0 }; + Color_RGB8 sp74 = { 0x64, 0x1E, 0x1E }; + Color_RGB8 sp70 = { 0x1E, 0x1E, 0x64 }; + s16 temp_s0; + + for (i = 0; i < 6; i++) { + if (arg2->unk_00[i].unk_00 != 0) { + if (arg2->unk_00[i].unk_02 != 0) { + var_v0 = &sp78; + } else { + var_v0 = &sp74; + } + } else { + var_v0 = &sp70; + } + func_83001178(arg0 + i * 0x54, arg1, 0x54, 0x3C, var_v0->r, var_v0->g, var_v0->b); + } + + gSPDisplayList(gDisplayListHead++, D_8006F518); + + for (i = 0; i < 6; i++) { + temp_s0 = arg2->unk_00[i].unk_00; + if (temp_s0 != NULL) { + func_8001C6AC(arg0 + (i * 0x54) + 0x16, arg1 + 3, 0x28, 0x28, D_83003EF0[temp_s0 - 1], 0x28, 0); + } + } + + gSPDisplayList(gDisplayListHead++, D_8006F630); + + func_8001F3F4(); + func_8001EBE0(4, 0); + func_8001F324(0xFF, 0xFF, 0xFF, 0xFF); + + for (i = 0; i < 6; i++) { + temp_s0 = arg2->unk_00[i].unk_00; + if (temp_s0 != NULL) { + func_8001F1E8(arg0 + (i * 0x54) + 2, arg1 + 0x2A, func_83000020(temp_s0)); + } + } + + func_8001F444(); +} + +void func_830032D8(s32 arg0) { + unk_D_83079E70* ptr = &D_83079E70; + s32 i; + + ptr->unk_00 = 0; + ptr->unk_04 = 0; + + for (i = 0; i < 6; i++) { + ptr->unk_14[i].unk_18 = &ptr->unk_14[(i + 1) % 6]; + ptr->unk_14[i].unk_1C = &ptr->unk_14[(i + 5) % 6]; + } + + if (arg0 != 0) { + for (i = 0; i < 151; i++) { + func_8001B0DC(D_83003EF0[i], i + 1, NULL); + } + } +} + +void func_830033F0(void) { + unk_D_83079E70* ptr = &D_83079E70; + + if (ptr->unk_00 != 0) { + switch (ptr->unk_00) { + case 1: + func_83002AB4(&D_83079E70); + break; + + case 2: + func_83002B1C(&D_83079E70); + break; + + case 3: + func_83002BA4(&D_83079E70); + break; + + case 4: + func_83002C30(&D_83079E70); + break; + } + } +} + +void func_83003484(void) { + s16 spA6; + s16 spA4; + unk_D_83079E70* ptr = &D_83079E70; + + if (ptr->unk_04 == 0) { + return; + } + + spA6 = (((0x400 - ptr->unk_04) * 0x108) / 1024) + 0x38; + spA4 = (((0x400 - ptr->unk_04) * 0xA8) / 1024) + 0x5C; + func_83000F10(spA6, spA4, (ptr->unk_04 * 0x210) / 1024, (ptr->unk_04 * 0x150) / 1024); + + if (ptr->unk_04 >= 0x400) { + UNUSED s32 pad; + s32 i; + unk_D_83079E70_000* var_s0; + + func_83001178(spA6, spA4, 0x210, 0x24, 0x1E, 0x64, 0x64); + func_83001178(spA6, spA4 + 0x24, 0x18, 0x12C, 0x1E, 0x1E, 0x64); + func_83002C74(spA6 + 4, spA4 + 0x2C, ptr); + + gSPDisplayList(gDisplayListHead++, D_8006F518); + + func_83002F9C(spA6 + 8, spA4 + 8); + + gSPDisplayList(gDisplayListHead++, D_8006F630); + + func_8001F3F4(); + func_8001F324(0xFF, 0xFF, 0xFF, 0xFF); + func_8001EBE0(8, 0); + func_8002D600(3, ptr->unk_06); + { + char sp4C[64]; + func_8001F1E8(spA6 + 0x2C, spA4 + 8, func_8002D7C0(sp4C, sizeof(sp4C), D_830039C0, 3)); + } + func_8001F444(); + + if (ptr->unk_0C == 0) { + return; + } + + if (ptr->unk_00 == 3) { + s16 sp4A = spA4 - ((ptr->unk_0A * 0x3C * (4 - ptr->unk_02)) / 4); + func_800060E0(&gDisplayListHead, spA6 + 0x18, spA4 + 0x24, 0x1F8, 0x12C); + if (ptr->unk_0A > 0) { + var_s0 = ptr->unk_10->unk_1C; + for (i = 0; i < 6; i++) { + func_83003054(spA6 + 0x18, sp4A + 0x24 + i * 0x3C, var_s0); + var_s0 = var_s0->unk_18; + } + } else { + var_s0 = ptr->unk_10; + for (i = 0; i < 6; i++) { + func_83003054(spA6 + 0x18, sp4A - 0x18 + i * 0x3C, var_s0); + var_s0 = var_s0->unk_18; + } + } + func_800060E0(&gDisplayListHead, 0, 0, 0x280, 0x1E0); + } else { + var_s0 = ptr->unk_10; + for (i = 0; i < 5; i++) { + func_83003054(spA6 + 0x18, spA4 + 0x24 + i * 0x3C, var_s0); + var_s0 = var_s0->unk_18; + } + } + + if (ptr->unk_0C > 0) { + ptr->unk_0C -= 1; + } + } + + if (1) {} +} + +void func_830038DC(void) { + unk_D_83079E70* ptr = &D_83079E70; + s32 i; + + ptr->unk_00 = 1; + ptr->unk_02 = 5; + ptr->unk_04 = 0; + ptr->unk_08 = 0; + ptr->unk_0A = 0; + ptr->unk_0C = -1; + ptr->unk_06 = func_830027C8(D_800AE540.unk_0001); + ptr->unk_10 = &ptr->unk_14[0]; + + for (i = 0; i < 5; i++) { + func_83002848(&ptr->unk_14[i], i, D_800AE540.unk_0001); + } +} + +s32 func_83003988(void) { + s32 ret; + + if (D_83079E70.unk_00 != 0) { + ret = 1; + } else { + ret = 0; + } + return ret; +} + +s32 func_830039AC(void) { + return D_83079E70.unk_04; +} diff --git a/yamls/us/rom.yaml b/yamls/us/rom.yaml index 15b95bf..cd47685 100644 --- a/yamls/us/rom.yaml +++ b/yamls/us/rom.yaml @@ -1962,10 +1962,14 @@ - [0x2BED40, c, fragments/55/fragment55_2BED40] - [0x2C0F90, c, fragments/55/fragment55_2C0F90] - [0x2C13F0, c, fragments/55/fragment55_2C13F0] - - [0x2C26E0, data, fragments/55/fragment55_data] - - [0x2C28A0, rodata, fragments/55/fragment55_rodata] + - [0x2C26E0, .data, fragments/55/fragment55_2BED40] + - [0x2C2890, .data, fragments/55/fragment55_2C13F0] + - [0x2C28A0, .rodata, fragments/55/fragment55_2BED40] + - [0x2C2970, .rodata, fragments/55/fragment55_2C13F0] - - {vram: 0x83003C80, type: bss, name: fragments/55/fragment55_bss} + - {vram: 0x83003C80, type: .bss, name: fragments/55/fragment55_2BED40} + - {vram: 0x83003EE0, type: .bss, name: fragments/55/fragment55_2C0F90} + - {vram: 0x83003EF0, type: .bss, name: fragments/55/fragment55_2C13F0} - name: fragment55_relocs type: code