diff --git a/asm/include/main_0200EE4C.inc b/asm/include/main_0200EE88.inc similarity index 100% rename from asm/include/main_0200EE4C.inc rename to asm/include/main_0200EE88.inc diff --git a/asm/include/main_0200EF6C.inc b/asm/include/main_0200EF6C.inc index b1e4ecae..3428d7f3 100644 --- a/asm/include/main_0200EF6C.inc +++ b/asm/include/main_0200EF6C.inc @@ -2,4 +2,3 @@ .public AreItemsEquivalent .public BAG_ITEMS_PTR_MIRROR .public GetItemCategoryVeneer -.public IsStorableItem diff --git a/asm/main_0200EE4C.s b/asm/main_0200EE88.s similarity index 57% rename from asm/main_0200EE4C.s rename to asm/main_0200EE88.s index 17d00e8b..b9a1f8ea 100644 --- a/asm/main_0200EE4C.s +++ b/asm/main_0200EE88.s @@ -1,29 +1,8 @@ .include "asm/macros.inc" - .include "main_0200EE4C.inc" + .include "main_0200EE88.inc" .text - 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} diff --git a/asm/main_0200EF6C.s b/asm/main_0200EF6C.s index 21523a40..320bad3c 100644 --- a/asm/main_0200EF6C.s +++ b/asm/main_0200EF6C.s @@ -122,37 +122,3 @@ _0200F0D0: .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 diff --git a/include/main_0200EDC0.h b/include/main_0200EDC0.h index d5760f09..1dbcfba5 100644 --- a/include/main_0200EDC0.h +++ b/include/main_0200EDC0.h @@ -7,5 +7,6 @@ s32 GetCurrentBagCapacity(); // Implements SPECIAL_PROC_IS_BAG_FULL (see ScriptSpecialProcessCall). bool8 IsBagFull(); u32 GetNbItemsInBag(void); +u32 CountNbItemsOfTypeInBag(s16 id); #endif //PMDSKY_MAIN_0200EDC0_H diff --git a/include/main_0200F14C.h b/include/main_0200F14C.h index 10bcb0d7..6064f2f6 100644 --- a/include/main_0200F14C.h +++ b/include/main_0200F14C.h @@ -3,6 +3,7 @@ #include "item.h" +u32 HasStorableItems(void); s16 GetItemIndex(struct item* item); #endif diff --git a/main.lsf b/main.lsf index 50734b48..fdbb2a42 100644 --- a/main.lsf +++ b/main.lsf @@ -70,7 +70,7 @@ Static main Object asm/main_0200EB30.o Object src/main_0200ECFC.o Object src/main_0200EDC0.o - Object asm/main_0200EE4C.o + Object asm/main_0200EE88.o Object src/main_0200EEE0.o Object asm/main_0200EF6C.o Object src/main_0200F14C.o diff --git a/src/main_0200EDC0.c b/src/main_0200EDC0.c index 10957c8d..a43e61e0 100644 --- a/src/main_0200EDC0.c +++ b/src/main_0200EDC0.c @@ -43,3 +43,17 @@ u32 GetNbItemsInBag(void) } return count; } + +u32 CountNbItemsOfTypeInBag(s16 id) +{ + struct item *item = BAG_ITEMS_PTR_MIRROR->bag_items->bag_items; + s32 count = 0; + s32 i; + + for (i = 0; i < INVENTORY_SIZE; i++, item++) { + if (item->id == id) { + count++; + } + } + return count; +} diff --git a/src/main_0200F14C.c b/src/main_0200F14C.c index 29c36739..2e2982a0 100644 --- a/src/main_0200F14C.c +++ b/src/main_0200F14C.c @@ -1,8 +1,24 @@ #include "main_0200F14C.h" +#include "item_util_4.h" #include "item.h" extern struct bag_items *BAG_ITEMS_PTR_MIRROR; +u32 HasStorableItems(void) +{ + struct item *item = BAG_ITEMS_PTR_MIRROR->bag_items->bag_items; + s32 i; + + for (i = 0; i < INVENTORY_SIZE; i++, item++) { + bool8 exists = (item->flags & ITEM_FLAG_EXISTS) != 0; + + if (exists && IsStorableItem(item->id)) { + return TRUE; + } + } + return FALSE; +} + s16 GetItemIndex(struct item* item) { struct item *cur = BAG_ITEMS_PTR_MIRROR->bag_items->bag_items;