diff options
-rw-r--r-- | asm/pokemon_storage_system.s | 899 | ||||
-rw-r--r-- | data/pokemon_storage_system.s | 17 | ||||
-rw-r--r-- | include/pokemon_storage_system_internal.h | 6 | ||||
-rw-r--r-- | src/pokemon_storage_system_5.c | 455 |
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; +} |