ap_item.h101 lines · 2.2 KB · raw
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