From 773510c329e01b5ef5d2abe02600226f48ac08a6 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 16 May 2022 20:23:45 -0700 Subject: [PATCH] decomp more of rescue password and label GetDungeonFloorCount --- asm/code_803D110.s | 2 +- asm/code_80958E8.s | 2 +- asm/dungeon_2.s | 4 +- asm/ground_event.s | 4 +- asm/ground_script.s | 2 +- asm/rescue_password_menu.s | 831 --------------------------------- data/data_8107010.s | 4 +- include/rescue_password_menu.h | 5 +- src/code_80958E8.c | 4 +- src/dungeon_2.c | 6 +- src/rescue_password_menu.c | 415 +++++++++++++++- 11 files changed, 431 insertions(+), 848 deletions(-) diff --git a/asm/code_803D110.s b/asm/code_803D110.s index 51c4c2465..d0d51f2d4 100644 --- a/asm/code_803D110.s +++ b/asm/code_803D110.s @@ -559,7 +559,7 @@ _0803D500: ldr r4, _0803D658 adds r2, r4 ldrb r0, [r2] - bl sub_8090298 + bl GetDungeonFloorCount ldr r1, [r6] ldr r7, _0803D66C adds r1, r7 diff --git a/asm/code_80958E8.s b/asm/code_80958E8.s index 904f41c60..818d7db69 100644 --- a/asm/code_80958E8.s +++ b/asm/code_80958E8.s @@ -262,7 +262,7 @@ _08095D1C: add r0, r9 ldrb r7, [r0] adds r0, r7, 0 - bl sub_8090298 + bl GetDungeonFloorCount str r0, [sp, 0x58] lsrs r0, 31 ldr r2, [sp, 0x58] diff --git a/asm/dungeon_2.s b/asm/dungeon_2.s index 20866660a..2090f6d0c 100644 --- a/asm/dungeon_2.s +++ b/asm/dungeon_2.s @@ -729,7 +729,7 @@ sub_80908D8: ldrb r0, [r0] b _0809090A .align 2, 0 -_08090900: .4byte gUnknown_81077A8 +_08090900: .4byte gDungeonFloorCount _08090904: .4byte gUnknown_8108084 _08090908: movs r0, 0x1 @@ -768,7 +768,7 @@ sub_8090910: b _08090956 .align 2, 0 _0809094C: .4byte 0x0000270f -_08090950: .4byte gUnknown_81077A8 +_08090950: .4byte gDungeonFloorCount _08090954: movs r0, 0x46 _08090956: diff --git a/asm/ground_event.s b/asm/ground_event.s index ba241ece2..adada8704 100644 --- a/asm/ground_event.s +++ b/asm/ground_event.s @@ -602,11 +602,11 @@ _080ADDE2: movs r4, 0x1 _080ADDE8: adds r0, r5, 0 - bl sub_8090298 + bl GetDungeonFloorCount cmp r4, r0 blt _080ADDFA adds r0, r5, 0 - bl sub_8090298 + bl GetDungeonFloorCount subs r4, r0, 0x1 _080ADDFA: ldr r2, [r6, 0x4] diff --git a/asm/ground_script.s b/asm/ground_script.s index 3a8bf35e1..d1927840a 100644 --- a/asm/ground_script.s +++ b/asm/ground_script.s @@ -3934,7 +3934,7 @@ _0809FAD4: negs r4, r4 _0809FAD8: adds r0, r1, 0 - bl sub_8090298 + bl GetDungeonFloorCount ldr r2, _0809FAF4 add r1, sp, 0x8 movs r3, 0x2 diff --git a/asm/rescue_password_menu.s b/asm/rescue_password_menu.s index 99e121103..f978ddec1 100644 --- a/asm/rescue_password_menu.s +++ b/asm/rescue_password_menu.s @@ -5,837 +5,6 @@ .text - thumb_func_start UpdateRescuePasswordMenu -UpdateRescuePasswordMenu: - push {r4-r6,lr} - sub sp, 0x34 - movs r0, 0xB - str r0, [sp, 0x30] - ldr r5, _08038AB4 - ldr r1, _08038AB8 - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r6, r1, 0 - cmp r0, 0x9 - bls _08038AA8 - b _08038DB0 -_08038AA8: - lsls r0, 2 - ldr r1, _08038ABC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08038AB4: .4byte 0x0000ffdc -_08038AB8: .4byte gRescuePasswordMenu -_08038ABC: .4byte _08038AC0 - .align 2, 0 -_08038AC0: - .4byte _08038AE8 - .4byte _08038AFC - .4byte _08038AE8 - .4byte _08038AFC - .4byte _08038AE8 - .4byte _08038AFC - .4byte _08038C78 - .4byte _08038C8C - .4byte _08038CC2 - .4byte _08038D38 -_08038AE8: - bl sub_8031DCC - ldr r5, _08038AF8 - cmp r0, 0 - bne _08038AF4 - b _08038DB0 -_08038AF4: - movs r5, 0xB - b _08038DB0 - .align 2, 0 -_08038AF8: .4byte 0x0000ffdc -_08038AFC: - bl sub_80154F0 - adds r4, r0, 0 - mov r0, sp - movs r1, 0 - movs r2, 0x30 - bl MemoryFill8 - cmp r4, 0x1 - bne _08038B12 - b _08038CBC -_08038B12: - cmp r4, 0x1 - bcs _08038B18 - b _08038CB0 -_08038B18: - cmp r4, 0x2 - beq _08038AF4 - cmp r4, 0x3 - beq _08038B22 - b _08038DB0 -_08038B22: - ldr r0, _08038B44 - ldr r0, [r0] - ldr r0, [r0] - ldr r1, _08038B48 - mov r2, sp - bl sub_8039068 - subs r0, 0x7 - cmp r0, 0x11 - bls _08038B38 - b _08038DB0 -_08038B38: - lsls r0, 2 - ldr r1, _08038B4C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08038B44: .4byte gRescuePasswordMenu -_08038B48: .4byte gUnknown_202EC50 -_08038B4C: .4byte _08038B50 - .align 2, 0 -_08038B50: - .4byte _08038BA4 - .4byte _08038DB0 - .4byte _08038BD8 - .4byte _08038DB0 - .4byte _08038C28 - .4byte _08038DB0 - .4byte _08038B9C - .4byte _08038DB0 - .4byte _08038DB0 - .4byte _08038DB0 - .4byte _08038B98 - .4byte _08038BA0 - .4byte _08038BD4 - .4byte _08038C24 - .4byte _08038DB0 - .4byte _08038BA8 - .4byte _08038BDC - .4byte _08038C2C -_08038B98: - movs r0, 0x11 - b _08038CA4 -_08038B9C: - movs r0, 0xD - b _08038CA4 -_08038BA0: - movs r0, 0x12 - b _08038CA4 -_08038BA4: - movs r0, 0x7 - b _08038CA4 -_08038BA8: - ldr r0, [sp, 0x10] - bl sub_8095274 - bl sub_8038F98 - ldr r0, _08038BCC - ldr r1, [r0] - movs r0, 0x9 - str r0, [r1, 0x4] - ldr r5, _08038BD0 - mov r1, sp - movs r0, 0x2 - strb r0, [r1] - mov r0, sp - bl sub_80951BC - b _08038DB0 - .align 2, 0 -_08038BCC: .4byte gRescuePasswordMenu -_08038BD0: .4byte 0x0000ffdc -_08038BD4: - movs r0, 0x13 - b _08038CA4 -_08038BD8: - movs r0, 0x9 - b _08038CA4 -_08038BDC: - bl sub_8038F98 - ldr r0, _08038C18 - ldr r1, [r0] - movs r0, 0x9 - str r0, [r1, 0x4] - ldr r5, _08038C1C - mov r1, sp - movs r0, 0x5 - strb r0, [r1] - mov r0, sp - bl sub_80951FC - ldr r1, [sp, 0x10] - movs r0, 0x1 - bl sub_809539C - lsls r0, 24 - lsrs r0, 24 - bl sub_8095228 - movs r1, 0x7 - strb r1, [r0] - ldr r0, _08038C20 - movs r1, 0 - movs r2, 0x5C - bl MemoryFill8 - b _08038DB0 - .align 2, 0 -_08038C18: .4byte gRescuePasswordMenu -_08038C1C: .4byte 0x0000ffdc -_08038C20: .4byte gUnknown_203B484 -_08038C24: - movs r0, 0x14 - b _08038CA4 -_08038C28: - movs r0, 0xB - b _08038CA4 -_08038C2C: - bl sub_8038F98 - ldr r0, _08038C70 - ldr r1, [r0] - movs r0, 0x9 - str r0, [r1, 0x4] - ldr r5, _08038C74 - ldr r1, [sp, 0x10] - movs r0, 0x4 - bl sub_809539C - lsls r0, 24 - lsrs r0, 24 - bl sub_8095228 - adds r2, r0, 0 - mov r1, sp - ldm r1!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - ldm r1!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - ldm r1!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - ldm r1!, {r3,r4,r6} - stm r2!, {r3,r4,r6} - movs r1, 0x6 - strb r1, [r0] - bl GetMainMenu - adds r0, 0x3A - movs r1, 0x1 - strb r1, [r0] - b _08038DB0 - .align 2, 0 -_08038C70: .4byte gRescuePasswordMenu -_08038C74: .4byte 0x0000ffdc -_08038C78: - bl sub_8031DCC - ldr r5, _08038C88 - cmp r0, 0 - bne _08038C84 - b _08038DB0 -_08038C84: - movs r5, 0xD - b _08038DB0 - .align 2, 0 -_08038C88: .4byte 0x0000ffdc -_08038C8C: - bl sub_80154F0 - cmp r0, 0x1 - beq _08038CBC - cmp r0, 0x1 - bcc _08038CB0 - cmp r0, 0x2 - beq _08038C84 - cmp r0, 0x3 - beq _08038CA2 - b _08038DB0 -_08038CA2: - movs r0, 0x15 -_08038CA4: - bl sub_8038DC0 - ldr r0, _08038CB4 - ldr r1, [r0] - movs r0, 0x8 - str r0, [r1, 0x4] -_08038CB0: - ldr r5, _08038CB8 - b _08038DB0 - .align 2, 0 -_08038CB4: .4byte gRescuePasswordMenu -_08038CB8: .4byte 0x0000ffdc -_08038CBC: - bl sub_8031E00 - b _08038CB0 -_08038CC2: - ldr r0, [r6] - adds r0, 0x8 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _08038CDA - ldr r0, [r6] - adds r0, 0x8 - add r1, sp, 0x30 - bl sub_8013114 -_08038CDA: - ldr r0, [sp, 0x30] - cmp r0, 0xB - beq _08038D24 - cmp r0, 0xB - bhi _08038CEA - cmp r0, 0xA - beq _08038CEE - b _08038DB0 -_08038CEA: - cmp r0, 0xC - bne _08038DB0 -_08038CEE: - bl sub_8039174 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r1, _08038D1C - movs r0, 0x4 - bl sub_80151C0 - ldr r0, _08038D20 - ldr r1, [r0] - movs r0, 0x8 - str r0, [r1, 0x4] - ldr r0, [r1] - subs r0, 0x21 - movs r5, 0xB - cmp r0, 0x1 - bhi _08038DB0 - b _08038C84 - .align 2, 0 -_08038D1C: .4byte gUnknown_202EC50 -_08038D20: .4byte gRescuePasswordMenu -_08038D24: - ldr r1, [r6] - movs r0, 0x8 - str r0, [r1, 0x4] - ldr r5, _08038D34 - bl sub_80391F8 - b _08038DB0 - .align 2, 0 -_08038D34: .4byte 0x0000ffdc -_08038D38: - adds r4, r6, 0 - ldr r0, [r4] - adds r0, 0x8 - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _08038D52 - ldr r0, [r4] - adds r0, 0x8 - add r1, sp, 0x30 - bl sub_8013114 -_08038D52: - ldr r0, [sp, 0x30] - cmp r0, 0xB - beq _08038DA4 - cmp r0, 0xB - bhi _08038D62 - cmp r0, 0xA - beq _08038D66 - b _08038DB0 -_08038D62: - cmp r0, 0xC - bne _08038DB0 -_08038D66: - bl sub_8039174 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r1, _08038D9C - movs r0, 0x4 - bl sub_80151C0 - ldr r4, _08038DA0 - ldr r0, [r4] - ldr r0, [r0] - bl ConvertMenutoRescuePasswordState - ldr r1, [r4] - str r0, [r1, 0x4] - ldr r0, [r1] - subs r0, 0x21 - movs r5, 0x2A - cmp r0, 0x1 - bhi _08038DB0 - movs r5, 0x2B - b _08038DB0 - .align 2, 0 -_08038D9C: .4byte gUnknown_202EC50 -_08038DA0: .4byte gRescuePasswordMenu -_08038DA4: - ldr r1, [r6] - movs r0, 0x9 - str r0, [r1, 0x4] - ldr r5, _08038DBC - bl sub_80391F8 -_08038DB0: - adds r0, r5, 0 - add sp, 0x34 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08038DBC: .4byte 0x0000ffdc - thumb_func_end UpdateRescuePasswordMenu - - thumb_func_start sub_8038DC0 -sub_8038DC0: - push {r4,lr} - sub sp, 0x10 - adds r4, r0, 0 - ldr r0, _08038DF8 - ldr r0, [r0] - movs r1, 0xD4 - lsls r1, 1 - adds r0, r1 - bl sub_8006518 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - bl sub_80155F0 - subs r0, r4, 0x7 - cmp r0, 0xE - bls _08038DEE - b _08038F74 -_08038DEE: - lsls r0, 2 - ldr r1, _08038DFC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08038DF8: .4byte gRescuePasswordMenu -_08038DFC: .4byte _08038E00 - .align 2, 0 -_08038E00: - .4byte _08038E7C - .4byte _08038F74 - .4byte _08038EDC - .4byte _08038F74 - .4byte _08038F1C - .4byte _08038F74 - .4byte _08038E9C - .4byte _08038F74 - .4byte _08038F74 - .4byte _08038F74 - .4byte _08038E3C - .4byte _08038E5C - .4byte _08038EBC - .4byte _08038EFC - .4byte _08038F50 -_08038E3C: - ldr r0, _08038E50 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038E54 - ldr r2, _08038E58 - b _08038F2E - .align 2, 0 -_08038E50: .4byte gRescuePasswordMenu -_08038E54: .4byte gUnknown_80E71FC -_08038E58: .4byte gUnknown_80E7214 -_08038E5C: - ldr r0, _08038E70 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038E74 - ldr r2, _08038E78 - b _08038F2E - .align 2, 0 -_08038E70: .4byte gRescuePasswordMenu -_08038E74: .4byte gUnknown_80E72EC -_08038E78: .4byte gUnknown_80E7304 -_08038E7C: - ldr r0, _08038E90 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038E94 - ldr r2, _08038E98 - b _08038F2E - .align 2, 0 -_08038E90: .4byte gRescuePasswordMenu -_08038E94: .4byte gUnknown_80E7344 -_08038E98: .4byte gUnknown_80E735C -_08038E9C: - ldr r0, _08038EB0 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038EB4 - ldr r2, _08038EB8 - b _08038F2E - .align 2, 0 -_08038EB0: .4byte gRescuePasswordMenu -_08038EB4: .4byte gUnknown_80E7588 -_08038EB8: .4byte gUnknown_80E75A0 -_08038EBC: - ldr r0, _08038ED0 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038ED4 - ldr r2, _08038ED8 - b _08038F2E - .align 2, 0 -_08038ED0: .4byte gRescuePasswordMenu -_08038ED4: .4byte gUnknown_80E73AC -_08038ED8: .4byte gUnknown_80E73C4 -_08038EDC: - ldr r0, _08038EF0 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038EF4 - ldr r2, _08038EF8 - b _08038F2E - .align 2, 0 -_08038EF0: .4byte gRescuePasswordMenu -_08038EF4: .4byte gUnknown_80E7408 -_08038EF8: .4byte gUnknown_80E7420 -_08038EFC: - ldr r0, _08038F10 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038F14 - ldr r2, _08038F18 - b _08038F2E - .align 2, 0 -_08038F10: .4byte gRescuePasswordMenu -_08038F14: .4byte gUnknown_80E7468 -_08038F18: .4byte gUnknown_80E7480 -_08038F1C: - ldr r0, _08038F44 - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038F48 - ldr r2, _08038F4C -_08038F2E: - str r2, [sp] - movs r4, 0 - str r4, [sp, 0x4] - movs r2, 0xD - str r2, [sp, 0x8] - str r4, [sp, 0xC] - movs r2, 0 - bl SetMenuItems - b _08038F74 - .align 2, 0 -_08038F44: .4byte gRescuePasswordMenu -_08038F48: .4byte gUnknown_80E74C8 -_08038F4C: .4byte gUnknown_80E74E0 -_08038F50: - ldr r0, _08038F8C - ldr r1, [r0] - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038F90 - ldr r2, _08038F94 - str r2, [sp] - movs r4, 0 - str r4, [sp, 0x4] - movs r2, 0xD - str r2, [sp, 0x8] - str r4, [sp, 0xC] - movs r2, 0 - bl SetMenuItems -_08038F74: - ldr r0, _08038F8C - ldr r0, [r0] - adds r0, 0x8 - movs r1, 0 - movs r2, 0x1 - bl sub_8035CF4 - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08038F8C: .4byte gRescuePasswordMenu -_08038F90: .4byte gUnknown_80E752C -_08038F94: .4byte gUnknown_80E7544 - thumb_func_end sub_8038DC0 - - thumb_func_start sub_8038F98 -sub_8038F98: - push {r4,r5,lr} - sub sp, 0x10 - ldr r5, _08038FF4 - ldr r0, [r5] - movs r1, 0xD4 - lsls r1, 1 - adds r0, r1 - bl sub_8006518 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - bl sub_80155F0 - ldr r1, [r5] - adds r0, r1, 0 - adds r0, 0x8 - movs r2, 0xA4 - lsls r2, 1 - adds r1, r2 - ldr r3, _08038FF8 - ldr r2, _08038FFC - str r2, [sp] - movs r4, 0 - str r4, [sp, 0x4] - movs r2, 0xD - str r2, [sp, 0x8] - str r4, [sp, 0xC] - movs r2, 0 - bl SetMenuItems - ldr r0, [r5] - adds r0, 0x8 - movs r1, 0 - movs r2, 0x1 - bl sub_8035CF4 - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08038FF4: .4byte gRescuePasswordMenu -_08038FF8: .4byte gUnknown_80E7278 -_08038FFC: .4byte gUnknown_80E7290 - thumb_func_end sub_8038F98 - - thumb_func_start ConvertMenutoRescuePasswordState -ConvertMenutoRescuePasswordState: - push {lr} - movs r1, 0xB - ldr r0, _0803901C - ldr r0, [r0] - ldr r0, [r0] - subs r0, 0x1B - cmp r0, 0x7 - bhi _08039062 - lsls r0, 2 - ldr r1, _08039020 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803901C: .4byte gRescuePasswordMenu -_08039020: .4byte _08039024 - .align 2, 0 -_08039024: - .4byte _08039044 - .4byte _08039054 - .4byte _0803904C - .4byte _0803905C - .4byte _08039048 - .4byte _08039058 - .4byte _08039050 - .4byte _08039060 -_08039044: - movs r1, 0 - b _08039062 -_08039048: - movs r1, 0x4 - b _08039062 -_0803904C: - movs r1, 0x2 - b _08039062 -_08039050: - movs r1, 0x6 - b _08039062 -_08039054: - movs r1, 0x1 - b _08039062 -_08039058: - movs r1, 0x5 - b _08039062 -_0803905C: - movs r1, 0x3 - b _08039062 -_08039060: - movs r1, 0x7 -_08039062: - adds r0, r1, 0 - pop {r1} - bx r1 - thumb_func_end ConvertMenutoRescuePasswordState - - thumb_func_start sub_8039068 -sub_8039068: - push {r4-r6,lr} - adds r6, r0, 0 - adds r0, r1, 0 - adds r5, r2, 0 - adds r1, r5, 0 - bl sub_803D204 - lsls r0, 24 - cmp r0, 0 - beq _080390AC - ldrb r0, [r5] - cmp r0, 0x7 - bhi _080390AC - ldrb r4, [r5, 0x5] - ldrb r0, [r5, 0x4] - bl sub_8090298 - cmp r4, r0 - bge _080390AC - movs r0, 0xC - ldrsh r1, [r5, r0] - cmp r1, 0 - beq _080390AC - ldr r0, _080390B0 - cmp r1, r0 - bgt _080390AC - adds r0, r5, 0 - adds r0, 0x22 - ldrb r0, [r0] - bl IsInvalidItemReward - lsls r0, 24 - cmp r0, 0 - beq _080390B4 -_080390AC: - movs r0, 0x11 - b _0803916E - .align 2, 0 -_080390B0: .4byte 0x000001a7 -_080390B4: - cmp r6, 0x1E - beq _08039120 - cmp r6, 0x1E - bhi _080390C2 - cmp r6, 0x1C - beq _080390C8 - b _0803916A -_080390C2: - cmp r6, 0x20 - beq _08039140 - b _0803916A -_080390C8: - ldrb r0, [r5] - cmp r0, 0x1 - beq _080390D2 - movs r0, 0x12 - b _0803916E -_080390D2: - ldr r1, [r5, 0x10] - movs r0, 0x2 - bl sub_80952F0 - lsls r0, 24 - cmp r0, 0 - bne _08039108 - ldr r1, [r5, 0x10] - movs r0, 0x4 - bl sub_80952F0 - lsls r0, 24 - cmp r0, 0 - bne _08039108 - ldr r1, [r5, 0x10] - movs r0, 0x6 - bl sub_80952F0 - lsls r0, 24 - cmp r0, 0 - bne _08039108 - ldr r0, [r5, 0x10] - bl sub_8095298 - lsls r0, 24 - cmp r0, 0 - beq _0803910C -_08039108: - movs r0, 0x7 - b _0803916E -_0803910C: - bl sub_8095190 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _0803911C - movs r0, 0xD - b _0803916E -_0803911C: - movs r0, 0x16 - b _0803916E -_08039120: - ldrb r0, [r5] - cmp r0, 0x4 - beq _0803912A - movs r0, 0x13 - b _0803916E -_0803912A: - ldr r1, [r5, 0x10] - movs r0, 0x1 - bl sub_80952F0 - lsls r0, 24 - cmp r0, 0 - bne _0803913C - movs r0, 0x9 - b _0803916E -_0803913C: - movs r0, 0x17 - b _0803916E -_08039140: - ldrb r0, [r5] - cmp r0, 0x5 - beq _0803914A - movs r0, 0x14 - b _0803916E -_0803914A: - ldr r1, [r5, 0x10] - movs r0, 0x4 - bl sub_80952F0 - lsls r0, 24 - cmp r0, 0 - beq _08039162 - bl sub_8011C34 - ldr r1, [r5, 0x28] - cmp r1, r0 - beq _08039166 -_08039162: - movs r0, 0xB - b _0803916E -_08039166: - movs r0, 0x18 - b _0803916E -_0803916A: - movs r0, 0x1 - negs r0, r0 -_0803916E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8039068 - thumb_func_start sub_8039174 sub_8039174: push {r4,lr} diff --git a/data/data_8107010.s b/data/data_8107010.s index 4fe439ded..b3143f2b6 100644 --- a/data/data_8107010.s +++ b/data/data_8107010.s @@ -216,8 +216,8 @@ gUnknown_8107798: @ 8107798 .string "pksdir0\0" .align 2,0 - .global gUnknown_81077A8 -gUnknown_81077A8: @ 81077A8 + .global gDungeonFloorCount +gDungeonFloorCount: @ 81077A8 .incbin "baserom.gba", 0x1077A8, 0x40 .global gUnknown_81077E8 diff --git a/include/rescue_password_menu.h b/include/rescue_password_menu.h index 66325befb..588251963 100644 --- a/include/rescue_password_menu.h +++ b/include/rescue_password_menu.h @@ -14,9 +14,10 @@ struct RescuePasswordMenu // size: 0x214 u32 currMenu; u32 state; - u8 fill8[0x148 - 8]; + u32 unk8; + u8 fillC[0x148 - 0xC]; struct UnkTextStruct2 unk148[4]; - u8 fill1A8[0x208 - 0x1A8]; + struct UnkTextStruct2 unk1A8[4]; struct unkSprite unk208; diff --git a/src/code_80958E8.c b/src/code_80958E8.c index cae46bc82..bfe24308b 100644 --- a/src/code_80958E8.c +++ b/src/code_80958E8.c @@ -31,7 +31,7 @@ struct unkStruct_203B490 extern bool8 sub_809095C(u8); -extern s32 sub_8090298(u8); +extern s32 GetDungeonFloorCount(u8); extern bool8 sub_809017C(u8 *); extern s16 GetBaseSpecies(s16); extern bool8 IsInvalidItemReward(u8); @@ -119,7 +119,7 @@ bool8 ValidateWonderMail(struct WonderMail *data) if(sub_809095C(data->dungeon)) return FALSE; - if(data->floor >= sub_8090298(data->dungeon)) + if(data->floor >= GetDungeonFloorCount(data->dungeon)) return FALSE; if(sub_809017C(&(data->dungeon))) return FALSE; diff --git a/src/dungeon_2.c b/src/dungeon_2.c index 282ac99a6..8308e340e 100644 --- a/src/dungeon_2.c +++ b/src/dungeon_2.c @@ -8,7 +8,7 @@ extern const char gUnknown_8108F10[]; extern const char gUnknown_8108F18[]; extern const char gUnknown_8108F2C[]; -extern u8 gUnknown_81077A8[]; +extern u8 gDungeonFloorCount[]; extern u8 gUnknown_81077E8[]; void sub_80901D8(struct DungeonLocation *param_1,struct DungeonLocation *param_2) @@ -43,14 +43,14 @@ void CopyDungeonName1toBuffer(u8 *buffer, struct DungeonLocation *dungeonLocatio strncpy(buffer, gDungeonNames[dungeonLocation->dungeonIndex].name1, 0x50); } -u8 sub_8090298(u8 dungeon) +s32 GetDungeonFloorCount(u8 dungeon) { if ((u8)(dungeon - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE) return 4; else if(dungeon > DUNGEON_PURITY_FOREST) return 1; else - return gUnknown_81077A8[dungeon]; + return gDungeonFloorCount[dungeon]; } u8 sub_80902C8(u8 dungeon) diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index f170a0054..0df817896 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -2,19 +2,25 @@ #include "memory.h" #include "input.h" #include "item.h" +#include "menu.h" +#include "pokemon.h" +#include "save.h" #include "sub_8095228.h" #include "text.h" #include "main_menu.h" #include "rescue_password_menu.h" +#include "code_8094F88.h" +#include "wonder_mail.h" extern u8 gUnknown_202EC50[]; extern u32 gUnknown_202EC4C; +extern struct unkStruct_203B484 *gUnknown_203B484; +extern struct UnkTextStruct2 gUnknown_80E71E4; EWRAM_DATA u8 gUnknown_203B368; EWRAM_DATA u32 gUnknown_203B36C; EWRAM_DATA struct RescuePasswordMenu *gRescuePasswordMenu; -extern struct UnkTextStruct2 gUnknown_80E71E4; extern s32 sub_8035D74(void); extern void sub_80151C0(u32, u8 *); extern void sub_8031D70(u32, u32); @@ -22,6 +28,56 @@ extern u32 ConvertMenutoRescuePasswordState(u32); extern void sub_8039174(void); extern void sub_80155F0(void); extern void sub_8031E10(void); +extern void sub_8038F98(void); + + +extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0); + +extern void sub_80951BC(struct unkStruct_8095228 *r0); +extern void sub_80951FC(struct unkStruct_8095228 *r0); +extern u8 sub_8012FD8(u32 *r0); +extern void sub_8013114(u32 *, s32 *); +extern u32 sub_80154F0(void); +extern u8 sub_809539C(u32, u32); +extern void sub_8095274(u32); +extern u32 sub_8031DCC(void); +extern void sub_80391F8(void); +extern void sub_8031E00(); +extern void sub_8038DC0(u32); +extern struct MainMenu *GetMainMenu(void); + + +extern void sub_8039174(void); +extern void SetMenuItems(void *, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *, u32, u32, u32); +extern void sub_8035CF4(u32 *r0, u32, u32); +bool8 IsInvalidItemReward(u8); +bool8 sub_80952F0(u32, u32); +bool8 sub_8095298(u32); +bool8 sub_803D204(u8 *, struct unkStruct_8095228 *); +extern s32 GetDungeonFloorCount(u8); +extern s32 sub_8095190(void); + +extern struct UnkTextStruct2 gUnknown_80E71FC; +extern struct UnkTextStruct2 gUnknown_80E7278; +extern struct UnkTextStruct2 gUnknown_80E72EC; +extern struct UnkTextStruct2 gUnknown_80E7344; +extern struct UnkTextStruct2 gUnknown_80E73AC; +extern struct UnkTextStruct2 gUnknown_80E7408; +extern struct UnkTextStruct2 gUnknown_80E7468; +extern struct UnkTextStruct2 gUnknown_80E74C8; +extern struct UnkTextStruct2 gUnknown_80E752C; +extern struct UnkTextStruct2 gUnknown_80E7588; + +extern struct MenuItem gUnknown_80E7214[]; +extern struct MenuItem gUnknown_80E7290[]; +extern struct MenuItem gUnknown_80E7304[]; +extern struct MenuItem gUnknown_80E735C[]; +extern struct MenuItem gUnknown_80E73C4[]; +extern struct MenuItem gUnknown_80E7420[]; +extern struct MenuItem gUnknown_80E7480[]; +extern struct MenuItem gUnknown_80E74E0[]; +extern struct MenuItem gUnknown_80E7544[]; +extern struct MenuItem gUnknown_80E75A0[]; void CreateRescuePasswordMenu(u32 currMenu) { @@ -91,3 +147,360 @@ void CleanRescuePasswordMenu(void) gRescuePasswordMenu = NULL; } } + +static inline s32 UpdateRescuePasswordMenu_sub(s32 otherMenu) +{ + u32 iVar1; + s32 nextMenu; + + iVar1 = sub_8031DCC(); + nextMenu = otherMenu; + if (iVar1 != 0) + return nextMenu; + else + return MENU_NO_SCREEN_CHANGE; +} + +s32 UpdateRescuePasswordMenu(void) +{ + struct unkStruct_8095228 *puVar5; + struct unkStruct_8095228 *puVar6; + u32 iVar7; + struct MainMenu *iVar9; + s32 nextMenu; + struct unkStruct_8095228 local_44; + u32 local_14; + u32 subtract; + + local_14 = 0xb; + nextMenu = MENU_NO_SCREEN_CHANGE; + switch(gRescuePasswordMenu->state) { + case 0: + case 2: + case 4: + nextMenu = UpdateRescuePasswordMenu_sub(MENU_FRIEND_RESCUE); + break; + case 1: + case 3: + case 5: + iVar7 = sub_80154F0(); + MemoryFill8((u8 *)&local_44, 0, sizeof(struct unkStruct_8095228)); + switch(iVar7) + { + case 1: + sub_8031E00(); + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 0: + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 2: + nextMenu = MENU_FRIEND_RESCUE; + break; + case 3: + switch(sub_8039068(gRescuePasswordMenu->currMenu, gUnknown_202EC50, &local_44)) { + case 0x11: + nextMenu = 0x11; + sub_8038DC0(nextMenu); + gRescuePasswordMenu->state = 8; + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 0xd: + nextMenu = 0xD; + sub_8038DC0(nextMenu); + gRescuePasswordMenu->state = 8; + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 0x12: + nextMenu = 0x12; + sub_8038DC0(nextMenu); + gRescuePasswordMenu->state = 8; + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 7: + nextMenu = 7; + sub_8038DC0(nextMenu); + gRescuePasswordMenu->state = 8; + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 0x16: + sub_8095274(local_44.unk10); + sub_8038F98(); + gRescuePasswordMenu->state = 9; + nextMenu = MENU_NO_SCREEN_CHANGE; + local_44.mailType = 2; + sub_80951BC(&local_44); + break; + case 0x13: + nextMenu = 0x13; + sub_8038DC0(nextMenu); + gRescuePasswordMenu->state = 8; + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 9: + nextMenu = 0x9; + sub_8038DC0(nextMenu); + gRescuePasswordMenu->state = 8; + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 0x17: + sub_8038F98(); + gRescuePasswordMenu->state = 9; + nextMenu = MENU_NO_SCREEN_CHANGE; + local_44.mailType = 5; + sub_80951FC(&local_44); + puVar5 = sub_8095228(sub_809539C(1, local_44.unk10)); + puVar5->mailType = 7; + MemoryFill8((u8 *)&gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); + break; + default: + break; + case 0x14: + nextMenu = 0x14; + sub_8038DC0(nextMenu); + gRescuePasswordMenu->state = 8; + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 0xb: + nextMenu = 0xb; + sub_8038DC0(nextMenu); + gRescuePasswordMenu->state = 8; + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 0x18: + sub_8038F98(); + gRescuePasswordMenu->state = 9; + nextMenu = MENU_NO_SCREEN_CHANGE; + puVar6 = sub_8095228(sub_809539C(4, local_44.unk10)); + *puVar6 = local_44; + puVar6->mailType = 6; + iVar9 = GetMainMenu(); + iVar9->unk3A = 1; + break; + } + break; + default: + break; + } + break; + case 6: + nextMenu = UpdateRescuePasswordMenu_sub(MENU_WONDER_MAIL); + break; + case 7: + switch(sub_80154F0()) + { + case 3: + nextMenu = 0x15; + sub_8038DC0(nextMenu); + gRescuePasswordMenu->state = 8; + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 0: + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + case 1: + sub_8031E00(); + nextMenu = MENU_NO_SCREEN_CHANGE; + break; + default: + break; + case 2: + nextMenu = MENU_WONDER_MAIL; + break; + } + break; + case 8: + if (sub_8012FD8(&gRescuePasswordMenu->unk8) == '\0') { + sub_8013114(&gRescuePasswordMenu->unk8, &local_14); + } + switch(local_14) + { + default: + case 0xD: + break; + case 0xA: + case 0xC: + sub_8039174(); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_80151C0(4,gUnknown_202EC50); + gRescuePasswordMenu->state = 8; + subtract = gRescuePasswordMenu->currMenu - 0x21; + nextMenu = MENU_FRIEND_RESCUE; + if (1 < subtract) break; + nextMenu = MENU_WONDER_MAIL; + break; + case 11: + gRescuePasswordMenu->state = 8; + nextMenu = MENU_NO_SCREEN_CHANGE; + sub_80391F8(); + break; + } + break; + case 9: + if (sub_8012FD8(&gRescuePasswordMenu->unk8) == '\0') { + sub_8013114(&gRescuePasswordMenu->unk8, &local_14); + } + switch(local_14) + { + default: + case 0xD: + break; + case 0xA: + case 0xC: + sub_8039174(); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_80151C0(4,gUnknown_202EC50); + gRescuePasswordMenu->state = ConvertMenutoRescuePasswordState(gRescuePasswordMenu->currMenu); + subtract = gRescuePasswordMenu->currMenu - 0x21; + nextMenu = 0x2a; + if (subtract < 2) { + nextMenu = 0x2b; + } + break; + case 0xB: + gRescuePasswordMenu->state = 9; + nextMenu = MENU_NO_SCREEN_CHANGE; + sub_80391F8(); + break; + } + } + return nextMenu; +} + +void sub_8038DC0(u32 param_1) +{ + sub_8006518(gRescuePasswordMenu->unk1A8); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_80155F0(); + switch(param_1) { + case 0x11: + SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E71FC,gUnknown_80E7214,0,0xd,0); + break; + case 0x12: + SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E72EC,gUnknown_80E7304,0,0xd,0); + break; + case 7: + SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7344,gUnknown_80E735C,0,0xd,0); + break; + case 0xd: + SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7588,gUnknown_80E75A0,0,0xd,0); + break; + case 0x13: + SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E73AC,gUnknown_80E73C4,0,0xd,0); + break; + case 9: + SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7408,gUnknown_80E7420,0,0xd,0); + break; + case 0x14: + SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7468,gUnknown_80E7480,0,0xd,0); + break; + case 0xb: + SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E74C8,gUnknown_80E74E0,0,0xd,0); + break; + case 0x15: + SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E752C,gUnknown_80E7544,0,0xd,0); + break; + default: + break; + } + sub_8035CF4(&gRescuePasswordMenu->unk8,0,1); +} + +void sub_8038F98(void) +{ + sub_8006518(gRescuePasswordMenu->unk1A8); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_80155F0(); + SetMenuItems(&gRescuePasswordMenu->unk8,gRescuePasswordMenu->unk148,0,&gUnknown_80E7278,gUnknown_80E7290,0,0xd,0); + sub_8035CF4(&gRescuePasswordMenu->unk8,0,1); +} + +u32 ConvertMenutoRescuePasswordState(u32 unused) +{ + u32 uVar1; + + uVar1 = 0xb; + switch(gRescuePasswordMenu->currMenu) { + case 0x1b: + uVar1 = 0; + break; + case 0x1f: + uVar1 = 4; + break; + case 0x1d: + uVar1 = 2; + break; + case MENU_DISPLAY_RESCUE_PASSWORD: + uVar1 = 6; + break; + case 0x1c: + uVar1 = 1; + break; + case 0x20: + uVar1 = 5; + break; + case 0x1e: + uVar1 = 3; + break; + case MENU_RESCUE_PASSWORD_ENTRY: + uVar1 = 7; + break; + } + return uVar1; +} + +u32 sub_8039068(u32 param_1, u8 *param_2,struct unkStruct_8095228 *param_3) +{ + if ( (!sub_803D204(param_2,param_3)) || (7 < param_3->mailType) || + (param_3->floor >= GetDungeonFloorCount(param_3->dungeon)) || + (param_3->clientSpecies == SPECIES_NONE) || (SPECIES_RAYQUAZA_CUTSCENE < param_3->clientSpecies) || + (IsInvalidItemReward(param_3->unk20.itemIndex))) { + return 0x11; + } + else + switch(param_1) + { + case 0x1C: + if (param_3->mailType != WONDER_MAIL_TYPE_SOS) { + return 0x12; + } + else if ( (sub_80952F0(2, param_3->unk10)) || (sub_80952F0(4, param_3->unk10)) || (sub_80952F0(6, param_3->unk10)) || (sub_8095298(param_3->unk10))) { + return 0x7; + } + else if (sub_8095190() == -1) { + return 0xd; + } + else { + return 0x16; + } + break; + case 0x1E: + if (param_3->mailType != WONDER_MAIL_TYPE_AOK) { + return 0x13; + } + else if (!sub_80952F0(1, param_3->unk10)) { + return 0x9; + } + else { + return 0x17; + } + break; + case 0x20: + if (param_3->mailType != WONDER_MAIL_TYPE_THANK_YOU) { + return 0x14; + } + else if ((!sub_80952F0(4, param_3->unk10)) || (param_3->unk28 != sub_8011C34())) { + return 0xb; + } + else { + return 0x18; + } + break; + default: + return -1; + } +}