diff --git a/asm/include/main_0200ED1C.inc b/asm/include/main_0200ED1C.inc index ab3443d8..0b50efa5 100644 --- a/asm/include/main_0200ED1C.inc +++ b/asm/include/main_0200ED1C.inc @@ -1,36 +1,2 @@ #pragma once -.public AreItemsEquivalent .public BAG_ITEMS_PTR_MIRROR -.public BulkItemToItem -.public EXCLUSIVE_ITEM_ATTACK_BOOSTS -.public EXCLUSIVE_ITEM_DEFENSE_BOOSTS -.public EXCLUSIVE_ITEM_SPECIAL_ATTACK_BOOSTS -.public EXCLUSIVE_ITEM_SPECIAL_DEFENSE_BOOSTS -.public EXCLUSIVE_ITEM_STAT_BOOST_DATA_INDEXES -.public GetBagCapacity -.public GetBagCapacitySpecialEpisode -.public GetExecuteSpecialEpisodeType -.public GetItemCategory -.public GetItemCategoryVeneer -.public GetItemIdFromList -.public GetPerformanceFlagWithChecks -.public GetRankStorageSize -.public GetScenarioBalance -.public InitBulkItem -.public IsItemInTimeDarkness -.public IsItemValidVeneer -.public IsStorableItem -.public IsThrownItem -.public IsTreasureBox -.public ItemZInit -.public KECLEON_SHOP_ITEM_TABLE_LISTS_1 -.public KECLEON_SHOP_ITEM_TABLE_LISTS_2 -.public MemAlloc -.public MemFree -.public RandIntSafe -.public RemoveEmptyItems -.public SetItemAcquired -.public SortItemList -.public sub_0200D1F0 -.public sub_0200D8AC -.public sub_020582E0 diff --git a/asm/include/main_0200EDFC.inc b/asm/include/main_0200EDFC.inc new file mode 100644 index 00000000..33264d3f --- /dev/null +++ b/asm/include/main_0200EDFC.inc @@ -0,0 +1,33 @@ +#pragma once +.public AddMoneyCarried +.public AreItemsEquivalent +.public BAG_ITEMS_PTR_MIRROR +.public BulkItemToItem +.public EXCLUSIVE_ITEM_ATTACK_BOOSTS +.public EXCLUSIVE_ITEM_DEFENSE_BOOSTS +.public EXCLUSIVE_ITEM_SPECIAL_ATTACK_BOOSTS +.public EXCLUSIVE_ITEM_SPECIAL_DEFENSE_BOOSTS +.public EXCLUSIVE_ITEM_STAT_BOOST_DATA_INDEXES +.public GetCurrentBagCapacity +.public GetItemCategory +.public GetItemCategoryVeneer +.public GetItemIdFromList +.public GetRankStorageSize +.public InitBulkItem +.public IsItemInTimeDarkness +.public IsItemValidVeneer +.public IsStorableItem +.public IsThrownItem +.public IsTreasureBox +.public ItemZInit +.public KECLEON_SHOP_ITEM_TABLE_LISTS_1 +.public KECLEON_SHOP_ITEM_TABLE_LISTS_2 +.public MemAlloc +.public MemFree +.public RandIntSafe +.public RemoveEmptyItems +.public SetItemAcquired +.public SortItemList +.public sub_0200D1F0 +.public sub_0200D8AC +.public sub_020582E0 diff --git a/asm/main_0200ED1C.s b/asm/main_0200ED1C.s index 039e0bae..3c3b1c25 100644 --- a/asm/main_0200ED1C.s +++ b/asm/main_0200ED1C.s @@ -39,2821 +39,3 @@ AddMoneyCarried: ; 0x0200ED58 _0200ED7C: .word BAG_ITEMS_PTR_MIRROR _0200ED80: .word SetMoneyCarried arm_func_end AddMoneyCarried - - arm_func_start GetCurrentBagCapacity -GetCurrentBagCapacity: ; 0x0200ED84 - stmdb sp!, {r3, lr} - bl GetExecuteSpecialEpisodeType - mvn r1, #0 - cmp r0, r1 - bne _0200EDB8 - mov r0, #2 - bl GetPerformanceFlagWithChecks - cmp r0, #0 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - bl GetScenarioBalance - bl GetBagCapacity - ldmia sp!, {r3, pc} -_0200EDB8: - bl GetBagCapacitySpecialEpisode - ldmia sp!, {r3, pc} - arm_func_end GetCurrentBagCapacity - - arm_func_start IsBagFull -IsBagFull: ; 0x0200EDC0 - stmdb sp!, {r3, lr} - bl GetCurrentBagCapacity - sub r2, r0, #1 - mov r0, #6 - ldr r1, _0200EDF8 ; =BAG_ITEMS_PTR_MIRROR - mul r0, r2, r0 - ldr r1, [r1] - ldr r1, [r1, #0x384] - ldrb r0, [r1, r0] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - .align 2, 0 -_0200EDF8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end IsBagFull - - arm_func_start GetNbItemsInBag -GetNbItemsInBag: ; 0x0200EDFC - stmdb sp!, {r3, lr} - ldr r1, _0200EE48 ; =BAG_ITEMS_PTR_MIRROR - mov r0, #0 - ldr r1, [r1] - mov lr, r0 - ldr ip, [r1, #0x384] - mov r1, r0 - mov r2, #1 -_0200EE1C: - ldrb r3, [ip] - add lr, lr, #1 - add ip, ip, #6 - tst r3, #1 - movne r3, r2 - moveq r3, r1 - tst r3, #0xff - addne r0, r0, #1 - cmp lr, #0x32 - blt _0200EE1C - ldmia sp!, {r3, pc} - .align 2, 0 -_0200EE48: .word BAG_ITEMS_PTR_MIRROR - arm_func_end GetNbItemsInBag - - arm_func_start CountNbItemsOfTypeInBag -CountNbItemsOfTypeInBag: ; 0x0200EE4C - ldr r1, _0200EE84 ; =BAG_ITEMS_PTR_MIRROR - mov r3, #0 - ldr r1, [r1] - mov ip, r3 - ldr r2, [r1, #0x384] -_0200EE60: - ldrsh r1, [r2, #4] - add ip, ip, #1 - add r2, r2, #6 - cmp r1, r0 - addeq r3, r3, #1 - cmp ip, #0x32 - blt _0200EE60 - mov r0, r3 - bx lr - .align 2, 0 -_0200EE84: .word BAG_ITEMS_PTR_MIRROR - arm_func_end CountNbItemsOfTypeInBag - - arm_func_start CountItemTypeInBag -CountItemTypeInBag: ; 0x0200EE88 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r1, _0200EEDC ; =BAG_ITEMS_PTR_MIRROR - mov r5, #0 - ldr r1, [r1] - mov r7, r0 - ldr r4, [r1, #0x384] - mov r6, r5 -_0200EEA4: - ldrsh r0, [r4, #4] - cmp r0, r7 - bne _0200EEC4 - bl IsThrownItem - cmp r0, #0 - ldrneh r0, [r4, #2] - addne r5, r5, r0 - addeq r5, r5, #1 -_0200EEC4: - add r6, r6, #1 - cmp r6, #0x32 - add r4, r4, #6 - blt _0200EEA4 - mov r0, r5 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0200EEDC: .word BAG_ITEMS_PTR_MIRROR - arm_func_end CountItemTypeInBag - - arm_func_start IsItemInBag -IsItemInBag: ; 0x0200EEE0 - ldr r1, _0200EF1C ; =BAG_ITEMS_PTR_MIRROR - mov r3, #0 - ldr r1, [r1] - ldr r2, [r1, #0x384] - b _0200EF0C -_0200EEF4: - ldrsh r1, [r2, #4] - cmp r1, r0 - moveq r0, #1 - bxeq lr - add r3, r3, #1 - add r2, r2, #6 -_0200EF0C: - cmp r3, #0x32 - blt _0200EEF4 - mov r0, #0 - bx lr - .align 2, 0 -_0200EF1C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end IsItemInBag - - arm_func_start IsItemWithFlagsInBag -IsItemWithFlagsInBag: ; 0x0200EF20 - ldr r2, _0200EF68 ; =BAG_ITEMS_PTR_MIRROR - mov ip, #0 - ldr r2, [r2] - ldr r3, [r2, #0x384] - b _0200EF58 -_0200EF34: - ldrsh r2, [r3, #4] - cmp r2, r0 - bne _0200EF50 - ldrb r2, [r3] - tst r2, r1 - movne r0, #1 - bxne lr -_0200EF50: - add ip, ip, #1 - add r3, r3, #6 -_0200EF58: - cmp ip, #0x32 - blt _0200EF34 - mov r0, #0 - bx lr - .align 2, 0 -_0200EF68: .word BAG_ITEMS_PTR_MIRROR - arm_func_end IsItemWithFlagsInBag - -#ifndef JAPAN - arm_func_start IsItemInTreasureBoxes -IsItemInTreasureBoxes: ; 0x0200EF6C - stmdb sp!, {r4, r5, r6, lr} - ldr r1, _0200EFC8 ; =BAG_ITEMS_PTR_MIRROR - mov r4, r0 - ldr r0, [r1] - mov r6, #0 - ldr r5, [r0, #0x384] - b _0200EFB8 -_0200EF88: - ldrsh r0, [r5, #4] - bl GetItemCategoryVeneer - add r0, r0, #0xf4 - and r0, r0, #0xff - cmp r0, #2 - bhi _0200EFB0 - ldrh r0, [r5, #2] - cmp r0, r4 - moveq r0, #1 - ldmeqia sp!, {r4, r5, r6, pc} -_0200EFB0: - add r6, r6, #1 - add r5, r5, #6 -_0200EFB8: - cmp r6, #0x32 - blt _0200EF88 - mov r0, #0 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0200EFC8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end IsItemInTreasureBoxes -#endif - - arm_func_start IsHeldItemInBag -IsHeldItemInBag: ; 0x0200EFCC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r1, _0200F04C ; =BAG_ITEMS_PTR_MIRROR - mov r6, r0 - ldr r0, [r1] - mov r5, #0 - mov sb, #1 - ldr r4, [r0, #0x384] - mov r8, r5 - mov r7, sb - b _0200F03C -_0200EFF4: - ldrb r0, [r4] - tst r0, #1 - movne r0, sb - moveq r0, r8 - tst r0, #0xff - beq _0200F034 - ldrb r0, [r4, #1] - cmp r0, #0 - bne _0200F034 - mov r0, r4 - mov r1, r6 - mov r2, r7 - bl AreItemsEquivalent - cmp r0, #0 - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0200F034: - add r5, r5, #1 - add r4, r4, #6 -_0200F03C: - cmp r5, #0x32 - blt _0200EFF4 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0200F04C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end IsHeldItemInBag - - arm_func_start IsItemForSpecialSpawnInBag -IsItemForSpecialSpawnInBag: ; 0x0200F050 - stmdb sp!, {r3, r4, r5, lr} - ldr r0, _0200F0E0 ; =BAG_ITEMS_PTR_MIRROR - mov r4, #0 - ldr r0, [r0] - mov ip, #1 - ldr lr, [r0, #0x384] - mov r3, r4 - mov r1, r4 - mov r2, ip - b _0200F0D0 -_0200F078: - ldrb r5, [lr] - tst r5, #1 - movne r0, ip - moveq r0, r3 - tst r0, #0xff - beq _0200F0C8 - ldrsh r0, [lr, #4] - sub r0, r0, #0xad - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #1 - bhi _0200F0C8 - tst r5, #8 - movne r0, r2 - moveq r0, r1 - tst r0, #0xff - moveq r0, #1 - ldmeqia sp!, {r3, r4, r5, pc} -_0200F0C8: - add r4, r4, #1 - add lr, lr, #6 -_0200F0D0: - cmp r4, #0x32 - blt _0200F078 - mov r0, #0 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0200F0E0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end IsItemForSpecialSpawnInBag - - arm_func_start HasStorableItems -HasStorableItems: ; 0x0200F0E4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r0, _0200F148 ; =BAG_ITEMS_PTR_MIRROR - mov r7, #0 - ldr r0, [r0] - mov r4, r7 - ldr r6, [r0, #0x384] - mov r5, #1 - b _0200F138 -_0200F104: - ldrb r0, [r6] - tst r0, #1 - movne r0, r5 - moveq r0, r4 - tst r0, #0xff - beq _0200F130 - ldrsh r0, [r6, #4] - bl IsStorableItem - cmp r0, #0 - movne r0, #1 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} -_0200F130: - add r7, r7, #1 - add r6, r6, #6 -_0200F138: - cmp r7, #0x32 - blt _0200F104 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0200F148: .word BAG_ITEMS_PTR_MIRROR - arm_func_end HasStorableItems - - arm_func_start GetItemIndex -GetItemIndex: ; 0x0200F14C - ldr r1, _0200F188 ; =BAG_ITEMS_PTR_MIRROR - mov r2, #0 - ldr r1, [r1] - ldr r1, [r1, #0x384] - b _0200F178 -_0200F160: - cmp r1, r0 - moveq r0, r2, lsl #0x10 - moveq r0, r0, asr #0x10 - bxeq lr - add r2, r2, #1 - add r1, r1, #6 -_0200F178: - cmp r2, #0x32 - blt _0200F160 - mvn r0, #0 - bx lr - .align 2, 0 -_0200F188: .word BAG_ITEMS_PTR_MIRROR - arm_func_end GetItemIndex - - arm_func_start GetEquivItemIndex -GetEquivItemIndex: ; 0x0200F18C - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r1, _0200F204 ; =BAG_ITEMS_PTR_MIRROR - mov r5, r0 - ldr r0, [r1] - mov r4, #0 - ldr sb, [r0, #0x384] - mov r7, r4 - mov r8, #1 - mov r6, #0xb - b _0200F1F4 -_0200F1B4: - ldrb r0, [sb] - tst r0, #1 - movne r0, r8 - moveq r0, r7 - tst r0, #0xff - beq _0200F1EC - mov r0, sb - mov r1, r5 - mov r2, r6 - bl AreItemsEquivalent - cmp r0, #0 - movne r0, r4, lsl #0x10 - movne r0, r0, asr #0x10 - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0200F1EC: - add r4, r4, #1 - add sb, sb, #6 -_0200F1F4: - cmp r4, #0x32 - blt _0200F1B4 - mvn r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0200F204: .word BAG_ITEMS_PTR_MIRROR - arm_func_end GetEquivItemIndex - - arm_func_start GetEquippedThrowableItem -GetEquippedThrowableItem: ; 0x0200F208 - ldr r0, _0200F268 ; =BAG_ITEMS_PTR_MIRROR - mov ip, #0 - ldr r0, [r0] - mov r1, ip - ldr r3, [r0, #0x384] - mov r2, #1 - b _0200F258 -_0200F224: - ldrb r0, [r3] - tst r0, #1 - movne r0, r2 - moveq r0, r1 - tst r0, #0xff - beq _0200F250 - ldrb r0, [r3] - tst r0, #0x10 - movne r0, ip, lsl #0x10 - movne r0, r0, asr #0x10 - bxne lr -_0200F250: - add ip, ip, #1 - add r3, r3, #6 -_0200F258: - cmp ip, #0x32 - blt _0200F224 - mvn r0, #0 - bx lr - .align 2, 0 -_0200F268: .word BAG_ITEMS_PTR_MIRROR - arm_func_end GetEquippedThrowableItem - - arm_func_start GetFirstUnequippedItemOfType -GetFirstUnequippedItemOfType: ; 0x0200F26C - stmdb sp!, {r3, lr} - ldr r1, _0200F2DC ; =BAG_ITEMS_PTR_MIRROR - mvn ip, #0 - ldr r1, [r1] - cmp r0, #0 - ldr r3, [r1, #0x384] - moveq r0, ip - ldmeqia sp!, {r3, pc} - mov lr, #0 - mov r2, ip - b _0200F2CC -_0200F298: - ldrsh r1, [r3, #4] - cmp r1, r0 - bne _0200F2C4 - ldrb r1, [r3, #1] - cmp r1, #0 - moveq r0, lr, lsl #0x10 - moveq r0, r0, asr #0x10 - ldmeqia sp!, {r3, pc} - cmp ip, r2 - moveq r1, lr, lsl #0x10 - moveq ip, r1, asr #0x10 -_0200F2C4: - add lr, lr, #1 - add r3, r3, #6 -_0200F2CC: - cmp lr, #0x32 - blt _0200F298 - mov r0, ip - ldmia sp!, {r3, pc} - .align 2, 0 -_0200F2DC: .word BAG_ITEMS_PTR_MIRROR - arm_func_end GetFirstUnequippedItemOfType - - arm_func_start CopyItemAtIdx -CopyItemAtIdx: ; 0x0200F2E0 - stmdb sp!, {r3, lr} - ldr r3, _0200F344 ; =BAG_ITEMS_PTR_MIRROR - mov r2, #6 - ldr r3, [r3] - smulbb r2, r0, r2 - ldr r3, [r3, #0x384] - ldrb r0, [r3, r2] - add r3, r3, r2 - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _0200F334 - ldrh r2, [r3] - mov r0, #1 - strh r2, [r1] - ldrh r2, [r3, #2] - strh r2, [r1, #2] - ldrh r2, [r3, #4] - strh r2, [r1, #4] - ldmia sp!, {r3, pc} -_0200F334: - mov r0, r1 - bl ItemZInit - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0200F344: .word BAG_ITEMS_PTR_MIRROR - arm_func_end CopyItemAtIdx - - arm_func_start GetItemAtIdx -GetItemAtIdx: ; 0x0200F348 - cmp r0, #0 - movlt r0, #0 - bxlt lr - ldr r2, _0200F36C ; =BAG_ITEMS_PTR_MIRROR - mov r1, #6 - ldr r2, [r2] - ldr r2, [r2, #0x384] - smlabb r0, r0, r1, r2 - bx lr - .align 2, 0 -_0200F36C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end GetItemAtIdx - - arm_func_start RemoveEmptyItemsInBag -RemoveEmptyItemsInBag: ; 0x0200F370 - ldr r0, _0200F388 ; =BAG_ITEMS_PTR_MIRROR - ldr ip, _0200F38C ; =RemoveEmptyItems - ldr r0, [r0] - mov r1, #0x32 - ldr r0, [r0, #0x384] - bx ip - .align 2, 0 -_0200F388: .word BAG_ITEMS_PTR_MIRROR -_0200F38C: .word RemoveEmptyItems - arm_func_end RemoveEmptyItemsInBag - - arm_func_start RemoveItemNoHole -RemoveItemNoHole: ; 0x0200F390 - stmdb sp!, {r4, lr} - ldr r2, _0200F400 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #6 - ldr r2, [r2] - smulbb r1, r0, r1 - ldr r2, [r2, #0x384] - ldrb r0, [r2, r1] - add r4, r2, r1 - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _0200F3F8 - ldrb r0, [r4, #1] - cmp r0, #0 - beq _0200F3D4 - bl sub_020582E0 -_0200F3D4: - mov r0, r4 - bl ItemZInit - ldr r0, _0200F400 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #0x32 - ldr r0, [r0] - ldr r0, [r0, #0x384] - bl RemoveEmptyItems - mov r0, #1 - ldmia sp!, {r4, pc} -_0200F3F8: - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0200F400: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveItemNoHole - - arm_func_start RemoveItem -RemoveItem: ; 0x0200F404 - stmdb sp!, {r4, lr} - ldr r2, _0200F450 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #6 - ldr r2, [r2] - smulbb r1, r0, r1 - ldr r2, [r2, #0x384] - ldrb r0, [r2, r1] - add r4, r2, r1 - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - ldrneb r0, [r4, #1] - cmpne r0, #0 - beq _0200F444 - bl sub_020582E0 -_0200F444: - mov r0, r4 - bl ItemZInit - ldmia sp!, {r4, pc} - .align 2, 0 -_0200F450: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveItem - - arm_func_start RemoveHeldItemNoHole -RemoveHeldItemNoHole: ; 0x0200F454 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - movs r5, r0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - ldr r0, _0200F4D0 ; =BAG_ITEMS_PTR_MIRROR - mov r4, #0 - ldr r0, [r0] - mov r6, r4 - ldr r8, [r0, #0x384] - mov r7, #1 -_0200F478: - ldrb r0, [r8] - tst r0, #1 - movne r0, r7 - moveq r0, r6 - tst r0, #0xff - beq _0200F4A8 - ldrb r0, [r8, #1] - cmp r0, r5 - bne _0200F4A8 - bl sub_020582E0 - mov r0, r8 - bl ItemZInit -_0200F4A8: - add r4, r4, #1 - cmp r4, #0x32 - add r8, r8, #6 - blt _0200F478 - ldr r0, _0200F4D0 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #0x32 - ldr r0, [r0] - ldr r0, [r0, #0x384] - bl RemoveEmptyItems - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0200F4D0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveHeldItemNoHole - - arm_func_start RemoveItemByIdAndStackNoHole -RemoveItemByIdAndStackNoHole: ; 0x0200F4D4 - stmdb sp!, {r4, lr} - ldr r1, _0200F554 ; =BAG_ITEMS_PTR_MIRROR - mov r3, #0 - ldr r1, [r1] - ldr r4, [r1, #0x384] - b _0200F544 -_0200F4EC: - ldrsh r2, [r4, #4] - ldrsh r1, [r0] - cmp r2, r1 - ldreqh r2, [r4, #2] - ldreqh r1, [r0, #2] - cmpeq r2, r1 - bne _0200F53C - ldrb r0, [r4, #1] - cmp r0, #0 - beq _0200F518 - bl sub_020582E0 -_0200F518: - mov r0, r4 - bl ItemZInit - ldr r0, _0200F554 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #0x32 - ldr r0, [r0] - ldr r0, [r0, #0x384] - bl RemoveEmptyItems - mov r0, #1 - ldmia sp!, {r4, pc} -_0200F53C: - add r3, r3, #1 - add r4, r4, #6 -_0200F544: - cmp r3, #0x32 - blt _0200F4EC - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0200F554: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveItemByIdAndStackNoHole - - arm_func_start RemoveEquivItem -RemoveEquivItem: ; 0x0200F558 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r1, _0200F5FC ; =BAG_ITEMS_PTR_MIRROR - mov r5, r0 - ldr r0, [r1] - mov r4, #0 - ldr sb, [r0, #0x384] - mov r7, r4 - mov r8, #1 - mov r6, #0xb - b _0200F5EC -_0200F580: - ldrb r0, [sb] - tst r0, #1 - movne r0, r8 - moveq r0, r7 - tst r0, #0xff - beq _0200F5E4 - mov r0, sb - mov r1, r5 - mov r2, r6 - bl AreItemsEquivalent - cmp r0, #0 - beq _0200F5E4 - ldrb r0, [sb, #1] - cmp r0, #0 - beq _0200F5C0 - bl sub_020582E0 -_0200F5C0: - mov r0, sb - bl ItemZInit - ldr r0, _0200F5FC ; =BAG_ITEMS_PTR_MIRROR - mov r1, #0x32 - ldr r0, [r0] - ldr r0, [r0, #0x384] - bl RemoveEmptyItems - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0200F5E4: - add r4, r4, #1 - add sb, sb, #6 -_0200F5EC: - cmp r4, #0x32 - blt _0200F580 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0200F5FC: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveEquivItem - - arm_func_start RemoveEquivItemNoHole -RemoveEquivItemNoHole: ; 0x0200F600 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r1, _0200F690 ; =BAG_ITEMS_PTR_MIRROR - mov r5, r0 - ldr r0, [r1] - mov r4, #0 - ldr sb, [r0, #0x384] - mov r7, r4 - mov r8, #1 - mov r6, #0xb - b _0200F680 -_0200F628: - ldrb r0, [sb] - tst r0, #1 - movne r0, r8 - moveq r0, r7 - tst r0, #0xff - beq _0200F678 - mov r0, sb - mov r1, r5 - mov r2, r6 - bl AreItemsEquivalent - cmp r0, #0 - beq _0200F678 - ldrb r0, [sb, #1] - cmp r0, #0 - beq _0200F668 - bl sub_020582E0 -_0200F668: - mov r0, sb - bl ItemZInit - mov r0, #1 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0200F678: - add r4, r4, #1 - add sb, sb, #6 -_0200F680: - cmp r4, #0x32 - blt _0200F628 - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0200F690: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveEquivItemNoHole - - arm_func_start DecrementStackItem -DecrementStackItem: ; 0x0200F694 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r1, _0200F714 ; =BAG_ITEMS_PTR_MIRROR - mov r6, r0 - ldr r0, [r1] - mov r5, #0 - ldr r4, [r0, #0x384] - mov r8, r5 - mov sb, #1 - mov r7, #0xb - b _0200F704 -_0200F6BC: - ldrb r0, [r4] - tst r0, #1 - movne r0, sb - moveq r0, r8 - tst r0, #0xff - beq _0200F6FC - mov r0, r4 - mov r1, r6 - mov r2, r7 - bl AreItemsEquivalent - cmp r0, #0 - ldrneh r1, [r4, #2] - movne r0, #1 - subne r1, r1, #1 - strneh r1, [r4, #2] - ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0200F6FC: - add r5, r5, #1 - add r4, r4, #6 -_0200F704: - cmp r5, #0x32 - blt _0200F6BC - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0200F714: .word BAG_ITEMS_PTR_MIRROR - arm_func_end DecrementStackItem - - arm_func_start RemoveItemNoHoleCheck -RemoveItemNoHoleCheck: ; 0x0200F718 - stmdb sp!, {r4, lr} - mvn r1, #0 - cmp r0, r1 - beq _0200F78C - ldr r2, _0200F794 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #6 - ldr r2, [r2] - smulbb r1, r0, r1 - ldr r2, [r2, #0x384] - ldrb r0, [r2, r1] - add r4, r2, r1 - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _0200F78C - ldrb r0, [r4, #1] - cmp r0, #0 - beq _0200F768 - bl sub_020582E0 -_0200F768: - mov r0, r4 - bl ItemZInit - ldr r0, _0200F794 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #0x32 - ldr r0, [r0] - ldr r0, [r0, #0x384] - bl RemoveEmptyItems - mov r0, #1 - ldmia sp!, {r4, pc} -_0200F78C: - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0200F794: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveItemNoHoleCheck - - arm_func_start RemoveFirstUnequippedItemOfType -RemoveFirstUnequippedItemOfType: ; 0x0200F798 - stmdb sp!, {r3, lr} - bl GetFirstUnequippedItemOfType - bl RemoveItemNoHoleCheck - ldmia sp!, {r3, pc} - arm_func_end RemoveFirstUnequippedItemOfType - - arm_func_start RemoveAllItems -RemoveAllItems: ; 0x0200F7A8 - stmdb sp!, {r3, r4, r5, lr} - ldr r0, _0200F7D8 ; =BAG_ITEMS_PTR_MIRROR - mov r5, #0 - ldr r0, [r0] - ldr r4, [r0, #0x384] -_0200F7BC: - mov r0, r4 - bl ItemZInit - add r5, r5, #1 - cmp r5, #0x32 - add r4, r4, #6 - blt _0200F7BC - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0200F7D8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveAllItems - - arm_func_start RemoveAllItemsStartingAt -RemoveAllItemsStartingAt: ; 0x0200F7DC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r6, _0200F848 ; =BAG_ITEMS_PTR_MIRROR - mov r4, r0 - ldr r1, [r6] - mov r0, #6 - ldr r1, [r1, #0x384] - mov r5, r0 - mla r7, r4, r0, r1 - b _0200F828 -_0200F800: - ldrb r0, [r7, #1] - cmp r0, #0 - beq _0200F810 - bl sub_020582E0 -_0200F810: - ldr r0, [r6] - ldr r0, [r0, #0x384] - mla r0, r4, r5, r0 - bl ItemZInit - add r4, r4, #1 - add r7, r7, #6 -_0200F828: - cmp r4, #0x32 - blt _0200F800 - ldr r0, _0200F848 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #0x32 - ldr r0, [r0] - ldr r0, [r0, #0x384] - bl RemoveEmptyItems - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0200F848: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveAllItemsStartingAt - - arm_func_start SpecialProcAddItemToBag -SpecialProcAddItemToBag: ; 0x0200F84C - stmdb sp!, {r3, lr} - sub sp, sp, #8 - mov r1, r0 - add r0, sp, #0 - bl BulkItemToItem - add r0, sp, #0 - mov r1, #0 - bl AddItemToBag - add sp, sp, #8 - ldmia sp!, {r3, pc} - arm_func_end SpecialProcAddItemToBag - - arm_func_start AddItemToBagNoHeld -AddItemToBagNoHeld: ; 0x0200F874 - ldr ip, _0200F880 ; =AddItemToBag - mov r1, #0 - bx ip - .align 2, 0 -_0200F880: .word AddItemToBag - arm_func_end AddItemToBagNoHeld - - arm_func_start AddItemToBag -AddItemToBag: ; 0x0200F884 - stmdb sp!, {r4, r5, r6, lr} - ldr r2, _0200F90C ; =BAG_ITEMS_PTR_MIRROR - mov r6, r0 - ldr r0, [r2] - mov r5, r1 - ldr r4, [r0, #0x384] - bl GetCurrentBagCapacity - mov ip, #0 - mov r1, ip - mov r2, #1 - b _0200F8FC -_0200F8B0: - ldrb r3, [r4] - tst r3, #1 - movne r3, r2 - moveq r3, r1 - tst r3, #0xff - bne _0200F8F4 - ldrh r1, [r6] - mov r0, r6 - strh r1, [r4] - ldrh r1, [r6, #2] - strh r1, [r4, #2] - ldrh r1, [r6, #4] - strh r1, [r4, #4] - strb r5, [r4, #1] - bl SetItemAcquired - mov r0, #1 - ldmia sp!, {r4, r5, r6, pc} -_0200F8F4: - add ip, ip, #1 - add r4, r4, #6 -_0200F8FC: - cmp ip, r0 - blt _0200F8B0 - mov r0, #0 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0200F90C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end AddItemToBag - - arm_func_start CleanStickyItemsInBag -CleanStickyItemsInBag: ; 0x0200F910 - ldr r0, _0200F93C ; =BAG_ITEMS_PTR_MIRROR - mov r2, #0 - ldr r0, [r0] - ldr r1, [r0, #0x384] -_0200F920: - ldrb r0, [r1] - add r2, r2, #1 - cmp r2, #0x32 - bic r0, r0, #8 - strb r0, [r1], #6 - blt _0200F920 - bx lr - .align 2, 0 -_0200F93C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end CleanStickyItemsInBag - - arm_func_start CountStickyItemsInBag -CountStickyItemsInBag: ; 0x0200F940 - stmdb sp!, {r4, r5, r6, lr} - ldr r0, _0200F9B0 ; =BAG_ITEMS_PTR_MIRROR - mov lr, #0 - ldr r0, [r0] - mov r3, #1 - ldr ip, [r0, #0x384] - mov r4, lr - mov r2, lr - mov r0, lr - mov r1, r3 -_0200F968: - ldrb r5, [ip] - tst r5, #1 - movne r6, r3 - moveq r6, r2 - tst r6, #0xff - beq _0200F994 - tst r5, #8 - movne r5, r1 - moveq r5, r0 - tst r5, #0xff - addne lr, lr, #1 -_0200F994: - add r4, r4, #1 - cmp r4, #0x32 - add ip, ip, #6 - blt _0200F968 - mov r0, lr, lsl #0x10 - mov r0, r0, asr #0x10 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0200F9B0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end CountStickyItemsInBag - - arm_func_start sub_0200F9B4 -sub_0200F9B4: ; 0x0200F9B4 - stmdb sp!, {r3, lr} - ldr r1, _0200FA08 ; =BAG_ITEMS_PTR_MIRROR - mov lr, #0 - ldr r1, [r1] - mov r2, lr - ldr ip, [r1, #0x384] - mov r3, #1 -_0200F9D0: - ldrb r1, [ip] - add lr, lr, #1 - tst r1, #1 - movne r1, r3 - moveq r1, r2 - tst r1, #0xff - ldrneb r1, [ip, #1] - cmpne r1, #0 - ldrneb r1, [r0, r1] - strneb r1, [ip, #1] - cmp lr, #0x32 - add ip, ip, #6 - blt _0200F9D0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0200FA08: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_0200F9B4 - - arm_func_start sub_0200FA0C -sub_0200FA0C: ; 0x0200FA0C - stmdb sp!, {r3, lr} - ldr r3, _0200FA64 ; =BAG_ITEMS_PTR_MIRROR - mov r2, #0x12c - ldr r3, [r3] - mov lr, #0 - mla ip, r1, r2, r3 - mov r2, lr - mov r3, #1 -_0200FA2C: - ldrb r1, [ip] - add lr, lr, #1 - tst r1, #1 - movne r1, r3 - moveq r1, r2 - tst r1, #0xff - ldrneb r1, [ip, #1] - cmpne r1, #0 - ldrneb r1, [r0, r1] - strneb r1, [ip, #1] - cmp lr, #0x32 - add ip, ip, #6 - blt _0200FA2C - ldmia sp!, {r3, pc} - .align 2, 0 -_0200FA64: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_0200FA0C - - arm_func_start TransmuteHeldItemInBag -TransmuteHeldItemInBag: ; 0x0200FA68 - stmdb sp!, {r4, lr} - ldr r1, _0200FAE8 ; =BAG_ITEMS_PTR_MIRROR - mov r4, #0 - ldr r1, [r1] - mov r3, r4 - ldr lr, [r1, #0x384] - mov ip, #1 - b _0200FAD8 -_0200FA88: - ldrb r1, [lr] - tst r1, #1 - movne r1, ip - moveq r1, r3 - tst r1, #0xff - beq _0200FAD0 - ldrb r2, [lr, #1] - ldrb r1, [r0, #1] - cmp r2, r1 - bne _0200FAD0 - ldrh r1, [r0] - strh r1, [lr] - ldrh r1, [r0, #2] - strh r1, [lr, #2] - ldrh r1, [r0, #4] - mov r0, #1 - strh r1, [lr, #4] - ldmia sp!, {r4, pc} -_0200FAD0: - add r4, r4, #1 - add lr, lr, #6 -_0200FAD8: - cmp r4, #0x32 - blt _0200FA88 - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0200FAE8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end TransmuteHeldItemInBag - - arm_func_start SetFlagsForHeldItemInBag -SetFlagsForHeldItemInBag: ; 0x0200FAEC - stmdb sp!, {r4, lr} - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r2, _0200FB50 ; =BAG_ITEMS_PTR_MIRROR - mov r4, #0 - ldr r2, [r2] - mov r3, r4 - ldr lr, [r2, #0x384] - mov ip, #1 -_0200FB10: - ldrb r2, [lr] - tst r2, #1 - movne r2, ip - moveq r2, r3 - tst r2, #0xff - beq _0200FB3C - ldrb r2, [lr, #1] - cmp r2, r0 - ldreqb r2, [lr] - orreq r2, r2, r1 - streqb r2, [lr] -_0200FB3C: - add r4, r4, #1 - cmp r4, #0x32 - add lr, lr, #6 - blt _0200FB10 - ldmia sp!, {r4, pc} - .align 2, 0 -_0200FB50: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SetFlagsForHeldItemInBag - - arm_func_start RemoveHolderForItemInBag -RemoveHolderForItemInBag: ; 0x0200FB54 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - ldr r1, _0200FBDC ; =BAG_ITEMS_PTR_MIRROR - mov r6, r0 - ldr r0, [r1] - mov r5, #0 - mov sb, #1 - ldr r4, [r0, #0x384] - mov r8, r5 - mov r7, sb - b _0200FBCC -_0200FB7C: - ldrb r0, [r4] - tst r0, #1 - movne r0, sb - moveq r0, r8 - tst r0, #0xff - beq _0200FBC4 - mov r0, r4 - mov r1, r6 - mov r2, r7 - bl AreItemsEquivalent - cmp r0, #0 - beq _0200FBC4 - mov r0, #0 - strb r0, [r4, #1] - ldrb r1, [r6] - mov r0, #1 - strb r1, [r4] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0200FBC4: - add r5, r5, #1 - add r4, r4, #6 -_0200FBCC: - cmp r5, #0x32 - blt _0200FB7C - mov r0, #0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0200FBDC: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveHolderForItemInBag - - arm_func_start SetHolderForItemInBag -SetHolderForItemInBag: ; 0x0200FBE0 - stmdb sp!, {r4, lr} - ldr ip, _0200FC20 ; =BAG_ITEMS_PTR_MIRROR - mov r3, #6 - ldr lr, [ip] - smulbb ip, r0, r3 - ldr lr, [lr, #0x384] - and r0, r2, #0xff - ldrb r3, [lr, ip] - add r4, lr, ip - bic r3, r3, #0x10 - strb r3, [lr, ip] - strb r2, [r1, #1] - strb r0, [r4, #1] - ldrb r0, [r1] - strb r0, [lr, ip] - ldmia sp!, {r4, pc} - .align 2, 0 -_0200FC20: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SetHolderForItemInBag - - arm_func_start SortItemsInBag -SortItemsInBag: ; 0x0200FC24 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov r4, #0 - ldr r7, _0200FCA8 ; =BAG_ITEMS_PTR_MIRROR - mov r8, r4 - mov sb, #1 - mov r6, #6 -_0200FC3C: - mul r1, r4, r6 - ldr r0, [r7] - ldr r2, [r0, #0x384] - ldrb r0, [r2, r1] - add r5, r2, r1 - tst r0, #1 - movne r0, sb - moveq r0, r8 - tst r0, #0xff - beq _0200FC84 - ldrsh r0, [r5, #4] - cmp r0, #0xb7 - bne _0200FC84 - mov r0, r5 - bl sub_0200D8AC - bl AddMoneyCarried - mov r0, r5 - bl ItemZInit -_0200FC84: - add r4, r4, #1 - cmp r4, #0x32 - blt _0200FC3C - ldr r0, _0200FCA8 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #0x32 - ldr r0, [r0] - ldr r0, [r0, #0x384] - bl SortItemList - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0200FCA8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SortItemsInBag - - arm_func_start RemovePokeItemsInBag -RemovePokeItemsInBag: ; 0x0200FCAC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r0, _0200FD34 ; =BAG_ITEMS_PTR_MIRROR - mov r5, #0 - ldr r0, [r0] - mov r6, r5 - ldr r4, [r0, #0x384] - mov r7, #1 -_0200FCC8: - ldrb r0, [r4] - tst r0, #1 - movne r0, r7 - moveq r0, r6 - tst r0, #0xff - beq _0200FD0C - ldrsh r0, [r4, #4] - cmp r0, #0xb7 - bne _0200FD0C - ldrb r1, [r4] - mov r0, r4 - bic r1, r1, #8 - strb r1, [r4] - bl sub_0200D8AC - bl AddMoneyCarried - mov r0, r4 - bl ItemZInit -_0200FD0C: - add r5, r5, #1 - cmp r5, #0x32 - add r4, r4, #6 - blt _0200FCC8 - ldr r0, _0200FD34 ; =BAG_ITEMS_PTR_MIRROR - mov r1, #0x32 - ldr r0, [r0] - ldr r0, [r0, #0x384] - bl RemoveEmptyItems - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0200FD34: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemovePokeItemsInBag - - arm_func_start sub_0200FD38 -sub_0200FD38: ; 0x0200FD38 - bx lr - arm_func_end sub_0200FD38 - - arm_func_start sub_0200FD3C -sub_0200FD3C: ; 0x0200FD3C - ldr ip, _0200FD44 ; =StorageZInit - bx ip - .align 2, 0 -_0200FD44: .word StorageZInit - arm_func_end sub_0200FD3C - - arm_func_start sub_0200FD48 -sub_0200FD48: ; 0x0200FD48 - ldr ip, _0200FD50 ; =GetRankStorageSize - bx ip - .align 2, 0 -_0200FD50: .word GetRankStorageSize - arm_func_end sub_0200FD48 - - arm_func_start IsStorageFull -IsStorageFull: ; 0x0200FD54 - stmdb sp!, {r4, lr} - bl GetRankStorageSize - mov r4, r0 - bl CountNbOfItemsInStorage - cmp r0, r4 - movge r0, #1 - movlt r0, #0 - and r0, r0, #0xff - ldmia sp!, {r4, pc} - arm_func_end IsStorageFull - - arm_func_start CountNbOfItemsInStorage -CountNbOfItemsInStorage: ; 0x0200FD78 - ldr r1, _0200FDAC ; =BAG_ITEMS_PTR_MIRROR - mov r0, #0 - ldr r3, [r1] - mov r2, r0 -_0200FD88: - add r1, r3, r2, lsl #1 - add r1, r1, #0x300 - ldrsh r1, [r1, #0x8a] - add r2, r2, #1 - cmp r1, #0 - addne r0, r0, #1 - cmp r2, #0x3e8 - blt _0200FD88 - bx lr - .align 2, 0 -_0200FDAC: .word BAG_ITEMS_PTR_MIRROR - arm_func_end CountNbOfItemsInStorage - - arm_func_start CountNbOfValidItemsInStorage -CountNbOfValidItemsInStorage: ; 0x0200FDB0 - stmdb sp!, {r4, r5, r6, lr} - mov r5, #0 - ldr r4, _0200FDFC ; =BAG_ITEMS_PTR_MIRROR - mov r6, r5 -_0200FDC0: - ldr r0, [r4] - add r0, r0, r6, lsl #1 - add r0, r0, #0x300 - ldrsh r1, [r0, #0x8a] - cmp r1, #0 - beq _0200FDE8 - ldrsh r0, [r0, #0x8a] - bl IsItemValidVeneer - cmp r0, #0 - addne r5, r5, #1 -_0200FDE8: - add r6, r6, #1 - cmp r6, #0x3e8 - blt _0200FDC0 - mov r0, r5 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0200FDFC: .word BAG_ITEMS_PTR_MIRROR - arm_func_end CountNbOfValidItemsInStorage - - arm_func_start CountNbOfValidItemsInTimeDarknessInStorage -CountNbOfValidItemsInTimeDarknessInStorage: ; 0x0200FE00 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r4, #0 - ldr r6, _0200FEA4 ; =BAG_ITEMS_PTR_MIRROR - mov r5, r4 -_0200FE10: - ldr r0, [r6] - add r0, r0, r5, lsl #1 - add r0, r0, #0x300 - ldrsh r7, [r0, #0x8a] - cmp r7, #0 - beq _0200FE90 - mov r0, r7 - bl IsItemValidVeneer - cmp r0, #0 - beq _0200FE90 - mov r0, r7 - bl IsItemInTimeDarkness - cmp r0, #0 - beq _0200FE90 - mov r0, r7 - bl IsTreasureBox - cmp r0, #0 - beq _0200FE8C - ldr r0, [r6] - add r0, r0, r5, lsl #1 - add r0, r0, #0xb00 - ldrsh r7, [r0, #0x5a] - mov r0, r7 - bl IsItemValidVeneer - cmp r0, #0 - beq _0200FE90 - mov r0, r7 - bl IsItemInTimeDarkness - cmp r0, #0 - addne r4, r4, #1 - b _0200FE90 -_0200FE8C: - add r4, r4, #1 -_0200FE90: - add r5, r5, #1 - cmp r5, #0x3e8 - blt _0200FE10 - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0200FEA4: .word BAG_ITEMS_PTR_MIRROR - arm_func_end CountNbOfValidItemsInTimeDarknessInStorage - - arm_func_start CountNbItemsOfTypeInStorage -CountNbItemsOfTypeInStorage: ; 0x0200FEA8 - ldr r1, _0200FEE0 ; =BAG_ITEMS_PTR_MIRROR - mov r2, #0 - ldr ip, [r1] - mov r3, r2 -_0200FEB8: - add r1, ip, r3, lsl #1 - add r1, r1, #0x300 - ldrsh r1, [r1, #0x8a] - add r3, r3, #1 - cmp r0, r1 - addeq r2, r2, #1 - cmp r3, #0x3e8 - blt _0200FEB8 - mov r0, r2 - bx lr - .align 2, 0 -_0200FEE0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end CountNbItemsOfTypeInStorage - - arm_func_start CountItemTypeInStorage -CountItemTypeInStorage: ; 0x0200FEE4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r4, #0 - ldr r7, _0200FF4C ; =BAG_ITEMS_PTR_MIRROR - mov r6, r0 - mov r5, r4 -_0200FEF8: - ldr r1, [r7] - ldrsh r0, [r6] - add r1, r1, r5, lsl #1 - add r1, r1, #0x300 - ldrsh r1, [r1, #0x8a] - cmp r0, r1 - bne _0200FF38 - bl IsThrownItem - cmp r0, #0 - addeq r4, r4, #1 - beq _0200FF38 - ldr r0, [r7] - add r0, r0, r5, lsl #1 - add r0, r0, #0xb00 - ldrh r0, [r0, #0x5a] - add r4, r4, r0 -_0200FF38: - add r5, r5, #1 - cmp r5, #0x3e8 - blt _0200FEF8 - mov r0, r4 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0200FF4C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end CountItemTypeInStorage - - arm_func_start GetEquivBulkItemIdxInStorage -GetEquivBulkItemIdxInStorage: ; 0x0200FF50 - stmdb sp!, {r3, lr} - ldr r1, _0200FFA8 ; =BAG_ITEMS_PTR_MIRROR - mov ip, #0 - ldr lr, [r1] - b _0200FF98 -_0200FF64: - add r2, lr, ip, lsl #1 - add r1, r2, #0x300 - ldrsh r3, [r0] - ldrsh r1, [r1, #0x8a] - cmp r3, r1 - addeq r1, r2, #0xb00 - ldreqh r2, [r0, #2] - ldreqh r1, [r1, #0x5a] - cmpeq r2, r1 - moveq r0, ip, lsl #0x10 - moveq r0, r0, asr #0x10 - ldmeqia sp!, {r3, pc} - add ip, ip, #1 -_0200FF98: - cmp ip, #0x3e8 - blt _0200FF64 - mvn r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0200FFA8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end GetEquivBulkItemIdxInStorage - - arm_func_start ConvertStorageItemAtIdxToBulkItem -ConvertStorageItemAtIdxToBulkItem: ; 0x0200FFAC - ldr r3, _0200FFF0 ; =BAG_ITEMS_PTR_MIRROR - ldr r2, [r3] - add r2, r2, r0, lsl #1 - add r2, r2, #0x300 - ldrsh r2, [r2, #0x8a] - strh r2, [r1] - ldr r2, [r3] - add r0, r2, r0, lsl #1 - add r0, r0, #0xb00 - ldrh r0, [r0, #0x5a] - strh r0, [r1, #2] - ldrsh r0, [r1] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0200FFF0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end ConvertStorageItemAtIdxToBulkItem - - arm_func_start ConvertStorageItemAtIdxToItem -ConvertStorageItemAtIdxToItem: ; 0x0200FFF4 - ldr r3, _02010040 ; =BAG_ITEMS_PTR_MIRROR - mov ip, #0 - ldr r2, [r3] - add r2, r2, r0, lsl #1 - add r2, r2, #0x300 - ldrsh r2, [r2, #0x8a] - strh r2, [r1, #4] - ldr r2, [r3] - add r0, r2, r0, lsl #1 - add r0, r0, #0xb00 - ldrh r0, [r0, #0x5a] - strh r0, [r1, #2] - strb ip, [r1] - strb ip, [r1, #1] - ldrsh r0, [r1, #4] - cmp r0, #0 - movne ip, #1 - and r0, ip, #0xff - bx lr - .align 2, 0 -_02010040: .word BAG_ITEMS_PTR_MIRROR - arm_func_end ConvertStorageItemAtIdxToItem - - arm_func_start sub_02010044 -sub_02010044: ; 0x02010044 - ldr r1, _0201005C ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r0, r1, r0, lsl #1 - add r0, r0, #0x300 - ldrsh r0, [r0, #0x8a] - bx lr - .align 2, 0 -_0201005C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02010044 - - arm_func_start sub_02010060 -sub_02010060: ; 0x02010060 - ldr r1, _02010078 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r0, r1, r0, lsl #1 - add r0, r0, #0xb00 - ldrh r0, [r0, #0x5a] - bx lr - .align 2, 0 -_02010078: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02010060 - - arm_func_start sub_0201007C -sub_0201007C: ; 0x0201007C - stmdb sp!, {r3, lr} - ldr r1, _02010150 ; =BAG_ITEMS_PTR_MIRROR - mov r0, #0 - ldr r2, [r1] - b _02010144 -_02010090: - add r1, r2, r0, lsl #1 - add r1, r1, #0x300 - ldrsh r1, [r1, #0x8a] - cmp r1, #0 - bne _02010140 - mov r1, r0 - add r0, r0, #1 - ldr r3, _02010150 ; =BAG_ITEMS_PTR_MIRROR - b _020100FC -_020100B4: - ldr lr, [r3] - add r2, lr, r0, lsl #1 - add r2, r2, #0x300 - ldrsh ip, [r2, #0x8a] - cmp ip, #0 - beq _020100F8 - add r2, lr, r1, lsl #1 - add r2, r2, #0x300 - strh ip, [r2, #0x8a] - ldr lr, [r3] - add r2, lr, r0, lsl #1 - add r2, r2, #0xb00 - ldrh ip, [r2, #0x5a] - add r2, lr, r1, lsl #1 - add r2, r2, #0xb00 - strh ip, [r2, #0x5a] - add r1, r1, #1 -_020100F8: - add r0, r0, #1 -_020100FC: - cmp r0, #0x3e8 - blt _020100B4 - mov r3, #0 - ldr r2, _02010150 ; =BAG_ITEMS_PTR_MIRROR - b _02010134 -_02010110: - ldr r0, [r2] - add r0, r0, r1, lsl #1 - add r0, r0, #0x300 - strh r3, [r0, #0x8a] - ldr r0, [r2] - add r0, r0, r1, lsl #1 - add r0, r0, #0xb00 - strh r3, [r0, #0x5a] - add r1, r1, #1 -_02010134: - cmp r1, #0x3e8 - blt _02010110 - ldmia sp!, {r3, pc} -_02010140: - add r0, r0, #1 -_02010144: - cmp r0, #0x3e8 - blt _02010090 - ldmia sp!, {r3, pc} - .align 2, 0 -_02010150: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_0201007C - - arm_func_start sub_02010154 -sub_02010154: ; 0x02010154 - stmdb sp!, {r3, lr} - ldr r2, _0201019C ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r2] - add r1, r1, r0, lsl #1 - add r1, r1, #0x300 - ldrsh r3, [r1, #0x8a] - cmp r3, #0 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - mov r3, #0 - strh r3, [r1, #0x8a] - ldr r1, [r2] - add r0, r1, r0, lsl #1 - add r0, r0, #0xb00 - strh r3, [r0, #0x5a] - bl sub_0201007C - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0201019C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02010154 - - arm_func_start RemoveItemAtIdxInStorage -RemoveItemAtIdxInStorage: ; 0x020101A0 - ldr r2, _020101E0 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r2] - add r1, r1, r0, lsl #1 - add r1, r1, #0x300 - ldrsh r3, [r1, #0x8a] - cmp r3, #0 - moveq r0, #0 - bxeq lr - mov r3, #0 - strh r3, [r1, #0x8a] - ldr r1, [r2] - add r0, r1, r0, lsl #1 - add r0, r0, #0xb00 - strh r3, [r0, #0x5a] - mov r0, #1 - bx lr - .align 2, 0 -_020101E0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveItemAtIdxInStorage - - arm_func_start RemoveBulkItemInStorage -RemoveBulkItemInStorage: ; 0x020101E4 - stmdb sp!, {r4, lr} - ldr r1, _0201025C ; =BAG_ITEMS_PTR_MIRROR - mov lr, #0 - ldr r4, [r1] - b _0201024C -_020101F8: - add r3, r4, lr, lsl #1 - add r2, r3, #0x300 - ldrsh ip, [r0] - ldrsh r1, [r2, #0x8a] - cmp ip, r1 - addeq r1, r3, #0xb00 - ldreqh r3, [r0, #2] - ldreqh r1, [r1, #0x5a] - cmpeq r3, r1 - bne _02010248 - mov r1, #0 - ldr r0, _0201025C ; =BAG_ITEMS_PTR_MIRROR - strh r1, [r2, #0x8a] - ldr r0, [r0] - add r0, r0, lr, lsl #1 - add r0, r0, #0xb00 - strh r1, [r0, #0x5a] - bl sub_0201007C - mov r0, #1 - ldmia sp!, {r4, pc} -_02010248: - add lr, lr, #1 -_0201024C: - cmp lr, #0x3e8 - blt _020101F8 - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0201025C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveBulkItemInStorage - - arm_func_start RemoveItemInStorage -RemoveItemInStorage: ; 0x02010260 - stmdb sp!, {r4, lr} - ldr r1, _020102D8 ; =BAG_ITEMS_PTR_MIRROR - mov lr, #0 - ldr r4, [r1] - b _020102C8 -_02010274: - add r3, r4, lr, lsl #1 - add r2, r3, #0x300 - ldrsh ip, [r0, #4] - ldrsh r1, [r2, #0x8a] - cmp ip, r1 - addeq r1, r3, #0xb00 - ldreqh r3, [r0, #2] - ldreqh r1, [r1, #0x5a] - cmpeq r3, r1 - bne _020102C4 - mov r1, #0 - ldr r0, _020102D8 ; =BAG_ITEMS_PTR_MIRROR - strh r1, [r2, #0x8a] - ldr r0, [r0] - add r0, r0, lr, lsl #1 - add r0, r0, #0xb00 - strh r1, [r0, #0x5a] - bl sub_0201007C - mov r0, #1 - ldmia sp!, {r4, pc} -_020102C4: - add lr, lr, #1 -_020102C8: - cmp lr, #0x3e8 - blt _02010274 - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_020102D8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveItemInStorage - - arm_func_start StorageZInit -StorageZInit: ; 0x020102DC - mov r3, #0 - ldr r1, _02010318 ; =BAG_ITEMS_PTR_MIRROR - mov r2, r3 -_020102E8: - ldr r0, [r1] - add r0, r0, r3, lsl #1 - add r0, r0, #0x300 - strh r2, [r0, #0x8a] - ldr r0, [r1] - add r0, r0, r3, lsl #1 - add r0, r0, #0xb00 - add r3, r3, #1 - strh r2, [r0, #0x5a] - cmp r3, #0x3e8 - blt _020102E8 - bx lr - .align 2, 0 -_02010318: .word BAG_ITEMS_PTR_MIRROR - arm_func_end StorageZInit - - arm_func_start AddBulkItemToStorage -AddBulkItemToStorage: ; 0x0201031C - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #8 - mov r4, r0 - bl GetRankStorageSize - mov r5, r0 - add r0, sp, #0 - mov r1, r4 - bl BulkItemToItem - ldr r0, _020103A8 ; =BAG_ITEMS_PTR_MIRROR - mov ip, #0 - ldr r2, [r0] - b _02010394 -_0201034C: - add r0, r2, ip, lsl #1 - add r1, r0, #0x300 - ldrsh r0, [r1, #0x8a] - cmp r0, #0 - bne _02010390 - ldrsh r3, [r4] - ldr r2, _020103A8 ; =BAG_ITEMS_PTR_MIRROR - add r0, sp, #0 - strh r3, [r1, #0x8a] - ldr r1, [r2] - ldrh r2, [r4, #2] - add r1, r1, ip, lsl #1 - add r1, r1, #0xb00 - strh r2, [r1, #0x5a] - bl SetItemAcquired - mov r0, #1 - b _020103A0 -_02010390: - add ip, ip, #1 -_02010394: - cmp ip, r5 - blt _0201034C - mov r0, #0 -_020103A0: - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020103A8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end AddBulkItemToStorage - - arm_func_start AddItemToStorage -AddItemToStorage: ; 0x020103AC - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetRankStorageSize - ldr r1, _02010420 ; =BAG_ITEMS_PTR_MIRROR - mov ip, #0 - ldr r3, [r1] - b _02010410 -_020103C8: - add r1, r3, ip, lsl #1 - add r1, r1, #0x300 - ldrsh r2, [r1, #0x8a] - cmp r2, #0 - bne _0201040C - ldrsh r3, [r4, #4] - ldr r2, _02010420 ; =BAG_ITEMS_PTR_MIRROR - mov r0, r4 - strh r3, [r1, #0x8a] - ldr r1, [r2] - ldrh r2, [r4, #2] - add r1, r1, ip, lsl #1 - add r1, r1, #0xb00 - strh r2, [r1, #0x5a] - bl SetItemAcquired - mov r0, #1 - ldmia sp!, {r4, pc} -_0201040C: - add ip, ip, #1 -_02010410: - cmp ip, r0 - blt _020103C8 - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_02010420: .word BAG_ITEMS_PTR_MIRROR - arm_func_end AddItemToStorage - - arm_func_start SortItemsInStorage -SortItemsInStorage: ; 0x02010424 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov sb, r1 - mov r1, #6 - mov sl, r0 - mul r0, sb, r1 - mov r1, #0 - bl MemAlloc - mov r5, #6 - mov r7, r0 - mov r8, #0 - mov fp, #0x80 - ldr r6, _0201058C ; =BAG_ITEMS_PTR_MIRROR - mov r4, r5 - b _020104C8 -_0201045C: - ldr r0, [r6] - add r0, r0, r8, lsl #1 - add r0, r0, #0x300 - ldrsh r0, [r0, #0x8a] - cmp r0, #0 - beq _020104D0 - mla r0, r8, r5, r7 - bl ItemZInit - ldrb r0, [sl, r8] - mul r2, r8, r4 - cmp r0, #0 - movne r0, fp - moveq r0, #0 - orr r0, r0, #1 - strb r0, [r7, r2] - ldr r1, [r6] - add r0, r7, r2 - add r1, r1, r8, lsl #1 - add r1, r1, #0x300 - ldrsh r1, [r1, #0x8a] - strh r1, [r0, #4] - ldr r1, [r6] - add r1, r1, r8, lsl #1 - add r1, r1, #0xb00 - ldrh r1, [r1, #0x5a] - add r8, r8, #1 - strh r1, [r0, #2] -_020104C8: - cmp r8, sb - blt _0201045C -_020104D0: - mov r0, r7 - mov r1, r8 - bl SortItemList - mov r6, #0 - mov r1, r6 - mov r2, #1 - mov fp, #6 - ldr r0, _0201058C ; =BAG_ITEMS_PTR_MIRROR - b _0201053C -_020104F4: - mul r4, r6, fp - add r5, r7, r4 - ldr ip, [r0] - ldrsh r3, [r5, #4] - add ip, ip, r6, lsl #1 - add ip, ip, #0x300 - strh r3, [ip, #0x8a] - ldr ip, [r0] - ldrh r3, [r5, #2] - add r5, ip, r6, lsl #1 - add r5, r5, #0xb00 - strh r3, [r5, #0x5a] - ldrb r3, [r7, r4] - tst r3, #0x80 - movne r3, r2 - moveq r3, r1 - strb r3, [sl, r6] - add r6, r6, #1 -_0201053C: - cmp r6, r8 - blt _020104F4 - mov r2, #0 - ldr r1, _0201058C ; =BAG_ITEMS_PTR_MIRROR - b _02010578 -_02010550: - ldr r0, [r1] - add r0, r0, r6, lsl #1 - add r0, r0, #0x300 - strh r2, [r0, #0x8a] - ldr r0, [r1] - add r0, r0, r6, lsl #1 - add r0, r0, #0xb00 - strh r2, [r0, #0x5a] - strb r2, [sl, r6] - add r6, r6, #1 -_02010578: - cmp r6, sb - blt _02010550 - mov r0, r7 - bl MemFree - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0201058C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SortItemsInStorage - - arm_func_start sub_02010590 -sub_02010590: ; 0x02010590 - bx lr - arm_func_end sub_02010590 - - arm_func_start AllKecleonShopsZInit -AllKecleonShopsZInit: ; 0x02010594 - stmdb sp!, {r4, r5, r6, lr} - mov r2, #0 - ldr ip, _02010650 ; =BAG_ITEMS_PTR_MIRROR - mov r5, r2 - mov r0, r2 - mov r1, r2 -_020105AC: - mov r6, r1 -_020105B0: - ldr r3, [ip] - mov r4, r6, lsl #2 - add r3, r3, #0x330 - add r3, r3, #0x1000 - add r3, r3, r2, lsl #5 - add lr, r3, r6, lsl #2 - strh r5, [r3, r4] - add r6, r6, #1 - strh r5, [lr, #2] - cmp r6, #8 - blt _020105B0 - mov r6, r5 -_020105E0: - ldr r3, [ip] - mov lr, r6, lsl #2 - add r3, r3, #0x374 - add r3, r3, #0x1000 - add r3, r3, r2, lsl #4 - add r4, r3, r6, lsl #2 - strh r0, [r3, lr] - add r6, r6, #1 - strh r0, [r4, #2] - cmp r6, #4 - blt _020105E0 - add r2, r2, #1 - cmp r2, #2 - blt _020105AC - ldr r2, _02010650 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r2] - add r1, r1, #0x1000 - str r0, [r1, #0x3a0] - ldr r1, [r2] - add r1, r1, #0x1300 - strh r0, [r1, #0xa4] - ldr r1, [r2] - add r1, r1, #0x1300 - strh r0, [r1, #0xa6] - ldr r1, [r2] - add r1, r1, #0x1300 - strh r0, [r1, #0xa8] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02010650: .word BAG_ITEMS_PTR_MIRROR - arm_func_end AllKecleonShopsZInit - - arm_func_start SpecialEpisodeKecleonShopZInit -SpecialEpisodeKecleonShopZInit: ; 0x02010654 - stmdb sp!, {r3, lr} - mov lr, #0 - ldr r2, _020106C0 ; =BAG_ITEMS_PTR_MIRROR - mov r0, lr -_02010664: - ldr r1, [r2] - mov r3, lr, lsl #2 - add r1, r1, #0x350 - add r1, r1, #0x1000 - add ip, r1, lr, lsl #2 - strh r0, [r1, r3] - add lr, lr, #1 - strh r0, [ip, #2] - cmp lr, #8 - blt _02010664 - ldr r2, _020106C0 ; =BAG_ITEMS_PTR_MIRROR - mov r3, #0 -_02010694: - ldr r1, [r2] - mov ip, r0, lsl #2 - add r1, r1, #0x384 - add r1, r1, #0x1000 - add lr, r1, r0, lsl #2 - strh r3, [r1, ip] - add r0, r0, #1 - strh r3, [lr, #2] - cmp r0, #4 - blt _02010694 - ldmia sp!, {r3, pc} - .align 2, 0 -_020106C0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SpecialEpisodeKecleonShopZInit - - arm_func_start SetActiveKecleonShop -SetActiveKecleonShop: ; 0x020106C4 - ldr r2, _02010708 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r2] - add r1, r1, #0x1000 - strb r0, [r1, #0x32a] - ldr ip, [r2] - add r1, ip, #0x330 - add r1, r1, #0x1000 - add r3, r1, r0, lsl #5 - add r1, ip, #0x1000 - str r3, [r1, #0x32c] - ldr r2, [r2] - add r1, r2, #0x374 - add r1, r1, #0x1000 - add r1, r1, r0, lsl #4 - add r0, r2, #0x1000 - str r1, [r0, #0x370] - bx lr - .align 2, 0 -_02010708: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SetActiveKecleonShop - - arm_func_start GetMoneyStored -GetMoneyStored: ; 0x0201070C - ldr r0, _02010720 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1000 - ldr r0, [r0, #0x3a0] - bx lr - .align 2, 0 -_02010720: .word BAG_ITEMS_PTR_MIRROR - arm_func_end GetMoneyStored - - arm_func_start SetMoneyStored -SetMoneyStored: ; 0x02010724 - ldr r1, _02010750 ; =0x0098967F - cmp r0, r1 - movgt r0, r1 - bgt _0201073C - cmp r0, #0 - movlt r0, #0 -_0201073C: - ldr r1, _02010754 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r1, r1, #0x1000 - str r0, [r1, #0x3a0] - bx lr - .align 2, 0 -_02010750: .word 0x0098967F -_02010754: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SetMoneyStored - - arm_func_start AddMoneyStored -AddMoneyStored: ; 0x02010758 - ldr r1, _02010774 ; =BAG_ITEMS_PTR_MIRROR - ldr ip, _02010778 ; =SetMoneyStored - ldr r1, [r1] - add r1, r1, #0x1000 - ldr r1, [r1, #0x3a0] - add r0, r1, r0 - bx ip - .align 2, 0 -_02010774: .word BAG_ITEMS_PTR_MIRROR -_02010778: .word SetMoneyStored - arm_func_end AddMoneyStored - - arm_func_start sub_0201077C -sub_0201077C: ; 0x0201077C - ldr r0, _02010790 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1300 - ldrsh r0, [r0, #0xa4] - bx lr - .align 2, 0 -_02010790: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_0201077C - - arm_func_start sub_02010794 -sub_02010794: ; 0x02010794 - ldr r1, _020107A8 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r1, r1, #0x1300 - strh r0, [r1, #0xa4] - bx lr - .align 2, 0 -_020107A8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02010794 - - arm_func_start sub_020107AC -sub_020107AC: ; 0x020107AC - ldr r0, _020107C0 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1300 - ldrh r0, [r0, #0xa6] - bx lr - .align 2, 0 -_020107C0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_020107AC - - arm_func_start sub_020107C4 -sub_020107C4: ; 0x020107C4 - ldr r1, _020107D8 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r1, r1, #0x1300 - strh r0, [r1, #0xa6] - bx lr - .align 2, 0 -_020107D8: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_020107C4 - - arm_func_start sub_020107DC -sub_020107DC: ; 0x020107DC - ldr r0, _020107F0 ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1300 - ldrh r0, [r0, #0xa8] - bx lr - .align 2, 0 -_020107F0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_020107DC - - arm_func_start sub_020107F4 -sub_020107F4: ; 0x020107F4 - ldr r1, _02010808 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r1, r1, #0x1300 - strh r0, [r1, #0xa8] - bx lr - .align 2, 0 -_02010808: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_020107F4 - - arm_func_start sub_0201080C -sub_0201080C: ; 0x0201080C - ldr r0, _0201082C ; =BAG_ITEMS_PTR_MIRROR - ldr r0, [r0] - add r0, r0, #0x1300 - ldrh r1, [r0, #0xa8] - cmp r1, #0 - subne r1, r1, #1 - strneh r1, [r0, #0xa8] - bx lr - .align 2, 0 -_0201082C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_0201080C - - arm_func_start sub_02010830 -sub_02010830: ; 0x02010830 - ldr r1, _02010868 ; =BAG_ITEMS_PTR_MIRROR - mov r0, #0 - ldr r1, [r1] - mov r2, r0 - add r1, r1, #0x1000 - ldr r3, [r1, #0x32c] -_02010848: - mov r1, r2, lsl #2 - ldrsh r1, [r3, r1] - add r2, r2, #1 - cmp r1, #0 - addne r0, r0, #1 - cmp r2, #8 - blt _02010848 - bx lr - .align 2, 0 -_02010868: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02010830 - - arm_func_start RemoveItemFromKecleonShop1 -RemoveItemFromKecleonShop1: ; 0x0201086C - ldr r1, _02010894 ; =BAG_ITEMS_PTR_MIRROR - mov r3, r0, lsl #2 - ldr r1, [r1] - mov r2, #0 - add r1, r1, #0x1000 - ldr r1, [r1, #0x32c] - strh r2, [r1, r3] - add r0, r1, r0, lsl #2 - strh r2, [r0, #2] - bx lr - .align 2, 0 -_02010894: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveItemFromKecleonShop1 - - arm_func_start sub_02010898 -sub_02010898: ; 0x02010898 - ldr r1, _020108B0 ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r1, r1, #0x1000 - ldr r1, [r1, #0x32c] - add r0, r1, r0, lsl #2 - bx lr - .align 2, 0 -_020108B0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02010898 - - arm_func_start sub_020108B4 -sub_020108B4: ; 0x020108B4 - stmdb sp!, {r3, r4, r5, lr} - mov r0, #0 - mov r4, r0 - ldr r2, _02010950 ; =BAG_ITEMS_PTR_MIRROR - b _020108E8 -_020108C8: - ldr r1, [r2] - mov r3, r0, lsl #2 - add r1, r1, #0x1000 - ldr r1, [r1, #0x32c] - ldrsh r1, [r1, r3] - cmp r1, #0 - bne _020108F0 - add r0, r0, #1 -_020108E8: - cmp r0, #8 - blt _020108C8 -_020108F0: - cmp r0, #8 - beq _02010944 - cmp r0, r4 - ble _0201092C - ldr r1, [r2] - mov r3, r0, lsl #2 - add r1, r1, #0x1000 - ldr r5, [r1, #0x32c] - mov lr, r4, lsl #2 - ldrh r1, [r5, r3] - add ip, r5, r0, lsl #2 - add r3, r5, r4, lsl #2 - strh r1, [r5, lr] - ldrh r1, [ip, #2] - strh r1, [r3, #2] -_0201092C: - add r0, r0, #1 - add r4, r4, #1 - b _020108E8 -_02010938: - and r0, r4, #0xff - bl RemoveItemFromKecleonShop1 - add r4, r4, #1 -_02010944: - cmp r4, #8 - blt _02010938 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02010950: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_020108B4 - - arm_func_start SortKecleonItems1 -SortKecleonItems1: ; 0x02010954 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r6, #0 -_02010960: - add r7, r6, #1 - mov r5, r6, lsl #2 - ldr r4, _02010A48 ; =BAG_ITEMS_PTR_MIRROR - b _02010A2C -_02010970: - ldr r0, [r4] - add r0, r0, #0x1000 - ldr r0, [r0, #0x32c] - ldrsh r0, [r5, r0] - bl sub_0200D1F0 - ldr r1, [r4] - mov r2, r7, lsl #2 - add r1, r1, #0x1000 - ldr r1, [r1, #0x32c] - mov r8, r0 - ldrsh r0, [r1, r2] - bl sub_0200D1F0 - cmp r8, r0 - bgt _020109D0 - bne _02010A28 - ldr r0, [r4] - add r0, r0, #0x1000 - ldr r0, [r0, #0x32c] - add r1, r5, r0 - add r0, r0, r7, lsl #2 - ldrh r1, [r1, #2] - ldrh r0, [r0, #2] - cmp r1, r0 - bhs _02010A28 -_020109D0: - ldr r1, [r4] - mov r0, r7, lsl #2 - add r1, r1, #0x1000 - ldr r8, [r1, #0x32c] - add lr, r5, r8 - ldrh ip, [r5, r8] - ldrh r3, [lr, #2] - ldrh r1, [r8, r0] - add r2, r8, r7, lsl #2 - strh ip, [sp] - strh r1, [r5, r8] - ldrh r1, [r2, #2] - strh r3, [sp, #2] - ldrh r3, [sp] - strh r1, [lr, #2] - ldr r1, [r4] - ldrh r2, [sp, #2] - add r1, r1, #0x1000 - ldr r1, [r1, #0x32c] - strh r3, [r1, r0] - add r0, r1, r7, lsl #2 - strh r2, [r0, #2] -_02010A28: - add r7, r7, #1 -_02010A2C: - cmp r7, #8 - blt _02010970 - add r6, r6, #1 - cmp r6, #7 - blt _02010960 - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02010A48: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SortKecleonItems1 - - arm_func_start GenerateKecleonItems1 -GenerateKecleonItems1: ; 0x02010A4C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - mov r8, r0 - mov r4, #0 -_02010A58: - and r0, r4, #0xff - bl RemoveItemFromKecleonShop1 - add r4, r4, #1 - cmp r4, #8 - blt _02010A58 - ldr r0, _02010AC0 ; =KECLEON_SHOP_ITEM_TABLE_LISTS_1 - ldr r5, _02010AC4 ; =0x0000270F - ldr r6, [r0, r8, lsl #2] - mov r7, #0 -_02010A7C: - mov r0, r5 - bl RandIntSafe - mov r4, r0 - mov r0, r5 - bl RandIntSafe - mov r2, r0 - mov r0, r6 - mov r1, r4 - bl GetItemIdFromList - bl AddItemToKecleonShop1 - add r7, r7, #1 - cmp r7, #8 - blt _02010A7C - bl SortKecleonItems1 - mov r0, r8 - bl GenerateKecleonItems2 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02010AC0: .word KECLEON_SHOP_ITEM_TABLE_LISTS_1 -_02010AC4: .word 0x0000270F - arm_func_end GenerateKecleonItems1 - - arm_func_start AddItemToKecleonShop1 -AddItemToKecleonShop1: ; 0x02010AC8 - stmdb sp!, {r3, lr} - mov r1, r0 - add r0, sp, #0 - bl InitBulkItem - ldr r0, _02010B38 ; =BAG_ITEMS_PTR_MIRROR - mov r2, #0 - ldr r3, [r0] - add r0, r3, #0x1000 - b _02010B28 -_02010AEC: - ldr r1, [r0, #0x32c] - mov ip, r2, lsl #2 - ldrsh r1, [r1, ip] - cmp r1, #0 - bne _02010B24 - add r0, r3, #0x1000 - ldr r3, [r0, #0x32c] - ldrh r1, [sp] - add r2, r3, ip - mov r0, #0 - strh r1, [r3, ip] - ldrh r1, [sp, #2] - strh r1, [r2, #2] - ldmia sp!, {r3, pc} -_02010B24: - add r2, r2, #1 -_02010B28: - cmp r2, #8 - blt _02010AEC - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02010B38: .word BAG_ITEMS_PTR_MIRROR - arm_func_end AddItemToKecleonShop1 - - arm_func_start sub_02010B3C -sub_02010B3C: ; 0x02010B3C - ldr r1, _02010B74 ; =BAG_ITEMS_PTR_MIRROR - mov r0, #0 - ldr r1, [r1] - mov r2, r0 - add r1, r1, #0x1000 - ldr r3, [r1, #0x370] -_02010B54: - mov r1, r2, lsl #2 - ldrsh r1, [r3, r1] - add r2, r2, #1 - cmp r1, #0 - addne r0, r0, #1 - cmp r2, #4 - blt _02010B54 - bx lr - .align 2, 0 -_02010B74: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02010B3C - - arm_func_start RemoveItemFromKecleonShop2 -RemoveItemFromKecleonShop2: ; 0x02010B78 - ldr r1, _02010BA0 ; =BAG_ITEMS_PTR_MIRROR - mov r3, r0, lsl #2 - ldr r1, [r1] - mov r2, #0 - add r1, r1, #0x1000 - ldr r1, [r1, #0x370] - strh r2, [r1, r3] - add r0, r1, r0, lsl #2 - strh r2, [r0, #2] - bx lr - .align 2, 0 -_02010BA0: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveItemFromKecleonShop2 - - arm_func_start sub_02010BA4 -sub_02010BA4: ; 0x02010BA4 - ldr r1, _02010BBC ; =BAG_ITEMS_PTR_MIRROR - ldr r1, [r1] - add r1, r1, #0x1000 - ldr r1, [r1, #0x370] - add r0, r1, r0, lsl #2 - bx lr - .align 2, 0 -_02010BBC: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02010BA4 - - arm_func_start sub_02010BC0 -sub_02010BC0: ; 0x02010BC0 - stmdb sp!, {r3, r4, r5, lr} - mov r0, #0 - mov r4, r0 - ldr r2, _02010C5C ; =BAG_ITEMS_PTR_MIRROR - b _02010BF4 -_02010BD4: - ldr r1, [r2] - mov r3, r0, lsl #2 - add r1, r1, #0x1000 - ldr r1, [r1, #0x370] - ldrsh r1, [r1, r3] - cmp r1, #0 - bne _02010BFC - add r0, r0, #1 -_02010BF4: - cmp r0, #4 - blt _02010BD4 -_02010BFC: - cmp r0, #4 - beq _02010C50 - cmp r0, r4 - ble _02010C38 - ldr r1, [r2] - mov r3, r0, lsl #2 - add r1, r1, #0x1000 - ldr r5, [r1, #0x370] - mov lr, r4, lsl #2 - ldrh r1, [r5, r3] - add ip, r5, r0, lsl #2 - add r3, r5, r4, lsl #2 - strh r1, [r5, lr] - ldrh r1, [ip, #2] - strh r1, [r3, #2] -_02010C38: - add r0, r0, #1 - add r4, r4, #1 - b _02010BF4 -_02010C44: - and r0, r4, #0xff - bl RemoveItemFromKecleonShop2 - add r4, r4, #1 -_02010C50: - cmp r4, #4 - blt _02010C44 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02010C5C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end sub_02010BC0 - - arm_func_start SortKecleonItems2 -SortKecleonItems2: ; 0x02010C60 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #4 - mov r6, #0 -_02010C6C: - add r7, r6, #1 - mov r5, r6, lsl #2 - ldr r4, _02010D54 ; =BAG_ITEMS_PTR_MIRROR - b _02010D38 -_02010C7C: - ldr r0, [r4] - add r0, r0, #0x1000 - ldr r0, [r0, #0x370] - ldrsh r0, [r5, r0] - bl sub_0200D1F0 - ldr r1, [r4] - mov r2, r7, lsl #2 - add r1, r1, #0x1000 - ldr r1, [r1, #0x370] - mov r8, r0 - ldrsh r0, [r1, r2] - bl sub_0200D1F0 - cmp r8, r0 - bgt _02010CDC - bne _02010D34 - ldr r0, [r4] - add r0, r0, #0x1000 - ldr r0, [r0, #0x370] - add r1, r5, r0 - add r0, r0, r7, lsl #2 - ldrh r1, [r1, #2] - ldrh r0, [r0, #2] - cmp r1, r0 - bhs _02010D34 -_02010CDC: - ldr r1, [r4] - mov r0, r7, lsl #2 - add r1, r1, #0x1000 - ldr r8, [r1, #0x370] - add lr, r5, r8 - ldrh ip, [r5, r8] - ldrh r3, [lr, #2] - ldrh r1, [r8, r0] - add r2, r8, r7, lsl #2 - strh ip, [sp] - strh r1, [r5, r8] - ldrh r1, [r2, #2] - strh r3, [sp, #2] - ldrh r3, [sp] - strh r1, [lr, #2] - ldr r1, [r4] - ldrh r2, [sp, #2] - add r1, r1, #0x1000 - ldr r1, [r1, #0x370] - strh r3, [r1, r0] - add r0, r1, r7, lsl #2 - strh r2, [r0, #2] -_02010D34: - add r7, r7, #1 -_02010D38: - cmp r7, #4 - blt _02010C7C - add r6, r6, #1 - cmp r6, #3 - blt _02010C6C - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02010D54: .word BAG_ITEMS_PTR_MIRROR - arm_func_end SortKecleonItems2 - - arm_func_start GenerateKecleonItems2 -GenerateKecleonItems2: ; 0x02010D58 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r5, r0 - mov r4, #0 -_02010D64: - and r0, r4, #0xff - bl RemoveItemFromKecleonShop2 - add r4, r4, #1 - cmp r4, #4 - blt _02010D64 - ldr r0, _02010DC4 ; =KECLEON_SHOP_ITEM_TABLE_LISTS_2 - mov r7, #0 - ldr r6, [r0, r5, lsl #2] - ldr r5, _02010DC8 ; =0x0000270F -_02010D88: - mov r0, r5 - bl RandIntSafe - mov r4, r0 - mov r0, r5 - bl RandIntSafe - mov r2, r0 - mov r0, r6 - mov r1, r4 - bl GetItemIdFromList - bl AddItemToKecleonShop2 - add r7, r7, #1 - cmp r7, #4 - blt _02010D88 - bl SortKecleonItems2 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02010DC4: .word KECLEON_SHOP_ITEM_TABLE_LISTS_2 -_02010DC8: .word 0x0000270F - arm_func_end GenerateKecleonItems2 - - arm_func_start AddItemToKecleonShop2 -AddItemToKecleonShop2: ; 0x02010DCC - stmdb sp!, {r3, lr} - mov r1, r0 - add r0, sp, #0 - bl InitBulkItem - ldr r0, _02010E3C ; =BAG_ITEMS_PTR_MIRROR - mov r2, #0 - ldr r3, [r0] - add r0, r3, #0x1000 - b _02010E2C -_02010DF0: - ldr r1, [r0, #0x370] - mov ip, r2, lsl #2 - ldrsh r1, [r1, ip] - cmp r1, #0 - bne _02010E28 - add r0, r3, #0x1000 - ldr r3, [r0, #0x370] - ldrh r1, [sp] - add r2, r3, ip - mov r0, #0 - strh r1, [r3, ip] - ldrh r1, [sp, #2] - strh r1, [r2, #2] - ldmia sp!, {r3, pc} -_02010E28: - add r2, r2, #1 -_02010E2C: - cmp r2, #4 - blt _02010DF0 - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02010E3C: .word BAG_ITEMS_PTR_MIRROR - arm_func_end AddItemToKecleonShop2 - - arm_func_start GetExclusiveItemOffset -GetExclusiveItemOffset: ; 0x02010E40 - stmdb sp!, {r4, lr} - mov r4, r0 - bl GetItemCategory - cmp r0, #0xf - movne r0, #0 - subeq r0, r4, #0x1bc - moveq r0, r0, lsl #0x10 - moveq r0, r0, asr #0x10 - ldmia sp!, {r4, pc} - arm_func_end GetExclusiveItemOffset - - arm_func_start ApplyExclusiveItemStatBoosts -ApplyExclusiveItemStatBoosts: ; 0x02010E64 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #8 - mov r7, r1 - mov r6, r2 - mov r5, r3 - ldr r4, [sp, #0x28] - bl GetExclusiveItemOffset - ldr r1, _02010F6C ; =EXCLUSIVE_ITEM_STAT_BOOST_DATA_INDEXES - ldrb r2, [r7] - ldrb r1, [r1, r0, lsl #1] - ldrb r0, [r4] - strh r2, [sp, #4] - ldrb r2, [r5] - strh r0, [sp, #2] - ldrb r3, [r6] - ldr r0, _02010F70 ; =EXCLUSIVE_ITEM_ATTACK_BOOSTS - mov r1, r1, lsl #2 - strh r3, [sp, #6] - strh r2, [sp] - ldrsb r2, [r0, r1] - ldr r0, _02010F74 ; =EXCLUSIVE_ITEM_SPECIAL_ATTACK_BOOSTS - ldrh sb, [sp, #4] - ldrsb r8, [r0, r1] - mov r0, r2, lsl #0x10 - add r0, sb, r0, lsr #16 - strh r0, [sp, #4] - mov r0, r8, lsl #0x10 - ldrh lr, [sp, #6] - ldrh r2, [sp, #4] - ldr ip, _02010F78 ; =EXCLUSIVE_ITEM_DEFENSE_BOOSTS - add r0, lr, r0, lsr #16 - ldrsb lr, [ip, r1] - ldr r3, _02010F7C ; =EXCLUSIVE_ITEM_SPECIAL_DEFENSE_BOOSTS - ldrsh ip, [sp, #2] - ldrsb r1, [r3, r1] - strh r0, [sp, #6] - ldrsh r8, [sp] - add r0, ip, r1 - strh r0, [sp, #2] - cmp r2, #0xff - movhi r0, #0xff - strhih r0, [sp, #4] - ldrh r0, [sp, #6] - add r3, r8, lr - ldrh r2, [sp, #4] - cmp r0, #0xff - movhi r0, #0xff - strh r3, [sp] - strhih r0, [sp, #6] - ldrsh r0, [sp] - strb r2, [r7] - cmp r0, #0xff - movgt r0, #0xff - strgth r0, [sp] - ldrsh r0, [sp, #2] - ldrsh r1, [sp] - cmp r0, #0xff - movgt r0, #0xff - strgth r0, [sp, #2] - ldrh r0, [sp, #6] - strb r0, [r6] - ldrsh r0, [sp, #2] - strb r1, [r5] - strb r0, [r4] - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02010F6C: .word EXCLUSIVE_ITEM_STAT_BOOST_DATA_INDEXES -_02010F70: .word EXCLUSIVE_ITEM_ATTACK_BOOSTS -_02010F74: .word EXCLUSIVE_ITEM_SPECIAL_ATTACK_BOOSTS -_02010F78: .word EXCLUSIVE_ITEM_DEFENSE_BOOSTS -_02010F7C: .word EXCLUSIVE_ITEM_SPECIAL_DEFENSE_BOOSTS - arm_func_end ApplyExclusiveItemStatBoosts - - arm_func_start SetExclusiveItemEffect -SetExclusiveItemEffect: ; 0x02010F80 - cmp r1, #0 - bxeq lr - mov ip, r1, lsr #5 - ldr r3, [r0, ip, lsl #2] - sub r1, r1, ip, lsl #5 - mov r2, #1 - orr r1, r3, r2, lsl r1 - str r1, [r0, ip, lsl #2] - bx lr - arm_func_end SetExclusiveItemEffect diff --git a/asm/main_0200EDFC.s b/asm/main_0200EDFC.s new file mode 100644 index 00000000..766f831a --- /dev/null +++ b/asm/main_0200EDFC.s @@ -0,0 +1,2782 @@ + .include "asm/macros.inc" + .include "main_0200EDFC.inc" + + .text + + arm_func_start GetNbItemsInBag +GetNbItemsInBag: ; 0x0200EDFC + stmdb sp!, {r3, lr} + ldr r1, _0200EE48 ; =BAG_ITEMS_PTR_MIRROR + mov r0, #0 + ldr r1, [r1] + mov lr, r0 + ldr ip, [r1, #0x384] + mov r1, r0 + mov r2, #1 +_0200EE1C: + ldrb r3, [ip] + add lr, lr, #1 + add ip, ip, #6 + tst r3, #1 + movne r3, r2 + moveq r3, r1 + tst r3, #0xff + addne r0, r0, #1 + cmp lr, #0x32 + blt _0200EE1C + ldmia sp!, {r3, pc} + .align 2, 0 +_0200EE48: .word BAG_ITEMS_PTR_MIRROR + arm_func_end GetNbItemsInBag + + arm_func_start CountNbItemsOfTypeInBag +CountNbItemsOfTypeInBag: ; 0x0200EE4C + ldr r1, _0200EE84 ; =BAG_ITEMS_PTR_MIRROR + mov r3, #0 + ldr r1, [r1] + mov ip, r3 + ldr r2, [r1, #0x384] +_0200EE60: + ldrsh r1, [r2, #4] + add ip, ip, #1 + add r2, r2, #6 + cmp r1, r0 + addeq r3, r3, #1 + cmp ip, #0x32 + blt _0200EE60 + mov r0, r3 + bx lr + .align 2, 0 +_0200EE84: .word BAG_ITEMS_PTR_MIRROR + arm_func_end CountNbItemsOfTypeInBag + + arm_func_start CountItemTypeInBag +CountItemTypeInBag: ; 0x0200EE88 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r1, _0200EEDC ; =BAG_ITEMS_PTR_MIRROR + mov r5, #0 + ldr r1, [r1] + mov r7, r0 + ldr r4, [r1, #0x384] + mov r6, r5 +_0200EEA4: + ldrsh r0, [r4, #4] + cmp r0, r7 + bne _0200EEC4 + bl IsThrownItem + cmp r0, #0 + ldrneh r0, [r4, #2] + addne r5, r5, r0 + addeq r5, r5, #1 +_0200EEC4: + add r6, r6, #1 + cmp r6, #0x32 + add r4, r4, #6 + blt _0200EEA4 + mov r0, r5 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0200EEDC: .word BAG_ITEMS_PTR_MIRROR + arm_func_end CountItemTypeInBag + + arm_func_start IsItemInBag +IsItemInBag: ; 0x0200EEE0 + ldr r1, _0200EF1C ; =BAG_ITEMS_PTR_MIRROR + mov r3, #0 + ldr r1, [r1] + ldr r2, [r1, #0x384] + b _0200EF0C +_0200EEF4: + ldrsh r1, [r2, #4] + cmp r1, r0 + moveq r0, #1 + bxeq lr + add r3, r3, #1 + add r2, r2, #6 +_0200EF0C: + cmp r3, #0x32 + blt _0200EEF4 + mov r0, #0 + bx lr + .align 2, 0 +_0200EF1C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end IsItemInBag + + arm_func_start IsItemWithFlagsInBag +IsItemWithFlagsInBag: ; 0x0200EF20 + ldr r2, _0200EF68 ; =BAG_ITEMS_PTR_MIRROR + mov ip, #0 + ldr r2, [r2] + ldr r3, [r2, #0x384] + b _0200EF58 +_0200EF34: + ldrsh r2, [r3, #4] + cmp r2, r0 + bne _0200EF50 + ldrb r2, [r3] + tst r2, r1 + movne r0, #1 + bxne lr +_0200EF50: + add ip, ip, #1 + add r3, r3, #6 +_0200EF58: + cmp ip, #0x32 + blt _0200EF34 + mov r0, #0 + bx lr + .align 2, 0 +_0200EF68: .word BAG_ITEMS_PTR_MIRROR + arm_func_end IsItemWithFlagsInBag + +#ifndef JAPAN + arm_func_start IsItemInTreasureBoxes +IsItemInTreasureBoxes: ; 0x0200EF6C + stmdb sp!, {r4, r5, r6, lr} + ldr r1, _0200EFC8 ; =BAG_ITEMS_PTR_MIRROR + mov r4, r0 + ldr r0, [r1] + mov r6, #0 + ldr r5, [r0, #0x384] + b _0200EFB8 +_0200EF88: + ldrsh r0, [r5, #4] + bl GetItemCategoryVeneer + add r0, r0, #0xf4 + and r0, r0, #0xff + cmp r0, #2 + bhi _0200EFB0 + ldrh r0, [r5, #2] + cmp r0, r4 + moveq r0, #1 + ldmeqia sp!, {r4, r5, r6, pc} +_0200EFB0: + add r6, r6, #1 + add r5, r5, #6 +_0200EFB8: + cmp r6, #0x32 + blt _0200EF88 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0200EFC8: .word BAG_ITEMS_PTR_MIRROR + arm_func_end IsItemInTreasureBoxes +#endif + + arm_func_start IsHeldItemInBag +IsHeldItemInBag: ; 0x0200EFCC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r1, _0200F04C ; =BAG_ITEMS_PTR_MIRROR + mov r6, r0 + ldr r0, [r1] + mov r5, #0 + mov sb, #1 + ldr r4, [r0, #0x384] + mov r8, r5 + mov r7, sb + b _0200F03C +_0200EFF4: + ldrb r0, [r4] + tst r0, #1 + movne r0, sb + moveq r0, r8 + tst r0, #0xff + beq _0200F034 + ldrb r0, [r4, #1] + cmp r0, #0 + bne _0200F034 + mov r0, r4 + mov r1, r6 + mov r2, r7 + bl AreItemsEquivalent + cmp r0, #0 + moveq r0, #1 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0200F034: + add r5, r5, #1 + add r4, r4, #6 +_0200F03C: + cmp r5, #0x32 + blt _0200EFF4 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0200F04C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end IsHeldItemInBag + + arm_func_start IsItemForSpecialSpawnInBag +IsItemForSpecialSpawnInBag: ; 0x0200F050 + stmdb sp!, {r3, r4, r5, lr} + ldr r0, _0200F0E0 ; =BAG_ITEMS_PTR_MIRROR + mov r4, #0 + ldr r0, [r0] + mov ip, #1 + ldr lr, [r0, #0x384] + mov r3, r4 + mov r1, r4 + mov r2, ip + b _0200F0D0 +_0200F078: + ldrb r5, [lr] + tst r5, #1 + movne r0, ip + moveq r0, r3 + tst r0, #0xff + beq _0200F0C8 + ldrsh r0, [lr, #4] + sub r0, r0, #0xad + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + cmp r0, #1 + bhi _0200F0C8 + tst r5, #8 + movne r0, r2 + moveq r0, r1 + tst r0, #0xff + moveq r0, #1 + ldmeqia sp!, {r3, r4, r5, pc} +_0200F0C8: + add r4, r4, #1 + add lr, lr, #6 +_0200F0D0: + cmp r4, #0x32 + blt _0200F078 + mov r0, #0 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0200F0E0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end IsItemForSpecialSpawnInBag + + arm_func_start HasStorableItems +HasStorableItems: ; 0x0200F0E4 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r0, _0200F148 ; =BAG_ITEMS_PTR_MIRROR + mov r7, #0 + ldr r0, [r0] + mov r4, r7 + ldr r6, [r0, #0x384] + mov r5, #1 + b _0200F138 +_0200F104: + ldrb r0, [r6] + tst r0, #1 + movne r0, r5 + moveq r0, r4 + tst r0, #0xff + beq _0200F130 + ldrsh r0, [r6, #4] + bl IsStorableItem + cmp r0, #0 + movne r0, #1 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} +_0200F130: + add r7, r7, #1 + add r6, r6, #6 +_0200F138: + cmp r7, #0x32 + blt _0200F104 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0200F148: .word BAG_ITEMS_PTR_MIRROR + arm_func_end HasStorableItems + + arm_func_start GetItemIndex +GetItemIndex: ; 0x0200F14C + ldr r1, _0200F188 ; =BAG_ITEMS_PTR_MIRROR + mov r2, #0 + ldr r1, [r1] + ldr r1, [r1, #0x384] + b _0200F178 +_0200F160: + cmp r1, r0 + moveq r0, r2, lsl #0x10 + moveq r0, r0, asr #0x10 + bxeq lr + add r2, r2, #1 + add r1, r1, #6 +_0200F178: + cmp r2, #0x32 + blt _0200F160 + mvn r0, #0 + bx lr + .align 2, 0 +_0200F188: .word BAG_ITEMS_PTR_MIRROR + arm_func_end GetItemIndex + + arm_func_start GetEquivItemIndex +GetEquivItemIndex: ; 0x0200F18C + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r1, _0200F204 ; =BAG_ITEMS_PTR_MIRROR + mov r5, r0 + ldr r0, [r1] + mov r4, #0 + ldr sb, [r0, #0x384] + mov r7, r4 + mov r8, #1 + mov r6, #0xb + b _0200F1F4 +_0200F1B4: + ldrb r0, [sb] + tst r0, #1 + movne r0, r8 + moveq r0, r7 + tst r0, #0xff + beq _0200F1EC + mov r0, sb + mov r1, r5 + mov r2, r6 + bl AreItemsEquivalent + cmp r0, #0 + movne r0, r4, lsl #0x10 + movne r0, r0, asr #0x10 + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0200F1EC: + add r4, r4, #1 + add sb, sb, #6 +_0200F1F4: + cmp r4, #0x32 + blt _0200F1B4 + mvn r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0200F204: .word BAG_ITEMS_PTR_MIRROR + arm_func_end GetEquivItemIndex + + arm_func_start GetEquippedThrowableItem +GetEquippedThrowableItem: ; 0x0200F208 + ldr r0, _0200F268 ; =BAG_ITEMS_PTR_MIRROR + mov ip, #0 + ldr r0, [r0] + mov r1, ip + ldr r3, [r0, #0x384] + mov r2, #1 + b _0200F258 +_0200F224: + ldrb r0, [r3] + tst r0, #1 + movne r0, r2 + moveq r0, r1 + tst r0, #0xff + beq _0200F250 + ldrb r0, [r3] + tst r0, #0x10 + movne r0, ip, lsl #0x10 + movne r0, r0, asr #0x10 + bxne lr +_0200F250: + add ip, ip, #1 + add r3, r3, #6 +_0200F258: + cmp ip, #0x32 + blt _0200F224 + mvn r0, #0 + bx lr + .align 2, 0 +_0200F268: .word BAG_ITEMS_PTR_MIRROR + arm_func_end GetEquippedThrowableItem + + arm_func_start GetFirstUnequippedItemOfType +GetFirstUnequippedItemOfType: ; 0x0200F26C + stmdb sp!, {r3, lr} + ldr r1, _0200F2DC ; =BAG_ITEMS_PTR_MIRROR + mvn ip, #0 + ldr r1, [r1] + cmp r0, #0 + ldr r3, [r1, #0x384] + moveq r0, ip + ldmeqia sp!, {r3, pc} + mov lr, #0 + mov r2, ip + b _0200F2CC +_0200F298: + ldrsh r1, [r3, #4] + cmp r1, r0 + bne _0200F2C4 + ldrb r1, [r3, #1] + cmp r1, #0 + moveq r0, lr, lsl #0x10 + moveq r0, r0, asr #0x10 + ldmeqia sp!, {r3, pc} + cmp ip, r2 + moveq r1, lr, lsl #0x10 + moveq ip, r1, asr #0x10 +_0200F2C4: + add lr, lr, #1 + add r3, r3, #6 +_0200F2CC: + cmp lr, #0x32 + blt _0200F298 + mov r0, ip + ldmia sp!, {r3, pc} + .align 2, 0 +_0200F2DC: .word BAG_ITEMS_PTR_MIRROR + arm_func_end GetFirstUnequippedItemOfType + + arm_func_start CopyItemAtIdx +CopyItemAtIdx: ; 0x0200F2E0 + stmdb sp!, {r3, lr} + ldr r3, _0200F344 ; =BAG_ITEMS_PTR_MIRROR + mov r2, #6 + ldr r3, [r3] + smulbb r2, r0, r2 + ldr r3, [r3, #0x384] + ldrb r0, [r3, r2] + add r3, r3, r2 + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _0200F334 + ldrh r2, [r3] + mov r0, #1 + strh r2, [r1] + ldrh r2, [r3, #2] + strh r2, [r1, #2] + ldrh r2, [r3, #4] + strh r2, [r1, #4] + ldmia sp!, {r3, pc} +_0200F334: + mov r0, r1 + bl ItemZInit + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0200F344: .word BAG_ITEMS_PTR_MIRROR + arm_func_end CopyItemAtIdx + + arm_func_start GetItemAtIdx +GetItemAtIdx: ; 0x0200F348 + cmp r0, #0 + movlt r0, #0 + bxlt lr + ldr r2, _0200F36C ; =BAG_ITEMS_PTR_MIRROR + mov r1, #6 + ldr r2, [r2] + ldr r2, [r2, #0x384] + smlabb r0, r0, r1, r2 + bx lr + .align 2, 0 +_0200F36C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end GetItemAtIdx + + arm_func_start RemoveEmptyItemsInBag +RemoveEmptyItemsInBag: ; 0x0200F370 + ldr r0, _0200F388 ; =BAG_ITEMS_PTR_MIRROR + ldr ip, _0200F38C ; =RemoveEmptyItems + ldr r0, [r0] + mov r1, #0x32 + ldr r0, [r0, #0x384] + bx ip + .align 2, 0 +_0200F388: .word BAG_ITEMS_PTR_MIRROR +_0200F38C: .word RemoveEmptyItems + arm_func_end RemoveEmptyItemsInBag + + arm_func_start RemoveItemNoHole +RemoveItemNoHole: ; 0x0200F390 + stmdb sp!, {r4, lr} + ldr r2, _0200F400 ; =BAG_ITEMS_PTR_MIRROR + mov r1, #6 + ldr r2, [r2] + smulbb r1, r0, r1 + ldr r2, [r2, #0x384] + ldrb r0, [r2, r1] + add r4, r2, r1 + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _0200F3F8 + ldrb r0, [r4, #1] + cmp r0, #0 + beq _0200F3D4 + bl sub_020582E0 +_0200F3D4: + mov r0, r4 + bl ItemZInit + ldr r0, _0200F400 ; =BAG_ITEMS_PTR_MIRROR + mov r1, #0x32 + ldr r0, [r0] + ldr r0, [r0, #0x384] + bl RemoveEmptyItems + mov r0, #1 + ldmia sp!, {r4, pc} +_0200F3F8: + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0200F400: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveItemNoHole + + arm_func_start RemoveItem +RemoveItem: ; 0x0200F404 + stmdb sp!, {r4, lr} + ldr r2, _0200F450 ; =BAG_ITEMS_PTR_MIRROR + mov r1, #6 + ldr r2, [r2] + smulbb r1, r0, r1 + ldr r2, [r2, #0x384] + ldrb r0, [r2, r1] + add r4, r2, r1 + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + ldrneb r0, [r4, #1] + cmpne r0, #0 + beq _0200F444 + bl sub_020582E0 +_0200F444: + mov r0, r4 + bl ItemZInit + ldmia sp!, {r4, pc} + .align 2, 0 +_0200F450: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveItem + + arm_func_start RemoveHeldItemNoHole +RemoveHeldItemNoHole: ; 0x0200F454 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + movs r5, r0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r0, _0200F4D0 ; =BAG_ITEMS_PTR_MIRROR + mov r4, #0 + ldr r0, [r0] + mov r6, r4 + ldr r8, [r0, #0x384] + mov r7, #1 +_0200F478: + ldrb r0, [r8] + tst r0, #1 + movne r0, r7 + moveq r0, r6 + tst r0, #0xff + beq _0200F4A8 + ldrb r0, [r8, #1] + cmp r0, r5 + bne _0200F4A8 + bl sub_020582E0 + mov r0, r8 + bl ItemZInit +_0200F4A8: + add r4, r4, #1 + cmp r4, #0x32 + add r8, r8, #6 + blt _0200F478 + ldr r0, _0200F4D0 ; =BAG_ITEMS_PTR_MIRROR + mov r1, #0x32 + ldr r0, [r0] + ldr r0, [r0, #0x384] + bl RemoveEmptyItems + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0200F4D0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveHeldItemNoHole + + arm_func_start RemoveItemByIdAndStackNoHole +RemoveItemByIdAndStackNoHole: ; 0x0200F4D4 + stmdb sp!, {r4, lr} + ldr r1, _0200F554 ; =BAG_ITEMS_PTR_MIRROR + mov r3, #0 + ldr r1, [r1] + ldr r4, [r1, #0x384] + b _0200F544 +_0200F4EC: + ldrsh r2, [r4, #4] + ldrsh r1, [r0] + cmp r2, r1 + ldreqh r2, [r4, #2] + ldreqh r1, [r0, #2] + cmpeq r2, r1 + bne _0200F53C + ldrb r0, [r4, #1] + cmp r0, #0 + beq _0200F518 + bl sub_020582E0 +_0200F518: + mov r0, r4 + bl ItemZInit + ldr r0, _0200F554 ; =BAG_ITEMS_PTR_MIRROR + mov r1, #0x32 + ldr r0, [r0] + ldr r0, [r0, #0x384] + bl RemoveEmptyItems + mov r0, #1 + ldmia sp!, {r4, pc} +_0200F53C: + add r3, r3, #1 + add r4, r4, #6 +_0200F544: + cmp r3, #0x32 + blt _0200F4EC + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0200F554: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveItemByIdAndStackNoHole + + arm_func_start RemoveEquivItem +RemoveEquivItem: ; 0x0200F558 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r1, _0200F5FC ; =BAG_ITEMS_PTR_MIRROR + mov r5, r0 + ldr r0, [r1] + mov r4, #0 + ldr sb, [r0, #0x384] + mov r7, r4 + mov r8, #1 + mov r6, #0xb + b _0200F5EC +_0200F580: + ldrb r0, [sb] + tst r0, #1 + movne r0, r8 + moveq r0, r7 + tst r0, #0xff + beq _0200F5E4 + mov r0, sb + mov r1, r5 + mov r2, r6 + bl AreItemsEquivalent + cmp r0, #0 + beq _0200F5E4 + ldrb r0, [sb, #1] + cmp r0, #0 + beq _0200F5C0 + bl sub_020582E0 +_0200F5C0: + mov r0, sb + bl ItemZInit + ldr r0, _0200F5FC ; =BAG_ITEMS_PTR_MIRROR + mov r1, #0x32 + ldr r0, [r0] + ldr r0, [r0, #0x384] + bl RemoveEmptyItems + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0200F5E4: + add r4, r4, #1 + add sb, sb, #6 +_0200F5EC: + cmp r4, #0x32 + blt _0200F580 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0200F5FC: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveEquivItem + + arm_func_start RemoveEquivItemNoHole +RemoveEquivItemNoHole: ; 0x0200F600 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r1, _0200F690 ; =BAG_ITEMS_PTR_MIRROR + mov r5, r0 + ldr r0, [r1] + mov r4, #0 + ldr sb, [r0, #0x384] + mov r7, r4 + mov r8, #1 + mov r6, #0xb + b _0200F680 +_0200F628: + ldrb r0, [sb] + tst r0, #1 + movne r0, r8 + moveq r0, r7 + tst r0, #0xff + beq _0200F678 + mov r0, sb + mov r1, r5 + mov r2, r6 + bl AreItemsEquivalent + cmp r0, #0 + beq _0200F678 + ldrb r0, [sb, #1] + cmp r0, #0 + beq _0200F668 + bl sub_020582E0 +_0200F668: + mov r0, sb + bl ItemZInit + mov r0, #1 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0200F678: + add r4, r4, #1 + add sb, sb, #6 +_0200F680: + cmp r4, #0x32 + blt _0200F628 + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0200F690: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveEquivItemNoHole + + arm_func_start DecrementStackItem +DecrementStackItem: ; 0x0200F694 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r1, _0200F714 ; =BAG_ITEMS_PTR_MIRROR + mov r6, r0 + ldr r0, [r1] + mov r5, #0 + ldr r4, [r0, #0x384] + mov r8, r5 + mov sb, #1 + mov r7, #0xb + b _0200F704 +_0200F6BC: + ldrb r0, [r4] + tst r0, #1 + movne r0, sb + moveq r0, r8 + tst r0, #0xff + beq _0200F6FC + mov r0, r4 + mov r1, r6 + mov r2, r7 + bl AreItemsEquivalent + cmp r0, #0 + ldrneh r1, [r4, #2] + movne r0, #1 + subne r1, r1, #1 + strneh r1, [r4, #2] + ldmneia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0200F6FC: + add r5, r5, #1 + add r4, r4, #6 +_0200F704: + cmp r5, #0x32 + blt _0200F6BC + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0200F714: .word BAG_ITEMS_PTR_MIRROR + arm_func_end DecrementStackItem + + arm_func_start RemoveItemNoHoleCheck +RemoveItemNoHoleCheck: ; 0x0200F718 + stmdb sp!, {r4, lr} + mvn r1, #0 + cmp r0, r1 + beq _0200F78C + ldr r2, _0200F794 ; =BAG_ITEMS_PTR_MIRROR + mov r1, #6 + ldr r2, [r2] + smulbb r1, r0, r1 + ldr r2, [r2, #0x384] + ldrb r0, [r2, r1] + add r4, r2, r1 + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _0200F78C + ldrb r0, [r4, #1] + cmp r0, #0 + beq _0200F768 + bl sub_020582E0 +_0200F768: + mov r0, r4 + bl ItemZInit + ldr r0, _0200F794 ; =BAG_ITEMS_PTR_MIRROR + mov r1, #0x32 + ldr r0, [r0] + ldr r0, [r0, #0x384] + bl RemoveEmptyItems + mov r0, #1 + ldmia sp!, {r4, pc} +_0200F78C: + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0200F794: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveItemNoHoleCheck + + arm_func_start RemoveFirstUnequippedItemOfType +RemoveFirstUnequippedItemOfType: ; 0x0200F798 + stmdb sp!, {r3, lr} + bl GetFirstUnequippedItemOfType + bl RemoveItemNoHoleCheck + ldmia sp!, {r3, pc} + arm_func_end RemoveFirstUnequippedItemOfType + + arm_func_start RemoveAllItems +RemoveAllItems: ; 0x0200F7A8 + stmdb sp!, {r3, r4, r5, lr} + ldr r0, _0200F7D8 ; =BAG_ITEMS_PTR_MIRROR + mov r5, #0 + ldr r0, [r0] + ldr r4, [r0, #0x384] +_0200F7BC: + mov r0, r4 + bl ItemZInit + add r5, r5, #1 + cmp r5, #0x32 + add r4, r4, #6 + blt _0200F7BC + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0200F7D8: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveAllItems + + arm_func_start RemoveAllItemsStartingAt +RemoveAllItemsStartingAt: ; 0x0200F7DC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r6, _0200F848 ; =BAG_ITEMS_PTR_MIRROR + mov r4, r0 + ldr r1, [r6] + mov r0, #6 + ldr r1, [r1, #0x384] + mov r5, r0 + mla r7, r4, r0, r1 + b _0200F828 +_0200F800: + ldrb r0, [r7, #1] + cmp r0, #0 + beq _0200F810 + bl sub_020582E0 +_0200F810: + ldr r0, [r6] + ldr r0, [r0, #0x384] + mla r0, r4, r5, r0 + bl ItemZInit + add r4, r4, #1 + add r7, r7, #6 +_0200F828: + cmp r4, #0x32 + blt _0200F800 + ldr r0, _0200F848 ; =BAG_ITEMS_PTR_MIRROR + mov r1, #0x32 + ldr r0, [r0] + ldr r0, [r0, #0x384] + bl RemoveEmptyItems + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0200F848: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveAllItemsStartingAt + + arm_func_start SpecialProcAddItemToBag +SpecialProcAddItemToBag: ; 0x0200F84C + stmdb sp!, {r3, lr} + sub sp, sp, #8 + mov r1, r0 + add r0, sp, #0 + bl BulkItemToItem + add r0, sp, #0 + mov r1, #0 + bl AddItemToBag + add sp, sp, #8 + ldmia sp!, {r3, pc} + arm_func_end SpecialProcAddItemToBag + + arm_func_start AddItemToBagNoHeld +AddItemToBagNoHeld: ; 0x0200F874 + ldr ip, _0200F880 ; =AddItemToBag + mov r1, #0 + bx ip + .align 2, 0 +_0200F880: .word AddItemToBag + arm_func_end AddItemToBagNoHeld + + arm_func_start AddItemToBag +AddItemToBag: ; 0x0200F884 + stmdb sp!, {r4, r5, r6, lr} + ldr r2, _0200F90C ; =BAG_ITEMS_PTR_MIRROR + mov r6, r0 + ldr r0, [r2] + mov r5, r1 + ldr r4, [r0, #0x384] + bl GetCurrentBagCapacity + mov ip, #0 + mov r1, ip + mov r2, #1 + b _0200F8FC +_0200F8B0: + ldrb r3, [r4] + tst r3, #1 + movne r3, r2 + moveq r3, r1 + tst r3, #0xff + bne _0200F8F4 + ldrh r1, [r6] + mov r0, r6 + strh r1, [r4] + ldrh r1, [r6, #2] + strh r1, [r4, #2] + ldrh r1, [r6, #4] + strh r1, [r4, #4] + strb r5, [r4, #1] + bl SetItemAcquired + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} +_0200F8F4: + add ip, ip, #1 + add r4, r4, #6 +_0200F8FC: + cmp ip, r0 + blt _0200F8B0 + mov r0, #0 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0200F90C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end AddItemToBag + + arm_func_start CleanStickyItemsInBag +CleanStickyItemsInBag: ; 0x0200F910 + ldr r0, _0200F93C ; =BAG_ITEMS_PTR_MIRROR + mov r2, #0 + ldr r0, [r0] + ldr r1, [r0, #0x384] +_0200F920: + ldrb r0, [r1] + add r2, r2, #1 + cmp r2, #0x32 + bic r0, r0, #8 + strb r0, [r1], #6 + blt _0200F920 + bx lr + .align 2, 0 +_0200F93C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end CleanStickyItemsInBag + + arm_func_start CountStickyItemsInBag +CountStickyItemsInBag: ; 0x0200F940 + stmdb sp!, {r4, r5, r6, lr} + ldr r0, _0200F9B0 ; =BAG_ITEMS_PTR_MIRROR + mov lr, #0 + ldr r0, [r0] + mov r3, #1 + ldr ip, [r0, #0x384] + mov r4, lr + mov r2, lr + mov r0, lr + mov r1, r3 +_0200F968: + ldrb r5, [ip] + tst r5, #1 + movne r6, r3 + moveq r6, r2 + tst r6, #0xff + beq _0200F994 + tst r5, #8 + movne r5, r1 + moveq r5, r0 + tst r5, #0xff + addne lr, lr, #1 +_0200F994: + add r4, r4, #1 + cmp r4, #0x32 + add ip, ip, #6 + blt _0200F968 + mov r0, lr, lsl #0x10 + mov r0, r0, asr #0x10 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0200F9B0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end CountStickyItemsInBag + + arm_func_start sub_0200F9B4 +sub_0200F9B4: ; 0x0200F9B4 + stmdb sp!, {r3, lr} + ldr r1, _0200FA08 ; =BAG_ITEMS_PTR_MIRROR + mov lr, #0 + ldr r1, [r1] + mov r2, lr + ldr ip, [r1, #0x384] + mov r3, #1 +_0200F9D0: + ldrb r1, [ip] + add lr, lr, #1 + tst r1, #1 + movne r1, r3 + moveq r1, r2 + tst r1, #0xff + ldrneb r1, [ip, #1] + cmpne r1, #0 + ldrneb r1, [r0, r1] + strneb r1, [ip, #1] + cmp lr, #0x32 + add ip, ip, #6 + blt _0200F9D0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0200FA08: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_0200F9B4 + + arm_func_start sub_0200FA0C +sub_0200FA0C: ; 0x0200FA0C + stmdb sp!, {r3, lr} + ldr r3, _0200FA64 ; =BAG_ITEMS_PTR_MIRROR + mov r2, #0x12c + ldr r3, [r3] + mov lr, #0 + mla ip, r1, r2, r3 + mov r2, lr + mov r3, #1 +_0200FA2C: + ldrb r1, [ip] + add lr, lr, #1 + tst r1, #1 + movne r1, r3 + moveq r1, r2 + tst r1, #0xff + ldrneb r1, [ip, #1] + cmpne r1, #0 + ldrneb r1, [r0, r1] + strneb r1, [ip, #1] + cmp lr, #0x32 + add ip, ip, #6 + blt _0200FA2C + ldmia sp!, {r3, pc} + .align 2, 0 +_0200FA64: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_0200FA0C + + arm_func_start TransmuteHeldItemInBag +TransmuteHeldItemInBag: ; 0x0200FA68 + stmdb sp!, {r4, lr} + ldr r1, _0200FAE8 ; =BAG_ITEMS_PTR_MIRROR + mov r4, #0 + ldr r1, [r1] + mov r3, r4 + ldr lr, [r1, #0x384] + mov ip, #1 + b _0200FAD8 +_0200FA88: + ldrb r1, [lr] + tst r1, #1 + movne r1, ip + moveq r1, r3 + tst r1, #0xff + beq _0200FAD0 + ldrb r2, [lr, #1] + ldrb r1, [r0, #1] + cmp r2, r1 + bne _0200FAD0 + ldrh r1, [r0] + strh r1, [lr] + ldrh r1, [r0, #2] + strh r1, [lr, #2] + ldrh r1, [r0, #4] + mov r0, #1 + strh r1, [lr, #4] + ldmia sp!, {r4, pc} +_0200FAD0: + add r4, r4, #1 + add lr, lr, #6 +_0200FAD8: + cmp r4, #0x32 + blt _0200FA88 + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0200FAE8: .word BAG_ITEMS_PTR_MIRROR + arm_func_end TransmuteHeldItemInBag + + arm_func_start SetFlagsForHeldItemInBag +SetFlagsForHeldItemInBag: ; 0x0200FAEC + stmdb sp!, {r4, lr} + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r2, _0200FB50 ; =BAG_ITEMS_PTR_MIRROR + mov r4, #0 + ldr r2, [r2] + mov r3, r4 + ldr lr, [r2, #0x384] + mov ip, #1 +_0200FB10: + ldrb r2, [lr] + tst r2, #1 + movne r2, ip + moveq r2, r3 + tst r2, #0xff + beq _0200FB3C + ldrb r2, [lr, #1] + cmp r2, r0 + ldreqb r2, [lr] + orreq r2, r2, r1 + streqb r2, [lr] +_0200FB3C: + add r4, r4, #1 + cmp r4, #0x32 + add lr, lr, #6 + blt _0200FB10 + ldmia sp!, {r4, pc} + .align 2, 0 +_0200FB50: .word BAG_ITEMS_PTR_MIRROR + arm_func_end SetFlagsForHeldItemInBag + + arm_func_start RemoveHolderForItemInBag +RemoveHolderForItemInBag: ; 0x0200FB54 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + ldr r1, _0200FBDC ; =BAG_ITEMS_PTR_MIRROR + mov r6, r0 + ldr r0, [r1] + mov r5, #0 + mov sb, #1 + ldr r4, [r0, #0x384] + mov r8, r5 + mov r7, sb + b _0200FBCC +_0200FB7C: + ldrb r0, [r4] + tst r0, #1 + movne r0, sb + moveq r0, r8 + tst r0, #0xff + beq _0200FBC4 + mov r0, r4 + mov r1, r6 + mov r2, r7 + bl AreItemsEquivalent + cmp r0, #0 + beq _0200FBC4 + mov r0, #0 + strb r0, [r4, #1] + ldrb r1, [r6] + mov r0, #1 + strb r1, [r4] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0200FBC4: + add r5, r5, #1 + add r4, r4, #6 +_0200FBCC: + cmp r5, #0x32 + blt _0200FB7C + mov r0, #0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0200FBDC: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveHolderForItemInBag + + arm_func_start SetHolderForItemInBag +SetHolderForItemInBag: ; 0x0200FBE0 + stmdb sp!, {r4, lr} + ldr ip, _0200FC20 ; =BAG_ITEMS_PTR_MIRROR + mov r3, #6 + ldr lr, [ip] + smulbb ip, r0, r3 + ldr lr, [lr, #0x384] + and r0, r2, #0xff + ldrb r3, [lr, ip] + add r4, lr, ip + bic r3, r3, #0x10 + strb r3, [lr, ip] + strb r2, [r1, #1] + strb r0, [r4, #1] + ldrb r0, [r1] + strb r0, [lr, ip] + ldmia sp!, {r4, pc} + .align 2, 0 +_0200FC20: .word BAG_ITEMS_PTR_MIRROR + arm_func_end SetHolderForItemInBag + + arm_func_start SortItemsInBag +SortItemsInBag: ; 0x0200FC24 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov r4, #0 + ldr r7, _0200FCA8 ; =BAG_ITEMS_PTR_MIRROR + mov r8, r4 + mov sb, #1 + mov r6, #6 +_0200FC3C: + mul r1, r4, r6 + ldr r0, [r7] + ldr r2, [r0, #0x384] + ldrb r0, [r2, r1] + add r5, r2, r1 + tst r0, #1 + movne r0, sb + moveq r0, r8 + tst r0, #0xff + beq _0200FC84 + ldrsh r0, [r5, #4] + cmp r0, #0xb7 + bne _0200FC84 + mov r0, r5 + bl sub_0200D8AC + bl AddMoneyCarried + mov r0, r5 + bl ItemZInit +_0200FC84: + add r4, r4, #1 + cmp r4, #0x32 + blt _0200FC3C + ldr r0, _0200FCA8 ; =BAG_ITEMS_PTR_MIRROR + mov r1, #0x32 + ldr r0, [r0] + ldr r0, [r0, #0x384] + bl SortItemList + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0200FCA8: .word BAG_ITEMS_PTR_MIRROR + arm_func_end SortItemsInBag + + arm_func_start RemovePokeItemsInBag +RemovePokeItemsInBag: ; 0x0200FCAC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r0, _0200FD34 ; =BAG_ITEMS_PTR_MIRROR + mov r5, #0 + ldr r0, [r0] + mov r6, r5 + ldr r4, [r0, #0x384] + mov r7, #1 +_0200FCC8: + ldrb r0, [r4] + tst r0, #1 + movne r0, r7 + moveq r0, r6 + tst r0, #0xff + beq _0200FD0C + ldrsh r0, [r4, #4] + cmp r0, #0xb7 + bne _0200FD0C + ldrb r1, [r4] + mov r0, r4 + bic r1, r1, #8 + strb r1, [r4] + bl sub_0200D8AC + bl AddMoneyCarried + mov r0, r4 + bl ItemZInit +_0200FD0C: + add r5, r5, #1 + cmp r5, #0x32 + add r4, r4, #6 + blt _0200FCC8 + ldr r0, _0200FD34 ; =BAG_ITEMS_PTR_MIRROR + mov r1, #0x32 + ldr r0, [r0] + ldr r0, [r0, #0x384] + bl RemoveEmptyItems + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0200FD34: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemovePokeItemsInBag + + arm_func_start sub_0200FD38 +sub_0200FD38: ; 0x0200FD38 + bx lr + arm_func_end sub_0200FD38 + + arm_func_start sub_0200FD3C +sub_0200FD3C: ; 0x0200FD3C + ldr ip, _0200FD44 ; =StorageZInit + bx ip + .align 2, 0 +_0200FD44: .word StorageZInit + arm_func_end sub_0200FD3C + + arm_func_start sub_0200FD48 +sub_0200FD48: ; 0x0200FD48 + ldr ip, _0200FD50 ; =GetRankStorageSize + bx ip + .align 2, 0 +_0200FD50: .word GetRankStorageSize + arm_func_end sub_0200FD48 + + arm_func_start IsStorageFull +IsStorageFull: ; 0x0200FD54 + stmdb sp!, {r4, lr} + bl GetRankStorageSize + mov r4, r0 + bl CountNbOfItemsInStorage + cmp r0, r4 + movge r0, #1 + movlt r0, #0 + and r0, r0, #0xff + ldmia sp!, {r4, pc} + arm_func_end IsStorageFull + + arm_func_start CountNbOfItemsInStorage +CountNbOfItemsInStorage: ; 0x0200FD78 + ldr r1, _0200FDAC ; =BAG_ITEMS_PTR_MIRROR + mov r0, #0 + ldr r3, [r1] + mov r2, r0 +_0200FD88: + add r1, r3, r2, lsl #1 + add r1, r1, #0x300 + ldrsh r1, [r1, #0x8a] + add r2, r2, #1 + cmp r1, #0 + addne r0, r0, #1 + cmp r2, #0x3e8 + blt _0200FD88 + bx lr + .align 2, 0 +_0200FDAC: .word BAG_ITEMS_PTR_MIRROR + arm_func_end CountNbOfItemsInStorage + + arm_func_start CountNbOfValidItemsInStorage +CountNbOfValidItemsInStorage: ; 0x0200FDB0 + stmdb sp!, {r4, r5, r6, lr} + mov r5, #0 + ldr r4, _0200FDFC ; =BAG_ITEMS_PTR_MIRROR + mov r6, r5 +_0200FDC0: + ldr r0, [r4] + add r0, r0, r6, lsl #1 + add r0, r0, #0x300 + ldrsh r1, [r0, #0x8a] + cmp r1, #0 + beq _0200FDE8 + ldrsh r0, [r0, #0x8a] + bl IsItemValidVeneer + cmp r0, #0 + addne r5, r5, #1 +_0200FDE8: + add r6, r6, #1 + cmp r6, #0x3e8 + blt _0200FDC0 + mov r0, r5 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0200FDFC: .word BAG_ITEMS_PTR_MIRROR + arm_func_end CountNbOfValidItemsInStorage + + arm_func_start CountNbOfValidItemsInTimeDarknessInStorage +CountNbOfValidItemsInTimeDarknessInStorage: ; 0x0200FE00 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r4, #0 + ldr r6, _0200FEA4 ; =BAG_ITEMS_PTR_MIRROR + mov r5, r4 +_0200FE10: + ldr r0, [r6] + add r0, r0, r5, lsl #1 + add r0, r0, #0x300 + ldrsh r7, [r0, #0x8a] + cmp r7, #0 + beq _0200FE90 + mov r0, r7 + bl IsItemValidVeneer + cmp r0, #0 + beq _0200FE90 + mov r0, r7 + bl IsItemInTimeDarkness + cmp r0, #0 + beq _0200FE90 + mov r0, r7 + bl IsTreasureBox + cmp r0, #0 + beq _0200FE8C + ldr r0, [r6] + add r0, r0, r5, lsl #1 + add r0, r0, #0xb00 + ldrsh r7, [r0, #0x5a] + mov r0, r7 + bl IsItemValidVeneer + cmp r0, #0 + beq _0200FE90 + mov r0, r7 + bl IsItemInTimeDarkness + cmp r0, #0 + addne r4, r4, #1 + b _0200FE90 +_0200FE8C: + add r4, r4, #1 +_0200FE90: + add r5, r5, #1 + cmp r5, #0x3e8 + blt _0200FE10 + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0200FEA4: .word BAG_ITEMS_PTR_MIRROR + arm_func_end CountNbOfValidItemsInTimeDarknessInStorage + + arm_func_start CountNbItemsOfTypeInStorage +CountNbItemsOfTypeInStorage: ; 0x0200FEA8 + ldr r1, _0200FEE0 ; =BAG_ITEMS_PTR_MIRROR + mov r2, #0 + ldr ip, [r1] + mov r3, r2 +_0200FEB8: + add r1, ip, r3, lsl #1 + add r1, r1, #0x300 + ldrsh r1, [r1, #0x8a] + add r3, r3, #1 + cmp r0, r1 + addeq r2, r2, #1 + cmp r3, #0x3e8 + blt _0200FEB8 + mov r0, r2 + bx lr + .align 2, 0 +_0200FEE0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end CountNbItemsOfTypeInStorage + + arm_func_start CountItemTypeInStorage +CountItemTypeInStorage: ; 0x0200FEE4 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r4, #0 + ldr r7, _0200FF4C ; =BAG_ITEMS_PTR_MIRROR + mov r6, r0 + mov r5, r4 +_0200FEF8: + ldr r1, [r7] + ldrsh r0, [r6] + add r1, r1, r5, lsl #1 + add r1, r1, #0x300 + ldrsh r1, [r1, #0x8a] + cmp r0, r1 + bne _0200FF38 + bl IsThrownItem + cmp r0, #0 + addeq r4, r4, #1 + beq _0200FF38 + ldr r0, [r7] + add r0, r0, r5, lsl #1 + add r0, r0, #0xb00 + ldrh r0, [r0, #0x5a] + add r4, r4, r0 +_0200FF38: + add r5, r5, #1 + cmp r5, #0x3e8 + blt _0200FEF8 + mov r0, r4 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0200FF4C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end CountItemTypeInStorage + + arm_func_start GetEquivBulkItemIdxInStorage +GetEquivBulkItemIdxInStorage: ; 0x0200FF50 + stmdb sp!, {r3, lr} + ldr r1, _0200FFA8 ; =BAG_ITEMS_PTR_MIRROR + mov ip, #0 + ldr lr, [r1] + b _0200FF98 +_0200FF64: + add r2, lr, ip, lsl #1 + add r1, r2, #0x300 + ldrsh r3, [r0] + ldrsh r1, [r1, #0x8a] + cmp r3, r1 + addeq r1, r2, #0xb00 + ldreqh r2, [r0, #2] + ldreqh r1, [r1, #0x5a] + cmpeq r2, r1 + moveq r0, ip, lsl #0x10 + moveq r0, r0, asr #0x10 + ldmeqia sp!, {r3, pc} + add ip, ip, #1 +_0200FF98: + cmp ip, #0x3e8 + blt _0200FF64 + mvn r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0200FFA8: .word BAG_ITEMS_PTR_MIRROR + arm_func_end GetEquivBulkItemIdxInStorage + + arm_func_start ConvertStorageItemAtIdxToBulkItem +ConvertStorageItemAtIdxToBulkItem: ; 0x0200FFAC + ldr r3, _0200FFF0 ; =BAG_ITEMS_PTR_MIRROR + ldr r2, [r3] + add r2, r2, r0, lsl #1 + add r2, r2, #0x300 + ldrsh r2, [r2, #0x8a] + strh r2, [r1] + ldr r2, [r3] + add r0, r2, r0, lsl #1 + add r0, r0, #0xb00 + ldrh r0, [r0, #0x5a] + strh r0, [r1, #2] + ldrsh r0, [r1] + cmp r0, #0 + movne r0, #1 + moveq r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0200FFF0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end ConvertStorageItemAtIdxToBulkItem + + arm_func_start ConvertStorageItemAtIdxToItem +ConvertStorageItemAtIdxToItem: ; 0x0200FFF4 + ldr r3, _02010040 ; =BAG_ITEMS_PTR_MIRROR + mov ip, #0 + ldr r2, [r3] + add r2, r2, r0, lsl #1 + add r2, r2, #0x300 + ldrsh r2, [r2, #0x8a] + strh r2, [r1, #4] + ldr r2, [r3] + add r0, r2, r0, lsl #1 + add r0, r0, #0xb00 + ldrh r0, [r0, #0x5a] + strh r0, [r1, #2] + strb ip, [r1] + strb ip, [r1, #1] + ldrsh r0, [r1, #4] + cmp r0, #0 + movne ip, #1 + and r0, ip, #0xff + bx lr + .align 2, 0 +_02010040: .word BAG_ITEMS_PTR_MIRROR + arm_func_end ConvertStorageItemAtIdxToItem + + arm_func_start sub_02010044 +sub_02010044: ; 0x02010044 + ldr r1, _0201005C ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r1] + add r0, r1, r0, lsl #1 + add r0, r0, #0x300 + ldrsh r0, [r0, #0x8a] + bx lr + .align 2, 0 +_0201005C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02010044 + + arm_func_start sub_02010060 +sub_02010060: ; 0x02010060 + ldr r1, _02010078 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r1] + add r0, r1, r0, lsl #1 + add r0, r0, #0xb00 + ldrh r0, [r0, #0x5a] + bx lr + .align 2, 0 +_02010078: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02010060 + + arm_func_start sub_0201007C +sub_0201007C: ; 0x0201007C + stmdb sp!, {r3, lr} + ldr r1, _02010150 ; =BAG_ITEMS_PTR_MIRROR + mov r0, #0 + ldr r2, [r1] + b _02010144 +_02010090: + add r1, r2, r0, lsl #1 + add r1, r1, #0x300 + ldrsh r1, [r1, #0x8a] + cmp r1, #0 + bne _02010140 + mov r1, r0 + add r0, r0, #1 + ldr r3, _02010150 ; =BAG_ITEMS_PTR_MIRROR + b _020100FC +_020100B4: + ldr lr, [r3] + add r2, lr, r0, lsl #1 + add r2, r2, #0x300 + ldrsh ip, [r2, #0x8a] + cmp ip, #0 + beq _020100F8 + add r2, lr, r1, lsl #1 + add r2, r2, #0x300 + strh ip, [r2, #0x8a] + ldr lr, [r3] + add r2, lr, r0, lsl #1 + add r2, r2, #0xb00 + ldrh ip, [r2, #0x5a] + add r2, lr, r1, lsl #1 + add r2, r2, #0xb00 + strh ip, [r2, #0x5a] + add r1, r1, #1 +_020100F8: + add r0, r0, #1 +_020100FC: + cmp r0, #0x3e8 + blt _020100B4 + mov r3, #0 + ldr r2, _02010150 ; =BAG_ITEMS_PTR_MIRROR + b _02010134 +_02010110: + ldr r0, [r2] + add r0, r0, r1, lsl #1 + add r0, r0, #0x300 + strh r3, [r0, #0x8a] + ldr r0, [r2] + add r0, r0, r1, lsl #1 + add r0, r0, #0xb00 + strh r3, [r0, #0x5a] + add r1, r1, #1 +_02010134: + cmp r1, #0x3e8 + blt _02010110 + ldmia sp!, {r3, pc} +_02010140: + add r0, r0, #1 +_02010144: + cmp r0, #0x3e8 + blt _02010090 + ldmia sp!, {r3, pc} + .align 2, 0 +_02010150: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_0201007C + + arm_func_start sub_02010154 +sub_02010154: ; 0x02010154 + stmdb sp!, {r3, lr} + ldr r2, _0201019C ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r2] + add r1, r1, r0, lsl #1 + add r1, r1, #0x300 + ldrsh r3, [r1, #0x8a] + cmp r3, #0 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + mov r3, #0 + strh r3, [r1, #0x8a] + ldr r1, [r2] + add r0, r1, r0, lsl #1 + add r0, r0, #0xb00 + strh r3, [r0, #0x5a] + bl sub_0201007C + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0201019C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02010154 + + arm_func_start RemoveItemAtIdxInStorage +RemoveItemAtIdxInStorage: ; 0x020101A0 + ldr r2, _020101E0 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r2] + add r1, r1, r0, lsl #1 + add r1, r1, #0x300 + ldrsh r3, [r1, #0x8a] + cmp r3, #0 + moveq r0, #0 + bxeq lr + mov r3, #0 + strh r3, [r1, #0x8a] + ldr r1, [r2] + add r0, r1, r0, lsl #1 + add r0, r0, #0xb00 + strh r3, [r0, #0x5a] + mov r0, #1 + bx lr + .align 2, 0 +_020101E0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveItemAtIdxInStorage + + arm_func_start RemoveBulkItemInStorage +RemoveBulkItemInStorage: ; 0x020101E4 + stmdb sp!, {r4, lr} + ldr r1, _0201025C ; =BAG_ITEMS_PTR_MIRROR + mov lr, #0 + ldr r4, [r1] + b _0201024C +_020101F8: + add r3, r4, lr, lsl #1 + add r2, r3, #0x300 + ldrsh ip, [r0] + ldrsh r1, [r2, #0x8a] + cmp ip, r1 + addeq r1, r3, #0xb00 + ldreqh r3, [r0, #2] + ldreqh r1, [r1, #0x5a] + cmpeq r3, r1 + bne _02010248 + mov r1, #0 + ldr r0, _0201025C ; =BAG_ITEMS_PTR_MIRROR + strh r1, [r2, #0x8a] + ldr r0, [r0] + add r0, r0, lr, lsl #1 + add r0, r0, #0xb00 + strh r1, [r0, #0x5a] + bl sub_0201007C + mov r0, #1 + ldmia sp!, {r4, pc} +_02010248: + add lr, lr, #1 +_0201024C: + cmp lr, #0x3e8 + blt _020101F8 + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0201025C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveBulkItemInStorage + + arm_func_start RemoveItemInStorage +RemoveItemInStorage: ; 0x02010260 + stmdb sp!, {r4, lr} + ldr r1, _020102D8 ; =BAG_ITEMS_PTR_MIRROR + mov lr, #0 + ldr r4, [r1] + b _020102C8 +_02010274: + add r3, r4, lr, lsl #1 + add r2, r3, #0x300 + ldrsh ip, [r0, #4] + ldrsh r1, [r2, #0x8a] + cmp ip, r1 + addeq r1, r3, #0xb00 + ldreqh r3, [r0, #2] + ldreqh r1, [r1, #0x5a] + cmpeq r3, r1 + bne _020102C4 + mov r1, #0 + ldr r0, _020102D8 ; =BAG_ITEMS_PTR_MIRROR + strh r1, [r2, #0x8a] + ldr r0, [r0] + add r0, r0, lr, lsl #1 + add r0, r0, #0xb00 + strh r1, [r0, #0x5a] + bl sub_0201007C + mov r0, #1 + ldmia sp!, {r4, pc} +_020102C4: + add lr, lr, #1 +_020102C8: + cmp lr, #0x3e8 + blt _02010274 + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_020102D8: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveItemInStorage + + arm_func_start StorageZInit +StorageZInit: ; 0x020102DC + mov r3, #0 + ldr r1, _02010318 ; =BAG_ITEMS_PTR_MIRROR + mov r2, r3 +_020102E8: + ldr r0, [r1] + add r0, r0, r3, lsl #1 + add r0, r0, #0x300 + strh r2, [r0, #0x8a] + ldr r0, [r1] + add r0, r0, r3, lsl #1 + add r0, r0, #0xb00 + add r3, r3, #1 + strh r2, [r0, #0x5a] + cmp r3, #0x3e8 + blt _020102E8 + bx lr + .align 2, 0 +_02010318: .word BAG_ITEMS_PTR_MIRROR + arm_func_end StorageZInit + + arm_func_start AddBulkItemToStorage +AddBulkItemToStorage: ; 0x0201031C + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #8 + mov r4, r0 + bl GetRankStorageSize + mov r5, r0 + add r0, sp, #0 + mov r1, r4 + bl BulkItemToItem + ldr r0, _020103A8 ; =BAG_ITEMS_PTR_MIRROR + mov ip, #0 + ldr r2, [r0] + b _02010394 +_0201034C: + add r0, r2, ip, lsl #1 + add r1, r0, #0x300 + ldrsh r0, [r1, #0x8a] + cmp r0, #0 + bne _02010390 + ldrsh r3, [r4] + ldr r2, _020103A8 ; =BAG_ITEMS_PTR_MIRROR + add r0, sp, #0 + strh r3, [r1, #0x8a] + ldr r1, [r2] + ldrh r2, [r4, #2] + add r1, r1, ip, lsl #1 + add r1, r1, #0xb00 + strh r2, [r1, #0x5a] + bl SetItemAcquired + mov r0, #1 + b _020103A0 +_02010390: + add ip, ip, #1 +_02010394: + cmp ip, r5 + blt _0201034C + mov r0, #0 +_020103A0: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020103A8: .word BAG_ITEMS_PTR_MIRROR + arm_func_end AddBulkItemToStorage + + arm_func_start AddItemToStorage +AddItemToStorage: ; 0x020103AC + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetRankStorageSize + ldr r1, _02010420 ; =BAG_ITEMS_PTR_MIRROR + mov ip, #0 + ldr r3, [r1] + b _02010410 +_020103C8: + add r1, r3, ip, lsl #1 + add r1, r1, #0x300 + ldrsh r2, [r1, #0x8a] + cmp r2, #0 + bne _0201040C + ldrsh r3, [r4, #4] + ldr r2, _02010420 ; =BAG_ITEMS_PTR_MIRROR + mov r0, r4 + strh r3, [r1, #0x8a] + ldr r1, [r2] + ldrh r2, [r4, #2] + add r1, r1, ip, lsl #1 + add r1, r1, #0xb00 + strh r2, [r1, #0x5a] + bl SetItemAcquired + mov r0, #1 + ldmia sp!, {r4, pc} +_0201040C: + add ip, ip, #1 +_02010410: + cmp ip, r0 + blt _020103C8 + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_02010420: .word BAG_ITEMS_PTR_MIRROR + arm_func_end AddItemToStorage + + arm_func_start SortItemsInStorage +SortItemsInStorage: ; 0x02010424 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov sb, r1 + mov r1, #6 + mov sl, r0 + mul r0, sb, r1 + mov r1, #0 + bl MemAlloc + mov r5, #6 + mov r7, r0 + mov r8, #0 + mov fp, #0x80 + ldr r6, _0201058C ; =BAG_ITEMS_PTR_MIRROR + mov r4, r5 + b _020104C8 +_0201045C: + ldr r0, [r6] + add r0, r0, r8, lsl #1 + add r0, r0, #0x300 + ldrsh r0, [r0, #0x8a] + cmp r0, #0 + beq _020104D0 + mla r0, r8, r5, r7 + bl ItemZInit + ldrb r0, [sl, r8] + mul r2, r8, r4 + cmp r0, #0 + movne r0, fp + moveq r0, #0 + orr r0, r0, #1 + strb r0, [r7, r2] + ldr r1, [r6] + add r0, r7, r2 + add r1, r1, r8, lsl #1 + add r1, r1, #0x300 + ldrsh r1, [r1, #0x8a] + strh r1, [r0, #4] + ldr r1, [r6] + add r1, r1, r8, lsl #1 + add r1, r1, #0xb00 + ldrh r1, [r1, #0x5a] + add r8, r8, #1 + strh r1, [r0, #2] +_020104C8: + cmp r8, sb + blt _0201045C +_020104D0: + mov r0, r7 + mov r1, r8 + bl SortItemList + mov r6, #0 + mov r1, r6 + mov r2, #1 + mov fp, #6 + ldr r0, _0201058C ; =BAG_ITEMS_PTR_MIRROR + b _0201053C +_020104F4: + mul r4, r6, fp + add r5, r7, r4 + ldr ip, [r0] + ldrsh r3, [r5, #4] + add ip, ip, r6, lsl #1 + add ip, ip, #0x300 + strh r3, [ip, #0x8a] + ldr ip, [r0] + ldrh r3, [r5, #2] + add r5, ip, r6, lsl #1 + add r5, r5, #0xb00 + strh r3, [r5, #0x5a] + ldrb r3, [r7, r4] + tst r3, #0x80 + movne r3, r2 + moveq r3, r1 + strb r3, [sl, r6] + add r6, r6, #1 +_0201053C: + cmp r6, r8 + blt _020104F4 + mov r2, #0 + ldr r1, _0201058C ; =BAG_ITEMS_PTR_MIRROR + b _02010578 +_02010550: + ldr r0, [r1] + add r0, r0, r6, lsl #1 + add r0, r0, #0x300 + strh r2, [r0, #0x8a] + ldr r0, [r1] + add r0, r0, r6, lsl #1 + add r0, r0, #0xb00 + strh r2, [r0, #0x5a] + strb r2, [sl, r6] + add r6, r6, #1 +_02010578: + cmp r6, sb + blt _02010550 + mov r0, r7 + bl MemFree + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0201058C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end SortItemsInStorage + + arm_func_start sub_02010590 +sub_02010590: ; 0x02010590 + bx lr + arm_func_end sub_02010590 + + arm_func_start AllKecleonShopsZInit +AllKecleonShopsZInit: ; 0x02010594 + stmdb sp!, {r4, r5, r6, lr} + mov r2, #0 + ldr ip, _02010650 ; =BAG_ITEMS_PTR_MIRROR + mov r5, r2 + mov r0, r2 + mov r1, r2 +_020105AC: + mov r6, r1 +_020105B0: + ldr r3, [ip] + mov r4, r6, lsl #2 + add r3, r3, #0x330 + add r3, r3, #0x1000 + add r3, r3, r2, lsl #5 + add lr, r3, r6, lsl #2 + strh r5, [r3, r4] + add r6, r6, #1 + strh r5, [lr, #2] + cmp r6, #8 + blt _020105B0 + mov r6, r5 +_020105E0: + ldr r3, [ip] + mov lr, r6, lsl #2 + add r3, r3, #0x374 + add r3, r3, #0x1000 + add r3, r3, r2, lsl #4 + add r4, r3, r6, lsl #2 + strh r0, [r3, lr] + add r6, r6, #1 + strh r0, [r4, #2] + cmp r6, #4 + blt _020105E0 + add r2, r2, #1 + cmp r2, #2 + blt _020105AC + ldr r2, _02010650 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r2] + add r1, r1, #0x1000 + str r0, [r1, #0x3a0] + ldr r1, [r2] + add r1, r1, #0x1300 + strh r0, [r1, #0xa4] + ldr r1, [r2] + add r1, r1, #0x1300 + strh r0, [r1, #0xa6] + ldr r1, [r2] + add r1, r1, #0x1300 + strh r0, [r1, #0xa8] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_02010650: .word BAG_ITEMS_PTR_MIRROR + arm_func_end AllKecleonShopsZInit + + arm_func_start SpecialEpisodeKecleonShopZInit +SpecialEpisodeKecleonShopZInit: ; 0x02010654 + stmdb sp!, {r3, lr} + mov lr, #0 + ldr r2, _020106C0 ; =BAG_ITEMS_PTR_MIRROR + mov r0, lr +_02010664: + ldr r1, [r2] + mov r3, lr, lsl #2 + add r1, r1, #0x350 + add r1, r1, #0x1000 + add ip, r1, lr, lsl #2 + strh r0, [r1, r3] + add lr, lr, #1 + strh r0, [ip, #2] + cmp lr, #8 + blt _02010664 + ldr r2, _020106C0 ; =BAG_ITEMS_PTR_MIRROR + mov r3, #0 +_02010694: + ldr r1, [r2] + mov ip, r0, lsl #2 + add r1, r1, #0x384 + add r1, r1, #0x1000 + add lr, r1, r0, lsl #2 + strh r3, [r1, ip] + add r0, r0, #1 + strh r3, [lr, #2] + cmp r0, #4 + blt _02010694 + ldmia sp!, {r3, pc} + .align 2, 0 +_020106C0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end SpecialEpisodeKecleonShopZInit + + arm_func_start SetActiveKecleonShop +SetActiveKecleonShop: ; 0x020106C4 + ldr r2, _02010708 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r2] + add r1, r1, #0x1000 + strb r0, [r1, #0x32a] + ldr ip, [r2] + add r1, ip, #0x330 + add r1, r1, #0x1000 + add r3, r1, r0, lsl #5 + add r1, ip, #0x1000 + str r3, [r1, #0x32c] + ldr r2, [r2] + add r1, r2, #0x374 + add r1, r1, #0x1000 + add r1, r1, r0, lsl #4 + add r0, r2, #0x1000 + str r1, [r0, #0x370] + bx lr + .align 2, 0 +_02010708: .word BAG_ITEMS_PTR_MIRROR + arm_func_end SetActiveKecleonShop + + arm_func_start GetMoneyStored +GetMoneyStored: ; 0x0201070C + ldr r0, _02010720 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + add r0, r0, #0x1000 + ldr r0, [r0, #0x3a0] + bx lr + .align 2, 0 +_02010720: .word BAG_ITEMS_PTR_MIRROR + arm_func_end GetMoneyStored + + arm_func_start SetMoneyStored +SetMoneyStored: ; 0x02010724 + ldr r1, _02010750 ; =0x0098967F + cmp r0, r1 + movgt r0, r1 + bgt _0201073C + cmp r0, #0 + movlt r0, #0 +_0201073C: + ldr r1, _02010754 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r1] + add r1, r1, #0x1000 + str r0, [r1, #0x3a0] + bx lr + .align 2, 0 +_02010750: .word 0x0098967F +_02010754: .word BAG_ITEMS_PTR_MIRROR + arm_func_end SetMoneyStored + + arm_func_start AddMoneyStored +AddMoneyStored: ; 0x02010758 + ldr r1, _02010774 ; =BAG_ITEMS_PTR_MIRROR + ldr ip, _02010778 ; =SetMoneyStored + ldr r1, [r1] + add r1, r1, #0x1000 + ldr r1, [r1, #0x3a0] + add r0, r1, r0 + bx ip + .align 2, 0 +_02010774: .word BAG_ITEMS_PTR_MIRROR +_02010778: .word SetMoneyStored + arm_func_end AddMoneyStored + + arm_func_start sub_0201077C +sub_0201077C: ; 0x0201077C + ldr r0, _02010790 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + add r0, r0, #0x1300 + ldrsh r0, [r0, #0xa4] + bx lr + .align 2, 0 +_02010790: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_0201077C + + arm_func_start sub_02010794 +sub_02010794: ; 0x02010794 + ldr r1, _020107A8 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r1] + add r1, r1, #0x1300 + strh r0, [r1, #0xa4] + bx lr + .align 2, 0 +_020107A8: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02010794 + + arm_func_start sub_020107AC +sub_020107AC: ; 0x020107AC + ldr r0, _020107C0 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + add r0, r0, #0x1300 + ldrh r0, [r0, #0xa6] + bx lr + .align 2, 0 +_020107C0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_020107AC + + arm_func_start sub_020107C4 +sub_020107C4: ; 0x020107C4 + ldr r1, _020107D8 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r1] + add r1, r1, #0x1300 + strh r0, [r1, #0xa6] + bx lr + .align 2, 0 +_020107D8: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_020107C4 + + arm_func_start sub_020107DC +sub_020107DC: ; 0x020107DC + ldr r0, _020107F0 ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + add r0, r0, #0x1300 + ldrh r0, [r0, #0xa8] + bx lr + .align 2, 0 +_020107F0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_020107DC + + arm_func_start sub_020107F4 +sub_020107F4: ; 0x020107F4 + ldr r1, _02010808 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r1] + add r1, r1, #0x1300 + strh r0, [r1, #0xa8] + bx lr + .align 2, 0 +_02010808: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_020107F4 + + arm_func_start sub_0201080C +sub_0201080C: ; 0x0201080C + ldr r0, _0201082C ; =BAG_ITEMS_PTR_MIRROR + ldr r0, [r0] + add r0, r0, #0x1300 + ldrh r1, [r0, #0xa8] + cmp r1, #0 + subne r1, r1, #1 + strneh r1, [r0, #0xa8] + bx lr + .align 2, 0 +_0201082C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_0201080C + + arm_func_start sub_02010830 +sub_02010830: ; 0x02010830 + ldr r1, _02010868 ; =BAG_ITEMS_PTR_MIRROR + mov r0, #0 + ldr r1, [r1] + mov r2, r0 + add r1, r1, #0x1000 + ldr r3, [r1, #0x32c] +_02010848: + mov r1, r2, lsl #2 + ldrsh r1, [r3, r1] + add r2, r2, #1 + cmp r1, #0 + addne r0, r0, #1 + cmp r2, #8 + blt _02010848 + bx lr + .align 2, 0 +_02010868: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02010830 + + arm_func_start RemoveItemFromKecleonShop1 +RemoveItemFromKecleonShop1: ; 0x0201086C + ldr r1, _02010894 ; =BAG_ITEMS_PTR_MIRROR + mov r3, r0, lsl #2 + ldr r1, [r1] + mov r2, #0 + add r1, r1, #0x1000 + ldr r1, [r1, #0x32c] + strh r2, [r1, r3] + add r0, r1, r0, lsl #2 + strh r2, [r0, #2] + bx lr + .align 2, 0 +_02010894: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveItemFromKecleonShop1 + + arm_func_start sub_02010898 +sub_02010898: ; 0x02010898 + ldr r1, _020108B0 ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r1] + add r1, r1, #0x1000 + ldr r1, [r1, #0x32c] + add r0, r1, r0, lsl #2 + bx lr + .align 2, 0 +_020108B0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02010898 + + arm_func_start sub_020108B4 +sub_020108B4: ; 0x020108B4 + stmdb sp!, {r3, r4, r5, lr} + mov r0, #0 + mov r4, r0 + ldr r2, _02010950 ; =BAG_ITEMS_PTR_MIRROR + b _020108E8 +_020108C8: + ldr r1, [r2] + mov r3, r0, lsl #2 + add r1, r1, #0x1000 + ldr r1, [r1, #0x32c] + ldrsh r1, [r1, r3] + cmp r1, #0 + bne _020108F0 + add r0, r0, #1 +_020108E8: + cmp r0, #8 + blt _020108C8 +_020108F0: + cmp r0, #8 + beq _02010944 + cmp r0, r4 + ble _0201092C + ldr r1, [r2] + mov r3, r0, lsl #2 + add r1, r1, #0x1000 + ldr r5, [r1, #0x32c] + mov lr, r4, lsl #2 + ldrh r1, [r5, r3] + add ip, r5, r0, lsl #2 + add r3, r5, r4, lsl #2 + strh r1, [r5, lr] + ldrh r1, [ip, #2] + strh r1, [r3, #2] +_0201092C: + add r0, r0, #1 + add r4, r4, #1 + b _020108E8 +_02010938: + and r0, r4, #0xff + bl RemoveItemFromKecleonShop1 + add r4, r4, #1 +_02010944: + cmp r4, #8 + blt _02010938 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02010950: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_020108B4 + + arm_func_start SortKecleonItems1 +SortKecleonItems1: ; 0x02010954 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r6, #0 +_02010960: + add r7, r6, #1 + mov r5, r6, lsl #2 + ldr r4, _02010A48 ; =BAG_ITEMS_PTR_MIRROR + b _02010A2C +_02010970: + ldr r0, [r4] + add r0, r0, #0x1000 + ldr r0, [r0, #0x32c] + ldrsh r0, [r5, r0] + bl sub_0200D1F0 + ldr r1, [r4] + mov r2, r7, lsl #2 + add r1, r1, #0x1000 + ldr r1, [r1, #0x32c] + mov r8, r0 + ldrsh r0, [r1, r2] + bl sub_0200D1F0 + cmp r8, r0 + bgt _020109D0 + bne _02010A28 + ldr r0, [r4] + add r0, r0, #0x1000 + ldr r0, [r0, #0x32c] + add r1, r5, r0 + add r0, r0, r7, lsl #2 + ldrh r1, [r1, #2] + ldrh r0, [r0, #2] + cmp r1, r0 + bhs _02010A28 +_020109D0: + ldr r1, [r4] + mov r0, r7, lsl #2 + add r1, r1, #0x1000 + ldr r8, [r1, #0x32c] + add lr, r5, r8 + ldrh ip, [r5, r8] + ldrh r3, [lr, #2] + ldrh r1, [r8, r0] + add r2, r8, r7, lsl #2 + strh ip, [sp] + strh r1, [r5, r8] + ldrh r1, [r2, #2] + strh r3, [sp, #2] + ldrh r3, [sp] + strh r1, [lr, #2] + ldr r1, [r4] + ldrh r2, [sp, #2] + add r1, r1, #0x1000 + ldr r1, [r1, #0x32c] + strh r3, [r1, r0] + add r0, r1, r7, lsl #2 + strh r2, [r0, #2] +_02010A28: + add r7, r7, #1 +_02010A2C: + cmp r7, #8 + blt _02010970 + add r6, r6, #1 + cmp r6, #7 + blt _02010960 + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02010A48: .word BAG_ITEMS_PTR_MIRROR + arm_func_end SortKecleonItems1 + + arm_func_start GenerateKecleonItems1 +GenerateKecleonItems1: ; 0x02010A4C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + mov r8, r0 + mov r4, #0 +_02010A58: + and r0, r4, #0xff + bl RemoveItemFromKecleonShop1 + add r4, r4, #1 + cmp r4, #8 + blt _02010A58 + ldr r0, _02010AC0 ; =KECLEON_SHOP_ITEM_TABLE_LISTS_1 + ldr r5, _02010AC4 ; =0x0000270F + ldr r6, [r0, r8, lsl #2] + mov r7, #0 +_02010A7C: + mov r0, r5 + bl RandIntSafe + mov r4, r0 + mov r0, r5 + bl RandIntSafe + mov r2, r0 + mov r0, r6 + mov r1, r4 + bl GetItemIdFromList + bl AddItemToKecleonShop1 + add r7, r7, #1 + cmp r7, #8 + blt _02010A7C + bl SortKecleonItems1 + mov r0, r8 + bl GenerateKecleonItems2 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02010AC0: .word KECLEON_SHOP_ITEM_TABLE_LISTS_1 +_02010AC4: .word 0x0000270F + arm_func_end GenerateKecleonItems1 + + arm_func_start AddItemToKecleonShop1 +AddItemToKecleonShop1: ; 0x02010AC8 + stmdb sp!, {r3, lr} + mov r1, r0 + add r0, sp, #0 + bl InitBulkItem + ldr r0, _02010B38 ; =BAG_ITEMS_PTR_MIRROR + mov r2, #0 + ldr r3, [r0] + add r0, r3, #0x1000 + b _02010B28 +_02010AEC: + ldr r1, [r0, #0x32c] + mov ip, r2, lsl #2 + ldrsh r1, [r1, ip] + cmp r1, #0 + bne _02010B24 + add r0, r3, #0x1000 + ldr r3, [r0, #0x32c] + ldrh r1, [sp] + add r2, r3, ip + mov r0, #0 + strh r1, [r3, ip] + ldrh r1, [sp, #2] + strh r1, [r2, #2] + ldmia sp!, {r3, pc} +_02010B24: + add r2, r2, #1 +_02010B28: + cmp r2, #8 + blt _02010AEC + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_02010B38: .word BAG_ITEMS_PTR_MIRROR + arm_func_end AddItemToKecleonShop1 + + arm_func_start sub_02010B3C +sub_02010B3C: ; 0x02010B3C + ldr r1, _02010B74 ; =BAG_ITEMS_PTR_MIRROR + mov r0, #0 + ldr r1, [r1] + mov r2, r0 + add r1, r1, #0x1000 + ldr r3, [r1, #0x370] +_02010B54: + mov r1, r2, lsl #2 + ldrsh r1, [r3, r1] + add r2, r2, #1 + cmp r1, #0 + addne r0, r0, #1 + cmp r2, #4 + blt _02010B54 + bx lr + .align 2, 0 +_02010B74: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02010B3C + + arm_func_start RemoveItemFromKecleonShop2 +RemoveItemFromKecleonShop2: ; 0x02010B78 + ldr r1, _02010BA0 ; =BAG_ITEMS_PTR_MIRROR + mov r3, r0, lsl #2 + ldr r1, [r1] + mov r2, #0 + add r1, r1, #0x1000 + ldr r1, [r1, #0x370] + strh r2, [r1, r3] + add r0, r1, r0, lsl #2 + strh r2, [r0, #2] + bx lr + .align 2, 0 +_02010BA0: .word BAG_ITEMS_PTR_MIRROR + arm_func_end RemoveItemFromKecleonShop2 + + arm_func_start sub_02010BA4 +sub_02010BA4: ; 0x02010BA4 + ldr r1, _02010BBC ; =BAG_ITEMS_PTR_MIRROR + ldr r1, [r1] + add r1, r1, #0x1000 + ldr r1, [r1, #0x370] + add r0, r1, r0, lsl #2 + bx lr + .align 2, 0 +_02010BBC: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02010BA4 + + arm_func_start sub_02010BC0 +sub_02010BC0: ; 0x02010BC0 + stmdb sp!, {r3, r4, r5, lr} + mov r0, #0 + mov r4, r0 + ldr r2, _02010C5C ; =BAG_ITEMS_PTR_MIRROR + b _02010BF4 +_02010BD4: + ldr r1, [r2] + mov r3, r0, lsl #2 + add r1, r1, #0x1000 + ldr r1, [r1, #0x370] + ldrsh r1, [r1, r3] + cmp r1, #0 + bne _02010BFC + add r0, r0, #1 +_02010BF4: + cmp r0, #4 + blt _02010BD4 +_02010BFC: + cmp r0, #4 + beq _02010C50 + cmp r0, r4 + ble _02010C38 + ldr r1, [r2] + mov r3, r0, lsl #2 + add r1, r1, #0x1000 + ldr r5, [r1, #0x370] + mov lr, r4, lsl #2 + ldrh r1, [r5, r3] + add ip, r5, r0, lsl #2 + add r3, r5, r4, lsl #2 + strh r1, [r5, lr] + ldrh r1, [ip, #2] + strh r1, [r3, #2] +_02010C38: + add r0, r0, #1 + add r4, r4, #1 + b _02010BF4 +_02010C44: + and r0, r4, #0xff + bl RemoveItemFromKecleonShop2 + add r4, r4, #1 +_02010C50: + cmp r4, #4 + blt _02010C44 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02010C5C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end sub_02010BC0 + + arm_func_start SortKecleonItems2 +SortKecleonItems2: ; 0x02010C60 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #4 + mov r6, #0 +_02010C6C: + add r7, r6, #1 + mov r5, r6, lsl #2 + ldr r4, _02010D54 ; =BAG_ITEMS_PTR_MIRROR + b _02010D38 +_02010C7C: + ldr r0, [r4] + add r0, r0, #0x1000 + ldr r0, [r0, #0x370] + ldrsh r0, [r5, r0] + bl sub_0200D1F0 + ldr r1, [r4] + mov r2, r7, lsl #2 + add r1, r1, #0x1000 + ldr r1, [r1, #0x370] + mov r8, r0 + ldrsh r0, [r1, r2] + bl sub_0200D1F0 + cmp r8, r0 + bgt _02010CDC + bne _02010D34 + ldr r0, [r4] + add r0, r0, #0x1000 + ldr r0, [r0, #0x370] + add r1, r5, r0 + add r0, r0, r7, lsl #2 + ldrh r1, [r1, #2] + ldrh r0, [r0, #2] + cmp r1, r0 + bhs _02010D34 +_02010CDC: + ldr r1, [r4] + mov r0, r7, lsl #2 + add r1, r1, #0x1000 + ldr r8, [r1, #0x370] + add lr, r5, r8 + ldrh ip, [r5, r8] + ldrh r3, [lr, #2] + ldrh r1, [r8, r0] + add r2, r8, r7, lsl #2 + strh ip, [sp] + strh r1, [r5, r8] + ldrh r1, [r2, #2] + strh r3, [sp, #2] + ldrh r3, [sp] + strh r1, [lr, #2] + ldr r1, [r4] + ldrh r2, [sp, #2] + add r1, r1, #0x1000 + ldr r1, [r1, #0x370] + strh r3, [r1, r0] + add r0, r1, r7, lsl #2 + strh r2, [r0, #2] +_02010D34: + add r7, r7, #1 +_02010D38: + cmp r7, #4 + blt _02010C7C + add r6, r6, #1 + cmp r6, #3 + blt _02010C6C + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02010D54: .word BAG_ITEMS_PTR_MIRROR + arm_func_end SortKecleonItems2 + + arm_func_start GenerateKecleonItems2 +GenerateKecleonItems2: ; 0x02010D58 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r5, r0 + mov r4, #0 +_02010D64: + and r0, r4, #0xff + bl RemoveItemFromKecleonShop2 + add r4, r4, #1 + cmp r4, #4 + blt _02010D64 + ldr r0, _02010DC4 ; =KECLEON_SHOP_ITEM_TABLE_LISTS_2 + mov r7, #0 + ldr r6, [r0, r5, lsl #2] + ldr r5, _02010DC8 ; =0x0000270F +_02010D88: + mov r0, r5 + bl RandIntSafe + mov r4, r0 + mov r0, r5 + bl RandIntSafe + mov r2, r0 + mov r0, r6 + mov r1, r4 + bl GetItemIdFromList + bl AddItemToKecleonShop2 + add r7, r7, #1 + cmp r7, #4 + blt _02010D88 + bl SortKecleonItems2 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02010DC4: .word KECLEON_SHOP_ITEM_TABLE_LISTS_2 +_02010DC8: .word 0x0000270F + arm_func_end GenerateKecleonItems2 + + arm_func_start AddItemToKecleonShop2 +AddItemToKecleonShop2: ; 0x02010DCC + stmdb sp!, {r3, lr} + mov r1, r0 + add r0, sp, #0 + bl InitBulkItem + ldr r0, _02010E3C ; =BAG_ITEMS_PTR_MIRROR + mov r2, #0 + ldr r3, [r0] + add r0, r3, #0x1000 + b _02010E2C +_02010DF0: + ldr r1, [r0, #0x370] + mov ip, r2, lsl #2 + ldrsh r1, [r1, ip] + cmp r1, #0 + bne _02010E28 + add r0, r3, #0x1000 + ldr r3, [r0, #0x370] + ldrh r1, [sp] + add r2, r3, ip + mov r0, #0 + strh r1, [r3, ip] + ldrh r1, [sp, #2] + strh r1, [r2, #2] + ldmia sp!, {r3, pc} +_02010E28: + add r2, r2, #1 +_02010E2C: + cmp r2, #4 + blt _02010DF0 + mov r0, #1 + ldmia sp!, {r3, pc} + .align 2, 0 +_02010E3C: .word BAG_ITEMS_PTR_MIRROR + arm_func_end AddItemToKecleonShop2 + + arm_func_start GetExclusiveItemOffset +GetExclusiveItemOffset: ; 0x02010E40 + stmdb sp!, {r4, lr} + mov r4, r0 + bl GetItemCategory + cmp r0, #0xf + movne r0, #0 + subeq r0, r4, #0x1bc + moveq r0, r0, lsl #0x10 + moveq r0, r0, asr #0x10 + ldmia sp!, {r4, pc} + arm_func_end GetExclusiveItemOffset + + arm_func_start ApplyExclusiveItemStatBoosts +ApplyExclusiveItemStatBoosts: ; 0x02010E64 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + sub sp, sp, #8 + mov r7, r1 + mov r6, r2 + mov r5, r3 + ldr r4, [sp, #0x28] + bl GetExclusiveItemOffset + ldr r1, _02010F6C ; =EXCLUSIVE_ITEM_STAT_BOOST_DATA_INDEXES + ldrb r2, [r7] + ldrb r1, [r1, r0, lsl #1] + ldrb r0, [r4] + strh r2, [sp, #4] + ldrb r2, [r5] + strh r0, [sp, #2] + ldrb r3, [r6] + ldr r0, _02010F70 ; =EXCLUSIVE_ITEM_ATTACK_BOOSTS + mov r1, r1, lsl #2 + strh r3, [sp, #6] + strh r2, [sp] + ldrsb r2, [r0, r1] + ldr r0, _02010F74 ; =EXCLUSIVE_ITEM_SPECIAL_ATTACK_BOOSTS + ldrh sb, [sp, #4] + ldrsb r8, [r0, r1] + mov r0, r2, lsl #0x10 + add r0, sb, r0, lsr #16 + strh r0, [sp, #4] + mov r0, r8, lsl #0x10 + ldrh lr, [sp, #6] + ldrh r2, [sp, #4] + ldr ip, _02010F78 ; =EXCLUSIVE_ITEM_DEFENSE_BOOSTS + add r0, lr, r0, lsr #16 + ldrsb lr, [ip, r1] + ldr r3, _02010F7C ; =EXCLUSIVE_ITEM_SPECIAL_DEFENSE_BOOSTS + ldrsh ip, [sp, #2] + ldrsb r1, [r3, r1] + strh r0, [sp, #6] + ldrsh r8, [sp] + add r0, ip, r1 + strh r0, [sp, #2] + cmp r2, #0xff + movhi r0, #0xff + strhih r0, [sp, #4] + ldrh r0, [sp, #6] + add r3, r8, lr + ldrh r2, [sp, #4] + cmp r0, #0xff + movhi r0, #0xff + strh r3, [sp] + strhih r0, [sp, #6] + ldrsh r0, [sp] + strb r2, [r7] + cmp r0, #0xff + movgt r0, #0xff + strgth r0, [sp] + ldrsh r0, [sp, #2] + ldrsh r1, [sp] + cmp r0, #0xff + movgt r0, #0xff + strgth r0, [sp, #2] + ldrh r0, [sp, #6] + strb r0, [r6] + ldrsh r0, [sp, #2] + strb r1, [r5] + strb r0, [r4] + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_02010F6C: .word EXCLUSIVE_ITEM_STAT_BOOST_DATA_INDEXES +_02010F70: .word EXCLUSIVE_ITEM_ATTACK_BOOSTS +_02010F74: .word EXCLUSIVE_ITEM_SPECIAL_ATTACK_BOOSTS +_02010F78: .word EXCLUSIVE_ITEM_DEFENSE_BOOSTS +_02010F7C: .word EXCLUSIVE_ITEM_SPECIAL_DEFENSE_BOOSTS + arm_func_end ApplyExclusiveItemStatBoosts + + arm_func_start SetExclusiveItemEffect +SetExclusiveItemEffect: ; 0x02010F80 + cmp r1, #0 + bxeq lr + mov ip, r1, lsr #5 + ldr r3, [r0, ip, lsl #2] + sub r1, r1, ip, lsl #5 + mov r2, #1 + orr r1, r3, r2, lsl r1 + str r1, [r0, ip, lsl #2] + bx lr + arm_func_end SetExclusiveItemEffect diff --git a/include/main_0200EDC0.h b/include/main_0200EDC0.h new file mode 100644 index 00000000..fe079105 --- /dev/null +++ b/include/main_0200EDC0.h @@ -0,0 +1,10 @@ +#ifndef PMDSKY_MAIN_0200EDC0_H +#define PMDSKY_MAIN_0200EDC0_H + +#include "util.h" + +s32 GetCurrentBagCapacity(); +// Implements SPECIAL_PROC_IS_BAG_FULL (see ScriptSpecialProcessCall). +bool8 IsBagFull(); + +#endif //PMDSKY_MAIN_0200EDC0_H diff --git a/main.lsf b/main.lsf index dfc657a4..69899a0d 100644 --- a/main.lsf +++ b/main.lsf @@ -45,6 +45,8 @@ Static main Object asm/main_0200EB30.o Object src/main_0200ECFC.o Object asm/main_0200ED1C.o + Object src/main_0200EDC0.o + Object asm/main_0200EDFC.o Object src/exclusive_item.o Object asm/main_02010FC4.o Object src/moves_1.o diff --git a/src/main_0200EDC0.c b/src/main_0200EDC0.c new file mode 100644 index 00000000..58504210 --- /dev/null +++ b/src/main_0200EDC0.c @@ -0,0 +1,31 @@ +#include "main_0200EDC0.h" +#include "item.h" + +extern struct bag_items *BAG_ITEMS_PTR_MIRROR; + +extern u32 GetBagCapacity(s32 scenario_balance); +extern s32 GetBagCapacitySpecialEpisode(s32 se_type); +extern s32 GetExecuteSpecialEpisodeType(); +extern bool8 GetPerformanceFlagWithChecks(s32 flag_id); +extern s32 GetScenarioBalance(); + +s32 GetCurrentBagCapacity() +{ + s32 special_episode_type = GetExecuteSpecialEpisodeType(); + if (special_episode_type == -1) + { + if (GetPerformanceFlagWithChecks(2) == 0) + return 1; + + return GetBagCapacity(GetScenarioBalance()); + } + return GetBagCapacitySpecialEpisode(special_episode_type); +} + +bool8 IsBagFull() +{ + s32 last_item_index = GetCurrentBagCapacity() - 1; + if (BAG_ITEMS_PTR_MIRROR->bag_items->bag_items[last_item_index].flags & ITEM_FLAG_EXISTS) + return TRUE; + return FALSE; +}