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