From 024c764b6768a68f26e7467a30512d116bd3bdca Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 19 Aug 2020 19:11:25 -0500 Subject: [PATCH] Decompile a couple more chooseFile functions --- asm/chooseFile.s | 266 +---------------------------------------------- src/chooseFile.c | 193 +++++++++++++++++++++++++++++++++- 2 files changed, 197 insertions(+), 262 deletions(-) diff --git a/asm/chooseFile.s b/asm/chooseFile.s index d23c0314..1108ccd0 100755 --- a/asm/chooseFile.s +++ b/asm/chooseFile.s @@ -5,262 +5,6 @@ .text - thumb_func_start sub_08050940 -sub_08050940: @ 0x08050940 - push {r4, r5, r6, lr} - ldr r3, _0805099C @ =gUnk_02019EE0 - ldrb r0, [r3] - cmp r0, #0 - beq _0805094C - b _08050A58 -_0805094C: - ldrb r4, [r3, #6] - ldr r0, _080509A0 @ =gUnk_03000FF0 - ldrh r2, [r0, #2] - ldrh r1, [r0] - movs r0, #0x80 - lsls r0, r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08050974 - adds r0, r3, #0 - adds r0, #8 - adds r0, r4, r0 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #1 - bne _08050974 - movs r0, #0xc1 - rsbs r0, r0, #0 - ands r2, r0 -_08050974: - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - movs r6, #3 - cmp r0, #1 - bls _08050982 - movs r6, #4 -_08050982: - ldr r0, _080509A4 @ =gUnk_02032EC0 - ldrb r5, [r0, #2] - adds r1, r0, #0 - cmp r2, #0x40 - beq _080509B6 - cmp r2, #0x40 - bhi _080509A8 - cmp r2, #1 - beq _080509E0 - cmp r2, #8 - beq _080509E0 - b _08050A10 - .align 2, 0 -_0805099C: .4byte gUnk_02019EE0 -_080509A0: .4byte gUnk_03000FF0 -_080509A4: .4byte gUnk_02032EC0 -_080509A8: - cmp r2, #0x80 - beq _080509BE - movs r0, #0x80 - lsls r0, r0, #1 - cmp r2, r0 - beq _080509C8 - b _08050A10 -_080509B6: - cmp r4, #0 - ble _08050A10 - subs r4, #1 - b _08050A10 -_080509BE: - subs r0, r6, #1 - cmp r0, r4 - ble _08050A10 - adds r4, #1 - b _08050A10 -_080509C8: - ldr r0, _080509DC @ =gUnk_02019EE0 - adds r0, #8 - adds r0, r4, r0 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #1 - bne _08050A10 - movs r5, #3 - b _08050A10 - .align 2, 0 -_080509DC: .4byte gUnk_02019EE0 -_080509E0: - adds r0, r4, #0 - bl sub_0805041C - cmp r4, #3 - bne _080509EE - movs r5, #2 - b _08050A0E -_080509EE: - ldr r0, _08050A04 @ =gUnk_02019EE0 - adds r0, #8 - adds r0, r4, r0 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - beq _08050A08 - cmp r0, #1 - beq _08050A0C - b _08050A0E - .align 2, 0 -_08050A04: .4byte gUnk_02019EE0 -_08050A08: - movs r5, #1 - b _08050A0E -_08050A0C: - movs r5, #4 -_08050A0E: - ldr r1, _08050A5C @ =gUnk_02032EC0 -_08050A10: - ldrb r0, [r1, #2] - cmp r0, r5 - beq _08050A22 - adds r0, r5, #0 - bl sub_080503BC - movs r0, #0x6a - bl PlaySFX -_08050A22: - adds r0, r4, r6 - adds r1, r6, #0 - bl __modsi3 - adds r4, r0, #0 - ldr r5, _08050A60 @ =gUnk_02019EE0 - ldrb r0, [r5, #6] - cmp r0, r4 - beq _08050A42 - strb r4, [r5, #6] - adds r0, r4, #0 - bl sub_08050AFC - movs r0, #0x69 - bl PlaySFX -_08050A42: - adds r0, r5, #0 - adds r0, #8 - ldrb r5, [r5, #6] - adds r0, r0, r5 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #1 - bne _08050A58 - bl sub_08050810 -_08050A58: - pop {r4, r5, r6, pc} - .align 2, 0 -_08050A5C: .4byte gUnk_02032EC0 -_08050A60: .4byte gUnk_02019EE0 - - thumb_func_start sub_08050A64 -sub_08050A64: @ 0x08050A64 - push {r4, lr} - ldr r1, _08050AF0 @ =gUnk_02019EE0 - adds r1, #8 - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #1 - bne _08050AEC - ldr r4, _08050AF4 @ =gUnk_03001010 - movs r0, #0 - strh r0, [r4, #4] - strh r0, [r4, #6] - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r4, #8] - movs r0, #0x40 - bl GetInventoryValue - cmp r0, #0 - beq _08050A9E - movs r0, #0xa2 - strh r0, [r4] - movs r0, #0x36 - strh r0, [r4, #2] - ldr r0, _08050AF8 @ =0x00000145 - movs r1, #0x24 - bl sub_080ADA14 -_08050A9E: - movs r0, #0x41 - bl GetInventoryValue - cmp r0, #0 - beq _08050AB8 - movs r0, #0x96 - strh r0, [r4] - movs r0, #0x3d - strh r0, [r4, #2] - ldr r0, _08050AF8 @ =0x00000145 - movs r1, #0x22 - bl sub_080ADA14 -_08050AB8: - movs r0, #0x42 - bl GetInventoryValue - cmp r0, #0 - beq _08050AD2 - movs r0, #0xae - strh r0, [r4] - movs r0, #0x3d - strh r0, [r4, #2] - ldr r0, _08050AF8 @ =0x00000145 - movs r1, #0x23 - bl sub_080ADA14 -_08050AD2: - movs r0, #0x43 - bl GetInventoryValue - cmp r0, #0 - beq _08050AEC - movs r0, #0xa2 - strh r0, [r4] - movs r0, #0x44 - strh r0, [r4, #2] - ldr r0, _08050AF8 @ =0x00000145 - movs r1, #0x21 - bl sub_080ADA14 -_08050AEC: - pop {r4, pc} - .align 2, 0 -_08050AF0: .4byte gUnk_02019EE0 -_08050AF4: .4byte gUnk_03001010 -_08050AF8: .4byte 0x00000145 - - thumb_func_start sub_08050AFC -sub_08050AFC: @ 0x08050AFC - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_0805041C - ldr r5, _08050B30 @ =gUnk_02021F30 - movs r1, #0x80 - lsls r1, r1, #4 - adds r0, r5, #0 - bl _DmaZero - ldr r0, _08050B34 @ =gUnk_02019EE0 - adds r0, #8 - adds r4, r4, r0 - movs r0, #0 - ldrsb r0, [r4, r0] - cmp r0, #1 - bne _08050B28 - movs r1, #0xa7 - lsls r1, r1, #2 - adds r0, r5, r1 - bl sub_08050B3C -_08050B28: - ldr r1, _08050B38 @ =gScreen - movs r0, #1 - strh r0, [r1, #0x1a] - pop {r4, r5, pc} - .align 2, 0 -_08050B30: .4byte gUnk_02021F30 -_08050B34: .4byte gUnk_02019EE0 -_08050B38: .4byte gScreen - thumb_func_start sub_08050B3C sub_08050B3C: @ 0x08050B3C push {r4, r5, r6, r7, lr} @@ -284,7 +28,7 @@ _08050B5A: ldrb r0, [r0] lsrs r3, r0, #1 cmp r3, #0 - beq _08050C0A + beq RETURN cmp r2, r3 ble _08050B6C adds r2, r3, #0 @@ -325,8 +69,8 @@ _08050B9A: movs r7, #0xa mov r8, r7 mov r0, r8 - mov r7, ip - subs r0, r0, r7 + mov r7, ip @ var5 + subs r0, r0, r7 @ 10 - var5 lsls r0, r0, #1 ldr r7, _08050C24 @ =gUnk_080FC914 mov ip, r7 @@ -360,7 +104,7 @@ _08050B9A: _08050BEE: ldr r0, [sp, #4] cmp r0, #0 - beq _08050C0A + beq RETURN ldr r2, [sp] cmp r5, #9 ble _08050BFE @@ -373,7 +117,7 @@ _08050BFE: ldr r3, _08050C28 @ =0xFFFFF24D adds r1, r2, r3 strh r1, [r0, #2] -_08050C0A: +RETURN: add sp, #8 pop {r3, r4, r5} mov r8, r3 diff --git a/src/chooseFile.c b/src/chooseFile.c index 256e0da5..0c5a9474 100755 --- a/src/chooseFile.c +++ b/src/chooseFile.c @@ -1,6 +1,7 @@ #include "global.h" #include "functions.h" #include "main.h" +#include "player.h" #include "readKeyInput.h" #include "screen.h" @@ -38,7 +39,9 @@ typedef struct { extern struct_020227E8 gUnk_020227E8; typedef struct { - u8 filler0[0x800]; + u8 filler0[0x29C]; + u16 unk29C; + u8 filler29E[0x562]; } struct_02034CB0; extern struct_02034CB0 gUnk_02034CB0; @@ -46,6 +49,7 @@ extern struct_02034CB0 gUnk_02021F30; extern SaveFile gSaveFiles[]; extern u32 gUsedPalettes; extern u8 gUnk_02000D00[]; +extern u16 gUnk_03001010[5]; static void sub_08050624(u32); static void sub_0805066C(void); @@ -374,3 +378,190 @@ void sub_08050910(void) { gChooseFileState.subState = 0; } } + +void sub_08050940(void) { + int saveFileId; + u32 newKeys; + int var1; + u32 var2; + + if (gUnk_02019EE0.unk0) { + return; + } + + saveFileId = gUnk_02019EE0.unk6; + newKeys = gUnk_03000FF0.newKeys; + if ((gUnk_03000FF0.heldKeys & L_BUTTON) && gUnk_02019EE0.unk8[saveFileId] == 1) { + newKeys &= ~(DPAD_UP | DPAD_DOWN); + } + + var1 = ((struct_02000000 *)0x2000000)->gameLanguage > 1 ? 4 : 3; + var2 = gUnk_02032EC0.transitionType; + switch (newKeys) { + case DPAD_UP: + if (saveFileId > 0) { + saveFileId--; + } + break; + case DPAD_DOWN: + if (var1 - 1 > saveFileId) { + saveFileId++; + } + break; + case R_BUTTON: + if (gUnk_02019EE0.unk8[saveFileId] == 1) { + var2 = 3; + } + break; + case A_BUTTON: + case START_BUTTON: + sub_0805041C(saveFileId); + if (saveFileId == 3) { + var2 = 2; + } else { + switch (gUnk_02019EE0.unk8[saveFileId]) { + case 0: + var2 = 1; + break; + case 1: + var2 = 4; + break; + } + } + break; + } + + if (gUnk_02032EC0.transitionType != var2) { + sub_080503BC(var2); + PlaySFX(0x6A); + } + + saveFileId = (saveFileId + var1) % var1; + if (gUnk_02019EE0.unk6 != saveFileId) { + gUnk_02019EE0.unk6 = saveFileId; + sub_08050AFC(saveFileId); + PlaySFX(0x69); + } + + if (gUnk_02019EE0.unk8[gUnk_02019EE0.unk6] == 1) { + sub_08050810(); + } +} + +void sub_08050A64(u32 saveFileId) { + if (gUnk_02019EE0.unk8[saveFileId] != 1) { + return; + } + + gUnk_03001010[2] = 0; + gUnk_03001010[3] = 0; + gUnk_03001010[4] = 0x400; + + // Draw the save file's obtained elements. + if (GetInventoryValue(0x40)) { + gUnk_03001010[0] = 0xA2; + gUnk_03001010[1] = 0x36; + sub_080ADA14(0x145, 0x24); + } + if (GetInventoryValue(0x41)) { + gUnk_03001010[0] = 0x96; + gUnk_03001010[1] = 0x3D; + sub_080ADA14(0x145, 0x22); + } + if (GetInventoryValue(0x42)) { + gUnk_03001010[0] = 0xAE; + gUnk_03001010[1] = 0x3D; + sub_080ADA14(0x145, 0x23); + } + if (GetInventoryValue(0x43)) { + gUnk_03001010[0] = 0xA2; + gUnk_03001010[1] = 0x44; + sub_080ADA14(0x145, 0x21); + } +} + +void sub_08050B3C(u16*); + +void sub_08050AFC(u32 saveFileId) { + sub_0805041C(saveFileId); + _DmaZero(&gUnk_02021F30, sizeof(gUnk_02021F30)); + if (gUnk_02019EE0.unk8[saveFileId] == 1) { + sub_08050B3C(&gUnk_02021F30.unk29C); + } + gScreen.bg.bg2yOffset = 1; +} + +// typedef struct { +// u16* unk0; +// u32 unk4; +// } unk_08050B3C; + +// extern const u16 gUnk_080FC914[]; + +// void sub_08050B3C(u16* arg0) { +// unk_08050B3C sp; +// int var0; +// int var1; +// int var2; +// int var3; +// int var4; +// int var5; +// int var6; +// int var7; +// u16* var8; + +// sp.unk0 = arg0; +// var0 = gUnk_02002A40.stats.health * 2; +// if (var0 == 0) { +// var0 = 1; +// } + +// var1 = gUnk_02002A40.stats.maxHealth * 2; +// if (var1 == 0) { +// return; +// } + +// if (var0 > var1) { +// var0 = var1; +// } + +// sp.unk4 = var0 & 0x3; +// var2 = var0 >> 2; +// var5 = var2; +// if (var2 > 10) { +// var5 = 10; +// } + +// var6 = var2; +// var6 -= 10; +// var7 = var6; +// if (var6 < 0) { +// var7 = 0; +// } + +// var1 = var1 >> 2; +// var4 = var1; +// if (var1 > 10) { +// var1 = 10; +// } + +// var4 -= 10; +// sp.unk0[0] = 0xF24C; +// DmaCopy16(3, &gUnk_080FC914[10 - var5], &sp.unk0[1], var1 * 2); +// if (var4 > 0) { +// sp.unk0[0x20] = 0xF24C; +// DmaCopy16(3, &gUnk_080FC914[10 - var7], &sp.unk0[1], var4 * 2); +// } + +// if (!sp.unk4) { +// return; +// } + +// var8 = sp.unk0; +// if (var2 >= 10) { +// var2 = var6; +// var8 += 0x20; +// } + +// var8[var2 + 1] = sp.unk4 - 0xDB3; +// }