summaryrefslogtreecommitdiffstats
path: root/stone_soup/crawl-ref/source/externs.h
diff options
context:
space:
mode:
Diffstat (limited to 'stone_soup/crawl-ref/source/externs.h')
-rw-r--r--stone_soup/crawl-ref/source/externs.h850
1 files changed, 0 insertions, 850 deletions
diff --git a/stone_soup/crawl-ref/source/externs.h b/stone_soup/crawl-ref/source/externs.h
deleted file mode 100644
index 525ec77614..0000000000
--- a/stone_soup/crawl-ref/source/externs.h
+++ /dev/null
@@ -1,850 +0,0 @@
-/*
- * File: externs.h
- * Summary: Fixed size 2D vector class that asserts if you do something bad.
- * Written by: Linley Henzell
- *
- * Modified for Crawl Reference by $Author$ on $Date$
- *
- * Change History (most recent first):
- *
- * <3> 7/29/00 JDJ Renamed sh_x, sh_y, sh_greed, sh_type, sh_level so
- * they start with shop.
- * <2> 7/29/00 JDJ Switched to using bounds checked array classes.
- * Made a few char arrays unsigned char arrays.
- */
-
-#ifndef EXTERNS_H
-#define EXTERNS_H
-
-#include <queue>
-#include <vector>
-#include <list>
-#include <string>
-
-#include <map>
-
-#include <time.h>
-
-#include "defines.h"
-#include "enum.h"
-#include "FixAry.h"
-#include "Kills.h"
-#include "libutil.h"
-#include "message.h"
-
-#define INFO_SIZE 200 // size of message buffers
-#define ITEMNAME_SIZE 200 // size of item names/shop names/etc
-#define HIGHSCORE_SIZE 800 // <= 10 Lines for long format scores
-
-#define MAX_NUM_GODS 21
-
-extern char info[INFO_SIZE]; // defined in acr.cc {dlb}
-
-extern unsigned char show_green; // defined in view.cc {dlb}
-
-// defined in mon-util.cc -- w/o this screen redraws *really* slow {dlb}
-extern FixedVector<unsigned short, 1000> mcolour;
-
-#ifdef SHORT_FILE_NAMES
- const int kNameLen = 30;
- const int kFileNameLen = 6;
- const int kFileNameSize = 5 + kFileNameLen;
-
-#else
- #ifdef SAVE_DIR_PATH
- // file name length has to be able to cover full paths -- bwross
- const int kNameLen = 30;
- const int kFileNameLen = 250;
- const int kFileNameSize = 5 + kFileNameLen;
- #else
- const int kNameLen = 30;
- const int kFileNameLen = 28;
- const int kFileNameSize = 5 + kFileNameLen;
- #endif
-#endif
-
-
-// Length of Path + File Name
-const int kPathLen = 256;
-
-// This value is used to mark that the current berserk is free from
-// penalty (Xom's granted or from a deck of cards).
-#define NO_BERSERK_PENALTY -1
-
-struct monsters;
-struct ait_hp_loss;
-
-struct activity_interrupt_data
-{
- activity_interrupt_payload_type apt;
- const void *data;
-
- activity_interrupt_data()
- : apt(AIP_NONE), data(NULL)
- {
- }
- activity_interrupt_data(const int *i)
- : apt(AIP_INT), data(i)
- {
- }
- activity_interrupt_data(const char *s)
- : apt(AIP_STRING), data(s)
- {
- }
- activity_interrupt_data(const std::string &s)
- : apt(AIP_STRING), data(s.c_str())
- {
- }
- activity_interrupt_data(const monsters *m)
- : apt(AIP_MONSTER), data(m)
- {
- }
- activity_interrupt_data(const ait_hp_loss *ahl)
- : apt(AIP_HP_LOSS), data(ahl)
- {
- }
- activity_interrupt_data(const activity_interrupt_data &a)
- : apt(a.apt), data(a.data)
- {
- }
-};
-
-struct ait_hp_loss
-{
- int hp;
- int hurt_type; // KILLED_BY_POISON, etc.
-
- ait_hp_loss(int _hp, int _ht) : hp(_hp), hurt_type(_ht) { }
-};
-
-struct coord_def
-{
- int x;
- int y;
-
- // coord_def( int x_in = 0, int y_in = 0 ) : x(x_in), y(y_in) {};
- bool operator == (const coord_def &other) const {
- return x == other.x && y == other.y;
- }
-
- bool operator != (const coord_def &other) const {
- return x != other.x || y != other.y;
- }
-};
-
-struct dice_def
-{
- int num;
- int size;
-
- dice_def( int n = 0, int s = 0 ) : num(n), size(s) {}
-};
-
-// output from direction() function:
-struct dist
-{
- bool isValid; // valid target chosen?
- bool isTarget; // target (true), or direction (false)?
- bool isMe; // selected self (convenience: tx == you.x_pos,
- // ty == you.y_pos)
- bool isCancel; // user cancelled (usually <ESC> key)
- int tx,ty; // target x,y or logical extension of beam to map edge
- int dx,dy; // delta x and y if direction - always -1,0,1
-
- // internal use - ignore
- int prev_target; // previous target
-};
-
-
-struct bolt
-{
- // INPUT parameters set by caller
- int range; // minimum range
- int rangeMax; // maximum range
- int type; // missile gfx
- int colour;
- int flavour;
- int source_x, source_y; // beam origin
- dice_def damage;
- int ench_power, hit;
- int target_x, target_y; // intended target
- char thrower; // what kind of thing threw this?
- char ex_size; // explosion radius (0==none)
- int beam_source; // NON_MONSTER or monster index #
- char beam_name[40];
- bool is_beam; // beams? (can hits multiple targets?)
- bool is_explosion;
- bool is_big_cloud; // expands into big_cloud at endpoint
- bool is_enchant; // no block/dodge, but mag resist
- bool is_energy; // mostly energy/non-physical attack
- bool is_launched; // was fired from launcher?
- bool is_thrown; // was thrown from hand?
- bool target_first; // targeting by direction
- const char *aux_source; // source of KILL_MISC beams
-
- // OUTPUT parameters (tracing, ID)
- bool obvious_effect; // did an 'obvious' effect happen?
- int fr_count, foe_count; // # of times a friend/foe is "hit"
- int fr_power, foe_power; // total levels/hit dice affected
-
- // INTERNAL use - should not usually be set outside of beam.cc
- bool is_tracer; // is this a tracer?
- bool aimed_at_feet; // this was aimed at self!
- bool msg_generated; // an appropriate msg was already mpr'd
- bool in_explosion_phase; // explosion phase (as opposed to beam phase)
- bool smart_monster; // tracer firer can guess at other mons. resists?
- bool can_see_invis; // tracer firer can see invisible?
- bool is_friendly; // tracer firer is enslaved or pet
- int foe_ratio; // 100* foe ratio (see mons_should_fire())
-
- // A contstructor to try and fix some of the bugs that occur because
- // this struct never seems to be properly initialized. Definition
- // is over in misc.cc for lack of a better place (short of inlining
- // it here).
- bolt();
-};
-
-
-struct run_check_dir
-{
- unsigned char grid;
- char dx;
- char dy;
-};
-
-
-struct delay_queue_item
-{
- int type;
- int duration;
- int parm1;
- int parm2;
-};
-
-
-struct item_def
-{
- unsigned char base_type; // basic class (ie OBJ_WEAPON)
- unsigned char sub_type; // type within that class (ie WPN_DAGGER)
- short plus; // +to hit, charges, corpse mon id
- short plus2; // +to dam, sub-sub type for boots and helms
- long special; // special stuff
- unsigned char colour; // item colour
- unsigned long flags; // item statuc flags
- short quantity; // number of items
-
- short x; // x-location; for inventory items = -1
- short y; // y-location; for inventory items = -1
- short link; // link to next item; for inventory items = slot
- short slot; // Inventory letter
-
- unsigned short orig_place;
- short orig_monnum;
-
- item_def() : base_type(0), sub_type(0), plus(0), plus2(0),
- special(0L), colour(0), flags(0L), quantity(0),
- x(0), y(0), link(0), slot(0), orig_place(0),
- orig_monnum(0)
- {
- }
-};
-
-class input_history
-{
-public:
- input_history(size_t size);
-
- void new_input(const std::string &s);
- void clear();
-
- const std::string *prev();
- const std::string *next();
-
- void go_end();
-private:
- typedef std::list<std::string> string_list;
-
- string_list history;
- string_list::iterator pos;
- size_t maxsize;
-};
-
-struct player
-{
- activity_type activity; // The current multiturn activity, usually set
- // to ACT_NONE
- char turn_is_over; // flag signaling that player has performed a timed action
-
- unsigned char prev_targ;
- char your_name[kNameLen];
-
- unsigned char species;
-
- char run_x;
- char run_y;
-
- // Coordinates of last travel target; note that this is never used by
- // travel itself, only by the level-map to remember the last travel target.
- short travel_x, travel_y;
-
- FixedVector< run_check_dir, 3 > run_check; // array of grids to check
- signed char running; // Nonzero if running/traveling.
-
- char special_wield;
- char deaths_door;
- char fire_shield;
-
- double elapsed_time; // total amount of elapsed time in the game
-
- unsigned char synch_time; // amount to wait before calling handle_time
-
- unsigned char disease;
-
- char max_level;
-
- int x_pos;
- int y_pos;
-
- int hunger;
- FixedVector<char, NUM_EQUIP> equip;
-
- int hp;
- int hp_max;
- int base_hp; // temporary max HP loss (rotting)
- int base_hp2; // base HPs from levels (and permanent loss)
-
- int magic_points;
- int max_magic_points;
- int base_magic_points; // temporary max MP loss? (currently unused)
- int base_magic_points2; // base MPs from levels and potions of magic
-
- char strength;
- char intel;
- char dex;
- char max_strength;
- char max_intel;
- char max_dex;
-
- char hunger_state;
-
- bool wield_change; // redraw weapon
-
- unsigned long redraw_status_flags;
- char redraw_hit_points;
- char redraw_magic_points;
- char redraw_strength;
- char redraw_intelligence;
- char redraw_dexterity;
- char redraw_experience;
- char redraw_armour_class;
-
- char redraw_gold;
- char redraw_evasion;
-
- unsigned char flash_colour;
-
- unsigned char hit_points_regeneration;
- unsigned char magic_points_regeneration;
-
- unsigned long experience;
- int experience_level;
- unsigned int gold;
- int char_class;
- char class_name[30];
- // char speed; // now unused
- int time_taken;
-
- char shield_blocks; // number of shield blocks since last action
-
- FixedVector< item_def, ENDOFPACK > inv;
-
- int burden;
- char burden_state;
- FixedVector<unsigned char, 25> spells;
- char spell_no;
- unsigned char char_direction; //
-
- unsigned char pet_target;
-
- int your_level; // offset by one (-1 == 0, 0 == 1, etc.) for display
-
- // durational things. Why didn't I do this for haste etc
- // right from the start? Oh well.
- FixedVector<int, NUM_DURATIONS> duration;
-
- int invis;
- int conf;
- int paralysis;
- int slow;
- int haste;
- int might;
- int levitation;
-
- int poison;
- int rotting;
- int berserker;
-
- int exhausted; // fatigue counter for berserk
-
- int berserk_penalty; // pelnalty for moving while berserk
-
- FixedVector<unsigned char, 30> attribute; // see ATTRIBUTES in enum.h
-
- char is_undead; // see UNDEAD_STATES in enum.h
-
- std::queue< delay_queue_item > delay_queue; // pending actions
-
- FixedVector<unsigned char, 50> skills;
- FixedVector<unsigned char, 50> practise_skill;
- FixedVector<unsigned int, 50> skill_points;
- FixedVector<unsigned char, 50> skill_order;
- int skill_cost_level;
- int total_skill_points;
- int exp_available;
-
- FixedArray<unsigned char, 5, 50> item_description;
- FixedVector<unsigned char, 50> unique_items;
- FixedVector<unsigned char, 50> unique_creatures;
-
- KillMaster kills;
-
- char level_type;
-
- char where_are_you;
-
- FixedVector<unsigned char, 30> branch_stairs;
-
- char religion;
- unsigned char piety;
- unsigned char gift_timeout;
- FixedVector<unsigned char, MAX_NUM_GODS> penance;
- FixedVector<unsigned char, MAX_NUM_GODS> worshipped;
- FixedVector<short, MAX_NUM_GODS> num_gifts;
-
-
- FixedVector<unsigned char, 100> mutation;
- FixedVector<unsigned char, 100> demon_pow;
- unsigned char magic_contamination;
-
- char confusing_touch;
- char sure_blade;
-
- FixedVector<unsigned char, 50> had_book;
-
- unsigned char betrayal;
- unsigned char normal_vision; // how far the species gets to see
- unsigned char current_vision; // current sight radius (cells)
-
- unsigned char hell_exit; // which level plyr goes to on hell exit.
-
- // This field is here even in non-WIZARD compiles, since the
- // player might have been playing previously under wiz mode.
- bool wizard; // true if player has entered wiz mode.
- time_t birth_time; // start time of game
-
- time_t start_time; // start time of session
- long real_time; // real time played (in seconds)
- long num_turns; // number of turns taken
-
- int old_hunger; // used for hunger delta-meter (see output.cc)
-
- // Warning: these two are quite different.
- //
- // The spell table is an index to a specific spell slot (you.spells).
- // The ability table lists the ability (ABIL_*) which prefers that letter.
- //
- // In other words, the spell table contains hard links and the ability
- // table contains soft links.
- FixedVector<int, 52> spell_letter_table; // ref to spell by slot
- FixedVector<int, 52> ability_letter_table; // ref to ability by enum
-};
-
-extern struct player you;
-
-struct monsters
-{
- int type;
- int hit_points;
- int max_hit_points;
- int hit_dice;
- int armour_class; // great -- more mixed american/proper spelling
- int evasion;
- unsigned int speed;
- unsigned int speed_increment;
- unsigned char x;
- unsigned char y;
- unsigned char target_x;
- unsigned char target_y;
- FixedVector<int, 8> inv;
- unsigned char attitude; // from MONS_ATTITUDE
- unsigned int behaviour;
- unsigned int foe;
- FixedVector<unsigned int, NUM_MON_ENCHANTS> enchantment;
- unsigned char flags; // bitfield of boolean flags
- unsigned int number; // #heads (hydra), etc.
- int foe_memory; // how long to 'remember' foe x,y
- // once they go out of sight
-};
-
-struct cloud_struct
-{
- unsigned char x;
- unsigned char y;
- unsigned char type;
- int decay;
-};
-
-struct shop_struct
-{
- unsigned char x;
- unsigned char y;
- unsigned char greed;
- unsigned char type;
- unsigned char level;
-
- FixedVector<unsigned char, 3> keeper_name;
-};
-
-struct trap_struct
-{
- unsigned char x;
- unsigned char y;
- unsigned char type;
-};
-
-struct crawl_environment
-{
- unsigned char rock_colour;
- unsigned char floor_colour;
-
- FixedVector< item_def, MAX_ITEMS > item; // item list
- FixedVector< monsters, MAX_MONSTERS > mons; // monster list
-
- FixedArray< unsigned char, GXM, GYM > grid; // terrain grid
- FixedArray< unsigned char, GXM, GYM > mgrid; // monster grid
- FixedArray< int, GXM, GYM > igrid; // item grid
- FixedArray< unsigned char, GXM, GYM > cgrid; // cloud grid
-
- FixedArray< unsigned short, GXM, GYM > map; // discovered terrain
-
- FixedArray< unsigned int, 19, 19> show; // view window char
- FixedArray< unsigned short, 19, 19> show_col; // view window colour
-
- FixedVector< cloud_struct, MAX_CLOUDS > cloud; // cloud list
- unsigned char cloud_no;
-
- FixedVector< shop_struct, MAX_SHOPS > shop; // shop list
- FixedVector< trap_struct, MAX_TRAPS > trap; // trap list
-
- FixedVector< int, 20 > mons_alloc;
- int trap_known;
- double elapsed_time; // used during level load
-};
-
-extern struct crawl_environment env;
-
-
-struct ghost_struct
-{
- char name[20];
- FixedVector< short, NUM_GHOST_VALUES > values;
-};
-
-
-extern struct ghost_struct ghost;
-
-
-extern void (*viewwindow) (char, bool);
-
-
-struct system_environment
-{
- char *crawl_name;
- char *crawl_pizza;
- char *crawl_rc;
- char *crawl_dir;
- char *home; // only used by MULTIUSER systems
- bool board_with_nail; // Easter Egg silliness
-};
-
-extern system_environment SysEnv;
-
-struct message_filter
-{
- int channel; // Use -1 to match any channel.
- text_pattern pattern; // Empty pattern matches any message
-
- message_filter( int ch, const std::string &s )
- : channel(ch), pattern(s)
- {
- }
-
- message_filter( const std::string &s ) : channel(-1), pattern(s) { }
-
- bool is_filtered( int ch, const std::string &s ) const {
- bool channel_match = ch == channel || channel == -1;
- if (!channel_match || pattern.empty())
- return channel_match;
- return pattern.matches(s);
- }
-
-};
-
-struct sound_mapping
-{
- text_pattern pattern;
- std::string soundfile;
-};
-
-struct colour_mapping
-{
- text_pattern pattern;
- int colour;
-};
-
-class formatted_string
-{
-public:
- formatted_string() : ops() { }
- formatted_string(const std::string &s);
-
- operator std::string() const;
- void display(int start = 0, int end = -1) const;
- std::string tostring(int start = 0, int end = -1) const;
-
- void cprintf(const char *s, ...);
- void cprintf(const std::string &s);
- void gotoxy(int x, int y);
- void textcolor(int color);
-
-private:
- enum fs_op_type
- {
- FSOP_COLOUR,
- FSOP_CURSOR,
- FSOP_TEXT
- };
-
- struct fs_op
- {
- fs_op_type type;
- int x, y;
- std::string text;
-
- fs_op(int color)
- : type(FSOP_COLOUR), x(color), y(-1), text()
- {
- }
-
- fs_op(int cx, int cy)
- : type(FSOP_CURSOR), x(cx), y(cy), text()
- {
- }
-
- fs_op(const std::string &s)
- : type(FSOP_TEXT), x(-1), y(-1), text(s)
- {
- }
-
- operator fs_op_type () const
- {
- return type;
- }
- void display() const;
- };
-
- std::vector<fs_op> ops;
-};
-
-struct game_options
-{
- bool ascii_display; // Defaults to true ifdef USE_ASCII_CHARACTERS
- long autopickups; // items to autopickup
- bool verbose_dump; // make character dumps contain more detail
- bool detailed_stat_dump; // add detailed stat and resist dump
- bool colour_map; // add colour to the map
- bool clean_map; // remove unseen clouds/monsters
- bool show_uncursed; // label known uncursed items as "uncursed"
- bool always_greet; // display greeting message when reloading
- bool easy_open; // open doors with movement
- bool easy_armour; // allow auto-removing of armour
- bool easy_butcher; // open doors with movement
- int easy_confirm; // make yesno() confirming easier
- int easy_quit_item_prompts; // make item prompts quitable on space
- int colour[16]; // macro fg colours to other colours
- int background; // select default background colour
- int channels[NUM_MESSAGE_CHANNELS]; // msg channel colouring
- int weapon; // auto-choose weapon for character
- int chaos_knight; // choice of god for Chaos Knights (Xom/Makleb)
- int death_knight; // choice of god/necromancy for Death Knights
- int priest; // choice of god for priests (Zin/Yred)
- bool random_pick; // randomly generate character
- int hp_warning; // percentage hp for danger warning
- int hp_attention; // percentage hp for danger attention
- char race; // preselected race
- char cls; // preselected class
- bool terse_hand; // use terse description for wielded item
- bool delay_message_clear; // avoid clearing messages each turn
- unsigned friend_brand; // Attribute for branding friendly monsters
- bool no_dark_brand; // Attribute for branding friendly monsters
- bool macro_meta_entry; // Allow user to use \{foo} sequences when
- // creating macros
-
- int fire_items_start; // index of first item for fire command
- FixedVector<int, NUM_FIRE_TYPES> fire_order; // order for 'f' command
-
- bool auto_list; // automatically jump to appropriate item lists
-
- bool flush_input[NUM_FLUSH_REASONS]; // when to flush input buff
- bool lowercase_invocations; // prefer lowercase invocations
-
- int num_colours; // used for setting up curses colour table (8 or 16)
-
-#ifdef WIZARD
- int wiz_mode; // yes, no, never in wiz mode to start
-#endif
-
- // internal use only:
- int sc_entries; // # of score entries
- int sc_format; // Format for score entries
-
- std::vector<text_pattern> banned_objects; // Objects we'll never pick up
- bool pickup_thrown; // Pickup thrown missiles
- bool pickup_dropped; // Pickup dropped objects
- int travel_delay; // How long to pause between travel moves
-
- std::vector<message_filter> stop_travel; // Messages that stop travel
-
- int stash_tracking; // How stashes are tracked
-
- bool travel_colour; // Colour levelmap using travel information?
- int travel_stair_cost;
-
- int travel_exclude_radius2; // Square of the travel exclude radius
- bool show_waypoints;
-
- bool item_colour; // Colour items on level map
-
- unsigned detected_monster_colour; // Colour of detected monsters
- unsigned detected_item_colour; // Colour of detected items
- unsigned remembered_monster_colour; // Colour for monsters remembered
- // on the map.
-
- unsigned heap_brand; // Highlight heaps of items in the playing area
- unsigned stab_brand; // Highlight monsters that are stabbable
- unsigned may_stab_brand; // Highlight potential stab candidates
-
- int explore_stop; // Stop exploring if a previously unseen
- // item comes into view
-
- std::vector<sound_mapping> sound_mappings;
- std::vector<colour_mapping> menu_colour_mappings;
-
- int dump_kill_places; // How to dump place information for kills.
- int dump_message_count; // How many old messages to dump
-
- int dump_item_origins; // Show where items came from?
- int dump_item_origin_price;
-
- bool target_zero_exp; // If true, targeting targets zero-exp
- // monsters.
- bool target_wrap; // Wrap around from last to first target
- bool target_oos; // 'x' look around can target out-of-LOS
- bool target_los_first; // 'x' look around first goes to visible
- // objects/features, then goes to stuff
- // outside LOS.
-
- int drop_mode; // Controls whether single or multidrop
- // is the default.
-
- bool easy_exit_menu; // Menus are easier to get out of
-
- int assign_item_slot; // How free slots are assigned
-
- std::vector<text_pattern> drop_filter;
-
- FixedVector< unsigned, ACT_ACTIVITY_COUNT > activity_interrupts;
-
- // Previous startup options
- bool remember_name; // Remember and reprompt with last name
-
- bool dos_use_background_intensity;
-
- int level_map_cursor_step; // The cursor increment in the level
- // map.
-
- // If the player prefers to merge kill records, this option can do that.
- int kill_map[KC_NCATEGORIES];
-
- // Parameters for fight simulations.
- long fsim_rounds;
- int fsim_str, fsim_int, fsim_dex;
- int fsim_xl;
- std::string fsim_mons;
- std::vector<std::string> fsim_kit;
-
- typedef std::map<std::string, std::string> opt_map;
- opt_map named_options; // All options not caught above are
- // recorded here.
-
- ///////////////////////////////////////////////////////////////////////
- // These options cannot be directly set by the user. Instead they're
- // set indirectly to the choices the user made for the last character
- // created. XXX: Isn't there a better place for these?
- std::string prev_name;
- char prev_race;
- char prev_cls;
- int prev_ck, prev_dk, prev_pr;
- int prev_weapon;
- bool prev_randpick;
-};
-
-extern game_options Options;
-
-struct tagHeader
-{
- short tagID;
- long offset;
-};
-
-struct scorefile_entry
-{
- char version;
- char release;
- long points;
- char name[kNameLen];
- long uid; // for multiuser systems
- char race;
- char cls;
- char race_class_name[5]; // overrides race & cls if non-null
- char lvl; // player level.
- char best_skill; // best skill #
- char best_skill_lvl; // best skill level
- int death_type;
- int death_source; // 0 or monster TYPE
- int mon_num; // sigh...
- char death_source_name[40]; // overrides death_source
- char auxkilldata[ITEMNAME_SIZE]; // weapon wielded, spell cast, etc
- char dlvl; // dungeon level (relative)
- char level_type; // what kind of level died on..
- char branch; // dungeon branch
- int final_hp; // actual current HPs (probably <= 0)
- int final_max_hp; // net HPs after rot
- int final_max_max_hp; // gross HPs before rot
- int damage; // damage of final attack
- int str; // final str (useful for nickname)
- int intel; // final int
- int dex; // final dex (useful for nickname)
- int god; // god
- int piety; // piety
- int penance; // penance
- char wiz_mode; // character used wiz mode
- time_t birth_time; // start time of character
- time_t death_time; // end time of character
- long real_time; // real playing time in seconds
- long num_turns; // number of turns taken
- int num_diff_runes; // number of rune types in inventory
- int num_runes; // total number of runes in inventory
-};
-
-#endif // EXTERNS_H