summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-03-14 20:37:48 -0400
committerPikalaxALT <PikalaxALT@gmail.com>2020-03-14 20:37:48 -0400
commit5471590f77ab4d8b9684c6ea4b3d9e870a83633b (patch)
tree8fb895d92d5a3a0f553e6f6c93b5e2fbd85b247d
parent8faf63a97c7550778bc06414a12f6435fb885a35 (diff)
through RunCanReleaseMon
-rw-r--r--asm/pokemon_storage_system.s2500
-rw-r--r--data/pokemon_storage_system.s14
-rw-r--r--include/pokemon_storage_system.h6
-rw-r--r--include/pokemon_storage_system_internal.h33
-rw-r--r--src/pokemon_storage_system.c2
-rw-r--r--src/pokemon_storage_system_5.c820
-rw-r--r--sym_ewram.txt26
7 files changed, 857 insertions, 2544 deletions
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index 4985ec0b0..bf7e54b2b 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -5,2492 +5,6 @@
.text
- @ file boundary?
-
- thumb_func_start sub_80922C0
-sub_80922C0: @ 80922C0
- push {lr}
- ldr r0, _080922D4 @ =sPSSData
- ldr r0, [r0]
- ldrb r1, [r0, 0x1]
- cmp r1, 0x1
- beq _080922DC
- ldr r1, _080922D8 @ =sBoxCursorArea
- movs r0, 0
- strb r0, [r1]
- b _080922E0
- .align 2, 0
-_080922D4: .4byte sPSSData
-_080922D8: .4byte sBoxCursorArea
-_080922DC:
- ldr r0, _0809231C @ =sBoxCursorArea
- strb r1, [r0]
-_080922E0:
- ldr r0, _08092320 @ =sBoxCursorPosition
- movs r1, 0
- strb r1, [r0]
- ldr r0, _08092324 @ =sIsMonBeingMoved
- strb r1, [r0]
- ldr r0, _08092328 @ =sMovingMonOrigBoxId
- strb r1, [r0]
- ldr r0, _0809232C @ =sMovingMonOrigBoxPos
- strb r1, [r0]
- ldr r0, _08092330 @ =sCanOnlyMove
- strb r1, [r0]
- bl sub_8092B50
- bl sub_8094AD8
- ldr r2, _08092334 @ =sPSSData
- ldr r0, [r2]
- ldr r1, _08092338 @ =0x00000cd2
- adds r0, r1
- movs r3, 0
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, [r2]
- ldr r1, _0809233C @ =0x000021ef
- adds r0, r1
- strb r3, [r0]
- bl sub_8093A10
- pop {r0}
- bx r0
- .align 2, 0
-_0809231C: .4byte sBoxCursorArea
-_08092320: .4byte sBoxCursorPosition
-_08092324: .4byte sIsMonBeingMoved
-_08092328: .4byte sMovingMonOrigBoxId
-_0809232C: .4byte sMovingMonOrigBoxPos
-_08092330: .4byte sCanOnlyMove
-_08092334: .4byte sPSSData
-_08092338: .4byte 0x00000cd2
-_0809233C: .4byte 0x000021ef
- thumb_func_end sub_80922C0
-
- thumb_func_start sub_8092340
-sub_8092340: @ 8092340
- push {lr}
- bl sub_8094AD8
- bl sub_8093AAC
- ldr r3, _08092380 @ =sPSSData
- ldr r0, [r3]
- ldr r1, _08092384 @ =0x00000cd2
- adds r0, r1
- movs r2, 0
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, [r3]
- ldr r1, _08092388 @ =0x000021ef
- adds r0, r1
- strb r2, [r0]
- ldr r0, _0809238C @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _0809237A
- ldr r0, [r3]
- ldr r1, _08092390 @ =0x000020a0
- adds r0, r1
- ldr r1, _08092394 @ =gUnknown_20397BC
- movs r2, 0x64
- bl memcpy
- bl CreateMovingMonIcon
-_0809237A:
- pop {r0}
- bx r0
- .align 2, 0
-_08092380: .4byte sPSSData
-_08092384: .4byte 0x00000cd2
-_08092388: .4byte 0x000021ef
-_0809238C: .4byte sIsMonBeingMoved
-_08092390: .4byte 0x000020a0
-_08092394: .4byte gUnknown_20397BC
- thumb_func_end sub_8092340
-
- thumb_func_start sub_8092398
-sub_8092398: @ 8092398
- push {r4-r6,lr}
- adds r4, r2, 0
- adds r6, r3, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- cmp r0, 0x4
- bhi _08092450
- lsls r0, 2
- ldr r1, _080923B4 @ =_080923B8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080923B4: .4byte _080923B8
- .align 2, 0
-_080923B8:
- .4byte _080923CC
- .4byte _080923FA
- .4byte _08092422
- .4byte _0809242A
- .4byte _08092448
-_080923CC:
- adds r0, r5, 0
- movs r1, 0x6
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 3
- adds r1, 0x64
- strh r1, [r4]
- adds r0, r5, 0
- movs r1, 0x6
- bl __udivsi3
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 3
- adds r1, 0x20
- strh r1, [r6]
- b _08092450
-_080923FA:
- cmp r5, 0
- bne _08092406
- movs r0, 0x68
- strh r0, [r4]
- movs r0, 0x34
- b _0809244E
-_08092406:
- cmp r5, 0x6
- bne _08092412
- movs r0, 0x98
- strh r0, [r4]
- movs r0, 0x84
- b _0809244E
-_08092412:
- movs r0, 0x98
- strh r0, [r4]
- subs r1, r5, 0x1
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r0, 0x4
- b _0809244E
-_08092422:
- movs r0, 0xA2
- strh r0, [r4]
- movs r0, 0xC
- b _0809244E
-_0809242A:
- ldr r0, _08092444 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- movs r1, 0xE
- cmp r0, 0
- beq _08092436
- movs r1, 0x8
-_08092436:
- strh r1, [r6]
- movs r0, 0x58
- muls r0, r5
- adds r0, 0x78
- strh r0, [r4]
- b _08092450
- .align 2, 0
-_08092444: .4byte sIsMonBeingMoved
-_08092448:
- movs r0, 0xA0
- strh r0, [r4]
- movs r0, 0x60
-_0809244E:
- strh r0, [r6]
-_08092450:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8092398
-
- thumb_func_start sub_8092458
-sub_8092458: @ 8092458
- push {lr}
- ldr r0, _08092480 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _0809248C
- cmp r0, 0x1
- bne _080924A0
- ldr r0, _08092484 @ =sBoxCursorPosition
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08092488 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- b _08092496
- .align 2, 0
-_08092480: .4byte sBoxCursorArea
-_08092484: .4byte sBoxCursorPosition
-_08092488: .4byte gPlayerParty
-_0809248C:
- ldr r0, _0809249C @ =sBoxCursorPosition
- ldrb r0, [r0]
- movs r1, 0xB
- bl GetCurrentBoxMonData
-_08092496:
- lsls r0, 16
- lsrs r0, 16
- b _080924A2
- .align 2, 0
-_0809249C: .4byte sBoxCursorPosition
-_080924A0:
- movs r0, 0
-_080924A2:
- pop {r1}
- bx r1
- thumb_func_end sub_8092458
-
- thumb_func_start sub_80924A8
-sub_80924A8: @ 80924A8
- push {r4-r7,lr}
- ldr r7, _080924C4 @ =sPSSData
- ldr r5, [r7]
- ldr r0, _080924C8 @ =0x00000ccc
- adds r1, r5, r0
- ldrh r0, [r1]
- cmp r0, 0
- bne _080924D6
- ldrb r0, [r5, 0x1]
- cmp r0, 0x3
- beq _080924CC
- movs r0, 0
- b _080925F4
- .align 2, 0
-_080924C4: .4byte sPSSData
-_080924C8: .4byte 0x00000ccc
-_080924CC:
- bl sub_809610C
- lsls r0, 24
- lsrs r0, 24
- b _080925F4
-_080924D6:
- subs r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- cmp r0, 0
- beq _080925D4
- ldr r1, _080925C4 @ =0x00000cb8
- adds r4, r5, r1
- movs r2, 0xCC
- lsls r2, 4
- adds r1, r5, r2
- ldr r0, [r4]
- ldr r1, [r1]
- adds r0, r1
- str r0, [r4]
- ldr r0, _080925C8 @ =0x00000cbc
- adds r3, r5, r0
- adds r2, 0x4
- adds r1, r5, r2
- ldr r0, [r3]
- ldr r1, [r1]
- adds r0, r1
- str r0, [r3]
- movs r6, 0xCB
- lsls r6, 4
- adds r1, r5, r6
- ldr r2, [r1]
- ldr r0, [r4]
- asrs r0, 8
- strh r0, [r2, 0x20]
- ldr r2, [r1]
- ldr r0, [r3]
- asrs r0, 8
- strh r0, [r2, 0x22]
- ldr r1, [r1]
- ldrh r2, [r1, 0x20]
- movs r3, 0x20
- ldrsh r0, [r1, r3]
- movs r3, 0x80
- lsls r3, 1
- cmp r0, r3
- ble _08092534
- ldr r4, _080925CC @ =0xffffff00
- adds r0, r2, r4
- lsls r0, 16
- asrs r0, 16
- adds r0, 0x40
- strh r0, [r1, 0x20]
-_08092534:
- ldr r0, [r7]
- adds r0, r6
- ldr r1, [r0]
- ldrh r2, [r1, 0x20]
- movs r4, 0x20
- ldrsh r0, [r1, r4]
- cmp r0, 0x3F
- bgt _08092550
- movs r0, 0x40
- subs r0, r2
- lsls r0, 16
- asrs r0, 16
- subs r0, r3, r0
- strh r0, [r1, 0x20]
-_08092550:
- ldr r0, [r7]
- adds r0, r6
- ldr r1, [r0]
- ldrh r2, [r1, 0x22]
- movs r3, 0x22
- ldrsh r0, [r1, r3]
- cmp r0, 0xB0
- ble _0809256C
- adds r0, r2, 0
- subs r0, 0xB0
- lsls r0, 16
- asrs r0, 16
- subs r0, 0x10
- strh r0, [r1, 0x22]
-_0809256C:
- ldr r0, [r7]
- adds r0, r6
- ldr r2, [r0]
- ldrh r3, [r2, 0x22]
- movs r4, 0x22
- ldrsh r0, [r2, r4]
- movs r1, 0x10
- negs r1, r1
- cmp r0, r1
- bge _0809258C
- subs r0, r1, r3
- movs r1, 0xB0
- lsls r0, 16
- asrs r0, 16
- subs r1, r0
- strh r1, [r2, 0x22]
-_0809258C:
- ldr r0, [r7]
- ldr r2, _080925D0 @ =0x00000cd3
- adds r1, r0, r2
- ldrb r0, [r1]
- cmp r0, 0
- beq _080925F2
- subs r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- cmp r0, 0
- bne _080925F2
- ldr r0, [r7]
- adds r0, r6
- ldr r2, [r0]
- adds r2, 0x3F
- ldrb r3, [r2]
- lsrs r1, r3, 1
- movs r0, 0x1
- eors r1, r0
- ands r1, r0
- lsls r1, 1
- movs r0, 0x3
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- b _080925F2
- .align 2, 0
-_080925C4: .4byte 0x00000cb8
-_080925C8: .4byte 0x00000cbc
-_080925CC: .4byte 0xffffff00
-_080925D0: .4byte 0x00000cd3
-_080925D4:
- movs r3, 0xCB
- lsls r3, 4
- adds r2, r5, r3
- ldr r1, [r2]
- ldr r4, _080925FC @ =0x00000cc8
- adds r0, r5, r4
- ldrh r0, [r0]
- strh r0, [r1, 0x20]
- ldr r1, [r2]
- ldr r2, _08092600 @ =0x00000cca
- adds r0, r5, r2
- ldrh r0, [r0]
- strh r0, [r1, 0x22]
- bl sub_80929B0
-_080925F2:
- movs r0, 0x1
-_080925F4:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080925FC: .4byte 0x00000cc8
-_08092600: .4byte 0x00000cca
- thumb_func_end sub_80924A8
-
- thumb_func_start sub_8092604
-sub_8092604: @ 8092604
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- mov r6, sp
- adds r6, 0x2
- adds r0, r4, 0
- adds r1, r5, 0
- mov r2, sp
- adds r3, r6, 0
- bl sub_8092398
- ldr r1, _08092654 @ =sPSSData
- ldr r0, [r1]
- movs r2, 0xCD
- lsls r2, 4
- adds r0, r2
- strb r4, [r0]
- ldr r0, [r1]
- ldr r3, _08092658 @ =0x00000cd1
- adds r0, r3
- strb r5, [r0]
- ldr r1, [r1]
- mov r0, sp
- ldrh r2, [r0]
- subs r3, 0x9
- adds r0, r1, r3
- strh r2, [r0]
- ldrh r0, [r6]
- ldr r2, _0809265C @ =0x00000cca
- adds r1, r2
- strh r0, [r1]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08092654: .4byte sPSSData
-_08092658: .4byte 0x00000cd1
-_0809265C: .4byte 0x00000cca
- thumb_func_end sub_8092604
-
- thumb_func_start sub_8092660
-sub_8092660: @ 8092660
- push {r4-r7,lr}
- ldr r0, _0809267C @ =sPSSData
- ldr r2, [r0]
- ldr r3, _08092680 @ =0x00000cce
- adds r1, r2, r3
- ldrh r1, [r1]
- adds r4, r0, 0
- cmp r1, 0
- beq _08092688
- ldr r0, _08092684 @ =0x00000ccc
- adds r1, r2, r0
- movs r0, 0xC
- b _0809268E
- .align 2, 0
-_0809267C: .4byte sPSSData
-_08092680: .4byte 0x00000cce
-_08092684: .4byte 0x00000ccc
-_08092688:
- ldr r3, _080926D4 @ =0x00000ccc
- adds r1, r2, r3
- movs r0, 0x6
-_0809268E:
- strh r0, [r1]
- ldr r1, [r4]
- ldr r0, _080926D8 @ =0x00000cd3
- adds r2, r1, r0
- ldrb r0, [r2]
- cmp r0, 0
- beq _080926A6
- ldr r3, _080926D4 @ =0x00000ccc
- adds r0, r1, r3
- ldrh r0, [r0]
- lsrs r0, 1
- strb r0, [r2]
-_080926A6:
- ldr r2, [r4]
- ldr r1, _080926DC @ =0x00000cce
- adds r0, r2, r1
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080926E4
- cmp r1, 0x1
- beq _08092700
- ldr r3, _080926E0 @ =0x00000cca
- adds r0, r2, r3
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x22
- ldrsh r0, [r0, r2]
- b _08092716
- .align 2, 0
-_080926D4: .4byte 0x00000ccc
-_080926D8: .4byte 0x00000cd3
-_080926DC: .4byte 0x00000cce
-_080926E0: .4byte 0x00000cca
-_080926E4:
- ldr r3, _080926FC @ =0x00000cca
- adds r0, r2, r3
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x22
- ldrsh r0, [r0, r2]
- adds r0, 0xC0
- b _08092716
- .align 2, 0
-_080926FC: .4byte 0x00000cca
-_08092700:
- ldr r3, _08092744 @ =0x00000cca
- adds r0, r2, r3
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x22
- ldrsh r0, [r0, r2]
- subs r0, 0xC0
-_08092716:
- subs r7, r1, r0
- ldr r2, [r4]
- ldr r3, _08092748 @ =0x00000ccf
- adds r0, r2, r3
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08092750
- cmp r1, 0x1
- beq _0809276C
- ldr r1, _0809274C @ =0x00000cc8
- adds r0, r2, r1
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x20
- ldrsh r0, [r0, r2]
- b _08092782
- .align 2, 0
-_08092744: .4byte 0x00000cca
-_08092748: .4byte 0x00000ccf
-_0809274C: .4byte 0x00000cc8
-_08092750:
- ldr r3, _08092768 @ =0x00000cc8
- adds r0, r2, r3
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x20
- ldrsh r0, [r0, r2]
- adds r0, 0xC0
- b _08092782
- .align 2, 0
-_08092768: .4byte 0x00000cc8
-_0809276C:
- ldr r3, _080927D4 @ =0x00000cc8
- adds r0, r2, r3
- movs r3, 0
- ldrsh r1, [r0, r3]
- movs r3, 0xCB
- lsls r3, 4
- adds r0, r2, r3
- ldr r0, [r0]
- movs r2, 0x20
- ldrsh r0, [r0, r2]
- subs r0, 0xC0
-_08092782:
- subs r0, r1, r0
- lsls r7, 8
- lsls r0, 8
- ldr r4, [r4]
- movs r3, 0xCC
- lsls r3, 4
- adds r6, r4, r3
- ldr r1, _080927D8 @ =0x00000ccc
- adds r5, r4, r1
- ldrh r1, [r5]
- bl __divsi3
- str r0, [r6]
- ldr r2, _080927DC @ =0x00000cc4
- adds r6, r4, r2
- ldrh r1, [r5]
- adds r0, r7, 0
- bl __divsi3
- str r0, [r6]
- ldr r3, _080927E0 @ =0x00000cb8
- adds r2, r4, r3
- movs r0, 0xCB
- lsls r0, 4
- adds r1, r4, r0
- ldr r0, [r1]
- movs r3, 0x20
- ldrsh r0, [r0, r3]
- lsls r0, 8
- str r0, [r2]
- ldr r0, _080927E4 @ =0x00000cbc
- adds r4, r0
- ldr r0, [r1]
- movs r1, 0x22
- ldrsh r0, [r0, r1]
- lsls r0, 8
- str r0, [r4]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080927D4: .4byte 0x00000cc8
-_080927D8: .4byte 0x00000ccc
-_080927DC: .4byte 0x00000cc4
-_080927E0: .4byte 0x00000cb8
-_080927E4: .4byte 0x00000cbc
- thumb_func_end sub_8092660
-
- thumb_func_start sub_80927E8
-sub_80927E8: @ 80927E8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_8092604
- bl sub_8092660
- ldr r5, _0809282C @ =sPSSData
- ldr r1, [r5]
- ldrb r0, [r1, 0x1]
- cmp r0, 0x3
- beq _08092838
- ldr r2, _08092830 @ =0x000021ef
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092852
- ldr r0, _08092834 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092852
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r1, r2
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
- b _08092852
- .align 2, 0
-_0809282C: .4byte sPSSData
-_08092830: .4byte 0x000021ef
-_08092834: .4byte sIsMonBeingMoved
-_08092838:
- bl IsActiveItemMoving
- lsls r0, 24
- cmp r0, 0
- bne _08092852
- ldr r0, [r5]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
-_08092852:
- ldr r0, _08092874 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x3
- bne _080928AC
- ldr r0, _08092878 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bne _08092880
- ldr r0, _0809287C @ =sBoxCursorPosition
- ldrb r1, [r0]
- movs r0, 0
- bl sub_8095D44
- b _0809288E
- .align 2, 0
-_08092874: .4byte sPSSData
-_08092878: .4byte sBoxCursorArea
-_0809287C: .4byte sBoxCursorPosition
-_08092880:
- cmp r0, 0x1
- bne _0809288E
- ldr r0, _0809289C @ =sBoxCursorPosition
- ldrb r1, [r0]
- movs r0, 0x1
- bl sub_8095D44
-_0809288E:
- cmp r4, 0
- bne _080928A0
- movs r0, 0
- adds r1, r6, 0
- bl sub_8095C84
- b _080928AC
- .align 2, 0
-_0809289C: .4byte sBoxCursorPosition
-_080928A0:
- cmp r4, 0x1
- bne _080928D8
- movs r0, 0x1
- adds r1, r6, 0
- bl sub_8095C84
-_080928AC:
- cmp r4, 0x1
- bne _080928D8
- ldr r0, _08092920 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- beq _080928D8
- ldr r1, _08092924 @ =sPSSData
- ldr r0, [r1]
- ldr r2, _08092928 @ =0x00000cd2
- adds r0, r2
- strb r4, [r0]
- ldr r0, [r1]
- ldr r1, _0809292C @ =0x00000cb4
- adds r0, r1
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
-_080928D8:
- cmp r4, 0
- beq _08092930
- cmp r4, 0
- blt _080929A0
- cmp r4, 0x3
- bgt _080929A0
- ldr r5, _08092924 @ =sPSSData
- ldr r0, [r5]
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r2
- ldr r4, [r0]
- ldrb r1, [r4, 0x5]
- movs r2, 0xD
- negs r2, r2
- adds r0, r2, 0
- ands r0, r1
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r4, 0x5]
- ldr r0, [r5]
- ldr r4, _0809292C @ =0x00000cb4
- adds r0, r4
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r0, [r1]
- orrs r0, r3
- strb r0, [r1]
- ldr r0, [r5]
- adds r0, r4
- ldr r1, [r0]
- ldrb r0, [r1, 0x5]
- ands r2, r0
- orrs r2, r3
- strb r2, [r1, 0x5]
- b _080929A0
- .align 2, 0
-_08092920: .4byte sBoxCursorArea
-_08092924: .4byte sPSSData
-_08092928: .4byte 0x00000cd2
-_0809292C: .4byte 0x00000cb4
-_08092930:
- ldr r3, _08092964 @ =sPSSData
- ldr r1, [r3]
- ldr r2, _08092968 @ =0x000021ef
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _08092970
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r1, r2
- ldr r2, [r0]
- ldrb r1, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r3]
- ldr r1, _0809296C @ =0x00000cb4
- adds r0, r1
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- b _080929A0
- .align 2, 0
-_08092964: .4byte sPSSData
-_08092968: .4byte 0x000021ef
-_0809296C: .4byte 0x00000cb4
-_08092970:
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r1, r2
- ldr r2, [r0]
- ldrb r1, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, _080929A8 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- bne _080929A0
- ldr r0, _080929AC @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _080929A0
- movs r0, 0x2
- bl SetMovingMonPriority
-_080929A0:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080929A8: .4byte sBoxCursorArea
-_080929AC: .4byte sIsMonBeingMoved
- thumb_func_end sub_80927E8
-
- thumb_func_start sub_80929B0
-sub_80929B0: @ 80929B0
- push {r4,lr}
- ldr r1, _080929F4 @ =sBoxCursorArea
- ldr r4, _080929F8 @ =sPSSData
- ldr r2, [r4]
- movs r3, 0xCD
- lsls r3, 4
- adds r0, r2, r3
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r1, _080929FC @ =sBoxCursorPosition
- adds r3, 0x1
- adds r0, r2, r3
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2, 0x1]
- cmp r0, 0x3
- beq _08092A08
- ldr r1, _08092A00 @ =0x000021ef
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092A22
- ldr r0, _08092A04 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092A22
- subs r3, 0x21
- adds r0, r2, r3
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
- b _08092A22
- .align 2, 0
-_080929F4: .4byte sBoxCursorArea
-_080929F8: .4byte sPSSData
-_080929FC: .4byte sBoxCursorPosition
-_08092A00: .4byte 0x000021ef
-_08092A04: .4byte sIsMonBeingMoved
-_08092A08:
- bl IsActiveItemMoving
- lsls r0, 24
- cmp r0, 0
- bne _08092A22
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
-_08092A22:
- bl sub_8093A10
- ldr r0, _08092A3C @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- beq _08092A52
- cmp r0, 0x1
- bgt _08092A40
- cmp r0, 0
- beq _08092A74
- b _08092AD0
- .align 2, 0
-_08092A3C: .4byte sBoxCursorArea
-_08092A40:
- cmp r0, 0x2
- beq _08092A4A
- cmp r0, 0x3
- bne _08092AD0
- b _08092A62
-_08092A4A:
- movs r0, 0x1
- bl sub_80920FC
- b _08092AD0
-_08092A52:
- ldr r0, _08092A6C @ =sPSSData
- ldr r0, [r0]
- ldr r2, _08092A70 @ =0x00000cb4
- adds r0, r2
- ldr r0, [r0]
- adds r0, 0x43
- movs r1, 0xD
- strb r1, [r0]
-_08092A62:
- movs r0, 0x1
- bl SetMovingMonPriority
- b _08092AD0
- .align 2, 0
-_08092A6C: .4byte sPSSData
-_08092A70: .4byte 0x00000cb4
-_08092A74:
- ldr r4, _08092AD8 @ =sPSSData
- ldr r1, [r4]
- ldr r3, _08092ADC @ =0x000021ef
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092AD0
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r1, r2
- ldr r3, [r0]
- ldrb r1, [r3, 0x5]
- movs r2, 0xD
- negs r2, r2
- adds r0, r2, 0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3, 0x5]
- ldr r0, [r4]
- ldr r3, _08092AE0 @ =0x00000cb4
- adds r0, r3
- ldr r1, [r0]
- ldrb r0, [r1, 0x5]
- ands r2, r0
- movs r0, 0x8
- orrs r2, r0
- strb r2, [r1, 0x5]
- ldr r0, [r4]
- adds r0, r3
- ldr r0, [r0]
- adds r0, 0x43
- movs r1, 0x15
- strb r1, [r0]
- ldr r0, [r4]
- adds r0, r3
- ldr r1, [r0]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- movs r0, 0x2
- bl SetMovingMonPriority
-_08092AD0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08092AD8: .4byte sPSSData
-_08092ADC: .4byte 0x000021ef
-_08092AE0: .4byte 0x00000cb4
- thumb_func_end sub_80929B0
-
- thumb_func_start sub_8092AE4
-sub_8092AE4: @ 8092AE4
- push {lr}
- ldr r0, _08092AF4 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092AF8
- movs r3, 0
- b _08092B06
- .align 2, 0
-_08092AF4: .4byte sIsMonBeingMoved
-_08092AF8:
- bl CalculatePlayerPartyCount
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x5
- bls _08092B06
- movs r3, 0x5
-_08092B06:
- ldr r0, _08092B34 @ =sPSSData
- ldr r2, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r2, r1
- ldr r0, [r0]
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08092B26
- ldr r0, _08092B38 @ =0x00000cd3
- adds r1, r2, r0
- movs r0, 0x1
- strb r0, [r1]
-_08092B26:
- movs r0, 0x1
- adds r1, r3, 0
- bl sub_80927E8
- pop {r0}
- bx r0
- .align 2, 0
-_08092B34: .4byte sPSSData
-_08092B38: .4byte 0x00000cd3
- thumb_func_end sub_8092AE4
-
- thumb_func_start sub_8092B3C
-sub_8092B3C: @ 8092B3C
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_80927E8
- pop {r0}
- bx r0
- thumb_func_end sub_8092B3C
-
- thumb_func_start sub_8092B50
-sub_8092B50: @ 8092B50
- ldr r1, _08092B58 @ =gUnknown_2039826
- movs r0, 0
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08092B58: .4byte gUnknown_2039826
- thumb_func_end sub_8092B50
-
- thumb_func_start sub_8092B5C
-sub_8092B5C: @ 8092B5C
- ldr r0, _08092B68 @ =gUnknown_2039826
- ldr r1, _08092B6C @ =sBoxCursorPosition
- ldrb r1, [r1]
- strb r1, [r0]
- bx lr
- .align 2, 0
-_08092B68: .4byte gUnknown_2039826
-_08092B6C: .4byte sBoxCursorPosition
- thumb_func_end sub_8092B5C
-
- thumb_func_start sub_8092B70
-sub_8092B70: @ 8092B70
- ldr r0, _08092B78 @ =gUnknown_2039826
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08092B78: .4byte gUnknown_2039826
- thumb_func_end sub_8092B70
-
- thumb_func_start InitMonPlaceChange
-InitMonPlaceChange: @ 8092B7C
- lsls r0, 24
- ldr r1, _08092B9C @ =sPSSData
- ldr r1, [r1]
- ldr r2, _08092BA0 @ =0x00000d88
- adds r3, r1, r2
- ldr r2, _08092BA4 @ =gUnknown_83D346C
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- str r0, [r3]
- ldr r0, _08092BA8 @ =0x00000d8c
- adds r1, r0
- movs r0, 0
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08092B9C: .4byte sPSSData
-_08092BA0: .4byte 0x00000d88
-_08092BA4: .4byte gUnknown_83D346C
-_08092BA8: .4byte 0x00000d8c
- thumb_func_end InitMonPlaceChange
-
- thumb_func_start sub_8092BAC
-sub_8092BAC: @ 8092BAC
- push {lr}
- lsls r0, 24
- cmp r0, 0
- bne _08092BCC
- ldr r0, _08092BC0 @ =sPSSData
- ldr r1, [r0]
- ldr r2, _08092BC4 @ =0x00000d88
- adds r1, r2
- ldr r2, _08092BC8 @ =sub_8092E00
- b _08092BD6
- .align 2, 0
-_08092BC0: .4byte sPSSData
-_08092BC4: .4byte 0x00000d88
-_08092BC8: .4byte sub_8092E00
-_08092BCC:
- ldr r0, _08092BE8 @ =sPSSData
- ldr r1, [r0]
- ldr r2, _08092BEC @ =0x00000d88
- adds r1, r2
- ldr r2, _08092BF0 @ =sub_8092E10
-_08092BD6:
- str r2, [r1]
- ldr r0, [r0]
- ldr r1, _08092BF4 @ =0x00000d8c
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_08092BE8: .4byte sPSSData
-_08092BEC: .4byte 0x00000d88
-_08092BF0: .4byte sub_8092E10
-_08092BF4: .4byte 0x00000d8c
- thumb_func_end sub_8092BAC
-
- thumb_func_start DoMonPlaceChange
-DoMonPlaceChange: @ 8092BF8
- push {lr}
- ldr r0, _08092C10 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08092C14 @ =0x00000d88
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08092C10: .4byte sPSSData
-_08092C14: .4byte 0x00000d88
- thumb_func_end DoMonPlaceChange
-
- thumb_func_start sub_8092C18
-sub_8092C18: @ 8092C18
- push {r4,r5,lr}
- ldr r4, _08092C34 @ =sPSSData
- ldr r1, [r4]
- ldr r5, _08092C38 @ =0x00000d8c
- adds r0, r1, r5
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08092C68
- cmp r0, 0x1
- bgt _08092C3C
- cmp r0, 0
- beq _08092C46
- b _08092C9C
- .align 2, 0
-_08092C34: .4byte sPSSData
-_08092C38: .4byte 0x00000d8c
-_08092C3C:
- cmp r0, 0x2
- beq _08092C88
- cmp r0, 0x3
- beq _08092C4E
- b _08092C9C
-_08092C46:
- ldr r0, _08092C54 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _08092C58
-_08092C4E:
- movs r0, 0
- b _08092C9E
- .align 2, 0
-_08092C54: .4byte sIsMonBeingMoved
-_08092C58:
- movs r2, 0xCB
- lsls r2, 4
- adds r0, r1, r2
- ldr r0, [r0]
- movs r1, 0x2
- bl StartSpriteAnim
- b _08092C92
-_08092C68:
- bl sub_8092E20
- lsls r0, 24
- cmp r0, 0
- bne _08092C9C
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x3
- bl StartSpriteAnim
- bl sub_8092E80
- b _08092C92
-_08092C88:
- bl sub_8092E54
- lsls r0, 24
- cmp r0, 0
- bne _08092C9C
-_08092C92:
- ldr r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08092C9C:
- movs r0, 0x1
-_08092C9E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8092C18
-
- thumb_func_start sub_8092CA4
-sub_8092CA4: @ 8092CA4
- push {r4,r5,lr}
- ldr r4, _08092CC0 @ =sPSSData
- ldr r0, [r4]
- ldr r5, _08092CC4 @ =0x00000d8c
- adds r0, r5
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08092CEE
- cmp r0, 0x1
- bgt _08092CC8
- cmp r0, 0
- beq _08092CCE
- b _08092D18
- .align 2, 0
-_08092CC0: .4byte sPSSData
-_08092CC4: .4byte 0x00000d8c
-_08092CC8:
- cmp r0, 0x2
- beq _08092D14
- b _08092D18
-_08092CCE:
- bl sub_8092E20
- lsls r0, 24
- cmp r0, 0
- bne _08092D18
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x2
- bl StartSpriteAnim
- bl sub_8092EF4
- b _08092D08
-_08092CEE:
- bl sub_8092E54
- lsls r0, 24
- cmp r0, 0
- bne _08092D18
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- bl StartSpriteAnim
-_08092D08:
- ldr r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08092D18
-_08092D14:
- movs r0, 0
- b _08092D1A
-_08092D18:
- movs r0, 0x1
-_08092D1A:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8092CA4
-
- thumb_func_start sub_8092D20
-sub_8092D20: @ 8092D20
- push {r4,r5,lr}
- ldr r4, _08092D3C @ =sPSSData
- ldr r1, [r4]
- ldr r5, _08092D40 @ =0x00000d8c
- adds r0, r1, r5
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08092DB4
- cmp r0, 0x1
- bgt _08092D44
- cmp r0, 0
- beq _08092D4A
- b _08092DF8
- .align 2, 0
-_08092D3C: .4byte sPSSData
-_08092D40: .4byte 0x00000d8c
-_08092D44:
- cmp r0, 0x2
- beq _08092DF4
- b _08092DF8
-_08092D4A:
- ldr r0, _08092D64 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _08092D6C
- cmp r0, 0x1
- bne _08092DF4
- ldr r0, _08092D68 @ =0x00000d8d
- adds r1, r0
- movs r0, 0xE
- b _08092D76
- .align 2, 0
-_08092D64: .4byte sBoxCursorArea
-_08092D68: .4byte 0x00000d8d
-_08092D6C:
- bl StorageGetCurrentBox
- ldr r1, [r4]
- ldr r2, _08092DA4 @ =0x00000d8d
- adds r1, r2
-_08092D76:
- strb r0, [r1]
- ldr r4, _08092DA8 @ =sPSSData
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x2
- bl StartSpriteAnim
- ldr r0, [r4]
- ldr r2, _08092DA4 @ =0x00000d8d
- adds r0, r2
- ldrb r0, [r0]
- ldr r1, _08092DAC @ =sBoxCursorPosition
- ldrb r1, [r1]
- bl sub_8090E08
- ldr r1, [r4]
- ldr r0, _08092DB0 @ =0x00000d8c
- adds r1, r0
- b _08092DE2
- .align 2, 0
-_08092DA4: .4byte 0x00000d8d
-_08092DA8: .4byte sPSSData
-_08092DAC: .4byte sBoxCursorPosition
-_08092DB0: .4byte 0x00000d8c
-_08092DB4:
- bl sub_8090E74
- lsls r0, 24
- cmp r0, 0
- bne _08092DF8
- ldr r0, [r4]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x3
- bl StartSpriteAnim
- ldr r0, [r4]
- ldr r2, _08092DEC @ =0x00000d8d
- adds r0, r2
- ldrb r0, [r0]
- ldr r1, _08092DF0 @ =sBoxCursorPosition
- ldrb r1, [r1]
- bl diegohint1
- ldr r1, [r4]
- adds r1, r5
-_08092DE2:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08092DF8
- .align 2, 0
-_08092DEC: .4byte 0x00000d8d
-_08092DF0: .4byte sBoxCursorPosition
-_08092DF4:
- movs r0, 0
- b _08092DFA
-_08092DF8:
- movs r0, 0x1
-_08092DFA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8092D20
-
- thumb_func_start sub_8092E00
-sub_8092E00: @ 8092E00
- push {lr}
- bl sub_8092E20
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8092E00
-
- thumb_func_start sub_8092E10
-sub_8092E10: @ 8092E10
- push {lr}
- bl sub_8092E54
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8092E10
-
- thumb_func_start sub_8092E20
-sub_8092E20: @ 8092E20
- push {lr}
- ldr r0, _08092E44 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r1, [r0]
- movs r2, 0x26
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _08092E3A
- cmp r0, 0x8
- beq _08092E48
-_08092E3A:
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _08092E4C
- .align 2, 0
-_08092E44: .4byte sPSSData
-_08092E48:
- movs r0, 0
- b _08092E4E
-_08092E4C:
- movs r0, 0x1
-_08092E4E:
- pop {r1}
- bx r1
- thumb_func_end sub_8092E20
-
- thumb_func_start sub_8092E54
-sub_8092E54: @ 8092E54
- push {lr}
- ldr r0, _08092E74 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r1, [r0]
- movs r2, 0x26
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _08092E78
- ldrh r0, [r1, 0x26]
- subs r0, 0x1
- strh r0, [r1, 0x26]
- movs r0, 0x1
- b _08092E7A
- .align 2, 0
-_08092E74: .4byte sPSSData
-_08092E78:
- movs r0, 0
-_08092E7A:
- pop {r1}
- bx r1
- thumb_func_end sub_8092E54
-
- thumb_func_start sub_8092E80
-sub_8092E80: @ 8092E80
- push {r4,lr}
- ldr r0, _08092EA8 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _08092EB0
- cmp r0, 0x1
- bne _08092EDC
- ldr r4, _08092EAC @ =sBoxCursorPosition
- ldrb r1, [r4]
- movs r0, 0xE
- bl sub_8092F60
- ldrb r1, [r4]
- movs r0, 0
- bl sub_8090CC0
- b _08092ED6
- .align 2, 0
-_08092EA8: .4byte sBoxCursorArea
-_08092EAC: .4byte sBoxCursorPosition
-_08092EB0:
- ldr r0, _08092EE4 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08092EE8 @ =0x000021ef
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08092ED6
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08092EEC @ =sBoxCursorPosition
- ldrb r1, [r4]
- bl sub_8092F60
- ldrb r1, [r4]
- movs r0, 0x1
- bl sub_8090CC0
-_08092ED6:
- ldr r1, _08092EF0 @ =sIsMonBeingMoved
- movs r0, 0x1
- strb r0, [r1]
-_08092EDC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08092EE4: .4byte sPSSData
-_08092EE8: .4byte 0x000021ef
-_08092EEC: .4byte sBoxCursorPosition
-_08092EF0: .4byte sIsMonBeingMoved
- thumb_func_end sub_8092E80
-
- thumb_func_start sub_8092EF4
-sub_8092EF4: @ 8092EF4
- push {r4,r5,lr}
- ldr r0, _08092F1C @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0
- beq _08092F24
- cmp r0, 0x1
- bne _08092F46
- ldr r4, _08092F20 @ =sBoxCursorPosition
- ldrb r1, [r4]
- movs r0, 0xE
- bl diegohint2
- ldrb r1, [r4]
- movs r0, 0xE
- bl sub_8090D58
- b _08092F40
- .align 2, 0
-_08092F1C: .4byte sBoxCursorArea
-_08092F20: .4byte sBoxCursorPosition
-_08092F24:
- bl StorageGetCurrentBox
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _08092F4C @ =sBoxCursorPosition
- ldrb r1, [r5]
- adds r0, r4, 0
- bl diegohint2
- ldrb r1, [r5]
- adds r0, r4, 0
- bl sub_8090D58
-_08092F40:
- ldr r1, _08092F50 @ =sIsMonBeingMoved
- movs r0, 0
- strb r0, [r1]
-_08092F46:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08092F4C: .4byte sBoxCursorPosition
-_08092F50: .4byte sIsMonBeingMoved
- thumb_func_end sub_8092EF4
-
- thumb_func_start sub_8092F54
-sub_8092F54: @ 8092F54
- push {lr}
- bl sub_8093A10
- pop {r0}
- bx r0
- thumb_func_end sub_8092F54
-
- thumb_func_start sub_8092F60
-sub_8092F60: @ 8092F60
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- cmp r4, 0xE
- bne _08092F9C
- ldr r0, _08092F8C @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08092F90 @ =0x000020a0
- adds r0, r1
- ldr r3, _08092F94 @ =gPlayerParty
- ldr r1, _08092F98 @ =sBoxCursorPosition
- movs r2, 0
- ldrsb r2, [r1, r2]
- movs r1, 0x64
- muls r1, r2
- adds r1, r3
- movs r2, 0x64
- bl memcpy
- b _08092FAC
- .align 2, 0
-_08092F8C: .4byte sPSSData
-_08092F90: .4byte 0x000020a0
-_08092F94: .4byte gPlayerParty
-_08092F98: .4byte sBoxCursorPosition
-_08092F9C:
- ldr r0, _08092FC4 @ =sPSSData
- ldr r2, [r0]
- ldr r0, _08092FC8 @ =0x000020a0
- adds r2, r0
- adds r0, r4, 0
- adds r1, r5, 0
- bl BoxMonAtToMon
-_08092FAC:
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8093030
- ldr r0, _08092FCC @ =sMovingMonOrigBoxId
- strb r4, [r0]
- ldr r0, _08092FD0 @ =sMovingMonOrigBoxPos
- strb r5, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08092FC4: .4byte sPSSData
-_08092FC8: .4byte 0x000020a0
-_08092FCC: .4byte sMovingMonOrigBoxId
-_08092FD0: .4byte sMovingMonOrigBoxPos
- thumb_func_end sub_8092F60
-
- thumb_func_start diegohint2
-diegohint2: @ 8092FD4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- cmp r6, 0xE
- bne _08093008
- ldr r1, _08092FFC @ =gPlayerParty
- movs r0, 0x64
- muls r0, r7
- adds r0, r1
- ldr r1, _08093000 @ =sPSSData
- ldr r1, [r1]
- ldr r2, _08093004 @ =0x000020a0
- adds r1, r2
- movs r2, 0x64
- bl memcpy
- b _08093020
- .align 2, 0
-_08092FFC: .4byte gPlayerParty
-_08093000: .4byte sPSSData
-_08093004: .4byte 0x000020a0
-_08093008:
- ldr r5, _08093028 @ =sPSSData
- ldr r0, [r5]
- ldr r4, _0809302C @ =0x000020a0
- adds r0, r4
- bl BoxMonRestorePP
- ldr r2, [r5]
- adds r2, r4
- adds r0, r6, 0
- adds r1, r7, 0
- bl SetBoxMonAt
-_08093020:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08093028: .4byte sPSSData
-_0809302C: .4byte 0x000020a0
- thumb_func_end diegohint2
-
- thumb_func_start sub_8093030
-sub_8093030: @ 8093030
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- cmp r0, 0xE
- bne _08093050
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0809304C @ =gPlayerParty
- adds r0, r1
- bl ZeroMonData
- b _08093054
- .align 2, 0
-_0809304C: .4byte gPlayerParty
-_08093050:
- bl ZeroBoxMonAt
-_08093054:
- pop {r0}
- bx r0
- thumb_func_end sub_8093030
-
- thumb_func_start diegohint1
-diegohint1: @ 8093058
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- cmp r6, 0xE
- bne _0809308C
- ldr r0, _08093080 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08093084 @ =0x00002104
- adds r0, r1
- ldr r2, _08093088 @ =gPlayerParty
- movs r1, 0x64
- muls r1, r7
- adds r1, r2
- movs r2, 0x64
- bl memcpy
- b _0809309C
- .align 2, 0
-_08093080: .4byte sPSSData
-_08093084: .4byte 0x00002104
-_08093088: .4byte gPlayerParty
-_0809308C:
- ldr r0, _080930D0 @ =sPSSData
- ldr r2, [r0]
- ldr r0, _080930D4 @ =0x00002104
- adds r2, r0
- adds r0, r6, 0
- adds r1, r7, 0
- bl BoxMonAtToMon
-_0809309C:
- adds r0, r6, 0
- adds r1, r7, 0
- bl diegohint2
- ldr r5, _080930D0 @ =sPSSData
- ldr r1, [r5]
- ldr r4, _080930D8 @ =0x000020a0
- adds r0, r1, r4
- ldr r2, _080930D4 @ =0x00002104
- adds r1, r2
- movs r2, 0x64
- bl memcpy
- ldr r0, [r5]
- adds r0, r4
- movs r1, 0
- bl sub_8093AD0
- ldr r0, _080930DC @ =sMovingMonOrigBoxId
- strb r6, [r0]
- ldr r0, _080930E0 @ =sMovingMonOrigBoxPos
- strb r7, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080930D0: .4byte sPSSData
-_080930D4: .4byte 0x00002104
-_080930D8: .4byte 0x000020a0
-_080930DC: .4byte sMovingMonOrigBoxId
-_080930E0: .4byte sMovingMonOrigBoxPos
- thumb_func_end diegohint1
-
- thumb_func_start TryStorePartyMonInBox
-TryStorePartyMonInBox: @ 80930E4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r6, 0
- bl GetFirstFreeBoxSpot
- lsls r0, 16
- lsrs r4, r0, 16
- asrs r0, 16
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _08093102
- movs r0, 0
- b _08093164
-_08093102:
- ldr r5, _08093120 @ =sIsMonBeingMoved
- ldrb r0, [r5]
- cmp r0, 0
- beq _08093124
- lsls r4, 24
- lsrs r1, r4, 24
- adds r0, r6, 0
- bl diegohint2
- bl DestroyMovingMonIcon
- movs r0, 0
- strb r0, [r5]
- b _0809313E
- .align 2, 0
-_08093120: .4byte sIsMonBeingMoved
-_08093124:
- ldr r5, _0809316C @ =sBoxCursorPosition
- ldrb r1, [r5]
- movs r0, 0xE
- bl sub_8092F60
- lsls r4, 24
- lsrs r1, r4, 24
- adds r0, r6, 0
- bl diegohint2
- ldrb r0, [r5]
- bl DestroyPartyMonIcon
-_0809313E:
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- cmp r6, r0
- bne _08093150
- lsrs r0, r4, 24
- bl sub_80901EC
-_08093150:
- ldr r0, _08093170 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
- movs r0, 0x1
-_08093164:
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0809316C: .4byte sBoxCursorPosition
-_08093170: .4byte sPSSData
- thumb_func_end TryStorePartyMonInBox
-
- thumb_func_start sub_8093174
-sub_8093174: @ 8093174
- push {lr}
- ldr r0, _08093190 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- bl StartSpriteAnim
- bl sub_8093A10
- pop {r0}
- bx r0
- .align 2, 0
-_08093190: .4byte sPSSData
- thumb_func_end sub_8093174
-
- thumb_func_start sub_8093194
-sub_8093194: @ 8093194
- push {lr}
- ldr r0, _080931A4 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _080931A8
- movs r2, 0x2
- b _080931B8
- .align 2, 0
-_080931A4: .4byte sIsMonBeingMoved
-_080931A8:
- ldr r0, _080931D8 @ =sBoxCursorArea
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r2, 0x1
- eors r1, r2
- negs r0, r1
- orrs r0, r1
- lsrs r2, r0, 31
-_080931B8:
- ldr r0, _080931DC @ =sBoxCursorPosition
- ldrb r1, [r0]
- adds r0, r2, 0
- bl sub_8090FC4
- ldr r0, _080931E0 @ =sPSSData
- ldr r1, [r0]
- ldr r2, _080931E4 @ =0x000021d0
- adds r0, r1, r2
- ldr r2, _080931E8 @ =0x00000cea
- adds r1, r2
- bl StringCopy
- pop {r0}
- bx r0
- .align 2, 0
-_080931D8: .4byte sBoxCursorArea
-_080931DC: .4byte sBoxCursorPosition
-_080931E0: .4byte sPSSData
-_080931E4: .4byte 0x000021d0
-_080931E8: .4byte 0x00000cea
- thumb_func_end sub_8093194
-
- thumb_func_start sub_80931EC
-sub_80931EC: @ 80931EC
- push {lr}
- bl sub_8091084
- lsls r0, 24
- cmp r0, 0
- beq _080931FC
- movs r0, 0x1
- b _08093210
-_080931FC:
- ldr r0, _08093214 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- bl StartSpriteAnim
- movs r0, 0
-_08093210:
- pop {r1}
- bx r1
- .align 2, 0
-_08093214: .4byte sPSSData
- thumb_func_end sub_80931EC
-
- thumb_func_start ReleaseMon
-ReleaseMon: @ 8093218
- push {lr}
- bl sub_80910CC
- ldr r1, _0809322C @ =sIsMonBeingMoved
- ldrb r0, [r1]
- cmp r0, 0
- beq _08093230
- movs r0, 0
- strb r0, [r1]
- b _08093256
- .align 2, 0
-_0809322C: .4byte sIsMonBeingMoved
-_08093230:
- ldr r0, _08093240 @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _08093244
- movs r2, 0xE
- b _0809324C
- .align 2, 0
-_08093240: .4byte sBoxCursorArea
-_08093244:
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r2, r0, 24
-_0809324C:
- ldr r0, _08093260 @ =sBoxCursorPosition
- ldrb r1, [r0]
- adds r0, r2, 0
- bl sub_8093030
-_08093256:
- bl sub_8093A10
- pop {r0}
- bx r0
- .align 2, 0
-_08093260: .4byte sBoxCursorPosition
- thumb_func_end ReleaseMon
-
- thumb_func_start sub_8093264
-sub_8093264: @ 8093264
- push {lr}
- ldr r0, _08093284 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _08093280
- ldr r0, _08093288 @ =sPSSData
- ldr r0, [r0]
- movs r1, 0xCB
- lsls r1, 4
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x3
- bl StartSpriteAnim
-_08093280:
- pop {r0}
- bx r0
- .align 2, 0
-_08093284: .4byte sIsMonBeingMoved
-_08093288: .4byte sPSSData
- thumb_func_end sub_8093264
-
- thumb_func_start InitCanReleaseMonVars
-InitCanReleaseMonVars: @ 809328C
- push {r4-r6,lr}
- ldr r0, _080932C0 @ =sIsMonBeingMoved
- ldrb r0, [r0]
- cmp r0, 0
- beq _080932D8
- ldr r4, _080932C4 @ =sPSSData
- ldr r1, [r4]
- ldr r2, _080932C8 @ =0x00002104
- adds r0, r1, r2
- ldr r3, _080932CC @ =0x000020a0
- adds r1, r3
- movs r2, 0x64
- bl memcpy
- ldr r0, [r4]
- ldr r1, _080932D0 @ =0x0000216e
- adds r0, r1
- movs r1, 0xFF
- strb r1, [r0]
- ldr r0, [r4]
- ldr r2, _080932D4 @ =0x0000216f
- adds r0, r2
- movs r1, 0x1
- negs r1, r1
- b _08093354
- .align 2, 0
-_080932C0: .4byte sIsMonBeingMoved
-_080932C4: .4byte sPSSData
-_080932C8: .4byte 0x00002104
-_080932CC: .4byte 0x000020a0
-_080932D0: .4byte 0x0000216e
-_080932D4: .4byte 0x0000216f
-_080932D8:
- ldr r0, _0809330C @ =sBoxCursorArea
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x1
- bne _08093324
- ldr r4, _08093310 @ =sPSSData
- ldr r0, [r4]
- ldr r3, _08093314 @ =0x00002104
- adds r0, r3
- ldr r3, _08093318 @ =gPlayerParty
- ldr r1, _0809331C @ =sBoxCursorPosition
- movs r2, 0
- ldrsb r2, [r1, r2]
- movs r1, 0x64
- muls r1, r2
- adds r1, r3
- movs r2, 0x64
- bl memcpy
- ldr r0, [r4]
- ldr r1, _08093320 @ =0x0000216e
- adds r0, r1
- movs r1, 0xE
- strb r1, [r0]
- b _08093348
- .align 2, 0
-_0809330C: .4byte sBoxCursorArea
-_08093310: .4byte sPSSData
-_08093314: .4byte 0x00002104
-_08093318: .4byte gPlayerParty
-_0809331C: .4byte sBoxCursorPosition
-_08093320: .4byte 0x0000216e
-_08093324:
- bl StorageGetCurrentBox
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080933BC @ =sBoxCursorPosition
- ldrb r1, [r1]
- ldr r4, _080933C0 @ =sPSSData
- ldr r2, [r4]
- ldr r3, _080933C4 @ =0x00002104
- adds r2, r3
- bl BoxMonAtToMon
- bl StorageGetCurrentBox
- ldr r1, [r4]
- ldr r2, _080933C8 @ =0x0000216e
- adds r1, r2
- strb r0, [r1]
-_08093348:
- ldr r0, _080933C0 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _080933BC @ =sBoxCursorPosition
- ldrb r1, [r1]
- ldr r3, _080933CC @ =0x0000216f
- adds r0, r3
-_08093354:
- strb r1, [r0]
- ldr r6, _080933C0 @ =sPSSData
- ldr r0, [r6]
- ldr r4, _080933D0 @ =0x0000216a
- adds r0, r4
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r6]
- ldr r5, _080933D4 @ =0x0000216b
- adds r0, r5
- strb r1, [r0]
- ldr r0, [r6]
- ldr r1, _080933D8 @ =0x00002172
- adds r2, r0, r1
- movs r1, 0x39
- strh r1, [r2]
- ldr r1, _080933DC @ =0x00002174
- adds r3, r0, r1
- ldr r1, _080933E0 @ =0x00000123
- strh r1, [r3]
- ldr r1, _080933E4 @ =0x00002176
- adds r3, r0, r1
- ldr r1, _080933E8 @ =0x00000163
- strh r1, [r3]
- ldr r3, _080933C4 @ =0x00002104
- adds r0, r3
- movs r1, 0x51
- bl GetMonData
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r1, [r6]
- movs r2, 0x1
- ands r3, r2
- adds r1, r4
- strb r3, [r1]
- ldr r1, [r6]
- lsrs r0, 17
- movs r2, 0x1
- ands r0, r2
- adds r1, r5
- strb r0, [r1]
- ldr r1, [r6]
- adds r4, r1, r4
- ldrh r0, [r4]
- cmp r0, 0
- beq _080933F0
- ldr r0, _080933EC @ =0x00002169
- adds r1, r0
- movs r0, 0
- strb r0, [r1]
- b _080933FE
- .align 2, 0
-_080933BC: .4byte sBoxCursorPosition
-_080933C0: .4byte sPSSData
-_080933C4: .4byte 0x00002104
-_080933C8: .4byte 0x0000216e
-_080933CC: .4byte 0x0000216f
-_080933D0: .4byte 0x0000216a
-_080933D4: .4byte 0x0000216b
-_080933D8: .4byte 0x00002172
-_080933DC: .4byte 0x00002174
-_080933E0: .4byte 0x00000123
-_080933E4: .4byte 0x00002176
-_080933E8: .4byte 0x00000163
-_080933EC: .4byte 0x00002169
-_080933F0:
- ldr r3, _08093410 @ =0x00002169
- adds r0, r1, r3
- strb r2, [r0]
- ldr r0, [r6]
- ldr r1, _08093414 @ =0x00002168
- adds r0, r1
- strb r2, [r0]
-_080933FE:
- ldr r0, _08093418 @ =sPSSData
- ldr r0, [r0]
- ldr r2, _0809341C @ =0x00002170
- adds r0, r2
- movs r1, 0
- strh r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08093410: .4byte 0x00002169
-_08093414: .4byte 0x00002168
-_08093418: .4byte sPSSData
-_0809341C: .4byte 0x00002170
- thumb_func_end InitCanReleaseMonVars
-
- thumb_func_start RunCanReleaseMon
-RunCanReleaseMon: @ 8093420
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _08093444 @ =sPSSData
- ldr r3, [r0]
- ldr r2, _08093448 @ =0x00002169
- adds r1, r3, r2
- ldrb r1, [r1]
- mov r12, r0
- cmp r1, 0
- beq _08093450
- ldr r1, _0809344C @ =0x00002168
- adds r0, r3, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- b _08093604
- .align 2, 0
-_08093444: .4byte sPSSData
-_08093448: .4byte 0x00002169
-_0809344C: .4byte 0x00002168
-_08093450:
- ldr r2, _08093460 @ =0x00002170
- adds r0, r3, r2
- ldrh r0, [r0]
- cmp r0, 0
- beq _08093464
- cmp r0, 0x1
- beq _0809353C
- b _08093600
- .align 2, 0
-_08093460: .4byte 0x00002170
-_08093464:
- movs r6, 0
- mov r5, r12
- movs r7, 0
-_0809346A:
- ldr r2, [r5]
- ldr r1, _08093500 @ =0x0000216e
- adds r0, r2, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xE
- bne _08093488
- adds r1, 0x1
- adds r0, r2, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- cmp r0, r6
- beq _080934C2
-_08093488:
- movs r0, 0x64
- muls r0, r6
- ldr r1, _08093504 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08093508 @ =0x00002172
- adds r2, r1
- movs r1, 0x51
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _080934AE
- ldr r0, [r5]
- ldr r2, _0809350C @ =0x0000216a
- adds r0, r2
- strb r7, [r0]
-_080934AE:
- movs r0, 0x2
- ands r4, r0
- ldr r0, _08093510 @ =sPSSData
- mov r12, r0
- cmp r4, 0
- beq _080934C2
- ldr r0, [r5]
- ldr r1, _08093514 @ =0x0000216b
- adds r0, r1
- strb r7, [r0]
-_080934C2:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x5
- bls _0809346A
- mov r2, r12
- ldr r1, [r2]
- ldr r2, _0809350C @ =0x0000216a
- adds r0, r1, r2
- ldrh r0, [r0]
- cmp r0, 0
- bne _080934DC
- b _080935EE
-_080934DC:
- ldr r2, _08093518 @ =0x0000216c
- adds r0, r1, r2
- movs r1, 0
- strb r1, [r0]
- mov r2, r12
- ldr r0, [r2]
- ldr r2, _0809351C @ =0x0000216d
- adds r0, r2
- strb r1, [r0]
- mov r0, r12
- ldr r1, [r0]
- adds r2, 0x3
- adds r1, r2
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- b _08093600
- .align 2, 0
-_08093500: .4byte 0x0000216e
-_08093504: .4byte gPlayerParty
-_08093508: .4byte 0x00002172
-_0809350C: .4byte 0x0000216a
-_08093510: .4byte sPSSData
-_08093514: .4byte 0x0000216b
-_08093518: .4byte 0x0000216c
-_0809351C: .4byte 0x0000216d
-_08093520:
- mov r1, r12
- ldr r0, [r1]
- ldr r2, _08093538 @ =0x00002169
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0]
- mov r1, r12
- ldr r0, [r1]
- subs r2, 0x1
- adds r0, r2
- strb r3, [r0]
- b _080935E0
- .align 2, 0
-_08093538: .4byte 0x00002169
-_0809353C:
- movs r6, 0
- mov r7, r12
- ldr r0, _08093610 @ =0x0000ffff
- mov r8, r0
-_08093544:
- ldr r3, [r7]
- ldr r1, _08093614 @ =0x0000216c
- adds r0, r3, r1
- ldrb r0, [r0]
- ldr r2, _08093618 @ =0x0000216d
- adds r1, r3, r2
- ldrb r1, [r1]
- adds r2, 0x5
- adds r3, r2
- movs r2, 0x51
- bl GetAndCopyBoxMonDataAt
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _080935A0
- ldr r5, [r7]
- ldr r1, _0809361C @ =0x0000216e
- adds r0, r5, r1
- ldrh r2, [r0]
- subs r1, 0x2
- adds r0, r5, r1
- ldrh r3, [r0]
- mov r1, r8
- ands r1, r2
- mov r0, r8
- ands r0, r3
- cmp r1, r0
- beq _080935A0
- movs r0, 0x1
- ands r0, r4
- cmp r0, 0
- beq _0809358E
- ldr r2, _08093620 @ =0x0000216a
- adds r1, r5, r2
- movs r0, 0
- strb r0, [r1]
-_0809358E:
- movs r0, 0x2
- ands r4, r0
- cmp r4, 0
- beq _080935A0
- ldr r0, [r7]
- ldr r1, _08093624 @ =0x0000216b
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_080935A0:
- ldr r2, _08093628 @ =sPSSData
- ldr r1, [r2]
- ldr r0, _08093618 @ =0x0000216d
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- movs r3, 0
- strb r0, [r1]
- lsls r0, 24
- asrs r0, 24
- mov r12, r2
- cmp r0, 0x1D
- ble _080935D6
- ldr r0, [r2]
- ldr r1, _08093618 @ =0x0000216d
- adds r0, r1
- strb r3, [r0]
- ldr r1, [r2]
- ldr r2, _08093614 @ =0x0000216c
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xD
- bgt _08093520
-_080935D6:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x4
- bls _08093544
-_080935E0:
- mov r0, r12
- ldr r1, [r0]
- ldr r2, _08093620 @ =0x0000216a
- adds r0, r1, r2
- ldrh r0, [r0]
- cmp r0, 0
- bne _08093600
-_080935EE:
- subs r2, 0x1
- adds r0, r1, r2
- movs r1, 0x1
- strb r1, [r0]
- mov r2, r12
- ldr r0, [r2]
- ldr r2, _0809362C @ =0x00002168
- adds r0, r2
- strb r1, [r0]
-_08093600:
- movs r0, 0x1
- negs r0, r0
-_08093604:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08093610: .4byte 0x0000ffff
-_08093614: .4byte 0x0000216c
-_08093618: .4byte 0x0000216d
-_0809361C: .4byte 0x0000216e
-_08093620: .4byte 0x0000216a
-_08093624: .4byte 0x0000216b
-_08093628: .4byte sPSSData
-_0809362C: .4byte 0x00002168
- thumb_func_end RunCanReleaseMon
-
thumb_func_start sub_8093630
sub_8093630: @ 8093630
push {lr}
@@ -3044,7 +558,7 @@ _08093A5A:
ldr r1, _08093A7C @ =gPlayerParty
adds r0, r1
movs r1, 0
- bl sub_8093AD0
+ bl SetCursorMonData
b _08093AA0
.align 2, 0
_08093A78: .4byte sBoxCursorPosition
@@ -3052,7 +566,7 @@ _08093A7C: .4byte gPlayerParty
_08093A80:
movs r0, 0
movs r1, 0x2
- bl sub_8093AD0
+ bl SetCursorMonData
b _08093AA0
_08093A8A:
bl StorageGetCurrentBox
@@ -3062,7 +576,7 @@ _08093A8A:
ldrb r1, [r1]
bl GetBoxedMonPtr
movs r1, 0x1
- bl sub_8093AD0
+ bl SetCursorMonData
_08093AA0:
pop {r4}
pop {r0}
@@ -3080,7 +594,7 @@ sub_8093AAC: @ 8093AAC
beq _08093AC8
ldr r0, _08093AC4 @ =gUnknown_20397BC
movs r1, 0
- bl sub_8093AD0
+ bl SetCursorMonData
b _08093ACC
.align 2, 0
_08093AC0: .4byte sIsMonBeingMoved
@@ -3092,8 +606,8 @@ _08093ACC:
bx r0
thumb_func_end sub_8093AAC
- thumb_func_start sub_8093AD0
-sub_8093AD0: @ 8093AD0
+ thumb_func_start SetCursorMonData
+SetCursorMonData: @ 8093AD0
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -3640,7 +1154,7 @@ _08093F84:
bx r0
.align 2, 0
_08093F94: .4byte 0x00000d61
- thumb_func_end sub_8093AD0
+ thumb_func_end SetCursorMonData
thumb_func_start sub_8093F98
sub_8093F98: @ 8093F98
diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s
index 7ff882ede..1d85f55c4 100644
--- a/data/pokemon_storage_system.s
+++ b/data/pokemon_storage_system.s
@@ -6,20 +6,6 @@
.section .rodata
.align 2
-gUnknown_83D2BCC::
- .incbin "graphics/interface/pss_unk_83D2BCC.gbapal"
-
-gUnknown_83D2BEC::
- .incbin "graphics/interface/pss_unk_83D2BEC.4bpp"
-
-gUnknown_83D33EC::
- .incbin "graphics/interface/pss_unk_83D33EC.4bpp"
-
-gUnknown_83D346C:: @ 83D346C
- .4byte sub_8092C18
- .4byte sub_8092CA4
- .4byte sub_8092D20
-
gUnknown_83D3478:: @ 83D3478
.4byte sub_8093F98
.byte 0
diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h
index 7a98e1a77..6d0489ed6 100644
--- a/include/pokemon_storage_system.h
+++ b/include/pokemon_storage_system.h
@@ -37,11 +37,5 @@ void Cb2_ReturnToPSS(void);
void ResetPokemonStorageSystem(void);
u8 StorageGetCurrentBox(void);
void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, u8 *buffer, s32 bytesToBuffer);
-void SetCurrentBox(u8 boxId);
-void SetBoxWallpaper(u8 boxId, u8 wallpaperId);
-struct Sprite *sub_809223C(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority);
-
-void Cb2_EnterPSS(u8 a0);
-u8 GetCurrentBoxOption(void);
#endif // GUARD_POKEMON_STORAGE_SYSTEM_H
diff --git a/include/pokemon_storage_system_internal.h b/include/pokemon_storage_system_internal.h
index 722500e0f..4d5af348c 100644
--- a/include/pokemon_storage_system_internal.h
+++ b/include/pokemon_storage_system_internal.h
@@ -298,15 +298,15 @@ struct PokemonStorageSystemData
/* 1e58 */ struct UnkPSSStruct_2002370 field_1E5C;
/* 20a0 */ struct Pokemon movingMon;
/* 2104 */ struct Pokemon field_2108;
- /* 2168 */ s8 field_216C;
+ /* 2168 */ u8 field_216C;
/* 2169 */ u8 field_216D;
+ /* 216c */ bool8 isSurfMon;
+ /* 216d */ bool8 isDiveMon;
/* 216a */ s8 field_216E;
/* 216b */ s8 field_216F;
- /* 216c */ s8 field_2170;
- /* 216d */ s8 field_2171;
- /* 216e */ u8 field_2172;
- /* 216f */ u8 field_2173;
- /* 2170 */ u16 field_2174;
+ /* 216e */ s8 field_2170;
+ /* 216f */ s8 field_2171;
+ /* 2170 */ u16 field_2172;
/* 2172 */ u16 field_2176[3];
/* 2178 */ u8 field_2186;
/* 2179 */ u8 field_2187;
@@ -340,6 +340,14 @@ struct PokemonStorageSystemData
extern struct PokemonStorageSystemData *sPSSData;
+void Cb2_EnterPSS(u8 a0);
+u8 GetCurrentBoxOption(void);
+struct Sprite *sub_809223C(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority);
+void SetBoxWallpaper(u8 boxId, u8 wallpaperId);
+void SetCurrentBox(u8 boxId);
+void BoxMonAtToMon(u8 boxId, u8 boxPosition, struct Pokemon * dst);
+void SetBoxMonAt(u8 boxId, u8 boxPosition, struct BoxPokemon * src);
+
void Cb2_ExitPSS(void);
void sub_808C8FC(void);
void sub_808C940(u8 curBox);
@@ -348,6 +356,7 @@ u8 HandleBoxChooseSelectionInput(void);
void sub_808C854(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal);
void SetCurrentBoxMonData(u8 boxPosition, s32 request, const void *value);
u32 GetCurrentBoxMonData(u8 boxPosition, s32 request);
+u32 GetAndCopyBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, void *dst);
void sub_80922C0(void);
void sub_8092340(void);
@@ -433,5 +442,17 @@ bool8 sub_8091150(void);
void sub_80913DC(u8 box);
bool8 sub_809140C(void);
void sub_80920FC(bool8 species);
+void CreateMovingMonIcon(void);
+void sub_8090E08(u8 boxId, u8 cursorPos);
+bool8 sub_8090E74(void);
+void sub_8090CC0(u8 cursorArea, u8 cursorPos);
+void sub_8090D58(u8 cursorArea, u8 cursorPos);
+void DestroyPartyMonIcon(u8 partyId);
+void DestroyMovingMonIcon(void);
+s16 GetFirstFreeBoxSpot(u8 boxId);
+void sub_80901EC(u8 boxPosition);
+void sub_8090FC4(u8 mode, u8 position);
+bool8 sub_8091084(void);
+void sub_80910CC(void);
#endif //GUARD_POKEMON_STORAGE_SYSTEM_INTERNAL_H
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index 80003930b..dd00024fe 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "gflib.h"
-#include "pokemon_storage_system.h"
+#include "pokemon_storage_system_internal.h"
#include "constants/species.h"
void BackupPokemonStorage(struct PokemonStorage * dest)
diff --git a/src/pokemon_storage_system_5.c b/src/pokemon_storage_system_5.c
index 663303c08..8fe09cc15 100644
--- a/src/pokemon_storage_system_5.c
+++ b/src/pokemon_storage_system_5.c
@@ -1,3 +1,823 @@
#include "global.h"
#include "gflib.h"
#include "pokemon_storage_system_internal.h"
+#include "constants/species.h"
+#include "constants/moves.h"
+
+EWRAM_DATA struct Pokemon gUnknown_20397BC = {};
+EWRAM_DATA s8 sBoxCursorArea = 0;
+EWRAM_DATA s8 sBoxCursorPosition = 0;
+EWRAM_DATA bool8 sIsMonBeingMoved = FALSE;
+EWRAM_DATA u8 sMovingMonOrigBoxId = 0;
+EWRAM_DATA u8 sMovingMonOrigBoxPos = 0;
+EWRAM_DATA bool8 sCanOnlyMove = FALSE;
+EWRAM_DATA u8 gUnknown_2039826 = 0;
+
+void sub_80929B0(void);
+bool8 MonPlaceChange_Move(void);
+bool8 MonPlaceChange_Place(void);
+bool8 MonPlaceChange_Shift(void);
+bool8 sub_8092E00(void);
+bool8 sub_8092E10(void);
+bool8 sub_8092E20(void);
+bool8 sub_8092E54(void);
+void MoveMon(void);
+void PlaceMon(void);
+void SetMovedMonData(u8 boxId, u8 cursorPos);
+void SetPlacedMonData(u8 boxId, u8 cursorPos);
+void PurgeMonOrBoxMon(u8 boxId, u8 cursorPos);
+void SetShiftedMonData(u8 boxId, u8 cursorPos);
+void sub_8093A10(void);
+void SetCursorMonData(struct Pokemon * cursorMon, u8 mode);
+void sub_8094AD8(void);
+void sub_8093AAC(void);
+void sub_8095D44(u8 cursorArea, u8 cursorPos);
+
+const u16 gUnknown_83D2BCC[] = INCBIN_U16("graphics/interface/pss_unk_83D2BCC.gbapal");
+const u16 gUnknown_83D2BEC[] = INCBIN_U16("graphics/interface/pss_unk_83D2BEC.4bpp");
+const u16 gUnknown_83D33EC[] = INCBIN_U16("graphics/interface/pss_unk_83D33EC.4bpp");
+
+void sub_80922C0(void)
+{
+ if (sPSSData->boxOption != BOX_OPTION_DEPOSIT)
+ sBoxCursorArea = CURSOR_AREA_IN_BOX;
+ else
+ sBoxCursorArea = CURSOR_AREA_IN_PARTY;
+
+ sBoxCursorPosition = 0;
+ sIsMonBeingMoved = FALSE;
+ sMovingMonOrigBoxId = 0;
+ sMovingMonOrigBoxPos = 0;
+ sCanOnlyMove = FALSE;
+ sub_8092B50();
+ sub_8094AD8();
+ sPSSData->field_CD6 = 1;
+ sPSSData->inBoxMovingMode = 0;
+ sub_8093A10();
+}
+
+void sub_8092340(void)
+{
+ sub_8094AD8();
+ sub_8093AAC();
+ sPSSData->field_CD6 = 1;
+ sPSSData->inBoxMovingMode = 0;
+ if (sIsMonBeingMoved)
+ {
+ sPSSData->movingMon = gUnknown_20397BC;
+ CreateMovingMonIcon();
+ }
+}
+
+void sub_8092398(u8 cursorArea, u8 cursorPosition, u16 *x, u16 *y)
+{
+ switch (cursorArea)
+ {
+ case CURSOR_AREA_IN_BOX:
+ *x = (cursorPosition % IN_BOX_ROWS) * 24 + 100;
+ *y = (cursorPosition / IN_BOX_ROWS) * 24 + 32;
+ break;
+ case CURSOR_AREA_IN_PARTY:
+ if (cursorPosition == 0)
+ {
+ *x = 0x68;
+ *y = 0x34;
+ }
+ else if (cursorPosition == PARTY_SIZE)
+ {
+ *x = 0x98;
+ *y = 0x84;
+ }
+ else
+ {
+ *x = 0x98;
+ *y = (cursorPosition - 1) * 24 + 4;
+ }
+ break;
+ case CURSOR_AREA_BOX:
+ *x = 0xa2;
+ *y = 0x0c;
+ break;
+ case CURSOR_AREA_BUTTONS:
+ *y = sIsMonBeingMoved ? 8 : 14;
+ *x = cursorPosition * 0x58 + 0x78;
+ break;
+ case 4:
+ *x = 0xa0;
+ *y = 0x60;
+ break;
+ }
+}
+
+u16 sub_8092458(void)
+{
+ switch (sBoxCursorArea)
+ {
+ case CURSOR_AREA_IN_PARTY:
+ return GetMonData(&gPlayerParty[sBoxCursorPosition], MON_DATA_SPECIES);
+ case CURSOR_AREA_IN_BOX:
+ return GetCurrentBoxMonData(sBoxCursorPosition, MON_DATA_SPECIES);
+ default:
+ return SPECIES_NONE;
+ }
+}
+
+bool8 sub_80924A8(void)
+{
+ s16 tmp;
+
+ if (sPSSData->field_CD0 == 0)
+ {
+ if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ return FALSE;
+ else
+ return sub_809610C();
+ }
+ else if (--sPSSData->field_CD0 != 0)
+ {
+ sPSSData->field_CBC += sPSSData->field_CC4;
+ sPSSData->field_CC0 += sPSSData->field_CC8;
+ sPSSData->field_CB4->pos1.x = sPSSData->field_CBC >> 8;
+ sPSSData->field_CB4->pos1.y = sPSSData->field_CC0 >> 8;
+ if (sPSSData->field_CB4->pos1.x > 0x100)
+ {
+ tmp = sPSSData->field_CB4->pos1.x - 0x100;
+ sPSSData->field_CB4->pos1.x = tmp + 0x40;
+ }
+ if (sPSSData->field_CB4->pos1.x < 0x40)
+ {
+ tmp = 0x40 - sPSSData->field_CB4->pos1.x;
+ sPSSData->field_CB4->pos1.x = 0x100 - tmp;
+ }
+ if (sPSSData->field_CB4->pos1.y > 0xb0)
+ {
+ tmp = sPSSData->field_CB4->pos1.y - 0xb0;
+ sPSSData->field_CB4->pos1.y = tmp - 0x10;
+ }
+ if (sPSSData->field_CB4->pos1.y < -0x10)
+ {
+ tmp = -0x10 - sPSSData->field_CB4->pos1.y;
+ sPSSData->field_CB4->pos1.y = 0xb0 - tmp;
+ }
+ if (sPSSData->field_CD7 && --sPSSData->field_CD7 == 0)
+ sPSSData->field_CB4->vFlip = (sPSSData->field_CB4->vFlip == FALSE);
+ }
+ else
+ {
+ sPSSData->field_CB4->pos1.x = sPSSData->field_CCC;
+ sPSSData->field_CB4->pos1.y = sPSSData->field_CCE;
+ sub_80929B0();
+ }
+
+ return TRUE;
+}
+
+void sub_8092604(u8 newCurosrArea, u8 newCursorPosition)
+{
+ u16 x, y;
+
+ sub_8092398(newCurosrArea, newCursorPosition, &x, &y);
+ sPSSData->field_CD4 = newCurosrArea;
+ sPSSData->field_CD5 = newCursorPosition;
+ sPSSData->field_CCC = x;
+ sPSSData->field_CCE = y;
+}
+
+void sub_8092660(void)
+{
+ int r7, r0;
+
+ if (sPSSData->field_CD2 != 0 || sPSSData->field_CD3 != 0)
+ sPSSData->field_CD0 = 12;
+ else
+ sPSSData->field_CD0 = 6;
+
+ if (sPSSData->field_CD7)
+ sPSSData->field_CD7 = sPSSData->field_CD0 >> 1;
+
+ switch (sPSSData->field_CD2)
+ {
+ default:
+ r7 = sPSSData->field_CCE - sPSSData->field_CB4->pos1.y;
+ break;
+ case -1:
+ r7 = sPSSData->field_CCE - 0xc0 - sPSSData->field_CB4->pos1.y;
+ break;
+ case 1:
+ r7 = sPSSData->field_CCE + 0xc0 - sPSSData->field_CB4->pos1.y;
+ break;
+ }
+
+ switch (sPSSData->field_CD3)
+ {
+ default:
+ r0 = sPSSData->field_CCC - sPSSData->field_CB4->pos1.x;
+ break;
+ case -1:
+ r0 = sPSSData->field_CCC - 0xc0 - sPSSData->field_CB4->pos1.x;
+ break;
+ case 1:
+ r0 = sPSSData->field_CCC + 0xc0 - sPSSData->field_CB4->pos1.x;
+ break;
+ }
+
+ r7 <<= 8;
+ r0 <<= 8;
+ sPSSData->field_CC4 = r0 / sPSSData->field_CD0;
+ sPSSData->field_CC8 = r7 / sPSSData->field_CD0;
+ sPSSData->field_CBC = sPSSData->field_CB4->pos1.x << 8;
+ sPSSData->field_CC0 = sPSSData->field_CB4->pos1.y << 8;
+}
+
+void sub_80927E8(u8 newCurosrArea, u8 newCursorPosition)
+{
+ sub_8092604(newCurosrArea, newCursorPosition);
+ sub_8092660();
+ if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ {
+ if (sPSSData->inBoxMovingMode == 0 && !sIsMonBeingMoved)
+ StartSpriteAnim(sPSSData->field_CB4, 1);
+ }
+ else
+ {
+ if (!IsActiveItemMoving())
+ StartSpriteAnim(sPSSData->field_CB4, 1);
+ }
+
+ if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
+ {
+ if (sBoxCursorArea == CURSOR_AREA_IN_BOX)
+ sub_8095D44(CURSOR_AREA_IN_BOX, sBoxCursorPosition);
+ else if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ sub_8095D44(CURSOR_AREA_IN_PARTY, sBoxCursorPosition);
+
+ if (newCurosrArea == CURSOR_AREA_IN_BOX)
+ sub_8095C84(newCurosrArea, newCursorPosition);
+ else if (newCurosrArea == CURSOR_AREA_IN_PARTY)
+ sub_8095C84(newCurosrArea, newCursorPosition);
+ }
+
+ if (newCurosrArea == CURSOR_AREA_IN_PARTY && sBoxCursorArea != CURSOR_AREA_IN_PARTY)
+ {
+ sPSSData->field_CD6 = newCurosrArea;
+ sPSSData->field_CB8->invisible = TRUE;
+ }
+
+ switch (newCurosrArea)
+ {
+ case CURSOR_AREA_IN_PARTY:
+ case CURSOR_AREA_BOX:
+ case CURSOR_AREA_BUTTONS:
+ sPSSData->field_CB4->oam.priority = 1;
+ sPSSData->field_CB8->invisible = TRUE;
+ sPSSData->field_CB8->oam.priority = 1;
+ break;
+ case CURSOR_AREA_IN_BOX:
+ if (sPSSData->inBoxMovingMode != 0)
+ {
+ sPSSData->field_CB4->oam.priority = 0;
+ sPSSData->field_CB8->invisible = TRUE;
+ }
+ else
+ {
+ sPSSData->field_CB4->oam.priority = 2;
+ if (sBoxCursorArea == CURSOR_AREA_IN_BOX && sIsMonBeingMoved)
+ SetMovingMonPriority(2);
+ }
+ break;
+ }
+}
+
+void sub_80929B0(void)
+{
+ sBoxCursorArea = sPSSData->field_CD4;
+ sBoxCursorPosition = sPSSData->field_CD5;
+ if (sPSSData->boxOption != BOX_OPTION_MOVE_ITEMS)
+ {
+ if (sPSSData->inBoxMovingMode == 0 && !sIsMonBeingMoved)
+ StartSpriteAnim(sPSSData->field_CB4, 1);
+ }
+ else
+ {
+ if (!IsActiveItemMoving())
+ StartSpriteAnim(sPSSData->field_CB4, 1);
+ }
+
+ sub_8093A10();
+ switch (sBoxCursorArea)
+ {
+ case CURSOR_AREA_BUTTONS:
+ SetMovingMonPriority(1);
+ break;
+ case CURSOR_AREA_BOX:
+ sub_80920FC(TRUE);
+ break;
+ case CURSOR_AREA_IN_PARTY:
+ sPSSData->field_CB8->subpriority = 13;
+ SetMovingMonPriority(1);
+ break;
+ case CURSOR_AREA_IN_BOX:
+ if (sPSSData->inBoxMovingMode == 0)
+ {
+ sPSSData->field_CB4->oam.priority = 1;
+ sPSSData->field_CB8->oam.priority = 2;
+ sPSSData->field_CB8->subpriority = 21;
+ sPSSData->field_CB8->invisible = FALSE;
+ SetMovingMonPriority(2);
+ }
+ break;
+ }
+}
+
+void sub_8092AE4(void)
+{
+ u8 partyCount;
+
+ if (!sIsMonBeingMoved)
+ {
+ partyCount = 0;
+ }
+ else
+ {
+ partyCount = CalculatePlayerPartyCount();
+ if (partyCount >= PARTY_SIZE)
+ partyCount = PARTY_SIZE - 1;
+ }
+ if (sPSSData->field_CB4->vFlip)
+ sPSSData->field_CD7 = 1;
+ sub_80927E8(CURSOR_AREA_IN_PARTY, partyCount);
+}
+
+void sub_8092B3C(u8 cursorBoxPosition)
+{
+ sub_80927E8(CURSOR_AREA_IN_BOX, cursorBoxPosition);
+}
+
+void sub_8092B50(void)
+{
+ gUnknown_2039826 = 0;
+}
+
+void sub_8092B5C(void)
+{
+ gUnknown_2039826 = sBoxCursorPosition;
+}
+
+u8 sub_8092B70(void)
+{
+ return gUnknown_2039826;
+}
+
+void InitMonPlaceChange(u8 a0)
+{
+ static bool8 (*const placeChangeFuncs[])(void) = {
+ MonPlaceChange_Move,
+ MonPlaceChange_Place,
+ MonPlaceChange_Shift,
+ };
+
+ sPSSData->monPlaceChangeFunc = placeChangeFuncs[a0];
+ sPSSData->monPlaceChangeState = 0;
+}
+
+void sub_8092BAC(bool8 arg0)
+{
+ if (!arg0)
+ sPSSData->monPlaceChangeFunc = sub_8092E00;
+ else
+ sPSSData->monPlaceChangeFunc = sub_8092E10;
+
+ sPSSData->monPlaceChangeState = 0;
+}
+
+bool8 DoMonPlaceChange(void)
+{
+ return sPSSData->monPlaceChangeFunc();
+}
+
+bool8 MonPlaceChange_Move(void)
+{
+ switch (sPSSData->monPlaceChangeState)
+ {
+ case 0:
+ if (sIsMonBeingMoved)
+ return FALSE;
+ StartSpriteAnim(sPSSData->field_CB4, 2);
+ sPSSData->monPlaceChangeState++;
+ break;
+ case 1:
+ if (!sub_8092E20())
+ {
+ StartSpriteAnim(sPSSData->field_CB4, 3);
+ MoveMon();
+ sPSSData->monPlaceChangeState++;
+ }
+ break;
+ case 2:
+ if (!sub_8092E54())
+ sPSSData->monPlaceChangeState++;
+ break;
+ case 3:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+bool8 MonPlaceChange_Place(void)
+{
+ switch (sPSSData->monPlaceChangeState)
+ {
+ case 0:
+ if (!sub_8092E20())
+ {
+ StartSpriteAnim(sPSSData->field_CB4, 2);
+ PlaceMon();
+ sPSSData->monPlaceChangeState++;
+ }
+ break;
+ case 1:
+ if (!sub_8092E54())
+ {
+ StartSpriteAnim(sPSSData->field_CB4, 0);
+ sPSSData->monPlaceChangeState++;
+ }
+ break;
+ case 2:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+bool8 MonPlaceChange_Shift(void)
+{
+ switch (sPSSData->monPlaceChangeState)
+ {
+ case 0:
+ switch (sBoxCursorArea)
+ {
+ case CURSOR_AREA_IN_PARTY:
+ sPSSData->field_D91 = TOTAL_BOXES_COUNT;
+ break;
+ case CURSOR_AREA_IN_BOX:
+ sPSSData->field_D91 = StorageGetCurrentBox();
+ break;
+ default:
+ return FALSE;
+ }
+ StartSpriteAnim(sPSSData->field_CB4, 2);
+ sub_8090E08(sPSSData->field_D91, sBoxCursorPosition);
+ sPSSData->monPlaceChangeState++;
+ break;
+ case 1:
+ if (!sub_8090E74())
+ {
+ StartSpriteAnim(sPSSData->field_CB4, 3);
+ SetShiftedMonData(sPSSData->field_D91, sBoxCursorPosition);
+ sPSSData->monPlaceChangeState++;
+ }
+ break;
+ case 2:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+bool8 sub_8092E00(void)
+{
+ return sub_8092E20();
+}
+
+bool8 sub_8092E10(void)
+{
+ return sub_8092E54();
+}
+
+bool8 sub_8092E20(void)
+{
+ switch (sPSSData->field_CB4->pos2.y)
+ {
+ default:
+ sPSSData->field_CB4->pos2.y++;
+ break;
+ case 0:
+ sPSSData->field_CB4->pos2.y++;
+ break;
+ case 8:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+bool8 sub_8092E54(void)
+{
+ switch (sPSSData->field_CB4->pos2.y)
+ {
+ case 0:
+ return FALSE;
+ default:
+ sPSSData->field_CB4->pos2.y--;
+ break;
+ }
+
+ return TRUE;
+}
+
+void MoveMon(void)
+{
+ switch (sBoxCursorArea)
+ {
+ case CURSOR_AREA_IN_PARTY:
+ SetMovedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition);
+ sub_8090CC0(MODE_PARTY, sBoxCursorPosition);
+ break;
+ case CURSOR_AREA_IN_BOX:
+ if (sPSSData->inBoxMovingMode == 0)
+ {
+ SetMovedMonData(StorageGetCurrentBox(), sBoxCursorPosition);
+ sub_8090CC0(MODE_BOX, sBoxCursorPosition);
+ }
+ break;
+ default:
+ return;
+ }
+
+ sIsMonBeingMoved = TRUE;
+}
+
+void PlaceMon(void)
+{
+ u8 boxId;
+
+ switch (sBoxCursorArea)
+ {
+ case CURSOR_AREA_IN_PARTY:
+ SetPlacedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition);
+ sub_8090D58(TOTAL_BOXES_COUNT, sBoxCursorPosition);
+ break;
+ case CURSOR_AREA_IN_BOX:
+ boxId = StorageGetCurrentBox();
+ SetPlacedMonData(boxId, sBoxCursorPosition);
+ sub_8090D58(boxId, sBoxCursorPosition);
+ break;
+ default:
+ return;
+ }
+
+ sIsMonBeingMoved = FALSE;
+}
+
+void sub_8092F54(void)
+{
+ sub_8093A10();
+}
+
+void SetMovedMonData(u8 boxId, u8 position)
+{
+ if (boxId == TOTAL_BOXES_COUNT)
+ sPSSData->movingMon = gPlayerParty[sBoxCursorPosition];
+ else
+ BoxMonAtToMon(boxId, position, &sPSSData->movingMon);
+
+ PurgeMonOrBoxMon(boxId, position);
+ sMovingMonOrigBoxId = boxId;
+ sMovingMonOrigBoxPos = position;
+}
+
+void SetPlacedMonData(u8 boxId, u8 position)
+{
+ if (boxId == TOTAL_BOXES_COUNT)
+ {
+ gPlayerParty[position] = sPSSData->movingMon;
+ }
+ else
+ {
+ BoxMonRestorePP(&sPSSData->movingMon.box);
+ SetBoxMonAt(boxId, position, &sPSSData->movingMon.box);
+ }
+}
+
+void PurgeMonOrBoxMon(u8 boxId, u8 position)
+{
+ if (boxId == TOTAL_BOXES_COUNT)
+ ZeroMonData(&gPlayerParty[position]);
+ else
+ ZeroBoxMonAt(boxId, position);
+}
+
+void SetShiftedMonData(u8 boxId, u8 position)
+{
+ if (boxId == TOTAL_BOXES_COUNT)
+ sPSSData->field_2108 = gPlayerParty[position];
+ else
+ BoxMonAtToMon(boxId, position, &sPSSData->field_2108);
+
+ SetPlacedMonData(boxId, position);
+ sPSSData->movingMon = sPSSData->field_2108;
+ SetCursorMonData(&sPSSData->movingMon, MODE_PARTY);
+ sMovingMonOrigBoxId = boxId;
+ sMovingMonOrigBoxPos = position;
+}
+
+bool8 TryStorePartyMonInBox(u8 boxId)
+{
+ s16 boxPosition = GetFirstFreeBoxSpot(boxId);
+ if (boxPosition == -1)
+ return FALSE;
+
+ if (sIsMonBeingMoved)
+ {
+ SetPlacedMonData(boxId, boxPosition);
+ DestroyMovingMonIcon();
+ sIsMonBeingMoved = FALSE;
+ }
+ else
+ {
+ SetMovedMonData(TOTAL_BOXES_COUNT, sBoxCursorPosition);
+ SetPlacedMonData(boxId, boxPosition);
+ DestroyPartyMonIcon(sBoxCursorPosition);
+ }
+
+ if (boxId == StorageGetCurrentBox())
+ sub_80901EC(boxPosition);
+
+ StartSpriteAnim(sPSSData->field_CB4, 1);
+ return TRUE;
+}
+
+void sub_8093174(void)
+{
+ StartSpriteAnim(sPSSData->field_CB4, 0);
+ sub_8093A10();
+}
+
+void sub_8093194(void)
+{
+ u8 mode;
+
+ if (sIsMonBeingMoved)
+ mode = MODE_2;
+ else if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ mode = MODE_PARTY;
+ else
+ mode = MODE_BOX;
+
+ sub_8090FC4(mode, sBoxCursorPosition);
+ StringCopy(sPSSData->field_21E0, sPSSData->cursorMonNick);
+}
+
+bool8 sub_80931EC(void)
+{
+ if (!sub_8091084())
+ {
+ StartSpriteAnim(sPSSData->field_CB4, 0);
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+void ReleaseMon(void)
+{
+ u8 boxId;
+
+ sub_80910CC();
+ if (sIsMonBeingMoved)
+ {
+ sIsMonBeingMoved = FALSE;
+ }
+ else
+ {
+ if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ boxId = TOTAL_BOXES_COUNT;
+ else
+ boxId = StorageGetCurrentBox();
+
+ PurgeMonOrBoxMon(boxId, sBoxCursorPosition);
+ }
+ sub_8093A10();
+}
+
+void sub_8093264(void)
+{
+ if (sIsMonBeingMoved)
+ StartSpriteAnim(sPSSData->field_CB4, 3);
+}
+
+void InitCanReleaseMonVars(void)
+{
+ u16 knownIdx;
+ if (sIsMonBeingMoved)
+ {
+ sPSSData->field_2108 = sPSSData->movingMon;
+ sPSSData->field_2170 = -1;
+ sPSSData->field_2171 = -1;
+ }
+ else
+ {
+ if (sBoxCursorArea == CURSOR_AREA_IN_PARTY)
+ {
+ sPSSData->field_2108 = gPlayerParty[sBoxCursorPosition];
+ sPSSData->field_2170 = TOTAL_BOXES_COUNT;
+ }
+ else
+ {
+ BoxMonAtToMon(StorageGetCurrentBox(), sBoxCursorPosition, &sPSSData->field_2108);
+ sPSSData->field_2170 = StorageGetCurrentBox();
+ }
+ sPSSData->field_2171 = sBoxCursorPosition;
+ }
+
+ sPSSData->isSurfMon = FALSE;
+ sPSSData->isDiveMon = FALSE;
+ sPSSData->field_2176[0] = MOVE_SURF;
+ sPSSData->field_2176[1] = MOVE_DIVE;
+ sPSSData->field_2176[2] = MOVES_COUNT;
+ knownIdx = GetMonData(&sPSSData->field_2108, MON_DATA_KNOWN_MOVES, (u8*)sPSSData->field_2176);
+ sPSSData->isSurfMon = knownIdx & 1;
+ sPSSData->isDiveMon = (knownIdx >> 1) & 1;
+ if (sPSSData->isSurfMon || sPSSData->isDiveMon)
+ {
+ sPSSData->field_216D = 0;
+ }
+ else
+ {
+ sPSSData->field_216D = 1;
+ sPSSData->field_216C = 1;
+ }
+
+ sPSSData->field_2172 = 0;
+}
+
+s8 RunCanReleaseMon(void)
+{
+ u16 i;
+ u16 knownMoves;
+
+ if (sPSSData->field_216D)
+ return sPSSData->field_216C;
+
+ switch (sPSSData->field_2172)
+ {
+ case 0:
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (sPSSData->field_2170 != TOTAL_BOXES_COUNT || sPSSData->field_2171 != i)
+ {
+ knownMoves = GetMonData(gPlayerParty + i, MON_DATA_KNOWN_MOVES, (u8*)sPSSData->field_2176);
+ if (knownMoves & 1)
+ sPSSData->isSurfMon = FALSE;
+ if (knownMoves & 2)
+ sPSSData->isDiveMon = FALSE;
+ }
+ }
+ if (!(sPSSData->isSurfMon || sPSSData->isDiveMon))
+ {
+ sPSSData->field_216D = 1;
+ sPSSData->field_216C = 1;
+ }
+ else
+ {
+ sPSSData->field_216E = 0;
+ sPSSData->field_216F = 0;
+ sPSSData->field_2172++;
+ }
+ break;
+ case 1:
+ for (i = 0; i < 5; i++)
+ {
+ knownMoves = GetAndCopyBoxMonDataAt(sPSSData->field_216E, sPSSData->field_216F, MON_DATA_KNOWN_MOVES, (u8*)sPSSData->field_2176);
+ if (knownMoves != 0
+ && !(sPSSData->field_2170 == sPSSData->field_216E && sPSSData->field_2171 == sPSSData->field_216F))
+ {
+ if (knownMoves & 1)
+ sPSSData->isSurfMon = FALSE;
+ if (knownMoves & 2)
+ sPSSData->isDiveMon = FALSE;
+ }
+ if (++sPSSData->field_216F >= IN_BOX_COUNT)
+ {
+ sPSSData->field_216F = 0;
+ if (++sPSSData->field_216E >= TOTAL_BOXES_COUNT)
+ {
+ sPSSData->field_216D = 1;
+ sPSSData->field_216C = 0;
+ break;
+ }
+ }
+ }
+ if (!(sPSSData->isSurfMon || sPSSData->isDiveMon))
+ {
+ sPSSData->field_216D = 1;
+ sPSSData->field_216C = 1;
+ }
+ break;
+ }
+
+ return -1;
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index f8dcf1174..2ab91f8d4 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -160,32 +160,10 @@ gUnknown_20386A8: @ 20386A8
.include "src/pokemon_storage_system_2.o"
.align 2
.include "src/pokemon_storage_system_3.o"
-
.align 2
-gUnknown_20397BC: @ 20397BC
- .space 0x64
-
-sBoxCursorArea: @ 2039820
- .space 0x1
-
-sBoxCursorPosition: @ 2039821
- .space 0x1
-
-sIsMonBeingMoved: @ 2039822
- .space 0x1
-
-sMovingMonOrigBoxId: @ 2039823
- .space 0x1
-
-sMovingMonOrigBoxPos: @ 2039824
- .space 0x1
-
-sCanOnlyMove: @ 2039825
- .space 0x1
-
-gUnknown_2039826: @ 2039826
- .space 0x2
+ .include "src/pokemon_storage_system_5.o"
+ .align 2
gUnknown_2039828: @ 2039828
.space 0x4