diff options
-rw-r--r-- | asm/player_pc.s | 1020 | ||||
-rw-r--r-- | include/menu.h | 2 | ||||
-rw-r--r-- | shared_syms.txt | 2 | ||||
-rw-r--r-- | src/player_pc.c | 757 |
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 |