diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/item.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/item.c b/src/item.c new file mode 100644 index 000000000..c68922c0e --- /dev/null +++ b/src/item.c @@ -0,0 +1,76 @@ +#include "global.h" +#include "item.h" + +extern void ApplyNewEncyprtionKeyToHword(u16* hword, u32 newKey); + +enum +{ + ITEMS_POCKET, + BALLS_POCKET, + TMHM_POCKET, + BERRIES_POCKET, + KEYITEMS_POCKET +}; + +struct BagItem +{ + struct ItemSlot (*items)[]; + u8 maxPerPocket; +}; + +extern struct BagItem gBagItems[]; + +u16 GetBagItemQuantity(u16* quantity) +{ + return gSaveBlock2Ptr->encryptionKey ^ *quantity; +} + +void SetBagItemQuantity(u16* quantity, u16 newValue) +{ + *quantity = newValue ^ gSaveBlock2Ptr->encryptionKey; +} + +u16 GetBagItemId(u16* slot) +{ + return *slot; +} + +void SetBagItemId(u16* slot, u16 newItemId) +{ + *slot = newItemId; +} + +void ApplyNewEncyprtionKeyToBagItems(u32 newKey) +{ + u32 pocket, item; + for (pocket = 0; pocket < 5; pocket++) + { + for (item = 0; item < gBagItems[pocket].maxPerPocket; item++) + ApplyNewEncyprtionKeyToHword(&((*gBagItems[pocket].items)[item].quantity), newKey); + } +} + +void ApplyNewEncyprtionKeyToBagItems_(u32 newKey) // really GF? +{ + ApplyNewEncyprtionKeyToBagItems(newKey); +} + +// TODO: move those max values to defines + +void SetBagItemsPointers(void) +{ + gBagItems[ITEMS_POCKET].items = &gSaveBlock1Ptr->bagPocket_Items; + gBagItems[ITEMS_POCKET].maxPerPocket = 30; + + gBagItems[KEYITEMS_POCKET].items = &gSaveBlock1Ptr->bagPocket_KeyItems; + gBagItems[KEYITEMS_POCKET].maxPerPocket = 30; + + gBagItems[BALLS_POCKET].items = &gSaveBlock1Ptr->bagPocket_PokeBalls; + gBagItems[BALLS_POCKET].maxPerPocket = 16; + + gBagItems[TMHM_POCKET].items = &gSaveBlock1Ptr->bagPocket_TMHM; + gBagItems[TMHM_POCKET].maxPerPocket = 64; + + gBagItems[BERRIES_POCKET].items = &gSaveBlock1Ptr->bagPocket_Berries; + gBagItems[BERRIES_POCKET].maxPerPocket = 46; +} |