summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/player_pc.s1020
-rw-r--r--include/menu.h2
-rw-r--r--shared_syms.txt2
-rw-r--r--src/player_pc.c757
4 files changed, 760 insertions, 1021 deletions
diff --git a/asm/player_pc.s b/asm/player_pc.s
index 3c9c069d6..7bd8b6c28 100644
--- a/asm/player_pc.s
+++ b/asm/player_pc.s
@@ -6,1026 +6,6 @@
.text
- thumb_func_start PlayerPCProcessMenuInput
-PlayerPCProcessMenuInput: @ 8139D64
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, r5, 0
- ldr r2, _08139D88 @ =gMain
- ldrh r1, [r2, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08139D8C
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- bl MoveMenuCursor
- b _08139E10
- .align 2, 0
-_08139D88: .4byte gMain
-_08139D8C:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08139DA2
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl MoveMenuCursor
- b _08139E10
-_08139DA2:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08139DE0
- bl sub_8072DEC
- movs r0, 0x5
- bl PlaySE
- ldr r4, _08139DD8 @ =gUnknown_08406298
- bl GetMenuCursorPos
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08139DDC @ =gUnknown_02039314
- ldr r1, [r1]
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 3
- adds r4, 0x4
- adds r0, r4
- ldr r1, [r0]
- adds r0, r5, 0
- bl _call_via_r1
- b _08139E10
- .align 2, 0
-_08139DD8: .4byte gUnknown_08406298
-_08139DDC: .4byte gUnknown_02039314
-_08139DE0:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08139E10
- bl sub_8072DEC
- movs r0, 0x5
- bl PlaySE
- ldr r2, _08139E18 @ =gUnknown_08406298
- ldr r0, _08139E1C @ =gUnknown_030007B4
- ldrb r0, [r0]
- ldr r1, _08139E20 @ =gUnknown_02039314
- ldr r1, [r1]
- adds r0, r1
- subs r0, 0x1
- ldrb r0, [r0]
- lsls r0, 3
- adds r2, 0x4
- adds r0, r2
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
-_08139E10:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08139E18: .4byte gUnknown_08406298
-_08139E1C: .4byte gUnknown_030007B4
-_08139E20: .4byte gUnknown_02039314
- thumb_func_end PlayerPCProcessMenuInput
-
- thumb_func_start ReshowPlayerPC
-ReshowPlayerPC: @ 8139E24
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08139E38 @ =gOtherText_WhatWillYouDo
- ldr r2, _08139E3C @ =InitPlayerPCMenu
- movs r3, 0
- bl DisplayItemMessageOnField
- pop {r0}
- bx r0
- .align 2, 0
-_08139E38: .4byte gOtherText_WhatWillYouDo
-_08139E3C: .4byte InitPlayerPCMenu
- thumb_func_end ReshowPlayerPC
-
- thumb_func_start PlayerPC_ItemStorage
-PlayerPC_ItemStorage: @ 8139E40
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- bl InitItemStorageMenu
- ldr r1, _08139E64 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08139E68 @ =ItemStorageMenuProcessInput
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08139E64: .4byte gTasks
-_08139E68: .4byte ItemStorageMenuProcessInput
- thumb_func_end PlayerPC_ItemStorage
-
- thumb_func_start PlayerPC_Mailbox
-PlayerPC_Mailbox: @ 8139E6C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r0, 0
- movs r1, 0
- movs r2, 0xA
- movs r3, 0x9
- bl MenuZeroFillWindowRect
- bl sub_813AF3C
- ldr r1, _08139E9C @ =0x0201fe00
- movs r2, 0
- strb r0, [r1, 0x3]
- lsls r0, 24
- cmp r0, 0
- bne _08139EA8
- ldr r1, _08139EA0 @ =gOtherText_NoMailHere
- ldr r2, _08139EA4 @ =ReshowPlayerPC
- adds r0, r4, 0
- movs r3, 0
- bl DisplayItemMessageOnField
- b _08139ECA
- .align 2, 0
-_08139E9C: .4byte 0x0201fe00
-_08139EA0: .4byte gOtherText_NoMailHere
-_08139EA4: .4byte ReshowPlayerPC
-_08139EA8:
- strb r2, [r1]
- strb r2, [r1, 0x2]
- bl sub_813AF78
- adds r0, r4, 0
- bl sub_813A240
- adds r0, r4, 0
- bl sub_813B108
- ldr r0, _08139ED0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08139ED4 @ =sub_813B174
- str r0, [r1]
-_08139ECA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08139ED0: .4byte gTasks
-_08139ED4: .4byte sub_813B174
- thumb_func_end PlayerPC_Mailbox
-
- thumb_func_start PlayerPC_Decoration
-PlayerPC_Decoration: @ 8139ED8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0
- movs r2, 0xA
- movs r3, 0x9
- bl MenuZeroFillWindowRect
- adds r0, r4, 0
- bl DoPlayerPCDecoration
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end PlayerPC_Decoration
-
- thumb_func_start PlayerPC_TurnOff
-PlayerPC_TurnOff: @ 8139EF8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08139F24 @ =gUnknown_030007B4
- ldrb r0, [r0]
- cmp r0, 0x4
- bne _08139F3C
- movs r0, 0
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- ldr r0, _08139F28 @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _08139F30
- ldr r0, _08139F2C @ =gUnknown_08152850
- bl ScriptContext1_SetupScript
- b _08139F4C
- .align 2, 0
-_08139F24: .4byte gUnknown_030007B4
-_08139F28: .4byte gSaveBlock2
-_08139F2C: .4byte gUnknown_08152850
-_08139F30:
- ldr r0, _08139F38 @ =gUnknown_08152C75
- bl ScriptContext1_SetupScript
- b _08139F4C
- .align 2, 0
-_08139F38: .4byte gUnknown_08152C75
-_08139F3C:
- movs r0, 0
- movs r1, 0
- movs r2, 0xA
- movs r3, 0x9
- bl MenuZeroFillWindowRect
- bl EnableBothScriptContexts
-_08139F4C:
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end PlayerPC_TurnOff
-
- thumb_func_start InitItemStorageMenu
-InitItemStorageMenu: @ 8139F58
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0
- movs r2, 0xA
- movs r3, 0x9
- bl MenuZeroFillWindowRect
- movs r0, 0
- movs r1, 0
- movs r2, 0xB
- movs r3, 0x9
- bl MenuDrawTextWindow
- ldr r3, _08139FAC @ =gUnknown_084062C0
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0x4
- bl PrintMenuItems
- str r4, [sp]
- movs r0, 0xA
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x1
- movs r2, 0x1
- movs r3, 0x4
- bl InitMenu
- ldr r0, _08139FB0 @ =gUnknown_08406288
- lsls r4, 2
- adds r4, r0
- ldr r0, [r4]
- bl ItemStorageMenuPrint
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08139FAC: .4byte gUnknown_084062C0
-_08139FB0: .4byte gUnknown_08406288
- thumb_func_end InitItemStorageMenu
-
- thumb_func_start ItemStorageMenuPrint
-ItemStorageMenuPrint: @ 8139FB4
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x2
- movs r1, 0xF
- movs r2, 0x1B
- movs r3, 0x12
- bl MenuFillWindowRectWithBlankTile
- adds r0, r4, 0
- movs r1, 0x2
- movs r2, 0xF
- bl MenuPrint
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ItemStorageMenuPrint
-
- thumb_func_start ItemStorageMenuProcessInput
-ItemStorageMenuProcessInput: @ 8139FD4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, r5, 0
- ldr r2, _08139FF4 @ =gMain
- ldrh r1, [r2, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08139FF8
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- b _0813A008
- .align 2, 0
-_08139FF4: .4byte gMain
-_08139FF8:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0813A024
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
-_0813A008:
- bl MoveMenuCursor
- ldr r4, _0813A020 @ =gUnknown_08406288
- bl GetMenuCursorPos
- lsls r0, 24
- lsrs r0, 22
- adds r0, r4
- ldr r0, [r0]
- bl ItemStorageMenuPrint
- b _0813A06C
- .align 2, 0
-_0813A020: .4byte gUnknown_08406288
-_0813A024:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0813A050
- movs r0, 0x5
- bl PlaySE
- ldr r4, _0813A04C @ =gUnknown_084062C0
- bl GetMenuCursorPos
- lsls r0, 24
- lsrs r0, 21
- adds r4, 0x4
- adds r0, r4
- ldr r1, [r0]
- adds r0, r5, 0
- bl _call_via_r1
- b _0813A06C
- .align 2, 0
-_0813A04C: .4byte gUnknown_084062C0
-_0813A050:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0813A06C
- bl sub_8072DEC
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0813A074 @ =gUnknown_084062C0
- ldr r1, [r0, 0x1C]
- adds r0, r4, 0
- bl _call_via_r1
-_0813A06C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0813A074: .4byte gUnknown_084062C0
- thumb_func_end ItemStorageMenuProcessInput
-
- thumb_func_start Task_ItemStorage_Deposit
-Task_ItemStorage_Deposit: @ 813A078
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0813A09C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0813A094
- bl sub_80A6A30
- adds r0, r4, 0
- bl DestroyTask
-_0813A094:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813A09C: .4byte gPaletteFade
- thumb_func_end Task_ItemStorage_Deposit
-
- thumb_func_start ItemStorage_Deposit
-ItemStorage_Deposit: @ 813A0A0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0813A0C0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, _0813A0C4 @ =Task_ItemStorage_Deposit
- str r0, [r1]
- movs r0, 0x1
- movs r1, 0
- bl fade_screen
- pop {r0}
- bx r0
- .align 2, 0
-_0813A0C0: .4byte gTasks
-_0813A0C4: .4byte Task_ItemStorage_Deposit
- thumb_func_end ItemStorage_Deposit
-
- thumb_func_start sub_813A0C8
-sub_813A0C8: @ 813A0C8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_807D770
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0813A0E8
- ldr r0, _0813A0F0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0813A0F4 @ =ItemStorageMenuProcessInput
- str r0, [r1]
-_0813A0E8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0813A0F0: .4byte gTasks
-_0813A0F4: .4byte ItemStorageMenuProcessInput
- thumb_func_end sub_813A0C8
-
- thumb_func_start sub_813A0F8
-sub_813A0F8: @ 813A0F8
- push {lr}
- bl MenuDisplayMessageBox
- movs r0, 0x1
- bl InitItemStorageMenu
- ldr r0, _0813A114 @ =sub_813A0C8
- movs r1, 0
- bl CreateTask
- bl pal_fill_black
- pop {r0}
- bx r0
- .align 2, 0
-_0813A114: .4byte sub_813A0C8
- thumb_func_end sub_813A0F8
-
- thumb_func_start ItemStorage_Withdraw
-ItemStorage_Withdraw: @ 813A118
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r6, r0, 3
- ldr r7, _0813A174 @ =gTasks + 0x8
- adds r4, r6, r7
- bl sub_8072DEC
- movs r0, 0
- movs r1, 0
- movs r2, 0xB
- movs r3, 0x9
- bl MenuZeroFillWindowRect
- bl CountUsedPCItemSlots
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x4]
- cmp r0, 0
- beq _0813A17C
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- movs r0, 0
- strh r0, [r4, 0xC]
- strh r0, [r4]
- strh r0, [r4, 0x2]
- adds r0, r5, 0
- bl sub_813A240
- adds r0, r5, 0
- movs r1, 0
- bl sub_813AE6C
- adds r0, r7, 0
- subs r0, 0x8
- adds r0, r6, r0
- ldr r1, _0813A178 @ =sub_813A280
- str r1, [r0]
- b _0813A188
- .align 2, 0
-_0813A174: .4byte gTasks + 0x8
-_0813A178: .4byte sub_813A280
-_0813A17C:
- ldr r1, _0813A190 @ =gOtherText_NoItems
- ldr r2, _0813A194 @ =PlayerPC_ItemStorage
- adds r0, r5, 0
- movs r3, 0
- bl DisplayItemMessageOnField
-_0813A188:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0813A190: .4byte gOtherText_NoItems
-_0813A194: .4byte PlayerPC_ItemStorage
- thumb_func_end ItemStorage_Withdraw
-
- thumb_func_start ItemStorage_Toss
-ItemStorage_Toss: @ 813A198
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r6, r0, 3
- ldr r7, _0813A1F8 @ =gTasks + 0x8
- adds r4, r6, r7
- bl sub_8072DEC
- movs r0, 0
- movs r1, 0
- movs r2, 0xB
- movs r3, 0x9
- bl MenuZeroFillWindowRect
- bl CountUsedPCItemSlots
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x4]
- cmp r0, 0
- beq _0813A200
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- movs r0, 0x2
- strh r0, [r4, 0xC]
- movs r0, 0
- strh r0, [r4]
- strh r0, [r4, 0x2]
- adds r0, r5, 0
- bl sub_813A240
- adds r0, r5, 0
- movs r1, 0x2
- bl sub_813AE6C
- adds r0, r7, 0
- subs r0, 0x8
- adds r0, r6, r0
- ldr r1, _0813A1FC @ =sub_813A280
- str r1, [r0]
- b _0813A20C
- .align 2, 0
-_0813A1F8: .4byte gTasks + 0x8
-_0813A1FC: .4byte sub_813A280
-_0813A200:
- ldr r1, _0813A214 @ =gOtherText_NoItems
- ldr r2, _0813A218 @ =PlayerPC_ItemStorage
- adds r0, r5, 0
- movs r3, 0
- bl DisplayItemMessageOnField
-_0813A20C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0813A214: .4byte gOtherText_NoItems
-_0813A218: .4byte PlayerPC_ItemStorage
- thumb_func_end ItemStorage_Toss
-
- thumb_func_start ItemStorage_Exit
-ItemStorage_Exit: @ 813A21C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8072DEC
- movs r0, 0
- movs r1, 0
- movs r2, 0xB
- movs r3, 0x9
- bl MenuZeroFillWindowRect
- adds r0, r4, 0
- bl ReshowPlayerPC
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ItemStorage_Exit
-
- thumb_func_start sub_813A240
-sub_813A240: @ 813A240
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _0813A260 @ =gTasks + 0x8
- adds r1, r0
- ldrh r2, [r1, 0x4]
- movs r3, 0x4
- ldrsh r0, [r1, r3]
- cmp r0, 0x7
- ble _0813A264
- movs r0, 0x8
- b _0813A266
- .align 2, 0
-_0813A260: .4byte gTasks + 0x8
-_0813A264:
- adds r0, r2, 0x1
-_0813A266:
- strh r0, [r1, 0x8]
- ldr r1, _0813A274 @ =0x0201fe00
- ldrb r0, [r1, 0x3]
- cmp r0, 0x7
- bls _0813A278
- movs r0, 0x8
- b _0813A27A
- .align 2, 0
-_0813A274: .4byte 0x0201fe00
-_0813A278:
- adds r0, 0x1
-_0813A27A:
- strb r0, [r1, 0x1]
- pop {r0}
- bx r0
- thumb_func_end sub_813A240
-
- thumb_func_start sub_813A280
-sub_813A280: @ 813A280
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0813A2DC @ =gTasks + 0x8
- adds r4, r0, r1
- ldr r2, _0813A2E0 @ =gMain
- ldrh r1, [r2, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0813A306
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0813A2E4
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- bl MoveMenuCursor
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- ldrh r1, [r4, 0x2]
- adds r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0813A2CC
- b _0813A460
-_0813A2CC:
- lsls r0, r1, 16
- asrs r1, r0, 16
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- cmp r1, r0
- beq _0813A34C
- b _0813A358
- .align 2, 0
-_0813A2DC: .4byte gTasks + 0x8
-_0813A2E0: .4byte gMain
-_0813A2E4:
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0813A2EE
- b _0813A460
-_0813A2EE:
- movs r0, 0x5
- bl PlaySE
- ldrh r0, [r4, 0x2]
- subs r0, 0x1
- strh r0, [r4, 0x2]
- adds r0, r5, 0
- bl sub_813AE0C
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- b _0813A394
-_0813A306:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0813A3A0
- movs r0, 0
- ldrsh r1, [r4, r0]
- movs r2, 0x8
- ldrsh r0, [r4, r2]
- subs r0, 0x1
- cmp r1, r0
- beq _0813A370
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl MoveMenuCursor
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- ldrh r1, [r4, 0x2]
- adds r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0813A340
- b _0813A460
-_0813A340:
- lsls r0, r1, 16
- asrs r1, r0, 16
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _0813A358
-_0813A34C:
- ldr r0, _0813A354 @ =0x0000ffff
- bl sub_813AD58
- b _0813A460
- .align 2, 0
-_0813A354: .4byte 0x0000ffff
-_0813A358:
- ldr r0, _0813A36C @ =gSaveBlock1
- lsls r1, 2
- adds r1, r0
- movs r0, 0x93
- lsls r0, 3
- adds r1, r0
- ldrh r0, [r1]
- bl sub_813AD58
- b _0813A460
- .align 2, 0
-_0813A36C: .4byte gSaveBlock1
-_0813A370:
- movs r2, 0x2
- ldrsh r0, [r4, r2]
- adds r0, r1
- movs r2, 0x4
- ldrsh r1, [r4, r2]
- cmp r0, r1
- beq _0813A460
- movs r0, 0x5
- bl PlaySE
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- adds r0, r5, 0
- bl sub_813AE0C
- movs r1, 0x12
- ldrsh r0, [r4, r1]
-_0813A394:
- cmp r0, 0
- beq _0813A460
- movs r0, 0
- bl MoveMenuCursor
- b _0813A460
-_0813A3A0:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0813A3F0
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0813A3E8
- movs r1, 0
- ldrsh r0, [r4, r1]
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- adds r0, r1
- movs r2, 0x4
- ldrsh r1, [r4, r2]
- cmp r0, r1
- beq _0813A3DC
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- strh r0, [r4, 0x12]
- ldrh r0, [r4]
- ldrh r1, [r4, 0x2]
- adds r0, r1
- strh r0, [r4, 0x10]
- ldr r0, _0813A3E4 @ =0x0000fff7
- bl sub_813AD58
-_0813A3DC:
- adds r0, r5, 0
- bl sub_813ABE8
- b _0813A460
- .align 2, 0
-_0813A3E4: .4byte 0x0000fff7
-_0813A3E8:
- movs r0, 0x5
- bl PlaySE
- b _0813A420
-_0813A3F0:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0813A430
- movs r0, 0x5
- bl PlaySE
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0813A420
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- adds r0, r1
- movs r2, 0x4
- ldrsh r1, [r4, r2]
- cmp r0, r1
- beq _0813A44A
- adds r0, r5, 0
- bl sub_813A4B4
- b _0813A460
-_0813A420:
- adds r0, r5, 0
- movs r1, 0
- bl sub_813AA30
- adds r0, r5, 0
- bl sub_813AE0C
- b _0813A460
-_0813A430:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0813A460
- movs r0, 0x5
- bl PlaySE
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0813A452
- bl sub_8072DEC
-_0813A44A:
- adds r0, r5, 0
- bl sub_813A468
- b _0813A460
-_0813A452:
- adds r0, r6, 0
- movs r1, 0x1
- bl sub_813AA30
- adds r0, r6, 0
- bl sub_813AE0C
-_0813A460:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_813A280
-
- thumb_func_start sub_813A468
-sub_813A468: @ 813A468
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- bl BuyMenuFreeMemory
- movs r0, 0
- bl DestroyVerticalScrollIndicator
- movs r0, 0x1
- bl DestroyVerticalScrollIndicator
- movs r0, 0
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- bl MenuDisplayMessageBox
- ldr r0, _0813A4AC @ =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- ldrb r0, [r4, 0x14]
- bl InitItemStorageMenu
- ldr r0, _0813A4B0 @ =ItemStorageMenuProcessInput
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0813A4AC: .4byte gTasks
-_0813A4B0: .4byte ItemStorageMenuProcessInput
- thumb_func_end sub_813A468
-
- thumb_func_start sub_813A4B4
-sub_813A4B4: @ 813A4B4
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _0813A500 @ =gTasks + 0x8
- adds r4, r0, r1
- ldrb r0, [r4, 0x2]
- ldrb r1, [r4]
- adds r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0
- bl sub_80F996C
- movs r0, 0x1
- bl sub_80F996C
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0813A518
- ldr r1, _0813A504 @ =gSaveBlock1
- lsls r0, r5, 2
- adds r0, r1
- ldr r1, _0813A508 @ =0x0000049a
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0x1
- bne _0813A50C
- strh r0, [r4, 0x6]
- adds r0, r6, 0
- bl sub_813A6FC
- b _0813A570
- .align 2, 0
-_0813A500: .4byte gTasks + 0x8
-_0813A504: .4byte gSaveBlock1
-_0813A508: .4byte 0x0000049a
-_0813A50C:
- ldr r0, _0813A514 @ =0x0000fffe
- bl sub_813AD58
- b _0813A542
- .align 2, 0
-_0813A514: .4byte 0x0000fffe
-_0813A518:
- ldr r1, _0813A534 @ =gSaveBlock1
- lsls r0, r5, 2
- adds r0, r1
- ldr r1, _0813A538 @ =0x0000049a
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0x1
- bne _0813A53C
- strh r0, [r4, 0x6]
- adds r0, r6, 0
- bl sub_813A794
- b _0813A570
- .align 2, 0
-_0813A534: .4byte gSaveBlock1
-_0813A538: .4byte 0x0000049a
-_0813A53C:
- ldr r0, _0813A578 @ =0x0000fffc
- bl sub_813AD58
-_0813A542:
- movs r0, 0x1
- strh r0, [r4, 0x6]
- movs r0, 0x6
- movs r1, 0x8
- movs r2, 0xD
- movs r3, 0xB
- bl MenuDrawTextWindow
- ldrh r0, [r4, 0x6]
- movs r1, 0x3
- str r1, [sp]
- movs r1, 0x1
- movs r2, 0x8
- movs r3, 0x9
- bl sub_80A418C
- ldr r1, _0813A57C @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _0813A580 @ =sub_813A584
- str r1, [r0]
-_0813A570:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0813A578: .4byte 0x0000fffc
-_0813A57C: .4byte gTasks
-_0813A580: .4byte sub_813A584
- thumb_func_end sub_813A4B4
-
thumb_func_start sub_813A584
sub_813A584: @ 813A584
push {r4-r7,lr}
diff --git a/include/menu.h b/include/menu.h
index 66423659c..3e08cb7eb 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -6,7 +6,7 @@
struct MenuAction
{
u8 *text;
- u8 (*func)(void);
+ u8 (*func)();
};
void sub_8071C20(void);
diff --git a/shared_syms.txt b/shared_syms.txt
index b85cd1f76..7c87c940d 100644
--- a/shared_syms.txt
+++ b/shared_syms.txt
@@ -16,6 +16,8 @@ unk_2016800 = 0x2016800;
unk_2016A00 = 0x2016A00;
unk_2016C00 = 0x2016C00;
+unk_201FE00 = 0x201FE00;
+
gSecretBaseRecord = 0x2017000;
dword_2017100 = 0x2017100;
diff --git a/src/player_pc.c b/src/player_pc.c
index 79d7a671b..822e2108e 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -2,21 +2,60 @@
#include "item.h"
#include "task.h"
#include "menu.h"
+#include "sound.h"
+#include "main.h"
+#include "script.h"
+#include "palette.h"
+#include "weather.h"
+#include "asm.h"
+#include "string_util.h"
extern void DisplayItemMessageOnField(u8, u8*, TaskFunc, u16);
+extern void ItemStorageMenuProcessInput(u8);
+extern void DoPlayerPCDecoration(u8);
+extern void BuyMenuFreeMemory(void);
+extern void DestroyVerticalScrollIndicator(u8);
+extern u8 sub_813AF3C(void);
+extern void sub_813AF78(void);
+extern void sub_813A240(u8);
+extern void sub_813B108(u8);
+extern void sub_813B174(u8);
+extern void sub_80A6A30(void);
+extern u8 sub_807D770(void);
+extern void sub_813A280(u8);
+extern void sub_813AE6C(u8, u8);
+extern void sub_813A240(u8);
+extern void sub_813AD58(u16);
+extern void sub_813AE0C(u8);
+extern void sub_813ABE8(u8);
+extern void sub_813AA30(u8, u8);
+extern void sub_813A4B4(u8);
+extern void sub_813A468(u8);
+
+extern u8 gOtherText_NoItems[];
extern u16 gNewGamePCItems[];
extern u8 gOtherText_WhatWillYouDo[];
+extern u8 gOtherText_NoMailHere[];
extern u8 *gUnknown_02039314;
extern struct MenuAction gUnknown_08406298[];
extern u8 gUnknown_084062B8[];
extern u8 gUnknown_084062BC[];
extern u8 gUnknown_030007B4;
+extern u8 unk_201FE00[];
+
+extern u8 gUnknown_08152850;
+extern u8 gUnknown_08152C75;
+
+extern u32 gUnknown_08406288[];
+extern const struct MenuAction gUnknown_084062C0[];
void InitPlayerPCMenu(u8 taskId);
void PlayerPCProcessMenuInput(u8 taskId);
+void InitItemStorageMenu(u8);
+void ItemStorageMenuPrint(u8 *);
void NewGameInitPCItems(void)
{
@@ -59,3 +98,721 @@ void InitPlayerPCMenu(u8 taskId)
InitMenu(0, 1, 1, gUnknown_030007B4, 0, 9);
gTasks[taskId].func = PlayerPCProcessMenuInput;
}
+
+void PlayerPCProcessMenuInput(u8 taskId)
+{
+ if(gMain.newAndRepeatedKeys & 0x40)
+ {
+ PlaySE(5);
+ MoveMenuCursor(-1);
+ }
+ else if(gMain.newAndRepeatedKeys & 0x80)
+ {
+ PlaySE(5);
+ MoveMenuCursor(1);
+ }
+ else if(gMain.newKeys & 0x1)
+ {
+ sub_8072DEC();
+ PlaySE(5);
+ gUnknown_08406298[gUnknown_02039314[GetMenuCursorPos()]].func(taskId);
+ }
+ else if(gMain.newKeys & 0x2)
+ {
+ sub_8072DEC();
+ PlaySE(5);
+ gUnknown_08406298[gUnknown_030007B4[gUnknown_02039314 - 1]].func(taskId);
+ }
+}
+
+void ReshowPlayerPC(u8 var)
+{
+ DisplayItemMessageOnField(var, gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0);
+}
+
+void PlayerPC_ItemStorage(u8 taskId)
+{
+ InitItemStorageMenu(0);
+ gTasks[taskId].func = ItemStorageMenuProcessInput;
+}
+
+void PlayerPC_Mailbox(u8 taskId)
+{
+ MenuZeroFillWindowRect(0, 0, 10, 9);
+ unk_201FE00[3] = sub_813AF3C();
+ if(!unk_201FE00[3])
+ DisplayItemMessageOnField(taskId, gOtherText_NoMailHere, ReshowPlayerPC, 0);
+ else
+ {
+ unk_201FE00[0] = 0;
+ unk_201FE00[2] = 0;
+ sub_813AF78();
+ sub_813A240(taskId);
+ sub_813B108(taskId);
+ gTasks[taskId].func = sub_813B174;
+ }
+}
+
+void PlayerPC_Decoration(u8 var)
+{
+ MenuZeroFillWindowRect(0, 0, 10, 9);
+ DoPlayerPCDecoration(var);
+}
+
+void PlayerPC_TurnOff(u8 taskId)
+{
+ if(gUnknown_030007B4 == 4)
+ {
+ MenuZeroFillWindowRect(0, 0, 0x1D, 0x13);
+ if(!gSaveBlock2.playerGender)
+ ScriptContext1_SetupScript(&gUnknown_08152850); // male
+ else
+ ScriptContext1_SetupScript(&gUnknown_08152C75); // female
+ }
+ else
+ {
+ MenuZeroFillWindowRect(0, 0, 10, 9);
+ EnableBothScriptContexts();
+ }
+ DestroyTask(taskId);
+}
+
+void InitItemStorageMenu(u8 var)
+{
+ MenuZeroFillWindowRect(0, 0, 10, 9);
+ MenuDrawTextWindow(0, 0, 11, 9);
+ PrintMenuItems(1, 1, 4, gUnknown_084062C0);
+ InitMenu(0, 1, 1, 4, var, 10);
+ ItemStorageMenuPrint((u8 *)gUnknown_08406288[var]);
+}
+
+void ItemStorageMenuPrint(u8 *textPtr)
+{
+ MenuFillWindowRectWithBlankTile(2, 15, 27, 18);
+ MenuPrint(textPtr, 2, 15);
+}
+
+void ItemStorageMenuProcessInput(u8 var)
+{
+ if(gMain.newAndRepeatedKeys & 0x40)
+ {
+ PlaySE(5);
+ MoveMenuCursor(-1);
+ ItemStorageMenuPrint((u8 *)gUnknown_08406288[GetMenuCursorPos()]);
+ }
+ else if(gMain.newAndRepeatedKeys & 0x80)
+ {
+ PlaySE(5);
+ MoveMenuCursor(1);
+ ItemStorageMenuPrint((u8 *)gUnknown_08406288[GetMenuCursorPos()]);
+ }
+ else if(gMain.newKeys & 0x1)
+ {
+ PlaySE(5);
+ gUnknown_084062C0[GetMenuCursorPos()].func(var);
+ }
+ else if(gMain.newKeys & 0x2)
+ {
+ sub_8072DEC();
+ PlaySE(5);
+ gUnknown_084062C0[3].func(var);
+ }
+}
+
+void Task_ItemStorage_Deposit(u8 taskId)
+{
+ if(!gPaletteFade.active)
+ {
+ sub_80A6A30();
+ DestroyTask(taskId);
+ }
+}
+
+void ItemStorage_Deposit(u8 taskId)
+{
+ gTasks[taskId].func = Task_ItemStorage_Deposit;
+ fade_screen(1, 0);
+}
+
+void sub_813A0C8(u8 taskId)
+{
+ if(sub_807D770() == 1)
+ gTasks[taskId].func = ItemStorageMenuProcessInput;
+}
+
+void sub_813A0F8(void)
+{
+ MenuDisplayMessageBox();
+ InitItemStorageMenu(1);
+ CreateTask(sub_813A0C8, 0);
+ pal_fill_black();
+}
+
+void ItemStorage_Withdraw(u8 taskId)
+{
+ u8 var;
+ u16 * data = gTasks[taskId].data;
+
+ sub_8072DEC();
+ MenuZeroFillWindowRect(0, 0, 11, 9);
+ var = CountUsedPCItemSlots();
+ data[2] = var;
+
+ if(var)
+ {
+ MenuZeroFillWindowRect(0, 14, 29, 19);
+ data[6] = 0;
+ data[0] = 0;
+ data[1] = 0;
+ sub_813A240(taskId);
+ sub_813AE6C(taskId, 0);
+ gTasks[taskId].func = sub_813A280;
+ }
+ else
+ DisplayItemMessageOnField(taskId, gOtherText_NoItems, PlayerPC_ItemStorage, 0);
+}
+
+void ItemStorage_Toss(u8 taskId)
+{
+ u8 var;
+ u16 * data = gTasks[taskId].data;
+
+ sub_8072DEC();
+ MenuZeroFillWindowRect(0, 0, 11, 9);
+ var = CountUsedPCItemSlots();
+ data[2] = var;
+
+ if(var)
+ {
+ MenuZeroFillWindowRect(0, 14, 29, 19);
+ data[6] = 2;
+ data[0] = 0;
+ data[1] = 0;
+ sub_813A240(taskId);
+ sub_813AE6C(taskId, 2);
+ gTasks[taskId].func = sub_813A280;
+ }
+ else
+ DisplayItemMessageOnField(taskId, gOtherText_NoItems, PlayerPC_ItemStorage, 0);
+}
+
+void ItemStorage_Exit(u8 var)
+{
+ sub_8072DEC();
+ MenuZeroFillWindowRect(0, 0, 11, 9);
+ ReshowPlayerPC(var);
+}
+
+void sub_813A240(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[2] > 7)
+ data[4] = 8;
+ else
+ data[4] = data[2] + 1;
+
+ if(unk_201FE00[3] > 7)
+ unk_201FE00[1] = 8;
+ else
+ unk_201FE00[1] = unk_201FE00[3] + 1;
+}
+
+#ifdef NONMATCHING
+void sub_813A280(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if(gMain.newAndRepeatedKeys & 0x40)
+ {
+ if(data[0])
+ {
+ PlaySE(5);
+ data[0] = MoveMenuCursor(-1);
+ if(!data[9])
+ {
+ if(data[1] + data[0] == data[2])
+ {
+ sub_813AD58(0xFFFF);
+ return;
+ }
+ sub_813AD58(gSaveBlock1.pcItems[data[1] + data[0]].itemId);
+ }
+ return;
+ }
+ if(!data[1])
+ return;
+ PlaySE(5);
+ sub_813AE0C(taskId);
+ if(data[9])
+ MoveMenuCursor(0);
+ return;
+ }
+ if(!(gMain.newAndRepeatedKeys & 0x80))
+ {
+ if(gMain.newKeys & 0x4)
+ {
+ if(!data[9])
+ {
+ if(data[0] + data[1] != data[2])
+ {
+ PlaySE(5);
+ data[9] = 1;
+ data[8] = data[0] + data[1];
+ sub_813AD58(0xFFF7);
+ }
+ sub_813ABE8(taskId);
+ return;
+ }
+ PlaySE(5);
+ sub_813AA30(taskId, 0);
+ sub_813AE0C(taskId);
+ return;
+ }
+ if(gMain.newKeys & 0x1)
+ {
+ PlaySE(5);
+ if(data[9])
+ {
+ sub_813AA30(taskId, 0);
+ sub_813AE0C(taskId);
+ return;
+ }
+ if(data[1] + data[0] != data[2])
+ {
+ sub_813A4B4(taskId);
+ return;
+ }
+ }
+ else
+ {
+ if(!(gMain.newKeys & 0x2))
+ return;
+ PlaySE(5);
+ if(data[9])
+ {
+ sub_813AA30(taskId, 1);
+ sub_813AE0C(taskId);
+ return;
+ }
+ sub_8072DEC();
+ }
+ sub_813A468(taskId);
+ return;
+ }
+ if(data[0] == data[4] - 1)
+ {
+ if(data[1] + data[0] == data[2])
+ return;
+ PlaySE(5);
+ data[1]++;
+ sub_813AE0C(taskId);
+ if(data[9])
+ MoveMenuCursor(0);
+ return;
+ }
+ PlaySE(5);
+ data[0] = MoveMenuCursor(1);
+ if(!data[9])
+ {
+ if(data[1] + data[0] != data[2])
+ {
+ sub_813AD58(gSaveBlock1.pcItems[data[1] + data[0]].itemId);
+ return;
+ }
+ sub_813AD58(0xFFFF);
+ }
+}
+#else
+__attribute__((naked))
+void sub_813A280(u8 taskId)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ adds r6, r5, 0\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ ldr r1, _0813A2DC @ =gTasks + 0x8\n\
+ adds r4, r0, r1\n\
+ ldr r2, _0813A2E0 @ =gMain\n\
+ ldrh r1, [r2, 0x30]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0813A306\n\
+ movs r1, 0\n\
+ ldrsh r0, [r4, r1]\n\
+ cmp r0, 0\n\
+ beq _0813A2E4\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ bl MoveMenuCursor\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ strh r0, [r4]\n\
+ ldrh r1, [r4, 0x2]\n\
+ adds r1, r0\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ movs r2, 0x12\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r0, 0\n\
+ beq _0813A2CC\n\
+ b _0813A460\n\
+_0813A2CC:\n\
+ lsls r0, r1, 16\n\
+ asrs r1, r0, 16\n\
+ movs r2, 0x4\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r1, r0\n\
+ beq _0813A34C\n\
+ b _0813A358\n\
+ .align 2, 0\n\
+_0813A2DC: .4byte gTasks + 0x8\n\
+_0813A2E0: .4byte gMain\n\
+_0813A2E4:\n\
+ movs r1, 0x2\n\
+ ldrsh r0, [r4, r1]\n\
+ cmp r0, 0\n\
+ bne _0813A2EE\n\
+ b _0813A460\n\
+_0813A2EE:\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ ldrh r0, [r4, 0x2]\n\
+ subs r0, 0x1\n\
+ strh r0, [r4, 0x2]\n\
+ adds r0, r5, 0\n\
+ bl sub_813AE0C\n\
+ movs r2, 0x12\n\
+ ldrsh r0, [r4, r2]\n\
+ b _0813A394\n\
+_0813A306:\n\
+ movs r0, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0813A3A0\n\
+ movs r0, 0\n\
+ ldrsh r1, [r4, r0]\n\
+ movs r2, 0x8\n\
+ ldrsh r0, [r4, r2]\n\
+ subs r0, 0x1\n\
+ cmp r1, r0\n\
+ beq _0813A370\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0x1\n\
+ bl MoveMenuCursor\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ strh r0, [r4]\n\
+ ldrh r1, [r4, 0x2]\n\
+ adds r1, r0\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ movs r2, 0x12\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r0, 0\n\
+ beq _0813A340\n\
+ b _0813A460\n\
+_0813A340:\n\
+ lsls r0, r1, 16\n\
+ asrs r1, r0, 16\n\
+ movs r2, 0x4\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r1, r0\n\
+ bne _0813A358\n\
+_0813A34C:\n\
+ ldr r0, _0813A354 @ =0x0000ffff\n\
+ bl sub_813AD58\n\
+ b _0813A460\n\
+ .align 2, 0\n\
+_0813A354: .4byte 0x0000ffff\n\
+_0813A358:\n\
+ ldr r0, _0813A36C @ =gSaveBlock1\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ movs r0, 0x93\n\
+ lsls r0, 3\n\
+ adds r1, r0\n\
+ ldrh r0, [r1]\n\
+ bl sub_813AD58\n\
+ b _0813A460\n\
+ .align 2, 0\n\
+_0813A36C: .4byte gSaveBlock1\n\
+_0813A370:\n\
+ movs r2, 0x2\n\
+ ldrsh r0, [r4, r2]\n\
+ adds r0, r1\n\
+ movs r2, 0x4\n\
+ ldrsh r1, [r4, r2]\n\
+ cmp r0, r1\n\
+ beq _0813A460\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ ldrh r0, [r4, 0x2]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x2]\n\
+ adds r0, r5, 0\n\
+ bl sub_813AE0C\n\
+ movs r1, 0x12\n\
+ ldrsh r0, [r4, r1]\n\
+_0813A394:\n\
+ cmp r0, 0\n\
+ beq _0813A460\n\
+ movs r0, 0\n\
+ bl MoveMenuCursor\n\
+ b _0813A460\n\
+_0813A3A0:\n\
+ ldrh r1, [r2, 0x2E]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0813A3F0\n\
+ movs r2, 0x12\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r0, 0\n\
+ bne _0813A3E8\n\
+ movs r1, 0\n\
+ ldrsh r0, [r4, r1]\n\
+ movs r2, 0x2\n\
+ ldrsh r1, [r4, r2]\n\
+ adds r0, r1\n\
+ movs r2, 0x4\n\
+ ldrsh r1, [r4, r2]\n\
+ cmp r0, r1\n\
+ beq _0813A3DC\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0x1\n\
+ strh r0, [r4, 0x12]\n\
+ ldrh r0, [r4]\n\
+ ldrh r1, [r4, 0x2]\n\
+ adds r0, r1\n\
+ strh r0, [r4, 0x10]\n\
+ ldr r0, _0813A3E4 @ =0x0000fff7\n\
+ bl sub_813AD58\n\
+_0813A3DC:\n\
+ adds r0, r5, 0\n\
+ bl sub_813ABE8\n\
+ b _0813A460\n\
+ .align 2, 0\n\
+_0813A3E4: .4byte 0x0000fff7\n\
+_0813A3E8:\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ b _0813A420\n\
+_0813A3F0:\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0813A430\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r2, 0x12\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r0, 0\n\
+ bne _0813A420\n\
+ movs r1, 0x2\n\
+ ldrsh r0, [r4, r1]\n\
+ movs r2, 0\n\
+ ldrsh r1, [r4, r2]\n\
+ adds r0, r1\n\
+ movs r2, 0x4\n\
+ ldrsh r1, [r4, r2]\n\
+ cmp r0, r1\n\
+ beq _0813A44A\n\
+ adds r0, r5, 0\n\
+ bl sub_813A4B4\n\
+ b _0813A460\n\
+_0813A420:\n\
+ adds r0, r5, 0\n\
+ movs r1, 0\n\
+ bl sub_813AA30\n\
+ adds r0, r5, 0\n\
+ bl sub_813AE0C\n\
+ b _0813A460\n\
+_0813A430:\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0813A460\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r1, 0x12\n\
+ ldrsh r0, [r4, r1]\n\
+ cmp r0, 0\n\
+ bne _0813A452\n\
+ bl sub_8072DEC\n\
+_0813A44A:\n\
+ adds r0, r5, 0\n\
+ bl sub_813A468\n\
+ b _0813A460\n\
+_0813A452:\n\
+ adds r0, r6, 0\n\
+ movs r1, 0x1\n\
+ bl sub_813AA30\n\
+ adds r0, r6, 0\n\
+ bl sub_813AE0C\n\
+_0813A460:\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided");
+}
+#endif
+
+void sub_813A468(u8 taskId)
+{
+ BuyMenuFreeMemory();
+ DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(1);
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ MenuDisplayMessageBox();
+ InitItemStorageMenu(gTasks[taskId].data[6]);
+ gTasks[taskId].func = ItemStorageMenuProcessInput;
+}
+
+#ifdef NONMATCHING
+void sub_813A4B4(u8 taskId)
+{
+ u16 *data = gTasks[taskId].data;
+ u16 var = data[2] + data[0];
+
+ sub_80F996C(0);
+ sub_80F996C(1);
+
+ if(data[6])
+ {
+ if(gSaveBlock1.pcItems[var].itemId == 1)
+ {
+ data[3] = 1;
+ sub_813A794(taskId);
+ return;
+ }
+ sub_813AD58(0xFFF7);
+ data[3] = 1;
+ MenuDrawTextWindow(6, 8, 13, 11);
+ sub_80A418C(data[3], STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3);
+ gTasks[taskId].func = sub_813A584;
+ return;
+ }
+ if(gSaveBlock1.pcItems[var].itemId != 1)
+ {
+ sub_813AD58(0xFFF7);
+ data[3] = 1;
+ MenuDrawTextWindow(6, 8, 13, 11);
+ sub_80A418C(data[3], STR_CONV_MODE_RIGHT_ALIGN, 8, 9, 3);
+ gTasks[taskId].func = sub_813A584;
+ return;
+ }
+ data[3] = 1;
+ sub_813A6FC(taskId);
+}
+#else
+__attribute__((naked))
+void sub_813A4B4(u8 taskId)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ sub sp, 0x4\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ lsls r0, r6, 2\n\
+ adds r0, r6\n\
+ lsls r0, 3\n\
+ ldr r1, _0813A500 @ =gTasks + 0x8\n\
+ adds r4, r0, r1\n\
+ ldrb r0, [r4, 0x2]\n\
+ ldrb r1, [r4]\n\
+ adds r0, r1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ movs r0, 0\n\
+ bl sub_80F996C\n\
+ movs r0, 0x1\n\
+ bl sub_80F996C\n\
+ movs r1, 0xC\n\
+ ldrsh r0, [r4, r1]\n\
+ cmp r0, 0\n\
+ bne _0813A518\n\
+ ldr r1, _0813A504 @ =gSaveBlock1\n\
+ lsls r0, r5, 2\n\
+ adds r0, r1\n\
+ ldr r1, _0813A508 @ =0x0000049a\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0x1\n\
+ bne _0813A50C\n\
+ strh r0, [r4, 0x6]\n\
+ adds r0, r6, 0\n\
+ bl sub_813A6FC\n\
+ b _0813A570\n\
+ .align 2, 0\n\
+_0813A500: .4byte gTasks + 0x8\n\
+_0813A504: .4byte gSaveBlock1\n\
+_0813A508: .4byte 0x0000049a\n\
+_0813A50C:\n\
+ ldr r0, _0813A514 @ =0x0000fffe\n\
+ bl sub_813AD58\n\
+ b _0813A542\n\
+ .align 2, 0\n\
+_0813A514: .4byte 0x0000fffe\n\
+_0813A518:\n\
+ ldr r1, _0813A534 @ =gSaveBlock1\n\
+ lsls r0, r5, 2\n\
+ adds r0, r1\n\
+ ldr r1, _0813A538 @ =0x0000049a\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0x1\n\
+ bne _0813A53C\n\
+ strh r0, [r4, 0x6]\n\
+ adds r0, r6, 0\n\
+ bl sub_813A794\n\
+ b _0813A570\n\
+ .align 2, 0\n\
+_0813A534: .4byte gSaveBlock1\n\
+_0813A538: .4byte 0x0000049a\n\
+_0813A53C:\n\
+ ldr r0, _0813A578 @ =0x0000fffc\n\
+ bl sub_813AD58\n\
+_0813A542:\n\
+ movs r0, 0x1\n\
+ strh r0, [r4, 0x6]\n\
+ movs r0, 0x6\n\
+ movs r1, 0x8\n\
+ movs r2, 0xD\n\
+ movs r3, 0xB\n\
+ bl MenuDrawTextWindow\n\
+ ldrh r0, [r4, 0x6]\n\
+ movs r1, 0x3\n\
+ str r1, [sp]\n\
+ movs r1, 0x1\n\
+ movs r2, 0x8\n\
+ movs r3, 0x9\n\
+ bl sub_80A418C\n\
+ ldr r1, _0813A57C @ =gTasks\n\
+ lsls r0, r6, 2\n\
+ adds r0, r6\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ ldr r1, _0813A580 @ =sub_813A584\n\
+ str r1, [r0]\n\
+_0813A570:\n\
+ add sp, 0x4\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_0813A578: .4byte 0x0000fffc\n\
+_0813A57C: .4byte gTasks\n\
+_0813A580: .4byte sub_813A584\n\
+ .syntax divided");
+}
+#endif