summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-06-19 21:41:43 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-06-19 21:41:43 -0400
commit649a351c4c11bf054ad67885e6f24e80fa690305 (patch)
tree726ab467ebde6fbfda496d6ffdbaa2350e27a150
parent7eeba327bd6dc235a33f06a7779e3b3c52f04475 (diff)
item: through sub_809A584
-rw-r--r--asm/item.s1174
-rw-r--r--include/berry.h1
-rw-r--r--include/constants/global.h2
-rw-r--r--include/item.h2
-rw-r--r--include/load_save.h1
-rw-r--r--include/strings.h2
-rw-r--r--ld_script.txt1
-rw-r--r--src/item.c478
-rw-r--r--src/item_pc.c2
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)