#ifndef GUARD_ITEM_H #define GUARD_ITEM_H #include "constants/item.h" #include "constants/items.h" #include "constants/tms_hms.h" typedef void (*ItemUseFunc)(u8); struct Item { u8 name[ITEM_NAME_LENGTH]; u16 itemId; u16 price; u8 holdEffect; u8 holdEffectParam; const u8 *description; u8 importance; bool8 registrability; // unused u8 pocket; u8 type; ItemUseFunc fieldUseFunc; u8 battleUsage; ItemUseFunc battleUseFunc; u8 secondaryId; }; struct BagPocket { struct ItemSlot *itemSlots; u8 capacity; }; extern const struct Item gItems[]; extern struct BagPocket gBagPockets[]; void ApplyNewEncryptionKeyToBagItems(u32 newKey); void ApplyNewEncryptionKeyToBagItems_(u32 newKey); void SetBagItemsPointers(void); void CopyItemName(u16 itemId, u8 *dst); void CopyItemNameHandlePlural(u16 itemId, u8 *dst, u32 quantity); void GetBerryCountString(u8 *dst, const u8 *berryName, u32 quantity); bool8 IsBagPocketNonEmpty(u8 pocket); bool8 CheckBagHasItem(u16 itemId, u16 count); bool8 HasAtLeastOneBerry(void); bool8 CheckBagHasSpace(u16 itemId, u16 count); bool8 AddBagItem(u16 itemId, u16 count); bool8 RemoveBagItem(u16 itemId, u16 count); u8 GetPocketByItemId(u16 itemId); void ClearItemSlots(struct ItemSlot *itemSlots, u8 itemCount); u8 CountUsedPCItemSlots(void); bool8 CheckPCHasItem(u16 itemId, u16 count); bool8 AddPCItem(u16 itemId, u16 count); void RemovePCItem(u8 index, u16 count); void CompactPCItems(void); void SwapRegisteredBike(void); u16 BagGetItemIdByPocketPosition(u8 pocketId, u16 pocketPos); u16 BagGetQuantityByPocketPosition(u8 pocketId, u16 pocketPos); void CompactItemsInBagPocket(struct BagPocket *bagPocket); void SortBerriesOrTMHMs(struct BagPocket *bagPocket); void MoveItemSlotInList(struct ItemSlot* itemSlots_, u32 from, u32 to_); void ClearBag(void); u16 CountTotalItemQuantityInBag(u16 itemId); bool8 AddPyramidBagItem(u16 itemId, u16 count); bool8 RemovePyramidBagItem(u16 itemId, u16 count); const u8 *ItemId_GetName(u16 itemId); u16 ItemId_GetPrice(u16 itemId); u8 ItemId_GetHoldEffect(u16 itemId); u8 ItemId_GetHoldEffectParam(u16 itemId); const u8 *ItemId_GetDescription(u16 itemId); u8 ItemId_GetImportance(u16 itemId); u8 ItemId_GetPocket(u16 itemId); u8 ItemId_GetType(u16 itemId); ItemUseFunc ItemId_GetFieldFunc(u16 itemId); u8 ItemId_GetBattleUsage(u16 itemId); ItemUseFunc ItemId_GetBattleFunc(u16 itemId); u8 ItemId_GetSecondaryId(u16 itemId); /* Expands to: * enum * { * ITEM_TM_FOCUS_PUNCH, * ... * ITEM_HM_CUT, * ... * }; */ #define ENUM_TM(id) CAT(ITEM_TM_, id), #define ENUM_HM(id) CAT(ITEM_HM_, id), enum { ENUM_TM_START_ = ITEM_TM01 - 1, FOREACH_TM(ENUM_TM) ENUM_HM_START_ = ITEM_HM01 - 1, FOREACH_HM(ENUM_HM) }; #undef ENUM_TM #undef ENUM_HM #endif // GUARD_ITEM_H