summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokemon_storage_system.s899
-rw-r--r--data/pokemon_storage_system.s17
-rw-r--r--include/pokemon_storage_system_internal.h6
-rw-r--r--src/pokemon_storage_system_5.c455
4 files changed, 461 insertions, 916 deletions
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index b7d7c2896..01eed1eb7 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -5,901 +5,8 @@
.text
- thumb_func_start InBoxInput_GrabbingMultiple
-InBoxInput_GrabbingMultiple: @ 8094240
- push {r4,lr}
- ldr r1, _08094270 @ =gMain
- ldrh r0, [r1, 0x2C]
- movs r4, 0x1
- ands r4, r0
- cmp r4, 0
- beq _080942F4
- ldrh r1, [r1, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08094278
- ldr r4, _08094274 @ =sBoxCursorPosition
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x6
- bl __divsi3
- lsls r0, 24
- cmp r0, 0
- beq _080942EC
- ldrb r1, [r4]
- subs r1, 0x6
- b _080942DA
- .align 2, 0
-_08094270: .4byte gMain
-_08094274: .4byte sBoxCursorPosition
-_08094278:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08094298
- ldr r1, _08094294 @ =sBoxCursorPosition
- movs r0, 0
- ldrsb r0, [r1, r0]
- adds r0, 0x6
- cmp r0, 0x1D
- bgt _080942EC
- ldrb r1, [r1]
- adds r1, 0x6
- b _080942DA
- .align 2, 0
-_08094294: .4byte sBoxCursorPosition
-_08094298:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080942BC
- ldr r4, _080942B8 @ =sBoxCursorPosition
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x6
- bl __modsi3
- lsls r0, 24
- cmp r0, 0
- beq _080942EC
- ldrb r1, [r4]
- subs r1, 0x1
- b _080942DA
- .align 2, 0
-_080942B8: .4byte sBoxCursorPosition
-_080942BC:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080942F0
- ldr r4, _080942E8 @ =sBoxCursorPosition
- movs r0, 0
- ldrsb r0, [r4, r0]
- adds r0, 0x1
- movs r1, 0x6
- bl __modsi3
- cmp r0, 0
- beq _080942EC
- ldrb r1, [r4]
- adds r1, 0x1
-_080942DA:
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_80927E8
- movs r0, 0x15
- b _08094364
- .align 2, 0
-_080942E8: .4byte sBoxCursorPosition
-_080942EC:
- movs r0, 0x18
- b _08094364
-_080942F0:
- movs r0, 0
- b _08094364
-_080942F4:
- bl sub_8095AA0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08094330 @ =sBoxCursorPosition
- ldrb r1, [r1]
- lsls r1, 24
- asrs r1, 24
- cmp r0, r1
- beq _08094344
- ldr r2, _08094334 @ =sIsMonBeingMoved
- ldr r0, _08094338 @ =sPSSData
- ldr r1, [r0]
- movs r3, 0xCE
- lsls r3, 4
- adds r0, r1, r3
- ldrh r0, [r0]
- negs r0, r0
- lsrs r0, 31
- strb r0, [r2]
- ldr r0, _0809433C @ =0x000021ef
- adds r1, r0
- movs r0, 0x2
- strb r0, [r1]
- bl StorageGetCurrentBox
- ldr r1, _08094340 @ =sMovingMonOrigBoxId
- strb r0, [r1]
- movs r0, 0x17
- b _08094364
- .align 2, 0
-_08094330: .4byte sBoxCursorPosition
-_08094334: .4byte sIsMonBeingMoved
-_08094338: .4byte sPSSData
-_0809433C: .4byte 0x000021ef
-_08094340: .4byte sMovingMonOrigBoxId
-_08094344:
- ldr r1, _0809436C @ =sPSSData
- ldr r0, [r1]
- ldr r2, _08094370 @ =0x000021ef
- adds r0, r2
- strb r4, [r0]
- ldr r0, [r1]
- ldr r3, _08094374 @ =0x00000cb4
- 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, 0x16
-_08094364:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0809436C: .4byte sPSSData
-_08094370: .4byte 0x000021ef
-_08094374: .4byte 0x00000cb4
- thumb_func_end InBoxInput_GrabbingMultiple
-
- thumb_func_start InBoxInput_MovingMultiple
-InBoxInput_MovingMultiple: @ 8094378
- push {r4,lr}
- ldr r2, _0809439C @ =gMain
- ldrh r1, [r2, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080943A4
- movs r0, 0
- bl sub_8095474
- lsls r0, 24
- cmp r0, 0
- beq _08094450
- ldr r0, _080943A0 @ =sBoxCursorPosition
- ldrb r1, [r0]
- subs r1, 0x6
- b _08094402
- .align 2, 0
-_0809439C: .4byte gMain
-_080943A0: .4byte sBoxCursorPosition
-_080943A4:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080943C4
- movs r0, 0x1
- bl sub_8095474
- lsls r0, 24
- cmp r0, 0
- beq _08094450
- ldr r0, _080943C0 @ =sBoxCursorPosition
- ldrb r1, [r0]
- adds r1, 0x6
- b _08094402
- .align 2, 0
-_080943C0: .4byte sBoxCursorPosition
-_080943C4:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080943E4
- movs r0, 0x2
- bl sub_8095474
- lsls r0, 24
- cmp r0, 0
- beq _0809446A
- ldr r0, _080943E0 @ =sBoxCursorPosition
- ldrb r1, [r0]
- subs r1, 0x1
- b _08094402
- .align 2, 0
-_080943E0: .4byte sBoxCursorPosition
-_080943E4:
- movs r0, 0x10
- ands r0, r1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _08094414
- movs r0, 0x3
- bl sub_8095474
- lsls r0, 24
- cmp r0, 0
- beq _0809447E
- ldr r0, _08094410 @ =sBoxCursorPosition
- ldrb r1, [r0]
- adds r1, 0x1
-_08094402:
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_80927E8
- movs r0, 0x19
- b _08094484
- .align 2, 0
-_08094410: .4byte sBoxCursorPosition
-_08094414:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08094448
- bl sub_8095ABC
- lsls r0, 24
- cmp r0, 0
- beq _08094450
- ldr r0, _0809443C @ =sIsMonBeingMoved
- strb r4, [r0]
- ldr r0, _08094440 @ =sPSSData
- ldr r0, [r0]
- ldr r1, _08094444 @ =0x000021ef
- adds r0, r1
- strb r4, [r0]
- movs r0, 0x1A
- b _08094484
- .align 2, 0
-_0809443C: .4byte sIsMonBeingMoved
-_08094440: .4byte sPSSData
-_08094444: .4byte 0x000021ef
-_08094448:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08094454
-_08094450:
- movs r0, 0x18
- b _08094484
-_08094454:
- ldr r0, _08094470 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0x1
- bne _08094482
- ldrh r1, [r2, 0x2C]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _08094474
-_0809446A:
- movs r0, 0xA
- b _08094484
- .align 2, 0
-_08094470: .4byte gSaveBlock2Ptr
-_08094474:
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _08094482
-_0809447E:
- movs r0, 0x9
- b _08094484
-_08094482:
- movs r0, 0
-_08094484:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end InBoxInput_MovingMultiple
-
- thumb_func_start sub_809448C
-sub_809448C: @ 809448C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, _080944FC @ =sBoxCursorArea
- ldrb r0, [r0]
- mov r9, r0
- ldr r6, _08094500 @ =sBoxCursorPosition
- ldrb r4, [r6]
- ldr r2, _08094504 @ =sPSSData
- ldr r0, [r2]
- ldr r1, _08094508 @ =0x00000ccf
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r2]
- ldr r3, _0809450C @ =0x00000cce
- adds r0, r3
- strb r1, [r0]
- ldr r0, [r2]
- adds r3, 0x5
- adds r0, r3
- strb r1, [r0]
- mov r8, r1
- movs r7, 0
- ldr r1, _08094510 @ =gMain
- ldrh r3, [r1, 0x30]
- movs r0, 0x40
- ands r0, r3
- adds r5, r6, 0
- mov r12, r1
- cmp r0, 0
- beq _080944D0
- b _08094670
-_080944D0:
- movs r0, 0x80
- ands r0, r3
- cmp r0, 0
- beq _08094514
- lsls r0, r4, 24
- movs r1, 0x80
- lsls r1, 17
- adds r0, r1
- lsrs r4, r0, 24
- asrs r0, 24
- cmp r0, 0x6
- ble _080944EA
- movs r4, 0
-_080944EA:
- lsls r0, r4, 24
- asrs r0, 24
- movs r1, 0
- ldrsb r1, [r5, r1]
- cmp r0, r1
- bne _080944F8
- b _0809468E
-_080944F8:
- movs r7, 0x1
- b _08094692
- .align 2, 0
-_080944FC: .4byte sBoxCursorArea
-_08094500: .4byte sBoxCursorPosition
-_08094504: .4byte sPSSData
-_08094508: .4byte 0x00000ccf
-_0809450C: .4byte 0x00000cce
-_08094510: .4byte gMain
-_08094514:
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- beq _08094538
- ldrb r1, [r5]
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r0, 0
- beq _08094538
- movs r7, 0x1
- ldr r0, [r2]
- ldr r2, _08094534 @ =0x00000cd2
- adds r0, r2
- strb r1, [r0]
- movs r4, 0
- b _0809468E
- .align 2, 0
-_08094534: .4byte 0x00000cd2
-_08094538:
- mov r3, r12
- ldrh r1, [r3, 0x30]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08094566
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r0, 0
- bne _0809455C
- movs r7, 0x1
- ldr r0, [r2]
- ldr r1, _08094558 @ =0x00000cd2
- adds r0, r1
- ldrb r4, [r0]
- b _0809468E
- .align 2, 0
-_08094558: .4byte 0x00000cd2
-_0809455C:
- movs r7, 0x6
- movs r2, 0
- mov r9, r2
- movs r4, 0
- b _0809468E
-_08094566:
- mov r3, r12
- ldrh r1, [r3, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08094624
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r0, 0x6
- bne _0809458C
- ldr r0, [r2]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- bne _08094586
- movs r0, 0x4
- b _080946A0
-_08094586:
- movs r0, 0x1
- mov r8, r0
- b _08094624
-_0809458C:
- bl sub_8094924
- lsls r0, 24
- cmp r0, 0
- beq _08094624
- ldr r0, _080945A4 @ =sCanOnlyMove
- ldrb r0, [r0]
- cmp r0, 0
- bne _080945A8
- movs r0, 0x8
- b _080946A0
- .align 2, 0
-_080945A4: .4byte sCanOnlyMove
-_080945A8:
- movs r0, 0
- bl sub_8094E50
- subs r0, 0x1
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0xE
- bhi _08094624
- lsls r0, 2
- ldr r1, _080945C4 @ =_080945C8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080945C4: .4byte _080945C8
- .align 2, 0
-_080945C8:
- .4byte _08094604
- .4byte _08094608
- .4byte _0809460C
- .4byte _08094610
- .4byte _08094614
- .4byte _08094624
- .4byte _08094624
- .4byte _08094624
- .4byte _08094624
- .4byte _08094624
- .4byte _08094624
- .4byte _08094618
- .4byte _0809461C
- .4byte _08094624
- .4byte _08094620
-_08094604:
- movs r0, 0xB
- b _080946A0
-_08094608:
- movs r0, 0xC
- b _080946A0
-_0809460C:
- movs r0, 0xD
- b _080946A0
-_08094610:
- movs r0, 0xE
- b _080946A0
-_08094614:
- movs r0, 0xF
- b _080946A0
-_08094618:
- movs r0, 0x10
- b _080946A0
-_0809461C:
- movs r0, 0x11
- b _080946A0
-_08094620:
- movs r0, 0x12
- b _080946A0
-_08094624:
- ldr r2, _08094640 @ =gMain
- ldrh r1, [r2, 0x2E]
- movs r0, 0x2
- ands r0, r1
- mov r12, r2
- cmp r0, 0
- beq _0809464C
- ldr r0, _08094644 @ =sPSSData
- ldr r0, [r0]
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- bne _08094648
- movs r0, 0x13
- b _080946A0
- .align 2, 0
-_08094640: .4byte gMain
-_08094644: .4byte sPSSData
-_08094648:
- movs r1, 0x1
- mov r8, r1
-_0809464C:
- mov r2, r8
- cmp r2, 0
- beq _0809465C
- movs r7, 0x6
- movs r3, 0
- mov r9, r3
- movs r4, 0
- b _0809468E
-_0809465C:
- mov r0, r12
- ldrh r1, [r0, 0x2E]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0809468E
- bl sub_8094C84
- movs r0, 0
- b _080946A0
-_08094670:
- lsls r0, r4, 24
- movs r1, 0xFF
- lsls r1, 24
- adds r0, r1
- lsrs r4, r0, 24
- cmp r0, 0
- bge _08094680
- movs r4, 0x6
-_08094680:
- lsls r0, r4, 24
- asrs r0, 24
- movs r1, 0
- ldrsb r1, [r6, r1]
- cmp r0, r1
- beq _0809468E
- movs r7, 0x1
-_0809468E:
- cmp r7, 0
- beq _0809469E
-_08094692:
- cmp r7, 0x6
- beq _0809469E
- mov r0, r9
- adds r1, r4, 0
- bl sub_80927E8
-_0809469E:
- adds r0, r7, 0
-_080946A0:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_809448C
-
- thumb_func_start sub_80946AC
-sub_80946AC: @ 80946AC
- push {r4-r6,lr}
- ldr r3, _080946E8 @ =sPSSData
- ldr r0, [r3]
- ldr r1, _080946EC @ =0x00000ccf
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r3]
- ldr r2, _080946F0 @ =0x00000cce
- adds r0, r2
- strb r1, [r0]
- ldr r0, [r3]
- ldr r5, _080946F4 @ =0x00000cd3
- adds r0, r5
- strb r1, [r0]
- ldr r1, _080946F8 @ =gMain
- ldrh r2, [r1, 0x30]
- movs r0, 0x40
- ands r0, r2
- cmp r0, 0
- bne _08094772
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _080946FC
- movs r4, 0x1
- movs r1, 0
- movs r6, 0x2
- b _0809477E
- .align 2, 0
-_080946E8: .4byte sPSSData
-_080946EC: .4byte 0x00000ccf
-_080946F0: .4byte 0x00000cce
-_080946F4: .4byte 0x00000cd3
-_080946F8: .4byte gMain
-_080946FC:
- ldrh r2, [r1, 0x2C]
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- bne _08094722
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- bne _08094736
- ldr r0, _08094728 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0x1
- bne _0809473A
- movs r0, 0x80
- lsls r0, 2
- ands r0, r2
- cmp r0, 0
- beq _0809472C
-_08094722:
- movs r0, 0xA
- b _0809479A
- .align 2, 0
-_08094728: .4byte gSaveBlock2Ptr
-_0809472C:
- movs r0, 0x80
- lsls r0, 1
- ands r0, r2
- cmp r0, 0
- beq _0809473A
-_08094736:
- movs r0, 0x9
- b _0809479A
-_0809473A:
- ldrh r1, [r1, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08094752
- movs r0, 0
- bl sub_80920FC
- bl sub_8094900
- movs r0, 0x7
- b _0809479A
-_08094752:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0809475E
- movs r0, 0x13
- b _0809479A
-_0809475E:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0809476E
- bl sub_8094C84
- movs r0, 0
- b _0809479A
-_0809476E:
- movs r4, 0
- b _08094798
-_08094772:
- movs r4, 0x1
- movs r1, 0x3
- movs r6, 0
- ldr r0, [r3]
- adds r0, r5
- strb r4, [r0]
-_0809477E:
- cmp r4, 0
- beq _08094798
- lsls r5, r1, 24
- cmp r1, 0x2
- beq _0809478E
- movs r0, 0
- bl sub_80920FC
-_0809478E:
- lsrs r0, r5, 24
- lsls r1, r6, 24
- lsrs r1, 24
- bl sub_80927E8
-_08094798:
- adds r0, r4, 0
-_0809479A:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80946AC
-
- thumb_func_start sub_80947A0
-sub_80947A0: @ 80947A0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _080947F0 @ =sBoxCursorArea
- ldrb r0, [r0]
- mov r8, r0
- ldr r0, _080947F4 @ =sBoxCursorPosition
- mov r12, r0
- ldrb r2, [r0]
- ldr r3, _080947F8 @ =sPSSData
- ldr r0, [r3]
- ldr r1, _080947FC @ =0x00000ccf
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r3]
- ldr r6, _08094800 @ =0x00000cce
- adds r0, r6
- strb r1, [r0]
- ldr r0, [r3]
- ldr r5, _08094804 @ =0x00000cd3
- adds r0, r5
- strb r1, [r0]
- ldr r7, _08094808 @ =gMain
- ldrh r1, [r7, 0x30]
- movs r0, 0x40
- ands r0, r1
- adds r4, r3, 0
- cmp r0, 0
- bne _0809487A
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- beq _0809480C
- movs r7, 0x1
- movs r0, 0x2
- mov r8, r0
- movs r2, 0
- ldr r0, [r4]
- b _08094898
- .align 2, 0
-_080947F0: .4byte sBoxCursorArea
-_080947F4: .4byte sBoxCursorPosition
-_080947F8: .4byte sPSSData
-_080947FC: .4byte 0x00000ccf
-_08094800: .4byte 0x00000cce
-_08094804: .4byte 0x00000cd3
-_08094808: .4byte gMain
-_0809480C:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _08094828
- movs r7, 0x1
- lsls r0, r2, 24
- movs r1, 0xFF
- lsls r1, 24
- adds r0, r1
- lsrs r2, r0, 24
- cmp r0, 0
- bge _0809489C
- movs r2, 0x1
- b _0809489C
-_08094828:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08094846
- movs r7, 0x1
- lsls r0, r2, 24
- movs r1, 0x80
- lsls r1, 17
- adds r0, r1
- lsrs r2, r0, 24
- asrs r0, 24
- cmp r0, 0x1
- ble _0809489C
- movs r2, 0
- b _0809489C
-_08094846:
- ldrh r1, [r7, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0809485A
- movs r0, 0x4
- cmp r2, 0
- bne _080948AA
- movs r0, 0x5
- b _080948AA
-_0809485A:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08094866
- movs r0, 0x13
- b _080948AA
-_08094866:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08094876
- bl sub_8094C84
- movs r0, 0
- b _080948AA
-_08094876:
- movs r7, 0
- b _080948A8
-_0809487A:
- movs r7, 0x1
- movs r0, 0
- mov r8, r0
- ldr r0, [r3]
- adds r0, r6
- movs r1, 0xFF
- strb r1, [r0]
- mov r1, r12
- movs r0, 0
- ldrsb r0, [r1, r0]
- movs r2, 0x1D
- cmp r0, 0
- bne _08094896
- movs r2, 0x18
-_08094896:
- ldr r0, [r3]
-_08094898:
- adds r0, r5
- strb r7, [r0]
-_0809489C:
- cmp r7, 0
- beq _080948A8
- mov r0, r8
- adds r1, r2, 0
- bl sub_80927E8
-_080948A8:
- adds r0, r7, 0
-_080948AA:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80947A0
-
- thumb_func_start HandleInput
-HandleInput: @ 80948B4
- push {r4,r5,lr}
- movs r3, 0
- ldr r0, _080948E0 @ =gUnknown_83D3478
- ldr r1, [r0]
- adds r4, r0, 0
- cmp r1, 0
- beq _080948F8
- ldr r5, _080948E4 @ =sBoxCursorArea
-_080948C4:
- 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 _080948E8
- ldr r0, [r2]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- b _080948FA
- .align 2, 0
-_080948E0: .4byte gUnknown_83D3478
-_080948E4: .4byte sBoxCursorArea
-_080948E8:
- 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 _080948C4
-_080948F8:
- movs r0, 0
-_080948FA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end HandleInput
-
- thumb_func_start sub_8094900
-sub_8094900: @ 8094900
+ thumb_func_start AddBoxMenu
+AddBoxMenu: @ 8094900
push {lr}
bl InitMenu
movs r0, 0x9
@@ -912,7 +19,7 @@ sub_8094900: @ 8094900
bl SetMenuText
pop {r0}
bx r0
- thumb_func_end sub_8094900
+ thumb_func_end AddBoxMenu
thumb_func_start sub_8094924
sub_8094924: @ 8094924
diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s
index 99352ffa3..fc4129263 100644
--- a/data/pokemon_storage_system.s
+++ b/data/pokemon_storage_system.s
@@ -6,23 +6,6 @@
.section .rodata
.align 2
-gUnknown_83D3478:: @ 83D3478
- .4byte HandleInput_InBox
- .byte 0
- .align 2
- .4byte sub_809448C
- .byte 1
- .align 2
- .4byte sub_80946AC
- .byte 2
- .align 2
- .4byte sub_80947A0
- .byte 3
- .align 2
- .4byte NULL
- .byte 0
- .align 2
-
gUnknown_83D34A0:: @ 83D34A0
obj_tiles gUnknown_83D2BEC, 0x0800, 0
obj_tiles gUnknown_83D33EC, 0x0080, 1
diff --git a/include/pokemon_storage_system_internal.h b/include/pokemon_storage_system_internal.h
index caec69019..b518e49f4 100644
--- a/include/pokemon_storage_system_internal.h
+++ b/include/pokemon_storage_system_internal.h
@@ -457,4 +457,10 @@ void sub_80910CC(void);
u8 CountPartyMons(void);
u8 CountPartyAliveNonEggMonsExcept(u8 slotToIgnore);
+s8 sub_8094E50(u8 a0);
+bool8 sub_8095474(u8 action);
+u8 sub_8095AA0(void);
+bool8 sub_8095ABC(void);
+void sub_8095D44(u8 cursorArea, u8 cursorPos);
+
#endif //GUARD_POKEMON_STORAGE_SYSTEM_INTERNAL_H
diff --git a/src/pokemon_storage_system_5.c b/src/pokemon_storage_system_5.c
index ceff9e599..5530bb81c 100644
--- a/src/pokemon_storage_system_5.c
+++ b/src/pokemon_storage_system_5.c
@@ -37,10 +37,9 @@ void sub_8093AAC(void);
u8 InBoxInput_Normal(void);
u8 InBoxInput_GrabbingMultiple(void);
u8 InBoxInput_MovingMultiple(void);
-void sub_8094AD8(void);
-void sub_8095D44(u8 cursorArea, u8 cursorPos);
+void AddBoxMenu(void);
bool8 sub_8094924(void);
-s8 sub_8094E50(u8 a0);
+void sub_8094AD8(void);
void sub_8094C84(void);
const u16 gUnknown_83D2BCC[] = INCBIN_U16("graphics/interface/pss_unk_83D2BCC.gbapal");
@@ -1290,3 +1289,453 @@ u8 InBoxInput_Normal(void)
return retVal;
}
+
+u8 InBoxInput_GrabbingMultiple(void)
+{
+ if (JOY_HELD(A_BUTTON))
+ {
+ if (JOY_REPT(DPAD_UP))
+ {
+ if (sBoxCursorPosition / IN_BOX_ROWS != 0)
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition - IN_BOX_ROWS);
+ return 21;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_REPT(DPAD_DOWN))
+ {
+ if (sBoxCursorPosition + IN_BOX_ROWS < IN_BOX_COUNT)
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition + IN_BOX_ROWS);
+ return 21;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_REPT(DPAD_LEFT))
+ {
+ if (sBoxCursorPosition % IN_BOX_ROWS != 0)
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition - 1);
+ return 21;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_REPT(DPAD_RIGHT))
+ {
+ if ((sBoxCursorPosition + 1) % IN_BOX_ROWS != 0)
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition + 1);
+ return 21;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ else
+ {
+ if (sub_8095AA0() == sBoxCursorPosition)
+ {
+ sPSSData->inBoxMovingMode = 0;
+ sPSSData->field_CB8->invisible = FALSE;
+ return 22;
+ }
+ else
+ {
+ sIsMonBeingMoved = (sPSSData->cursorMonSpecies != SPECIES_NONE);
+ sPSSData->inBoxMovingMode = 2;
+ sMovingMonOrigBoxId = StorageGetCurrentBox();
+ return 23;
+ }
+ }
+}
+
+u8 InBoxInput_MovingMultiple(void)
+{
+ if (JOY_REPT(DPAD_UP))
+ {
+ if (sub_8095474(0))
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition - IN_BOX_ROWS);
+ return 25;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_REPT(DPAD_DOWN))
+ {
+ if (sub_8095474(1))
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition + IN_BOX_ROWS);
+ return 25;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_REPT(DPAD_LEFT))
+ {
+ if (sub_8095474(2))
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition - 1);
+ return 25;
+ }
+ else
+ {
+ return 10;
+ }
+ }
+ else if (JOY_REPT(DPAD_RIGHT))
+ {
+ if (sub_8095474(3))
+ {
+ sub_80927E8(CURSOR_AREA_IN_BOX, sBoxCursorPosition + 1);
+ return 25;
+ }
+ else
+ {
+ return 9;
+ }
+ }
+ else if (JOY_NEW(A_BUTTON))
+ {
+ if (sub_8095ABC())
+ {
+ sIsMonBeingMoved = FALSE;
+ sPSSData->inBoxMovingMode = 0;
+ return 26;
+ }
+ else
+ {
+ return 24;
+ }
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ return 24;
+ }
+ else
+ {
+ if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ {
+ if (JOY_HELD(L_BUTTON))
+ return 10;
+ if (JOY_HELD(R_BUTTON))
+ return 9;
+ }
+
+ return 0;
+ }
+}
+
+u8 HandleInput_InParty(void)
+{
+ u8 retVal;
+ bool8 gotoBox;
+ s8 cursorArea;
+ s8 cursorPosition;
+
+ do
+ {
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
+ sPSSData->field_CD3 = 0;
+ sPSSData->field_CD2 = 0;
+ sPSSData->field_CD7 = 0;
+ gotoBox = FALSE;
+ retVal = 0;
+
+ if (JOY_REPT(DPAD_UP))
+ {
+ if (--cursorPosition < 0)
+ cursorPosition = PARTY_SIZE;
+ if (cursorPosition != sBoxCursorPosition)
+ retVal = 1;
+ break;
+ }
+ else if (JOY_REPT(DPAD_DOWN))
+ {
+ if (++cursorPosition > PARTY_SIZE)
+ cursorPosition = 0;
+ if (cursorPosition != sBoxCursorPosition)
+ retVal = 1;
+ break;
+ }
+ else if (JOY_REPT(DPAD_LEFT) && sBoxCursorPosition != 0)
+ {
+ retVal = 1;
+ sPSSData->field_CD6 = sBoxCursorPosition;
+ cursorPosition = 0;
+ break;
+ }
+ else if (JOY_REPT(DPAD_RIGHT))
+ {
+ if (sBoxCursorPosition == 0)
+ {
+ retVal = 1;
+ cursorPosition = sPSSData->field_CD6;
+ }
+ else
+ {
+ retVal = 6;
+ cursorArea = CURSOR_AREA_IN_BOX;
+ cursorPosition = 0;
+ }
+ break;
+ }
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ if (sBoxCursorPosition == PARTY_SIZE)
+ {
+ if (sPSSData->boxOption == BOX_OPTION_DEPOSIT)
+ return 4;
+
+ gotoBox = TRUE;
+ }
+ else if (sub_8094924())
+ {
+ if (!sCanOnlyMove)
+ return 8;
+
+ switch (sub_8094E50(0))
+ {
+ case 1:
+ return 11;
+ case 2:
+ return 12;
+ case 3:
+ return 13;
+ case 4:
+ return 14;
+ case 5:
+ return 15;
+ case 12:
+ return 16;
+ case 13:
+ return 17;
+ case 15:
+ return 18;
+ }
+ }
+ }
+
+ if (JOY_NEW(B_BUTTON))
+ {
+ if (sPSSData->boxOption == BOX_OPTION_DEPOSIT)
+ return 19;
+
+ gotoBox = TRUE;
+ }
+
+ if (gotoBox)
+ {
+ retVal = 6;
+ cursorArea = CURSOR_AREA_IN_BOX;
+ cursorPosition = 0;
+ }
+ else if (JOY_NEW(SELECT_BUTTON))
+ {
+ sub_8094C84();
+ return 0;
+ }
+
+ } while (0);
+
+ if (retVal != 0)
+ {
+ if (retVal != 6)
+ sub_80927E8(cursorArea, cursorPosition);
+ }
+
+ return retVal;
+}
+
+u8 HandleInput_OnBox(void)
+{
+ u8 retVal;
+ s8 cursorArea;
+ s8 cursorPosition;
+
+ do
+ {
+ sPSSData->field_CD3 = 0;
+ sPSSData->field_CD2 = 0;
+ sPSSData->field_CD7 = 0;
+
+ if (JOY_REPT(DPAD_UP))
+ {
+ retVal = 1;
+ cursorArea = CURSOR_AREA_BUTTONS;
+ cursorPosition = 0;
+ sPSSData->field_CD7 = 1;
+ break;
+ }
+ else if (JOY_REPT(DPAD_DOWN))
+ {
+ retVal = 1;
+ cursorArea = CURSOR_AREA_IN_BOX;
+ cursorPosition = 2;
+ break;
+ }
+
+ if (JOY_HELD(DPAD_LEFT))
+ return 10;
+ if (JOY_HELD(DPAD_RIGHT))
+ return 9;
+
+ if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ {
+ if (JOY_HELD(L_BUTTON))
+ return 10;
+ if (JOY_HELD(R_BUTTON))
+ return 9;
+ }
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ sub_80920FC(FALSE);
+ AddBoxMenu();
+ return 7;
+ }
+
+ if (JOY_NEW(B_BUTTON))
+ return 19;
+
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ sub_8094C84();
+ return 0;
+ }
+
+ retVal = 0;
+
+ } while (0);
+
+ if (retVal)
+ {
+ if (cursorArea != CURSOR_AREA_BOX)
+ sub_80920FC(FALSE);
+ sub_80927E8(cursorArea, cursorPosition);
+ }
+
+ return retVal;
+}
+
+u8 HandleInput_OnButtons(void)
+{
+ u8 retVal;
+ s8 cursorArea;
+ s8 cursorPosition;
+ s8 prevPos;
+
+ do
+ {
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
+ sPSSData->field_CD3 = 0;
+ sPSSData->field_CD2 = 0;
+ sPSSData->field_CD7 = 0;
+
+ if (JOY_REPT(DPAD_UP))
+ {
+ retVal = 1;
+ cursorArea = CURSOR_AREA_IN_BOX;
+ sPSSData->field_CD2 = -1;
+ if (sBoxCursorPosition == 0)
+ cursorPosition = IN_BOX_COUNT - 1 - 5;
+ else
+ cursorPosition = IN_BOX_COUNT - 1;
+ sPSSData->field_CD7 = 1;
+ break;
+ }
+ else if (JOY_REPT(DPAD_DOWN | START_BUTTON))
+ {
+ retVal = 1;
+ cursorArea = CURSOR_AREA_BOX;
+ cursorPosition = 0;
+ sPSSData->field_CD7 = 1;
+ break;
+ }
+
+ if (JOY_REPT(DPAD_LEFT))
+ {
+ retVal = 1;
+ if (--cursorPosition < 0)
+ cursorPosition = 1;
+ break;
+ }
+ else if (JOY_REPT(DPAD_RIGHT))
+ {
+ retVal = 1;
+ if (++cursorPosition > 1)
+ cursorPosition = 0;
+ break;
+ }
+
+ if (JOY_NEW(A_BUTTON))
+ {
+ return cursorPosition == 0 ? 5 : 4;
+ }
+ if (JOY_NEW(B_BUTTON))
+ return 19;
+
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ sub_8094C84();
+ return 0;
+ }
+
+ retVal = 0;
+ } while (0);
+
+ if (retVal != 0)
+ sub_80927E8(cursorArea, cursorPosition);
+
+ return retVal;
+}
+
+u8 HandleInput(void)
+{
+ struct
+ {
+ u8 (*func)(void);
+ s8 area;
+ }
+ static const inputFuncs[] =
+ {
+ {HandleInput_InBox, CURSOR_AREA_IN_BOX},
+ {HandleInput_InParty, CURSOR_AREA_IN_PARTY},
+ {HandleInput_OnBox, CURSOR_AREA_BOX},
+ {HandleInput_OnButtons, CURSOR_AREA_BUTTONS},
+ {NULL, 0},
+ };
+
+ u16 i = 0;
+ while (inputFuncs[i].func != NULL)
+ {
+ if (inputFuncs[i].area == sBoxCursorArea)
+ return inputFuncs[i].func();
+ i++;
+ }
+
+ return 0;
+}