diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-19 21:41:43 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-19 21:41:43 -0400 |
commit | 649a351c4c11bf054ad67885e6f24e80fa690305 (patch) | |
tree | 726ab467ebde6fbfda496d6ffdbaa2350e27a150 | |
parent | 7eeba327bd6dc235a33f06a7779e3b3c52f04475 (diff) |
item: through sub_809A584
-rw-r--r-- | asm/item.s | 1174 | ||||
-rw-r--r-- | include/berry.h | 1 | ||||
-rw-r--r-- | include/constants/global.h | 2 | ||||
-rw-r--r-- | include/item.h | 2 | ||||
-rw-r--r-- | include/load_save.h | 1 | ||||
-rw-r--r-- | include/strings.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/item.c | 478 | ||||
-rw-r--r-- | src/item_pc.c | 2 |
9 files changed, 488 insertions, 1175 deletions
diff --git a/asm/item.s b/asm/item.s index 5dd58333d..7f3a0cbb4 100644 --- a/asm/item.s +++ b/asm/item.s @@ -5,1178 +5,6 @@ .text - thumb_func_start GetBagItemQuantity -GetBagItemQuantity: @ 8099DA0 - adds r1, r0, 0 - ldr r0, _08099DB8 @ =gSaveBlock2Ptr - ldr r0, [r0] - movs r2, 0xF2 - lsls r2, 4 - adds r0, r2 - ldr r0, [r0] - ldrh r1, [r1] - eors r0, r1 - lsls r0, 16 - lsrs r0, 16 - bx lr - .align 2, 0 -_08099DB8: .4byte gSaveBlock2Ptr - thumb_func_end GetBagItemQuantity - - thumb_func_start sub_8099DBC -sub_8099DBC: @ 8099DBC - lsls r1, 16 - lsrs r1, 16 - ldr r2, _08099DD4 @ =gSaveBlock2Ptr - ldr r2, [r2] - movs r3, 0xF2 - lsls r3, 4 - adds r2, r3 - ldr r2, [r2] - eors r1, r2 - strh r1, [r0] - bx lr - .align 2, 0 -_08099DD4: .4byte gSaveBlock2Ptr - thumb_func_end sub_8099DBC - - thumb_func_start GetBagItemId -GetBagItemId: @ 8099DD8 - ldrh r0, [r0] - bx lr - thumb_func_end GetBagItemId - - thumb_func_start sub_8099DDC -sub_8099DDC: @ 8099DDC - strh r1, [r0] - bx lr - thumb_func_end sub_8099DDC - - thumb_func_start ApplyNewEncryptionKeyToBagItems -ApplyNewEncryptionKeyToBagItems: @ 8099DE0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - mov r8, r0 - movs r1, 0 - ldr r0, _08099E34 @ =gBagPockets - mov r9, r0 -_08099DF2: - movs r6, 0 - lsls r5, r1, 3 - mov r2, r9 - adds r0, r5, r2 - adds r7, r1, 0x1 - ldrb r0, [r0, 0x4] - cmp r6, r0 - bcs _08099E20 - ldr r2, _08099E34 @ =gBagPockets -_08099E04: - adds r4, r5, r2 - lsls r1, r6, 2 - ldr r0, [r4] - adds r0, r1 - adds r0, 0x2 - mov r1, r8 - str r2, [sp] - bl ApplyNewEncryptionKeyToHword - adds r6, 0x1 - ldr r2, [sp] - ldrb r4, [r4, 0x4] - cmp r6, r4 - bcc _08099E04 -_08099E20: - adds r1, r7, 0 - cmp r1, 0x4 - bls _08099DF2 - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08099E34: .4byte gBagPockets - thumb_func_end ApplyNewEncryptionKeyToBagItems - - thumb_func_start ApplyNewEncryptionKeyToBagItems_ -ApplyNewEncryptionKeyToBagItems_: @ 8099E38 - push {lr} - bl ApplyNewEncryptionKeyToBagItems - pop {r0} - bx r0 - thumb_func_end ApplyNewEncryptionKeyToBagItems_ - - thumb_func_start sub_8099E44 -sub_8099E44: @ 8099E44 - ldr r1, _08099E84 @ =gBagPockets - ldr r0, _08099E88 @ =gSaveBlock1Ptr - ldr r2, [r0] - movs r3, 0xC4 - lsls r3, 2 - adds r0, r2, r3 - str r0, [r1] - movs r0, 0x2A - strb r0, [r1, 0x4] - adds r3, 0xA8 - adds r0, r2, r3 - str r0, [r1, 0x8] - movs r0, 0x1E - strb r0, [r1, 0xC] - adds r3, 0x78 - adds r0, r2, r3 - str r0, [r1, 0x10] - movs r0, 0xD - strb r0, [r1, 0x14] - adds r3, 0x34 - adds r0, r2, r3 - str r0, [r1, 0x18] - movs r0, 0x3A - strb r0, [r1, 0x1C] - ldr r0, _08099E8C @ =0x0000054c - adds r2, r0 - str r2, [r1, 0x20] - adds r1, 0x24 - movs r0, 0x2B - strb r0, [r1] - bx lr - .align 2, 0 -_08099E84: .4byte gBagPockets -_08099E88: .4byte gSaveBlock1Ptr -_08099E8C: .4byte 0x0000054c - thumb_func_end sub_8099E44 - - thumb_func_start CopyItemName -CopyItemName: @ 8099E90 - push {r4,lr} - adds r4, r1, 0 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xAF - bne _08099EB8 - movs r0, 0x2B - bl sub_809C8A0 - adds r1, r0, 0 - adds r0, r4, 0 - bl StringCopy - ldr r1, _08099EB4 @ =gUnknown_84162BD - adds r0, r4, 0 - bl StringAppend - b _08099EC4 - .align 2, 0 -_08099EB4: .4byte gUnknown_84162BD -_08099EB8: - bl ItemId_GetName - adds r1, r0, 0 - adds r0, r4, 0 - bl StringCopy -_08099EC4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end CopyItemName - - thumb_func_start sub_8099ECC -sub_8099ECC: @ 8099ECC - push {lr} - lsls r0, 24 - movs r2, 0 - ldr r1, _08099EF0 @ =gBagPockets - lsrs r0, 21 - adds r0, r1 - ldrb r1, [r0, 0x4] - cmp r2, r1 - bcs _08099EFE - ldr r3, [r0] -_08099EE0: - lsls r0, r2, 2 - adds r0, r3 - ldrh r0, [r0] - cmp r0, 0 - bne _08099EF4 - lsls r0, r2, 24 - asrs r0, 24 - b _08099F02 - .align 2, 0 -_08099EF0: .4byte gBagPockets -_08099EF4: - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, r1 - bcc _08099EE0 -_08099EFE: - movs r0, 0x1 - negs r0, r0 -_08099F02: - pop {r1} - bx r1 - thumb_func_end sub_8099ECC - - thumb_func_start sub_8099F08 -sub_8099F08: @ 8099F08 - push {lr} - lsls r0, 24 - movs r2, 0 - ldr r1, _08099F2C @ =gBagPockets - lsrs r0, 21 - subs r0, 0x8 - adds r0, r1 - ldrb r1, [r0, 0x4] - cmp r2, r1 - bcs _08099F3A - ldr r3, [r0] -_08099F1E: - lsls r0, r2, 2 - adds r0, r3 - ldrh r0, [r0] - cmp r0, 0 - beq _08099F30 - movs r0, 0x1 - b _08099F3C - .align 2, 0 -_08099F2C: .4byte gBagPockets -_08099F30: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, r1 - bcc _08099F1E -_08099F3A: - movs r0, 0 -_08099F3C: - pop {r1} - bx r1 - thumb_func_end sub_8099F08 - - thumb_func_start CheckBagHasItem -CheckBagHasItem: @ 8099F40 - push {r4,r5,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 16 - lsrs r5, r1, 16 - adds r0, r4, 0 - bl ItemId_GetPocket - lsls r0, 24 - cmp r0, 0 - bne _08099F5C - b _08099FA4 -_08099F58: - movs r0, 0x1 - b _08099FA6 -_08099F5C: - adds r0, r4, 0 - bl ItemId_GetPocket - subs r0, 0x1 - lsls r0, 24 - movs r2, 0 - ldr r1, _08099F94 @ =gBagPockets - lsrs r0, 21 - adds r0, r1 - ldrb r1, [r0, 0x4] - cmp r2, r1 - bcs _08099FA4 - adds r3, r0, 0 -_08099F76: - ldr r0, [r3] - lsls r1, r2, 2 - adds r1, r0 - ldrh r0, [r1] - cmp r0, r4 - bne _08099F98 - adds r0, r1, 0x2 - bl GetBagItemQuantity - lsls r0, 16 - lsrs r0, 16 - cmp r0, r5 - bcs _08099F58 - b _08099FA4 - .align 2, 0 -_08099F94: .4byte gBagPockets -_08099F98: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - ldrb r0, [r3, 0x4] - cmp r2, r0 - bcc _08099F76 -_08099FA4: - movs r0, 0 -_08099FA6: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end CheckBagHasItem - - thumb_func_start sub_8099FAC -sub_8099FAC: @ 8099FAC - push {r4,lr} - ldr r0, _08099FC0 @ =0x0000016d - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08099FD4 - b _08099FF0 - .align 2, 0 -_08099FC0: .4byte 0x0000016d -_08099FC4: - ldr r1, _08099FD0 @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] - movs r0, 0x1 - b _08099FF6 - .align 2, 0 -_08099FD0: .4byte gSpecialVar_Result -_08099FD4: - movs r4, 0x85 -_08099FD6: - adds r0, r4, 0 - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08099FC4 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xAF - bls _08099FD6 -_08099FF0: - ldr r0, _08099FFC @ =gSpecialVar_Result - strh r1, [r0] - movs r0, 0 -_08099FF6: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08099FFC: .4byte gSpecialVar_Result - thumb_func_end sub_8099FAC - - thumb_func_start CheckBagHasSpace -CheckBagHasSpace: @ 809A000 - push {r4-r6,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - adds r0, r4, 0 - bl ItemId_GetPocket - lsls r0, 24 - cmp r0, 0 - beq _0809A050 - adds r0, r4, 0 - bl ItemId_GetPocket - subs r0, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - movs r2, 0 - ldr r1, _0809A054 @ =gBagPockets - lsls r0, r5, 3 - adds r0, r1 - ldrb r1, [r0, 0x4] - cmp r2, r1 - bcs _0809A068 - adds r3, r0, 0 -_0809A032: - ldr r0, [r3] - lsls r1, r2, 2 - adds r1, r0 - ldrh r0, [r1] - cmp r0, r4 - bne _0809A05C - adds r0, r1, 0x2 - bl GetBagItemQuantity - lsls r0, 16 - lsrs r0, 16 - adds r0, r6 - ldr r1, _0809A058 @ =0x000003e7 - cmp r0, r1 - ble _0809A07A -_0809A050: - movs r0, 0 - b _0809A07C - .align 2, 0 -_0809A054: .4byte gBagPockets -_0809A058: .4byte 0x000003e7 -_0809A05C: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - ldrb r0, [r3, 0x4] - cmp r2, r0 - bcc _0809A032 -_0809A068: - adds r0, r5, 0 - bl sub_8099ECC - lsls r0, 24 - asrs r0, 24 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - beq _0809A050 -_0809A07A: - movs r0, 0x1 -_0809A07C: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end CheckBagHasSpace - - thumb_func_start AddBagItem -AddBagItem: @ 809A084 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - adds r0, r6, 0 - bl ItemId_GetPocket - lsls r0, 24 - cmp r0, 0 - bne _0809A0A2 - b _0809A1CA -_0809A0A2: - adds r0, r6, 0 - bl ItemId_GetPocket - subs r0, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - movs r2, 0 - ldr r1, _0809A0E0 @ =gBagPockets - lsls r0, r7, 3 - adds r0, r1 - ldrb r1, [r0, 0x4] - cmp r2, r1 - bcs _0809A0F4 - adds r5, r0, 0 -_0809A0BE: - ldr r0, [r5] - lsls r4, r2, 2 - adds r1, r4, r0 - ldrh r0, [r1] - cmp r0, r6 - bne _0809A0E8 - adds r0, r1, 0x2 - bl GetBagItemQuantity - lsls r0, 16 - lsrs r0, 16 - mov r2, r8 - adds r1, r0, r2 - ldr r0, _0809A0E4 @ =0x000003e7 - cmp r1, r0 - ble _0809A1B8 - b _0809A1CA - .align 2, 0 -_0809A0E0: .4byte gBagPockets -_0809A0E4: .4byte 0x000003e7 -_0809A0E8: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - ldrb r0, [r5, 0x4] - cmp r2, r0 - bcc _0809A0BE -_0809A0F4: - cmp r7, 0x3 - bne _0809A132 - movs r4, 0xB6 - lsls r4, 1 - adds r0, r4, 0 - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - cmp r0, 0 - bne _0809A132 - movs r0, 0x1 - bl sub_8099ECC - lsls r0, 24 - asrs r1, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0809A1CA - ldr r2, _0809A1AC @ =gBagPockets - ldr r0, [r2, 0x8] - lsls r1, 2 - adds r0, r1, r0 - strh r4, [r0] - ldr r0, [r2, 0x8] - adds r0, r1 - adds r0, 0x2 - movs r1, 0x1 - bl sub_8099DBC -_0809A132: - cmp r7, 0x4 - bne _0809A174 - ldr r4, _0809A1B0 @ =0x0000016d - adds r0, r4, 0 - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - cmp r0, 0 - bne _0809A174 - movs r0, 0x1 - bl sub_8099ECC - lsls r0, 24 - asrs r1, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0809A1CA - ldr r2, _0809A1AC @ =gBagPockets - ldr r0, [r2, 0x8] - lsls r1, 2 - adds r0, r1, r0 - strh r4, [r0] - ldr r0, [r2, 0x8] - adds r0, r1 - adds r0, 0x2 - movs r1, 0x1 - bl sub_8099DBC - ldr r0, _0809A1B4 @ =0x00000847 - bl FlagSet -_0809A174: - ldr r0, _0809A1B0 @ =0x0000016d - cmp r6, r0 - bne _0809A180 - ldr r0, _0809A1B4 @ =0x00000847 - bl FlagSet -_0809A180: - adds r0, r7, 0 - bl sub_8099ECC - lsls r0, 24 - asrs r2, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - beq _0809A1CA - ldr r0, _0809A1AC @ =gBagPockets - lsls r1, r7, 3 - adds r1, r0 - ldr r0, [r1] - lsls r2, 2 - adds r0, r2, r0 - strh r6, [r0] - ldr r0, [r1] - adds r0, r2 - adds r0, 0x2 - mov r1, r8 - b _0809A1C2 - .align 2, 0 -_0809A1AC: .4byte gBagPockets -_0809A1B0: .4byte 0x0000016d -_0809A1B4: .4byte 0x00000847 -_0809A1B8: - lsls r1, 16 - lsrs r1, 16 - ldr r0, [r5] - adds r0, r4 - adds r0, 0x2 -_0809A1C2: - bl sub_8099DBC - movs r0, 0x1 - b _0809A1CC -_0809A1CA: - movs r0, 0 -_0809A1CC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end AddBagItem - - thumb_func_start RemoveBagItem -RemoveBagItem: @ 809A1D8 - push {r4-r7,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 16 - lsrs r7, r1, 16 - adds r0, r4, 0 - bl ItemId_GetPocket - lsls r0, 24 - cmp r0, 0 - beq _0809A258 - cmp r4, 0 - beq _0809A258 - adds r0, r4, 0 - bl ItemId_GetPocket - subs r0, 0x1 - lsls r0, 24 - movs r2, 0 - ldr r1, _0809A248 @ =gBagPockets - lsrs r0, 21 - adds r0, r1 - ldrb r1, [r0, 0x4] - cmp r2, r1 - bcs _0809A258 - adds r6, r0, 0 -_0809A20C: - ldr r0, [r6] - lsls r5, r2, 2 - adds r1, r5, r0 - ldrh r0, [r1] - cmp r0, r4 - bne _0809A24C - adds r0, r1, 0x2 - bl GetBagItemQuantity - lsls r0, 16 - lsrs r0, 16 - cmp r0, r7 - bcc _0809A258 - subs r0, r7 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, [r6] - adds r0, r5 - adds r0, 0x2 - adds r1, r4, 0 - bl sub_8099DBC - cmp r4, 0 - bne _0809A242 - ldr r0, [r6] - adds r0, r5, r0 - strh r4, [r0] -_0809A242: - movs r0, 0x1 - b _0809A25A - .align 2, 0 -_0809A248: .4byte gBagPockets -_0809A24C: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - ldrb r0, [r6, 0x4] - cmp r2, r0 - bcc _0809A20C -_0809A258: - movs r0, 0 -_0809A25A: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end RemoveBagItem - - thumb_func_start GetPocketByItemId -GetPocketByItemId: @ 809A260 - push {lr} - lsls r0, 16 - lsrs r0, 16 - bl ItemId_GetPocket - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end GetPocketByItemId - - thumb_func_start ClearItemSlots -ClearItemSlots: @ 809A274 - push {r4-r7,lr} - adds r6, r0, 0 - lsls r1, 24 - movs r4, 0 - lsrs r1, 24 - cmp r4, r1 - bcs _0809A29E - adds r5, r1, 0 - movs r7, 0 -_0809A286: - lsls r0, r4, 2 - adds r0, r6 - strh r7, [r0] - adds r0, 0x2 - movs r1, 0 - bl sub_8099DBC - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r5 - bcc _0809A286 -_0809A29E: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ClearItemSlots - - thumb_func_start sub_809A2A4 -sub_809A2A4: @ 809A2A4 - push {r4,r5,lr} - movs r4, 0 - movs r5, 0xA6 - lsls r5, 2 -_0809A2AC: - ldr r0, _0809A2D8 @ =gSaveBlock1Ptr - ldr r0, [r0] - lsls r3, r4, 2 - adds r1, r0, r3 - adds r1, r5 - movs r2, 0 - strh r2, [r1] - adds r3, r5 - adds r0, r3 - adds r0, 0x2 - movs r1, 0 - bl sub_8099DDC - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1D - bls _0809A2AC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809A2D8: .4byte gSaveBlock1Ptr - thumb_func_end sub_809A2A4 - - thumb_func_start sub_809A2DC -sub_809A2DC: @ 809A2DC - push {r4,r5,lr} - movs r4, 0 - ldr r5, _0809A300 @ =gBagPockets -_0809A2E2: - lsls r1, r4, 3 - adds r1, r5 - ldr r0, [r1] - ldrb r1, [r1, 0x4] - bl ClearItemSlots - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x4 - bls _0809A2E2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809A300: .4byte gBagPockets - thumb_func_end sub_809A2DC - - thumb_func_start sub_809A304 -sub_809A304: @ 809A304 - push {lr} - movs r1, 0 - ldr r0, _0809A324 @ =gSaveBlock1Ptr - ldr r2, [r0] - movs r3, 0xA6 - lsls r3, 2 -_0809A310: - lsls r0, r1, 24 - asrs r1, r0, 24 - lsls r0, r1, 2 - adds r0, r2, r0 - adds r0, r3 - ldrh r0, [r0] - cmp r0, 0 - bne _0809A328 - adds r0, r1, 0 - b _0809A338 - .align 2, 0 -_0809A324: .4byte gSaveBlock1Ptr -_0809A328: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - asrs r0, 24 - cmp r0, 0x1D - ble _0809A310 - movs r0, 0x1 - negs r0, r0 -_0809A338: - pop {r1} - bx r1 - thumb_func_end sub_809A304 - - thumb_func_start sub_809A33C -sub_809A33C: @ 809A33C - push {r4,lr} - movs r2, 0 - movs r1, 0 - ldr r0, _0809A370 @ =gSaveBlock1Ptr - ldr r3, [r0] - movs r4, 0xA6 - lsls r4, 2 -_0809A34A: - lsls r0, r1, 2 - adds r0, r3, r0 - adds r0, r4 - ldrh r0, [r0] - cmp r0, 0 - beq _0809A35C - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 -_0809A35C: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x1D - bls _0809A34A - adds r0, r2, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0809A370: .4byte gSaveBlock1Ptr - thumb_func_end sub_809A33C - - thumb_func_start CheckPCHasItem -CheckPCHasItem: @ 809A374 - push {r4-r6,lr} - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 16 - lsrs r5, r1, 16 - movs r4, 0 -_0809A380: - ldr r0, _0809A3AC @ =gSaveBlock1Ptr - ldr r2, [r0] - lsls r1, r4, 2 - adds r0, r2, r1 - movs r3, 0xA6 - lsls r3, 2 - adds r0, r3 - ldrh r0, [r0] - cmp r0, r6 - bne _0809A3B4 - adds r0, r1, r2 - ldr r1, _0809A3B0 @ =0x0000029a - adds r0, r1 - bl GetBagItemId - lsls r0, 16 - lsrs r0, 16 - cmp r0, r5 - bcc _0809A3B4 - movs r0, 0x1 - b _0809A3C0 - .align 2, 0 -_0809A3AC: .4byte gSaveBlock1Ptr -_0809A3B0: .4byte 0x0000029a -_0809A3B4: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1D - bls _0809A380 - movs r0, 0 -_0809A3C0: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end CheckPCHasItem - - thumb_func_start AddPCItem -AddPCItem: @ 809A3C8 - push {r4-r7,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 16 - lsrs r5, r1, 16 - movs r3, 0 - ldr r6, _0809A404 @ =gSaveBlock1Ptr -_0809A3D6: - ldr r2, [r6] - lsls r1, r3, 2 - adds r0, r2, r1 - movs r7, 0xA6 - lsls r7, 2 - adds r0, r7 - ldrh r0, [r0] - cmp r0, r4 - bne _0809A40C - adds r0, r7, 0 - adds r4, r1, r0 - adds r0, r2, r4 - adds r0, 0x2 - bl GetBagItemId - lsls r0, 16 - lsrs r0, 16 - adds r1, r0, r5 - ldr r0, _0809A408 @ =0x000003e7 - cmp r1, r0 - ble _0809A444 - b _0809A456 - .align 2, 0 -_0809A404: .4byte gSaveBlock1Ptr -_0809A408: .4byte 0x000003e7 -_0809A40C: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x1D - bls _0809A3D6 - bl sub_809A304 - lsls r0, 24 - asrs r2, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r2, r0 - beq _0809A456 - ldr r0, _0809A440 @ =gSaveBlock1Ptr - ldr r0, [r0] - lsls r2, 2 - adds r1, r0, r2 - movs r3, 0xA6 - lsls r3, 2 - adds r1, r3 - strh r4, [r1] - adds r2, r3 - adds r0, r2 - adds r0, 0x2 - adds r1, r5, 0 - b _0809A44E - .align 2, 0 -_0809A440: .4byte gSaveBlock1Ptr -_0809A444: - lsls r1, 16 - lsrs r1, 16 - ldr r0, [r6] - adds r0, r4 - adds r0, 0x2 -_0809A44E: - bl sub_8099DDC - movs r0, 0x1 - b _0809A458 -_0809A456: - movs r0, 0 -_0809A458: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end AddPCItem - - thumb_func_start RemoveItemFromPC -RemoveItemFromPC: @ 809A460 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - lsrs r2, r0, 16 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - cmp r2, 0 - beq _0809A4D8 - movs r4, 0 - ldr r0, _0809A4E4 @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r3, 0xA6 - lsls r3, 2 - adds r1, r3 - ldrh r1, [r1] - adds r7, r0, 0 - cmp r1, r2 - beq _0809A49E - adds r5, r7, 0 -_0809A48A: - adds r4, 0x1 - cmp r4, 0x1D - bhi _0809A49E - ldr r0, [r5] - lsls r1, r4, 2 - adds r0, r1 - adds r0, r3 - ldrh r0, [r0] - cmp r0, r2 - bne _0809A48A -_0809A49E: - cmp r4, 0x1E - beq _0809A4D8 - lsls r6, r4, 2 - movs r0, 0xA6 - lsls r0, 2 - adds r4, r6, r0 - ldr r0, [r7] - adds r0, r4 - adds r0, 0x2 - bl GetBagItemId - mov r1, r8 - subs r0, r1 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, [r7] - adds r0, r4 - adds r0, 0x2 - adds r1, r5, 0 - bl sub_8099DDC - cmp r5, 0 - bne _0809A4D8 - ldr r0, [r7] - adds r0, r6 - movs r1, 0xA6 - lsls r1, 2 - adds r0, r1 - strh r5, [r0] -_0809A4D8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809A4E4: .4byte gSaveBlock1Ptr - thumb_func_end RemoveItemFromPC - - thumb_func_start ItemPcCompaction -ItemPcCompaction: @ 809A4E8 - push {r4-r7,lr} - movs r2, 0 -_0809A4EC: - adds r1, r2, 0x1 - lsls r0, r1, 16 - lsrs r4, r0, 16 - adds r6, r1, 0 - cmp r4, 0x1D - bhi _0809A52E - ldr r0, _0809A53C @ =gSaveBlock1Ptr - mov r12, r0 - lsls r5, r2, 2 - movs r7, 0xA6 - lsls r7, 2 -_0809A502: - mov r0, r12 - ldr r1, [r0] - adds r0, r1, r5 - adds r0, r7 - ldrh r0, [r0] - cmp r0, 0 - bne _0809A524 - movs r0, 0xA6 - lsls r0, 2 - adds r1, r0 - adds r2, r1, r5 - ldr r3, [r2] - lsls r0, r4, 2 - adds r1, r0 - ldr r0, [r1] - str r0, [r2] - str r3, [r1] -_0809A524: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1D - bls _0809A502 -_0809A52E: - lsls r0, r6, 16 - lsrs r2, r0, 16 - cmp r2, 0x1C - bls _0809A4EC - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809A53C: .4byte gSaveBlock1Ptr - thumb_func_end ItemPcCompaction - - thumb_func_start sub_809A540 -sub_809A540: @ 809A540 - push {lr} - ldr r0, _0809A55C @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r2, _0809A560 @ =0x00000296 - adds r1, r0, r2 - ldrh r2, [r1] - ldr r3, _0809A564 @ =0x00000103 - cmp r2, r3 - beq _0809A568 - movs r0, 0x88 - lsls r0, 1 - cmp r2, r0 - beq _0809A570 - b _0809A572 - .align 2, 0 -_0809A55C: .4byte gSaveBlock1Ptr -_0809A560: .4byte 0x00000296 -_0809A564: .4byte 0x00000103 -_0809A568: - movs r0, 0x88 - lsls r0, 1 - strh r0, [r1] - b _0809A572 -_0809A570: - strh r3, [r1] -_0809A572: - pop {r0} - bx r0 - thumb_func_end sub_809A540 - - thumb_func_start sub_809A578 -sub_809A578: @ 809A578 - ldr r3, [r0] - ldr r2, [r1] - str r2, [r0] - str r3, [r1] - bx lr - thumb_func_end sub_809A578 - - thumb_func_start sub_809A584 -sub_809A584: @ 809A584 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - mov r8, r0 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - subs r0, r1, 0x1 - cmp r2, r0 - bge _0809A5D8 - adds r6, r1, 0 - mov r9, r0 -_0809A59E: - adds r1, r2, 0x1 - lsls r0, r1, 16 - lsrs r4, r0, 16 - adds r7, r1, 0 - cmp r4, r6 - bcs _0809A5D0 - lsls r0, r2, 2 - mov r1, r8 - adds r5, r1, r0 -_0809A5B0: - adds r0, r5, 0x2 - bl GetBagItemQuantity - lsls r0, 16 - cmp r0, 0 - bne _0809A5C6 - lsls r1, r4, 2 - add r1, r8 - adds r0, r5, 0 - bl sub_809A578 -_0809A5C6: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r6 - bcc _0809A5B0 -_0809A5D0: - lsls r0, r7, 16 - lsrs r2, r0, 16 - cmp r2, r9 - blt _0809A59E -_0809A5D8: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_809A584 - thumb_func_start sub_809A5E4 sub_809A5E4: @ 809A5E4 push {r4-r7,lr} @@ -1315,7 +143,7 @@ _0809A6EA: adds r1, r0 adds r0, r1, 0x2 ldrh r1, [r1, 0x2] - bl sub_8099DBC + bl SetBagItemQuantity adds r0, r6, 0x1 lsls r0, 16 lsrs r6, r0, 16 diff --git a/include/berry.h b/include/berry.h index 40715868b..c5a132ccb 100644 --- a/include/berry.h +++ b/include/berry.h @@ -62,6 +62,7 @@ void FieldObjectInteractionPickBerryTree(void); void FieldObjectInteractionRemoveBerryTree(void); u8 PlayerHasBerries(void); void ResetBerryTreeSparkleFlags(void); +const struct Berry * sub_809C8A0(u8 berryIdx); extern const struct Berry gBerries[]; diff --git a/include/constants/global.h b/include/constants/global.h index 4e798d1ef..b1c8fed3e 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -76,4 +76,6 @@ enum POCKET_BERRY_POUCH, }; +#define NUM_BAG_POCKETS 5 + #endif //GUARD_CONSTANTS_GLOBAL_H diff --git a/include/item.h b/include/item.h index f21c207e0..164dd674f 100644 --- a/include/item.h +++ b/include/item.h @@ -73,7 +73,7 @@ u16 BagGetItemIdByPocketPosition(u8 a0, u16 a1); u16 BagGetQuantityByPocketPosition(u8 a0, u16 a1); bool8 itemid_is_unique(u16 itemId); void sub_809A584(struct ItemSlot * slots, u8 capacity); -u16 GetBagItemId(u16 *); +u16 GetPcItemQuantity(u16 *); void ItemPcCompaction(void); void RemoveItemFromPC(u16 itemId, u16 quantity); diff --git a/include/load_save.h b/include/load_save.h index f62bc05aa..bd33f89c8 100644 --- a/include/load_save.h +++ b/include/load_save.h @@ -25,5 +25,6 @@ void MoveSaveBlocks_ResetHeap(void); void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey); void ApplyNewEncryptionKeyToBagItems(u32 encryptionKey); void ApplyNewEncryptionKeyToWord(u32 * word, u32 encryptionKey); +void ApplyNewEncryptionKeyToHword(u16 * hword, u32 encryptionKey); #endif // GUARD_LOAD_SAVE_H diff --git a/include/strings.h b/include/strings.h index 805516cec..8b98abb20 100644 --- a/include/strings.h +++ b/include/strings.h @@ -164,4 +164,6 @@ extern const u8 gText_ReturnToPC[]; extern const u8 gUnknown_8416425[]; extern const u8 gUnknown_8416451[]; +extern const u8 gUnknown_84162BD[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 64f6928c4..a46c10ee1 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -139,6 +139,7 @@ SECTIONS { asm/map_name_popup.o(.text); src/item_menu_icons.o(.text); asm/battle_anim_mon_movement.o(.text); + src/item.o(.text); asm/item.o(.text); asm/shop.o(.text); src/berry.o(.text); diff --git a/src/item.c b/src/item.c index 5ea771c05..f1b7fdb6e 100644 --- a/src/item.c +++ b/src/item.c @@ -1,8 +1,486 @@ #include "global.h" +#include "berry.h" +#include "event_data.h" #include "item.h" #include "item_use.h" +#include "load_save.h" +#include "string_util.h" +#include "strings.h" #include "constants/hold_effects.h" #include "constants/items.h" // Item descriptions and data #include "data/items.h" + +u16 GetBagItemQuantity(u16 * ptr) +{ + return gSaveBlock2Ptr->encryptionKey ^ *ptr; +} + +void SetBagItemQuantity(u16 * ptr, u16 value) +{ + *ptr = value ^ gSaveBlock2Ptr->encryptionKey; +} + +u16 GetPcItemQuantity(u16 * ptr) +{ + return 0 ^ *ptr; +} + +void SetPcItemQuantity(u16 * ptr, u16 value) +{ + *ptr = value ^ 0; +} + +void ApplyNewEncryptionKeyToBagItems(u32 key) +{ + u32 i, j; + + for (i = 0; i < NUM_BAG_POCKETS; i++) + { + for (j = 0; j < gBagPockets[i].capacity; j++) + { + ApplyNewEncryptionKeyToHword(&gBagPockets[i].itemSlots[j].quantity, key); + } + } +} + +void ApplyNewEncryptionKeyToBagItems_(u32 key) { + ApplyNewEncryptionKeyToBagItems(key); +} + +void sub_8099E44(void) +{ + gBagPockets[POCKET_ITEMS - 1].itemSlots = gSaveBlock1Ptr->bagPocket_Items; + gBagPockets[POCKET_ITEMS - 1].capacity = BAG_ITEMS_COUNT; + gBagPockets[POCKET_KEY_ITEMS - 1].itemSlots = gSaveBlock1Ptr->bagPocket_KeyItems; + gBagPockets[POCKET_KEY_ITEMS - 1].capacity = BAG_KEYITEMS_COUNT; + gBagPockets[POCKET_POKE_BALLS - 1].itemSlots = gSaveBlock1Ptr->bagPocket_PokeBalls; + gBagPockets[POCKET_POKE_BALLS - 1].capacity = BAG_POKEBALLS_COUNT; + gBagPockets[POCKET_TM_CASE - 1].itemSlots = gSaveBlock1Ptr->bagPocket_TMHM; + gBagPockets[POCKET_TM_CASE - 1].capacity = BAG_TMHM_COUNT; + gBagPockets[POCKET_BERRY_POUCH - 1].itemSlots = gSaveBlock1Ptr->bagPocket_Berries; + gBagPockets[POCKET_BERRY_POUCH - 1].capacity = BAG_BERRIES_COUNT; +} + +void CopyItemName(u16 itemId, u8 * dest) +{ + if (itemId == ITEM_ENIGMA_BERRY) + { + StringCopy(dest, sub_809C8A0(43)->name); + StringAppend(dest, gUnknown_84162BD); + } + else + { + StringCopy(dest, ItemId_GetName(itemId)); + } +} + +s8 sub_8099ECC(u8 pocketId) +{ + u16 i; + + for (i = 0; i < gBagPockets[pocketId].capacity; i++) + { + if (gBagPockets[pocketId].itemSlots[i].itemId == ITEM_NONE) + return i; + } + + return -1; +} + +bool8 sub_8099F08(u8 pocketId) +{ + u8 i; + + for (i = 0; i < gBagPockets[pocketId - 1].capacity; i++) + { + if (gBagPockets[pocketId - 1].itemSlots[i].itemId != ITEM_NONE) + return TRUE; + } + + return FALSE; +} + +bool8 CheckBagHasItem(u16 itemId, u16 count) +{ + u8 i; + u8 pocket; + + if (ItemId_GetPocket(itemId) == 0) + return FALSE; + + pocket = ItemId_GetPocket(itemId) - 1; + // Check for item slots that contain the item + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (gBagPockets[pocket].itemSlots[i].itemId == itemId) + { + u16 quantity; + // Does this item slot contain enough of the item? + quantity = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity); + if (quantity >= count) + return TRUE; + // RS and Emerald check whether there is enough of the + // item across all stacks. + // For whatever reason, FR/LG assume there's only one + // stack of the item. + else + return FALSE; + } + } + return FALSE; +} + +bool8 sub_8099FAC(void) +{ + u8 itemId; + bool8 exists; + + exists = CheckBagHasItem(ITEM_BERRY_POUCH, 1); + if (!exists) + { + gSpecialVar_Result = FALSE; + return FALSE; + } + for (itemId = ITEM_CHERI_BERRY; itemId <= ITEM_ENIGMA_BERRY; itemId++) + { + exists = CheckBagHasItem(itemId, 1); + if (exists) + { + gSpecialVar_Result = TRUE; + return TRUE; + } + } + + gSpecialVar_Result = FALSE; + return FALSE; +} + +bool8 CheckBagHasSpace(u16 itemId, u16 count) +{ + u8 i; + u8 pocket; + + if (ItemId_GetPocket(itemId) == 0) + return FALSE; + + pocket = ItemId_GetPocket(itemId) - 1; + // Check for item slots that contain the item + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (gBagPockets[pocket].itemSlots[i].itemId == itemId) + { + u16 quantity; + // Does this stack have room for more?? + quantity = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity); + if (quantity + count <= 999) + return TRUE; + // RS and Emerald check whether there is enough of the + // item across all stacks. + // For whatever reason, FR/LG assume there's only one + // stack of the item. + else + return FALSE; + } + } + + if (sub_8099ECC(pocket) != -1) + return TRUE; + + return FALSE; +} + +bool8 AddBagItem(u16 itemId, u16 count) +{ + u8 i; + u8 pocket; + s8 idx; + + if (ItemId_GetPocket(itemId) == 0) + return FALSE; + + pocket = ItemId_GetPocket(itemId) - 1; + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (gBagPockets[pocket].itemSlots[i].itemId == itemId) + { + u16 quantity; + // Does this stack have room for more?? + quantity = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity); + if (quantity + count <= 999) + { + quantity += count; + SetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity, quantity); + return TRUE; + } + // RS and Emerald check whether there is enough of the + // item across all stacks. + // For whatever reason, FR/LG assume there's only one + // stack of the item. + else + return FALSE; + } + } + + if (pocket == POCKET_TM_CASE - 1 && !CheckBagHasItem(ITEM_TM_CASE, 1)) + { + idx = sub_8099ECC(POCKET_KEY_ITEMS - 1); + if (idx == -1) + return FALSE; + gBagPockets[POCKET_KEY_ITEMS - 1].itemSlots[idx].itemId = ITEM_TM_CASE; + SetBagItemQuantity(&gBagPockets[POCKET_KEY_ITEMS - 1].itemSlots[idx].quantity, 1); + } + + if (pocket == POCKET_BERRY_POUCH - 1 && !CheckBagHasItem(ITEM_BERRY_POUCH, 1)) + { + idx = sub_8099ECC(POCKET_KEY_ITEMS - 1); + if (idx == -1) + return FALSE; + gBagPockets[POCKET_KEY_ITEMS - 1].itemSlots[idx].itemId = ITEM_BERRY_POUCH; + SetBagItemQuantity(&gBagPockets[POCKET_KEY_ITEMS - 1].itemSlots[idx].quantity, 1); + FlagSet(FLAG_0x847); + } + + if (itemId == ITEM_BERRY_POUCH) + FlagSet(FLAG_0x847); + + idx = sub_8099ECC(pocket); + if (idx == -1) + return FALSE; + + gBagPockets[pocket].itemSlots[idx].itemId = itemId; + SetBagItemQuantity(&gBagPockets[pocket].itemSlots[idx].quantity, count); + return TRUE; +} + +bool8 RemoveBagItem(u16 itemId, u16 count) +{ + u8 i; + u8 pocket; + + if (ItemId_GetPocket(itemId) == 0) + return FALSE; + + if (itemId == ITEM_NONE) + return FALSE; + + pocket = ItemId_GetPocket(itemId) - 1; + // Check for item slots that contain the item + for (i = 0; i < gBagPockets[pocket].capacity; i++) + { + if (gBagPockets[pocket].itemSlots[i].itemId == itemId) + { + u16 quantity; + // Does this item slot contain enough of the item? + quantity = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity); + if (quantity >= count) + { + quantity -= count; + SetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity, quantity); + if (quantity == 0) + gBagPockets[pocket].itemSlots[i].itemId = ITEM_NONE; + return TRUE; + } + // RS and Emerald check whether there is enough of the + // item across all stacks. + // For whatever reason, FR/LG assume there's only one + // stack of the item. + else + return FALSE; + } + } + return FALSE; +} + +u8 GetPocketByItemId(u16 itemId) +{ + return ItemId_GetPocket(itemId); // wow such important +} + +void ClearItemSlots(struct ItemSlot * slots, u8 capacity) +{ + u16 i; + + for (i = 0; i < capacity; i++) + { + slots[i].itemId = ITEM_NONE; + SetBagItemQuantity(&slots[i].quantity, 0); + } +} + +void sub_809A2A4(void) +{ + u16 i; + + for (i = 0; i < PC_ITEMS_COUNT; i++) + { + gSaveBlock1Ptr->pcItems[i].itemId = ITEM_NONE; + SetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity, 0); + } +} + +void sub_809A2DC(void) +{ + u16 i; + + for (i = 0; i < 5; i++) + { + ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity); + } +} + +s8 sub_809A304(void) +{ + s8 i; + + for (i = 0; i < PC_ITEMS_COUNT; i++) + { + if (gSaveBlock1Ptr->pcItems[i].itemId == ITEM_NONE) + return i; + } + + return -1; +} + +u8 sub_809A33C(void) +{ + u8 count = 0; + u8 i; + + for (i = 0; i < PC_ITEMS_COUNT; i++) + { + if (gSaveBlock1Ptr->pcItems[i].itemId != ITEM_NONE) + count++; + } + + return count; +} + +bool8 CheckPCHasItem(u16 itemId, u16 count) +{ + u8 i; + u16 quantity; + + for (i = 0; i < PC_ITEMS_COUNT; i++) + { + if (gSaveBlock1Ptr->pcItems[i].itemId == itemId) + { + quantity = GetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity); + if (quantity >= count) + return TRUE; + } + } + + return FALSE; +} + +bool8 AddPCItem(u16 itemId, u16 count) +{ + u8 i; + u16 quantity; + s8 idx; + + for (i = 0; i < PC_ITEMS_COUNT; i++) + { + if (gSaveBlock1Ptr->pcItems[i].itemId == itemId) + { + quantity = GetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity); + if (quantity + count <= 999) + { + quantity += count; + SetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity, quantity); + return TRUE; + } + else + return FALSE; + } + } + + idx = sub_809A304(); + if (idx == -1) + return FALSE; + + gSaveBlock1Ptr->pcItems[idx].itemId = itemId; + SetPcItemQuantity(&gSaveBlock1Ptr->pcItems[idx].quantity, count); + return TRUE; +} + +void RemoveItemFromPC(u16 itemId, u16 count) +{ + u32 i; + u16 quantity; + + if (itemId == ITEM_NONE) + return; + + for (i = 0; i < PC_ITEMS_COUNT; i++) + { + if (gSaveBlock1Ptr->pcItems[i].itemId == itemId) + break; + } + + if (i != PC_ITEMS_COUNT) + { + quantity = GetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity) - count; + SetPcItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity, quantity); + if (quantity == 0) + gSaveBlock1Ptr->pcItems[i].itemId = ITEM_NONE; + } +} + +void ItemPcCompaction(void) +{ + u16 i, j; + struct ItemSlot tmp; + + for (i = 0; i < PC_ITEMS_COUNT - 1; i++) + { + for (j = i + 1; j < PC_ITEMS_COUNT; j++) + { + if (gSaveBlock1Ptr->pcItems[i].itemId == ITEM_NONE) + { + tmp = gSaveBlock1Ptr->pcItems[i]; + gSaveBlock1Ptr->pcItems[i] = gSaveBlock1Ptr->pcItems[j]; + gSaveBlock1Ptr->pcItems[j] = tmp; + } + } + } +} + +void sub_809A540(void) +{ + switch (gSaveBlock1Ptr->registeredItem) + { + case ITEM_MACH_BIKE: + gSaveBlock1Ptr->registeredItem = ITEM_ACRO_BIKE; + break; + case ITEM_ACRO_BIKE: + gSaveBlock1Ptr->registeredItem = ITEM_MACH_BIKE; + break; + } +} + +void sub_809A578(struct ItemSlot * a, struct ItemSlot * b) +{ + struct ItemSlot c; + c = *a; + *a = *b; + *b = c; +} + +void sub_809A584(struct ItemSlot * slots, u8 capacity) +{ + u16 i, j; + + for (i = 0; i < capacity - 1; i++) + { + for (j = i + 1; j < capacity; j++) + { + if (GetBagItemQuantity(&slots[i].quantity) == 0) + { + sub_809A578(&slots[i], &slots[j]); + } + } + } +} diff --git a/src/item_pc.c b/src/item_pc.c index 3e139503e..e2fa33f0a 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -676,7 +676,7 @@ static u16 ItemPc_GetItemIdBySlotId(u16 idx) static u16 ItemPc_GetItemQuantityBySlotId(u16 idx) { - return GetBagItemId(&gSaveBlock1Ptr->pcItems[idx].quantity); + return GetPcItemQuantity(&gSaveBlock1Ptr->pcItems[idx].quantity); } static void ItemPc_CountPcItems(void) |