From eed9d1fe6bb80a1c50f30974ba906ad97ba657d3 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 17 Aug 2020 18:55:37 -0500 Subject: [PATCH] Decompile more chooseFile.c --- asm/chooseFile.s | 292 ------------------------------------------- include/structures.h | 10 +- src/chooseFile.c | 146 +++++++++++++++++++++- 3 files changed, 151 insertions(+), 297 deletions(-) diff --git a/asm/chooseFile.s b/asm/chooseFile.s index 3acaceed..d23c0314 100755 --- a/asm/chooseFile.s +++ b/asm/chooseFile.s @@ -5,298 +5,6 @@ .text - thumb_func_start sub_0805070C -sub_0805070C: @ 0x0805070C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - bl sub_0805F2C8 - adds r5, r0, #0 - cmp r5, #0 - beq _0805077A - movs r0, #0 - strb r0, [r5, #2] - movs r0, #5 - strb r0, [r5, #3] - movs r0, #1 - strb r0, [r5, #1] - movs r0, #0x30 - strh r0, [r5, #4] - ldr r0, _08050780 @ =gUnk_02000D00 - str r0, [r5, #8] - movs r6, #0 -_08050732: - movs r0, #0 - strh r0, [r5, #6] - ldr r0, [r5, #8] - movs r1, #0x80 - lsls r1, r1, #2 - bl _DmaZero - ldr r0, _08050784 @ =0x000004B4 - adds r1, r6, #0 - muls r1, r0, r1 - ldr r0, _08050788 @ =gUnk_02019F6C - adds r7, r1, r0 - movs r4, #0 - lsls r0, r6, #9 - mov r8, r0 - adds r6, #1 -_08050752: - adds r0, r7, r4 - ldrb r0, [r0] - adds r1, r5, #0 - bl sub_0805F7DC - adds r4, #1 - cmp r4, #5 - ble _08050752 - ldr r0, [r5, #8] - ldr r1, _0805078C @ =0x06014000 - add r1, r8 - movs r2, #0x80 - lsls r2, r2, #2 - bl sub_0801D66C - cmp r6, #2 - bls _08050732 - adds r0, r5, #0 - bl sub_0805F300 -_0805077A: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08050780: .4byte gUnk_02000D00 -_08050784: .4byte 0x000004B4 -_08050788: .4byte gUnk_02019F6C -_0805078C: .4byte 0x06014000 - - thumb_func_start sub_08050790 -sub_08050790: @ 0x08050790 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - bl sub_0805F2C8 - adds r6, r0, #0 - cmp r6, #0 - beq _080507F0 - movs r0, #0 - strb r0, [r6, #2] - movs r0, #5 - strb r0, [r6, #3] - movs r0, #1 - strb r0, [r6, #1] - movs r0, #0x80 - strh r0, [r6, #4] - ldr r0, _080507F8 @ =gUnk_02000D00 - str r0, [r6, #8] - movs r1, #0 -_080507B6: - movs r0, #0 - strh r0, [r6, #6] - lsls r4, r1, #4 - movs r5, #0 - lsls r7, r1, #0xa - adds r1, #1 - mov r8, r1 -_080507C4: - adds r0, r4, #0 - adds r1, r6, #0 - bl sub_0805F7DC - adds r4, #1 - adds r5, #1 - cmp r5, #0xf - bls _080507C4 - movs r0, #0xc0 - lsls r0, r0, #0x13 - adds r1, r7, r0 - ldr r0, _080507F8 @ =gUnk_02000D00 - movs r2, #0x80 - lsls r2, r2, #3 - bl sub_0801D66C - mov r1, r8 - cmp r1, #0xf - bls _080507B6 - adds r0, r6, #0 - bl sub_0805F300 -_080507F0: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080507F8: .4byte gUnk_02000D00 - - thumb_func_start sub_080507FC -sub_080507FC: @ 0x080507FC - ldr r0, _0805080C @ =gUnk_0200AF00 - movs r1, #0xa0 - lsls r1, r1, #1 - strh r1, [r0, #0x1a] - movs r1, #0x24 - strh r1, [r0, #0x20] - bx lr - .align 2, 0 -_0805080C: .4byte gUnk_0200AF00 - - thumb_func_start sub_08050810 -sub_08050810: @ 0x08050810 - ldr r0, _0805081C @ =gUnk_0200AF00 - movs r1, #0xd0 - strh r1, [r0, #0x1a] - movs r1, #0x24 - strh r1, [r0, #0x20] - bx lr - .align 2, 0 -_0805081C: .4byte gUnk_0200AF00 - - thumb_func_start sub_08050820 -sub_08050820: @ 0x08050820 - push {lr} - ldr r1, _0805083C @ =gUnk_080FC8FC - ldr r0, _08050840 @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - ldr r0, _08050844 @ =gUnk_02019EE0 - ldrb r0, [r0, #6] - bl sub_08050A64 - pop {pc} - .align 2, 0 -_0805083C: .4byte gUnk_080FC8FC -_08050840: .4byte gMenu -_08050844: .4byte gUnk_02019EE0 - - thumb_func_start sub_08050848 -sub_08050848: @ 0x08050848 - push {lr} - movs r0, #7 - bl sub_080503A8 - bl sub_0805070C - ldr r0, _08050868 @ =gUnk_02019EE0 - movs r1, #0 - strb r1, [r0, #7] - ldrb r0, [r0, #6] - bl sub_08050AFC - movs r0, #1 - bl sub_080A7114 - pop {pc} - .align 2, 0 -_08050868: .4byte gUnk_02019EE0 - - thumb_func_start sub_0805086C -sub_0805086C: @ 0x0805086C - push {lr} - ldr r1, _08050880 @ =gUnk_080FC908 - ldr r0, _08050884 @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08050880: .4byte gUnk_080FC908 -_08050884: .4byte gMenu - - thumb_func_start sub_08050888 -sub_08050888: @ 0x08050888 - push {r4, lr} - ldr r0, _080508C4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080508DC - ldr r4, _080508C8 @ =gUnk_02019EE0 - ldrb r1, [r4, #7] - adds r0, r4, #0 - adds r0, #8 - adds r0, r1, r0 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _080508D0 - cmp r0, #1 - beq _080508D6 - adds r0, r1, #0 - bl sub_0805194C - ldrb r1, [r4, #7] - adds r1, #1 - movs r0, #0 - bl sub_08050318 - ldr r1, _080508CC @ =gMenu - movs r0, #0x1e - strh r0, [r1, #8] - movs r0, #1 - b _080508DA - .align 2, 0 -_080508C4: .4byte gFadeControl -_080508C8: .4byte gUnk_02019EE0 -_080508CC: .4byte gMenu -_080508D0: - adds r0, r1, #0 - bl sub_0805194C -_080508D6: - ldr r1, _080508E0 @ =gMenu - movs r0, #2 -_080508DA: - strb r0, [r1, #6] -_080508DC: - pop {r4, pc} - .align 2, 0 -_080508E0: .4byte gMenu - - thumb_func_start sub_080508E4 -sub_080508E4: @ 0x080508E4 - push {lr} - ldr r2, _08050900 @ =gMenu - ldrh r0, [r2, #8] - cmp r0, #0 - bne _08050908 - ldr r0, _08050904 @ =gUnk_03000FF0 - ldrh r1, [r0, #2] - movs r0, #9 - ands r0, r1 - cmp r0, #0 - beq _0805090C - movs r0, #2 - strb r0, [r2, #6] - b _0805090C - .align 2, 0 -_08050900: .4byte gMenu -_08050904: .4byte gUnk_03000FF0 -_08050908: - subs r0, #1 - strh r0, [r2, #8] -_0805090C: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08050910 -sub_08050910: @ 0x08050910 - push {lr} - bl sub_08050384 - ldr r1, _08050930 @ =gUnk_02019EE0 - ldrb r0, [r1, #7] - adds r0, #1 - strb r0, [r1, #7] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #2 - bls _08050934 - movs r0, #2 - bl sub_080A7114 - b _0805093A - .align 2, 0 -_08050930: .4byte gUnk_02019EE0 -_08050934: - ldr r1, _0805093C @ =gMenu - movs r0, #0 - strb r0, [r1, #6] -_0805093A: - pop {pc} - .align 2, 0 -_0805093C: .4byte gMenu - thumb_func_start sub_08050940 sub_08050940: @ 0x08050940 push {r4, r5, r6, lr} diff --git a/include/structures.h b/include/structures.h index 32ae8d74..bc07b4e8 100644 --- a/include/structures.h +++ b/include/structures.h @@ -45,7 +45,9 @@ typedef struct { /*0x040*/ u32 windcrests; /*0x044*/ u8 filler44[0xC]; /*0x050*/ u32 unk50; - /*0x054*/ u8 filler54[0x54]; + /*0x054*/ u8 filler54[0x2C]; + /*0x080*/ u8 playerName[6]; + /*0x086*/ u8 filler86[0x22]; /*0x0A8*/ Stats stats; /*0x0D0*/ u8 fillerD0[0x3c0]; /*0x490*/ u32 unk490; @@ -134,7 +136,11 @@ typedef struct { extern struct_03000FD0 gFadeControl; typedef struct { - u8 unk0[0x24]; + u8 filler0[0x1A]; + u16 unk1A; + u8 filler1C[0x4]; + u16 unk20; + u8 filler22[0x2]; u8 ezloNagFuncIndex; u8 filler25[0x30F]; } struct_0200AF00; diff --git a/src/chooseFile.c b/src/chooseFile.c index 6df4fec6..256e0da5 100755 --- a/src/chooseFile.c +++ b/src/chooseFile.c @@ -1,15 +1,30 @@ #include "global.h" #include "functions.h" #include "main.h" +#include "readKeyInput.h" #include "screen.h" typedef struct { - u8 filler0[0x30]; + u8 filler0[0x5]; + u8 state; + u8 subState; + u16 timer; + u8 fillerA[0x26]; } ChooseFileState; // TODO: This occupies the same memory region as gMenu extern ChooseFileState gChooseFileState; +typedef struct { + u8 filler0[0x1]; + u8 unk1; + u8 unk2; + u8 unk3; + u16 unk4; + u16 unk6; + u8* unk8; +} struct_02036540; + typedef struct { u8 filler0[0x10]; u16 unk10; @@ -30,24 +45,31 @@ extern struct_02034CB0 gUnk_02034CB0; extern struct_02034CB0 gUnk_02021F30; extern SaveFile gSaveFiles[]; extern u32 gUsedPalettes; +extern u8 gUnk_02000D00[]; static void sub_08050624(u32); static void sub_0805066C(void); +static void sub_080507FC(void); extern void sub_0801D66C(const void* src, void* dest, u32 size); extern void sub_08056FEC(u32, struct_020227E8*); extern void sub_0805F46C(u32, struct_080FC844*); extern void sub_0801C4A0(u32, u32); -extern void sub_0801D66C(const void* src, void* dest, u32 size); -extern void sub_080507FC(void); extern void sub_08080668(void); extern void sub_0805194C(u32); extern void LoadPalettes(const u8*, int, int); +extern struct_02036540* sub_0805F2C8(void); +extern void sub_0805F7DC(u32, struct_02036540*); +extern void sub_0805F300(struct_02036540*); +extern void sub_08050A64(u32); +extern void sub_08050AFC(u32); extern const struct_080FC844 gUnk_080FC844; extern const u16 gUnk_080FC85C[][3]; extern void (*const gUnk_080FC8A4[])(void); extern void (*const gUnk_080FC8B0[])(void); +extern void (*const gUnk_080FC8FC[])(void); +extern void (*const gUnk_080FC908[])(void); extern const u8 gUnk_080FC8D0[]; extern const u16 gUnk_080FC8DE[]; extern const u8 gGlobalGfxAndPalettes[]; @@ -234,3 +256,121 @@ static void sub_0805066C(void) { LoadPalettes(&paletteOffset[0x11DA0], 14, 1); } } + +void sub_0805070C(void) { + u32 i; + int j; + struct_02036540* var0; + u8* playerName; + + var0 = sub_0805F2C8(); + if (var0) { + var0->unk2 = 0; + var0->unk3 = 5; + var0->unk1 = 1; + var0->unk4 = 0x30; + var0->unk8 = gUnk_02000D00; + for (i = 0; i < 3; i++) { + var0->unk6 = 0; + _DmaZero(var0->unk8, 0x200); + playerName = gSaveFiles[i].playerName; + for (j = 0; j < 6; j++) { + sub_0805F7DC(playerName[j], var0); + } + sub_0801D66C(var0->unk8, (void*)(OBJ_VRAM0 + 0x4000 + i * 0x200), 0x200); + } + sub_0805F300(var0); + } + +} + +void sub_08050790(void) { + u32 i, j; + struct_02036540* var0; + u32 var1; + + var0 = sub_0805F2C8(); + if (var0) { + var0->unk2 = 0; + var0->unk3 = 5; + var0->unk1 = 1; + var0->unk4 = 0x80; + var0->unk8 = gUnk_02000D00; + for (i = 0; i < 16; i++) { + var0->unk6 = 0; + var1 = i * 16; + for (j = 0; j < 16; j++) { + sub_0805F7DC(var1, var0); + var1++; + } + sub_0801D66C(gUnk_02000D00, (void*)(BG_VRAM + i * 0x400), 0x400); + } + sub_0805F300(var0); + } +} + +static void sub_080507FC(void) { + gUnk_0200AF00.unk1A = 0x140; + gUnk_0200AF00.unk20 = 0x24; +} + +void sub_08050810(void) { + gUnk_0200AF00.unk1A = 0xD0; + gUnk_0200AF00.unk20 = 0x24; +} + +void sub_08050820(void) { + gUnk_080FC8FC[gChooseFileState.state](); + sub_08050A64(gUnk_02019EE0.unk6); +} + +void sub_08050848(void) { + sub_080503A8(0x7); + sub_0805070C(); + gUnk_02019EE0.unk7 = 0; + sub_08050AFC(gUnk_02019EE0.unk6); + sub_080A7114(1); +} + +void sub_0805086C(void) { + gUnk_080FC908[gChooseFileState.subState](); +} + +void sub_08050888(void) { + if (!gFadeControl.active) { + switch (gUnk_02019EE0.unk8[gUnk_02019EE0.unk7]) { + case 0: + sub_0805194C(gUnk_02019EE0.unk7); + gChooseFileState.subState = 2; + break; + case 1: + gChooseFileState.subState = 2; + break; + default: + sub_0805194C(gUnk_02019EE0.unk7); + sub_08050318(0, gUnk_02019EE0.unk7 + 1); + gChooseFileState.timer = 30; + gChooseFileState.subState = 1; + break; + } + } +} + +void sub_080508E4(void) { + if (gChooseFileState.timer == 0) { + if (gUnk_03000FF0.newKeys & (A_BUTTON | START_BUTTON)) { + gChooseFileState.subState = 2; + } + } else { + gChooseFileState.timer--; + } +} + +void sub_08050910(void) { + sub_08050384(); + if (++gUnk_02019EE0.unk7 > 2) { + sub_080A7114(2); + } else { + gChooseFileState.subState = 0; + } +}