summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/code_8095014.s484
-rw-r--r--asm/code_80958E8.s676
-rw-r--r--asm/code_8097318.s207
-rw-r--r--include/code_8094F88.h35
-rw-r--r--include/pokemon.h22
-rwxr-xr-xld_script.txt3
-rw-r--r--src/code_8094F88.c31
-rw-r--r--src/code_8095824.c165
-rw-r--r--src/code_80972F4.c200
-rw-r--r--src/friend_rescue_1.c3
-rw-r--r--src/load_screen.c15
11 files changed, 635 insertions, 1206 deletions
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