1#pragma once 2#include "ap_map.h" 3#include <stddef.h> 4#include <stdint.h> 5 6#define ITEM_IS_INVENTORY(x) ((x) >= _INVENTORY_MIN && (x) < _INVENTORY_MAX) 7#define ITEM_IS_DUNGEON(x) ((x) >= _DUNGEON_ITEM_MIN && (x) < _DUNGEON_ITEM_MAX) 8#define ITEM_IS_MISC(x) ((x) >= _MISC_ITEM_MIN && (x) < _MISC_ITEM_MAX) 9 10enum ap_dungeon_item { 11 _DUNGEON_ITEM_MIN = _INVENTORY_MAX, 12 DUNGEON_ITEM_SKEY = _DUNGEON_ITEM_MIN, 13 DUNGEON_ITEM_BKEY, 14 DUNGEON_ITEM_MAP, 15 DUNGEON_ITEM_COMPASS, 16 DUNGEON_ITEM_REWARD, // Either Pendant/Crystal in MISC_ITEM 17 _DUNGEON_ITEM_MAX 18}; 19 20enum ap_misc_item { 21 _MISC_ITEM_MIN = _DUNGEON_ITEM_MAX, 22 MISC_ITEM_GREEN_PENDANT = _MISC_ITEM_MIN, 23 MISC_ITEM_REDBLUE_PENDANT, 24 MISC_ITEM_CRYSTAL, 25 MISC_ITEM_HEART_PIECE, 26 MISC_ITEM_HEART_CONTAINER, 27 MISC_ITEM_RUPEES_NEGATIVE, 28 MISC_ITEM_RUPEES_1, 29 MISC_ITEM_RUPEES_5, 30 MISC_ITEM_RUPEES_20, 31 MISC_ITEM_RUPEES_50, 32 MISC_ITEM_RUPEES_100, 33 MISC_ITEM_RUPEES_300, 34 MISC_ITEM_ARROWS_1, 35 MISC_ITEM_ARROWS_3, 36 MISC_ITEM_ARROWS_10, 37 MISC_ITEM_BOMBS_1, 38 MISC_ITEM_BOMBS_3, 39 MISC_ITEM_BOMBS_10, 40 MISC_ITEM_HEART_SMALL, 41 MISC_ITEM_MAGIC_SMALL, 42 MISC_ITEM_MAGIC_FULL, 43 MISC_ITEM_POTION_RED, 44 MISC_ITEM_POTION_GREEN, 45 MISC_ITEM_POTION_BLUE, 46 MISC_ITEM_MAGIC_UPGRADE, 47 MISC_ITEM_BOMB_UPGRADE, 48 MISC_ITEM_ARROW_UPGRADE, 49 _MISC_ITEM_MAX 50}; 51 52struct ap_item { 53 size_t index; 54 size_t copies; 55 size_t acquired; 56 57 // Optional, -1 if invalid 58 enum ap_dungeon dungeon; 59 60 // Union of ap_inventory, ap_dungeon_item, ap_misc_item 61 int type; 62 63 // This is a rudamentary approximation 64 bool is_progression; 65 66 const char name[64]; 67}; 68 69struct ap_item_loc { 70 size_t index; 71 72 // If known; otherwise null 73 const struct ap_item * item; 74 75 // Optional, -1 if invalid 76 enum ap_dungeon dungeon; 77 78 struct ap_node * node; 79 80 double progression_value; 81}; 82 83void 84ap_item_update(void); 85 86struct ap_item_loc * 87ap_item_loc_add(struct ap_node * node); 88 89void 90ap_item_loc_set_raw(struct ap_item_loc * item_loc, uint8_t recv_item); 91 92void 93ap_item_loc_set_enum(struct ap_item_loc * item_loc, int item_type); 94 95double 96ap_item_loc_value(struct ap_item_loc * item_loc); 97 98void 99ap_item_print_state(void); 100 101