summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokemon_storage_system.s1485
-rw-r--r--include/pokemon_storage_system.h36
-rw-r--r--ld_script.txt1
-rw-r--r--src/pokemon_storage_system_2.c4
-rw-r--r--src/pokemon_storage_system_5.c775
-rw-r--r--src/pokenav_before.c2
6 files changed, 797 insertions, 1506 deletions
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
deleted file mode 100644
index 67655e63f..000000000
--- a/asm/pokemon_storage_system.s
+++ /dev/null
@@ -1,1485 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "include/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_809C85C
-@ u8 sub_809C85C(void)
-sub_809C85C: @ 809C85C
- push {r4-r6,lr}
- ldr r0, _0809C894 @ =gPokemonStorageSystemPtr
- ldr r2, [r0]
- ldr r1, _0809C898 @ =0x000011df
- adds r0, r2, r1
- movs r1, 0
- strb r1, [r0]
- ldr r3, _0809C89C @ =0x000011de
- adds r0, r2, r3
- strb r1, [r0]
- ldr r0, _0809C8A0 @ =0x000011e3
- adds r2, r0
- strb r1, [r2]
- ldr r1, _0809C8A4 @ =gMain
- ldrh r3, [r1, 0x30]
- movs r0, 0x40
- ands r0, r3
- cmp r0, 0
- bne _0809C91A
- movs r0, 0x80
- ands r0, r3
- cmp r0, 0
- beq _0809C8A8
- movs r4, 0x1
- movs r0, 0
- movs r5, 0x2
- b _0809C922
- .align 2, 0
-_0809C894: .4byte gPokemonStorageSystemPtr
-_0809C898: .4byte 0x000011df
-_0809C89C: .4byte 0x000011de
-_0809C8A0: .4byte 0x000011e3
-_0809C8A4: .4byte gMain
-_0809C8A8:
- ldrh r2, [r1, 0x2C]
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- bne _0809C8CC
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- bne _0809C8DE
- ldr r0, _0809C8D0 @ =gSaveBlock2
- ldrb r0, [r0, 0x13]
- cmp r0, 0x1
- bne _0809C8E2
- movs r0, 0x80
- lsls r0, 2
- ands r0, r2
- cmp r0, 0
- beq _0809C8D4
-_0809C8CC:
- movs r0, 0xA
- b _0809C93E
- .align 2, 0
-_0809C8D0: .4byte gSaveBlock2
-_0809C8D4:
- movs r0, 0x80
- lsls r0, 1
- ands r0, r2
- cmp r0, 0
- beq _0809C8E2
-_0809C8DE:
- movs r0, 0x9
- b _0809C93E
-_0809C8E2:
- ldrh r1, [r1, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0809C8FA
- movs r0, 0
- bl sub_809A860
- bl sub_809CA8C
- movs r0, 0x7
- b _0809C93E
-_0809C8FA:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0809C906
- movs r0, 0x10
- b _0809C93E
-_0809C906:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0809C916
- bl sub_809CD88
- movs r0, 0
- b _0809C93E
-_0809C916:
- movs r4, 0
- b _0809C93C
-_0809C91A:
- movs r4, 0x1
- movs r0, 0x3
- movs r5, 0
- strb r4, [r2]
-_0809C922:
- cmp r4, 0
- beq _0809C93C
- lsls r6, r0, 24
- cmp r0, 0x2
- beq _0809C932
- movs r0, 0
- bl sub_809A860
-_0809C932:
- lsrs r0, r6, 24
- lsls r1, r5, 24
- lsrs r1, 24
- bl sub_809AF18
-_0809C93C:
- adds r0, r4, 0
-_0809C93E:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_809C85C
-
- thumb_func_start sub_809C944
-@ u8 sub_809C944(void)
-sub_809C944: @ 809C944
- push {r4-r7,lr}
- ldr r0, _0809C988 @ =gUnknown_020384E4
- ldrb r0, [r0]
- mov r12, r0
- ldr r7, _0809C98C @ =gUnknown_020384E5
- ldrb r3, [r7]
- ldr r0, _0809C990 @ =gPokemonStorageSystemPtr
- ldr r1, [r0]
- ldr r0, _0809C994 @ =0x000011df
- adds r5, r1, r0
- movs r0, 0
- strb r0, [r5]
- ldr r2, _0809C998 @ =0x000011de
- adds r4, r1, r2
- strb r0, [r4]
- adds r2, 0x5
- adds r1, r2
- strb r0, [r1]
- ldr r6, _0809C99C @ =gMain
- ldrh r2, [r6, 0x30]
- movs r0, 0x40
- ands r0, r2
- cmp r0, 0
- bne _0809CA14
- movs r0, 0x88
- ands r0, r2
- cmp r0, 0
- beq _0809C9A0
- movs r6, 0x1
- movs r0, 0x2
- mov r12, r0
- movs r3, 0
- b _0809CA2A
- .align 2, 0
-_0809C988: .4byte gUnknown_020384E4
-_0809C98C: .4byte gUnknown_020384E5
-_0809C990: .4byte gPokemonStorageSystemPtr
-_0809C994: .4byte 0x000011df
-_0809C998: .4byte 0x000011de
-_0809C99C: .4byte gMain
-_0809C9A0:
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- beq _0809C9C0
- movs r6, 0x1
- lsls r0, r3, 24
- movs r1, 0xFF
- lsls r1, 24
- adds r0, r1
- lsrs r3, r0, 24
- cmp r0, 0
- bge _0809CA2C
- movs r0, 0xFF
- strb r0, [r5]
- movs r3, 0x1
- b _0809CA2C
-_0809C9C0:
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- beq _0809C9E0
- movs r6, 0x1
- lsls r0, r3, 24
- movs r2, 0x80
- lsls r2, 17
- adds r0, r2
- lsrs r3, r0, 24
- asrs r0, 24
- cmp r0, 0x1
- ble _0809CA2C
- strb r6, [r5]
- movs r3, 0
- b _0809CA2C
-_0809C9E0:
- ldrh r1, [r6, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0809C9F4
- movs r0, 0x4
- cmp r3, 0
- bne _0809CA3A
- movs r0, 0x5
- b _0809CA3A
-_0809C9F4:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0809CA00
- movs r0, 0x10
- b _0809CA3A
-_0809CA00:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0809CA10
- bl sub_809CD88
- movs r0, 0
- b _0809CA3A
-_0809CA10:
- movs r6, 0
- b _0809CA38
-_0809CA14:
- movs r6, 0x1
- movs r0, 0
- mov r12, r0
- movs r0, 0xFF
- strb r0, [r4]
- movs r0, 0
- ldrsb r0, [r7, r0]
- movs r3, 0x1D
- cmp r0, 0
- bne _0809CA2A
- movs r3, 0x18
-_0809CA2A:
- strb r6, [r1]
-_0809CA2C:
- cmp r6, 0
- beq _0809CA38
- mov r0, r12
- adds r1, r3, 0
- bl sub_809AF18
-_0809CA38:
- adds r0, r6, 0
-_0809CA3A:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_809C944
-
- thumb_func_start sub_809CA40
-sub_809CA40: @ 809CA40
- push {r4,r5,lr}
- movs r3, 0
- ldr r0, _0809CA6C @ =gUnknown_083BBBD4
- ldr r1, [r0]
- adds r4, r0, 0
- cmp r1, 0
- beq _0809CA84
- ldr r5, _0809CA70 @ =gUnknown_020384E4
-_0809CA50:
- lsls r0, r3, 3
- adds r2, r0, r4
- movs r1, 0x4
- ldrsb r1, [r2, r1]
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r1, r0
- bne _0809CA74
- ldr r0, [r2]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- b _0809CA86
- .align 2, 0
-_0809CA6C: .4byte gUnknown_083BBBD4
-_0809CA70: .4byte gUnknown_020384E4
-_0809CA74:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r0, r3, 3
- adds r0, r4
- ldr r0, [r0]
- cmp r0, 0
- bne _0809CA50
-_0809CA84:
- movs r0, 0
-_0809CA86:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_809CA40
-
- thumb_func_start sub_809CA8C
-sub_809CA8C: @ 809CA8C
- push {lr}
- bl sub_809CDCC
- movs r0, 0x9
- bl sub_809CDEC
- movs r0, 0xA
- bl sub_809CDEC
- movs r0, 0xB
- bl sub_809CDEC
- movs r0, 0
- bl sub_809CDEC
- pop {r0}
- bx r0
- thumb_func_end sub_809CA8C
-
-.if DEBUG
- thumb_func_start debug_sub_80AA40C
-debug_sub_80AA40C:
-.syntax divided
- push {lr}
- bl sub_809AB8C
- lsl r0, r0, #0x10
- cmp r0, #0
- beq ._2084 @cond_branch
- bl sub_809CDCC
- mov r0, #0x20
- bl sub_809CDEC
- mov r0, #0x6
- bl sub_809CDEC
- mov r0, #0x1
- b ._2085
-._2084:
- mov r0, #0x0
-._2085:
- pop {r1}
- bx r1
-.syntax unified
- thumb_func_end debug_sub_80AA40C
-.endif
-
-.if DEBUG
- thumb_func_start sub_809CAB0
-sub_809CAB0:
-.syntax divided
- push {lr}
- ldr r0, ._2088 @ unk_2038790
- ldrb r0, [r0]
- cmp r0, #0
- beq ._2086 @cond_branch
- bl debug_sub_80AA40C
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- b ._2110
-._2089:
- .align 2, 0
-._2088:
- .word unk_2038790
-._2086:
- bl sub_809CDCC
- bl sub_809AB8C
- lsl r0, r0, #0x10
- lsr r1, r0, #0x10
- ldr r0, ._2094 @ gPokemonStorageSystemPtr
- ldr r0, [r0]
- ldrb r0, [r0, #0x5]
- cmp r0, #0x1
- beq ._2090 @cond_branch
- cmp r0, #0x1
- bgt ._2091 @cond_branch
- cmp r0, #0
- beq ._2092 @cond_branch
- b ._2108
-._2095:
- .align 2, 0
-._2094:
- .word gPokemonStorageSystemPtr
-._2091:
- cmp r0, #0x2
- beq ._2096 @cond_branch
- b ._2108
-._2090:
- cmp r1, #0
- beq ._2108 @cond_branch
- mov r0, #0x1
- bl sub_809CDEC
- b ._2109
-._2092:
- cmp r1, #0
- beq ._2108 @cond_branch
- mov r0, #0x2
- bl sub_809CDEC
- b ._2109
-._2096:
- ldr r0, ._2105 @ gUnknown_020384E6
- ldrb r0, [r0]
- cmp r0, #0
- beq ._2102 @cond_branch
- cmp r1, #0
- beq ._2103 @cond_branch
- mov r0, #0x4
- bl sub_809CDEC
- b ._2109
-._2106:
- .align 2, 0
-._2105:
- .word gUnknown_020384E6
-._2103:
- mov r0, #0x5
- bl sub_809CDEC
- b ._2109
-._2102:
- cmp r1, #0
- beq ._2108 @cond_branch
- mov r0, #0x3
- bl sub_809CDEC
- b ._2109
-._2108:
- mov r0, #0x0
- b ._2110
-._2109:
- mov r0, #0x6
- bl sub_809CDEC
- ldr r0, ._2114 @ gPokemonStorageSystemPtr
- ldr r0, [r0]
- ldrb r0, [r0, #0x5]
- cmp r0, #0x2
- bne ._2113 @cond_branch
- ldr r0, ._2114 + 4 @ gUnknown_020384E4
- ldrb r0, [r0]
- lsl r0, r0, #0x18
- asr r0, r0, #0x18
- cmp r0, #0
- bne ._2112 @cond_branch
- mov r0, #0x2
- bl sub_809CDEC
- b ._2113
-._2115:
- .align 2, 0
-._2114:
- .word gPokemonStorageSystemPtr
- .word gUnknown_020384E4
-._2112:
- mov r0, #0x1
- bl sub_809CDEC
-._2113:
- mov r0, #0x8
- bl sub_809CDEC
- mov r0, #0x7
- bl sub_809CDEC
- mov r0, #0x0
- bl sub_809CDEC
- mov r0, #0x1
-._2110:
- pop {r1}
- bx r1
-.syntax unified
- thumb_func_end sub_809CAB0
-.else
- thumb_func_start sub_809CAB0
-sub_809CAB0: @ 809CAB0
- push {lr}
- bl sub_809CDCC
- bl sub_809AB8C
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, _0809CAD4 @ =gPokemonStorageSystemPtr
- ldr r0, [r0]
- ldrb r0, [r0, 0x5]
- cmp r0, 0x1
- beq _0809CADE
- cmp r0, 0x1
- bgt _0809CAD8
- cmp r0, 0
- beq _0809CAEA
- b _0809CB24
- .align 2, 0
-_0809CAD4: .4byte gPokemonStorageSystemPtr
-_0809CAD8:
- cmp r0, 0x2
- beq _0809CAF6
- b _0809CB24
-_0809CADE:
- cmp r1, 0
- beq _0809CB24
- movs r0, 0x1
- bl sub_809CDEC
- b _0809CB28
-_0809CAEA:
- cmp r1, 0
- beq _0809CB24
- movs r0, 0x2
- bl sub_809CDEC
- b _0809CB28
-_0809CAF6:
- ldr r0, _0809CB0C @ =gUnknown_020384E6
- ldrb r0, [r0]
- cmp r0, 0
- beq _0809CB18
- cmp r1, 0
- beq _0809CB10
- movs r0, 0x4
- bl sub_809CDEC
- b _0809CB28
- .align 2, 0
-_0809CB0C: .4byte gUnknown_020384E6
-_0809CB10:
- movs r0, 0x5
- bl sub_809CDEC
- b _0809CB28
-_0809CB18:
- cmp r1, 0
- beq _0809CB24
- movs r0, 0x3
- bl sub_809CDEC
- b _0809CB28
-_0809CB24:
- movs r0, 0
- b _0809CB6E
-_0809CB28:
- movs r0, 0x6
- bl sub_809CDEC
- ldr r0, _0809CB4C @ =gPokemonStorageSystemPtr
- ldr r0, [r0]
- ldrb r0, [r0, 0x5]
- cmp r0, 0x2
- bne _0809CB5A
- ldr r0, _0809CB50 @ =gUnknown_020384E4
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bne _0809CB54
- movs r0, 0x2
- bl sub_809CDEC
- b _0809CB5A
- .align 2, 0
-_0809CB4C: .4byte gPokemonStorageSystemPtr
-_0809CB50: .4byte gUnknown_020384E4
-_0809CB54:
- movs r0, 0x1
- bl sub_809CDEC
-_0809CB5A:
- movs r0, 0x8
- bl sub_809CDEC
- movs r0, 0x7
- bl sub_809CDEC
- movs r0, 0
- bl sub_809CDEC
- movs r0, 0x1
-_0809CB6E:
- pop {r1}
- bx r1
- thumb_func_end sub_809CAB0
-.endif
-
- thumb_func_start sub_809CB74
-sub_809CB74: @ 809CB74
- ldr r1, _0809CB90 @ =gPokemonStorageSystemPtr
- ldr r1, [r1]
- movs r2, 0x8E
- lsls r2, 5
- adds r1, r2
- ldr r2, [r1]
- ldrh r2, [r2, 0x20]
- strh r2, [r0, 0x20]
- ldr r1, [r1]
- ldrh r1, [r1, 0x22]
- adds r1, 0x14
- strh r1, [r0, 0x22]
- bx lr
- .align 2, 0
-_0809CB90: .4byte gPokemonStorageSystemPtr
- thumb_func_end sub_809CB74
-
- thumb_func_start debug_sub_809CB94
-debug_sub_809CB94: @ 809CB94
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0809CBBC @ =gUnknown_020384E4
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _0809CBC8
- ldr r2, _0809CBC0 @ =gPlayerParty
- ldr r0, _0809CBC4 @ =gUnknown_020384E5
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r1, r0
- adds r1, r2
- adds r0, r4, 0
- movs r2, 0x50
- bl memcpy
- b _0809CBF6
- .align 2, 0
-_0809CBBC: .4byte gUnknown_020384E4
-_0809CBC0: .4byte gPlayerParty
-_0809CBC4: .4byte gUnknown_020384E5
-_0809CBC8:
- bl get_preferred_box
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _0809CBFC @ =gPokemonStorage
- ldr r1, _0809CC00 @ =gUnknown_020384E5
- movs r2, 0
- ldrsb r2, [r1, r2]
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 4
- lsls r2, r0, 2
- adds r2, r0
- lsls r0, r2, 4
- subs r0, r2
- lsls r0, 5
- adds r1, r0
- adds r1, r3
- adds r1, 0x4
- adds r0, r4, 0
- movs r2, 0x50
- bl memcpy
-_0809CBF6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809CBFC: .4byte gPokemonStorage
-_0809CC00: .4byte gUnknown_020384E5
- thumb_func_end debug_sub_809CB94
-
- thumb_func_start sub_809CC04
-sub_809CC04: @ 809CC04
- push {r4-r7,lr}
- sub sp, 0x34
- mov r1, sp
- ldr r0, _0809CCB0 @ =gHandCursorSpriteSheets
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- add r4, sp, 0x18
- adds r1, r4, 0
- ldr r0, _0809CCB4 @ =gHandCursorSpritePalettes
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- mov r0, sp
- bl LoadSpriteSheets
- adds r0, r4, 0
- bl LoadSpritePalettes
- ldr r0, _0809CCB8 @ =0x0000dac6
- bl IndexOfSpritePaletteTag
- ldr r1, _0809CCBC @ =gPokemonStorageSystemPtr
- ldr r6, [r1]
- ldr r4, _0809CCC0 @ =0x000011e4
- adds r7, r6, r4
- strb r0, [r7]
- ldr r0, _0809CCC4 @ =0x0000dad1
- bl IndexOfSpritePaletteTag
- ldr r5, _0809CCC8 @ =0x000011e5
- adds r1, r6, r5
- strb r0, [r1]
- ldr r0, _0809CCCC @ =gUnknown_020384E4
- ldrb r0, [r0]
- ldr r1, _0809CCD0 @ =gUnknown_020384E5
- ldrb r1, [r1]
- add r4, sp, 0x30
- mov r5, sp
- adds r5, 0x32
- adds r2, r4, 0
- adds r3, r5, 0
- bl sub_809AACC
- ldr r0, _0809CCD4 @ =gSpriteTemplate_83BBC70
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0
- ldrsh r2, [r5, r3]
- movs r3, 0x6
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _0809CCE4
- movs r5, 0x8E
- lsls r5, 5
- adds r4, r6, r5
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- ldr r0, _0809CCD8 @ =gSprites
- adds r1, r0
- str r1, [r4]
- ldr r0, _0809CCDC @ =gUnknown_020384E9
- ldrb r0, [r0]
- adds r0, r7, r0
- ldrb r2, [r0]
- lsls r2, 4
- ldrb r3, [r1, 0x5]
- movs r0, 0xF
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x5]
- ldr r0, _0809CCE0 @ =gUnknown_020384E6
- ldrb r0, [r0]
- cmp r0, 0
- beq _0809CCEE
- ldr r0, [r4]
- movs r1, 0x3
- bl StartSpriteAnim
- b _0809CCEE
- .align 2, 0
-_0809CCB0: .4byte gHandCursorSpriteSheets
-_0809CCB4: .4byte gHandCursorSpritePalettes
-_0809CCB8: .4byte 0x0000dac6
-_0809CCBC: .4byte gPokemonStorageSystemPtr
-_0809CCC0: .4byte 0x000011e4
-_0809CCC4: .4byte 0x0000dad1
-_0809CCC8: .4byte 0x000011e5
-_0809CCCC: .4byte gUnknown_020384E4
-_0809CCD0: .4byte gUnknown_020384E5
-_0809CCD4: .4byte gSpriteTemplate_83BBC70
-_0809CCD8: .4byte gSprites
-_0809CCDC: .4byte gUnknown_020384E9
-_0809CCE0: .4byte gUnknown_020384E6
-_0809CCE4:
- movs r0, 0x8E
- lsls r0, 5
- adds r1, r6, r0
- movs r0, 0
- str r0, [r1]
-_0809CCEE:
- ldr r0, _0809CD00 @ =gUnknown_020384E4
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _0809CD04
- movs r3, 0xC
- movs r5, 0x1
- b _0809CD08
- .align 2, 0
-_0809CD00: .4byte gUnknown_020384E4
-_0809CD04:
- movs r3, 0x14
- movs r5, 0x2
-_0809CD08:
- ldr r0, _0809CD58 @ =gSpriteTemplate_83BBC88
- movs r1, 0
- movs r2, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _0809CD6C
- ldr r0, _0809CD5C @ =gPokemonStorageSystemPtr
- ldr r0, [r0]
- ldr r1, _0809CD60 @ =0x000011c4
- adds r4, r0, r1
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- ldr r0, _0809CD64 @ =gSprites
- adds r1, r0
- str r1, [r4]
- lsls r3, r5, 2
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldr r0, _0809CD68 @ =gUnknown_020384E4
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _0809CD78
- ldr r0, [r4]
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- b _0809CD78
- .align 2, 0
-_0809CD58: .4byte gSpriteTemplate_83BBC88
-_0809CD5C: .4byte gPokemonStorageSystemPtr
-_0809CD60: .4byte 0x000011c4
-_0809CD64: .4byte gSprites
-_0809CD68: .4byte gUnknown_020384E4
-_0809CD6C:
- ldr r0, _0809CD80 @ =gPokemonStorageSystemPtr
- ldr r0, [r0]
- ldr r2, _0809CD84 @ =0x000011c4
- adds r0, r2
- movs r1, 0
- str r1, [r0]
-_0809CD78:
- add sp, 0x34
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809CD80: .4byte gPokemonStorageSystemPtr
-_0809CD84: .4byte 0x000011c4
- thumb_func_end sub_809CC04
-
- thumb_func_start sub_809CD88
-sub_809CD88: @ 809CD88
- push {lr}
- ldr r2, _0809CDC0 @ =gUnknown_020384E9
- movs r1, 0
- ldrb r0, [r2]
- cmp r0, 0
- bne _0809CD96
- movs r1, 0x1
-_0809CD96:
- strb r1, [r2]
- ldr r0, _0809CDC4 @ =gPokemonStorageSystemPtr
- ldr r0, [r0]
- movs r3, 0x8E
- lsls r3, 5
- adds r1, r0, r3
- ldr r3, [r1]
- ldr r1, _0809CDC8 @ =0x000011e4
- adds r0, r1
- ldrb r2, [r2]
- adds r0, r2
- ldrb r1, [r0]
- lsls r1, 4
- ldrb r2, [r3, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x5]
- pop {r0}
- bx r0
- .align 2, 0
-_0809CDC0: .4byte gUnknown_020384E9
-_0809CDC4: .4byte gPokemonStorageSystemPtr
-_0809CDC8: .4byte 0x000011e4
- thumb_func_end sub_809CD88
-
-// file boundary here
-
- thumb_func_start sub_809CDCC
-sub_809CDCC: @ 809CDCC
- ldr r0, _0809CDE0 @ =gPokemonStorageSystemPtr
- ldr r0, [r0]
- ldr r2, _0809CDE4 @ =0x000011b8
- adds r1, r0, r2
- movs r2, 0
- strb r2, [r1]
- ldr r1, _0809CDE8 @ =0x000011b9
- adds r0, r1
- strb r2, [r0]
- bx lr
- .align 2, 0
-_0809CDE0: .4byte gPokemonStorageSystemPtr
-_0809CDE4: .4byte 0x000011b8
-_0809CDE8: .4byte 0x000011b9
- thumb_func_end sub_809CDCC
-
- thumb_func_start sub_809CDEC
-sub_809CDEC: @ 809CDEC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, _0809CE3C @ =gPokemonStorageSystemPtr
- ldr r5, [r0]
- ldr r0, _0809CE40 @ =0x000011b8
- adds r4, r5, r0
- ldrb r0, [r4]
- cmp r0, 0x6
- bhi _0809CE36
- adds r1, r0, 0
- lsls r1, 3
- movs r2, 0x8C
- lsls r2, 5
- adds r1, r2
- adds r1, r5, r1
- ldr r2, _0809CE44 @ =gUnknown_083BBCA0
- lsls r0, r3, 2
- adds r0, r2
- ldr r0, [r0]
- str r0, [r1]
- str r3, [r1, 0x4]
- bl GetStringWidthInMenuWindow
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0x7
- lsrs r1, 3
- ldr r2, _0809CE48 @ =0x000011b9
- adds r0, r5, r2
- ldrb r2, [r0]
- cmp r1, r2
- bls _0809CE30
- strb r1, [r0]
-_0809CE30:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_0809CE36:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809CE3C: .4byte gPokemonStorageSystemPtr
-_0809CE40: .4byte 0x000011b8
-_0809CE44: .4byte gUnknown_083BBCA0
-_0809CE48: .4byte 0x000011b9
- thumb_func_end sub_809CDEC
-
- thumb_func_start sub_809CE4C
-sub_809CE4C: @ 809CE4C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _0809CE70 @ =gPokemonStorageSystemPtr
- ldr r1, [r0]
- ldr r3, _0809CE74 @ =0x000011b8
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r2, r0
- bcs _0809CE7C
- lsls r0, r2, 3
- ldr r2, _0809CE78 @ =0x00001184
- adds r1, r2
- adds r1, r0
- movs r0, 0
- ldrsb r0, [r1, r0]
- b _0809CE80
- .align 2, 0
-_0809CE70: .4byte gPokemonStorageSystemPtr
-_0809CE74: .4byte 0x000011b8
-_0809CE78: .4byte 0x00001184
-_0809CE7C:
- movs r0, 0x1
- negs r0, r0
-_0809CE80:
- pop {r1}
- bx r1
- thumb_func_end sub_809CE4C
-
- thumb_func_start sub_809CE84
-sub_809CE84: @ 809CE84
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x8
- ldr r0, _0809CF20 @ =gPokemonStorageSystemPtr
- ldr r4, [r0]
- ldr r0, _0809CF24 @ =0x000011b8
- adds r0, r4
- mov r8, r0
- ldrb r0, [r0]
- lsls r0, 1
- movs r1, 0xE
- subs r1, r0
- ldr r3, _0809CF28 @ =0x000011bc
- adds r6, r4, r3
- movs r0, 0
- mov r10, r0
- strh r1, [r6]
- ldr r1, _0809CF2C @ =0x000011b9
- adds r1, r4
- mov r9, r1
- ldrb r1, [r1]
- movs r0, 0x1C
- subs r0, r1
- subs r3, 0x2
- adds r5, r4, r3
- strh r0, [r5]
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r6]
- movs r2, 0x1D
- movs r3, 0xF
- bl Menu_DrawStdWindowFrame
- ldrb r0, [r5]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r6]
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- mov r3, r8
- ldrb r2, [r3]
- movs r3, 0x8C
- lsls r3, 5
- adds r4, r3
- adds r3, r4, 0
- bl Menu_PrintItems
- ldrb r1, [r5]
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- ldrb r2, [r6]
- adds r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- mov r4, r8
- ldrb r3, [r4]
- mov r0, r10
- str r0, [sp]
- mov r4, r9
- ldrb r0, [r4]
- str r0, [sp, 0x4]
- movs r0, 0
- bl InitMenu
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0809CF20: .4byte gPokemonStorageSystemPtr
-_0809CF24: .4byte 0x000011b8
-_0809CF28: .4byte 0x000011bc
-_0809CF2C: .4byte 0x000011b9
- thumb_func_end sub_809CE84
-
- thumb_func_start sub_809CF30
-sub_809CF30: @ 809CF30
- push {r4,r5,lr}
- movs r5, 0x2
- negs r5, r5
- ldr r4, _0809CF6C @ =gMain
- ldrh r1, [r4, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0809CF86
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0809CF52
- movs r0, 0x5
- bl PlaySE
- adds r5, 0x1
-_0809CF52:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0809CF70
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- bl Menu_MoveCursor
- b _0809CF8E
- .align 2, 0
-_0809CF6C: .4byte gMain
-_0809CF70:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809CF8E
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl Menu_MoveCursor
- b _0809CF8E
-_0809CF86:
- bl Menu_GetCursorPos
- lsls r0, 24
- lsrs r5, r0, 24
-_0809CF8E:
- movs r0, 0x2
- negs r0, r0
- cmp r5, r0
- beq _0809CFB2
- bl Menu_DestroyCursor
- ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr
- ldr r1, [r0]
- ldr r2, _0809CFD4 @ =0x000011ba
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- movs r2, 0x1D
- movs r3, 0xF
- bl Menu_EraseWindowRect
-_0809CFB2:
- cmp r5, 0
- blt _0809CFC4
- ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr
- ldr r0, [r0]
- lsls r1, r5, 3
- ldr r2, _0809CFD8 @ =0x00001184
- adds r0, r2
- adds r0, r1
- ldr r5, [r0]
-_0809CFC4:
- lsls r0, r5, 16
- asrs r0, 16
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0809CFD0: .4byte gPokemonStorageSystemPtr
-_0809CFD4: .4byte 0x000011ba
-_0809CFD8: .4byte 0x00001184
- thumb_func_end sub_809CF30
-
- thumb_func_start sub_809CFDC
-sub_809CFDC: @ 809CFDC
- ldr r3, _0809CFEC @ =gUnknown_020384EC
- str r0, [r3]
- str r1, [r0]
- movs r1, 0
- strb r2, [r0, 0x5]
- strb r1, [r0, 0x4]
- bx lr
- .align 2, 0
-_0809CFEC: .4byte gUnknown_020384EC
- thumb_func_end sub_809CFDC
-
- thumb_func_start sub_809CFF0
-sub_809CFF0: @ 809CFF0
- push {r4,r5,lr}
- ldr r2, _0809D030 @ =gUnknown_020384EC
- ldr r1, [r2]
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _0809D02A
- movs r4, 0
- ldrb r1, [r1, 0x4]
- cmp r4, r1
- bcs _0809D022
- adds r5, r2, 0
-_0809D006:
- ldr r0, [r5]
- lsls r1, r4, 4
- ldr r0, [r0]
- adds r0, r1
- ldr r1, [r0, 0xC]
- bl _call_via_r1
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, [r5]
- ldrb r0, [r0, 0x4]
- cmp r4, r0
- bcc _0809D006
-_0809D022:
- ldr r0, _0809D030 @ =gUnknown_020384EC
- ldr r1, [r0]
- movs r0, 0
- strb r0, [r1, 0x4]
-_0809D02A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809D030: .4byte gUnknown_020384EC
- thumb_func_end sub_809CFF0
-
- thumb_func_start sub_809D034
-sub_809D034: @ 809D034
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r8, r0
- mov r9, r3
- ldr r0, [sp, 0x20]
- ldr r3, [sp, 0x24]
- ldr r4, [sp, 0x28]
- ldr r5, [sp, 0x2C]
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- lsls r2, 16
- lsrs r6, r2, 16
- lsls r0, 16
- lsrs r0, 16
- mov r12, r0
- lsls r3, 16
- lsrs r3, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- ldr r0, _0809D0A4 @ =gUnknown_020384EC
- ldr r2, [r0]
- ldrb r0, [r2, 0x4]
- adds r1, r0, 0
- ldrb r7, [r2, 0x5]
- cmp r1, r7
- bcs _0809D0AC
- adds r0, 0x1
- strb r0, [r2, 0x4]
- lsls r0, r1, 4
- ldr r2, [r2]
- adds r2, r0
- lsls r0, r4, 1
- strh r0, [r2, 0x8]
- lsls r0, r6, 6
- add r0, r8
- mov r4, r10
- lsls r1, r4, 1
- adds r0, r1
- str r0, [r2, 0x4]
- lsls r0, r3, 6
- add r0, r9
- mov r7, r12
- lsls r1, r7, 1
- adds r0, r1
- str r0, [r2]
- strh r5, [r2, 0xA]
- ldr r0, _0809D0A8 @ =sub_809D0BC
- str r0, [r2, 0xC]
- movs r0, 0x1
- b _0809D0AE
- .align 2, 0
-_0809D0A4: .4byte gUnknown_020384EC
-_0809D0A8: .4byte sub_809D0BC
-_0809D0AC:
- movs r0, 0
-_0809D0AE:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_809D034
-
- thumb_func_start sub_809D0BC
-sub_809D0BC: @ 809D0BC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r6, [r0]
- ldr r5, [r0, 0x4]
- ldrh r7, [r0, 0xA]
- ldrh r2, [r0, 0x8]
- movs r4, 0
- cmp r4, r7
- bcs _0809D0F2
- lsrs r2, 1
- mov r8, r2
- ldr r0, _0809D100 @ =0x001fffff
- mov r9, r0
-_0809D0DA:
- adds r0, r6, 0
- adds r1, r5, 0
- mov r2, r8
- mov r3, r9
- ands r2, r3
- bl CpuSet
- adds r5, 0x40
- adds r6, 0x40
- adds r4, 0x1
- cmp r4, r7
- bcc _0809D0DA
-_0809D0F2:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809D100: .4byte 0x001fffff
- thumb_func_end sub_809D0BC
-
- thumb_func_start sub_809D104
-sub_809D104: @ 809D104
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r5, [sp, 0x18]
- ldr r4, [sp, 0x1C]
- ldr r6, [sp, 0x20]
- mov r8, r6
- ldr r6, [sp, 0x24]
- lsls r1, 16
- lsls r2, 16
- lsrs r2, 16
- lsls r5, 16
- lsls r4, 16
- mov r7, r8
- lsls r7, 16
- lsls r6, 16
- lsrs r6, 16
- lsrs r4, 10
- adds r3, r4
- lsrs r5, 15
- adds r5, r3, r5
- lsls r3, r2, 6
- adds r3, r0, r3
- lsrs r1, 15
- adds r4, r3, r1
- adds r2, r6
- lsls r2, 6
- adds r6, r0, r2
- lsrs r2, r7, 15
- cmp r4, r6
- bcs _0809D15C
- lsrs r7, r2, 1
- ldr r0, _0809D168 @ =0x001fffff
- mov r8, r0
-_0809D148:
- adds r0, r5, 0
- adds r1, r4, 0
- mov r2, r8
- ands r2, r7
- bl CpuSet
- adds r4, 0x40
- adds r5, 0x40
- cmp r4, r6
- bcc _0809D148
-_0809D15C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809D168: .4byte 0x001fffff
- thumb_func_end sub_809D104
-
- thumb_func_start sub_809D16C
-sub_809D16C: @ 809D16C
- push {r4-r7,lr}
- mov r12, r0
- ldr r0, [sp, 0x14]
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 16
- lsrs r4, r2, 16
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, _0809D1B4 @ =gUnknown_020384EC
- ldr r1, [r0]
- ldrb r0, [r1, 0x4]
- adds r2, r0, 0
- ldrb r7, [r1, 0x5]
- cmp r2, r7
- bcs _0809D1BC
- adds r0, 0x1
- strb r0, [r1, 0x4]
- lsls r0, r2, 4
- ldr r1, [r1]
- adds r1, r0
- lsls r0, r3, 1
- strh r0, [r1, 0x8]
- lsls r0, r4, 5
- adds r0, r6
- lsls r0, 1
- add r0, r12
- str r0, [r1, 0x4]
- strh r5, [r1, 0xA]
- ldr r0, _0809D1B8 @ =sub_809D1C4
- str r0, [r1, 0xC]
- movs r0, 0x1
- b _0809D1BE
- .align 2, 0
-_0809D1B4: .4byte gUnknown_020384EC
-_0809D1B8: .4byte sub_809D1C4
-_0809D1BC:
- movs r0, 0
-_0809D1BE:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_809D16C
-
- thumb_func_start sub_809D1C4
-sub_809D1C4: @ 809D1C4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r6, r0, 0
- movs r0, 0
- ldrh r1, [r6, 0xA]
- cmp r0, r1
- bcs _0809D252
- movs r7, 0x80
- lsls r7, 5
- mov r5, sp
- ldr r2, _0809D210 @ =0x040000d4
- mov r8, r2
- movs r1, 0x81
- lsls r1, 24
- mov r10, r1
-_0809D1EA:
- ldr r2, [r6, 0x4]
- ldrh r3, [r6, 0x8]
- mov r12, r2
- adds r0, 0x1
- mov r9, r0
- cmp r3, r7
- bhi _0809D214
- movs r0, 0
- strh r0, [r5]
- mov r2, sp
- mov r0, r8
- str r2, [r0]
- mov r1, r12
- str r1, [r0, 0x4]
- lsrs r0, r3, 1
- mov r2, r10
- orrs r0, r2
- mov r1, r8
- b _0809D23C
- .align 2, 0
-_0809D210: .4byte 0x040000d4
-_0809D214:
- movs r4, 0
- strh r4, [r5]
- ldr r1, _0809D264 @ =0x040000d4
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- ldr r0, _0809D268 @ =0x81000800
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r7
- subs r3, r7
- cmp r3, r7
- bhi _0809D214
- strh r4, [r5]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 1
- mov r2, r10
- orrs r0, r2
-_0809D23C:
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- mov r0, r12
- adds r0, 0x40
- str r0, [r6, 0x4]
- mov r1, r9
- lsls r0, r1, 16
- lsrs r0, 16
- ldrh r2, [r6, 0xA]
- cmp r0, r2
- bcc _0809D1EA
-_0809D252:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809D264: .4byte 0x040000d4
-_0809D268: .4byte 0x81000800
- thumb_func_end sub_809D1C4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h
index 9c8fbdc13..735b7f4f9 100644
--- a/include/pokemon_storage_system.h
+++ b/include/pokemon_storage_system.h
@@ -40,19 +40,30 @@ enum {
PC_TEXT_FMT_MON_NAME_AFTER_EXCL_MARK
};
+struct PokemonStorageSystemFunc
+{
+ u8 (*func)(void);
+ s8 unk4;
+};
+
struct StorageAction {
const u8 *text;
u8 format;
};
+struct StorageText {
+ const u8 *text;
+ int textId;
+};
+
struct PSS_MenuStringPtrs {
const u8 *text;
const u8 *desc;
};
struct UnkStruct_2000028 {
- void *unk_00;
- void *unk_04;
+ const u8 *unk_00;
+ u8 *unk_04;
u16 unk_08;
u16 unk_0a;
void (*unk_0c)(struct UnkStruct_2000028 *data);
@@ -88,7 +99,7 @@ struct PokemonStorageSystemData {
struct PCScreenEffectStruct unk_000c;
struct UnkStruct_2000020 unk_0020;
struct UnkStruct_2000028 unk_0028[8];
- u16 unk_00a8[0x400];
+ u8 unk_00a8[0x800];
u16 unk_08a8;
u16 unk_08aa;
u8 unk_08ac;
@@ -142,7 +153,14 @@ struct PokemonStorageSystemData {
s8 unk_117b;
u8 unk_117c;
u8 unk_117d;
- u8 filler_117e[0x42];
+ u8 filler_117e[2];
+ struct StorageText unk_1180[6];
+ u8 filler_11b0[8];
+ u8 unk_11b8;
+ u8 unk_11b9;
+ u16 unk_11ba;
+ u16 unk_11bc;
+ u8 filler_11be;
struct Sprite *unk_11c0;
struct Sprite *unk_11c4;
s32 unk_11c8;
@@ -158,7 +176,7 @@ struct PokemonStorageSystemData {
u8 unk_11e1;
u8 unk_11e2;
u8 unk_11e3;
- u8 filler_11e4[4];
+ u8 unk_11e4[4];
const u8 *unk_11e8;
u32 unk_11ec;
u16 unk_11f0;
@@ -213,7 +231,7 @@ struct PokemonStorageSystemData {
u8 unk_4784[0x800];
};
-extern u16 gUnknown_02039760[0x600];
+extern u8 gUnknown_02039760[0xC00];
extern struct UnkPSSStruct_2002370 *gUnknown_02038478;
extern struct PokemonStorageSystemData *const gPokemonStorageSystemPtr;
extern u8 *const gUnknown_083B6DB8;
@@ -295,9 +313,9 @@ void sub_809CE84(void);
s16 sub_809CF30(void);
void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000028 *a1, u8 a2);
void sub_809CFF0(void);
-void sub_809D034(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height);
-void sub_809D104(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height);
-void sub_809D16C(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height);
+bool8 sub_809D034(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height);
+void sub_809D104(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height);
+bool8 sub_809D16C(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height);
void ShowPokemonStorageSystem(void);
void debug_sub_80A433C(struct Pokemon *pokemon, void (*func)(void));
diff --git a/ld_script.txt b/ld_script.txt
index cf238d12c..914a546b1 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -134,7 +134,6 @@ SECTIONS {
src/pokemon_storage_system_3.o(.text);
src/pokemon_storage_system_4.o(.text);
src/pokemon_storage_system_5.o(.text);
- asm/pokemon_storage_system.o(.text);
src/pokemon_icon.o(.text);
src/pokemon_summary_screen.o(.text);
src/script_movement.o(.text);
diff --git a/src/pokemon_storage_system_2.c b/src/pokemon_storage_system_2.c
index 2cd1a59c6..6ebb8ff8a 100644
--- a/src/pokemon_storage_system_2.c
+++ b/src/pokemon_storage_system_2.c
@@ -337,7 +337,7 @@ void debug_sub_80A4300(void)
extern void (*unk_2038794)(void);
extern struct Pokemon * unk_2038798;
-extern void debug_sub_809CB94(struct Pokemon *);
+extern void sub_809CB94(struct Pokemon *);
void debug_sub_80A433C(struct Pokemon * a, void (*b)(void))
{
@@ -351,7 +351,7 @@ void debug_sub_80A435C(void)
switch (gPokemonStorageSystemPtr->unk_0004)
{
case 0:
- debug_sub_809CB94(unk_2038798);
+ sub_809CB94(unk_2038798);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
gPokemonStorageSystemPtr->unk_0004++;
break;
diff --git a/src/pokemon_storage_system_5.c b/src/pokemon_storage_system_5.c
index b7c3d42f5..8848800ab 100644
--- a/src/pokemon_storage_system_5.c
+++ b/src/pokemon_storage_system_5.c
@@ -1,16 +1,775 @@
-
-// Includes
#include "global.h"
+#include "main.h"
+#include "menu.h"
#include "pokemon_storage_system.h"
+#include "sound.h"
+
+EWRAM_DATA struct UnkStruct_2000020 *gUnknown_020384EC = NULL;
-// Static type declarations
+extern s8 gUnknown_020384E4;
+extern s8 gUnknown_020384E5;
+extern bool8 gUnknown_020384E6;
+extern u8 gUnknown_020384E9;
-// Static RAM declarations
+#if DEBUG
+extern u8 unk_2038790;
+#endif
-EWRAM_DATA struct UnkStruct_2000020 *gUnknown_020384EC = NULL;
+extern const struct SpriteSheet gHandCursorSpriteSheets[3];
+extern const struct SpritePalette gHandCursorSpritePalettes[3];
+extern const struct SpriteTemplate gSpriteTemplate_83BBC70;
+extern const struct SpriteTemplate gSpriteTemplate_83BBC88;
+extern const u8 *const gUnknown_083BBCA0[];
+
+extern struct PokemonStorageSystemFunc gUnknown_083BBBD4[];
+
+void sub_809AF18(u8 a0, u8 a1);
+void sub_809CA8C(void);
+void sub_809CD88(void);
+u16 sub_809AB8C(void);
+void sub_809AACC(u8 a0, u8 a1, u16 *a2, u16 *a3);
+void sub_809D0BC(struct UnkStruct_2000028*);
+void sub_809D1C4(struct UnkStruct_2000028*);
+
+u8 sub_809C85C(void)
+{
+ u8 retVal;
+ s8 var0;
+ register s8 var1 asm("r5"); // FAKEMATCHING: r5 and r6 become swapped without this register hack
+
+ gPokemonStorageSystemPtr->unk_11df = 0;
+ gPokemonStorageSystemPtr->unk_11de = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 0;
+
+ if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ {
+ if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ retVal = 1;
+ var0 = 0;
+ var1 = 2;
+ }
+ else
+ {
+ if (gMain.heldKeys & DPAD_LEFT)
+ return 10;
+ if (gMain.heldKeys & DPAD_RIGHT)
+ return 9;
+ if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ {
+ if (gMain.heldKeys & L_BUTTON)
+ return 10;
+ if (gMain.heldKeys & R_BUTTON)
+ return 9;
+ }
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ sub_809A860(0);
+ sub_809CA8C();
+ return 7;
+ }
+
+ if (gMain.newKeys & B_BUTTON)
+ return 16;
+
+ if (gMain.newKeys & SELECT_BUTTON)
+ {
+ sub_809CD88();
+ return 0;
+ }
+
+ retVal = 0;
+ }
+ }
+ else
+ {
+ retVal = 1;
+ var0 = 3;
+ var1 = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 1;
+ }
+
+ if (retVal)
+ {
+ if (var0 != 2)
+ sub_809A860(0);
+ sub_809AF18(var0, var1);
+ return retVal;
+ }
+
+ return retVal;
+}
+
+#ifdef NONMATCHING
+u8 sub_809C944(void)
+{
+ u8 r6;
+ s8 var0 = gUnknown_020384E4;
+ s8 var1 = gUnknown_020384E5;
+
+ gPokemonStorageSystemPtr->unk_11df = 0;
+ gPokemonStorageSystemPtr->unk_11de = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 0;
+
+ if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ {
+ if (gMain.newAndRepeatedKeys & (DPAD_DOWN | START_BUTTON))
+ {
+ r6 = 1;
+ var0 = 2;
+ var1 = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 1;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ {
+ r6 = 1;
+ var1 -= 1;
+ if (var1 < 0)
+ {
+ gPokemonStorageSystemPtr->unk_11df = -1;
+ var1 = 1;
+ }
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ {
+ r6 = 1;
+ var1 += 1;
+ if (var1 > 1)
+ {
+ gPokemonStorageSystemPtr->unk_11df = 1;
+ var1 = 0;
+ }
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ return var1 == 0 ? 5 : 4;
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ return 16;
+ }
+ else if (gMain.newKeys & SELECT_BUTTON)
+ {
+ sub_809CD88();
+ return 0;
+ }
+ else
+ {
+ r6 = 0;
+ }
+ }
+ else
+ {
+ r6 = 1;
+ var0 = 0;
+ gPokemonStorageSystemPtr->unk_11de = -1;
+ var1 = !gUnknown_020384E5 ? 24 : 29;
+ gPokemonStorageSystemPtr->unk_11e3 = 1;
+ }
+
+ if (r6)
+ {
+ sub_809AF18(var0, var1);
+ }
+
+ return r6;
+}
+#else
+NAKED
+u8 sub_809C944(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ ldr r0, _0809C988 @ =gUnknown_020384E4\n\
+ ldrb r0, [r0]\n\
+ mov r12, r0\n\
+ ldr r7, _0809C98C @ =gUnknown_020384E5\n\
+ ldrb r3, [r7]\n\
+ ldr r0, _0809C990 @ =gPokemonStorageSystemPtr\n\
+ ldr r1, [r0]\n\
+ ldr r0, _0809C994 @ =0x000011df\n\
+ adds r5, r1, r0\n\
+ movs r0, 0\n\
+ strb r0, [r5]\n\
+ ldr r2, _0809C998 @ =0x000011de\n\
+ adds r4, r1, r2\n\
+ strb r0, [r4]\n\
+ adds r2, 0x5\n\
+ adds r1, r2\n\
+ strb r0, [r1]\n\
+ ldr r6, _0809C99C @ =gMain\n\
+ ldrh r2, [r6, 0x30]\n\
+ movs r0, 0x40\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ bne _0809CA14\n\
+ movs r0, 0x88\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _0809C9A0\n\
+ movs r6, 0x1\n\
+ movs r0, 0x2\n\
+ mov r12, r0\n\
+ movs r3, 0\n\
+ b _0809CA2A\n\
+ .align 2, 0\n\
+_0809C988: .4byte gUnknown_020384E4\n\
+_0809C98C: .4byte gUnknown_020384E5\n\
+_0809C990: .4byte gPokemonStorageSystemPtr\n\
+_0809C994: .4byte 0x000011df\n\
+_0809C998: .4byte 0x000011de\n\
+_0809C99C: .4byte gMain\n\
+_0809C9A0:\n\
+ movs r0, 0x20\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _0809C9C0\n\
+ movs r6, 0x1\n\
+ lsls r0, r3, 24\n\
+ movs r1, 0xFF\n\
+ lsls r1, 24\n\
+ adds r0, r1\n\
+ lsrs r3, r0, 24\n\
+ cmp r0, 0\n\
+ bge _0809CA2C\n\
+ movs r0, 0xFF\n\
+ strb r0, [r5]\n\
+ movs r3, 0x1\n\
+ b _0809CA2C\n\
+_0809C9C0:\n\
+ movs r0, 0x10\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _0809C9E0\n\
+ movs r6, 0x1\n\
+ lsls r0, r3, 24\n\
+ movs r2, 0x80\n\
+ lsls r2, 17\n\
+ adds r0, r2\n\
+ lsrs r3, r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0x1\n\
+ ble _0809CA2C\n\
+ strb r6, [r5]\n\
+ movs r3, 0\n\
+ b _0809CA2C\n\
+_0809C9E0:\n\
+ ldrh r1, [r6, 0x2E]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0809C9F4\n\
+ movs r0, 0x4\n\
+ cmp r3, 0\n\
+ bne _0809CA3A\n\
+ movs r0, 0x5\n\
+ b _0809CA3A\n\
+_0809C9F4:\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0809CA00\n\
+ movs r0, 0x10\n\
+ b _0809CA3A\n\
+_0809CA00:\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0809CA10\n\
+ bl sub_809CD88\n\
+ movs r0, 0\n\
+ b _0809CA3A\n\
+_0809CA10:\n\
+ movs r6, 0\n\
+ b _0809CA38\n\
+_0809CA14:\n\
+ movs r6, 0x1\n\
+ movs r0, 0\n\
+ mov r12, r0\n\
+ movs r0, 0xFF\n\
+ strb r0, [r4]\n\
+ movs r0, 0\n\
+ ldrsb r0, [r7, r0]\n\
+ movs r3, 0x1D\n\
+ cmp r0, 0\n\
+ bne _0809CA2A\n\
+ movs r3, 0x18\n\
+_0809CA2A:\n\
+ strb r6, [r1]\n\
+_0809CA2C:\n\
+ cmp r6, 0\n\
+ beq _0809CA38\n\
+ mov r0, r12\n\
+ adds r1, r3, 0\n\
+ bl sub_809AF18\n\
+_0809CA38:\n\
+ adds r0, r6, 0\n\
+_0809CA3A:\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+u8 sub_809CA40(void)
+{
+ u16 i = 0;
+ while (gUnknown_083BBBD4[i].func != NULL)
+ {
+ if (gUnknown_083BBBD4[i].unk4 == gUnknown_020384E4)
+ return gUnknown_083BBBD4[i].func();
+ i++;
+ }
+
+ return 0;
+}
+
+void sub_809CA8C(void)
+{
+ sub_809CDCC();
+ sub_809CDEC(9);
+ sub_809CDEC(10);
+ sub_809CDEC(11);
+ sub_809CDEC(0);
+}
+
+#if DEBUG
+u8 debug_sub_80AA40C(void)
+{
+ if (sub_809AB8C())
+ {
+ sub_809CDCC();
+ sub_809CDEC(32);
+ sub_809CDEC(6);
+ return 1;
+ }
+
+ return 0;
+}
+#endif
+
+bool8 sub_809CAB0(void)
+{
+ u16 var0;
+
+#if DEBUG
+ if (unk_2038790)
+ return debug_sub_80AA40C();
+#endif
+
+ sub_809CDCC();
+ var0 = sub_809AB8C();
+
+ switch (gPokemonStorageSystemPtr->unk_0005)
+ {
+ case 1:
+ if (var0)
+ sub_809CDEC(1);
+ else
+ return 0;
+ break;
+ case 0:
+ if (var0)
+ sub_809CDEC(2);
+ else
+ return 0;
+ break;
+ case 2:
+ if (gUnknown_020384E6)
+ {
+ if (var0)
+ sub_809CDEC(4);
+ else
+ sub_809CDEC(5);
+ }
+ else
+ {
+ if (var0)
+ sub_809CDEC(3);
+ else
+ return 0;
+ }
+ break;
+ default:
+ return 0;
+ }
+
+ sub_809CDEC(6);
+ if (gPokemonStorageSystemPtr->unk_0005 == 2)
+ {
+ if (!gUnknown_020384E4)
+ sub_809CDEC(2);
+ else
+ sub_809CDEC(1);
+ }
+
+ sub_809CDEC(8);
+ sub_809CDEC(7);
+ sub_809CDEC(0);
+ return 1;
+}
+
+void sub_809CB74(struct Sprite *sprite)
+{
+ sprite->pos1.x = gPokemonStorageSystemPtr->unk_11c0->pos1.x;
+ sprite->pos1.y = gPokemonStorageSystemPtr->unk_11c0->pos1.y + 20;
+}
+
+void sub_809CB94(struct Pokemon *mon)
+{
+ if (gUnknown_020384E4 == 1)
+ {
+ mon->box = gPlayerParty[gUnknown_020384E5].box;
+ }
+ else
+ {
+ u8 boxId = get_preferred_box();
+ mon->box = gPokemonStorage.boxes[boxId][gUnknown_020384E5];
+ }
+}
+
+void sub_809CC04(void)
+{
+ u16 x, y;
+ u8 spriteId;
+ int priority, subpriority;
+ struct SpriteSheet spriteSheets[3];
+ struct SpritePalette spritePalettes[3];
+
+ memcpy(spriteSheets, gHandCursorSpriteSheets, 24);
+ memcpy(spritePalettes, gHandCursorSpritePalettes, 24);
+ LoadSpriteSheets(spriteSheets);
+ LoadSpritePalettes(spritePalettes);
+ gPokemonStorageSystemPtr->unk_11e4[0] = IndexOfSpritePaletteTag(0xDAC6);
+ gPokemonStorageSystemPtr->unk_11e4[1] = IndexOfSpritePaletteTag(0xDAD1);
+
+ sub_809AACC(gUnknown_020384E4, gUnknown_020384E5, &x, &y);
+ spriteId = CreateSprite(&gSpriteTemplate_83BBC70, x, y, 6);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPokemonStorageSystemPtr->unk_11c0 = &gSprites[spriteId];
+ gPokemonStorageSystemPtr->unk_11c0->oam.paletteNum = gPokemonStorageSystemPtr->unk_11e4[gUnknown_020384E9];
+ if (gUnknown_020384E6)
+ StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 3);
+ }
+ else
+ {
+ gPokemonStorageSystemPtr->unk_11c0 = NULL;
+ }
+
+ if (gUnknown_020384E4 == 1)
+ {
+ subpriority = 12;
+ priority = 1;
+ }
+ else
+ {
+ subpriority = 20;
+ priority = 2;
+ }
+
+ spriteId = CreateSprite(&gSpriteTemplate_83BBC88, 0, 0, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ gPokemonStorageSystemPtr->unk_11c4 = &gSprites[spriteId];
+ gPokemonStorageSystemPtr->unk_11c4->oam.priority = priority;
+ if (gUnknown_020384E4)
+ gPokemonStorageSystemPtr->unk_11c4->invisible = 1;
+ }
+ else
+ {
+ gPokemonStorageSystemPtr->unk_11c4 = NULL;
+ }
+}
+
+void sub_809CD88(void)
+{
+ gUnknown_020384E9 = !gUnknown_020384E9;
+ gPokemonStorageSystemPtr->unk_11c0->oam.paletteNum = gPokemonStorageSystemPtr->unk_11e4[gUnknown_020384E9];
+}
+
+void sub_809CDCC(void)
+{
+ gPokemonStorageSystemPtr->unk_11b8 = 0;
+ gPokemonStorageSystemPtr->unk_11b9 = 0;
+}
+
+void sub_809CDEC(u8 arg0)
+{
+ u8 width;
+ u8 var0;
+
+ if (gPokemonStorageSystemPtr->unk_11b8 < 7)
+ {
+ struct StorageText *storageText = &gPokemonStorageSystemPtr->unk_1180[gPokemonStorageSystemPtr->unk_11b8];
+ storageText->text = gUnknown_083BBCA0[arg0];
+ storageText->textId = arg0;
+ width = GetStringWidthInMenuWindow(storageText->text);
+ var0 = (width + 7) / 8;
+ if (var0 > gPokemonStorageSystemPtr->unk_11b9)
+ gPokemonStorageSystemPtr->unk_11b9 = var0;
+
+ gPokemonStorageSystemPtr->unk_11b8++;
+ }
+}
+
+s8 sub_809CE4C(u8 arg0)
+{
+ if (arg0 >= gPokemonStorageSystemPtr->unk_11b8)
+ return -1;
+ else
+ return gPokemonStorageSystemPtr->unk_1180[arg0].textId;
+}
+
+void sub_809CE84(void)
+{
+ gPokemonStorageSystemPtr->unk_11bc = 14 - gPokemonStorageSystemPtr->unk_11b8 * 2;
+ gPokemonStorageSystemPtr->unk_11ba = 28 - gPokemonStorageSystemPtr->unk_11b9;
+ Menu_DrawStdWindowFrame(gPokemonStorageSystemPtr->unk_11ba, gPokemonStorageSystemPtr->unk_11bc, 29, 15);
+ Menu_PrintItems(
+ gPokemonStorageSystemPtr->unk_11ba + 1,
+ gPokemonStorageSystemPtr->unk_11bc + 1,
+ gPokemonStorageSystemPtr->unk_11b8,
+ gPokemonStorageSystemPtr->unk_1180);
+ InitMenu(
+ 0,
+ gPokemonStorageSystemPtr->unk_11ba + 1,
+ gPokemonStorageSystemPtr->unk_11bc + 1,
+ gPokemonStorageSystemPtr->unk_11b8,
+ 0,
+ gPokemonStorageSystemPtr->unk_11b9);
+}
+
+#ifdef NONMATCHING // r4 and r5 are swapped throughout the entire function.
+s16 sub_809CF30(void)
+{
+ int textId = -2;
+
+ if (!(gMain.newKeys & A_BUTTON))
+ {
+ if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(5);
+ textId++;
+ }
+
+ if (gMain.newKeys & DPAD_UP)
+ {
+ PlaySE(5);
+ Menu_MoveCursor(-1);
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ PlaySE(5);
+ Menu_MoveCursor(1);
+ }
+ }
+ else
+ {
+ textId = Menu_GetCursorPos();
+ }
+
+ if (textId != -2)
+ {
+ Menu_DestroyCursor();
+ Menu_EraseWindowRect(
+ gPokemonStorageSystemPtr->unk_11ba,
+ gPokemonStorageSystemPtr->unk_11bc,
+ 29,
+ 15);
+ }
+
+ if (textId >= 0)
+ {
+ textId = gPokemonStorageSystemPtr->unk_1180[textId].textId;
+ }
+
+ return textId;
+}
+#else
+NAKED
+s16 sub_809CF30(void)
+{
+ asm(".syntax unified\n\
+ push {r4,r5,lr}\n\
+ movs r5, 0x2\n\
+ negs r5, r5\n\
+ ldr r4, _0809CF6C @ =gMain\n\
+ ldrh r1, [r4, 0x2E]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0809CF86\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0809CF52\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ adds r5, 0x1\n\
+_0809CF52:\n\
+ ldrh r1, [r4, 0x2E]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0809CF70\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ bl Menu_MoveCursor\n\
+ b _0809CF8E\n\
+ .align 2, 0\n\
+_0809CF6C: .4byte gMain\n\
+_0809CF70:\n\
+ movs r0, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0809CF8E\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0x1\n\
+ bl Menu_MoveCursor\n\
+ b _0809CF8E\n\
+_0809CF86:\n\
+ bl Menu_GetCursorPos\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+_0809CF8E:\n\
+ movs r0, 0x2\n\
+ negs r0, r0\n\
+ cmp r5, r0\n\
+ beq _0809CFB2\n\
+ bl Menu_DestroyCursor\n\
+ ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr\n\
+ ldr r1, [r0]\n\
+ ldr r2, _0809CFD4 @ =0x000011ba\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ adds r2, 0x2\n\
+ adds r1, r2\n\
+ ldrb r1, [r1]\n\
+ movs r2, 0x1D\n\
+ movs r3, 0xF\n\
+ bl Menu_EraseWindowRect\n\
+_0809CFB2:\n\
+ cmp r5, 0\n\
+ blt _0809CFC4\n\
+ ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr\n\
+ ldr r0, [r0]\n\
+ lsls r1, r5, 3\n\
+ ldr r2, _0809CFD8 @ =0x00001184\n\
+ adds r0, r2\n\
+ adds r0, r1\n\
+ ldr r5, [r0]\n\
+_0809CFC4:\n\
+ lsls r0, r5, 16\n\
+ asrs r0, 16\n\
+ pop {r4,r5}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_0809CFD0: .4byte gPokemonStorageSystemPtr\n\
+_0809CFD4: .4byte 0x000011ba\n\
+_0809CFD8: .4byte 0x00001184\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void sub_809CFDC(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u8 arg2)
+{
+ gUnknown_020384EC = arg0;
+ arg0->unk_00 = arg1;
+ arg0->unk_05 = arg2;
+ arg0->unk_04 = 0;
+}
+
+void sub_809CFF0(void)
+{
+ u16 i;
+ struct UnkStruct_2000028 *unkStruct;
+
+ if (gUnknown_020384EC->unk_04)
+ {
+ for (i = 0; i < gUnknown_020384EC->unk_04; i++)
+ {
+ unkStruct = &gUnknown_020384EC->unk_00[i];
+ unkStruct->unk_0c(unkStruct);
+ }
+
+ gUnknown_020384EC->unk_04 = 0;
+ }
+}
+
+bool8 sub_809D034(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height)
+{
+ struct UnkStruct_2000028 *unkStruct;
+
+ if (gUnknown_020384EC->unk_04 >= gUnknown_020384EC->unk_05)
+ return FALSE;
+
+ unkStruct = &gUnknown_020384EC->unk_00[gUnknown_020384EC->unk_04++];
+ unkStruct->unk_08 = width * 2;
+ unkStruct->unk_04 = dest + (dTop * 64) + (dLeft * 2);
+ unkStruct->unk_00 = src + (sTop * 64) + (sLeft * 2);
+ unkStruct->unk_0a = height;
+ unkStruct->unk_0c = sub_809D0BC;
+ return TRUE;
+}
+
+void sub_809D0BC(struct UnkStruct_2000028 *unkStruct)
+{
+ u32 i;
+ const u8 *src = unkStruct->unk_00;
+ u8 *dest = unkStruct->unk_04;
+ int height = unkStruct->unk_0a;
+ int width = unkStruct->unk_08;
+ for (i = 0; i < height; i++)
+ {
+ CpuSet(src, dest, (width / 2) & 0x1FFFFF);
+ dest += 64;
+ src += 64;
+ }
+}
+
+void sub_809D104(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sTop, u16 width, u16 height)
+{
+ const u8 *from = src + (sTop * 64) + (sLeft * 2);
+ u8 *to = dest + (dTop * 64) + (dLeft * 2);
+ u8 *end = dest + (dTop + height) * 64;
+ int width2 = width * 2;
+ while (to < end)
+ {
+ CpuSet(from, to, (width2 / 2) & 0x1FFFFF);
+ to += 64;
+ from += 64;
+ }
+}
+
+bool8 sub_809D16C(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height)
+{
+ struct UnkStruct_2000028 *unkStruct;
+
+ if (gUnknown_020384EC->unk_04 >= gUnknown_020384EC->unk_05)
+ return FALSE;
-// Static ROM declarations
+ unkStruct = &gUnknown_020384EC->unk_00[gUnknown_020384EC->unk_04++];
+ unkStruct->unk_08 = width * 2;
+ unkStruct->unk_04 = dest + ((dTop * 32) + dLeft) * 2;
+ unkStruct->unk_0a = height;
+ unkStruct->unk_0c = sub_809D1C4;
+ return TRUE;
+}
-// .rodata
+void sub_809D1C4(struct UnkStruct_2000028 *unkStruct)
+{
+ u16 i;
-// .text
+ for (i = 0; i < unkStruct->unk_0a; i++)
+ {
+ Dma3FillLarge_(0, unkStruct->unk_04, unkStruct->unk_08, 16);
+ unkStruct->unk_04 += 64;
+ }
+}
diff --git a/src/pokenav_before.c b/src/pokenav_before.c
index 49df4863e..21394f348 100644
--- a/src/pokenav_before.c
+++ b/src/pokenav_before.c
@@ -19,6 +19,7 @@
#include "task.h"
#include "text.h"
#include "scanline_effect.h"
+#include "pokemon_storage_system.h"
struct UnknownPokenav0
{
@@ -189,7 +190,6 @@ extern void sub_80EFC3C(void);
extern void sub_80EF624(const u16 *, const u16 *, u8, u8, u16 *);
extern void sub_80EF7D4(void);
extern void sub_80EF54C(u8);
-extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16);
extern void sub_80EF58C(u8);
extern void sub_80F6FFC();
extern void sub_80F3294();