From a5c90b097045a50df6ecb7cc37ce50f3fc9f142f Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Tue, 1 Mar 2022 19:40:00 -0800 Subject: decomp some more saving functions --- asm/code_8095014.s | 484 ----------------------------------- asm/code_80958E8.s | 676 ------------------------------------------------- asm/code_8097318.s | 207 +++++++++++++++ include/code_8094F88.h | 35 +++ include/pokemon.h | 22 +- ld_script.txt | 3 + src/code_8094F88.c | 31 +-- src/code_8095824.c | 165 ++++++++++++ src/code_80972F4.c | 200 +++++++++++++++ src/friend_rescue_1.c | 3 +- src/load_screen.c | 15 +- 11 files changed, 635 insertions(+), 1206 deletions(-) create mode 100644 asm/code_8097318.s create mode 100644 include/code_8094F88.h create mode 100644 src/code_8095824.c create mode 100644 src/code_80972F4.c diff --git a/asm/code_8095014.s b/asm/code_8095014.s index 228811d..d5e9a35 100644 --- a/asm/code_8095014.s +++ b/asm/code_8095014.s @@ -452,488 +452,4 @@ sub_8095494: _080954B0: .4byte gUnknown_203B480 thumb_func_end sub_8095494 - thumb_func_start sub_80954B4 -sub_80954B4: - push {lr} - movs r0, 0x3 - bl sub_8095324 - cmp r0, 0 - bne _080954C4 - movs r0, 0 - b _080954C6 -_080954C4: - movs r0, 0x1 -_080954C6: - pop {r1} - bx r1 - thumb_func_end sub_80954B4 - - thumb_func_start sub_80954CC -sub_80954CC: - push {r4-r6,lr} - sub sp, 0x10 - adds r3, r0, 0 - adds r2, r1, 0 - mov r0, sp - adds r1, r3, 0 - bl xxx_init_struct_8094924_restore_809485C - ldr r6, _08095618 - movs r5, 0 - movs r4, 0x1F -_080954E2: - ldr r1, [r6] - adds r1, r5 - mov r0, sp - bl sub_8095774 - adds r5, 0x30 - subs r4, 0x1 - cmp r4, 0 - bge _080954E2 - ldr r4, _0809561C - ldr r1, [r4] - mov r0, sp - movs r2, 0x20 - bl RestoreIntegerBits - ldr r5, [r4] - adds r4, r5, 0x4 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x58 - bl memset - mov r0, sp - adds r1, r4, 0 - movs r2, 0x2 - bl RestoreIntegerBits - adds r1, r5, 0x6 - mov r0, sp - movs r2, 0x1 - bl RestoreIntegerBits - adds r1, r5, 0x7 - mov r0, sp - movs r2, 0x7 - bl RestoreIntegerBits - adds r4, 0x4 - mov r0, sp - adds r1, r4, 0 - bl xxx_restore_poke_sub_4_8090314 - adds r1, r5, 0 - adds r1, 0xC - mov r0, sp - movs r2, 0x9 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x10 - mov r0, sp - bl xxx_restore_poke_sub_c_808F410 - adds r1, r5, 0 - adds r1, 0x14 - mov r0, sp - bl xxx_restore_poke_sub_c_808F410 - adds r1, r5, 0 - adds r1, 0x18 - mov r0, sp - movs r2, 0xA - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x1A - mov r0, sp - movs r2, 0xA - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x1C - mov r0, sp - movs r2, 0x8 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x1D - mov r0, sp - movs r2, 0x8 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x1E - mov r0, sp - movs r2, 0x8 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x1F - mov r0, sp - movs r2, 0x8 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x20 - mov r0, sp - movs r2, 0x18 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x24 - mov r0, sp - movs r2, 0x18 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x28 - mov r0, sp - movs r2, 0x4 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x2C - mov r0, sp - bl RestoreHeldItem - adds r1, r5, 0 - adds r1, 0x30 - mov r0, sp - bl RestorePokemonMoves - adds r1, r5, 0 - adds r1, 0x50 - mov r0, sp - movs r2, 0x50 - bl RestoreIntegerBits - ldr r4, _08095620 - ldr r1, [r4] - mov r0, sp - movs r2, 0x20 - bl RestoreIntegerBits - adds r6, r4, 0 - movs r5, 0x4 - movs r4, 0x1F -_080955F4: - ldr r1, [r6] - adds r1, r5 - mov r0, sp - movs r2, 0x20 - bl RestoreIntegerBits - adds r5, 0x4 - subs r4, 0x1 - cmp r4, 0 - bge _080955F4 - mov r0, sp - bl nullsub_102 - ldr r0, [sp, 0x8] - add sp, 0x10 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08095618: .4byte gUnknown_203B480 -_0809561C: .4byte gUnknown_203B484 -_08095620: .4byte gUnknown_203B48C - thumb_func_end sub_80954CC - - thumb_func_start sub_8095624 -sub_8095624: - push {r4-r6,lr} - sub sp, 0x10 - adds r3, r0, 0 - adds r2, r1, 0 - mov r0, sp - adds r1, r3, 0 - bl xxx_init_struct_8094924_save_809486C - ldr r6, _08095768 - movs r5, 0 - movs r4, 0x1F -_0809563A: - ldr r1, [r6] - adds r1, r5 - mov r0, sp - bl sub_8095824 - adds r5, 0x30 - subs r4, 0x1 - cmp r4, 0 - bge _0809563A - ldr r4, _0809576C - ldr r1, [r4] - mov r0, sp - movs r2, 0x20 - bl SaveIntegerBits - ldr r5, [r4] - adds r4, r5, 0x4 - mov r0, sp - adds r1, r4, 0 - movs r2, 0x2 - bl SaveIntegerBits - adds r1, r5, 0x6 - mov r0, sp - movs r2, 0x1 - bl SaveIntegerBits - adds r1, r5, 0x7 - mov r0, sp - movs r2, 0x7 - bl SaveIntegerBits - adds r4, 0x4 - mov r0, sp - adds r1, r4, 0 - bl xxx_save_poke_sub_4_80902F4 - adds r1, r5, 0 - adds r1, 0xC - mov r0, sp - movs r2, 0x9 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x10 - mov r0, sp - bl xxx_save_poke_sub_c_808F41C - adds r1, r5, 0 - adds r1, 0x14 - mov r0, sp - bl xxx_save_poke_sub_c_808F41C - adds r1, r5, 0 - adds r1, 0x18 - mov r0, sp - movs r2, 0xA - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x1A - mov r0, sp - movs r2, 0xA - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x1C - mov r0, sp - movs r2, 0x8 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x1D - mov r0, sp - movs r2, 0x8 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x1E - mov r0, sp - movs r2, 0x8 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x1F - mov r0, sp - movs r2, 0x8 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x20 - mov r0, sp - movs r2, 0x18 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x24 - mov r0, sp - movs r2, 0x18 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x28 - mov r0, sp - movs r2, 0x4 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x2C - mov r0, sp - bl SaveHeldItem - adds r1, r5, 0 - adds r1, 0x30 - mov r0, sp - bl SavePokemonMoves - adds r1, r5, 0 - adds r1, 0x50 - mov r0, sp - movs r2, 0x50 - bl SaveIntegerBits - ldr r4, _08095770 - ldr r1, [r4] - mov r0, sp - movs r2, 0x20 - bl SaveIntegerBits - adds r6, r4, 0 - movs r5, 0x4 - movs r4, 0x1F -_08095742: - ldr r1, [r6] - adds r1, r5 - mov r0, sp - movs r2, 0x20 - bl SaveIntegerBits - adds r5, 0x4 - subs r4, 0x1 - cmp r4, 0 - bge _08095742 - mov r0, sp - bl nullsub_102 - ldr r0, [sp, 0x8] - add sp, 0x10 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08095768: .4byte gUnknown_203B480 -_0809576C: .4byte gUnknown_203B484 -_08095770: .4byte gUnknown_203B48C - thumb_func_end sub_8095624 - - thumb_func_start sub_8095774 -sub_8095774: - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - movs r2, 0x4 - bl RestoreIntegerBits - adds r1, r5, 0x4 - adds r0, r4, 0 - bl xxx_restore_poke_sub_4_8090314 - adds r1, r5, 0 - adds r1, 0x8 - adds r0, r4, 0 - movs r2, 0x18 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0xC - adds r0, r4, 0 - movs r2, 0x9 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x10 - adds r0, r4, 0 - movs r2, 0x20 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x14 - adds r0, r4, 0 - movs r2, 0x50 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x20 - adds r0, r4, 0 - movs r2, 0x8 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x21 - adds r0, r4, 0 - movs r2, 0x8 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x22 - adds r0, r4, 0 - movs r2, 0x8 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x24 - adds r0, r4, 0 - movs r2, 0x20 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x28 - adds r0, r4, 0 - movs r2, 0x20 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x2C - adds r0, r4, 0 - movs r2, 0x8 - bl RestoreIntegerBits - adds r0, r4, 0 - mov r1, sp - movs r2, 0x1 - bl RestoreIntegerBits - mov r0, sp - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - adds r1, r5, 0 - adds r1, 0x2D - strb r0, [r1] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8095774 - - thumb_func_start sub_8095824 -sub_8095824: - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r4, r1, 0 - movs r1, 0xFF - mov r0, sp - strb r1, [r0] - mov r6, sp - adds r6, 0x1 - movs r0, 0 - strb r0, [r6] - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x4 - bl SaveIntegerBits - adds r1, r4, 0x4 - adds r0, r5, 0 - bl xxx_save_poke_sub_4_80902F4 - adds r1, r4, 0 - adds r1, 0x8 - adds r0, r5, 0 - movs r2, 0x18 - bl SaveIntegerBits - adds r1, r4, 0 - adds r1, 0xC - adds r0, r5, 0 - movs r2, 0x9 - bl SaveIntegerBits - adds r1, r4, 0 - adds r1, 0x10 - adds r0, r5, 0 - movs r2, 0x20 - bl SaveIntegerBits - adds r1, r4, 0 - adds r1, 0x14 - adds r0, r5, 0 - movs r2, 0x50 - bl SaveIntegerBits - adds r1, r4, 0 - adds r1, 0x20 - adds r0, r5, 0 - movs r2, 0x8 - bl SaveIntegerBits - adds r1, r4, 0 - adds r1, 0x21 - adds r0, r5, 0 - movs r2, 0x8 - bl SaveIntegerBits - adds r1, r4, 0 - adds r1, 0x22 - adds r0, r5, 0 - movs r2, 0x8 - bl SaveIntegerBits - adds r1, r4, 0 - adds r1, 0x24 - adds r0, r5, 0 - movs r2, 0x20 - bl SaveIntegerBits - adds r1, r4, 0 - adds r1, 0x28 - adds r0, r5, 0 - movs r2, 0x20 - bl SaveIntegerBits - adds r1, r4, 0 - adds r1, 0x2C - adds r0, r5, 0 - movs r2, 0x8 - bl SaveIntegerBits - adds r0, r4, 0 - adds r0, 0x2D - ldrb r0, [r0] - mov r1, sp - cmp r0, 0 - bne _080958D2 - adds r1, r6, 0 -_080958D2: - adds r0, r5, 0 - movs r2, 0x1 - bl SaveIntegerBits - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8095824 - - thumb_func_start sub_80958E4 -sub_80958E4: - str r1, [r0] - bx lr - thumb_func_end sub_80958E4 - - .align 2,0 diff --git a/asm/code_80958E8.s b/asm/code_80958E8.s index b73e519..e326783 100644 --- a/asm/code_80958E8.s +++ b/asm/code_80958E8.s @@ -2816,680 +2816,4 @@ _08096EFE: _08096F4C: .4byte gUnknown_203B490 thumb_func_end sub_8096EEC - thumb_func_start sub_8096F50 -sub_8096F50: - push {r4-r7,lr} - adds r4, r0, 0 - bl sub_8096EB0 - mov r12, r0 - movs r5, 0 - ldr r0, _08096F8C - ldr r7, [r0] - ldrb r6, [r4, 0x4] - movs r3, 0 -_08096F64: - movs r1, 0x8C - lsls r1, 2 - adds r0, r3, r1 - adds r2, r7, r0 - ldrb r0, [r2] - cmp r0, r6 - bne _08096F90 - ldrb r0, [r2, 0x1] - ldrb r1, [r4, 0x5] - cmp r0, r1 - bne _08096F90 - ldr r1, [r2, 0x4] - ldr r0, [r4, 0x8] - cmp r1, r0 - bne _08096F90 - ldr r0, [r2, 0x8] - cmp r0, r12 - bne _08096F90 - movs r0, 0x1 - b _08096F9A - .align 2, 0 -_08096F8C: .4byte gUnknown_203B490 -_08096F90: - adds r3, 0xC - adds r5, 0x1 - cmp r5, 0xF - ble _08096F64 - movs r0, 0 -_08096F9A: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8096F50 - - thumb_func_start sub_8096FA0 -sub_8096FA0: - push {r4-r7,lr} - sub sp, 0x14 - adds r3, r0, 0 - adds r2, r1, 0 - mov r0, sp - adds r1, r3, 0 - bl xxx_init_struct_8094924_restore_809485C - add r7, sp, 0x10 - ldr r6, _08097020 - movs r5, 0 - movs r4, 0x3 -_08096FB8: - ldr r1, [r6] - adds r1, r5 - mov r0, sp - bl sub_80971EC - adds r5, 0x14 - subs r4, 0x1 - cmp r4, 0 - bge _08096FB8 - ldr r6, _08097020 - movs r5, 0x50 - movs r4, 0x7 -_08096FD0: - ldr r1, [r6] - adds r1, r5 - mov r0, sp - bl sub_80971EC - adds r5, 0x14 - subs r4, 0x1 - cmp r4, 0 - bge _08096FD0 - ldr r6, _08097020 - movs r5, 0xF0 - movs r4, 0x7 -_08096FE8: - ldr r1, [r6] - adds r1, r5 - mov r0, sp - bl sub_80971EC - adds r5, 0x14 - subs r4, 0x1 - cmp r4, 0 - bge _08096FE8 - movs r4, 0 - movs r6, 0x1 - ldr r5, _08097020 -_08097000: - mov r0, sp - adds r1, r7, 0 - movs r2, 0x1 - bl RestoreIntegerBits - ldr r1, [sp, 0x10] - ands r1, r6 - cmp r1, 0 - beq _08097024 - ldr r0, [r5] - movs r1, 0xBC - lsls r1, 2 - adds r0, r1 - adds r0, r4 - strb r6, [r0] - b _08097030 - .align 2, 0 -_08097020: .4byte gUnknown_203B490 -_08097024: - ldr r0, [r5] - movs r2, 0xBC - lsls r2, 2 - adds r0, r2 - adds r0, r4 - strb r1, [r0] -_08097030: - adds r4, 0x1 - cmp r4, 0x37 - ble _08097000 - mov r0, sp - adds r1, r7, 0 - movs r2, 0x1 - bl RestoreIntegerBits - ldr r1, [sp, 0x10] - movs r2, 0x1 - ands r1, r2 - cmp r1, 0 - beq _0809705C - ldr r0, _08097058 - ldr r0, [r0] - movs r1, 0xCA - lsls r1, 2 - adds r0, r1 - strb r2, [r0] - b _08097068 - .align 2, 0 -_08097058: .4byte gUnknown_203B490 -_0809705C: - ldr r0, _080970D4 - ldr r0, [r0] - movs r2, 0xCA - lsls r2, 2 - adds r0, r2 - strb r1, [r0] -_08097068: - ldr r4, _080970D4 - ldr r1, [r4] - movs r0, 0xC8 - lsls r0, 1 - adds r1, r0 - movs r2, 0xA0 - lsls r2, 1 - mov r0, sp - bl RestoreIntegerBits - ldr r1, [r4] - movs r2, 0xDC - lsls r2, 1 - adds r1, r2 - movs r2, 0xF0 - lsls r2, 2 - mov r0, sp - bl RestoreIntegerBits - adds r6, r4, 0 - movs r5, 0x8C - lsls r5, 2 - movs r4, 0xF -_08097096: - ldr r1, [r6] - adds r1, r5 - adds r1, 0x8 - mov r0, sp - movs r2, 0x20 - bl RestoreIntegerBits - ldr r1, [r6] - adds r1, r5 - adds r1, 0x4 - mov r0, sp - movs r2, 0x18 - bl RestoreIntegerBits - ldr r1, [r6] - adds r1, r5 - mov r0, sp - bl xxx_restore_poke_sub_4_8090314 - adds r5, 0xC - subs r4, 0x1 - cmp r4, 0 - bge _08097096 - mov r0, sp - bl nullsub_102 - ldr r0, [sp, 0x8] - add sp, 0x14 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080970D4: .4byte gUnknown_203B490 - thumb_func_end sub_8096FA0 - - thumb_func_start sub_80970D8 -sub_80970D8: - push {r4-r7,lr} - sub sp, 0x14 - adds r3, r0, 0 - adds r2, r1, 0 - mov r0, sp - adds r1, r3, 0 - bl xxx_init_struct_8094924_save_809486C - add r7, sp, 0x10 - ldr r6, _080971E8 - movs r5, 0 - movs r4, 0x3 -_080970F0: - ldr r1, [r6] - adds r1, r5 - mov r0, sp - bl sub_8097270 - adds r5, 0x14 - subs r4, 0x1 - cmp r4, 0 - bge _080970F0 - ldr r6, _080971E8 - movs r5, 0x50 - movs r4, 0x7 -_08097108: - ldr r1, [r6] - adds r1, r5 - mov r0, sp - bl sub_8097270 - adds r5, 0x14 - subs r4, 0x1 - cmp r4, 0 - bge _08097108 - ldr r6, _080971E8 - movs r5, 0xF0 - movs r4, 0x7 -_08097120: - ldr r1, [r6] - adds r1, r5 - mov r0, sp - bl sub_8097270 - adds r5, 0x14 - subs r4, 0x1 - cmp r4, 0 - bge _08097120 - movs r4, 0 -_08097134: - ldr r0, _080971E8 - ldr r0, [r0] - movs r1, 0xBC - lsls r1, 2 - adds r0, r1 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _0809714A - movs r0, 0x1 - negs r0, r0 -_0809714A: - str r0, [sp, 0x10] - mov r0, sp - adds r1, r7, 0 - movs r2, 0x1 - bl SaveIntegerBits - adds r4, 0x1 - cmp r4, 0x37 - ble _08097134 - ldr r0, _080971E8 - ldr r0, [r0] - movs r1, 0xCA - lsls r1, 2 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08097170 - movs r0, 0x1 - negs r0, r0 -_08097170: - str r0, [sp, 0x10] - mov r0, sp - adds r1, r7, 0 - movs r2, 0x1 - bl SaveIntegerBits - ldr r4, _080971E8 - ldr r1, [r4] - movs r0, 0xC8 - lsls r0, 1 - adds r1, r0 - movs r2, 0xA0 - lsls r2, 1 - mov r0, sp - bl SaveIntegerBits - ldr r1, [r4] - movs r0, 0xDC - lsls r0, 1 - adds r1, r0 - movs r2, 0xF0 - lsls r2, 2 - mov r0, sp - bl SaveIntegerBits - adds r6, r4, 0 - movs r5, 0x8C - lsls r5, 2 - movs r4, 0xF -_080971AA: - ldr r1, [r6] - adds r1, r5 - adds r1, 0x8 - mov r0, sp - movs r2, 0x20 - bl SaveIntegerBits - ldr r1, [r6] - adds r1, r5 - adds r1, 0x4 - mov r0, sp - movs r2, 0x18 - bl SaveIntegerBits - ldr r1, [r6] - adds r1, r5 - mov r0, sp - bl xxx_save_poke_sub_4_80902F4 - adds r5, 0xC - subs r4, 0x1 - cmp r4, 0 - bge _080971AA - mov r0, sp - bl nullsub_102 - ldr r0, [sp, 0x8] - add sp, 0x14 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080971E8: .4byte gUnknown_203B490 - thumb_func_end sub_80970D8 - - thumb_func_start sub_80971EC -sub_80971EC: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r2, 0x4 - bl RestoreIntegerBits - adds r1, r5, 0x1 - adds r0, r4, 0 - movs r2, 0x3 - bl RestoreIntegerBits - adds r1, r5, 0x2 - adds r0, r4, 0 - movs r2, 0x4 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0xC - adds r0, r4, 0 - movs r2, 0x9 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0xE - adds r0, r4, 0 - movs r2, 0x9 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x10 - adds r0, r4, 0 - movs r2, 0x8 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x11 - adds r0, r4, 0 - movs r2, 0x4 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x12 - adds r0, r4, 0 - movs r2, 0x8 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x13 - adds r0, r4, 0 - movs r2, 0x6 - bl RestoreIntegerBits - adds r1, r5, 0 - adds r1, 0x8 - adds r0, r4, 0 - movs r2, 0x18 - bl RestoreIntegerBits - adds r1, r5, 0x4 - adds r0, r4, 0 - bl xxx_restore_poke_sub_4_8090314 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80971EC - - thumb_func_start sub_8097270 -sub_8097270: - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r2, 0x4 - bl SaveIntegerBits - adds r1, r5, 0x1 - adds r0, r4, 0 - movs r2, 0x3 - bl SaveIntegerBits - adds r1, r5, 0x2 - adds r0, r4, 0 - movs r2, 0x4 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0xC - adds r0, r4, 0 - movs r2, 0x9 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0xE - adds r0, r4, 0 - movs r2, 0x9 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x10 - adds r0, r4, 0 - movs r2, 0x8 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x11 - adds r0, r4, 0 - movs r2, 0x4 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x12 - adds r0, r4, 0 - movs r2, 0x8 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x13 - adds r0, r4, 0 - movs r2, 0x6 - bl SaveIntegerBits - adds r1, r5, 0 - adds r1, 0x8 - adds r0, r4, 0 - movs r2, 0x18 - bl SaveIntegerBits - adds r1, r5, 0x4 - adds r0, r4, 0 - bl xxx_save_poke_sub_4_80902F4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8097270 - - thumb_func_start sub_80972F4 -sub_80972F4: - push {lr} - movs r0, 0 - movs r1, 0x2B - bl sub_80015C0 - movs r0, 0 - movs r1, 0x2C - bl sub_80015C0 - movs r0, 0 - movs r1, 0x2D - bl sub_80015C0 - pop {r0} - bx r0 - thumb_func_end sub_80972F4 - - thumb_func_start nullsub_128 -nullsub_128: - bx lr - thumb_func_end nullsub_128 - - thumb_func_start sub_8097318 -sub_8097318: - push {lr} - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - bne _08097326 - movs r0, 0 - b _08097338 -_08097326: - lsls r2, r0, 16 - lsrs r2, 16 - movs r0, 0 - movs r1, 0x2B - bl sub_8001784 - cmp r0, 0 - beq _08097338 - movs r0, 0x1 -_08097338: - pop {r1} - bx r1 - thumb_func_end sub_8097318 - - thumb_func_start sub_809733C -sub_809733C: - push {r4-r6,lr} - lsls r0, 16 - asrs r4, r0, 16 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r4, 0xD - beq _0809737C - lsls r0, r4, 16 - lsrs r5, r0, 16 - movs r0, 0 - movs r1, 0x2C - adds r2, r5, 0 - bl sub_8001784 - cmp r0, 0 - bne _0809737C - movs r0, 0 - movs r1, 0x2B - adds r2, r5, 0 - adds r3, r6, 0 - bl sub_800199C - cmp r6, 0 - beq _0809737C - cmp r4, 0xE - blt _0809737C - cmp r4, 0xF - ble _08097378 - cmp r4, 0x1C - bne _0809737C -_08097378: - bl sub_809674C -_0809737C: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_809733C - - thumb_func_start sub_8097384 -sub_8097384: - push {lr} - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - bne _08097392 - movs r0, 0 - b _080973A4 -_08097392: - lsls r2, r0, 16 - lsrs r2, 16 - movs r0, 0 - movs r1, 0x2C - bl sub_8001784 - cmp r0, 0 - beq _080973A4 - movs r0, 0x1 -_080973A4: - pop {r1} - bx r1 - thumb_func_end sub_8097384 - - thumb_func_start sub_80973A8 -sub_80973A8: - push {r4-r6,lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r0, 0xD - beq _080973EE - lsls r5, r0, 16 - cmp r6, 0 - beq _080973E2 - bl sub_80A26B8 - lsls r0, 16 - asrs r4, r0, 16 - lsrs r2, r5, 16 - movs r0, 0 - movs r1, 0x2B - movs r3, 0 - bl sub_800199C - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - beq _080973E2 - movs r0, 0 - movs r1, 0x12 - adds r2, r4, 0 - bl sub_80018D8 -_080973E2: - lsrs r2, r5, 16 - movs r0, 0 - movs r1, 0x2C - adds r3, r6, 0 - bl sub_800199C -_080973EE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80973A8 - - thumb_func_start sub_80973F4 -sub_80973F4: - push {lr} - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - bne _08097402 - movs r0, 0 - b _08097414 -_08097402: - lsls r2, r0, 16 - lsrs r2, 16 - movs r0, 0 - movs r1, 0x2D - bl sub_8001784 - cmp r0, 0 - beq _08097414 - movs r0, 0x1 -_08097414: - pop {r1} - bx r1 - thumb_func_end sub_80973F4 - - thumb_func_start sub_8097418 -sub_8097418: - push {r4-r7,lr} - lsls r0, 16 - asrs r5, r0, 16 - lsls r1, 24 - lsrs r7, r1, 24 - cmp r5, 0xD - beq _08097470 - lsls r6, r5, 16 - cmp r7, 0 - beq _08097464 - lsrs r2, r6, 16 - movs r0, 0 - movs r1, 0x2C - movs r3, 0 - bl sub_800199C - cmp r5, 0x1E - bgt _08097464 - lsls r0, r5, 3 - ldr r1, _08097478 - adds r4, r0, r1 - ldrb r0, [r4, 0x4] - cmp r0, 0xFF - beq _0809744C - bl sub_8097FA8 -_0809744C: - ldrb r0, [r4, 0x5] - cmp r0, 0xFF - beq _08097456 - bl sub_8097FA8 -_08097456: - cmp r5, 0x9 - bne _08097460 - movs r0, 0x1F - bl sub_8097FA8 -_08097460: - bl sub_8097FF8 -_08097464: - lsrs r2, r6, 16 - movs r0, 0 - movs r1, 0x2D - adds r3, r7, 0 - bl sub_800199C -_08097470: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08097478: .4byte gStoryMissionText - thumb_func_end sub_8097418 - .align 2,0 diff --git a/asm/code_8097318.s b/asm/code_8097318.s new file mode 100644 index 0000000..d8acc07 --- /dev/null +++ b/asm/code_8097318.s @@ -0,0 +1,207 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_8097318 +sub_8097318: + push {lr} + lsls r0, 16 + asrs r0, 16 + cmp r0, 0xD + bne _08097326 + movs r0, 0 + b _08097338 +_08097326: + lsls r2, r0, 16 + lsrs r2, 16 + movs r0, 0 + movs r1, 0x2B + bl sub_8001784 + cmp r0, 0 + beq _08097338 + movs r0, 0x1 +_08097338: + pop {r1} + bx r1 + thumb_func_end sub_8097318 + + thumb_func_start sub_809733C +sub_809733C: + push {r4-r6,lr} + lsls r0, 16 + asrs r4, r0, 16 + lsls r1, 24 + lsrs r6, r1, 24 + cmp r4, 0xD + beq _0809737C + lsls r0, r4, 16 + lsrs r5, r0, 16 + movs r0, 0 + movs r1, 0x2C + adds r2, r5, 0 + bl sub_8001784 + cmp r0, 0 + bne _0809737C + movs r0, 0 + movs r1, 0x2B + adds r2, r5, 0 + adds r3, r6, 0 + bl sub_800199C + cmp r6, 0 + beq _0809737C + cmp r4, 0xE + blt _0809737C + cmp r4, 0xF + ble _08097378 + cmp r4, 0x1C + bne _0809737C +_08097378: + bl sub_809674C +_0809737C: + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end sub_809733C + + thumb_func_start sub_8097384 +sub_8097384: + push {lr} + lsls r0, 16 + asrs r0, 16 + cmp r0, 0xD + bne _08097392 + movs r0, 0 + b _080973A4 +_08097392: + lsls r2, r0, 16 + lsrs r2, 16 + movs r0, 0 + movs r1, 0x2C + bl sub_8001784 + cmp r0, 0 + beq _080973A4 + movs r0, 0x1 +_080973A4: + pop {r1} + bx r1 + thumb_func_end sub_8097384 + + thumb_func_start sub_80973A8 +sub_80973A8: + push {r4-r6,lr} + lsls r0, 16 + asrs r0, 16 + lsls r1, 24 + lsrs r6, r1, 24 + cmp r0, 0xD + beq _080973EE + lsls r5, r0, 16 + cmp r6, 0 + beq _080973E2 + bl sub_80A26B8 + lsls r0, 16 + asrs r4, r0, 16 + lsrs r2, r5, 16 + movs r0, 0 + movs r1, 0x2B + movs r3, 0 + bl sub_800199C + movs r0, 0x1 + negs r0, r0 + cmp r4, r0 + beq _080973E2 + movs r0, 0 + movs r1, 0x12 + adds r2, r4, 0 + bl sub_80018D8 +_080973E2: + lsrs r2, r5, 16 + movs r0, 0 + movs r1, 0x2C + adds r3, r6, 0 + bl sub_800199C +_080973EE: + pop {r4-r6} + pop {r0} + bx r0 + thumb_func_end sub_80973A8 + + thumb_func_start sub_80973F4 +sub_80973F4: + push {lr} + lsls r0, 16 + asrs r0, 16 + cmp r0, 0xD + bne _08097402 + movs r0, 0 + b _08097414 +_08097402: + lsls r2, r0, 16 + lsrs r2, 16 + movs r0, 0 + movs r1, 0x2D + bl sub_8001784 + cmp r0, 0 + beq _08097414 + movs r0, 0x1 +_08097414: + pop {r1} + bx r1 + thumb_func_end sub_80973F4 + + thumb_func_start sub_8097418 +sub_8097418: + push {r4-r7,lr} + lsls r0, 16 + asrs r5, r0, 16 + lsls r1, 24 + lsrs r7, r1, 24 + cmp r5, 0xD + beq _08097470 + lsls r6, r5, 16 + cmp r7, 0 + beq _08097464 + lsrs r2, r6, 16 + movs r0, 0 + movs r1, 0x2C + movs r3, 0 + bl sub_800199C + cmp r5, 0x1E + bgt _08097464 + lsls r0, r5, 3 + ldr r1, _08097478 + adds r4, r0, r1 + ldrb r0, [r4, 0x4] + cmp r0, 0xFF + beq _0809744C + bl sub_8097FA8 +_0809744C: + ldrb r0, [r4, 0x5] + cmp r0, 0xFF + beq _08097456 + bl sub_8097FA8 +_08097456: + cmp r5, 0x9 + bne _08097460 + movs r0, 0x1F + bl sub_8097FA8 +_08097460: + bl sub_8097FF8 +_08097464: + lsrs r2, r6, 16 + movs r0, 0 + movs r1, 0x2D + adds r3, r7, 0 + bl sub_800199C +_08097470: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08097478: .4byte gStoryMissionText + thumb_func_end sub_8097418 + + .align 2,0 diff --git a/include/code_8094F88.h b/include/code_8094F88.h new file mode 100644 index 0000000..32ef7a5 --- /dev/null +++ b/include/code_8094F88.h @@ -0,0 +1,35 @@ +#ifndef GUARD_CODE_8094F88_H +#define GUARD_CODE_8094F88_H + +struct unkStruct_203B480 +{ + u8 unk0; + struct unkPokeSubStruct_4 unk4; + u32 unk8; + u32 unkC; + u32 unk10; + u32 unk14; + u32 unk18; + u32 unk1C; + u8 unk20; + u8 unk21; + u8 unk22; + u32 unk24; + u32 unk28; + u8 unk2C; + u8 unk2D; +}; + +struct unkStruct_203B484 +{ + u32 unk0; + struct PokemonStruct unk4; +}; + +struct unkStruct_203B48C +{ + s32 unk0; + s32 unk4[0x20]; +}; + +#endif diff --git a/include/pokemon.h b/include/pokemon.h index 912df49..d72f88e 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -34,21 +34,21 @@ struct unkPokeSubStruct_C struct PokemonStruct { // size: 0x58 - u16 unk0; // recruited?? - u8 unk2; - u8 unkHasNextStage; // set to a random value? - struct unkPokeSubStruct_4 unk4; + /* 0x0 */ u16 unk0; // recruited?? + /* 0x1 */ u8 unk2; + /* 0x3 */ u8 unkHasNextStage; // set to a random value? + /* 0x4 */ struct unkPokeSubStruct_4 unk4; /* 0x8 */ s16 speciesNum; // species # - struct unkPokeSubStruct_C unkC[2]; + /* 0xC */ struct unkPokeSubStruct_C unkC[2]; /* 0x14 */ s16 IQ; /* 0x16 */ u16 pokeHP; // HP /* 0x18 */ struct Offense offense; - u32 unk1C; - u32 IQSkills; - u8 unk24; - u8 fill25[3]; - struct HeldItem heldItem; - struct PokemonMove moves[MAX_MON_MOVES]; + /* 0x1C */ u32 unk1C; + /* 0x20 */ u32 IQSkills; + /* 0x24 */ u8 unk24; + /* 0x25 */ u8 fill25[3]; + /* 0x28 */ struct HeldItem heldItem; + /* 0x2C */ struct PokemonMove moves[MAX_MON_MOVES]; /* 0x4C */ u8 name[POKEMON_NAME_LENGTH]; }; diff --git a/ld_script.txt b/ld_script.txt index ea6c581..335f5f0 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -299,8 +299,11 @@ SECTIONS { src/play_time.o(.text); src/code_8094F88.o(.text); asm/code_8095014.o(.text); + src/code_8095824.o(.text); src/code_80958E8.o(.text); asm/code_80958E8.o(.text); + src/code_80972F4.o(.text); + asm/code_8097318.o(.text); src/code_809747C.o(.text); asm/code_809747C.o(.text); src/code_809747C_1.o(.text); diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 5bd3a29..0ca6de9 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -1,33 +1,18 @@ #include "global.h" +#include "pokemon.h" +#include "code_8094F88.h" #include "memory.h" -struct unkStruct_203B480 -{ - //size of 48 - u8 unk0; - u8 fill1[0x22 - 1]; - u8 unk22; - u8 fill23[0x2D - 0x23]; - u8 unk2D; -}; - -struct unkStruct_203B48C -{ - s32 unk0; - s32 unk4[0x20]; -}; - extern struct unkStruct_203B480 gUnknown_2038C88; -extern u8 gUnknown_2039288; -extern u32 gUnknown_20392E8; +extern struct unkStruct_203B480 *gUnknown_203B480; +extern struct unkStruct_203B484 gUnknown_2039288; +extern struct unkStruct_203B484 *gUnknown_203B484; extern struct unkStruct_203B48C gUnknown_20393C0; -extern u8 *gUnknown_203B484; +extern struct unkStruct_203B48C *gUnknown_203B48C; extern u32 *gUnknown_203B488; +extern u32 gUnknown_20392E8; -extern struct unkStruct_203B480 *gUnknown_203B480; - -extern struct unkStruct_203B48C *gUnknown_203B48C; // def a pointer void sub_80950BC(void) @@ -43,7 +28,7 @@ struct unkStruct_203B480 *sub_80950F8(void) return &gUnknown_2038C88; } -u8 *sub_8095100(void) +struct unkStruct_203B484 *sub_8095100(void) { return &gUnknown_2039288; } diff --git a/src/code_8095824.c b/src/code_8095824.c new file mode 100644 index 0000000..b366574 --- /dev/null +++ b/src/code_8095824.c @@ -0,0 +1,165 @@ +#include "global.h" +#include "pokemon.h" +#include "code_8094F88.h" + +extern struct unkStruct_203B484 *gUnknown_203B484; +extern struct unkStruct_203B480 *gUnknown_203B480; +extern struct unkStruct_203B48C *gUnknown_203B48C; + +extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC); +extern void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924*, struct unkPokeSubStruct_C*); +extern void SavePokemonMoves(struct unkStruct_8094924 *r0, struct PokemonMove *moveSet); +extern void RestorePokemonMoves(struct unkStruct_8094924 *r0, struct PokemonMove *moveSet); + +void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b); +void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b); +extern u32 sub_8095324(u32); + +u32 sub_80954B4(void) +{ + if(sub_8095324(3) != 0) + return 1; + else + return 0; +} + +u32 sub_80954CC(u8 *a, u32 b) +{ + struct unkStruct_8094924 backup; + struct PokemonStruct *temp; + s32 index; + + xxx_init_struct_8094924_restore_809485C(&backup, a, b); + for(index = 0; index < 0x20; index++) + { + sub_8095774(&backup, &gUnknown_203B480[index]); + } + RestoreIntegerBits(&backup, &gUnknown_203B484->unk0, 0x20); + temp = &gUnknown_203B484->unk4; + memset(temp, 0, sizeof(struct PokemonStruct)); + RestoreIntegerBits(&backup, &temp->unk0, 2); + RestoreIntegerBits(&backup, &temp->unk2, 1); + RestoreIntegerBits(&backup, &temp->unkHasNextStage, 7); + xxx_restore_poke_sub_4_8090314(&backup, &temp->unk4); + RestoreIntegerBits(&backup, &temp->speciesNum, 9); + xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[0]); + xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[1]); + RestoreIntegerBits(&backup, &temp->IQ, 0xA); + RestoreIntegerBits(&backup, &temp->pokeHP, 0xA); + RestoreIntegerBits(&backup, &temp->offense.att[0], 8); + RestoreIntegerBits(&backup, &temp->offense.att[1], 8); + RestoreIntegerBits(&backup, &temp->offense.def[0], 8); + RestoreIntegerBits(&backup, &temp->offense.def[1], 8); + RestoreIntegerBits(&backup, &temp->unk1C, 0x18); + RestoreIntegerBits(&backup, &temp->IQSkills, 0x18); + RestoreIntegerBits(&backup, &temp->unk24, 4); + RestoreHeldItem(&backup, &temp->heldItem); + RestorePokemonMoves(&backup, temp->moves); + RestoreIntegerBits(&backup, temp->name, 0x50); + + RestoreIntegerBits(&backup, &gUnknown_203B48C->unk0, 0x20); + for(index = 0; index < 0x20; index++) + { + RestoreIntegerBits(&backup, &gUnknown_203B48C->unk4[index], 0x20); + } + nullsub_102(&backup); + return backup.unk8; +} + +u32 sub_8095624(u8 *a, u32 b) +{ + struct unkStruct_8094924 backup; + struct PokemonStruct *temp; + s32 index; + + xxx_init_struct_8094924_save_809486C(&backup, a, b); + for(index = 0; index < 0x20; index++) + { + sub_8095824(&backup, &gUnknown_203B480[index]); + } + SaveIntegerBits(&backup, &gUnknown_203B484->unk0, 0x20); + temp = &gUnknown_203B484->unk4; + SaveIntegerBits(&backup, &temp->unk0, 2); + SaveIntegerBits(&backup, &temp->unk2, 1); + SaveIntegerBits(&backup, &temp->unkHasNextStage, 7); + xxx_save_poke_sub_4_80902F4(&backup, &temp->unk4); + SaveIntegerBits(&backup, &temp->speciesNum, 9); + xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[0]); + xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[1]); + SaveIntegerBits(&backup, &temp->IQ, 0xA); + SaveIntegerBits(&backup, &temp->pokeHP, 0xA); + SaveIntegerBits(&backup, &temp->offense.att[0], 8); + SaveIntegerBits(&backup, &temp->offense.att[1], 8); + SaveIntegerBits(&backup, &temp->offense.def[0], 8); + SaveIntegerBits(&backup, &temp->offense.def[1], 8); + SaveIntegerBits(&backup, &temp->unk1C, 0x18); + SaveIntegerBits(&backup, &temp->IQSkills, 0x18); + SaveIntegerBits(&backup, &temp->unk24, 4); + SaveHeldItem(&backup, &temp->heldItem); + SavePokemonMoves(&backup, temp->moves); + SaveIntegerBits(&backup, temp->name, 0x50); + + SaveIntegerBits(&backup, &gUnknown_203B48C->unk0, 0x20); + for(index = 0; index < 0x20; index++) + { + SaveIntegerBits(&backup, &gUnknown_203B48C->unk4[index], 0x20); + } + nullsub_102(&backup); + return backup.unk8; +} + +void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) +{ + u8 temp; + + RestoreIntegerBits(a, &b->unk0, 4); + xxx_restore_poke_sub_4_8090314(a, &b->unk4); + RestoreIntegerBits(a, &b->unk8, 0x18); + RestoreIntegerBits(a, &b->unkC, 0x9); + RestoreIntegerBits(a, &b->unk10, 0x20); + RestoreIntegerBits(a, &b->unk14, 0x50); + RestoreIntegerBits(a, &b->unk20, 0x8); + RestoreIntegerBits(a, &b->unk21, 0x8); + RestoreIntegerBits(a, &b->unk22, 0x8); + RestoreIntegerBits(a, &b->unk24, 0x20); + RestoreIntegerBits(a, &b->unk28, 0x20); + RestoreIntegerBits(a, &b->unk2C, 0x8); + + RestoreIntegerBits(a, &temp, 1); + b->unk2D = temp & 1; +} + +void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) +{ + u8 neg1; + u8 zero; + u8 *puVar2; + neg1 = -1; + zero = 0; + + SaveIntegerBits(a, &b->unk0, 4); + xxx_save_poke_sub_4_80902F4(a, &b->unk4); + SaveIntegerBits(a, &b->unk8, 0x18); + SaveIntegerBits(a, &b->unkC, 0x9); + SaveIntegerBits(a, &b->unk10, 0x20); + SaveIntegerBits(a, &b->unk14, 0x50); + SaveIntegerBits(a, &b->unk20, 0x8); + SaveIntegerBits(a, &b->unk21, 0x8); + SaveIntegerBits(a, &b->unk22, 0x8); + SaveIntegerBits(a, &b->unk24, 0x20); + SaveIntegerBits(a, &b->unk28, 0x20); + SaveIntegerBits(a, &b->unk2C, 0x8); + + if(b->unk2D != 0) + puVar2 = &neg1; + else + puVar2 = &zero; + SaveIntegerBits(a, puVar2, 1); +} + +void sub_80958E4(u32 *a, u32 b) +{ + *a = b; +} diff --git a/src/code_80972F4.c b/src/code_80972F4.c new file mode 100644 index 0000000..7e87832 --- /dev/null +++ b/src/code_80972F4.c @@ -0,0 +1,200 @@ +#include "global.h" +#include "pokemon.h" +#include "wonder_mail.h" + +extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void sub_80015C0(u32, u32); + +struct unkStruct_8097270 +{ + u8 unk0; + u8 unk1; + u8 unk2; + struct unkPokeSubStruct_4 unk4; + u32 unk8; + u16 unkC; + u16 unkE; + u8 unk10; + u8 unk11; + u8 unk12; + u8 unk13; +}; + +struct subStruct_203B490 +{ + // size: 0xC + struct unkPokeSubStruct_4 unk0; + u32 unk4; + u32 unk8; +}; + + +struct unkStruct_203B490 +{ + // size: 0x330? + + struct unkStruct_8097270 unk0[4]; + struct unkStruct_8097270 unk50[8]; + struct unkStruct_8097270 unkF0[8]; + u8 unk190[0x28]; + u8 unk1B8[0x78]; + struct subStruct_203B490 unk230[16]; + u8 unk2F0[0x38]; + u8 unk328; +}; +extern struct unkStruct_203B490 *gUnknown_203B490; + +void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b); +void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b); +extern s32 sub_8096EB0(void); + +bool8 sub_8096F50(struct WonderMail *r0) +{ + s32 index; + s32 temp2; + struct subStruct_203B490 *temp; + + temp2 = sub_8096EB0(); + + + for(index = 0; index < 0x10; index++) + { + temp = &gUnknown_203B490->unk230[index]; + if(temp->unk0.unk4 == r0->dungeon) + if(temp->unk0.unk5 == r0->floor) + if(temp->unk4 == r0->unk8) + if(temp->unk8 == temp2) + return TRUE; + } + return FALSE; +} + +u32 sub_8096FA0(u8 *r0, u32 size) +{ + s32 index; + struct unkStruct_8094924 backup; + u32 temp; + + xxx_init_struct_8094924_restore_809485C(&backup, r0, size); + for(index = 0; index < 4; index++) + { + sub_80971EC(&backup, &gUnknown_203B490->unk0[index]); + } + for(index = 0; index < 8; index++) + { + sub_80971EC(&backup, &gUnknown_203B490->unk50[index]); + } + for(index = 0; index < 8; index++) + { + sub_80971EC(&backup, &gUnknown_203B490->unkF0[index]); + } + for(index = 0; index < 0x38; index++) + { + RestoreIntegerBits(&backup, &temp, 1); + if(temp & 1) + gUnknown_203B490->unk2F0[index] = 1; + else + gUnknown_203B490->unk2F0[index] = 0; + } + RestoreIntegerBits(&backup, &temp, 1); + if(temp & 1) + gUnknown_203B490->unk328 = 1; + else + gUnknown_203B490->unk328 = 0; + + RestoreIntegerBits(&backup, gUnknown_203B490->unk190, 0x140); + RestoreIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0); + for(index = 0; index < 0x10; index++) + { + RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); + RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); + xxx_restore_poke_sub_4_8090314(&backup, &gUnknown_203B490->unk230[index].unk0); + } + nullsub_102(&backup); + return backup.unk8; +} + +u32 sub_80970D8(u8 *r0, u32 size) +{ + s32 index; + struct unkStruct_8094924 backup; + u32 temp; + + xxx_init_struct_8094924_save_809486C(&backup, r0, size); + for(index = 0; index < 4; index++) + { + sub_8097270(&backup, &gUnknown_203B490->unk0[index]); + } + for(index = 0; index < 8; index++) + { + sub_8097270(&backup, &gUnknown_203B490->unk50[index]); + } + for(index = 0; index < 8; index++) + { + sub_8097270(&backup, &gUnknown_203B490->unkF0[index]); + } + for(index = 0; index < 0x38; index++) + { + if(gUnknown_203B490->unk2F0[index] != 0) + temp = -1; + else + temp = 0; + SaveIntegerBits(&backup, &temp, 1); + } + if(gUnknown_203B490->unk328 != 0) + temp = -1; + else + temp = 0; + SaveIntegerBits(&backup, &temp, 1); + SaveIntegerBits(&backup, gUnknown_203B490->unk190, 0x140); + SaveIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0); + for(index = 0; index < 0x10; index++) + { + SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); + SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); + xxx_save_poke_sub_4_80902F4(&backup, &gUnknown_203B490->unk230[index].unk0); + } + nullsub_102(&backup); + return backup.unk8; +} + +void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b) +{ + RestoreIntegerBits(a, &b->unk0, 4); + RestoreIntegerBits(a, &b->unk1, 3); + RestoreIntegerBits(a, &b->unk2, 4); + RestoreIntegerBits(a, &b->unkC, 9); + RestoreIntegerBits(a, &b->unkE, 9); + RestoreIntegerBits(a, &b->unk10, 8); + RestoreIntegerBits(a, &b->unk11, 4); + RestoreIntegerBits(a, &b->unk12, 8); + RestoreIntegerBits(a, &b->unk13, 6); + RestoreIntegerBits(a, &b->unk8, 0x18); + xxx_restore_poke_sub_4_8090314(a, &b->unk4); +} + +void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b) +{ + SaveIntegerBits(a, &b->unk0, 4); + SaveIntegerBits(a, &b->unk1, 3); + SaveIntegerBits(a, &b->unk2, 4); + SaveIntegerBits(a, &b->unkC, 9); + SaveIntegerBits(a, &b->unkE, 9); + SaveIntegerBits(a, &b->unk10, 8); + SaveIntegerBits(a, &b->unk11, 4); + SaveIntegerBits(a, &b->unk12, 8); + SaveIntegerBits(a, &b->unk13, 6); + SaveIntegerBits(a, &b->unk8, 0x18); + xxx_save_poke_sub_4_80902F4(a, &b->unk4); +} + +void sub_80972F4(void) +{ + sub_80015C0(0, 0x2B); + sub_80015C0(0, 0x2C); + sub_80015C0(0, 0x2D); +} + +void nullsub_128(void) +{} diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c index 325cf4e..f7a74ef 100644 --- a/src/friend_rescue_1.c +++ b/src/friend_rescue_1.c @@ -8,6 +8,7 @@ #include "friend_rescue.h" #include "sub_8095228.h" #include "item.h" +#include "code_8094F88.h" extern struct TeamInventory *gTeamInventory_203B460; extern u8 *gUnknown_203B484; @@ -488,7 +489,7 @@ void sub_8033DBC(void) sub_80951FC(&temp.unk0); temp2 = sub_8095228(sub_809539C(1, temp.unk10)); temp2->unk0 = 7; - MemoryFill8((u8 *)gUnknown_203B484, 0, 0x5C); + MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); SetFriendRescueMenuState(0x40); break; case 24: diff --git a/src/load_screen.c b/src/load_screen.c index 1c224f5..775e974 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -9,17 +9,10 @@ #include "pokemon.h" #include "save.h" #include "code_800D090.h" +#include "code_8094F88.h" extern const struct FileArchive gTitleMenuFileArchive; -struct unkStruct_203B484 -{ - u8 fill0[0xC]; - /* 0xC */ s16 speciesIndex; - u8 fillE[0x50 - 0xE]; - /* 0x50 */ u8 helperName[10]; -}; - struct LoadScreen { // size: 0x27c @@ -373,9 +366,9 @@ void DrawLoadScreenText(void) if (iVar2 == 0xf1207){ // NOTE: very hacky match here but needed var here to match temp2 = gUnknown_203B484; - if(temp2->speciesIndex != SPECIES_NONE) { - sub_808D930(speciesHelper,temp2->speciesIndex); - sub_80922B4(nameHelper,temp2->helperName,POKEMON_NAME_LENGTH); + if(temp2->unk4.speciesNum != SPECIES_NONE) { + sub_808D930(speciesHelper,temp2->unk4.speciesNum); + sub_80922B4(nameHelper,temp2->unk4.name,POKEMON_NAME_LENGTH); sprintf_2(gLoadScreen->formattedHelperInfo,gHelperInfoPlaceholder,nameHelper,speciesHelper); // %s (%s) } else -- cgit v1.2.3 From aa939e0955ec683efb5dd963430eace695a26af9 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 6 Mar 2022 14:41:40 -0600 Subject: All saving functions decomped - poke_sub_4 was determined to be Dungeon Index/Floor - Clean up code that references these functions --- asm/code_8097670.s | 471 ---------------------------------------- asm/code_8097DD0.s | 213 ++++++++++++++++++ include/pokemon.h | 4 +- ld_script.txt | 2 + src/adventure_log.c | 4 +- src/code_80972F4.c | 4 +- src/code_8097670.c | 59 +++-- src/code_8097DD0.c | 90 ++++++++ src/friend_area_action_menu_1.c | 6 +- src/friend_list_menu.c | 6 +- src/save.c | 4 +- 11 files changed, 363 insertions(+), 500 deletions(-) create mode 100644 asm/code_8097DD0.s create mode 100644 src/code_8097DD0.c diff --git a/asm/code_8097670.s b/asm/code_8097670.s index c4d68ec..d6d224f 100644 --- a/asm/code_8097670.s +++ b/asm/code_8097670.s @@ -5,76 +5,6 @@ .text - thumb_func_start sub_80978C8 -sub_80978C8: - push {lr} - lsls r0, 16 - asrs r0, 16 - bl GetBaseSpeciesNoUnown - lsls r0, 16 - asrs r3, r0, 16 - ldr r0, _080978FC - ldr r2, [r0] - adds r0, r3, 0 - cmp r3, 0 - bge _080978E2 - adds r0, 0x1F -_080978E2: - asrs r0, 5 - lsls r1, r0, 2 - adds r2, 0x54 - adds r2, r1 - lsls r0, 5 - subs r0, r3, r0 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - pop {r0} - bx r0 - .align 2, 0 -_080978FC: .4byte gUnknown_203B494 - thumb_func_end sub_80978C8 - - thumb_func_start sub_8097900 -sub_8097900: - push {lr} - lsls r0, 16 - asrs r0, 16 - bl GetBaseSpeciesNoUnown - lsls r0, 16 - asrs r3, r0, 16 - ldr r0, _08097938 - ldr r2, [r0] - adds r0, r3, 0 - cmp r3, 0 - bge _0809791A - adds r0, 0x1F -_0809791A: - asrs r0, 5 - lsls r1, r0, 2 - adds r2, 0x1C - adds r2, r1 - lsls r0, 5 - subs r0, r3, r0 - movs r1, 0x1 - lsls r1, r0 - ldr r0, [r2] - ands r0, r1 - cmp r0, 0 - bne _0809793C - movs r0, 0 - b _0809793E - .align 2, 0 -_08097938: .4byte gUnknown_203B494 -_0809793C: - movs r0, 0x1 -_0809793E: - pop {r1} - bx r1 - thumb_func_end sub_8097900 - thumb_func_start sub_8097944 sub_8097944: push {r4-r7,lr} @@ -453,405 +383,4 @@ _08097C10: .4byte 0x00000163 _08097C14: .4byte gUnknown_203B494 thumb_func_end sub_8097944 - thumb_func_start sub_8097C18 -sub_8097C18: - push {r4-r6,lr} - adds r5, r0, 0 - bl sub_8097944 - ldr r4, _08097CBC - ldr r1, [r4] - adds r1, 0x4 - adds r0, r5, 0 - movs r2, 0x11 - bl SaveIntegerBits - ldr r1, [r4] - adds r1, 0x8 - adds r0, r5, 0 - movs r2, 0x11 - bl SaveIntegerBits - ldr r1, [r4] - adds r1, 0xC - adds r0, r5, 0 - movs r2, 0x11 - bl SaveIntegerBits - ldr r1, [r4] - adds r0, r5, 0 - movs r2, 0x20 - bl SaveIntegerBits - ldr r1, [r4] - adds r1, 0x14 - adds r0, r5, 0 - movs r2, 0xE - bl SaveIntegerBits - ldr r1, [r4] - adds r1, 0x16 - adds r0, r5, 0 - movs r2, 0xE - bl SaveIntegerBits - ldr r1, [r4] - adds r1, 0x18 - adds r0, r5, 0 - movs r2, 0x9 - bl SaveIntegerBits - ldr r1, [r4] - adds r1, 0xC0 - adds r0, r5, 0 - movs r2, 0x11 - bl SaveIntegerBits - ldr r1, [r4] - adds r1, 0x1C - movs r6, 0xE0 - lsls r6, 1 - adds r0, r5, 0 - adds r2, r6, 0 - bl SaveIntegerBits - ldr r1, [r4] - adds r1, 0x54 - adds r0, r5, 0 - adds r2, r6, 0 - bl SaveIntegerBits - ldr r1, [r4] - adds r1, 0x8C - movs r2, 0xD0 - lsls r2, 1 - adds r0, r5, 0 - bl SaveIntegerBits - ldr r1, [r4] - adds r1, 0x10 - adds r0, r5, 0 - bl xxx_save_poke_sub_4_80902F4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08097CBC: .4byte gUnknown_203B494 - thumb_func_end sub_8097C18 - - thumb_func_start sub_8097CC0 -sub_8097CC0: - push {r4-r6,lr} - adds r5, r0, 0 - ldr r4, _08097D5C - ldr r1, [r4] - adds r1, 0x4 - movs r2, 0x11 - bl RestoreIntegerBits - ldr r1, [r4] - adds r1, 0x8 - adds r0, r5, 0 - movs r2, 0x11 - bl RestoreIntegerBits - ldr r1, [r4] - adds r1, 0xC - adds r0, r5, 0 - movs r2, 0x11 - bl RestoreIntegerBits - ldr r1, [r4] - adds r0, r5, 0 - movs r2, 0x20 - bl RestoreIntegerBits - ldr r1, [r4] - adds r1, 0x14 - adds r0, r5, 0 - movs r2, 0xE - bl RestoreIntegerBits - ldr r1, [r4] - adds r1, 0x16 - adds r0, r5, 0 - movs r2, 0xE - bl RestoreIntegerBits - ldr r1, [r4] - adds r1, 0x18 - adds r0, r5, 0 - movs r2, 0x9 - bl RestoreIntegerBits - ldr r1, [r4] - adds r1, 0xC0 - adds r0, r5, 0 - movs r2, 0x11 - bl RestoreIntegerBits - ldr r1, [r4] - adds r1, 0x1C - movs r6, 0xE0 - lsls r6, 1 - adds r0, r5, 0 - adds r2, r6, 0 - bl RestoreIntegerBits - ldr r1, [r4] - adds r1, 0x54 - adds r0, r5, 0 - adds r2, r6, 0 - bl RestoreIntegerBits - ldr r1, [r4] - adds r1, 0x8C - movs r2, 0xD0 - lsls r2, 1 - adds r0, r5, 0 - bl RestoreIntegerBits - ldr r1, [r4] - adds r1, 0x10 - adds r0, r5, 0 - bl xxx_restore_poke_sub_4_8090314 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08097D5C: .4byte gUnknown_203B494 - thumb_func_end sub_8097CC0 - - thumb_func_start sub_8097D60 -sub_8097D60: - push {lr} - sub sp, 0x10 - adds r3, r0, 0 - adds r2, r1, 0 - mov r0, sp - adds r1, r3, 0 - bl xxx_init_struct_8094924_save_809486C - mov r0, sp - bl WriteGameOptions - mov r0, sp - bl WritePlayTime - mov r0, sp - bl sub_8097C18 - mov r0, sp - bl WriteExclusivePokemon - mov r0, sp - bl nullsub_102 - ldr r0, [sp, 0x8] - add sp, 0x10 - pop {r1} - bx r1 - thumb_func_end sub_8097D60 - - thumb_func_start sub_8097D98 -sub_8097D98: - push {lr} - sub sp, 0x10 - adds r3, r0, 0 - adds r2, r1, 0 - mov r0, sp - adds r1, r3, 0 - bl xxx_init_struct_8094924_restore_809485C - mov r0, sp - bl ReadGameOptions - mov r0, sp - bl ReadPlayTime - mov r0, sp - bl sub_8097CC0 - mov r0, sp - bl ReadExclusivePokemon - mov r0, sp - bl nullsub_102 - ldr r0, [sp, 0x8] - add sp, 0x10 - pop {r1} - bx r1 - thumb_func_end sub_8097D98 - - thumb_func_start sub_8097DD0 -sub_8097DD0: - push {lr} - adds r2, r0, 0 - adds r3, r1, 0 - ldr r1, [r2] - ldr r0, [r3] - cmp r1, r0 - bne _08097DEA - ldr r1, [r2, 0x4] - ldr r0, [r3, 0x4] - cmp r1, r0 - bne _08097DEA - movs r0, 0x1 - b _08097DEC -_08097DEA: - movs r0, 0 -_08097DEC: - pop {r1} - bx r1 - thumb_func_end sub_8097DD0 - - thumb_func_start sub_8097DF0 -sub_8097DF0: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1F8 - mov r8, r0 - str r1, [sp, 0x1F0] - movs r0, 0 - mov r9, r0 - movs r7, 0 - ldr r1, _08097E3C - ldr r0, [r1] - cmp r0, 0 - beq _08097E6E -_08097E0E: - movs r4, 0 - lsls r5, r7, 3 - lsls r1, r7, 2 - mov r10, r1 - adds r6, r7, 0x1 - ldr r2, _08097E3C - adds r3, r5, r2 - add r1, sp, 0x18C -_08097E1E: - ldr r0, [r3] - adds r0, r4 - ldrb r2, [r0] - cmp r2, 0x23 - bne _08097E40 - ldrb r0, [r0, 0x1] - cmp r0, 0x72 - bne _08097E40 - strb r2, [r1] - adds r1, 0x1 - strb r0, [r1] - adds r1, 0x1 - movs r0, 0 - strb r0, [r1] - b _08097E50 - .align 2, 0 -_08097E3C: .4byte gStatusDescriptions -_08097E40: - ldr r0, [r3] - adds r0, r4 - ldrb r0, [r0] - strb r0, [r1] - adds r1, 0x1 - adds r4, 0x1 - cmp r4, 0x63 - ble _08097E1E -_08097E50: - add r0, sp, 0x18C - bl strlen - mov r1, sp - add r1, r10 - str r0, [r1] - adds r7, r6, 0 - cmp r6, 0x62 - bgt _08097E6E - lsls r0, r6, 3 - ldr r1, _08097EB4 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _08097E0E -_08097E6E: - mov r2, r8 - ldrb r0, [r2] - cmp r0, 0 - beq _08097F2C - ldr r3, _08097EB4 -_08097E78: - cmp r0, 0x23 - bne _08097F08 - movs r7, 0 - adds r1, r3, 0 - ldr r0, [r1] - cmp r0, 0 - beq _08097F20 - mov r2, r9 - lsls r0, r2, 2 - ldr r2, [sp, 0x1F0] - adds r0, r2 - mov r10, r0 -_08097E90: - lsls r4, r7, 3 - adds r0, r4, r1 - ldr r0, [r0] - lsls r1, r7, 2 - add r1, sp - ldr r2, [r1] - mov r1, r8 - str r3, [sp, 0x1F4] - bl sub_800B2D4 - lsls r0, 24 - adds r5, r4, 0 - adds r6, r7, 0x1 - ldr r3, [sp, 0x1F4] - cmp r0, 0 - bne _08097EF0 - movs r4, 0 - b _08097EBA - .align 2, 0 -_08097EB4: .4byte gStatusDescriptions -_08097EB8: - adds r4, 0x1 -_08097EBA: - cmp r4, r9 - bge _08097ED6 - adds r0, r5, r3 - lsls r1, r4, 2 - ldr r2, [sp, 0x1F0] - adds r1, r2 - ldr r1, [r1] - str r3, [sp, 0x1F4] - bl sub_8097DD0 - lsls r0, 24 - ldr r3, [sp, 0x1F4] - cmp r0, 0 - beq _08097EB8 -_08097ED6: - cmp r4, r9 - bne _08097EF0 - mov r0, r9 - cmp r0, 0x3 - bgt _08097EF0 - adds r0, r5, r3 - mov r1, r10 - adds r1, 0x4 - mov r10, r1 - subs r1, 0x4 - stm r1!, {r0} - movs r2, 0x1 - add r9, r2 -_08097EF0: - adds r7, r6, 0 - cmp r6, 0x62 - bgt _08097F20 - ldr r1, _08097F04 - lsls r0, r6, 3 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _08097E90 - b _08097F20 - .align 2, 0 -_08097F04: .4byte gStatusDescriptions -_08097F08: - mov r0, r8 - ldrb r1, [r0] - adds r0, r1, 0 - adds r0, 0x7F - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bls _08097F1C - cmp r1, 0x87 - bne _08097F20 -_08097F1C: - movs r1, 0x1 - add r8, r1 -_08097F20: - movs r2, 0x1 - add r8, r2 - mov r1, r8 - ldrb r0, [r1] - cmp r0, 0 - bne _08097E78 -_08097F2C: - mov r0, r9 - add sp, 0x1F8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8097DF0 - .align 2,0 diff --git a/asm/code_8097DD0.s b/asm/code_8097DD0.s new file mode 100644 index 0000000..36f15d9 --- /dev/null +++ b/asm/code_8097DD0.s @@ -0,0 +1,213 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_8097DD0 +sub_8097DD0: + push {lr} + adds r2, r0, 0 + adds r3, r1, 0 + ldr r1, [r2] + ldr r0, [r3] + cmp r1, r0 + bne _08097DEA + ldr r1, [r2, 0x4] + ldr r0, [r3, 0x4] + cmp r1, r0 + bne _08097DEA + movs r0, 0x1 + b _08097DEC +_08097DEA: + movs r0, 0 +_08097DEC: + pop {r1} + bx r1 + thumb_func_end sub_8097DD0 + + thumb_func_start sub_8097DF0 +sub_8097DF0: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x1F8 + mov r8, r0 + str r1, [sp, 0x1F0] + movs r0, 0 + mov r9, r0 + movs r7, 0 + ldr r1, _08097E3C + ldr r0, [r1] + cmp r0, 0 + beq _08097E6E +_08097E0E: + movs r4, 0 + lsls r5, r7, 3 + lsls r1, r7, 2 + mov r10, r1 + adds r6, r7, 0x1 + ldr r2, _08097E3C + adds r3, r5, r2 + add r1, sp, 0x18C +_08097E1E: + ldr r0, [r3] + adds r0, r4 + ldrb r2, [r0] + cmp r2, 0x23 + bne _08097E40 + ldrb r0, [r0, 0x1] + cmp r0, 0x72 + bne _08097E40 + strb r2, [r1] + adds r1, 0x1 + strb r0, [r1] + adds r1, 0x1 + movs r0, 0 + strb r0, [r1] + b _08097E50 + .align 2, 0 +_08097E3C: .4byte gStatusDescriptions +_08097E40: + ldr r0, [r3] + adds r0, r4 + ldrb r0, [r0] + strb r0, [r1] + adds r1, 0x1 + adds r4, 0x1 + cmp r4, 0x63 + ble _08097E1E +_08097E50: + add r0, sp, 0x18C + bl strlen + mov r1, sp + add r1, r10 + str r0, [r1] + adds r7, r6, 0 + cmp r6, 0x62 + bgt _08097E6E + lsls r0, r6, 3 + ldr r1, _08097EB4 + adds r0, r1 + ldr r0, [r0] + cmp r0, 0 + bne _08097E0E +_08097E6E: + mov r2, r8 + ldrb r0, [r2] + cmp r0, 0 + beq _08097F2C + ldr r3, _08097EB4 +_08097E78: + cmp r0, 0x23 + bne _08097F08 + movs r7, 0 + adds r1, r3, 0 + ldr r0, [r1] + cmp r0, 0 + beq _08097F20 + mov r2, r9 + lsls r0, r2, 2 + ldr r2, [sp, 0x1F0] + adds r0, r2 + mov r10, r0 +_08097E90: + lsls r4, r7, 3 + adds r0, r4, r1 + ldr r0, [r0] + lsls r1, r7, 2 + add r1, sp + ldr r2, [r1] + mov r1, r8 + str r3, [sp, 0x1F4] + bl sub_800B2D4 + lsls r0, 24 + adds r5, r4, 0 + adds r6, r7, 0x1 + ldr r3, [sp, 0x1F4] + cmp r0, 0 + bne _08097EF0 + movs r4, 0 + b _08097EBA + .align 2, 0 +_08097EB4: .4byte gStatusDescriptions +_08097EB8: + adds r4, 0x1 +_08097EBA: + cmp r4, r9 + bge _08097ED6 + adds r0, r5, r3 + lsls r1, r4, 2 + ldr r2, [sp, 0x1F0] + adds r1, r2 + ldr r1, [r1] + str r3, [sp, 0x1F4] + bl sub_8097DD0 + lsls r0, 24 + ldr r3, [sp, 0x1F4] + cmp r0, 0 + beq _08097EB8 +_08097ED6: + cmp r4, r9 + bne _08097EF0 + mov r0, r9 + cmp r0, 0x3 + bgt _08097EF0 + adds r0, r5, r3 + mov r1, r10 + adds r1, 0x4 + mov r10, r1 + subs r1, 0x4 + stm r1!, {r0} + movs r2, 0x1 + add r9, r2 +_08097EF0: + adds r7, r6, 0 + cmp r6, 0x62 + bgt _08097F20 + ldr r1, _08097F04 + lsls r0, r6, 3 + adds r0, r1 + ldr r0, [r0] + cmp r0, 0 + bne _08097E90 + b _08097F20 + .align 2, 0 +_08097F04: .4byte gStatusDescriptions +_08097F08: + mov r0, r8 + ldrb r1, [r0] + adds r0, r1, 0 + adds r0, 0x7F + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + bls _08097F1C + cmp r1, 0x87 + bne _08097F20 +_08097F1C: + movs r1, 0x1 + add r8, r1 +_08097F20: + movs r2, 0x1 + add r8, r2 + mov r1, r8 + ldrb r0, [r1] + cmp r0, 0 + bne _08097E78 +_08097F2C: + mov r0, r9 + add sp, 0x1F8 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_8097DF0 + + .align 2,0 diff --git a/include/pokemon.h b/include/pokemon.h index d72f88e..af6c103 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -20,8 +20,8 @@ struct Offense { }; struct unkPokeSubStruct_4 { - u8 unk4; - u8 unk5; + u8 dungeonIndex; + u8 dungeonFloor; u16 fill6; }; diff --git a/ld_script.txt b/ld_script.txt index 335f5f0..b9db591 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -309,6 +309,8 @@ SECTIONS { src/code_809747C_1.o(.text); src/code_8097670.o(.text); asm/code_8097670.o(.text); + src/code_8097DD0.o(.text); + asm/code_8097DD0.o(.text); src/code_8097F40.o(.text); src/exclusive_pokemon.o(.text); asm/exclusive_pokemon.o(.text); diff --git a/src/adventure_log.c b/src/adventure_log.c index cb20682..9480361 100644 --- a/src/adventure_log.c +++ b/src/adventure_log.c @@ -54,7 +54,7 @@ extern bool8 sub_8013938(void *); extern void sub_8013660(void *); extern void PlayMenuSoundEffect(u32); extern u32 GetKeyPress(void *); -extern u8 sub_8097710(u8); +extern bool8 sub_8097710(u8); extern s16 sub_80978B8(); extern s16 sub_8097880(); @@ -225,7 +225,7 @@ void DisplayAdventureLog(void) do { uVar6 = gAdventureLog->currPage * gAdventureLog->unk1C + counter; temp = uVar6; // Having another var in middle gets close (does a u8 cast) - if(sub_8097710(temp) != 0){ + if(sub_8097710(temp)){ switch(temp) { case 0xc: gUnknown_202DE30 = sub_80978B8(); diff --git a/src/code_80972F4.c b/src/code_80972F4.c index 7e87832..c0fa1a3 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -61,8 +61,8 @@ bool8 sub_8096F50(struct WonderMail *r0) for(index = 0; index < 0x10; index++) { temp = &gUnknown_203B490->unk230[index]; - if(temp->unk0.unk4 == r0->dungeon) - if(temp->unk0.unk5 == r0->floor) + if(temp->unk0.dungeonIndex == r0->dungeon) + if(temp->unk0.dungeonFloor == r0->floor) if(temp->unk4 == r0->unk8) if(temp->unk8 == temp2) return TRUE; diff --git a/src/code_8097670.c b/src/code_8097670.c index 75a788a..a918ac9 100644 --- a/src/code_8097670.c +++ b/src/code_8097670.c @@ -1,10 +1,5 @@ #include "global.h" - -struct unkDungeonStruct -{ - u8 index; - u8 floor; -}; +#include "pokemon.h" struct unkStruct_203B494 { @@ -13,12 +8,12 @@ struct unkStruct_203B494 s32 numAdventures; s32 unk8; s32 unkC; - struct unkDungeonStruct dungeonLocation; + struct unkPokeSubStruct_4 dungeonLocation; s16 unk14; s16 unk16; s16 unk18; u32 unk1C[0xE]; - u8 fill54[0x8C - 0x54]; + u32 unk54[0xE]; u32 unk8C[0xD]; s32 unkC0; }; @@ -26,6 +21,7 @@ struct unkStruct_203B494 extern struct unkStruct_203B494 *gUnknown_203B494; extern struct unkStruct_203B494 gUnknown_2039778; extern const u8 *gAdventureLogText[]; +s16 GetBaseSpeciesNoUnown(s16 index); void sub_8097670(void) { @@ -37,13 +33,13 @@ struct unkStruct_203B494 *sub_8097680(void) return &gUnknown_2039778; } -void SetDungeonLocationInfo(struct unkDungeonStruct *r0) +void SetDungeonLocationInfo(struct unkPokeSubStruct_4 *r0) { - gUnknown_203B494->dungeonLocation.index = r0->index; - gUnknown_203B494->dungeonLocation.floor = r0->floor; + gUnknown_203B494->dungeonLocation.dungeonIndex = r0->dungeonIndex; + gUnknown_203B494->dungeonLocation.dungeonFloor = r0->dungeonFloor; } -struct unkDungeonStruct *GetDungeonLocationInfo(void) +struct unkPokeSubStruct_4 *GetDungeonLocationInfo(void) { return &gUnknown_203B494->dungeonLocation; } @@ -76,12 +72,12 @@ void sub_80976F8(u8 r0) gUnknown_203B494->unk0 |= (1 << r0); } -u8 sub_8097710(u8 r0) +bool8 sub_8097710(u8 r0) { if(gUnknown_203B494->unk0 & (1 << r0)) - return 1; + return TRUE; else - return 0; + return FALSE; } const u8 *GetAdventureLogLine(u8 index) @@ -187,3 +183,36 @@ s16 sub_80978B8(void) { return gUnknown_203B494->unkC0; } + +void sub_80978C8(s16 pokeIndex) +{ + s32 iVar2; + struct unkStruct_203B494 *preload; + s32 baseSpecies; + + baseSpecies = GetBaseSpeciesNoUnown(pokeIndex); + preload = gUnknown_203B494; + iVar2 = baseSpecies; + if (baseSpecies < 0) { + iVar2 = baseSpecies + 0x1f; + } + preload->unk54[iVar2 >> 5] |= 1 << (baseSpecies + (iVar2 >> 5) * -0x20); +} + +bool8 sub_8097900(s16 pokeIndex) +{ + s32 iVar2; + struct unkStruct_203B494 *preload; + s32 baseSpecies; + + baseSpecies = GetBaseSpeciesNoUnown(pokeIndex); + preload = gUnknown_203B494; + iVar2 = baseSpecies; + if (baseSpecies < 0) { + iVar2 = baseSpecies + 0x1f; + } + if(preload->unk1C[iVar2 >> 5] & (1 << (baseSpecies + (iVar2 >> 5) * -0x20))) + return TRUE; + else + return FALSE; +} diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c new file mode 100644 index 0000000..e5d4966 --- /dev/null +++ b/src/code_8097DD0.c @@ -0,0 +1,90 @@ +#include "global.h" +#include "code_8092334.h" +#include "pokemon.h" + +struct unkStruct_203B494 +{ + // size: 0xC8? + u32 unk0; // 32 bit bitfield, I think + s32 numAdventures; + s32 unk8; + s32 unkC; + struct unkPokeSubStruct_4 dungeonLocation; + s16 unk14; + s16 unk16; + s16 unk18; + u32 unk1C[0xE]; + u32 unk54[0xE]; + u32 unk8C[0xD]; + s32 unkC0; +}; + +extern struct unkStruct_203B494 *gUnknown_203B494; + +extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +void ReadExclusivePokemon(struct unkStruct_8094924 *r0); +void ReadGameOptions(struct unkStruct_8094924 *param_1); +void ReadPlayTime(struct unkStruct_8094924 *r0); +void WriteExclusivePokemon(struct unkStruct_8094924 *r0); +void WriteGameOptions(struct unkStruct_8094924 *param_1); +void WritePlayTime(struct unkStruct_8094924 *r0); + +extern void sub_8097944(void); + +void sub_8097C18(struct unkStruct_8094924 *r0) +{ + sub_8097944(); + SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); + SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); + SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); + SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); + SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); + SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); + SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); + SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); + SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); + xxx_save_poke_sub_4_80902F4(r0, &gUnknown_203B494->dungeonLocation); +} + +void sub_8097CC0(struct unkStruct_8094924 *r0) +{ + RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11); + RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20); + RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE); + RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE); + RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9); + RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11); + RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); + RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); + RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); + xxx_restore_poke_sub_4_8090314(r0, &gUnknown_203B494->dungeonLocation); +} + +u32 sub_8097D60(u8 *r0, u32 size) +{ + struct unkStruct_8094924 backup; + xxx_init_struct_8094924_save_809486C(&backup, r0, size); + WriteGameOptions(&backup); + WritePlayTime(&backup); + sub_8097C18(&backup); + WriteExclusivePokemon(&backup); + nullsub_102(&backup); + return backup.unk8; +} + +u32 sub_8097D98(u8 *r0, u32 size) +{ + struct unkStruct_8094924 backup; + xxx_init_struct_8094924_restore_809485C(&backup, r0, size); + ReadGameOptions(&backup); + ReadPlayTime(&backup); + sub_8097CC0(&backup); + ReadExclusivePokemon(&backup); + nullsub_102(&backup); + return backup.unk8; +} diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c index 1abd973..3f1bb5f 100644 --- a/src/friend_area_action_menu_1.c +++ b/src/friend_area_action_menu_1.c @@ -79,7 +79,7 @@ void sub_8027A5C(void) } static inline bool8 sub_8027A78_sub(void) { - if (gUnknown_203B2BC->unk18->unk4.unk4 == 0x44 || gUnknown_203B2BC->unk18->unk4.unk4 == 0x45) + if (gUnknown_203B2BC->unk18->unk4.dungeonIndex == 0x44 || gUnknown_203B2BC->unk18->unk4.dungeonIndex == 0x45) return TRUE; else return FALSE; @@ -270,7 +270,7 @@ u32 sub_8027D9C(struct PokemonStruct *r0) if(r0->unk2 == 0) { var1 = 0; - if(r0->unk4.unk4 == 0x41) + if(r0->unk4.dungeonIndex == 0x41) var1 = 1; if(var1 != 0) { @@ -291,7 +291,7 @@ u32 sub_8027DCC(struct PokemonStruct *r0) if(r0->unk2 == 0) { var1 = 0; - if(r0->unk4.unk4 == 0x41) + if(r0->unk4.dungeonIndex == 0x41) var1 = 1; if(var1 != 0) { diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 9310665..142aeca 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -113,7 +113,7 @@ void sub_8026A94(void) static inline bool8 sub_8026AB0_sub(void) { - if (gUnknown_203B2B8->unk18->unk4.unk4 == 0x44 || gUnknown_203B2B8->unk18->unk4.unk4 == 0x45) + if (gUnknown_203B2B8->unk18->unk4.dungeonIndex == 0x44 || gUnknown_203B2B8->unk18->unk4.dungeonIndex == 0x45) return TRUE; else return FALSE; @@ -344,7 +344,7 @@ u32 sub_8026E88(struct PokemonStruct *r0) u8 iVar3; if(r0->unk2 == 0) { - iVar3 = (r0->unk4.unk4 == 0x41); + iVar3 = (r0->unk4.dungeonIndex == 0x41); if(iVar3 != 0) if(sub_80023E4(0x8) == 0) return 0; @@ -361,7 +361,7 @@ u32 sub_8026EB8(struct PokemonStruct *r0) if(sub_808D3F8() != r0) if(r0->unk2 == 0) { - iVar3 = (r0->unk4.unk4 == 0x41); + iVar3 = (r0->unk4.dungeonIndex == 0x41); if(iVar3 != 0) { if(sub_80023E4(0x8) != 0) diff --git a/src/save.c b/src/save.c index 835c111..72a6496 100644 --- a/src/save.c +++ b/src/save.c @@ -171,7 +171,7 @@ extern void sub_800135C(void); extern u32 GetGameOptions(void); extern void InitializeGameOptions(u8 r0); extern u8 *sub_80950F8(void); -extern void sub_80958E4(u8 *a, u32 b); +extern void sub_80958E4(u32 *a, u32 b); extern u32 sub_80958F8(void); extern void sub_8095900(void); extern void sub_80972F4(void); @@ -529,7 +529,7 @@ u32 sub_80121E0(u32 r0) string = sub_8011C4C(); strncpy(r4->unk4, string, ARRAY_COUNT(r4->unk4)); - sub_80958E4((u8 *)r4 + 32, 0); + sub_80958E4(&r4->unk20, 0); temp3 = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct)); MemoryFree(r4); return temp3; -- cgit v1.2.3 From 3477f61cf2f983e5851f720386128a4410d9e131 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 13 Mar 2022 17:48:04 -0700 Subject: continue doing some more decomp --- asm/code_8031D70.s | 266 +++++++++++ asm/code_803B050.s | 2 +- asm/code_806CD90.s | 4 +- asm/code_809017C.s | 89 ---- asm/code_8090208.s | 922 -------------------------------------- asm/code_809447C.s | 2 +- asm/dungeon.s | 60 +++ asm/dungeon_2.s | 818 +++++++++++++++++++++++++++++++++ asm/friend_area_action_menu.s | 262 ----------- asm/friend_list_menu.s | 6 +- asm/kangaskhan_storage_1.s | 4 +- asm/kecleon_items.s | 476 -------------------- asm/makuhita_dojo.s | 2 +- asm/pokemon_3.s | 2 +- asm/wonder_mail_5.s | 265 +---------- include/constants/dungeon.h | 3 + include/friend_area_action_menu.h | 2 +- include/item.h | 4 +- include/kecleon_items.h | 2 +- include/pokemon.h | 5 +- ld_script.txt | 7 +- src/code_8090208.c | 34 -- src/code_8095824.c | 4 +- src/dungeon_2.c | 83 ++++ src/friend_area_action_menu_1.c | 126 +++++- src/friend_list_menu.c | 8 +- src/items.c | 4 +- src/kangaskhan_storage_3.c | 6 +- src/kecleon_items_1.c | 213 ++++++++- src/luminous_cave.c | 1 - src/pokemon_3.c | 12 +- src/pokemon_mid.c | 4 +- src/post_office_guide.c | 4 +- 33 files changed, 1606 insertions(+), 2096 deletions(-) create mode 100644 asm/code_8031D70.s delete mode 100644 asm/code_809017C.s delete mode 100644 asm/code_8090208.s create mode 100644 asm/dungeon.s create mode 100644 asm/dungeon_2.s delete mode 100644 src/code_8090208.c create mode 100644 src/dungeon_2.c diff --git a/asm/code_8031D70.s b/asm/code_8031D70.s new file mode 100644 index 0000000..b889571 --- /dev/null +++ b/asm/code_8031D70.s @@ -0,0 +1,266 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_8031D70 +sub_8031D70: + push {r4-r6,lr} + adds r6, r0, 0 + adds r4, r1, 0 + ldr r5, _08031DC4 + movs r0, 0x7C + movs r1, 0x8 + bl MemoryAlloc + str r0, [r5] + stm r0!, {r6} + bl sub_801317C + ldr r0, [r5] + str r4, [r0, 0x10] + lsls r1, r4, 1 + adds r1, r4 + lsls r1, 3 + adds r1, 0x18 + adds r1, r0, r1 + str r1, [r0, 0x14] + adds r0, 0x18 + bl sub_8006518 + ldr r1, [r5] + ldr r2, [r1, 0x10] + lsls r0, r2, 1 + adds r0, r2 + lsls r0, 3 + adds r1, r0 + adds r1, 0x18 + ldr r0, _08031DC8 + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + bl sub_8031E00 + movs r0, 0x1 + pop {r4-r6} + pop {r1} + bx r1 + .align 2, 0 +_08031DC4: .4byte gUnknown_203B334 +_08031DC8: .4byte gUnknown_80E1FC4 + thumb_func_end sub_8031D70 + + thumb_func_start sub_8031DCC +sub_8031DCC: + push {lr} + ldr r0, _08031DEC + ldr r1, [r0] + adds r0, r1, 0x4 + ldr r1, [r1, 0x10] + bl sub_8012A64 + cmp r0, 0x1 + beq _08031DF0 + cmp r0, 0x2 + bne _08031DFA + movs r0, 0x1 + bl PlayMenuSoundEffect + movs r0, 0x2 + b _08031DFC + .align 2, 0 +_08031DEC: .4byte gUnknown_203B334 +_08031DF0: + movs r0, 0 + bl PlayMenuSoundEffect + movs r0, 0x3 + b _08031DFC +_08031DFA: + movs r0, 0 +_08031DFC: + pop {r1} + bx r1 + thumb_func_end sub_8031DCC + + thumb_func_start sub_8031E00 +sub_8031E00: + push {lr} + bl sub_8031E58 + bl sub_8031E74 + pop {r0} + bx r0 + thumb_func_end sub_8031E00 + + thumb_func_start sub_8031E10 +sub_8031E10: + push {r4,r5,lr} + ldr r4, _08031E50 + ldr r2, [r4] + cmp r2, 0 + beq _08031E4A + ldr r0, [r2, 0x10] + lsls r1, r0, 1 + adds r1, r0 + lsls r1, 3 + adds r1, r2, r1 + adds r1, 0x18 + ldr r0, _08031E54 + ldm r0!, {r2,r3,r5} + stm r1!, {r2,r3,r5} + ldm r0!, {r2,r3,r5} + stm r1!, {r2,r3,r5} + bl ResetUnusedInputStruct + ldr r0, [r4] + adds r0, 0x18 + movs r1, 0x1 + movs r2, 0x1 + bl sub_800641C + ldr r0, [r4] + bl MemoryFree + movs r0, 0 + str r0, [r4] +_08031E4A: + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_08031E50: .4byte gUnknown_203B334 +_08031E54: .4byte gUnknown_80E1FA8 + thumb_func_end sub_8031E10 + + thumb_func_start sub_8031E58 +sub_8031E58: + push {lr} + bl ResetUnusedInputStruct + ldr r0, _08031E70 + ldr r0, [r0] + adds r0, 0x18 + movs r1, 0x1 + movs r2, 0x1 + bl sub_800641C + pop {r0} + bx r0 + .align 2, 0 +_08031E70: .4byte gUnknown_203B334 + thumb_func_end sub_8031E58 + + thumb_func_start sub_8031E74 +sub_8031E74: + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x3C + ldr r3, _08031EC0 + ldr r5, _08031EC4 + ldr r2, [r5] + ldr r1, [r2] + lsls r0, r1, 1 + adds r0, r1 + lsls r0, 4 + ldr r4, [r3] + adds r4, r0 + ldr r0, [r2, 0x10] + bl sub_80073B8 + ldr r2, _08031EC8 + ldr r0, [r5] + ldr r3, [r0, 0x10] + movs r0, 0 + str r0, [sp] + movs r0, 0x14 + movs r1, 0 + bl xxx_call_draw_string + add r0, sp, 0x4 + adds r1, r4, 0 + bl sub_803D2C0 + movs r7, 0 + mov r8, r5 +_08031EB2: + cmp r7, 0x4 + ble _08031ED0 + cmp r7, 0xC + bgt _08031ECC + movs r6, 0x6 + movs r5, 0x16 + b _08031F00 + .align 2, 0 +_08031EC0: .4byte gUnknown_203B480 +_08031EC4: .4byte gUnknown_203B334 +_08031EC8: .4byte gUnknown_80E1FDC +_08031ECC: + cmp r7, 0x11 + bgt _08031ED6 +_08031ED0: + movs r6, 0x7 + movs r5, 0x15 + b _08031F00 +_08031ED6: + cmp r7, 0x16 + ble _08031EE8 + cmp r7, 0x1E + bgt _08031EE4 + movs r6, 0x6 + movs r5, 0x25 + b _08031F00 +_08031EE4: + cmp r7, 0x23 + bgt _08031EEE +_08031EE8: + movs r6, 0x7 + movs r5, 0x24 + b _08031F00 +_08031EEE: + cmp r7, 0x28 + ble _08031EFC + cmp r7, 0x30 + bgt _08031EFC + movs r6, 0x6 + movs r5, 0x34 + b _08031F00 +_08031EFC: + movs r6, 0x7 + movs r5, 0x33 +_08031F00: + adds r0, r7, 0 + movs r1, 0x12 + bl __modsi3 + movs r1, 0xB + adds r4, r0, 0 + muls r4, r1 + adds r4, 0x6 + mov r0, sp + adds r0, r7 + adds r0, 0x4 + ldrb r2, [r0] + mov r1, r8 + ldr r0, [r1] + ldr r0, [r0, 0x10] + str r0, [sp] + adds r0, r4, 0 + adds r1, r5, 0 + adds r3, r6, 0 + bl sub_8012C60 + mov r1, r8 + ldr r0, [r1] + ldr r0, [r0, 0x10] + adds r2, r5, 0 + adds r2, 0xA + movs r1, 0x5 + str r1, [sp] + adds r1, r4, 0 + movs r3, 0xA + bl sub_80078A4 + adds r7, 0x1 + cmp r7, 0x35 + ble _08031EB2 + ldr r0, _08031F5C + ldr r0, [r0] + ldr r0, [r0, 0x10] + bl sub_80073E0 + add sp, 0x3C + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08031F5C: .4byte gUnknown_203B334 + thumb_func_end sub_8031E74 + + .align 2,0 diff --git a/asm/code_803B050.s b/asm/code_803B050.s index 1dcdaab..2fc580b 100644 --- a/asm/code_803B050.s +++ b/asm/code_803B050.s @@ -949,7 +949,7 @@ _0803B75C: .4byte gMedichamMission _0803B760: ldr r1, [r7, 0x8] add r0, sp, 0x4 - bl sub_8090208 + bl PrintYellowDungeonNametoBuffer b _0803B850 _0803B76A: ldr r4, _0803B780 diff --git a/asm/code_806CD90.s b/asm/code_806CD90.s index 34b2572..c304730 100644 --- a/asm/code_806CD90.s +++ b/asm/code_806CD90.s @@ -2225,7 +2225,7 @@ _0806E040: ldr r1, _0806E0C0 adds r0, r1 ldrb r0, [r0] - bl sub_809033C + bl GetDungeonUnk1 lsls r0, 24 cmp r0, 0 beq _0806E066 @@ -2969,4 +2969,4 @@ _0806E64C: .4byte 0x00000177 _0806E650: .4byte gUnknown_8106F0C thumb_func_end sub_806E100 - .align 2, 0 \ No newline at end of file + .align 2, 0 diff --git a/asm/code_809017C.s b/asm/code_809017C.s deleted file mode 100644 index fefed28..0000000 --- a/asm/code_809017C.s +++ /dev/null @@ -1,89 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_809017C -sub_809017C: - push {r4-r6,lr} - sub sp, 0x4 - adds r1, r0, 0 - mov r0, sp - bl sub_80901D8 - movs r5, 0 - ldr r2, _080901AC - ldrb r0, [r2] - cmp r0, 0x3F - beq _080901C6 - mov r3, sp - ldrb r6, [r3] - movs r4, 0 - adds r1, r2, 0 -_0809019A: - ldrb r0, [r1] - cmp r6, r0 - bne _080901B0 - ldrb r0, [r3, 0x1] - ldrb r2, [r1, 0x1] - cmp r0, r2 - bne _080901B0 - movs r0, 0x1 - b _080901C8 - .align 2, 0 -_080901AC: .4byte gUnknown_8107828 -_080901B0: - adds r4, 0x4 - adds r1, 0x4 - adds r5, 0x1 - ldr r0, _080901D0 - cmp r5, r0 - bgt _080901C6 - ldr r2, _080901D4 - adds r0, r4, r2 - ldrb r0, [r0] - cmp r0, 0x3F - bne _0809019A -_080901C6: - movs r0, 0 -_080901C8: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080901D0: .4byte 0x000003e6 -_080901D4: .4byte gUnknown_8107828 - thumb_func_end sub_809017C - - thumb_func_start sub_80901D8 -sub_80901D8: - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - ldrb r0, [r2] - subs r0, 0x4B - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x16 - bhi _080901FE - movs r0, 0x34 - strb r0, [r3] - ldrb r1, [r2] - subs r1, 0x4B - lsls r0, r1, 1 - adds r0, r1 - ldrb r2, [r2, 0x1] - adds r0, r2 - strb r0, [r3, 0x1] - b _08090202 -_080901FE: - ldr r0, [r2] - str r0, [r3] -_08090202: - pop {r0} - bx r0 - thumb_func_end sub_80901D8 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/code_8090208.s b/asm/code_8090208.s deleted file mode 100644 index 5b097fe..0000000 --- a/asm/code_8090208.s +++ /dev/null @@ -1,922 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8090298 -sub_8090298: - push {lr} - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - subs r0, 0x4B - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x16 - bhi _080902AE - movs r0, 0x4 - b _080902C2 -_080902AE: - cmp r1, 0x3E - bhi _080902C0 - ldr r0, _080902BC - adds r0, r1, r0 - ldrb r0, [r0] - b _080902C2 - .align 2, 0 -_080902BC: .4byte gUnknown_81077A8 -_080902C0: - movs r0, 0x1 -_080902C2: - pop {r1} - bx r1 - thumb_func_end sub_8090298 - - thumb_func_start sub_80902C8 -sub_80902C8: - push {lr} - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - subs r0, 0x4B - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x16 - bls _080902EC - cmp r1, 0x3E - bhi _080902EC - ldr r0, _080902E8 - adds r0, r1, r0 - ldrb r0, [r0] - b _080902EE - .align 2, 0 -_080902E8: .4byte gUnknown_81077E8 -_080902EC: - movs r0, 0 -_080902EE: - pop {r1} - bx r1 - thumb_func_end sub_80902C8 - - thumb_func_start xxx_save_poke_sub_4_80902F4 -xxx_save_poke_sub_4_80902F4: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - movs r2, 0x7 - bl SaveIntegerBits - adds r4, 0x1 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x7 - bl SaveIntegerBits - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end xxx_save_poke_sub_4_80902F4 - - thumb_func_start xxx_restore_poke_sub_4_8090314 -xxx_restore_poke_sub_4_8090314: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - movs r0, 0 - strb r0, [r4] - strb r0, [r4, 0x1] - adds r0, r5, 0 - movs r2, 0x7 - bl RestoreIntegerBits - adds r4, 0x1 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x7 - bl RestoreIntegerBits - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end xxx_restore_poke_sub_4_8090314 - - thumb_func_start sub_809033C -sub_809033C: - lsls r0, 24 - ldr r1, _08090348 - lsrs r0, 20 - adds r0, r1 - ldrb r0, [r0, 0x1] - bx lr - .align 2, 0 -_08090348: .4byte gDungeons - thumb_func_end sub_809033C - - thumb_func_start sub_809034C -sub_809034C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xF8 - adds r7, r2, 0 - ldr r2, [sp, 0x118] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 16 - asrs r1, 16 - str r1, [sp, 0xE0] - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0xE4] - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0xE8] - bl GetNumberOfFilledInventorySlots - str r0, [sp, 0xEC] - movs r5, 0 - movs r0, 0 - str r0, [sp, 0xF4] - mov r8, r0 - add r4, sp, 0xC8 - movs r0, 0xA - strb r0, [r4] - add r1, sp, 0xF4 - ldrb r1, [r1] - strb r1, [r4, 0x1] - ldr r1, _0809040C - adds r0, r7, 0 - bl strcpy - movs r2, 0 - str r2, [sp, 0xF0] - movs r3, 0 - ldr r0, _08090410 - ldr r6, [r0] - movs r4, 0x1 -_080903A2: - movs r0, 0x58 - muls r0, r3 - adds r2, r6, r0 - ldrh r1, [r2] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _080903D0 - lsrs r0, r1, 1 - ands r0, r4 - cmp r0, 0 - beq _080903D0 - adds r0, r2, 0 - adds r0, 0x28 - ldrb r0, [r0] - cmp r0, 0 - beq _080903CA - ldr r0, [sp, 0xF0] - adds r0, 0x1 - str r0, [sp, 0xF0] -_080903CA: - adds r5, 0x1 - cmp r5, 0x4 - beq _080903DA -_080903D0: - adds r3, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r3, r0 - ble _080903A2 -_080903DA: - ldr r0, _08090414 - mov r2, r9 - lsls r1, r2, 4 - adds r0, r1, r0 - ldrb r0, [r0, 0x5] - mov r9, r1 - ldr r1, [sp, 0xE4] - cmp r1, 0 - bne _080903F2 - cmp r0, 0x3 - ble _080903F2 - movs r0, 0x3 -_080903F2: - cmp r5, r0 - ble _0809043C - cmp r0, 0x1 - bne _0809041C - ldr r0, _08090418 - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl xxx_format_string - b _08090430 - .align 2, 0 -_0809040C: .4byte gUnknown_8108F40 -_08090410: .4byte gRecruitedPokemonRef -_08090414: .4byte gDungeons -_08090418: .4byte gUnknown_8115A2C -_0809041C: - ldr r1, _08090464 - subs r0, r5, r0 - str r0, [r1] - ldr r0, _08090468 - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl xxx_format_string -_08090430: - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r2, 0x1 - mov r8, r2 -_0809043C: - ldr r0, _0809046C - mov r2, r9 - adds r1, r2, r0 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _0809048E - ldr r1, [sp, 0xEC] - cmp r0, r1 - bge _0809048E - ldr r1, _08090464 - str r0, [r1] - ldr r2, [sp, 0xEC] - subs r0, r2, r0 - str r0, [r1, 0x4] - mov r0, r8 - cmp r0, 0 - bne _08090474 - ldr r0, _08090470 - b _08090476 - .align 2, 0 -_08090464: .4byte gUnknown_202DE30 -_08090468: .4byte gUnknown_81159DC -_0809046C: .4byte gDungeons -_08090470: .4byte gUnknown_8115A80 -_08090474: - ldr r0, _080904AC -_08090476: - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl xxx_format_string - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r1, 0x1 - mov r8, r1 -_0809048E: - ldr r2, [sp, 0xE0] - cmp r2, 0 - beq _0809054E - ldr r0, _080904B0 - adds r1, r2, 0 - bl CopyCyanSpeciesNametoBuffer - cmp r5, 0x3 - ble _080904D2 - mov r0, r8 - cmp r0, 0 - bne _080904B8 - ldr r0, _080904B4 - b _080904BA - .align 2, 0 -_080904AC: .4byte gUnknown_8115ADC -_080904B0: .4byte gAvailablePokemonNames -_080904B4: .4byte gUnknown_8115B3C -_080904B8: - ldr r0, _08090528 -_080904BA: - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl xxx_format_string - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r1, 0x1 - mov r8, r1 -_080904D2: - ldr r0, [sp, 0xE0] - bl GetPokemonSize - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r2, _0809052C - mov r10, r2 - movs r6, 0x1 -_080904E4: - movs r0, 0x58 - adds r1, r4, 0 - muls r1, r0 - mov r2, r10 - ldr r0, [r2] - adds r2, r0, r1 - ldrh r1, [r2] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _08090510 - lsrs r0, r1, 1 - ands r0, r6 - cmp r0, 0 - beq _08090510 - movs r1, 0x8 - ldrsh r0, [r2, r1] - bl GetPokemonSize - lsls r0, 24 - lsrs r0, 24 - adds r5, r0 -_08090510: - adds r4, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - ble _080904E4 - cmp r5, 0x6 - ble _0809054E - mov r2, r8 - cmp r2, 0 - bne _08090534 - ldr r0, _08090530 - b _08090536 - .align 2, 0 -_08090528: .4byte gUnknown_8115BA4 -_0809052C: .4byte gRecruitedPokemonRef -_08090530: .4byte gUnknown_8115BF4 -_08090534: - ldr r0, _080905D0 -_08090536: - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl xxx_format_string - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r0, 0x1 - mov r8, r0 -_0809054E: - ldr r1, [sp, 0xE4] - cmp r1, 0 - beq _08090602 - add r5, sp, 0xCC - ldr r1, _080905D4 - adds r0, r5, 0 - movs r2, 0x8 - bl memcpy - add r4, sp, 0xD4 - ldr r1, _080905D8 - adds r0, r4, 0 - movs r2, 0x4 - bl memcpy - movs r6, 0 - mov r10, r4 - ldr r0, _080905DC - add r0, r9 - ldrb r5, [r0, 0xB] - add r4, sp, 0xCC -_08090578: - adds r0, r5, 0 - asrs r0, r6 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0809059E - ldrh r0, [r4] - bl sub_8090820 - lsls r0, 24 - cmp r0, 0 - bne _0809059E - mov r2, r10 - adds r0, r2, r6 - ldrb r0, [r0] - bl GetItemPossessionCount - cmp r0, 0 - beq _080905A6 -_0809059E: - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _08090578 -_080905A6: - cmp r6, 0x3 - bgt _08090602 - add r4, sp, 0xD8 - lsls r0, r6, 1 - add r0, sp - adds r0, 0xCC - ldrh r1, [r0] - adds r0, r4, 0 - bl InitPokemonMove - ldr r0, _080905E0 - adds r1, r4, 0 - movs r2, 0 - bl sub_80928C0 - mov r0, r8 - cmp r0, 0 - bne _080905E8 - ldr r0, _080905E4 - b _080905EA - .align 2, 0 -_080905D0: .4byte gUnknown_8115C4C -_080905D4: .4byte gUnknown_8108F42 -_080905D8: .4byte gUnknown_8108F4A -_080905DC: .4byte gDungeons -_080905E0: .4byte gUnknown_202DE58 -_080905E4: .4byte gUnknown_8115CB8 -_080905E8: - ldr r0, _080906A0 -_080905EA: - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl xxx_format_string - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r1, 0x1 - mov r8, r1 -_08090602: - ldr r0, _080906A4 - add r0, r9 - ldrb r1, [r0, 0xB] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080906CE - ldr r5, _080906A8 - ldr r2, [sp, 0xE0] - cmp r2, 0 - beq _0809063A - adds r0, r2, 0 - movs r1, 0 - bl GetPokemonType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08090638 - ldr r0, [sp, 0xE0] - movs r1, 0x1 - bl GetPokemonType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _0809063A -_08090638: - movs r5, 0 -_0809063A: - ldr r0, _080906A8 - cmp r5, r0 - bne _080906CE - movs r5, 0 - movs r6, 0x1 -_08090644: - ldr r2, _080906AC - movs r0, 0x58 - adds r1, r5, 0 - muls r1, r0 - ldr r0, [r2] - adds r4, r0, r1 - ldrh r1, [r4] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _08090686 - lsrs r0, r1, 1 - ands r0, r6 - cmp r0, 0 - beq _08090686 - movs r1, 0x8 - ldrsh r0, [r4, r1] - movs r1, 0 - bl GetPokemonType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08090690 - movs r2, 0x8 - ldrsh r0, [r4, r2] - movs r1, 0x1 - bl GetPokemonType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _08090690 -_08090686: - adds r5, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r5, r0 - ble _08090644 -_08090690: - ldr r0, _080906A8 - cmp r5, r0 - bne _080906CE - mov r0, r8 - cmp r0, 0 - bne _080906B4 - ldr r0, _080906B0 - b _080906B6 - .align 2, 0 -_080906A0: .4byte gUnknown_8115D14 -_080906A4: .4byte gDungeons -_080906A8: .4byte 0x0000019d -_080906AC: .4byte gRecruitedPokemonRef -_080906B0: .4byte gUnknown_8115D5C -_080906B4: - ldr r0, _080906D8 -_080906B6: - ldr r0, [r0] - mov r1, sp - add r2, sp, 0xC8 - movs r3, 0 - bl xxx_format_string - adds r0, r7, 0 - mov r1, sp - bl sub_8090888 - movs r1, 0x1 - mov r8, r1 -_080906CE: - mov r2, r8 - cmp r2, 0 - beq _080906DC - movs r0, 0x1 - b _0809080E - .align 2, 0 -_080906D8: .4byte gUnknown_8115D94 -_080906DC: - ldr r0, _080907EC - add r0, r9 - ldrb r0, [r0, 0xA] - cmp r0, 0 - beq _080906EC - ldr r0, [sp, 0xE8] - cmp r0, 0 - beq _0809071A -_080906EC: - ldr r1, [sp, 0xF4] - cmp r1, 0 - bne _08090708 - ldr r0, _080907F0 - ldr r1, [r0] - adds r0, r7, 0 - bl strcpy - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat - movs r2, 0x1 - str r2, [sp, 0xF4] -_08090708: - ldr r0, _080907F4 - ldr r1, [r0] - adds r0, r7, 0 - bl strcat - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat -_0809071A: - ldr r0, _080907EC - add r0, r9 - ldrb r0, [r0, 0x6] - cmp r0, 0 - beq _08090752 - ldr r0, [sp, 0xF4] - cmp r0, 0 - bne _08090740 - ldr r0, _080907F0 - ldr r1, [r0] - adds r0, r7, 0 - bl strcpy - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat - movs r1, 0x1 - str r1, [sp, 0xF4] -_08090740: - ldr r0, _080907F8 - ldr r1, [r0] - adds r0, r7, 0 - bl strcat - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat -_08090752: - ldr r0, _080907EC - add r0, r9 - ldrb r0, [r0, 0x4] - cmp r0, 0 - bne _08090792 - ldr r2, [sp, 0xEC] - ldr r0, [sp, 0xF0] - cmn r2, r0 - beq _08090792 - ldr r1, [sp, 0xF4] - cmp r1, 0 - bne _08090780 - ldr r0, _080907F0 - ldr r1, [r0] - adds r0, r7, 0 - bl strcpy - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat - movs r2, 0x1 - str r2, [sp, 0xF4] -_08090780: - ldr r0, _080907FC - ldr r1, [r0] - adds r0, r7, 0 - bl strcat - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat -_08090792: - ldr r0, _080907EC - add r0, r9 - ldrb r0, [r0, 0x7] - cmp r0, 0 - bne _080907DA - ldr r0, _08090800 - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - beq _080907DA - ldr r2, [sp, 0xF4] - cmp r2, 0 - bne _080907C8 - ldr r0, _080907F0 - ldr r1, [r0] - adds r0, r7, 0 - bl strcpy - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat - movs r0, 0x1 - str r0, [sp, 0xF4] -_080907C8: - ldr r0, _08090804 - ldr r1, [r0] - adds r0, r7, 0 - bl strcat - adds r0, r7, 0 - add r1, sp, 0xC8 - bl strcat -_080907DA: - ldr r1, [sp, 0xF4] - cmp r1, 0 - bne _0809080C - ldr r1, _08090808 - adds r0, r7, 0 - bl sprintf_2 - movs r0, 0 - b _0809080E - .align 2, 0 -_080907EC: .4byte gDungeons -_080907F0: .4byte gUnknown_8115DD4 -_080907F4: .4byte gUnknown_8115E00 -_080907F8: .4byte gUnknown_8115E28 -_080907FC: .4byte gUnknown_8115E54 -_08090800: .4byte gTeamInventory_203B460 -_08090804: .4byte gUnknown_8115E80 -_08090808: .4byte gUnknown_8108F50 -_0809080C: - movs r0, 0x2 -_0809080E: - add sp, 0xF8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_809034C - - thumb_func_start sub_8090820 -sub_8090820: - push {r4-r7,lr} - lsls r0, 16 - lsrs r6, r0, 16 - movs r4, 0 - ldr r0, _08090868 - ldr r0, [r0] - mov r12, r0 - movs r7, 0x1 -_08090830: - movs r0, 0x58 - muls r0, r4 - mov r2, r12 - adds r1, r2, r0 - ldrh r2, [r1] - adds r0, r7, 0 - ands r0, r2 - cmp r0, 0 - beq _08090874 - lsrs r0, r2, 1 - ands r0, r7 - cmp r0, 0 - beq _08090874 - movs r3, 0 - movs r5, 0x1 - adds r2, r1, 0 - adds r2, 0x2C -_08090852: - ldrb r1, [r2] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _0809086C - ldrh r0, [r2, 0x2] - cmp r0, r6 - bne _0809086C - movs r0, 0x1 - b _08090880 - .align 2, 0 -_08090868: .4byte gRecruitedPokemonRef -_0809086C: - adds r2, 0x8 - adds r3, 0x1 - cmp r3, 0x3 - ble _08090852 -_08090874: - adds r4, 0x1 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - ble _08090830 - movs r0, 0 -_08090880: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8090820 - - thumb_func_start sub_8090888 -sub_8090888: - push {r4-r7,lr} - adds r4, r0, 0 - adds r5, r1, 0 - movs r6, 0 - b _0809089C -_08090892: - ldrb r0, [r4] - cmp r0, 0xA - bne _0809089A - adds r6, 0x1 -_0809089A: - adds r4, 0x1 -_0809089C: - ldrb r0, [r4] - cmp r0, 0 - bne _08090892 - ldrb r7, [r5] - b _080908AE -_080908A6: - movs r0, 0xA - strb r0, [r4] - adds r4, 0x1 - adds r6, 0x1 -_080908AE: - adds r0, r6, 0 - movs r1, 0x3 - bl __modsi3 - cmp r0, 0 - bne _080908A6 - adds r1, r7, 0 - lsls r0, r1, 24 - cmp r0, 0 - beq _080908CE -_080908C2: - strb r1, [r4] - adds r4, 0x1 - adds r5, 0x1 - ldrb r1, [r5] - cmp r1, 0 - bne _080908C2 -_080908CE: - movs r0, 0 - strb r0, [r4] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8090888 - - thumb_func_start sub_80908D8 -sub_80908D8: - push {lr} - adds r2, r0, 0 - ldrb r0, [r2] - cmp r0, 0x3E - bhi _08090908 - ldr r0, _08090900 - ldrb r3, [r2] - adds r0, r3, r0 - ldrb r1, [r2, 0x1] - ldrb r0, [r0] - cmp r1, r0 - bcs _08090908 - ldr r1, _08090904 - lsls r0, r3, 2 - adds r0, r1 - ldrb r1, [r2, 0x1] - ldr r0, [r0] - adds r0, r1 - ldrb r0, [r0] - b _0809090A - .align 2, 0 -_08090900: .4byte gUnknown_81077A8 -_08090904: .4byte gUnknown_8108084 -_08090908: - movs r0, 0x1 -_0809090A: - pop {r1} - bx r1 - thumb_func_end sub_80908D8 - - thumb_func_start sub_8090910 -sub_8090910: - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - ldr r4, _0809094C - adds r0, r4, 0 - bl RandomCapped - adds r6, r0, 0 - adds r0, r4, 0 - bl RandomCapped - adds r2, r0, 0 - ldrb r0, [r5] - cmp r0, 0x3E - bhi _08090954 - ldr r0, _08090950 - ldrb r1, [r5] - adds r1, r0 - ldrb r0, [r5, 0x1] - ldrb r1, [r1] - cmp r0, r1 - bcs _08090954 - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_8091E94 - lsls r0, 24 - lsrs r0, 24 - b _08090956 - .align 2, 0 -_0809094C: .4byte 0x0000270f -_08090950: .4byte gUnknown_81077A8 -_08090954: - movs r0, 0x46 -_08090956: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8090910 - - thumb_func_start sub_809095C -sub_809095C: - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3E - bls _0809096A -_08090966: - movs r0, 0x1 - b _0809098C -_0809096A: - movs r2, 0 - ldr r0, _08090994 - ldrb r1, [r0] - adds r4, r0, 0 - cmp r1, 0x3F - beq _0809098A - adds r1, r4, 0 -_08090978: - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, r3 - beq _08090966 - adds r2, 0x1 - adds r0, r2, r4 - ldrb r0, [r0] - cmp r0, 0x3F - bne _08090978 -_0809098A: - movs r0, 0 -_0809098C: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08090994: .4byte gUnknown_810A350 - thumb_func_end sub_809095C - - .align 2,0 diff --git a/asm/code_809447C.s b/asm/code_809447C.s index 281962b..3d03a7a 100644 --- a/asm/code_809447C.s +++ b/asm/code_809447C.s @@ -26,7 +26,7 @@ sub_8094558: adds r1, r6, 0 adds r1, 0x18 adds r0, r4, 0 - bl sub_8090208 + bl PrintYellowDungeonNametoBuffer ldr r0, _080945D4 ldr r2, [r0] str r5, [sp] diff --git a/asm/dungeon.s b/asm/dungeon.s new file mode 100644 index 0000000..2e786f9 --- /dev/null +++ b/asm/dungeon.s @@ -0,0 +1,60 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_809017C +sub_809017C: + push {r4-r6,lr} + sub sp, 0x4 + adds r1, r0, 0 + mov r0, sp + bl sub_80901D8 + movs r5, 0 + ldr r2, _080901AC + ldrb r0, [r2] + cmp r0, 0x3F + beq _080901C6 + mov r3, sp + ldrb r6, [r3] + movs r4, 0 + adds r1, r2, 0 +_0809019A: + ldrb r0, [r1] + cmp r6, r0 + bne _080901B0 + ldrb r0, [r3, 0x1] + ldrb r2, [r1, 0x1] + cmp r0, r2 + bne _080901B0 + movs r0, 0x1 + b _080901C8 + .align 2, 0 +_080901AC: .4byte gUnknown_8107828 +_080901B0: + adds r4, 0x4 + adds r1, 0x4 + adds r5, 0x1 + ldr r0, _080901D0 + cmp r5, r0 + bgt _080901C6 + ldr r2, _080901D4 + adds r0, r4, r2 + ldrb r0, [r0] + cmp r0, 0x3F + bne _0809019A +_080901C6: + movs r0, 0 +_080901C8: + add sp, 0x4 + pop {r4-r6} + pop {r1} + bx r1 + .align 2, 0 +_080901D0: .4byte 0x000003e6 +_080901D4: .4byte gUnknown_8107828 + thumb_func_end sub_809017C + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/dungeon_2.s b/asm/dungeon_2.s new file mode 100644 index 0000000..2086666 --- /dev/null +++ b/asm/dungeon_2.s @@ -0,0 +1,818 @@ + #include "asm/constants/gba_constants.inc" + #include "asm/macros.inc" + + .syntax unified + + .text + + + thumb_func_start sub_809034C +sub_809034C: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0xF8 + adds r7, r2, 0 + ldr r2, [sp, 0x118] + lsls r0, 24 + lsrs r0, 24 + mov r9, r0 + lsls r1, 16 + asrs r1, 16 + str r1, [sp, 0xE0] + lsls r3, 24 + lsrs r3, 24 + str r3, [sp, 0xE4] + lsls r2, 24 + lsrs r2, 24 + str r2, [sp, 0xE8] + bl GetNumberOfFilledInventorySlots + str r0, [sp, 0xEC] + movs r5, 0 + movs r0, 0 + str r0, [sp, 0xF4] + mov r8, r0 + add r4, sp, 0xC8 + movs r0, 0xA + strb r0, [r4] + add r1, sp, 0xF4 + ldrb r1, [r1] + strb r1, [r4, 0x1] + ldr r1, _0809040C + adds r0, r7, 0 + bl strcpy + movs r2, 0 + str r2, [sp, 0xF0] + movs r3, 0 + ldr r0, _08090410 + ldr r6, [r0] + movs r4, 0x1 +_080903A2: + movs r0, 0x58 + muls r0, r3 + adds r2, r6, r0 + ldrh r1, [r2] + adds r0, r4, 0 + ands r0, r1 + cmp r0, 0 + beq _080903D0 + lsrs r0, r1, 1 + ands r0, r4 + cmp r0, 0 + beq _080903D0 + adds r0, r2, 0 + adds r0, 0x28 + ldrb r0, [r0] + cmp r0, 0 + beq _080903CA + ldr r0, [sp, 0xF0] + adds r0, 0x1 + str r0, [sp, 0xF0] +_080903CA: + adds r5, 0x1 + cmp r5, 0x4 + beq _080903DA +_080903D0: + adds r3, 0x1 + movs r0, 0xCE + lsls r0, 1 + cmp r3, r0 + ble _080903A2 +_080903DA: + ldr r0, _08090414 + mov r2, r9 + lsls r1, r2, 4 + adds r0, r1, r0 + ldrb r0, [r0, 0x5] + mov r9, r1 + ldr r1, [sp, 0xE4] + cmp r1, 0 + bne _080903F2 + cmp r0, 0x3 + ble _080903F2 + movs r0, 0x3 +_080903F2: + cmp r5, r0 + ble _0809043C + cmp r0, 0x1 + bne _0809041C + ldr r0, _08090418 + ldr r0, [r0] + mov r1, sp + add r2, sp, 0xC8 + movs r3, 0 + bl xxx_format_string + b _08090430 + .align 2, 0 +_0809040C: .4byte gUnknown_8108F40 +_08090410: .4byte gRecruitedPokemonRef +_08090414: .4byte gDungeons +_08090418: .4byte gUnknown_8115A2C +_0809041C: + ldr r1, _08090464 + subs r0, r5, r0 + str r0, [r1] + ldr r0, _08090468 + ldr r0, [r0] + mov r1, sp + add r2, sp, 0xC8 + movs r3, 0 + bl xxx_format_string +_08090430: + adds r0, r7, 0 + mov r1, sp + bl sub_8090888 + movs r2, 0x1 + mov r8, r2 +_0809043C: + ldr r0, _0809046C + mov r2, r9 + adds r1, r2, r0 + ldrb r0, [r1, 0x4] + cmp r0, 0 + beq _0809048E + ldr r1, [sp, 0xEC] + cmp r0, r1 + bge _0809048E + ldr r1, _08090464 + str r0, [r1] + ldr r2, [sp, 0xEC] + subs r0, r2, r0 + str r0, [r1, 0x4] + mov r0, r8 + cmp r0, 0 + bne _08090474 + ldr r0, _08090470 + b _08090476 + .align 2, 0 +_08090464: .4byte gUnknown_202DE30 +_08090468: .4byte gUnknown_81159DC +_0809046C: .4byte gDungeons +_08090470: .4byte gUnknown_8115A80 +_08090474: + ldr r0, _080904AC +_08090476: + ldr r0, [r0] + mov r1, sp + add r2, sp, 0xC8 + movs r3, 0 + bl xxx_format_string + adds r0, r7, 0 + mov r1, sp + bl sub_8090888 + movs r1, 0x1 + mov r8, r1 +_0809048E: + ldr r2, [sp, 0xE0] + cmp r2, 0 + beq _0809054E + ldr r0, _080904B0 + adds r1, r2, 0 + bl CopyCyanSpeciesNametoBuffer + cmp r5, 0x3 + ble _080904D2 + mov r0, r8 + cmp r0, 0 + bne _080904B8 + ldr r0, _080904B4 + b _080904BA + .align 2, 0 +_080904AC: .4byte gUnknown_8115ADC +_080904B0: .4byte gAvailablePokemonNames +_080904B4: .4byte gUnknown_8115B3C +_080904B8: + ldr r0, _08090528 +_080904BA: + ldr r0, [r0] + mov r1, sp + add r2, sp, 0xC8 + movs r3, 0 + bl xxx_format_string + adds r0, r7, 0 + mov r1, sp + bl sub_8090888 + movs r1, 0x1 + mov r8, r1 +_080904D2: + ldr r0, [sp, 0xE0] + bl GetPokemonSize + lsls r0, 24 + lsrs r5, r0, 24 + movs r4, 0 + ldr r2, _0809052C + mov r10, r2 + movs r6, 0x1 +_080904E4: + movs r0, 0x58 + adds r1, r4, 0 + muls r1, r0 + mov r2, r10 + ldr r0, [r2] + adds r2, r0, r1 + ldrh r1, [r2] + adds r0, r6, 0 + ands r0, r1 + cmp r0, 0 + beq _08090510 + lsrs r0, r1, 1 + ands r0, r6 + cmp r0, 0 + beq _08090510 + movs r1, 0x8 + ldrsh r0, [r2, r1] + bl GetPokemonSize + lsls r0, 24 + lsrs r0, 24 + adds r5, r0 +_08090510: + adds r4, 0x1 + movs r0, 0xCE + lsls r0, 1 + cmp r4, r0 + ble _080904E4 + cmp r5, 0x6 + ble _0809054E + mov r2, r8 + cmp r2, 0 + bne _08090534 + ldr r0, _08090530 + b _08090536 + .align 2, 0 +_08090528: .4byte gUnknown_8115BA4 +_0809052C: .4byte gRecruitedPokemonRef +_08090530: .4byte gUnknown_8115BF4 +_08090534: + ldr r0, _080905D0 +_08090536: + ldr r0, [r0] + mov r1, sp + add r2, sp, 0xC8 + movs r3, 0 + bl xxx_format_string + adds r0, r7, 0 + mov r1, sp + bl sub_8090888 + movs r0, 0x1 + mov r8, r0 +_0809054E: + ldr r1, [sp, 0xE4] + cmp r1, 0 + beq _08090602 + add r5, sp, 0xCC + ldr r1, _080905D4 + adds r0, r5, 0 + movs r2, 0x8 + bl memcpy + add r4, sp, 0xD4 + ldr r1, _080905D8 + adds r0, r4, 0 + movs r2, 0x4 + bl memcpy + movs r6, 0 + mov r10, r4 + ldr r0, _080905DC + add r0, r9 + ldrb r5, [r0, 0xB] + add r4, sp, 0xCC +_08090578: + adds r0, r5, 0 + asrs r0, r6 + movs r1, 0x1 + ands r0, r1 + cmp r0, 0 + beq _0809059E + ldrh r0, [r4] + bl sub_8090820 + lsls r0, 24 + cmp r0, 0 + bne _0809059E + mov r2, r10 + adds r0, r2, r6 + ldrb r0, [r0] + bl GetItemPossessionCount + cmp r0, 0 + beq _080905A6 +_0809059E: + adds r4, 0x2 + adds r6, 0x1 + cmp r6, 0x3 + ble _08090578 +_080905A6: + cmp r6, 0x3 + bgt _08090602 + add r4, sp, 0xD8 + lsls r0, r6, 1 + add r0, sp + adds r0, 0xCC + ldrh r1, [r0] + adds r0, r4, 0 + bl InitPokemonMove + ldr r0, _080905E0 + adds r1, r4, 0 + movs r2, 0 + bl sub_80928C0 + mov r0, r8 + cmp r0, 0 + bne _080905E8 + ldr r0, _080905E4 + b _080905EA + .align 2, 0 +_080905D0: .4byte gUnknown_8115C4C +_080905D4: .4byte gUnknown_8108F42 +_080905D8: .4byte gUnknown_8108F4A +_080905DC: .4byte gDungeons +_080905E0: .4byte gUnknown_202DE58 +_080905E4: .4byte gUnknown_8115CB8 +_080905E8: + ldr r0, _080906A0 +_080905EA: + ldr r0, [r0] + mov r1, sp + add r2, sp, 0xC8 + movs r3, 0 + bl xxx_format_string + adds r0, r7, 0 + mov r1, sp + bl sub_8090888 + movs r1, 0x1 + mov r8, r1 +_08090602: + ldr r0, _080906A4 + add r0, r9 + ldrb r1, [r0, 0xB] + movs r0, 0x10 + ands r0, r1 + cmp r0, 0 + beq _080906CE + ldr r5, _080906A8 + ldr r2, [sp, 0xE0] + cmp r2, 0 + beq _0809063A + adds r0, r2, 0 + movs r1, 0 + bl GetPokemonType + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + beq _08090638 + ldr r0, [sp, 0xE0] + movs r1, 0x1 + bl GetPokemonType + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + bne _0809063A +_08090638: + movs r5, 0 +_0809063A: + ldr r0, _080906A8 + cmp r5, r0 + bne _080906CE + movs r5, 0 + movs r6, 0x1 +_08090644: + ldr r2, _080906AC + movs r0, 0x58 + adds r1, r5, 0 + muls r1, r0 + ldr r0, [r2] + adds r4, r0, r1 + ldrh r1, [r4] + adds r0, r6, 0 + ands r0, r1 + cmp r0, 0 + beq _08090686 + lsrs r0, r1, 1 + ands r0, r6 + cmp r0, 0 + beq _08090686 + movs r1, 0x8 + ldrsh r0, [r4, r1] + movs r1, 0 + bl GetPokemonType + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + beq _08090690 + movs r2, 0x8 + ldrsh r0, [r4, r2] + movs r1, 0x1 + bl GetPokemonType + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + beq _08090690 +_08090686: + adds r5, 0x1 + movs r0, 0xCE + lsls r0, 1 + cmp r5, r0 + ble _08090644 +_08090690: + ldr r0, _080906A8 + cmp r5, r0 + bne _080906CE + mov r0, r8 + cmp r0, 0 + bne _080906B4 + ldr r0, _080906B0 + b _080906B6 + .align 2, 0 +_080906A0: .4byte gUnknown_8115D14 +_080906A4: .4byte gDungeons +_080906A8: .4byte 0x0000019d +_080906AC: .4byte gRecruitedPokemonRef +_080906B0: .4byte gUnknown_8115D5C +_080906B4: + ldr r0, _080906D8 +_080906B6: + ldr r0, [r0] + mov r1, sp + add r2, sp, 0xC8 + movs r3, 0 + bl xxx_format_string + adds r0, r7, 0 + mov r1, sp + bl sub_8090888 + movs r1, 0x1 + mov r8, r1 +_080906CE: + mov r2, r8 + cmp r2, 0 + beq _080906DC + movs r0, 0x1 + b _0809080E + .align 2, 0 +_080906D8: .4byte gUnknown_8115D94 +_080906DC: + ldr r0, _080907EC + add r0, r9 + ldrb r0, [r0, 0xA] + cmp r0, 0 + beq _080906EC + ldr r0, [sp, 0xE8] + cmp r0, 0 + beq _0809071A +_080906EC: + ldr r1, [sp, 0xF4] + cmp r1, 0 + bne _08090708 + ldr r0, _080907F0 + ldr r1, [r0] + adds r0, r7, 0 + bl strcpy + adds r0, r7, 0 + add r1, sp, 0xC8 + bl strcat + movs r2, 0x1 + str r2, [sp, 0xF4] +_08090708: + ldr r0, _080907F4 + ldr r1, [r0] + adds r0, r7, 0 + bl strcat + adds r0, r7, 0 + add r1, sp, 0xC8 + bl strcat +_0809071A: + ldr r0, _080907EC + add r0, r9 + ldrb r0, [r0, 0x6] + cmp r0, 0 + beq _08090752 + ldr r0, [sp, 0xF4] + cmp r0, 0 + bne _08090740 + ldr r0, _080907F0 + ldr r1, [r0] + adds r0, r7, 0 + bl strcpy + adds r0, r7, 0 + add r1, sp, 0xC8 + bl strcat + movs r1, 0x1 + str r1, [sp, 0xF4] +_08090740: + ldr r0, _080907F8 + ldr r1, [r0] + adds r0, r7, 0 + bl strcat + adds r0, r7, 0 + add r1, sp, 0xC8 + bl strcat +_08090752: + ldr r0, _080907EC + add r0, r9 + ldrb r0, [r0, 0x4] + cmp r0, 0 + bne _08090792 + ldr r2, [sp, 0xEC] + ldr r0, [sp, 0xF0] + cmn r2, r0 + beq _08090792 + ldr r1, [sp, 0xF4] + cmp r1, 0 + bne _08090780 + ldr r0, _080907F0 + ldr r1, [r0] + adds r0, r7, 0 + bl strcpy + adds r0, r7, 0 + add r1, sp, 0xC8 + bl strcat + movs r2, 0x1 + str r2, [sp, 0xF4] +_08090780: + ldr r0, _080907FC + ldr r1, [r0] + adds r0, r7, 0 + bl strcat + adds r0, r7, 0 + add r1, sp, 0xC8 + bl strcat +_08090792: + ldr r0, _080907EC + add r0, r9 + ldrb r0, [r0, 0x7] + cmp r0, 0 + bne _080907DA + ldr r0, _08090800 + ldr r0, [r0] + movs r1, 0x98 + lsls r1, 2 + adds r0, r1 + ldr r0, [r0] + cmp r0, 0 + beq _080907DA + ldr r2, [sp, 0xF4] + cmp r2, 0 + bne _080907C8 + ldr r0, _080907F0 + ldr r1, [r0] + adds r0, r7, 0 + bl strcpy + adds r0, r7, 0 + add r1, sp, 0xC8 + bl strcat + movs r0, 0x1 + str r0, [sp, 0xF4] +_080907C8: + ldr r0, _08090804 + ldr r1, [r0] + adds r0, r7, 0 + bl strcat + adds r0, r7, 0 + add r1, sp, 0xC8 + bl strcat +_080907DA: + ldr r1, [sp, 0xF4] + cmp r1, 0 + bne _0809080C + ldr r1, _08090808 + adds r0, r7, 0 + bl sprintf_2 + movs r0, 0 + b _0809080E + .align 2, 0 +_080907EC: .4byte gDungeons +_080907F0: .4byte gUnknown_8115DD4 +_080907F4: .4byte gUnknown_8115E00 +_080907F8: .4byte gUnknown_8115E28 +_080907FC: .4byte gUnknown_8115E54 +_08090800: .4byte gTeamInventory_203B460 +_08090804: .4byte gUnknown_8115E80 +_08090808: .4byte gUnknown_8108F50 +_0809080C: + movs r0, 0x2 +_0809080E: + add sp, 0xF8 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_809034C + + thumb_func_start sub_8090820 +sub_8090820: + push {r4-r7,lr} + lsls r0, 16 + lsrs r6, r0, 16 + movs r4, 0 + ldr r0, _08090868 + ldr r0, [r0] + mov r12, r0 + movs r7, 0x1 +_08090830: + movs r0, 0x58 + muls r0, r4 + mov r2, r12 + adds r1, r2, r0 + ldrh r2, [r1] + adds r0, r7, 0 + ands r0, r2 + cmp r0, 0 + beq _08090874 + lsrs r0, r2, 1 + ands r0, r7 + cmp r0, 0 + beq _08090874 + movs r3, 0 + movs r5, 0x1 + adds r2, r1, 0 + adds r2, 0x2C +_08090852: + ldrb r1, [r2] + adds r0, r5, 0 + ands r0, r1 + cmp r0, 0 + beq _0809086C + ldrh r0, [r2, 0x2] + cmp r0, r6 + bne _0809086C + movs r0, 0x1 + b _08090880 + .align 2, 0 +_08090868: .4byte gRecruitedPokemonRef +_0809086C: + adds r2, 0x8 + adds r3, 0x1 + cmp r3, 0x3 + ble _08090852 +_08090874: + adds r4, 0x1 + movs r0, 0xCE + lsls r0, 1 + cmp r4, r0 + ble _08090830 + movs r0, 0 +_08090880: + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_8090820 + + thumb_func_start sub_8090888 +sub_8090888: + push {r4-r7,lr} + adds r4, r0, 0 + adds r5, r1, 0 + movs r6, 0 + b _0809089C +_08090892: + ldrb r0, [r4] + cmp r0, 0xA + bne _0809089A + adds r6, 0x1 +_0809089A: + adds r4, 0x1 +_0809089C: + ldrb r0, [r4] + cmp r0, 0 + bne _08090892 + ldrb r7, [r5] + b _080908AE +_080908A6: + movs r0, 0xA + strb r0, [r4] + adds r4, 0x1 + adds r6, 0x1 +_080908AE: + adds r0, r6, 0 + movs r1, 0x3 + bl __modsi3 + cmp r0, 0 + bne _080908A6 + adds r1, r7, 0 + lsls r0, r1, 24 + cmp r0, 0 + beq _080908CE +_080908C2: + strb r1, [r4] + adds r4, 0x1 + adds r5, 0x1 + ldrb r1, [r5] + cmp r1, 0 + bne _080908C2 +_080908CE: + movs r0, 0 + strb r0, [r4] + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_8090888 + + thumb_func_start sub_80908D8 +sub_80908D8: + push {lr} + adds r2, r0, 0 + ldrb r0, [r2] + cmp r0, 0x3E + bhi _08090908 + ldr r0, _08090900 + ldrb r3, [r2] + adds r0, r3, r0 + ldrb r1, [r2, 0x1] + ldrb r0, [r0] + cmp r1, r0 + bcs _08090908 + ldr r1, _08090904 + lsls r0, r3, 2 + adds r0, r1 + ldrb r1, [r2, 0x1] + ldr r0, [r0] + adds r0, r1 + ldrb r0, [r0] + b _0809090A + .align 2, 0 +_08090900: .4byte gUnknown_81077A8 +_08090904: .4byte gUnknown_8108084 +_08090908: + movs r0, 0x1 +_0809090A: + pop {r1} + bx r1 + thumb_func_end sub_80908D8 + + thumb_func_start sub_8090910 +sub_8090910: + push {r4-r7,lr} + adds r5, r0, 0 + adds r7, r1, 0 + ldr r4, _0809094C + adds r0, r4, 0 + bl RandomCapped + adds r6, r0, 0 + adds r0, r4, 0 + bl RandomCapped + adds r2, r0, 0 + ldrb r0, [r5] + cmp r0, 0x3E + bhi _08090954 + ldr r0, _08090950 + ldrb r1, [r5] + adds r1, r0 + ldrb r0, [r5, 0x1] + ldrb r1, [r1] + cmp r0, r1 + bcs _08090954 + adds r0, r7, 0 + adds r1, r6, 0 + bl sub_8091E94 + lsls r0, 24 + lsrs r0, 24 + b _08090956 + .align 2, 0 +_0809094C: .4byte 0x0000270f +_08090950: .4byte gUnknown_81077A8 +_08090954: + movs r0, 0x46 +_08090956: + pop {r4-r7} + pop {r1} + bx r1 + thumb_func_end sub_8090910 + + thumb_func_start sub_809095C +sub_809095C: + push {r4,lr} + lsls r0, 24 + lsrs r3, r0, 24 + cmp r3, 0x3E + bls _0809096A +_08090966: + movs r0, 0x1 + b _0809098C +_0809096A: + movs r2, 0 + ldr r0, _08090994 + ldrb r1, [r0] + adds r4, r0, 0 + cmp r1, 0x3F + beq _0809098A + adds r1, r4, 0 +_08090978: + adds r0, r2, r1 + ldrb r0, [r0] + cmp r0, r3 + beq _08090966 + adds r2, 0x1 + adds r0, r2, r4 + ldrb r0, [r0] + cmp r0, 0x3F + bne _08090978 +_0809098A: + movs r0, 0 +_0809098C: + pop {r4} + pop {r1} + bx r1 + .align 2, 0 +_08090994: .4byte gUnknown_810A350 + thumb_func_end sub_809095C + + .align 2,0 diff --git a/asm/friend_area_action_menu.s b/asm/friend_area_action_menu.s index 75d3dd2..0defc5d 100644 --- a/asm/friend_area_action_menu.s +++ b/asm/friend_area_action_menu.s @@ -472,266 +472,4 @@ _080277F4: .4byte gUnknown_80D4920 _080277F8: .4byte gUnknown_80D4928 thumb_func_end sub_8027794 - thumb_func_start sub_80277FC -sub_80277FC: - push {r4,lr} - movs r0, 0x1 - bl sub_8023A94 - cmp r0, 0x4 - bhi _080278AE - lsls r0, 2 - ldr r1, _08027814 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08027814: .4byte _08027818 - .align 2, 0 -_08027818: - .4byte _080278AE - .4byte _080278AE - .4byte _080278A4 - .4byte _0802782C - .4byte _08027868 -_0802782C: - bl sub_8023B44 - ldr r4, _08027860 - ldr r1, [r4] - strh r0, [r1, 0x8] - ldr r3, _08027864 - movs r0, 0x8 - ldrsh r2, [r1, r0] - movs r0, 0x58 - muls r2, r0 - ldr r0, [r3] - adds r0, r2 - str r0, [r1, 0x18] - ldrb r0, [r0, 0x2] - strb r0, [r1, 0x1C] - ldr r1, [r4] - movs r2, 0x8 - ldrsh r0, [r1, r2] - adds r1, 0x14 - bl PeekPokemonItem - movs r0, 0x3 - bl SetFriendAreaActionMenuState - b _080278AE - .align 2, 0 -_08027860: .4byte gUnknown_203B2BC -_08027864: .4byte gRecruitedPokemonRef -_08027868: - bl sub_8023B44 - ldr r4, _0802789C - ldr r1, [r4] - strh r0, [r1, 0x8] - ldr r3, _080278A0 - movs r0, 0x8 - ldrsh r2, [r1, r0] - movs r0, 0x58 - muls r2, r0 - ldr r0, [r3] - adds r0, r2 - str r0, [r1, 0x18] - ldrb r0, [r0, 0x2] - strb r0, [r1, 0x1C] - ldr r1, [r4] - movs r2, 0x8 - ldrsh r0, [r1, r2] - adds r1, 0x14 - bl PeekPokemonItem - movs r0, 0x4 - bl SetFriendAreaActionMenuState - b _080278AE - .align 2, 0 -_0802789C: .4byte gUnknown_203B2BC -_080278A0: .4byte gRecruitedPokemonRef -_080278A4: - bl sub_8023C60 - movs r0, 0x11 - bl SetFriendAreaActionMenuState -_080278AE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80277FC - - thumb_func_start sub_80278B4 -sub_80278B4: - push {r4,lr} - sub sp, 0x4 - movs r0, 0 - str r0, [sp] - bl sub_8023A94 - ldr r4, _080278F8 - ldr r0, [r4] - adds r0, 0x7C - bl sub_8012FD8 - lsls r0, 24 - cmp r0, 0 - bne _080278E4 - ldr r0, [r4] - adds r0, 0x7C - mov r1, sp - bl sub_8013114 - ldr r1, [sp] - cmp r1, 0x1 - beq _080278E4 - ldr r0, [r4] - str r1, [r0, 0x70] -_080278E4: - ldr r0, [sp] - subs r0, 0x1 - cmp r0, 0xB - bls _080278EE - b _08027A36 -_080278EE: - lsls r0, 2 - ldr r1, _080278FC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080278F8: .4byte gUnknown_203B2BC -_080278FC: .4byte _08027900 - .align 2, 0 -_08027900: - .4byte _08027A30 - .4byte _08027A36 - .4byte _08027A36 - .4byte _08027A20 - .4byte _08027A28 - .4byte _08027930 - .4byte _0802796C - .4byte _0802798C - .4byte _080279C0 - .4byte _080279D0 - .4byte _080279D8 - .4byte _080279C8 -_08027930: - ldr r4, _08027964 - ldr r0, [r4] - movs r1, 0x8 - ldrsh r0, [r0, r1] - bl sub_808D750 - lsls r0, 24 - cmp r0, 0 - beq _0802795E - ldr r0, [r4] - movs r2, 0x8 - ldrsh r1, [r0, r2] - movs r0, 0x58 - muls r1, r0 - ldr r0, _08027968 - ldr r0, [r0] - adds r1, r0 - ldrh r2, [r1] - movs r0, 0x2 - orrs r0, r2 - strh r0, [r1] - bl nullsub_104 -_0802795E: - bl sub_808ED00 - b _08027A0E - .align 2, 0 -_08027964: .4byte gUnknown_203B2BC -_08027968: .4byte gRecruitedPokemonRef -_0802796C: - ldr r0, _08027984 - ldr r0, [r0] - ldr r2, [r0, 0x18] - ldrh r1, [r2] - ldr r0, _08027988 - ands r0, r1 - strh r0, [r2] - bl nullsub_104 - bl sub_808ED00 - b _08027A0E - .align 2, 0 -_08027984: .4byte gUnknown_203B2BC -_08027988: .4byte 0x0000fffd -_0802798C: - ldr r2, _080279B8 - ldr r0, _080279BC - ldr r0, [r0] - movs r3, 0x8 - ldrsh r1, [r0, r3] - movs r0, 0x58 - muls r1, r0 - ldr r0, [r2] - adds r4, r0, r1 - bl GetPlayerPokemonStruct - ldrb r1, [r4, 0x2] - cmp r1, 0 - bne _080279B2 - strb r1, [r0, 0x2] - movs r0, 0x1 - strb r0, [r4, 0x2] - bl nullsub_104 -_080279B2: - bl sub_808ED00 - b _08027A0E - .align 2, 0 -_080279B8: .4byte gRecruitedPokemonRef -_080279BC: .4byte gUnknown_203B2BC -_080279C0: - movs r0, 0x8 - bl SetFriendAreaActionMenuState - b _08027A36 -_080279C8: - movs r0, 0xE - bl SetFriendAreaActionMenuState - b _08027A36 -_080279D0: - movs r0, 0xA - bl SetFriendAreaActionMenuState - b _08027A36 -_080279D8: - ldr r0, _08027A18 - bl PlaySound - ldr r4, _08027A1C - ldr r1, [r4] - ldrb r0, [r1, 0x14] - cmp r0, 0 - beq _080279F0 - adds r0, r1, 0 - adds r0, 0x14 - bl sub_8091274 -_080279F0: - bl FillInventoryGaps - ldr r0, [r4] - movs r1, 0 - strb r1, [r0, 0x14] - ldr r0, [r4] - strb r1, [r0, 0x15] - ldr r1, [r4] - movs r2, 0x8 - ldrsh r0, [r1, r2] - adds r1, 0x14 - bl GivePokemonItem - bl nullsub_104 -_08027A0E: - movs r0, 0x2 - bl SetFriendAreaActionMenuState - b _08027A36 - .align 2, 0 -_08027A18: .4byte 0x0000014d -_08027A1C: .4byte gUnknown_203B2BC -_08027A20: - movs r0, 0x4 - bl SetFriendAreaActionMenuState - b _08027A36 -_08027A28: - movs r0, 0x5 - bl SetFriendAreaActionMenuState - b _08027A36 -_08027A30: - movs r0, 0x2 - bl SetFriendAreaActionMenuState -_08027A36: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80278B4 - .align 2,0 diff --git a/asm/friend_list_menu.s b/asm/friend_list_menu.s index 98a68a4..8ce78db 100644 --- a/asm/friend_list_menu.s +++ b/asm/friend_list_menu.s @@ -1032,7 +1032,7 @@ _08025B28: beq _08025B40 adds r0, r1, 0 adds r0, 0x18 - bl sub_8091274 + bl AddHeldItemToInventory _08025B40: bl FillInventoryGaps ldr r0, [r4] @@ -1259,7 +1259,7 @@ _08025CF8: beq _08025D24 adds r0, r1, 0 adds r0, 0x18 - bl sub_8091274 + bl AddHeldItemToInventory movs r6, 0x9 _08025D24: add r4, sp, 0x10 @@ -2858,7 +2858,7 @@ _08026A10: beq _08026A28 adds r0, r1, 0 adds r0, 0x14 - bl sub_8091274 + bl AddHeldItemToInventory _08026A28: bl FillInventoryGaps ldr r0, [r4] diff --git a/asm/kangaskhan_storage_1.s b/asm/kangaskhan_storage_1.s index 9890fe4..63990e9 100644 --- a/asm/kangaskhan_storage_1.s +++ b/asm/kangaskhan_storage_1.s @@ -470,7 +470,7 @@ _0801794C: orrs r0, r1 str r0, [sp, 0x4] add r0, sp, 0x4 - bl sub_8091274 + bl AddHeldItemToInventory movs r0, 0x1D bl UpdateKangaskhanStorageState b _080179A2 @@ -638,7 +638,7 @@ _08017AB0: ldrh r2, [r3] subs r2, r1 strh r2, [r3] - bl sub_8091274 + bl AddHeldItemToInventory _08017ACE: adds r5, 0x1 cmp r5, 0xEF diff --git a/asm/kecleon_items.s b/asm/kecleon_items.s index 87f2bdd..2d0fb02 100644 --- a/asm/kecleon_items.s +++ b/asm/kecleon_items.s @@ -1051,480 +1051,4 @@ _08019728: .4byte gUnknown_80D4920 _0801972C: .4byte gUnknown_80D4928 thumb_func_end sub_8019700 - thumb_func_start sub_8019730 -sub_8019730: - push {lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - beq _08019740 - b _0801984A -_08019740: - ldr r1, [sp] - cmp r1, 0x1 - beq _0801974C - ldr r0, _08019760 - ldr r0, [r0] - str r1, [r0, 0x28] -_0801974C: - ldr r0, [sp] - subs r0, 0x1 - cmp r0, 0x6 - bls _08019756 - b _0801984A -_08019756: - lsls r0, 2 - ldr r1, _08019764 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08019760: .4byte gUnknown_203B210 -_08019764: .4byte _08019768 - .align 2, 0 -_08019768: - .4byte _08019844 - .4byte _08019784 - .4byte _080197AC - .4byte _080197E4 - .4byte _0801984A - .4byte _0801984A - .4byte _0801983C -_08019784: - bl sub_8019D8C - cmp r0, 0 - bne _08019794 - movs r0, 0x5 - bl UpdateKecleonStoreState - b _0801984A -_08019794: - bl GetNumberOfFilledInventorySlots - cmp r0, 0x13 - ble _080197A4 - movs r0, 0xA - bl UpdateKecleonStoreState - b _0801984A -_080197A4: - movs r0, 0xF - bl UpdateKecleonStoreState - b _0801984A -_080197AC: - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - beq _080197EC - ldr r0, _080197D8 - ldr r0, [r0] - ldr r0, [r0, 0x14] - cmp r0, 0 - beq _080197FE - ldr r0, _080197DC - ldr r0, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldr r1, [r0] - ldr r0, _080197E0 - cmp r1, r0 - bgt _08019822 - movs r0, 0x17 - bl UpdateKecleonStoreState - b _0801984A - .align 2, 0 -_080197D8: .4byte gUnknown_203B210 -_080197DC: .4byte gTeamInventory_203B460 -_080197E0: .4byte 0x0001869e -_080197E4: - bl GetNumberOfFilledInventorySlots - cmp r0, 0 - bne _080197F4 -_080197EC: - movs r0, 0x9 - bl UpdateKecleonStoreState - b _0801984A -_080197F4: - ldr r0, _08019808 - ldr r1, [r0] - ldr r0, [r1, 0x14] - cmp r0, 0 - bne _0801980C -_080197FE: - movs r0, 0x8 - bl UpdateKecleonStoreState - b _0801984A - .align 2, 0 -_08019808: .4byte gUnknown_203B210 -_0801980C: - ldr r0, _0801982C - ldr r0, [r0] - movs r2, 0x98 - lsls r2, 2 - adds r0, r2 - ldr r1, [r1, 0x18] - ldr r0, [r0] - adds r1, r0 - ldr r0, _08019830 - cmp r1, r0 - ble _08019834 -_08019822: - movs r0, 0x7 - bl UpdateKecleonStoreState - b _0801984A - .align 2, 0 -_0801982C: .4byte gTeamInventory_203B460 -_08019830: .4byte 0x0001869f -_08019834: - movs r0, 0x1F - bl UpdateKecleonStoreState - b _0801984A -_0801983C: - movs r0, 0x2 - bl UpdateKecleonStoreState - b _0801984A -_08019844: - movs r0, 0x3 - bl UpdateKecleonStoreState -_0801984A: - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_8019730 - - thumb_func_start sub_8019850 -sub_8019850: - push {r4,lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _080198DE - ldr r0, [sp] - cmp r0, 0x5 - beq _08019874 - cmp r0, 0x5 - bgt _0801986E - cmp r0, 0x1 - beq _080198D8 - b _080198DE -_0801986E: - cmp r0, 0x6 - beq _080198D8 - b _080198DE -_08019874: - ldr r4, _080198A8 - ldr r0, [r4] - ldr r0, [r0, 0x10] - negs r0, r0 - bl AddToTeamMoney - ldr r1, [r4] - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _080198AC - adds r0, r1, 0 - adds r0, 0x20 - ldrb r0, [r0] - bl xxx_get_inv_unk230_at_809185C - bl sub_8091274 - ldr r0, [r4] - adds r0, 0x20 - ldrb r0, [r0] - bl xxx_init_unk230_substruct - bl xxx_fill_unk230_gaps - b _080198C8 - .align 2, 0 -_080198A8: .4byte gUnknown_203B210 -_080198AC: - adds r0, r1, 0 - adds r0, 0x21 - ldrb r0, [r0] - bl xxx_get_unk250_at_8091A90 - bl sub_8091274 - ldr r0, [r4] - adds r0, 0x21 - ldrb r0, [r0] - bl xxx_init_inv_unk250_at_8091A74 - bl xxx_fill_inv_unk250_gaps_8091AA8 -_080198C8: - movs r0, 0xA6 - lsls r0, 1 - bl PlaySound - movs r0, 0x11 - bl UpdateKecleonStoreState - b _080198DE -_080198D8: - movs r0, 0x10 - bl UpdateKecleonStoreState -_080198DE: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8019850 - - thumb_func_start sub_80198E8 -sub_80198E8: - push {r4,lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _0801993A - ldr r0, [sp] - cmp r0, 0x5 - beq _0801990C - cmp r0, 0x5 - bgt _08019906 - cmp r0, 0x1 - beq _08019934 - b _0801993A -_08019906: - cmp r0, 0x6 - beq _08019934 - b _0801993A -_0801990C: - ldr r4, _08019930 - ldr r0, [r4] - ldr r0, [r0, 0x10] - bl AddToTeamMoney - ldr r0, [r4] - ldr r0, [r0, 0x24] - bl ShiftItemsDownFrom - movs r0, 0xA6 - lsls r0, 1 - bl PlaySound - movs r0, 0x19 - bl UpdateKecleonStoreState - b _0801993A - .align 2, 0 -_08019930: .4byte gUnknown_203B210 -_08019934: - movs r0, 0x18 - bl UpdateKecleonStoreState -_0801993A: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80198E8 - - thumb_func_start sub_8019944 -sub_8019944: - push {r4,r5,lr} - sub sp, 0x4 - mov r0, sp - bl sub_80144A4 - cmp r0, 0 - bne _080199C2 - ldr r0, [sp] - cmp r0, 0x5 - beq _08019968 - cmp r0, 0x5 - bgt _08019962 - cmp r0, 0x1 - beq _080199BC - b _080199C2 -_08019962: - cmp r0, 0x6 - beq _080199BC - b _080199C2 -_08019968: - movs r4, 0 - ldr r5, _080199B4 -_0801996C: - lsls r1, r4, 2 - ldr r0, [r5] - adds r2, r0, r1 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0801998E - ldrb r0, [r2, 0x2] - bl CanSellItem - lsls r0, 24 - cmp r0, 0 - beq _0801998E - adds r0, r4, 0 - bl ClearItemSlotAt -_0801998E: - adds r4, 0x1 - cmp r4, 0x13 - ble _0801996C - bl FillInventoryGaps - ldr r0, _080199B8 - ldr r0, [r0] - ldr r0, [r0, 0x18] - bl AddToTeamMoney - movs r0, 0xA6 - lsls r0, 1 - bl PlaySound - movs r0, 0x20 - bl UpdateKecleonStoreState - b _080199C2 - .align 2, 0 -_080199B4: .4byte gTeamInventory_203B460 -_080199B8: .4byte gUnknown_203B210 -_080199BC: - movs r0, 0x1 - bl UpdateKecleonStoreState -_080199C2: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8019944 - - thumb_func_start sub_80199CC -sub_80199CC: - push {r4,r5,lr} - ldr r0, _080199E0 - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _080199E4 - movs r0, 0x1 - bl sub_8019EDC - b _080199EA - .align 2, 0 -_080199E0: .4byte gUnknown_203B210 -_080199E4: - movs r0, 0x1 - bl sub_801A2A8 -_080199EA: - cmp r0, 0x2 - beq _08019AD4 - cmp r0, 0x2 - bhi _080199FA - cmp r0, 0x1 - bne _080199F8 - b _08019AF4 -_080199F8: - b _08019B00 -_080199FA: - cmp r0, 0x3 - beq _08019A04 - cmp r0, 0x4 - beq _08019A6C - b _08019B00 -_08019A04: - ldr r4, _08019A24 - ldr r0, [r4] - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _08019A28 - bl sub_8019FB0 - ldr r1, [r4] - adds r1, 0x20 - strb r0, [r1] - ldr r0, [r4] - adds r0, 0x20 - ldrb r0, [r0] - bl xxx_get_inv_unk230_at_809185C - b _08019A3C - .align 2, 0 -_08019A24: .4byte gUnknown_203B210 -_08019A28: - bl sub_801A37C - ldr r1, [r4] - adds r1, 0x21 - strb r0, [r1] - ldr r0, [r4] - adds r0, 0x21 - ldrb r0, [r0] - bl xxx_get_unk250_at_8091A90 -_08019A3C: - adds r5, r0, 0 - ldr r4, _08019A68 - ldr r0, [r4] - adds r0, 0x1C - ldrb r1, [r5] - movs r2, 0 - bl xxx_init_itemslot_8090A8C - ldr r1, [r4] - ldrb r0, [r5, 0x1] - strb r0, [r1, 0x1D] - ldr r0, [r4] - adds r0, 0x1C - bl GetStackBuyPrice - ldr r1, [r4] - str r0, [r1, 0x10] - movs r0, 0x14 - bl UpdateKecleonStoreState - b _08019B00 - .align 2, 0 -_08019A68: .4byte gUnknown_203B210 -_08019A6C: - ldr r4, _08019A8C - ldr r0, [r4] - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _08019A90 - bl sub_8019FB0 - ldr r1, [r4] - adds r1, 0x20 - strb r0, [r1] - ldr r0, [r4] - adds r0, 0x20 - ldrb r0, [r0] - bl xxx_get_inv_unk230_at_809185C - b _08019AA4 - .align 2, 0 -_08019A8C: .4byte gUnknown_203B210 -_08019A90: - bl sub_801A37C - ldr r1, [r4] - adds r1, 0x21 - strb r0, [r1] - ldr r0, [r4] - adds r0, 0x21 - ldrb r0, [r0] - bl xxx_get_unk250_at_8091A90 -_08019AA4: - adds r5, r0, 0 - ldr r4, _08019AD0 - ldr r0, [r4] - adds r0, 0x1C - ldrb r1, [r5] - movs r2, 0 - bl xxx_init_itemslot_8090A8C - ldr r1, [r4] - ldrb r0, [r5, 0x1] - strb r0, [r1, 0x1D] - ldr r0, [r4] - adds r0, 0x1C - bl GetStackBuyPrice - ldr r1, [r4] - str r0, [r1, 0x10] - movs r0, 0x15 - bl UpdateKecleonStoreState - b _08019B00 - .align 2, 0 -_08019AD0: .4byte gUnknown_203B210 -_08019AD4: - ldr r0, _08019AE4 - ldr r0, [r0] - ldrb r0, [r0, 0x4] - cmp r0, 0 - beq _08019AE8 - bl sub_801A010 - b _08019AEC - .align 2, 0 -_08019AE4: .4byte gUnknown_203B210 -_08019AE8: - bl sub_801A3DC -_08019AEC: - movs r0, 0x1 - bl UpdateKecleonStoreState - b _08019B00 -_08019AF4: - movs r0, 0 - bl sub_801AD34 - movs r0, 0x1 - bl DrawTeamMoneyBox -_08019B00: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80199CC - .align 2,0 diff --git a/asm/makuhita_dojo.s b/asm/makuhita_dojo.s index 7d7680e..e19ef0c 100644 --- a/asm/makuhita_dojo.s +++ b/asm/makuhita_dojo.s @@ -135,7 +135,7 @@ _08030074: str r1, [sp, 0x14] ldr r0, _080300BC add r1, sp, 0x14 - bl sub_8090208 + bl PrintYellowDungeonNametoBuffer ldr r2, _080300C0 ldr r3, [r5] ldr r1, [r3, 0x4] diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s index 43173ec..99129d1 100644 --- a/asm/pokemon_3.s +++ b/asm/pokemon_3.s @@ -1252,7 +1252,7 @@ _0808FDB0: mov r1, r10 adds r1, 0x1C adds r0, r4, 0 - bl sub_8090208 + bl PrintYellowDungeonNametoBuffer ldr r0, _0808FF0C ldr r2, [r0] str r5, [sp] diff --git a/asm/wonder_mail_5.s b/asm/wonder_mail_5.s index aa081ae..86b83e0 100644 --- a/asm/wonder_mail_5.s +++ b/asm/wonder_mail_5.s @@ -5,9 +5,8 @@ .text - - thumb_func_start sub_8031AE8 -sub_8031AE8: + thumb_func_start DisplayMissionObjectives +DisplayMissionObjectives: push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -308,264 +307,6 @@ _08031D4E: .align 2, 0 _08031D68: .4byte gUnknown_80E1F94 _08031D6C: .4byte gUnknown_203B330 - thumb_func_end sub_8031AE8 - - thumb_func_start sub_8031D70 -sub_8031D70: - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - ldr r5, _08031DC4 - movs r0, 0x7C - movs r1, 0x8 - bl MemoryAlloc - str r0, [r5] - stm r0!, {r6} - bl sub_801317C - ldr r0, [r5] - str r4, [r0, 0x10] - lsls r1, r4, 1 - adds r1, r4 - lsls r1, 3 - adds r1, 0x18 - adds r1, r0, r1 - str r1, [r0, 0x14] - adds r0, 0x18 - bl sub_8006518 - ldr r1, [r5] - ldr r2, [r1, 0x10] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, 0x18 - ldr r0, _08031DC8 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - bl sub_8031E00 - movs r0, 0x1 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08031DC4: .4byte gUnknown_203B334 -_08031DC8: .4byte gUnknown_80E1FC4 - thumb_func_end sub_8031D70 - - thumb_func_start sub_8031DCC -sub_8031DCC: - push {lr} - ldr r0, _08031DEC - ldr r1, [r0] - adds r0, r1, 0x4 - ldr r1, [r1, 0x10] - bl sub_8012A64 - cmp r0, 0x1 - beq _08031DF0 - cmp r0, 0x2 - bne _08031DFA - movs r0, 0x1 - bl PlayMenuSoundEffect - movs r0, 0x2 - b _08031DFC - .align 2, 0 -_08031DEC: .4byte gUnknown_203B334 -_08031DF0: - movs r0, 0 - bl PlayMenuSoundEffect - movs r0, 0x3 - b _08031DFC -_08031DFA: - movs r0, 0 -_08031DFC: - pop {r1} - bx r1 - thumb_func_end sub_8031DCC - - thumb_func_start sub_8031E00 -sub_8031E00: - push {lr} - bl sub_8031E58 - bl sub_8031E74 - pop {r0} - bx r0 - thumb_func_end sub_8031E00 - - thumb_func_start sub_8031E10 -sub_8031E10: - push {r4,r5,lr} - ldr r4, _08031E50 - ldr r2, [r4] - cmp r2, 0 - beq _08031E4A - ldr r0, [r2, 0x10] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, r2, r1 - adds r1, 0x18 - ldr r0, _08031E54 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl ResetUnusedInputStruct - ldr r0, [r4] - adds r0, 0x18 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r0, [r4] - bl MemoryFree - movs r0, 0 - str r0, [r4] -_08031E4A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08031E50: .4byte gUnknown_203B334 -_08031E54: .4byte gUnknown_80E1FA8 - thumb_func_end sub_8031E10 - - thumb_func_start sub_8031E58 -sub_8031E58: - push {lr} - bl ResetUnusedInputStruct - ldr r0, _08031E70 - ldr r0, [r0] - adds r0, 0x18 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - pop {r0} - bx r0 - .align 2, 0 -_08031E70: .4byte gUnknown_203B334 - thumb_func_end sub_8031E58 - - thumb_func_start sub_8031E74 -sub_8031E74: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x3C - ldr r3, _08031EC0 - ldr r5, _08031EC4 - ldr r2, [r5] - ldr r1, [r2] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 4 - ldr r4, [r3] - adds r4, r0 - ldr r0, [r2, 0x10] - bl sub_80073B8 - ldr r2, _08031EC8 - ldr r0, [r5] - ldr r3, [r0, 0x10] - movs r0, 0 - str r0, [sp] - movs r0, 0x14 - movs r1, 0 - bl xxx_call_draw_string - add r0, sp, 0x4 - adds r1, r4, 0 - bl sub_803D2C0 - movs r7, 0 - mov r8, r5 -_08031EB2: - cmp r7, 0x4 - ble _08031ED0 - cmp r7, 0xC - bgt _08031ECC - movs r6, 0x6 - movs r5, 0x16 - b _08031F00 - .align 2, 0 -_08031EC0: .4byte gUnknown_203B480 -_08031EC4: .4byte gUnknown_203B334 -_08031EC8: .4byte gUnknown_80E1FDC -_08031ECC: - cmp r7, 0x11 - bgt _08031ED6 -_08031ED0: - movs r6, 0x7 - movs r5, 0x15 - b _08031F00 -_08031ED6: - cmp r7, 0x16 - ble _08031EE8 - cmp r7, 0x1E - bgt _08031EE4 - movs r6, 0x6 - movs r5, 0x25 - b _08031F00 -_08031EE4: - cmp r7, 0x23 - bgt _08031EEE -_08031EE8: - movs r6, 0x7 - movs r5, 0x24 - b _08031F00 -_08031EEE: - cmp r7, 0x28 - ble _08031EFC - cmp r7, 0x30 - bgt _08031EFC - movs r6, 0x6 - movs r5, 0x34 - b _08031F00 -_08031EFC: - movs r6, 0x7 - movs r5, 0x33 -_08031F00: - adds r0, r7, 0 - movs r1, 0x12 - bl __modsi3 - movs r1, 0xB - adds r4, r0, 0 - muls r4, r1 - adds r4, 0x6 - mov r0, sp - adds r0, r7 - adds r0, 0x4 - ldrb r2, [r0] - mov r1, r8 - ldr r0, [r1] - ldr r0, [r0, 0x10] - str r0, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - adds r3, r6, 0 - bl sub_8012C60 - mov r1, r8 - ldr r0, [r1] - ldr r0, [r0, 0x10] - adds r2, r5, 0 - adds r2, 0xA - movs r1, 0x5 - str r1, [sp] - adds r1, r4, 0 - movs r3, 0xA - bl sub_80078A4 - adds r7, 0x1 - cmp r7, 0x35 - ble _08031EB2 - ldr r0, _08031F5C - ldr r0, [r0] - ldr r0, [r0, 0x10] - bl sub_80073E0 - add sp, 0x3C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08031F5C: .4byte gUnknown_203B334 - thumb_func_end sub_8031E74 + thumb_func_end DisplayMissionObjectives .align 2,0 diff --git a/include/constants/dungeon.h b/include/constants/dungeon.h index 19f5340..6987c61 100644 --- a/include/constants/dungeon.h +++ b/include/constants/dungeon.h @@ -1,6 +1,8 @@ #ifndef GUARD_CONSTANTS_DUNGEON_H #define GUARD_CONSTANTS_DUNGEON_H +#define NUM_DUNGEON_MAZE (NUM_DUNGEONS - DUNGEON_NORMAL_MAZE_2) + enum Dungeon { DUNGEON_TINY_WOODS = 0, @@ -101,6 +103,7 @@ enum Dungeon DUNGEON_TEAM_RUMBLEROCK = 95, DUNGEON_RESCUE_TEAM_2 = 96, DUNGEON_RESCUE_TEAM_MAZE = 97, + NUM_DUNGEONS }; #endif diff --git a/include/friend_area_action_menu.h b/include/friend_area_action_menu.h index dfddc22..1080679 100644 --- a/include/friend_area_action_menu.h +++ b/include/friend_area_action_menu.h @@ -12,7 +12,7 @@ struct unkStruct_203B2BC struct HeldItem itemToGive; struct HeldItem unk14; struct PokemonStruct *unk18; - u32 unk1C; + u8 unk1C; u32 unk20; u16 unk24; struct PokemonMove unk28[8]; diff --git a/include/item.h b/include/item.h index 5da4c67..6ac6847 100644 --- a/include/item.h +++ b/include/item.h @@ -104,15 +104,17 @@ bool8 IsGummiItem(u8); void xxx_init_unk230_substruct(u8); bool8 xxx_insert_unk230_80919FC(u8); struct HeldItem *xxx_get_inv_unk230_at_809185C(u8); +void xxx_fill_unk230_gaps(); struct HeldItem* xxx_get_unk250_at_8091A90(u8); s32 xxx_count_inv_unk230(); u32 xxx_count_non_empty_inv_unk250_8091A48(); void sub_8091BB4(u8); void sub_8090F58(void*, u8 *, struct ItemSlot *, struct unkStruct_8090F58*); void ShiftItemsDownFrom(s32 start); +void ClearItemSlotAt(u32 index); void MoveToStorage(struct ItemSlot* slot); void FillInventoryGaps(); -bool8 sub_8091274(struct HeldItem* slot); +bool8 AddHeldItemToInventory(struct HeldItem* slot); bool8 IsNotMoneyOrUsedTMItem(u8 id); s32 FindItemInInventory(u8 itemIndex); diff --git a/include/kecleon_items.h b/include/kecleon_items.h index 11cb0a7..0719804 100644 --- a/include/kecleon_items.h +++ b/include/kecleon_items.h @@ -15,7 +15,7 @@ struct unkStruct_203B210 u32 unkC; s32 itemSellPrice; u32 unk14; - u32 unk18; + s32 unk18; struct ItemSlot unk1C; u8 unk20; u8 unk21; diff --git a/include/pokemon.h b/include/pokemon.h index af6c103..c50dc75 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -22,7 +22,6 @@ struct Offense { struct unkPokeSubStruct_4 { u8 dungeonIndex; u8 dungeonFloor; - u16 fill6; }; struct unkPokeSubStruct_C @@ -35,7 +34,7 @@ struct PokemonStruct { // size: 0x58 /* 0x0 */ u16 unk0; // recruited?? - /* 0x1 */ u8 unk2; + /* 0x1 */ bool8 isLeader; /* 0x3 */ u8 unkHasNextStage; // set to a random value? /* 0x4 */ struct unkPokeSubStruct_4 unk4; /* 0x8 */ s16 speciesNum; // species # @@ -76,7 +75,7 @@ struct PokemonStruct2 { // size 0x68 u16 unk0; // corresponds to unk0 inPokemonStruct - u8 unk2; // unk2 + bool8 isLeader; // unk2 u8 unkHasNextStage; // unk3 struct unkPokeSubStruct_4 unk4; // unk4 u16 IQ; // IQ (other offset) diff --git a/ld_script.txt b/ld_script.txt index b9db591..13ffffd 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -144,6 +144,7 @@ SECTIONS { asm/wonder_mail_4.o(.text); src/post_office_guide.o(.text); asm/wonder_mail_5.o(.text); + asm/code_8031D70.o(.text); src/adventure_log.o(.text); src/friend_rescue.o(.text); asm/friend_rescue.o(.text); @@ -277,9 +278,9 @@ SECTIONS { src/pokemon_3.o(.text); asm/pokemon_3.o(.text); src/dungeon.o(.text); - asm/code_809017C.o(.text); - src/code_8090208.o(.text); - asm/code_8090208.o(.text); + asm/dungeon.o(.text); + src/dungeon_2.o(.text); + asm/dungeon_2.o(.text); src/items.o(.text); src/rescue_team_info.o(.text); src/text_util.o(.text); diff --git a/src/code_8090208.c b/src/code_8090208.c deleted file mode 100644 index 8322ffc..0000000 --- a/src/code_8090208.c +++ /dev/null @@ -1,34 +0,0 @@ -#include "global.h" -#include "dungeon.h" -#include "code_800D090.h" - -extern const char gUnknown_8108F10[]; -extern const char gUnknown_8108F18[]; -extern const char gUnknown_8108F2C[]; - -struct unkDungeonStruct -{ - u8 index; - u8 floor; -}; - -void sub_8090208(u8 *buffer, struct unkDungeonStruct *dungeonLocation) -{ - sprintf_2(buffer, gUnknown_8108F10, gDungeonNames[dungeonLocation->index].name1); // {COLOR_2 YELLOW_4}%s{END_COLOR_TEXT_2} (normal floor print (no B) -} - -void PrintDungeonLocationtoBuffer(u8 *buffer, struct unkDungeonStruct *dungeonLocation) -{ - if(gDungeons[dungeonLocation->index].stairDirection != 0){ - sprintf_2(buffer, gUnknown_8108F18, gDungeonNames[dungeonLocation->index].name1, dungeonLocation->floor); //_F - } - else - { - sprintf_2(buffer, gUnknown_8108F2C, gDungeonNames[dungeonLocation->index].name1, dungeonLocation->floor); // B _F - } -} - -void CopyDungeonName1toBuffer(u8 *buffer, struct unkDungeonStruct *dungeonLocation) -{ - strncpy(buffer, gDungeonNames[dungeonLocation->index].name1, 0x50); -} diff --git a/src/code_8095824.c b/src/code_8095824.c index b366574..8792545 100644 --- a/src/code_8095824.c +++ b/src/code_8095824.c @@ -40,7 +40,7 @@ u32 sub_80954CC(u8 *a, u32 b) temp = &gUnknown_203B484->unk4; memset(temp, 0, sizeof(struct PokemonStruct)); RestoreIntegerBits(&backup, &temp->unk0, 2); - RestoreIntegerBits(&backup, &temp->unk2, 1); + RestoreIntegerBits(&backup, &temp->isLeader, 1); RestoreIntegerBits(&backup, &temp->unkHasNextStage, 7); xxx_restore_poke_sub_4_8090314(&backup, &temp->unk4); RestoreIntegerBits(&backup, &temp->speciesNum, 9); @@ -82,7 +82,7 @@ u32 sub_8095624(u8 *a, u32 b) SaveIntegerBits(&backup, &gUnknown_203B484->unk0, 0x20); temp = &gUnknown_203B484->unk4; SaveIntegerBits(&backup, &temp->unk0, 2); - SaveIntegerBits(&backup, &temp->unk2, 1); + SaveIntegerBits(&backup, &temp->isLeader, 1); SaveIntegerBits(&backup, &temp->unkHasNextStage, 7); xxx_save_poke_sub_4_80902F4(&backup, &temp->unk4); SaveIntegerBits(&backup, &temp->speciesNum, 9); diff --git a/src/dungeon_2.c b/src/dungeon_2.c new file mode 100644 index 0000000..18b6fe5 --- /dev/null +++ b/src/dungeon_2.c @@ -0,0 +1,83 @@ +#include "global.h" +#include "dungeon.h" +#include "code_800D090.h" +#include "pokemon.h" +#include "code_8092334.h" +#include "constants/dungeon.h" + +extern const char gUnknown_8108F10[]; +extern const char gUnknown_8108F18[]; +extern const char gUnknown_8108F2C[]; +extern u8 gUnknown_81077A8[]; +extern u8 gUnknown_81077E8[]; + +void sub_80901D8(struct unkPokeSubStruct_4 *param_1,struct unkPokeSubStruct_4 *param_2) +{ + if ((u8)(param_2->dungeonIndex - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE) { + param_1->dungeonIndex = DUNGEON_NORMAL_MAZE; + param_1->dungeonFloor = (param_2->dungeonIndex - DUNGEON_NORMAL_MAZE_2) * 3 + param_2->dungeonFloor; + } + else { + *param_1 = *param_2; + } +} + +void PrintYellowDungeonNametoBuffer(u8 *buffer, struct unkPokeSubStruct_4 *dungeonLocation) +{ + sprintf_2(buffer, gUnknown_8108F10, gDungeonNames[dungeonLocation->dungeonIndex].name1); // {COLOR_2 YELLOW_4}%s{END_COLOR_TEXT_2} (normal floor print (no B) +} + +void PrintDungeonLocationtoBuffer(u8 *buffer, struct unkPokeSubStruct_4 *dungeonLocation) +{ + if(gDungeons[dungeonLocation->dungeonIndex].stairDirection != 0){ + sprintf_2(buffer, gUnknown_8108F18, gDungeonNames[dungeonLocation->dungeonIndex].name1, dungeonLocation->dungeonFloor); //_F + } + else + { + sprintf_2(buffer, gUnknown_8108F2C, gDungeonNames[dungeonLocation->dungeonIndex].name1, dungeonLocation->dungeonFloor); // B _F + } +} + +void CopyDungeonName1toBuffer(u8 *buffer, struct unkPokeSubStruct_4 *dungeonLocation) +{ + strncpy(buffer, gDungeonNames[dungeonLocation->dungeonIndex].name1, 0x50); +} + +u8 sub_8090298(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]; +} + +u8 sub_80902C8(u8 dungeon) +{ + if ((u8)(dungeon - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE) + return 0; + else if(dungeon > DUNGEON_PURITY_FOREST) + return 0; + else + return gUnknown_81077E8[dungeon]; +} + +void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924* r0, struct unkPokeSubStruct_4* r1) +{ + SaveIntegerBits(r0, &r1->dungeonIndex, 0x7); + SaveIntegerBits(r0, &r1->dungeonFloor, 0x7); +} + +void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924* r0, struct unkPokeSubStruct_4* r1) +{ + r1->dungeonIndex = 0; + r1->dungeonFloor = 0; + RestoreIntegerBits(r0, &r1->dungeonIndex, 0x7); + RestoreIntegerBits(r0, &r1->dungeonFloor, 0x7); +} + +u8 GetDungeonUnk1(u8 dungeon) +{ + return gDungeons[dungeon].unk1; +} diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c index 3f1bb5f..38650d0 100644 --- a/src/friend_area_action_menu_1.c +++ b/src/friend_area_action_menu_1.c @@ -43,11 +43,129 @@ extern u32 sub_801F194(void); u32 sub_8027E18(struct PokemonStruct *); u8 sub_8027E4C(struct PokemonStruct *r0); + extern u32 sub_801BF48(void); extern void sub_801BF98(void); extern u32 sub_80244E4(void); extern void sub_802453C(void); +extern u32 sub_8023A94(u32); +extern bool8 sub_808D750(s16 index_); +extern struct PokemonStruct *GetPlayerPokemonStruct(void); +extern void sub_808ED00(); +extern s16 sub_8023B44(void); +extern void sub_8023C60(void); + +void sub_80277FC(void) +{ + struct PokemonStruct *iVar4; + + switch(sub_8023A94(1)) { + case 0: + case 1: + break; + case 3: + gUnknown_203B2BC->targetPoke = sub_8023B44(); + iVar4 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + gUnknown_203B2BC->unk18 = iVar4; + gUnknown_203B2BC->unk1C = iVar4->isLeader; + PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->unk14); + SetFriendAreaActionMenuState(3); + break; + case 4: + gUnknown_203B2BC->targetPoke = sub_8023B44(); + iVar4 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + gUnknown_203B2BC->unk18 = iVar4; + gUnknown_203B2BC->unk1C = iVar4->isLeader; + PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->unk14); + SetFriendAreaActionMenuState(4); + break; + case 2: + sub_8023C60(); + SetFriendAreaActionMenuState(0x11); + break; + } +} + +void sub_80278B4(void) +{ + struct PokemonStruct *playerStruct; + struct PokemonStruct *puVar3; + struct PokemonStruct *iVar4; + int local_c; + + local_c = 0; + sub_8023A94(0); + if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == '\0') && (sub_8013114(&gUnknown_203B2BC->unk7C,&local_c), local_c != 1)) { + gUnknown_203B2BC->unk70 = local_c; + } + switch(local_c) { + case 6: + if (sub_808D750(gUnknown_203B2BC->targetPoke) != '\0') { +#ifdef NONMATCHING + puVar3 = &gRecruiedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; +#else + register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2BC->targetPoke]); + struct PokemonStruct* p = gRecruitedPokemonRef->pokemon; + size_t addr = offset + (size_t)p; + puVar3 = (struct PokemonStruct*)addr; +#endif + puVar3->unk0 |= 2; + nullsub_104(); + } + sub_808ED00(); + SetFriendAreaActionMenuState(2); + break; + case 7: + gUnknown_203B2BC->unk18->unk0 &= 0xfffd; + nullsub_104(); + sub_808ED00(); + SetFriendAreaActionMenuState(2); + break; + case 8: + iVar4 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke]; + playerStruct = GetPlayerPokemonStruct(); + if (!iVar4->isLeader) { + playerStruct->isLeader = FALSE; + iVar4->isLeader = TRUE; + nullsub_104(); + } + sub_808ED00(); + SetFriendAreaActionMenuState(2); + break; + case 9: + SetFriendAreaActionMenuState(8); + break; + case 0xc: + SetFriendAreaActionMenuState(0xe); + break; + case 10: + SetFriendAreaActionMenuState(10); + break; + case 0xb: + PlaySound(0x14d); + if (gUnknown_203B2BC->unk14.itemIndex != ITEM_ID_NOTHING) { + AddHeldItemToInventory(&gUnknown_203B2BC->unk14); + } + FillInventoryGaps(); + gUnknown_203B2BC->unk14.itemIndex = 0; + gUnknown_203B2BC->unk14.numItems = 0; + GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->unk14); + nullsub_104(); + SetFriendAreaActionMenuState(2); + break; + case 4: + SetFriendAreaActionMenuState(4); + break; + case 5: + SetFriendAreaActionMenuState(5); + break; + case 1: + SetFriendAreaActionMenuState(2); + break; + } +} + void sub_8027A40(void) { switch(sub_80244E4()) @@ -171,7 +289,7 @@ void sub_8027BD8(void) ShiftItemsDownFrom(gUnknown_203B2BC->itemIndex); FillInventoryGaps(); if (gUnknown_203B2BC->unk14.itemIndex != 0) { - sub_8091274(&gUnknown_203B2BC->unk14); + AddHeldItemToInventory(&gUnknown_203B2BC->unk14); } GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->itemToGive); sub_801A928(); @@ -267,7 +385,7 @@ void sub_8027D40(u32 r0, struct HeldItem *heldItem) u32 sub_8027D9C(struct PokemonStruct *r0) { u32 var1; - if(r0->unk2 == 0) + if(r0->isLeader == 0) { var1 = 0; if(r0->unk4.dungeonIndex == 0x41) @@ -288,7 +406,7 @@ u32 sub_8027DCC(struct PokemonStruct *r0) u32 var1; if(sub_808D3BC() != r0) if(sub_808D3F8() != r0) - if(r0->unk2 == 0) + if(r0->isLeader == 0) { var1 = 0; if(r0->unk4.dungeonIndex == 0x41) @@ -345,7 +463,7 @@ void sub_8027EB8(void) { case 1: PlaySound(0x14d); - sub_8091274(&gUnknown_203B2BC->unk14); + AddHeldItemToInventory(&gUnknown_203B2BC->unk14); FillInventoryGaps(); gUnknown_203B2BC->unk14.itemIndex = 0; gUnknown_203B2BC->unk14.numItems = 0; diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c index 142aeca..fe9de8c 100644 --- a/src/friend_list_menu.c +++ b/src/friend_list_menu.c @@ -222,7 +222,7 @@ void sub_8026C14(void) ShiftItemsDownFrom(gUnknown_203B2B8->unkC); FillInventoryGaps(); if (gUnknown_203B2B8->unk14.itemIndex != '\0') { - sub_8091274(&gUnknown_203B2B8->unk14); + AddHeldItemToInventory(&gUnknown_203B2B8->unk14); nextState = 0x10; } HeldItemToSlot(&slot,&gUnknown_203B2B8->unk10); @@ -342,7 +342,7 @@ void sub_8026E08(u32 r0) u32 sub_8026E88(struct PokemonStruct *r0) { u8 iVar3; - if(r0->unk2 == 0) + if(r0->isLeader == 0) { iVar3 = (r0->unk4.dungeonIndex == 0x41); if(iVar3 != 0) @@ -359,7 +359,7 @@ u32 sub_8026EB8(struct PokemonStruct *r0) u8 iVar3; if(sub_808D3BC() != r0) if(sub_808D3F8() != r0) - if(r0->unk2 == 0) + if(r0->isLeader == 0) { iVar3 = (r0->unk4.dungeonIndex == 0x41); if(iVar3 != 0) @@ -414,7 +414,7 @@ void sub_8026FA4(void) { case 1: PlaySound(0x14d); - sub_8091274(&gUnknown_203B2B8->unk14); + AddHeldItemToInventory(&gUnknown_203B2B8->unk14); FillInventoryGaps(); gUnknown_203B2B8->unk14.itemIndex = 0; gUnknown_203B2B8->unk14.numItems = 0; diff --git a/src/items.c b/src/items.c index e4bdc6a..6d2acaf 100644 --- a/src/items.c +++ b/src/items.c @@ -586,7 +586,7 @@ bool8 sub_809124C(u8 itemIndex, u8 param_3) return AddItemToInventory(&temp); } -bool8 sub_8091274(struct HeldItem* slot) +bool8 AddHeldItemToInventory(struct HeldItem* slot) { struct ItemSlot temp; @@ -1083,7 +1083,7 @@ struct HeldItem* xxx_get_unk250_at_8091A90(u8 index) { return &gTeamInventory_203B460->unk250[index]; } -void xxx_fill_inv_unk250_gaps_8091AA8(u8 index) { +void xxx_fill_inv_unk250_gaps_8091AA8(void) { s32 slot_checking = 0; s32 last_filled = 0; diff --git a/src/kangaskhan_storage_3.c b/src/kangaskhan_storage_3.c index 1c65da6..568e69f 100644 --- a/src/kangaskhan_storage_3.c +++ b/src/kangaskhan_storage_3.c @@ -159,7 +159,7 @@ void sub_80186F8(void) item.temp.full_bits = (item.temp.full_bits & 0xffff00ff) | (0x80 << 1); } gTeamInventory_203B460->teamStorage[item.temp.norm.itemIndex] -= item.temp.norm.numItems; - sub_8091274((struct HeldItem *)&item); + AddHeldItemToInventory((struct HeldItem *)&item); } } FillInventoryGaps(); @@ -218,7 +218,7 @@ void sub_8018854(void) itemsCast = (gUnknown_203B20C->unk8.numItems << 8); item.temp.full_bits = (item.temp.full_bits & 0xffff00ff) | itemsCast; - sub_8091274((struct HeldItem *)&item); + AddHeldItemToInventory((struct HeldItem *)&item); if(sub_801CF14(1) == 0) if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) { @@ -319,7 +319,7 @@ void sub_80189C8(void) itemsCast = (gUnknown_203B20C->unk8.numItems << 8); item.temp.full_bits = (item.temp.full_bits & 0xffff00ff) | itemsCast; - sub_8091274((struct HeldItem *)&item); + AddHeldItemToInventory((struct HeldItem *)&item); if(sub_801CF14(1) == 0) if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) { diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index cd5df5b..e504f81 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -99,12 +99,215 @@ extern void sub_8013984(u8 *); extern void sub_801A064(void); extern void sub_801A0D8(void); extern void AddMenuCursorSprite(void *); -extern s32 xxx_count_inv_unk230(); extern u8 sub_801A37C(void); extern u16 gUnknown_203B228; extern u16 gUnknown_203B22A; extern struct UnkTextStruct2 gUnknown_80DB95C; +extern void sub_801A010(void); +extern void sub_801A3DC(void); +extern void sub_801AD34(u32); +extern void PlaySound(u16 songIndex); + +extern void xxx_init_inv_unk250_at_8091A74(u8 index); +extern void xxx_fill_inv_unk250_gaps_8091AA8(void); + +u32 sub_8019D8C(void); + +void sub_8019730(void) +{ + s32 local_8; + + if (sub_80144A4(&local_8) != 0) { + return; + } + if (local_8 != 1) { + gUnknown_203B210->unk28 = local_8; + } + switch(local_8) { + case 2: + if (sub_8019D8C() == 0) { + UpdateKecleonStoreState(5); + } + else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) { + UpdateKecleonStoreState(0xA); + } + else { + UpdateKecleonStoreState(0xF); + } + break; + case 3: + if (GetNumberOfFilledInventorySlots() == 0) { + UpdateKecleonStoreState(9); + } + else if (gUnknown_203B210->unk14 == 0) { + UpdateKecleonStoreState(8); + } + else if (gTeamInventory_203B460->teamMoney < 99999) { + UpdateKecleonStoreState(0x17); + } + else + UpdateKecleonStoreState(7); + break; + case 4: + if (GetNumberOfFilledInventorySlots() == 0) + UpdateKecleonStoreState(9); + else if (gUnknown_203B210->unk14 == 0) + UpdateKecleonStoreState(8); + else if (gUnknown_203B210->unk18 + gTeamInventory_203B460->teamMoney > 99999) { + UpdateKecleonStoreState(7); + } + else + UpdateKecleonStoreState(0x1f); + break; + case 7: + UpdateKecleonStoreState(2); + break; + case 1: + UpdateKecleonStoreState(3); + break; + } +} + +void sub_8019850(void) +{ + s32 local_c; + + if (sub_80144A4(&local_c) == 0) { + switch(local_c) + { + case 5: + AddToTeamMoney(-gUnknown_203B210->itemSellPrice); + if (gUnknown_203B210->unk4 != '\0') { + AddHeldItemToInventory(xxx_get_inv_unk230_at_809185C(gUnknown_203B210->unk20)); + xxx_init_unk230_substruct(gUnknown_203B210->unk20); + xxx_fill_unk230_gaps(); + } + else { + AddHeldItemToInventory(xxx_get_unk250_at_8091A90(gUnknown_203B210->unk21)); + xxx_init_inv_unk250_at_8091A74(gUnknown_203B210->unk21); + xxx_fill_inv_unk250_gaps_8091AA8(); + } + PlaySound(0x14c); + UpdateKecleonStoreState(0x11); + break; + case 6: + case 1: + UpdateKecleonStoreState(0x10); + break; + } + } +} + +void sub_80198E8(void) +{ + s32 local_c; + + if (sub_80144A4(&local_c) == 0) { + switch(local_c) + { + case 5: + AddToTeamMoney(gUnknown_203B210->itemSellPrice); + ShiftItemsDownFrom(gUnknown_203B210->unk24); + PlaySound(0x14c); + UpdateKecleonStoreState(0x19); + break; + case 6: + case 1: + UpdateKecleonStoreState(0x18); + break; + } + } +} + +void sub_8019944(void) +{ + s32 slotIndex; + s32 local_10; + struct ItemSlot *itemSlot; + + if (sub_80144A4(&local_10) == 0) { + switch(local_10) + { + case 5: + for(slotIndex = 0; slotIndex < INVENTORY_SIZE; slotIndex++) + { + itemSlot = &gTeamInventory_203B460->teamItems[slotIndex]; + if ((itemSlot->itemFlags & ITEM_FLAG_EXISTS) && CanSellItem(itemSlot->itemIndex)) { + ClearItemSlotAt(slotIndex); + } + } + FillInventoryGaps(); + AddToTeamMoney(gUnknown_203B210->unk18); + PlaySound(0x14c); + UpdateKecleonStoreState(0x20); + break; + case 1: + case 6: + UpdateKecleonStoreState(1); + break; + } + } +} + +void sub_80199CC(void) +{ + u32 uVar2; + struct HeldItem *puVar3; + + if (gUnknown_203B210->unk4 != '\0') { + uVar2 = sub_8019EDC(1); + } + else { + uVar2 = sub_801A2A8(1); + } + + switch(uVar2) + { + case 3: + if (gUnknown_203B210->unk4) { + gUnknown_203B210->unk20 = sub_8019FB0(); + puVar3 = xxx_get_inv_unk230_at_809185C(gUnknown_203B210->unk20); + } + else { + gUnknown_203B210->unk21 = sub_801A37C(); + puVar3 = xxx_get_unk250_at_8091A90(gUnknown_203B210->unk21); + } + xxx_init_itemslot_8090A8C(&gUnknown_203B210->unk1C,puVar3->itemIndex,0); + gUnknown_203B210->unk1C.numItems =puVar3->numItems; + gUnknown_203B210->itemSellPrice = GetStackBuyPrice(&gUnknown_203B210->unk1C); + UpdateKecleonStoreState(0x14); + break; + case 4: + if (gUnknown_203B210->unk4) { + gUnknown_203B210->unk20 = sub_8019FB0(); + puVar3 = xxx_get_inv_unk230_at_809185C(gUnknown_203B210->unk20); + } + else { + gUnknown_203B210->unk21 = sub_801A37C(); + puVar3 = xxx_get_unk250_at_8091A90(gUnknown_203B210->unk21); + } + xxx_init_itemslot_8090A8C(&gUnknown_203B210->unk1C,puVar3->itemIndex,0); + gUnknown_203B210->unk1C.numItems = puVar3->numItems; + gUnknown_203B210->itemSellPrice = GetStackBuyPrice(&gUnknown_203B210->unk1C); + UpdateKecleonStoreState(0x15); + break; + case 2: + if (gUnknown_203B210->unk4) { + sub_801A010(); + } + else { + sub_801A3DC(); + } + UpdateKecleonStoreState(1); + break; + case 1: + sub_801AD34(0); + DrawTeamMoneyBox(1); + break; + } +} + void sub_8019B08(void) { switch(sub_801A6E8(1)) @@ -253,15 +456,15 @@ u32 sub_8019D8C(void) void sub_8019DAC(void) { s32 iVar3; - struct ItemSlot *pbVar4; + struct ItemSlot *itemSlot; s32 iVar5; gUnknown_203B210->unk14 = 0; gUnknown_203B210->unk18 = 0; for(iVar5 = 0; iVar5 < INVENTORY_SIZE; iVar5++){ - pbVar4 = &gTeamInventory_203B460->teamItems[iVar5]; - if (((pbVar4->itemFlags & ITEM_FLAG_EXISTS) != 0) && (CanSellItem(pbVar4->itemIndex))) { - iVar3 = GetStackSellPrice(pbVar4); + itemSlot = &gTeamInventory_203B460->teamItems[iVar5]; + if (((itemSlot->itemFlags & ITEM_FLAG_EXISTS) != 0) && (CanSellItem(itemSlot->itemIndex))) { + iVar3 = GetStackSellPrice(itemSlot); gUnknown_203B210->unk18 += iVar3; gUnknown_203B210->unk14++; } diff --git a/src/luminous_cave.c b/src/luminous_cave.c index 2b5afa3..fa78f06 100644 --- a/src/luminous_cave.c +++ b/src/luminous_cave.c @@ -97,7 +97,6 @@ extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u16 *, u32, u32, struct OpenedFile **r5, u32); void xxx_call_fade_out_bgm(u16 speed); void sub_801199C(u16 songIndex); -void ClearItemSlotAt(u32 index); void xxx_call_fade_in_new_bgm(u16 songIndex, u16 speed); void sub_80977D0(void); void PlaySound(u32); diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 68c894b..1a38475 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -685,7 +685,7 @@ s32 SaveRecruitedPokemon(u8 *a1, s32 a2) if (pokemon->unk0 & 2) { buffer[count++] = i; } - if (pokemon->unk2) { + if (pokemon->isLeader) { data_s16 = i; } } @@ -745,7 +745,7 @@ s32 RestoreRecruitedPokemon(u8 *a1, s32 a2) } RestoreIntegerBits(&backup, &data_s16, 16); if ((u16)data_s16 < NUM_SPECIES) { - gRecruitedPokemonRef->pokemon[data_s16].unk2 = 1; + gRecruitedPokemonRef->pokemon[data_s16].isLeader = 1; } nullsub_102(&backup); return backup.unk8; @@ -776,7 +776,7 @@ void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* po { memset(pokemon, 0, sizeof(struct PokemonStruct)); pokemon->unk0 = 0; - pokemon->unk2 = 0; + pokemon->isLeader = 0; RestoreIntegerBits(a1, &pokemon->unkHasNextStage, 7); if (pokemon->unkHasNextStage) { pokemon->unk0 |= 1; @@ -814,7 +814,7 @@ s32 SavePokemonStruct2(u8* a1, s32 size) struct PokemonStruct2* pokemon2 = &gRecruitedPokemonRef->pokemon2[i]; SaveIntegerBits(&backup, &pokemon2->unk0, 2); - SaveIntegerBits(&backup, pokemon2->unk2 ? &data_u8_neg1 : &data_u8_zero, 1); + SaveIntegerBits(&backup, pokemon2->isLeader ? &data_u8_neg1 : &data_u8_zero, 1); SaveIntegerBits(&backup, &pokemon2->unkHasNextStage, 7); xxx_save_poke_sub_4_80902F4(&backup, &pokemon2->unk4); @@ -858,10 +858,10 @@ s32 RestorePokemonStruct2(u8* a1, s32 size) RestoreIntegerBits(&backup, &unk2, 1); if (unk2 & 1) { - pokemon2->unk2 = TRUE; + pokemon2->isLeader = TRUE; } else { - pokemon2->unk2 = FALSE; + pokemon2->isLeader = FALSE; } RestoreIntegerBits(&backup, &pokemon2->unkHasNextStage, 7); diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index d57e8a2..11e387e 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -529,7 +529,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po a1->IQSkills = pokemon->IQSkills; sub_808E6F4(&a1->unk54); a1->unk4 = pokemon->unk4; - a1->unk2 = pokemon->unk2; + a1->isLeader = pokemon->isLeader; a1->unkA = a3; a1->speciesNum = pokemon->speciesNum; a1->unk50 = pokemon->unk24; @@ -582,7 +582,7 @@ void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct pokemon->IQ = a2->IQ; pokemon->IQSkills = a2->IQSkills; pokemon->unk4 = a2->unk4; - pokemon->unk2 = a2->unk2; + pokemon->isLeader = a2->isLeader; pokemon->speciesNum = a2->speciesNum; pokemon->unk24 = a2->unk50; pokemon->pokeHP = a2->unk12; diff --git a/src/post_office_guide.c b/src/post_office_guide.c index 929c2e1..f009895 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -166,7 +166,7 @@ extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32 extern u32 sub_8012A64(struct UnkInputStruct**, u32); extern void PlayMenuSoundEffect(u32); extern void sub_8031A84(); -extern void sub_8031AE8(); +extern void DisplayMissionObjectives(); extern u8 gUnknown_202E5D8[]; extern u8 gAvailablePokemonNames[]; @@ -535,7 +535,7 @@ u32 sub_80319F8(void) void sub_8031A2C(void) { sub_8031A84(); - sub_8031AE8(); + DisplayMissionObjectives(); } void sub_8031A3C(void) -- cgit v1.2.3 From 46420815f4fd1f374ee48ee447bb42539e1a669c Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Sun, 13 Mar 2022 17:58:45 -0700 Subject: code cleanup --- src/kecleon_items_1.c | 51 +++++++++++++++++---------------------------------- 1 file changed, 17 insertions(+), 34 deletions(-) diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index e504f81..c3e90b6 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -118,34 +118,26 @@ void sub_8019730(void) { s32 local_8; - if (sub_80144A4(&local_8) != 0) { + if (sub_80144A4(&local_8) != 0) return; - } - if (local_8 != 1) { + if (local_8 != 1) gUnknown_203B210->unk28 = local_8; - } switch(local_8) { case 2: - if (sub_8019D8C() == 0) { + if (sub_8019D8C() == 0) UpdateKecleonStoreState(5); - } - else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) { + else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) UpdateKecleonStoreState(0xA); - } - else { + else UpdateKecleonStoreState(0xF); - } break; case 3: - if (GetNumberOfFilledInventorySlots() == 0) { + if (GetNumberOfFilledInventorySlots() == 0) UpdateKecleonStoreState(9); - } - else if (gUnknown_203B210->unk14 == 0) { + else if (gUnknown_203B210->unk14 == 0) UpdateKecleonStoreState(8); - } - else if (gTeamInventory_203B460->teamMoney < 99999) { + else if (gTeamInventory_203B460->teamMoney < 99999) UpdateKecleonStoreState(0x17); - } else UpdateKecleonStoreState(7); break; @@ -154,9 +146,8 @@ void sub_8019730(void) UpdateKecleonStoreState(9); else if (gUnknown_203B210->unk14 == 0) UpdateKecleonStoreState(8); - else if (gUnknown_203B210->unk18 + gTeamInventory_203B460->teamMoney > 99999) { + else if (gUnknown_203B210->unk18 + gTeamInventory_203B460->teamMoney > 99999) UpdateKecleonStoreState(7); - } else UpdateKecleonStoreState(0x1f); break; @@ -293,12 +284,10 @@ void sub_80199CC(void) UpdateKecleonStoreState(0x15); break; case 2: - if (gUnknown_203B210->unk4) { + if (gUnknown_203B210->unk4) sub_801A010(); - } - else { + else sub_801A3DC(); - } UpdateKecleonStoreState(1); break; case 1: @@ -354,15 +343,12 @@ void sub_8019BBC(void) } switch(menuAction){ case 2: - if (gTeamInventory_203B460->teamMoney == 0) { + if (gTeamInventory_203B460->teamMoney == 0) UpdateKecleonStoreState(0x6); - } - else if (gUnknown_203B210->itemSellPrice > gTeamInventory_203B460->teamMoney) { + else if (gUnknown_203B210->itemSellPrice > gTeamInventory_203B460->teamMoney) UpdateKecleonStoreState(0xC); - } - else { + else UpdateKecleonStoreState(0x16); - } break; case 7: UpdateKecleonStoreState(0x15); @@ -385,15 +371,12 @@ void sub_8019C78(void) switch(menuAction){ case 3: sub_8099690(0); - if (!CanSellItem(gUnknown_203B210->unk1C.itemIndex)) { + if (!CanSellItem(gUnknown_203B210->unk1C.itemIndex)) UpdateKecleonStoreState(0xd); - } - else if (gUnknown_203B210->itemSellPrice + gTeamInventory_203B460->teamMoney > 99999) { + else if (gUnknown_203B210->itemSellPrice + gTeamInventory_203B460->teamMoney > 99999) UpdateKecleonStoreState(0xe); - } - else { + else UpdateKecleonStoreState(0x1e); - } break; case 7: sub_8099690(0); -- cgit v1.2.3 From 57f540b320ae8439fe4b42c6149641b877c7ea73 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 21 Mar 2022 17:48:40 -0700 Subject: fix a few nonmatchings and code cleanup --- asm/code_808417C.s | 8 +- asm/code_80958E8.s | 14 +- asm/wonder_mail_2.s | 10 +- asm/wonder_mail_3.s | 2 +- asm/wonder_mail_5.s | 312 --------------------------------------- include/code_8094F88.h | 2 +- include/global.h | 5 + include/pokemon.h | 9 +- include/sub_8095228.h | 17 ++- ld_script.txt | 1 - src/adventure_log.c | 34 ++--- src/code_8095824.c | 12 +- src/code_80972F4.c | 16 +- src/code_8097670.c | 6 +- src/code_8097DD0.c | 10 +- src/code_80A26CC.c | 2 +- src/dungeon_2.c | 12 +- src/friend_rescue_1.c | 22 +-- src/music_pre.c | 349 +++++++++----------------------------------- src/pokemon_3.c | 12 +- src/post_office_guide.c | 125 +++++++++++++++- src/rescue_password_menu.c | 2 +- src/thank_you_wonder_mail.c | 8 +- src/wonder_mail.c | 12 +- src/wonder_mail_2.c | 6 +- src/wonder_mail_3.c | 4 +- src/wonder_mail_802DF88.c | 41 +++--- 27 files changed, 323 insertions(+), 730 deletions(-) delete mode 100644 asm/wonder_mail_5.s diff --git a/asm/code_808417C.s b/asm/code_808417C.s index 03b4f3b..05c90be 100644 --- a/asm/code_808417C.s +++ b/asm/code_808417C.s @@ -213,7 +213,7 @@ sub_80842F0: _08084320: lsls r0, r6, 24 lsrs r0, 24 - bl sub_8096AB4 + bl GetJobSlotInfo adds r4, r0, 0 ldrb r0, [r4] cmp r0, 0x6 @@ -300,7 +300,7 @@ sub_80843BC: _080843C6: lsls r0, r4, 24 lsrs r0, 24 - bl sub_8096AB4 + bl GetJobSlotInfo adds r3, r0, 0 ldrb r0, [r3] cmp r0, 0x6 @@ -353,7 +353,7 @@ sub_8084424: _08084428: lsls r0, r4, 24 lsrs r0, 24 - bl sub_8096AB4 + bl GetJobSlotInfo adds r1, r0, 0 ldrb r0, [r1] cmp r0, 0x8 @@ -760,7 +760,7 @@ sub_8084778: _08084784: lsls r0, r4, 24 lsrs r0, 24 - bl sub_8096AB4 + bl GetJobSlotInfo adds r1, r0, 0 ldrb r0, [r1] cmp r0, 0x6 diff --git a/asm/code_80958E8.s b/asm/code_80958E8.s index e326783..904f41c 100644 --- a/asm/code_80958E8.s +++ b/asm/code_80958E8.s @@ -2019,7 +2019,7 @@ sub_80969D0: _080969DA: lsls r0, r4, 24 lsrs r0, 24 - bl sub_8096AB4 + bl GetJobSlotInfo adds r1, r0, 0 ldrb r0, [r1, 0x4] cmp r0, r6 @@ -2054,7 +2054,7 @@ sub_8096A08: _08096A14: lsls r0, r4, 24 lsrs r0, 24 - bl sub_8096AB4 + bl GetJobSlotInfo adds r2, r0, 0 ldrb r0, [r2, 0x4] cmp r0, r5 @@ -2139,8 +2139,8 @@ _08096AAE: bx r1 thumb_func_end sub_8096A78 - thumb_func_start sub_8096AB4 -sub_8096AB4: + thumb_func_start GetJobSlotInfo +GetJobSlotInfo: lsls r0, 24 lsrs r0, 24 ldr r2, _08096AC8 @@ -2153,7 +2153,7 @@ sub_8096AB4: bx lr .align 2, 0 _08096AC8: .4byte gUnknown_203B490 - thumb_func_end sub_8096AB4 + thumb_func_end GetJobSlotInfo thumb_func_start IsJobSlotEmpty IsJobSlotEmpty: @@ -2191,7 +2191,7 @@ sub_8096AF8: lsrs r0, 24 lsls r4, 24 lsrs r4, 24 - bl sub_8096AB4 + bl GetJobSlotInfo adds r3, r0, 0 movs r1, 0 strb r1, [r5] @@ -2275,7 +2275,7 @@ sub_8096B98: _08096BA0: lsls r0, r4, 24 lsrs r0, 24 - bl sub_8096AB4 + bl GetJobSlotInfo adds r1, r0, 0 ldrb r0, [r1] cmp r0, 0x6 diff --git a/asm/wonder_mail_2.s b/asm/wonder_mail_2.s index 19e314f..96e0130 100644 --- a/asm/wonder_mail_2.s +++ b/asm/wonder_mail_2.s @@ -1098,7 +1098,7 @@ _0802C7B4: adds r0, r5 adds r1, r0 ldrb r0, [r1] - bl sub_8096AB4 + bl GetJobSlotInfo adds r4, r0, 0 ldr r0, [r6] ldr r1, [r0, 0x3C] @@ -1459,7 +1459,7 @@ _0802CA7C: .4byte gUnknown_203B2F0 _0802CA80: ldr r0, [r4] ldrb r0, [r0, 0xC] - bl sub_8096AB4 + bl GetJobSlotInfo ldr r1, [r4] adds r1, 0x10 bl sub_803B35C @@ -1482,7 +1482,7 @@ sub_802CAA4: ldr r5, _0802CAC8 ldr r0, [r5] ldrb r0, [r0, 0xC] - bl sub_8096AB4 + bl GetJobSlotInfo adds r4, r0, 0 ldr r2, [r5] ldr r0, [r2] @@ -1759,7 +1759,7 @@ _0802CCD8: ldr r0, _0802CCF0 ldr r0, [r0] ldrb r0, [r0, 0xC] - bl sub_8096AB4 + bl GetJobSlotInfo movs r1, 0x6 b _0802CD06 .align 2, 0 @@ -1771,7 +1771,7 @@ _0802CCF4: ldr r0, _0802CD14 ldr r0, [r0] ldrb r0, [r0, 0xC] - bl sub_8096AB4 + bl GetJobSlotInfo movs r1, 0x5 _0802CD06: strb r1, [r0] diff --git a/asm/wonder_mail_3.s b/asm/wonder_mail_3.s index 043c1e7..0f14aa9 100644 --- a/asm/wonder_mail_3.s +++ b/asm/wonder_mail_3.s @@ -662,7 +662,7 @@ sub_802DAA8: ldr r4, _0802DAD0 ldr r0, [r4] ldrb r0, [r0, 0x10] - bl sub_8096AB4 + bl GetJobSlotInfo adds r1, r0, 0 ldr r4, [r4] ldrb r0, [r4, 0x9] diff --git a/asm/wonder_mail_5.s b/asm/wonder_mail_5.s deleted file mode 100644 index 86b83e0..0000000 --- a/asm/wonder_mail_5.s +++ /dev/null @@ -1,312 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start DisplayMissionObjectives -DisplayMissionObjectives: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xDC - ldr r7, _08031B24 - ldr r0, [r7] - ldr r0, [r0, 0x10] - bl sub_80073B8 - ldr r2, _08031B28 - ldr r0, [r7] - ldr r3, [r0, 0x10] - movs r6, 0 - str r6, [sp] - movs r0, 0xA - movs r1, 0 - bl xxx_call_draw_string - ldr r1, [r7] - ldrb r0, [r1, 0xC] - cmp r0, 0x1 - beq _08031B2C - cmp r0, 0x1 - bgt _08031B1E - b _08031CD4 -_08031B1E: - cmp r0, 0x2 - beq _08031B94 - b _08031CD4 - .align 2, 0 -_08031B24: .4byte gUnknown_203B330 -_08031B28: .4byte gUnknown_80E1F30 -_08031B2C: - add r4, sp, 0x68 - adds r0, r4, 0 - bl sub_8099394 - ldrb r0, [r4] - bl sub_8095228 - adds r5, r0, 0 - ldr r0, [r7] - ldr r3, [r0, 0x10] - movs r0, 0xA - movs r1, 0x10 - movs r2, 0x3 - bl sub_803B6B0 - ldr r1, _08031B8C - ldrb r2, [r5, 0x5] - add r0, sp, 0x4 - bl sprintf_2 - ldr r0, [r7] - ldr r3, [r0, 0x10] - str r6, [sp] - movs r0, 0x15 - movs r1, 0x10 - add r2, sp, 0x4 - bl xxx_call_draw_string - ldr r4, _08031B90 - movs r1, 0xC - ldrsh r0, [r5, r1] - bl GetMonSpecies - adds r2, r0, 0 - add r0, sp, 0x4 - adds r1, r4, 0 - bl sprintf_2 - ldr r0, [r7] - ldr r3, [r0, 0x10] - str r6, [sp] - movs r0, 0x28 - movs r1, 0x10 - add r2, sp, 0x4 - bl xxx_call_draw_string - b _08031D4E - .align 2, 0 -_08031B8C: .4byte gUnknown_80E1F3C -_08031B90: .4byte gUnknown_80E1F40 -_08031B94: - ldrb r0, [r1, 0xD] - bl sub_80969D0 - adds r1, r0, 0 - cmp r1, 0 - bne _08031BB0 - ldr r2, _08031BAC - ldr r0, [r7] - ldr r3, [r0, 0x10] - str r1, [sp] - b _08031D2C - .align 2, 0 -_08031BAC: .4byte gUnknown_80E1F54 -_08031BB0: - movs r6, 0x10 - movs r2, 0 - mov r10, r2 - mov r8, r2 - ldr r0, _08031C28 - mov r9, r0 - mov r1, sp - adds r1, 0x6C - str r1, [sp, 0xD8] -_08031BC2: - mov r2, r10 - lsls r0, r2, 24 - lsrs r0, 24 - bl sub_8096AB4 - adds r4, r0, 0 - ldr r1, [r7] - ldrb r0, [r4, 0x4] - ldrb r2, [r1, 0xD] - cmp r0, r2 - bne _08031CC2 - ldrb r0, [r4] - cmp r0, 0 - beq _08031CC2 - cmp r0, 0x5 - beq _08031CC2 - cmp r0, 0x7 - beq _08031CC2 - ldr r3, [r1, 0x10] - movs r0, 0xA - adds r1, r6, 0 - movs r2, 0x3 - bl sub_803B6B0 - ldrb r0, [r4, 0x1] - add r5, sp, 0x6C - cmp r0, 0x3 - beq _08031C16 - ldrb r2, [r4, 0x5] - ldr r0, [sp, 0xD8] - ldr r1, _08031C2C - bl sprintf_2 - ldr r0, [r7] - ldr r3, [r0, 0x10] - mov r0, r8 - str r0, [sp] - movs r0, 0x15 - adds r1, r6, 0 - ldr r2, [sp, 0xD8] - bl xxx_call_draw_string -_08031C16: - ldrb r0, [r4, 0x1] - cmp r0, 0x3 - beq _08031C58 - cmp r0, 0x3 - bgt _08031C30 - cmp r0, 0x2 - beq _08031C70 - b _08031C9C - .align 2, 0 -_08031C28: .4byte gUnknown_202DE58 -_08031C2C: .4byte gUnknown_80E1F3C -_08031C30: - cmp r0, 0x4 - bne _08031C9C - ldrb r1, [r4, 0x10] - mov r0, r9 - movs r2, 0 - bl sub_8090DC4 - adds r0, r5, 0 - ldr r1, _08031C54 - mov r2, r9 - bl sprintf_2 - ldr r0, [r7] - ldr r3, [r0, 0x10] - mov r1, r8 - str r1, [sp] - b _08031C8A - .align 2, 0 -_08031C54: .4byte gUnknown_80E1F60 -_08031C58: - ldrb r1, [r4, 0x10] - mov r0, r9 - movs r2, 0 - bl sub_8090DC4 - adds r0, r5, 0 - ldr r1, _08031C6C - mov r2, r9 - b _08031C7E - .align 2, 0 -_08031C6C: .4byte gUnknown_80E1F70 -_08031C70: - movs r1, 0xE - ldrsh r0, [r4, r1] - bl GetMonSpecies - adds r2, r0, 0 - adds r0, r5, 0 - ldr r1, _08031C98 -_08031C7E: - bl sprintf_2 - ldr r0, [r7] - ldr r3, [r0, 0x10] - mov r2, r8 - str r2, [sp] -_08031C8A: - movs r0, 0x28 - adds r1, r6, 0 - adds r2, r5, 0 - bl xxx_call_draw_string - b _08031CC0 - .align 2, 0 -_08031C98: .4byte gUnknown_80E1F80 -_08031C9C: - movs r1, 0xE - ldrsh r0, [r4, r1] - bl GetMonSpecies - adds r2, r0, 0 - adds r0, r5, 0 - ldr r1, _08031CD0 - bl sprintf_2 - ldr r0, [r7] - ldr r3, [r0, 0x10] - mov r2, r8 - str r2, [sp] - movs r0, 0x28 - adds r1, r6, 0 - adds r2, r5, 0 - bl xxx_call_draw_string -_08031CC0: - adds r6, 0xC -_08031CC2: - movs r0, 0x1 - add r10, r0 - mov r1, r10 - cmp r1, 0x7 - bgt _08031CCE - b _08031BC2 -_08031CCE: - b _08031D4E - .align 2, 0 -_08031CD0: .4byte gUnknown_80E1F40 -_08031CD4: - add r0, sp, 0xD0 - mov r4, sp - adds r4, 0xD2 - adds r1, r4, 0 - bl sub_80992E0 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _08031D04 - movs r2, 0 - ldrsh r0, [r4, r2] - bl GetCurrentMissionText - adds r2, r0, 0 - ldr r0, _08031D00 - ldr r0, [r0] - ldr r3, [r0, 0x10] - movs r0, 0 - str r0, [sp] - b _08031D2C - .align 2, 0 -_08031D00: .4byte gUnknown_203B330 -_08031D04: - add r4, sp, 0xD4 - adds r0, r4, 0 - bl sub_8099360 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _08031D3C - ldrb r0, [r4] - bl sub_80A2688 - lsls r0, 16 - asrs r0, 16 - bl sub_80975DC - adds r2, r0, 0 - ldr r0, _08031D38 - ldr r0, [r0] - ldr r3, [r0, 0x10] - str r5, [sp] -_08031D2C: - movs r0, 0xA - movs r1, 0x10 - bl xxx_call_draw_string - b _08031D4E - .align 2, 0 -_08031D38: .4byte gUnknown_203B330 -_08031D3C: - ldr r2, _08031D68 - ldr r0, _08031D6C - ldr r0, [r0] - ldr r3, [r0, 0x10] - str r1, [sp] - movs r0, 0xA - movs r1, 0x10 - bl xxx_call_draw_string -_08031D4E: - ldr r0, _08031D6C - ldr r0, [r0] - ldr r0, [r0, 0x10] - bl sub_80073E0 - add sp, 0xDC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08031D68: .4byte gUnknown_80E1F94 -_08031D6C: .4byte gUnknown_203B330 - thumb_func_end DisplayMissionObjectives - - .align 2,0 diff --git a/include/code_8094F88.h b/include/code_8094F88.h index 32ef7a5..9af6c7a 100644 --- a/include/code_8094F88.h +++ b/include/code_8094F88.h @@ -4,7 +4,7 @@ struct unkStruct_203B480 { u8 unk0; - struct unkPokeSubStruct_4 unk4; + struct DungeonLocation unk4; u32 unk8; u32 unkC; u32 unk10; diff --git a/include/global.h b/include/global.h index 81388a8..5c71009 100644 --- a/include/global.h +++ b/include/global.h @@ -32,4 +32,9 @@ #define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0])) +struct DungeonLocation { + u8 dungeonIndex; + u8 dungeonFloor; +}; + #endif // GUARD_GLOBAL_H diff --git a/include/pokemon.h b/include/pokemon.h index c50dc75..6b514c8 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -19,11 +19,6 @@ struct Offense { u8 def[2]; }; -struct unkPokeSubStruct_4 { - u8 dungeonIndex; - u8 dungeonFloor; -}; - struct unkPokeSubStruct_C { u8 unk0; @@ -36,7 +31,7 @@ struct PokemonStruct /* 0x0 */ u16 unk0; // recruited?? /* 0x1 */ bool8 isLeader; /* 0x3 */ u8 unkHasNextStage; // set to a random value? - /* 0x4 */ struct unkPokeSubStruct_4 unk4; + /* 0x4 */ struct DungeonLocation unk4; /* 0x8 */ s16 speciesNum; // species # /* 0xC */ struct unkPokeSubStruct_C unkC[2]; /* 0x14 */ s16 IQ; @@ -77,7 +72,7 @@ struct PokemonStruct2 u16 unk0; // corresponds to unk0 inPokemonStruct bool8 isLeader; // unk2 u8 unkHasNextStage; // unk3 - struct unkPokeSubStruct_4 unk4; // unk4 + struct DungeonLocation unk4; // unk4 u16 IQ; // IQ (other offset) u16 unkA; u16 unkC; diff --git a/include/sub_8095228.h b/include/sub_8095228.h index 3fd5993..9541d20 100644 --- a/include/sub_8095228.h +++ b/include/sub_8095228.h @@ -3,13 +3,16 @@ struct unkStruct_8095228 { - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; - u8 unk4; - u8 padding[0x10 - 0x5]; - u32 unk10; + /* 0x0 */ u8 mailType; // mail type + /* 0x1 */ u8 missionType; // mission type + /* 0x2 */ u8 unk2; + /* 0x3 */ u8 unk3; + /* 0x4 */ u8 dungeon; // dungeon + /* 0x5 */ u8 floor; // floor + /* 0x8 */ u32 unk8; + /* 0xC */ s16 clientSpecies; // client pokemon + /* 0xE */ s16 targetSpecies; // target + u32 unk10; // TODO: verify that this is just a union of the 4 bytes in Wonder Mail u8 padding2[0x20 - 0x14]; struct ItemSlot unk20; u8 padding3[0x28 - 0x24]; diff --git a/ld_script.txt b/ld_script.txt index 13ffffd..87983a0 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -143,7 +143,6 @@ SECTIONS { src/wonder_mail_4.o(.text); asm/wonder_mail_4.o(.text); src/post_office_guide.o(.text); - asm/wonder_mail_5.o(.text); asm/code_8031D70.o(.text); src/adventure_log.o(.text); src/friend_rescue.o(.text); diff --git a/src/adventure_log.c b/src/adventure_log.c index 9480361..bf0424b 100644 --- a/src/adventure_log.c +++ b/src/adventure_log.c @@ -202,29 +202,30 @@ void sub_8032084(void) } #endif -// Uses 1 too many regs +// Mostly matches except around the switch #ifdef NONMATCHING void DisplayAdventureLog(void) { s32 counter; - s32 iVar5; - u32 uVar6; + s32 r4; // r4 + s32 r6; // r6 u8 temp; sub_8008C54(gAdventureLog->unk34); sub_80073B8(gAdventureLog->unk34); - iVar5 = gAdventureLog->currPage * 8; - iVar5 += 10; + r4 = gAdventureLog->currPage * 8; + r6 = r4; + r6 += 10; // Draw Header - xxx_call_draw_string(iVar5, 0, gAdventureLogHeaderText, gAdventureLog->unk34, 0); - iVar5 += 4; - iVar5 += gAdventureLog->unk9E * 8; + xxx_call_draw_string(r6, 0, gAdventureLogHeaderText, gAdventureLog->unk34, 0); + r4 += 4; + r6 = r4 + gAdventureLog->unk9E * 8; // Draw Page # - sub_8012BC4(iVar5, 0, gAdventureLog->currPage + 1, 1, 7, gAdventureLog->unk34); - counter = 0; - do { - uVar6 = gAdventureLog->currPage * gAdventureLog->unk1C + counter; - temp = uVar6; // Having another var in middle gets close (does a u8 cast) + sub_8012BC4(r6, 0, gAdventureLog->currPage + 1, 1, 7, gAdventureLog->unk34); + + for(counter = 0; counter < gAdventureLog->unk1A; counter++) + { + temp = gAdventureLog->currPage * gAdventureLog->unk1C + counter; if(sub_8097710(temp)){ switch(temp) { case 0xc: @@ -248,16 +249,15 @@ void DisplayAdventureLog(void) default: break; } - xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(uVar6), gAdventureLog->unk34, 0); + xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0); } else { // Draw the ?????????? across the row xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), gUnknown_80E2030, gAdventureLog->unk34, 0); } - counter++; - } while(counter < gAdventureLog->unk1A); - sub_80073E0(gAdventureLog->unk34); + } + sub_80073E0(gAdventureLog->unk34); } #else NAKED diff --git a/src/code_8095824.c b/src/code_8095824.c index 8792545..938b47f 100644 --- a/src/code_8095824.c +++ b/src/code_8095824.c @@ -6,8 +6,8 @@ extern struct unkStruct_203B484 *gUnknown_203B484; extern struct unkStruct_203B480 *gUnknown_203B480; extern struct unkStruct_203B48C *gUnknown_203B48C; -extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); -extern void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); +extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); extern void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC); extern void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924*, struct unkPokeSubStruct_C*); extern void SavePokemonMoves(struct unkStruct_8094924 *r0, struct PokemonMove *moveSet); @@ -42,7 +42,7 @@ u32 sub_80954CC(u8 *a, u32 b) RestoreIntegerBits(&backup, &temp->unk0, 2); RestoreIntegerBits(&backup, &temp->isLeader, 1); RestoreIntegerBits(&backup, &temp->unkHasNextStage, 7); - xxx_restore_poke_sub_4_8090314(&backup, &temp->unk4); + RestoreDungeonLocation(&backup, &temp->unk4); RestoreIntegerBits(&backup, &temp->speciesNum, 9); xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[0]); xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[1]); @@ -84,7 +84,7 @@ u32 sub_8095624(u8 *a, u32 b) SaveIntegerBits(&backup, &temp->unk0, 2); SaveIntegerBits(&backup, &temp->isLeader, 1); SaveIntegerBits(&backup, &temp->unkHasNextStage, 7); - xxx_save_poke_sub_4_80902F4(&backup, &temp->unk4); + SaveDungeonLocation(&backup, &temp->unk4); SaveIntegerBits(&backup, &temp->speciesNum, 9); xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[0]); xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[1]); @@ -115,7 +115,7 @@ void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) u8 temp; RestoreIntegerBits(a, &b->unk0, 4); - xxx_restore_poke_sub_4_8090314(a, &b->unk4); + RestoreDungeonLocation(a, &b->unk4); RestoreIntegerBits(a, &b->unk8, 0x18); RestoreIntegerBits(a, &b->unkC, 0x9); RestoreIntegerBits(a, &b->unk10, 0x20); @@ -140,7 +140,7 @@ void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b) zero = 0; SaveIntegerBits(a, &b->unk0, 4); - xxx_save_poke_sub_4_80902F4(a, &b->unk4); + SaveDungeonLocation(a, &b->unk4); SaveIntegerBits(a, &b->unk8, 0x18); SaveIntegerBits(a, &b->unkC, 0x9); SaveIntegerBits(a, &b->unk10, 0x20); diff --git a/src/code_80972F4.c b/src/code_80972F4.c index c0fa1a3..1c7e125 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -2,8 +2,8 @@ #include "pokemon.h" #include "wonder_mail.h" -extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); -extern void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); +extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); extern void sub_80015C0(u32, u32); struct unkStruct_8097270 @@ -11,7 +11,7 @@ struct unkStruct_8097270 u8 unk0; u8 unk1; u8 unk2; - struct unkPokeSubStruct_4 unk4; + struct DungeonLocation unk4; u32 unk8; u16 unkC; u16 unkE; @@ -24,7 +24,7 @@ struct unkStruct_8097270 struct subStruct_203B490 { // size: 0xC - struct unkPokeSubStruct_4 unk0; + struct DungeonLocation unk0; u32 unk4; u32 unk8; }; @@ -109,7 +109,7 @@ u32 sub_8096FA0(u8 *r0, u32 size) { RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); - xxx_restore_poke_sub_4_8090314(&backup, &gUnknown_203B490->unk230[index].unk0); + RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].unk0); } nullsub_102(&backup); return backup.unk8; @@ -153,7 +153,7 @@ u32 sub_80970D8(u8 *r0, u32 size) { SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20); SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18); - xxx_save_poke_sub_4_80902F4(&backup, &gUnknown_203B490->unk230[index].unk0); + SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].unk0); } nullsub_102(&backup); return backup.unk8; @@ -171,7 +171,7 @@ void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b) RestoreIntegerBits(a, &b->unk12, 8); RestoreIntegerBits(a, &b->unk13, 6); RestoreIntegerBits(a, &b->unk8, 0x18); - xxx_restore_poke_sub_4_8090314(a, &b->unk4); + RestoreDungeonLocation(a, &b->unk4); } void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b) @@ -186,7 +186,7 @@ void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b) SaveIntegerBits(a, &b->unk12, 8); SaveIntegerBits(a, &b->unk13, 6); SaveIntegerBits(a, &b->unk8, 0x18); - xxx_save_poke_sub_4_80902F4(a, &b->unk4); + SaveDungeonLocation(a, &b->unk4); } void sub_80972F4(void) diff --git a/src/code_8097670.c b/src/code_8097670.c index a918ac9..e2b3723 100644 --- a/src/code_8097670.c +++ b/src/code_8097670.c @@ -8,7 +8,7 @@ struct unkStruct_203B494 s32 numAdventures; s32 unk8; s32 unkC; - struct unkPokeSubStruct_4 dungeonLocation; + struct DungeonLocation dungeonLocation; s16 unk14; s16 unk16; s16 unk18; @@ -33,13 +33,13 @@ struct unkStruct_203B494 *sub_8097680(void) return &gUnknown_2039778; } -void SetDungeonLocationInfo(struct unkPokeSubStruct_4 *r0) +void SetDungeonLocationInfo(struct DungeonLocation *r0) { gUnknown_203B494->dungeonLocation.dungeonIndex = r0->dungeonIndex; gUnknown_203B494->dungeonLocation.dungeonFloor = r0->dungeonFloor; } -struct unkPokeSubStruct_4 *GetDungeonLocationInfo(void) +struct DungeonLocation *GetDungeonLocationInfo(void) { return &gUnknown_203B494->dungeonLocation; } diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c index e5d4966..abbb02e 100644 --- a/src/code_8097DD0.c +++ b/src/code_8097DD0.c @@ -9,7 +9,7 @@ struct unkStruct_203B494 s32 numAdventures; s32 unk8; s32 unkC; - struct unkPokeSubStruct_4 dungeonLocation; + struct DungeonLocation dungeonLocation; s16 unk14; s16 unk16; s16 unk18; @@ -21,8 +21,8 @@ struct unkStruct_203B494 extern struct unkStruct_203B494 *gUnknown_203B494; -extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); -extern void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); +extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); void ReadExclusivePokemon(struct unkStruct_8094924 *r0); void ReadGameOptions(struct unkStruct_8094924 *param_1); void ReadPlayTime(struct unkStruct_8094924 *r0); @@ -46,7 +46,7 @@ void sub_8097C18(struct unkStruct_8094924 *r0) SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); - xxx_save_poke_sub_4_80902F4(r0, &gUnknown_203B494->dungeonLocation); + SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); } void sub_8097CC0(struct unkStruct_8094924 *r0) @@ -62,7 +62,7 @@ void sub_8097CC0(struct unkStruct_8094924 *r0) RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1); RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1); RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1); - xxx_restore_poke_sub_4_8090314(r0, &gUnknown_203B494->dungeonLocation); + RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation); } u32 sub_8097D60(u8 *r0, u32 size) diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c index bc5f60e..b18cf5f 100644 --- a/src/code_80A26CC.c +++ b/src/code_80A26CC.c @@ -61,7 +61,7 @@ s32 sub_80A2668(u32 r0) } } -u32 sub_80A2688(u8 r0, u32 r1) +u32 sub_80A2688(u8 r0) { u32 uVar1; diff --git a/src/dungeon_2.c b/src/dungeon_2.c index 18b6fe5..282ac99 100644 --- a/src/dungeon_2.c +++ b/src/dungeon_2.c @@ -11,7 +11,7 @@ extern const char gUnknown_8108F2C[]; extern u8 gUnknown_81077A8[]; extern u8 gUnknown_81077E8[]; -void sub_80901D8(struct unkPokeSubStruct_4 *param_1,struct unkPokeSubStruct_4 *param_2) +void sub_80901D8(struct DungeonLocation *param_1,struct DungeonLocation *param_2) { if ((u8)(param_2->dungeonIndex - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE) { param_1->dungeonIndex = DUNGEON_NORMAL_MAZE; @@ -22,12 +22,12 @@ void sub_80901D8(struct unkPokeSubStruct_4 *param_1,struct unkPokeSubStruct_4 *p } } -void PrintYellowDungeonNametoBuffer(u8 *buffer, struct unkPokeSubStruct_4 *dungeonLocation) +void PrintYellowDungeonNametoBuffer(u8 *buffer, struct DungeonLocation *dungeonLocation) { sprintf_2(buffer, gUnknown_8108F10, gDungeonNames[dungeonLocation->dungeonIndex].name1); // {COLOR_2 YELLOW_4}%s{END_COLOR_TEXT_2} (normal floor print (no B) } -void PrintDungeonLocationtoBuffer(u8 *buffer, struct unkPokeSubStruct_4 *dungeonLocation) +void PrintDungeonLocationtoBuffer(u8 *buffer, struct DungeonLocation *dungeonLocation) { if(gDungeons[dungeonLocation->dungeonIndex].stairDirection != 0){ sprintf_2(buffer, gUnknown_8108F18, gDungeonNames[dungeonLocation->dungeonIndex].name1, dungeonLocation->dungeonFloor); //_F @@ -38,7 +38,7 @@ void PrintDungeonLocationtoBuffer(u8 *buffer, struct unkPokeSubStruct_4 *dungeon } } -void CopyDungeonName1toBuffer(u8 *buffer, struct unkPokeSubStruct_4 *dungeonLocation) +void CopyDungeonName1toBuffer(u8 *buffer, struct DungeonLocation *dungeonLocation) { strncpy(buffer, gDungeonNames[dungeonLocation->dungeonIndex].name1, 0x50); } @@ -63,13 +63,13 @@ u8 sub_80902C8(u8 dungeon) return gUnknown_81077E8[dungeon]; } -void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924* r0, struct unkPokeSubStruct_4* r1) +void SaveDungeonLocation(struct unkStruct_8094924* r0, struct DungeonLocation* r1) { SaveIntegerBits(r0, &r1->dungeonIndex, 0x7); SaveIntegerBits(r0, &r1->dungeonFloor, 0x7); } -void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924* r0, struct unkPokeSubStruct_4* r1) +void RestoreDungeonLocation(struct unkStruct_8094924* r0, struct DungeonLocation* r1) { r1->dungeonIndex = 0; r1->dungeonFloor = 0; diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c index f7a74ef..c3571c0 100644 --- a/src/friend_rescue_1.c +++ b/src/friend_rescue_1.c @@ -82,10 +82,10 @@ extern void sub_8023DA4(void); extern void sub_8035D1C(void); extern u16 sub_8023B44(void); -extern u32 sub_8039068(u32, u8 *r1, u8 *r0); +extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0); extern void sub_8095274(u32); -extern void sub_80951BC(u8 *r0); -extern void sub_80951FC(u8 *r0); +extern void sub_80951BC(struct unkStruct_8095228 *r0); +extern void sub_80951FC(struct unkStruct_8095228 *r0); extern u8 sub_809539C(u32, u32); extern u8 sub_800D588(void); extern u32 sub_8095324(u32); @@ -455,7 +455,7 @@ void sub_8033DBC(void) default: break; } - switch(sub_8039068(input_var, gUnknown_203B33C->passwordBuffer, &temp.unk0)) + switch(sub_8039068(input_var, gUnknown_203B33C->passwordBuffer, &temp)) { case 17: sub_8014248(gUnknown_80E48A8, 0, 6, gUnknown_80E2290, 0, 4, 0, 0, 0x101); @@ -471,8 +471,8 @@ void sub_8033DBC(void) break; case 22: sub_8095274(temp.unk10); - temp.unk0 = 2; // Some sort of Ack? - sub_80951BC(&temp.unk0); + temp.mailType = 2; + sub_80951BC(&temp); sub_80141B4(gUnknown_80E4928, 0, 0, 0x101); SetFriendRescueMenuState(0x16); break; @@ -485,10 +485,10 @@ void sub_8033DBC(void) SetFriendRescueMenuState(8); break; case 23: - temp.unk0 = 5; // Some sort of Ack? - sub_80951FC(&temp.unk0); + temp.mailType = 5; + sub_80951FC(&temp); temp2 = sub_8095228(sub_809539C(1, temp.unk10)); - temp2->unk0 = 7; + temp2->mailType = 7; MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484)); SetFriendRescueMenuState(0x40); break; @@ -1340,7 +1340,7 @@ void sub_8034D74(void) switch(return_var) { case 3: - switch(sub_8039068(0x20, gUnknown_203B33C->passwordBuffer, &temp.unk0)) + switch(sub_8039068(0x20, gUnknown_203B33C->passwordBuffer, &temp)) { case 17: sub_8014248(gUnknown_80E48A8, 0, 6, gUnknown_80E2440, 0, 4, 0, 0, 0x101); @@ -1357,7 +1357,7 @@ void sub_8034D74(void) case 24: temp2 = sub_8095228(sub_809539C(4, temp.unk10)); *temp2 = temp; - temp2->unk0 = 6; // Some sort of Ack? + temp2->mailType = 6; gUnknown_203B33C->unk420 = temp.unk10; SetFriendRescueMenuState(0x6D); break; diff --git a/src/music_pre.c b/src/music_pre.c index 95940aa..3bac474 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -407,7 +407,7 @@ void InitMusic(void) gBGMusicPlayerState = 0; gCurrentBGSong = 999; gUnknown_202D68C = 999; - gUnknown_202D68E = 0x3e5; + gUnknown_202D68E = 997; gUnknown_202D690 = 0; gUnknown_202D692 = 0; gUnknown_202D694 = 0; @@ -415,7 +415,7 @@ void InitMusic(void) for(counter = 0, preload = &gUnknown_3000FD8[0]; counter < 8; counter++, preload++) { preload->unk0 = 0; - preload->songIndex = 0x3e5; + preload->songIndex = 997; preload->unk4 = 0; preload->unk6 = 0; } @@ -425,8 +425,8 @@ void InitMusic(void) void sub_800BDDC(void) { sub_800BF80(); - sub_800C298(0x3e6); - sub_800C298(0x3e5); + sub_800C298(998); + sub_800C298(997); } @@ -583,52 +583,53 @@ u16 GetCurrentBGSong(void) return gCurrentBGSong; } -#ifdef NONMATCHING -// TODO fix reg allocation.. using one too many regs void sub_800C074(u16 SongIndex, u16 param_2) { bool8 interrupt_flag; + bool8 interrupt_flag2; u16 msVar; struct unkStruct_3000FD8 *preload; - if (SongIndex == 0x3e5) + if (SongIndex == 997) return; - if (256 < param_2) + if (param_2 > 256) param_2 = 256; if (sub_800CACC(SongIndex)) { - msVar = GetMusicPlayerIndex(SongIndex); - if (msVar == 1) { + if (GetMusicPlayerIndex(SongIndex) == 1) { interrupt_flag = DisableInterrupts(); gUnknown_202D68E = SongIndex; if(gUnknown_202D690 == 0) { if (gCurrentBGSong != 999) { - if ((u16)(gBGMusicPlayerState - 1U) < 2) + if ((u16)(gBGMusicPlayerState - 1) < 2) { - gUnknown_202D690 = msVar; + gUnknown_202D690 = 1; gUnknown_202D692 = 16; gUnknown_202D694 = 0; - m4aMPlayFadeOutTemporarily(&gMPlayInfo_BGM,1); + m4aMPlayFadeOutTemporarily(&gMPlayInfo_BGM, 1); } - else + else if (gBGMusicPlayerState == 3) + gUnknown_202D690 = 2; + else { - if (gBGMusicPlayerState == 3) - gUnknown_202D690 = 2; - else - { - gUnknown_202D690 = 3; - m4aMPlayStop(&gMPlayInfo_BGM); - m4aSongNumStart(gUnknown_202D68E); - } + gUnknown_202D690 = 3; + m4aMPlayStop(&gMPlayInfo_BGM); + m4aSongNumStart(gUnknown_202D68E); } } + else + { + gUnknown_202D690 = 3; + m4aMPlayStop(&gMPlayInfo_BGM); + m4aSongNumStart(gUnknown_202D68E); + } } else { - if (1 < (u16)(gUnknown_202D690 - 1U)) + if (1 < (u16)(gUnknown_202D690 - 1)) { m4aMPlayStop(&gMPlayInfo_BGM); m4aSongNumStart(gUnknown_202D68E); @@ -675,230 +676,24 @@ void sub_800C074(u16 SongIndex, u16 param_2) nullsub_20(SongIndex); else { - interrupt_flag = DisableInterrupts(); + interrupt_flag2 = DisableInterrupts(); m4aSongNumStart(SongIndex); preload->unk0 = 1; preload->songIndex = SongIndex; - if(msVar == param_2) + if(param_2 == 256) { - preload->unk6 = 1; + preload->unk6 = 0; } else { - preload->unk6 = 0; + preload->unk6 = 1; } - preload->unk4 = msVar; - if (interrupt_flag) + preload->unk4 = param_2; + if (interrupt_flag2) EnableInterrupts(); } } } -#else -NAKED -void sub_800C074(u16 SongIndex, u16 param_2) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r8\n" - "\tpush {r7}\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tmov r8, r5\n" - "\tlsls r1, 16\n" - "\tlsrs r6, r1, 16\n" - "\tldr r0, _0800C0FC\n" - "\tcmp r5, r0\n" - "\tbne _0800C08C\n" - "\tb _0800C208\n" -"_0800C08C:\n" - "\tmovs r7, 0x80\n" - "\tlsls r7, 1\n" - "\tcmp r6, r7\n" - "\tbls _0800C096\n" - "\tadds r6, r7, 0\n" -"_0800C096:\n" - "\tadds r0, r5, 0\n" - "\tbl sub_800CACC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _0800C0A4\n" - "\tb _0800C1B0\n" -"_0800C0A4:\n" - "\tadds r0, r5, 0\n" - "\tbl GetMusicPlayerIndex\n" - "\tlsls r0, 16\n" - "\tlsrs r7, r0, 16\n" - "\tcmp r7, 0x1\n" - "\tbeq _0800C0B4\n" - "\tb _0800C1D0\n" -"_0800C0B4:\n" - "\tbl DisableInterrupts\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tmov r8, r0\n" - "\tldr r6, _0800C100\n" - "\tstrh r5, [r6]\n" - "\tldr r4, _0800C104\n" - "\tldrh r0, [r4]\n" - "\tadds r2, r0, 0\n" - "\tcmp r2, 0\n" - "\tbne _0800C144\n" - "\tldr r0, _0800C108\n" - "\tldrh r1, [r0]\n" - "\tldr r0, _0800C10C\n" - "\tcmp r1, r0\n" - "\tbeq _0800C12C\n" - "\tldr r0, _0800C110\n" - "\tldrh r1, [r0]\n" - "\tsubs r0, r1, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, 0x1\n" - "\tbhi _0800C120\n" - "\tstrh r7, [r4]\n" - "\tldr r1, _0800C114\n" - "\tmovs r0, 0x10\n" - "\tstrh r0, [r1]\n" - "\tldr r0, _0800C118\n" - "\tstrb r2, [r0]\n" - "\tldr r0, _0800C11C\n" - "\tmovs r1, 0x1\n" - "\tbl m4aMPlayFadeOutTemporarily\n" - "\tb _0800C15E\n" - "\t.align 2, 0\n" -"_0800C0FC: .4byte 0x000003e5\n" -"_0800C100: .4byte gUnknown_202D68E\n" -"_0800C104: .4byte gUnknown_202D690\n" -"_0800C108: .4byte gCurrentBGSong\n" -"_0800C10C: .4byte 0x000003e7\n" -"_0800C110: .4byte gBGMusicPlayerState\n" -"_0800C114: .4byte gUnknown_202D692\n" -"_0800C118: .4byte gUnknown_202D694\n" -"_0800C11C: .4byte gMPlayInfo_BGM\n" -"_0800C120:\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, 0x3\n" - "\tbne _0800C12C\n" - "\tmovs r0, 0x2\n" - "\tb _0800C15C\n" -"_0800C12C:\n" - "\tmovs r0, 0x3\n" - "\tstrh r0, [r4]\n" - "\tldr r0, _0800C140\n" - "\tbl m4aMPlayStop\n" - "\tldrh r0, [r6]\n" - "\tbl m4aSongNumStart\n" - "\tb _0800C15E\n" - "\t.align 2, 0\n" -"_0800C140: .4byte gMPlayInfo_BGM\n" -"_0800C144:\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, 0x1\n" - "\tbls _0800C15E\n" - "\tldr r0, _0800C17C\n" - "\tbl m4aMPlayStop\n" - "\tldrh r0, [r6]\n" - "\tbl m4aSongNumStart\n" - "\tmovs r0, 0x3\n" -"_0800C15C:\n" - "\tstrh r0, [r4]\n" -"_0800C15E:\n" - "\tldr r0, _0800C180\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, 0x26\n" - "\tbgt _0800C184\n" - "\tcmp r0, 0x25\n" - "\tbge _0800C19A\n" - "\tcmp r0, 0x1A\n" - "\tblt _0800C1A0\n" - "\tcmp r0, 0x1F\n" - "\tble _0800C19A\n" - "\tcmp r0, 0x23\n" - "\tbgt _0800C1A0\n" - "\tcmp r0, 0x22\n" - "\tblt _0800C1A0\n" - "\tb _0800C19A\n" - "\t.align 2, 0\n" -"_0800C17C: .4byte gMPlayInfo_BGM\n" -"_0800C180: .4byte gCurrentBGSong\n" -"_0800C184:\n" - "\tcmp r0, 0x7A\n" - "\tbeq _0800C19A\n" - "\tcmp r0, 0x7A\n" - "\tbgt _0800C196\n" - "\tcmp r0, 0x77\n" - "\tbgt _0800C1A0\n" - "\tcmp r0, 0x75\n" - "\tblt _0800C1A0\n" - "\tb _0800C19A\n" -"_0800C196:\n" - "\tcmp r0, 0x7F\n" - "\tbne _0800C1A0\n" -"_0800C19A:\n" - "\tldr r1, _0800C1AC\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r1]\n" -"_0800C1A0:\n" - "\tmov r0, r8\n" - "\tcmp r0, 0\n" - "\tbeq _0800C208\n" - "\tbl EnableInterrupts\n" - "\tb _0800C208\n" - "\t.align 2, 0\n" -"_0800C1AC: .4byte gUnknown_202D694\n" -"_0800C1B0:\n" - "\tadds r0, r5, 0\n" - "\tbl sub_800CAAC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0800C208\n" - "\tadds r0, r5, 0\n" - "\tbl GetMusicPlayerIndex\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tlsls r2, r0, 3\n" - "\tldr r1, _0800C1D8\n" - "\tadds r4, r2, r1\n" - "\tcmp r0, 0x1\n" - "\tbhi _0800C1DC\n" -"_0800C1D0:\n" - "\tadds r0, r5, 0\n" - "\tbl nullsub_20\n" - "\tb _0800C208\n" - "\t.align 2, 0\n" -"_0800C1D8: .4byte gUnknown_3000FD8\n" -"_0800C1DC:\n" - "\tbl DisableInterrupts\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tmov r0, r8\n" - "\tbl m4aSongNumStart\n" - "\tmovs r0, 0x1\n" - "\tstrh r0, [r4]\n" - "\tmov r0, r8\n" - "\tstrh r0, [r4, 0x2]\n" - "\tcmp r6, r7\n" - "\tbne _0800C1FA\n" - "\tmovs r0, 0\n" - "\tb _0800C1FC\n" -"_0800C1FA:\n" - "\tmovs r0, 0x1\n" -"_0800C1FC:\n" - "\tstrb r0, [r4, 0x6]\n" - "\tstrh r6, [r4, 0x4]\n" - "\tcmp r5, 0\n" - "\tbeq _0800C208\n" - "\tbl EnableInterrupts\n" -"_0800C208:\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0"); -} -#endif void sub_800C214(u16 songIndex, u16 volume) { @@ -940,14 +735,14 @@ void sub_800C298(u16 songIndex) struct unkStruct_3000FD8 *preload; struct unkStruct_3000FD8 *puVar3; - if (songIndex == 0x3e5) { + if (songIndex == 997) { cVar1 = DisableInterrupts(); for(iVar4 = 2, puVar3 = &gUnknown_3000FE8[0]; iVar4 < 7; iVar4++, puVar3++) { m4aMPlayStop(gMPlayTable[iVar4].info); puVar3->unk0 = 0; - puVar3->songIndex = 0x3e5; + puVar3->songIndex = 997; puVar3->unk4 = 0; puVar3->unk6 = 0; } @@ -955,7 +750,7 @@ void sub_800C298(u16 songIndex) EnableInterrupts(); } } - else if (sub_800CAAC(songIndex) != '\0') + else if (sub_800CAAC(songIndex)) { uVar2 = GetMusicPlayerIndex(songIndex); puVar6 = gMPlayTable[uVar2].info; @@ -968,7 +763,7 @@ void sub_800C298(u16 songIndex) if (preload->songIndex == songIndex) { m4aMPlayStop(puVar6); preload->unk0 = 0; - preload->songIndex = 0x3e5; + preload->songIndex = 997; preload->unk4 = 0; preload->unk6 = 0; } @@ -977,12 +772,12 @@ void sub_800C298(u16 songIndex) } } } - else if (songIndex == 0x3e6) + else if (songIndex == 998) { cVar3 = DisableInterrupts(); if (gUnknown_202D690 != 0) { - if (gUnknown_202D68E != 0x3e5) { - gUnknown_202D68E = 0x3e5; + if (gUnknown_202D68E != 997) { + gUnknown_202D68E = 997; m4aMPlayStop(&gUnknown_2000970); } } @@ -990,12 +785,12 @@ void sub_800C298(u16 songIndex) EnableInterrupts(); } } - else if (sub_800CACC(songIndex) != '\0') + else if (sub_800CACC(songIndex)) { cVar4 = DisableInterrupts(); if (gUnknown_202D690 != 0) { if (gUnknown_202D68E == songIndex) { - gUnknown_202D68E = 0x3e5; + gUnknown_202D68E = 997; m4aMPlayStop(&gUnknown_2000970); } } @@ -1031,19 +826,18 @@ void sub_800C3F8(u16 songIndex, u16 speed) } } - if (songIndex == 0x3e5) { + if (songIndex == 997) { cVar1 = DisableInterrupts(); - for(uVar6 = 2, puVar3 = &gUnknown_3000FE8[0]; uVar6 < 7; uVar6++, puVar3++) { - if (puVar3->songIndex != 0x3e5) { + if (puVar3->songIndex != 997) { if (sub_800CAF0(uVar6) != '\0') { m4aMPlayFadeOut(gMPlayTable[uVar6].info,speed); } else { m4aMPlayStop(gMPlayTable[uVar6].info); puVar3->unk0 = 0; - puVar3->songIndex = 0x3e5; + puVar3->songIndex = 997; puVar3->unk4 = 0; puVar3->unk6 = 0; } @@ -1054,19 +848,19 @@ void sub_800C3F8(u16 songIndex, u16 speed) } } else { - if (sub_800CAAC(songIndex) != '\0') { + if (sub_800CAAC(songIndex)) { uVar8 = GetMusicPlayerIndex(songIndex); preload = &gUnknown_3000FD8[uVar8]; puVar5 = gMPlayTable[uVar8].info; cVar2 = DisableInterrupts(); - if (preload->songIndex != 0x3e5) { + if (preload->songIndex != 997) { if (sub_800CAF0(uVar8) != '\0') { m4aMPlayFadeOut(puVar5,speed); } else { m4aMPlayStop(puVar5); preload->unk0 = 0; - preload->songIndex = 0x3e5; + preload->songIndex = 997; preload->unk4 = 0; preload->unk6 = 0; } @@ -1075,40 +869,35 @@ void sub_800C3F8(u16 songIndex, u16 speed) EnableInterrupts(); } } - else - { - if (songIndex == 0x3e6) { - cVar3 = DisableInterrupts(); - if ((gUnknown_202D690 != 0) && (gUnknown_202D68E != 0x3e5)) { - if (sub_800CAF0(1) != '\0') { - m4aMPlayFadeOut(&gUnknown_2000970,speed); - } - else { - m4aMPlayStop(&gUnknown_2000970); - gUnknown_202D68E = 0x3e5; - } + else if (songIndex == 998) { + cVar3 = DisableInterrupts(); + if ((gUnknown_202D690 != 0) && (gUnknown_202D68E != 997)) { + if (sub_800CAF0(1) != '\0') { + m4aMPlayFadeOut(&gUnknown_2000970,speed); } - if (cVar3 != '\0') { - EnableInterrupts(); + else { + m4aMPlayStop(&gUnknown_2000970); + gUnknown_202D68E = 997; } } - else { - if (sub_800CACC(songIndex) != '\0') { - cVar4 = DisableInterrupts(); - if ((gUnknown_202D690 != 0) && (gUnknown_202D68E == songIndex)) { - if (sub_800CAF0(1) != '\0') { - m4aMPlayFadeOut(&gUnknown_2000970,speed); - } - else { - m4aMPlayStop(&gUnknown_2000970); - gUnknown_202D68E = 0x3e5; - } - } - if (cVar4 != '\0') { - EnableInterrupts(); - } + if (cVar3 != '\0') { + EnableInterrupts(); + } + } + else if (sub_800CACC(songIndex)) { + cVar4 = DisableInterrupts(); + if ((gUnknown_202D690 != 0) && (gUnknown_202D68E == songIndex)) { + if (sub_800CAF0(1) != '\0') { + m4aMPlayFadeOut(&gUnknown_2000970,speed); + } + else { + m4aMPlayStop(&gUnknown_2000970); + gUnknown_202D68E = 997; } } + if (cVar4 != '\0') { + EnableInterrupts(); + } } } } diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 1a38475..251a69f 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -49,10 +49,10 @@ extern s32 gUnknown_810AC90[10]; extern void AddSprite(u16 *, u32, u32, u32); -extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); extern void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924*, struct unkPokeSubStruct_C*); extern void SavePokemonMoves(struct unkStruct_8094924*, struct PokemonMove*); -void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*); +void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*); void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924*, struct unkPokeSubStruct_C*); void RestorePokemonMoves(struct unkStruct_8094924*, struct PokemonMove*); @@ -755,7 +755,7 @@ void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokem { SaveIntegerBits(a1, &pokemon->unkHasNextStage, 7); SaveIntegerBits(a1, &pokemon->speciesNum, 9); - xxx_save_poke_sub_4_80902F4(a1, &pokemon->unk4); + SaveDungeonLocation(a1, &pokemon->unk4); xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[0]); xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[1]); SaveIntegerBits(a1, &pokemon->IQ, 10); @@ -782,7 +782,7 @@ void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* po pokemon->unk0 |= 1; } RestoreIntegerBits(a1, &pokemon->speciesNum, 9); - xxx_restore_poke_sub_4_8090314(a1, &pokemon->unk4); + RestoreDungeonLocation(a1, &pokemon->unk4); xxx_restore_poke_sub_c_808F410(a1, &pokemon->unkC[0]); xxx_restore_poke_sub_c_808F410(a1, &pokemon->unkC[1]); RestoreIntegerBits(a1, &pokemon->IQ, 10); @@ -817,7 +817,7 @@ s32 SavePokemonStruct2(u8* a1, s32 size) SaveIntegerBits(&backup, pokemon2->isLeader ? &data_u8_neg1 : &data_u8_zero, 1); SaveIntegerBits(&backup, &pokemon2->unkHasNextStage, 7); - xxx_save_poke_sub_4_80902F4(&backup, &pokemon2->unk4); + SaveDungeonLocation(&backup, &pokemon2->unk4); SaveIntegerBits(&backup, &pokemon2->IQ, 10); SaveIntegerBits(&backup, &pokemon2->unkA, 16); SaveIntegerBits(&backup, &pokemon2->unkC, 16); @@ -865,7 +865,7 @@ s32 RestorePokemonStruct2(u8* a1, s32 size) } RestoreIntegerBits(&backup, &pokemon2->unkHasNextStage, 7); - xxx_restore_poke_sub_4_8090314(&backup, &pokemon2->unk4); + RestoreDungeonLocation(&backup, &pokemon2->unk4); RestoreIntegerBits(&backup, &pokemon2->IQ, 10); RestoreIntegerBits(&backup, &pokemon2->unkA, 16); RestoreIntegerBits(&backup, &pokemon2->unkC, 16); diff --git a/src/post_office_guide.c b/src/post_office_guide.c index f009895..2103e5f 100644 --- a/src/post_office_guide.c +++ b/src/post_office_guide.c @@ -5,6 +5,8 @@ #include "menu.h" #include "memory.h" #include "text.h" +#include "sub_8095228.h" +#include "wonder_mail.h" struct PostOfficeHelper { @@ -29,7 +31,7 @@ struct unkStruct_203B330 struct UnkInputStruct *unk0; u8 fill4[0x8]; u8 unkC; - u8 unkD; + u8 dungeonIndex; u8 fillE[2]; u32 unk10; struct UnkTextStruct2 *unk14; @@ -41,11 +43,19 @@ EWRAM_DATA struct unkStruct_203B330 *gUnknown_203B330; extern const char GetHelp_Text[]; extern const char GoRescue_Text[]; extern const char FriendRescueInfo_Text[]; - extern const char FriendRescue_80E0A80[]; extern const char Delivery_Text[]; extern const char BulletinBoard_Text[]; extern const char PostOffice_Text[]; +extern u8 gUnknown_80E1F30[]; +extern u8 gUnknown_80E1F3C[]; +extern u8 gUnknown_80E1F60[]; +extern u8 gUnknown_80E1F70[]; +extern u8 gUnknown_202DE58[]; +extern u8 gUnknown_80E1F80[]; +extern u8 gUnknown_80E1F40[]; +extern u8 gUnknown_80E1F54[]; +extern u8 gUnknown_80E1F94[]; enum PostOfficeStates { @@ -167,6 +177,18 @@ extern u32 sub_8012A64(struct UnkInputStruct**, u32); extern void PlayMenuSoundEffect(u32); extern void sub_8031A84(); extern void DisplayMissionObjectives(); +extern u8 *GetCurrentMissionText(s16 r0); +extern u8 *sub_80975DC(u32 r0); +extern u8 sub_8099360(u8 *); +extern u8 sub_8099394(u8 *); +extern struct WonderMail *GetJobSlotInfo(u8); +extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void sprintf_2(char *buffer, const char *text, ...); +extern void sub_803B6B0(u32, u32, u32, u32); +extern s16 sub_80A2688(u8 r0); +extern u8 sub_80992E0(s16 *, s16 *); extern u8 gUnknown_202E5D8[]; extern u8 gAvailablePokemonNames[]; @@ -504,12 +526,12 @@ void ReturnToGetHelpMenu(void) } } -u32 sub_80319A4(u8 param_1,u8 param_2,int param_3) +u32 sub_80319A4(u8 param_1,u8 dungeon,int param_3) { gUnknown_203B330 = MemoryAlloc(sizeof(struct unkStruct_203B330),8); gUnknown_203B330->unkC = param_1; - gUnknown_203B330->unkD = param_2; + gUnknown_203B330->dungeonIndex = dungeon; sub_801317C(&gUnknown_203B330->unk0); gUnknown_203B330->unk10 = param_3; gUnknown_203B330->unk14 = &gUnknown_203B330->unk18[param_3]; @@ -557,7 +579,7 @@ void sub_8031A84(void) sub_8006518(gUnknown_203B330->unk18); gUnknown_203B330->unk18[gUnknown_203B330->unk10] = gUnknown_80E1F18; if (gUnknown_203B330->unkC == 2) { - iVar1 = sub_80969D0(gUnknown_203B330->unkD); + iVar1 = sub_80969D0(gUnknown_203B330->dungeonIndex); if (iVar1 == 0) { iVar1 = 1; } @@ -566,3 +588,96 @@ void sub_8031A84(void) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B330->unk18,1,1); } + +void DisplayMissionObjectives(void) +{ + s32 yCoord; + s32 jobSlotIdx; + struct unkStruct_8095228 *iVar8; + struct WonderMail *jobInfo; + u8 auStack248 [100]; + u8 local_94 [4]; + u8 auStack144 [100]; + short auStack44; + short local_2a; + u8 local_test; + + sub_80073B8(gUnknown_203B330->unk10); + // Objectives + xxx_call_draw_string(10,0,gUnknown_80E1F30,gUnknown_203B330->unk10,0); + switch(gUnknown_203B330->unkC) + { + case 1: + sub_8099394(local_94); + iVar8 = sub_8095228(local_94[0]); + sub_803B6B0(10,16,3,gUnknown_203B330->unk10); + // %dF + sprintf_2(auStack248,gUnknown_80E1F3C,iVar8->floor); + xxx_call_draw_string(0x15,16,auStack248,gUnknown_203B330->unk10,0); + // Rescue #C6%s#R + sprintf_2(auStack248,gUnknown_80E1F40,GetMonSpecies(iVar8->clientSpecies)); + xxx_call_draw_string(0x28,16,auStack248,gUnknown_203B330->unk10,0); + break; + case 2: + if (sub_80969D0(gUnknown_203B330->dungeonIndex) == 0) { + // Just go! + xxx_call_draw_string(10,16,gUnknown_80E1F54,gUnknown_203B330->unk10,0); + } + else + { + yCoord = 16; + + // 8 Job Slots... check each of them + for(jobSlotIdx = 0; jobSlotIdx < 8; jobSlotIdx++) + { + jobInfo = GetJobSlotInfo(jobSlotIdx); + if ((((jobInfo->dungeon == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0) + ) && (jobInfo->mailType != 5)) && (jobInfo->mailType != 7)) { + sub_803B6B0(10,yCoord,3,gUnknown_203B330->unk10); + if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) { + sprintf_2(auStack144,gUnknown_80E1F3C,jobInfo->floor); + xxx_call_draw_string(21,yCoord,auStack144,gUnknown_203B330->unk10,0); + } + switch(jobInfo->missionType) + { + case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM: + // Bring #C4%s#R + sub_8090DC4(gUnknown_202DE58,jobInfo->targetItem,0); + sprintf_2(auStack144,gUnknown_80E1F60,gUnknown_202DE58); + xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0); + break; + case WONDER_MAIL_MISSION_TYPE_FIND_ITEM: + // Find #C4%s#R + sub_8090DC4(gUnknown_202DE58,jobInfo->targetItem,0); + sprintf_2(auStack144,gUnknown_80E1F70,gUnknown_202DE58); + xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0); + break; + case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT: + // Escort to #C6$s#R + sprintf_2(auStack144,gUnknown_80E1F80,GetMonSpecies(jobInfo->targetSpecies)); + xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0); + break; + default: + // Rescue #C6%s#R + sprintf_2(auStack144,gUnknown_80E1F40,GetMonSpecies(jobInfo->targetSpecies)); + xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0); + break; + } + yCoord = yCoord + 12; + } + } + } + break; + case 3: + case 0: + default: + if (sub_80992E0(&auStack44,&local_2a) != 0) + xxx_call_draw_string(10,16,GetCurrentMissionText(local_2a),gUnknown_203B330->unk10,0); + else if (sub_8099360(&local_test) != 0) + xxx_call_draw_string(10,16,sub_80975DC(sub_80A2688(local_test)),gUnknown_203B330->unk10,0); + else + xxx_call_draw_string(10,16,gUnknown_80E1F94,gUnknown_203B330->unk10,0); + break; + } + sub_80073E0(gUnknown_203B330->unk10); +} diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c index ac2f296..f170a00 100644 --- a/src/rescue_password_menu.c +++ b/src/rescue_password_menu.c @@ -66,7 +66,7 @@ void CreateRescuePasswordMenu(u32 currMenu) case MENU_DISPLAY_RESCUE_PASSWORD: temp = sub_8095228(0x1F); MemoryFill8((u8 *)temp, 0, sizeof(struct unkStruct_8095228)); - temp->unk0 = 2; + temp->mailType = 2; temp->unk20.itemIndex = ITEM_ID_NOTHING; sub_8031D70(0x1F, 0); break; diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c index cdfb97a..fedf2ff 100644 --- a/src/thank_you_wonder_mail.c +++ b/src/thank_you_wonder_mail.c @@ -251,7 +251,7 @@ extern void sub_801CB5C(u32); extern void sub_801CCD8(void); extern void sub_8011C28(u32); extern u32 sub_80154F0(void); -extern u32 sub_8039068(u32, u8 *r1, u8 *r0); +extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0); extern u8 sub_809539C(u32, u32); @@ -829,7 +829,7 @@ void HandleThankYouMailPasswordMenu(void) switch(return_var) { case 3: - switch(sub_8039068(0x20,gUnknown_203B2C4->passwordBuffer,&temp.unk0)) + switch(sub_8039068(0x20,gUnknown_203B2C4->passwordBuffer,&temp)) { case 0x11: // Wrong password @@ -851,7 +851,7 @@ void HandleThankYouMailPasswordMenu(void) uVar1 = sub_809539C(4,temp.unk10); puVar5 = sub_8095228(uVar1); *puVar5 = temp; - puVar5->unk0 = 6; + puVar5->mailType = 6; gUnknown_203B2C4->unk430 = temp.unk10; SetThankYouMailMenuState(THANK_YOU_PASSWORD_SUCCESS); break; @@ -1423,7 +1423,7 @@ void UpdateThankYouMailText(void) else gUnknown_203B2C4->unk53C.itemRewards[0] = 0; // unk558 gUnknown_203B2C4->unk53C.numItems = 1; // unk55B - gUnknown_203B2C4->unk53C.teamRankPtsReward = sub_803C200(&puVar4->unk4, 0); // unk560 + gUnknown_203B2C4->unk53C.teamRankPtsReward = sub_803C200(&puVar4->dungeon, 0); // unk560 gUnknown_203B2C4->unk53C.itemRewards[1] = 0; // unk559 gUnknown_203B2C4->unk53C.itemRewards[2] = 0; // unk55A gUnknown_203B2C4->unk53C.friendAreaReward = 0; // unk55C diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 0844a96..6c449aa 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -46,11 +46,11 @@ extern void sub_8030DE4(void); extern void sub_803092C(void); extern u32 sub_80154F0(); -extern u32 sub_8039068(u32, u8 *r1, u8 *r0); +extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0); extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, void *r5, u32); extern void sub_8095274(u32); extern void sub_80155F0(); -extern void sub_80951BC(u8 *r0); +extern void sub_80951BC(struct unkStruct_8095228 *r0); extern void sub_8013114(u32 *r0, s32 *r1); extern void sub_8023C60(); extern u32 sub_8023A94(u32); @@ -1171,7 +1171,7 @@ void sub_8028FDC(void) { case 8: return_var = sub_8095228(gUnknown_203B2C0->unk218); - if(sub_80A2824(return_var->unk4) == 0) + if(sub_80A2824(return_var->dungeon) == 0) { sub_8028B04(0x1C); } @@ -1459,7 +1459,7 @@ void sub_80293F4(void) switch(return_var) { case 3: - switch(sub_8039068(0x1C, (gUnknown_203B2C0->passwordBuffer), &temp.unk0)) + switch(sub_8039068(0x1C, (gUnknown_203B2C0->passwordBuffer), &temp)) { case 17: sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile, 0xC); @@ -1475,8 +1475,8 @@ void sub_80293F4(void) break; case 22: sub_8095274(temp.unk10); - temp.unk0 = 2; // Some sort of Ack? - sub_80951BC(&temp.unk0); + temp.mailType = 2; + sub_80951BC(&temp); sub_80141B4(gWonderMailAOKMailReceivedText, 0, &gUnknown_203B2C0->faceFile, 0x101); sub_8028B04(35); break; diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 6c90992..3359a61 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -386,8 +386,8 @@ void sub_802B3E0(void) gUnknown_203B2C8->unk114.moneyReward = 0; sub_8097790(); iVar3 = sub_8095228(gUnknown_203B2C8->unk1); - sub_803C37C(&iVar3->unk4, 0, gUnknown_203B2C8->unk114.itemRewards); - gUnknown_203B2C8->unk114.teamRankPtsReward = sub_803C200(&iVar3->unk4, 0); + sub_803C37C(&iVar3->dungeon, 0, gUnknown_203B2C8->unk114.itemRewards); + gUnknown_203B2C8->unk114.teamRankPtsReward = sub_803C200(&iVar3->dungeon, 0); gUnknown_203B2C8->unk114.itemRewards[1] = 0; gUnknown_203B2C8->unk114.itemRewards[2] = 0; gUnknown_203B2C8->unk114.numItems = 10; @@ -447,7 +447,7 @@ void sub_802B5B8(void) if (sub_80144A4(&temp) == 0) { uVar2 = sub_8011C34(); puVar3 = sub_8095228(gUnknown_203B2C8->unk1); - puVar3->unk0 = 4; + puVar3->mailType = 4; puVar3->unk28 = uVar2; sub_802B548(3); sub_8011C28(1); diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c index 02dcfb7..4cc2e0e 100644 --- a/src/wonder_mail_3.c +++ b/src/wonder_mail_3.c @@ -85,7 +85,7 @@ extern u8 sub_8096C08(u8 *); extern void sub_802C750(void); extern void sub_802D1A0(u32); extern void sub_8012EA4(u8 *, u32); -extern void* sub_8096AB4(u8); +extern struct WonderMail* GetJobSlotInfo(u8); extern void sub_803B35C(void *, u32*); extern void sub_802DE84(u32 *); extern void sub_802D73C(void); @@ -321,7 +321,7 @@ void sub_802D2A8(void) sub_8012D60(gUnknown_203B2F8->unkC8,gUnknown_203B2F8->unk158,0,0,4,3); break; case 0xf: - sub_803B35C(sub_8096AB4(gUnknown_203B2F8->unk10),&gUnknown_203B2F8->unk14); + sub_803B35C(GetJobSlotInfo(gUnknown_203B2F8->unk10),&gUnknown_203B2F8->unk14); gUnknown_203B2F8->unk14 = 3; sub_802DE84(&gUnknown_203B2F8->unk14); break; diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c index b85df28..ffac5a8 100644 --- a/src/wonder_mail_802DF88.c +++ b/src/wonder_mail_802DF88.c @@ -16,9 +16,8 @@ struct unkStruct_203B2FC s16 unkE; u8 unk10; u8 fill11[0x30 - 0x11]; - u8 unk30; - u8 fill31[3]; - struct WonderMail *unk34; + u8 jobSlot; + struct WonderMail *jobInfo; struct OpenedFile *faceFile; u8 *faceData; u16 unk40; @@ -76,16 +75,16 @@ extern void sub_802DC40(void); extern void sub_802DC9C(void); void sub_802DE44(void); void sub_802DE60(void); -struct WonderMail *sub_8096AB4(u8); +struct WonderMail *GetJobSlotInfo(u8); extern void sub_8096AF8(u8 *, u32, u32); extern void sub_8096EEC(void); extern void sub_803C21C(struct WonderMail *, u32 *); -u32 sub_802DB28(u8 param_1, u8 param_2) +u32 sub_802DB28(u8 jobSlot, u8 param_2) { char local_18 [8]; - sub_8096AF8(local_18,param_1,param_2); + sub_8096AF8(local_18,jobSlot,param_2); if (local_18[0] == '\0') { return 0; } @@ -93,11 +92,11 @@ u32 sub_802DB28(u8 param_1, u8 param_2) ResetUnusedInputStruct(); sub_800641C(0,1,1); gUnknown_203B2FC = MemoryAlloc(sizeof(struct unkStruct_203B2FC),8); - gUnknown_203B2FC->unk30 = param_1; - gUnknown_203B2FC->unk34 = sub_8096AB4(param_1); + gUnknown_203B2FC->jobSlot = jobSlot; + gUnknown_203B2FC->jobInfo = GetJobSlotInfo(jobSlot); sub_8096EEC(); - sub_803C21C(gUnknown_203B2FC->unk34,&gUnknown_203B2FC->unk8); - gUnknown_203B2FC->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B2FC->unk34->clientSpecies); + sub_803C21C(gUnknown_203B2FC->jobInfo,&gUnknown_203B2FC->unk8); + gUnknown_203B2FC->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B2FC->jobInfo->clientSpecies); gUnknown_203B2FC->faceData = NULL; gUnknown_203B2FC->unk44 = 0; gUnknown_203B2FC->unk45 = 0; @@ -117,7 +116,7 @@ u32 sub_802DBD4(void) switch(gUnknown_203B2FC->state) { case 7: - gUnknown_203B2FC->unk34->mailType = 7; + gUnknown_203B2FC->jobInfo->mailType = 7; return 3; case 6: sub_802DE44(); @@ -173,16 +172,16 @@ void sub_802DC9C(void) switch(gUnknown_203B2FC->state) { case 0: - CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8,gUnknown_203B2FC->unk34->clientSpecies); - CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8,gUnknown_203B2FC->unk34->clientSpecies); - speciesText = GetMonSpecies(gUnknown_203B2FC->unk34->clientSpecies); + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8,gUnknown_203B2FC->jobInfo->clientSpecies); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8,gUnknown_203B2FC->jobInfo->clientSpecies); + speciesText = GetMonSpecies(gUnknown_203B2FC->jobInfo->clientSpecies); strcpy(gUnknown_202E1C8 + 0xfffffdd0,speciesText); - speciesText = GetMonSpecies(gUnknown_203B2FC->unk34->targetSpecies); + speciesText = GetMonSpecies(gUnknown_203B2FC->jobInfo->targetSpecies); strcpy(gUnknown_202E1C8 + 0xfffffe20,speciesText); - UnlockExclusivePokemon(gUnknown_203B2FC->unk34->clientSpecies); - sub_8090DC4(gUnknown_202DE58,gUnknown_203B2FC->unk34->targetItem,0); + UnlockExclusivePokemon(gUnknown_203B2FC->jobInfo->clientSpecies); + sub_8090DC4(gUnknown_202DE58,gUnknown_203B2FC->jobInfo->targetItem,0); gUnknown_203B2FC->fallbackState = 6; - switch(gUnknown_203B2FC->unk34->missionType) { + switch(gUnknown_203B2FC->jobInfo->missionType) { case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM: sub_802DC28(5); break; @@ -191,11 +190,11 @@ void sub_802DC9C(void) break; case WONDER_MAIL_MISSION_TYPE_RESCUE_TARGET: sub_802DC28(2); - UnlockExclusivePokemon(gUnknown_203B2FC->unk34->targetSpecies); + UnlockExclusivePokemon(gUnknown_203B2FC->jobInfo->targetSpecies); break; case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT: sub_802DC28(3); - UnlockExclusivePokemon(gUnknown_203B2FC->unk34->targetSpecies); + UnlockExclusivePokemon(gUnknown_203B2FC->jobInfo->targetSpecies); break; default: case WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT: @@ -216,7 +215,7 @@ void sub_802DC9C(void) sub_80141B4(gWonderMailClientItemDelivered1,0,&gUnknown_203B2FC->faceFile,0x10d); break; case 4: - index = FindItemInInventory(gUnknown_203B2FC->unk34->targetItem); + index = FindItemInInventory(gUnknown_203B2FC->jobInfo->targetItem); if (index != -1) { ShiftItemsDownFrom(index); FillInventoryGaps(); -- cgit v1.2.3