All pastes #1634899 Raw Edit

Untitled

public diff v1 · immutable
#1634899 ·published 2009-10-21 12:33 UTC
rendered paste body
From b979fba701c93e96093aa61349e5d4c76438a894 Mon Sep 17 00:00:00 2001From: Robert Vollmert <rvollmert@gmx.net>Date: Mon, 19 Oct 2009 16:12:04 +0200Subject: [PATCH] Split actors and env from externs.h.--- crawl-ref/source/actor.h    |  211 ++++++++ crawl-ref/source/dgnevent.h |    1 + crawl-ref/source/effects.h  |    3 +- crawl-ref/source/env.h      |   83 +++ crawl-ref/source/externs.h  | 1179 ++----------------------------------------- crawl-ref/source/los.cc     |    1 + crawl-ref/source/los.h      |    2 +- crawl-ref/source/mon-util.h |    2 + crawl-ref/source/monster.h  |  390 ++++++++++++++ crawl-ref/source/place.cc   |    3 +- crawl-ref/source/player.cc  |    2 - crawl-ref/source/player.h   |  448 ++++++++++++++++- crawl-ref/source/religion.h |    3 +- crawl-ref/source/shopping.h |    4 +- crawl-ref/source/spl-mis.h  |    1 + crawl-ref/source/stash.h    |    1 + crawl-ref/source/state.h    |    1 + crawl-ref/source/stuff.h    |    3 +- 18 files changed, 1184 insertions(+), 1154 deletions(-) create mode 100644 crawl-ref/source/actor.h create mode 100644 crawl-ref/source/env.h create mode 100644 crawl-ref/source/monster.hdiff --git a/crawl-ref/source/actor.h b/crawl-ref/source/actor.hnew file mode 100644index 0000000..a760742--- /dev/null+++ b/crawl-ref/source/actor.h@@ -0,0 +1,211 @@+#ifndef ACTOR_H+#define ACTOR_H++class actor+{+public:+    virtual ~actor();++    virtual int       id() const = 0;+    virtual int       mindex() const = 0;+    virtual actor_type atype() const = 0;++    virtual kill_category kill_alignment() const = 0;+    virtual god_type  deity() const = 0;++    virtual bool      alive() const = 0;++    virtual bool is_summoned(int* duration = NULL,+                             int* summon_type = NULL) const = 0;++    virtual void moveto(const coord_def &c) = 0;+    virtual const coord_def& pos() const { return position; }+    virtual coord_def& pos() { return position; }++    virtual bool      swimming() const = 0;+    virtual bool      submerged() const = 0;+    virtual bool      floundering() const = 0;++    // Returns true if the actor is exceptionally well balanced.+    virtual bool      extra_balanced() const = 0;++    virtual int       get_experience_level() const = 0;++    virtual bool can_pass_through_feat(dungeon_feature_type grid) const = 0;+    virtual bool can_pass_through(int x, int y) const;+    virtual bool can_pass_through(const coord_def &c) const;++    virtual bool is_habitable_feat(dungeon_feature_type actual_grid) const = 0;+            bool is_habitable(const coord_def &pos) const;++    virtual size_type body_size(int psize = PSIZE_TORSO,+                                bool base = false) const = 0;+    virtual int       body_weight() const = 0;+    virtual int       total_weight() const = 0;++    virtual int       damage_brand(int which_attack = -1) = 0;+    virtual int       damage_type(int which_attack = -1) = 0;+    virtual item_def *weapon(int which_attack = -1) = 0;+    virtual item_def *shield() = 0;+    virtual item_def *slot_item(equipment_type eq) = 0;+    // Just a wrapper; not to be overridden+    const item_def *slot_item(equipment_type eq) const+    {+        return const_cast<actor*>(this)->slot_item(eq);+    }+    virtual bool has_equipped(equipment_type eq, int sub_type) const;++            bool can_wield(const item_def* item,+                           bool ignore_curse = false,+                           bool ignore_brand = false,+                           bool ignore_shield = false,+                           bool ignore_transform = false) const;+    virtual bool can_wield(const item_def &item,+                           bool ignore_curse = false,+                           bool ignore_brand = false,+                           bool ignore_shield = false,+                           bool ignore_transform = false) const = 0;+    virtual bool could_wield(const item_def &item,+                             bool ignore_brand = false,+                             bool ignore_transform = false) const = 0;++    virtual int hunger_level() const { return HS_ENGORGED; }+    virtual void make_hungry(int nutrition, bool silent = true)+    {+    }++    // Need not be implemented for the player - player action costs+    // are explicitly calculated.+    virtual void lose_energy(energy_use_type, int div = 1, int mult = 1)+    {+    }++    virtual std::string name(description_level_type type,+                             bool force_visible = false) const = 0;+    virtual std::string pronoun(pronoun_type which_pronoun,+                                bool force_visible = false) const = 0;+    virtual std::string conj_verb(const std::string &verb) const = 0;+    virtual std::string hand_name(bool plural,+                                  bool *can_plural = NULL) const = 0;+    virtual std::string foot_name(bool plural,+                                  bool *can_plural = NULL) const = 0;+    virtual std::string arm_name(bool plural,+                                 bool *can_plural = NULL) const = 0;++    virtual bool fumbles_attack(bool verbose = true) = 0;++    // Returns true if the actor has no way to attack (plants, statues).+    // (statues have only indirect attacks).+    virtual bool cannot_fight() const = 0;+    virtual void attacking(actor *other) = 0;+    virtual bool can_go_berserk() const = 0;+    virtual bool can_see_invisible() const = 0;+    virtual bool invisible() const = 0;+    virtual bool visible_to(const actor *looker) const = 0;+    virtual bool can_see(const actor *target) const = 0;+    virtual bool is_icy() const = 0;+    virtual bool is_fiery() const = 0;+    virtual void go_berserk(bool intentional) = 0;+    virtual bool can_mutate() const = 0;+    virtual bool can_safely_mutate() const = 0;+    virtual bool can_bleed() const = 0;+    virtual bool mutate() = 0;+    virtual bool drain_exp(actor *agent, bool quiet = false, int pow = 3) = 0;+    virtual bool rot(actor *agent, int amount, int immediate = 0,+                     bool quiet = false) = 0;+    virtual int  hurt(const actor *attacker, int amount,+                      beam_type flavour = BEAM_MISSILE,+                      bool cleanup_dead = true) = 0;+    virtual void heal(int amount, bool max_too = false) = 0;+    virtual void banish(const std::string &who = "") = 0;+    virtual void blink(bool allow_partial_control = true) = 0;+    virtual void teleport(bool right_now = false, bool abyss_shift = false) = 0;+    virtual void poison(actor *attacker, int amount = 1) = 0;+    virtual bool sicken(int amount) = 0;+    virtual void paralyse(actor *attacker, int strength) = 0;+    virtual void petrify(actor *attacker, int strength) = 0;+    virtual void slow_down(actor *attacker, int strength) = 0;+    virtual void confuse(actor *attacker, int strength) = 0;+    virtual void expose_to_element(beam_type element, int strength = 0) = 0;+    virtual void drain_stat(int stat, int amount, actor* attacker) { }+    virtual void put_to_sleep(int power = 0) { };+    virtual void check_awaken(int disturbance) = 0;++    virtual bool wearing_light_armour(bool = false) const { return (true); }+    virtual int  skill(skill_type sk, bool skill_bump = false) const+    {+        return (0);+    }++    virtual void exercise(skill_type sk, int qty) { }++    virtual int stat_hp() const = 0;+    virtual int stat_maxhp() const = 0;++    virtual bool can_throw_large_rocks() const = 0;++    virtual int armour_class() const = 0;+    virtual int melee_evasion(const actor *attacker) const = 0;+    virtual int shield_bonus() const = 0;+    virtual int shield_block_penalty() const = 0;+    virtual int shield_bypass_ability(int tohit) const = 0;++    virtual void shield_block_succeeded() { }++    virtual int mons_species() const = 0;++    virtual mon_holy_type holiness() const = 0;+    virtual int res_fire() const = 0;+    virtual int res_steam() const = 0;+    virtual int res_cold() const = 0;+    virtual int res_elec() const = 0;+    virtual int res_poison() const = 0;+    virtual int res_rotting() const = 0;+    virtual int res_asphyx() const = 0;+    virtual int res_sticky_flame() const = 0;+    virtual int res_holy_energy(const actor *attacker) const = 0;+    virtual int res_negative_energy() const = 0;+    virtual int res_torment() const = 0;++    virtual flight_type flight_mode() const = 0;+    virtual bool is_levitating() const = 0;+    virtual bool airborne() const;++    virtual bool paralysed() const = 0;+    virtual bool cannot_move() const = 0;+    virtual bool cannot_act() const = 0;+    virtual bool confused() const = 0;+    virtual bool caught() const = 0;+    virtual bool asleep() const { return (false); }+    virtual bool backlit(bool check_haloed = true) const = 0;+    virtual bool haloed() const = 0;++    virtual bool handle_trap();++    virtual void god_conduct(conduct_type thing_done, int level) { }++    virtual bool incapacitated() const+    {+        return cannot_move() || asleep() || confused() || caught();+    }++    virtual int warding() const+    {+        return (0);+    }++    virtual bool visible() const+    {+        return (true);+    }++    virtual bool has_spell(spell_type spell) const = 0;++    virtual bool     will_trigger_shaft() const;+    virtual level_id shaft_dest() const;+    virtual bool     do_shaft() = 0;++    coord_def position;+};++#endifdiff --git a/crawl-ref/source/dgnevent.h b/crawl-ref/source/dgnevent.hindex c9eea41..6b37744 100644--- a/crawl-ref/source/dgnevent.h+++ b/crawl-ref/source/dgnevent.h@@ -8,6 +8,7 @@ #define __DGNEVENT_H__  #include "externs.h"+#include "player.h" #include <list>  // Keep event names in l_dgn.cc in sync.diff --git a/crawl-ref/source/effects.h b/crawl-ref/source/effects.hindex 0cf479c..9cc9be9 100644--- a/crawl-ref/source/effects.h+++ b/crawl-ref/source/effects.h@@ -8,6 +8,7 @@ #ifndef EFFECTS_H #define EFFECTS_H +#include "env.h" #include "externs.h"  struct bolt;@@ -64,7 +65,7 @@ int place_ring(std::vector<coord_def> & ring_points,                 int arc_occupancy,                 int & seen_count); -// Collect lists of points that are within LOS (under the given env map),+// Collect lists of points that are within LOS (under the given losgrid), // unoccupied, and not solid (walls/statues). void collect_radius_points(std::vector<std::vector<coord_def> > &radius_points,                            coord_def & origin, env_show_grid & losgrid);diff --git a/crawl-ref/source/env.h b/crawl-ref/source/env.hnew file mode 100644index 0000000..3689daf--- /dev/null+++ b/crawl-ref/source/env.h@@ -0,0 +1,83 @@+#ifndef ENV_H+#define ENV_H++#include "monster.h"+++typedef FixedArray<dungeon_feature_type, GXM, GYM> feature_grid;+typedef FixedArray<unsigned, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER>+    env_show_grid;+class crawl_exit_hook;++struct crawl_environment+{+public:+    unsigned char rock_colour;+    unsigned char floor_colour;++    FixedVector< item_def, MAX_ITEMS >       item;  // item list+    FixedVector< monsters, MAX_MONSTERS >    mons;  // monster list++    feature_grid                             grid;  // terrain grid+    FixedArray< unsigned short, GXM, GYM >   mgrid; // monster grid+    FixedArray< int, GXM, GYM >              igrid; // item grid+    FixedArray< unsigned short, GXM, GYM >   cgrid; // cloud grid+    FixedArray< unsigned short, GXM, GYM >   grid_colours; // colour overrides++    FixedArray< map_cell, GXM, GYM >         map;    // discovered terrain++    // Glyphs of squares that are in LOS.+    env_show_grid show;++    // What would be visible, if all of the translucent wall were+    // made opaque.+    env_show_grid no_trans_show;++    FixedArray<unsigned short, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER>+                                             show_col;  // view window colour++#ifdef USE_TILE+    // indexed by grid coords+    FixedArray<tile_fg_store, GXM, GYM> tile_bk_fg;+    FixedArray<unsigned int, GXM, GYM> tile_bk_bg;+    FixedArray<tile_flavour, GXM, GYM> tile_flv;+    // indexed by (show-1) coords+    FixedArray<unsigned int, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER> tile_fg;+    FixedArray<unsigned int, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER> tile_bg;+    tile_flavour tile_default;+#endif++    FixedVector< cloud_struct, MAX_CLOUDS >  cloud; // cloud list+    unsigned char cloud_no;++    FixedVector< shop_struct, MAX_SHOPS >    shop;  // shop list+    FixedVector< trap_def, MAX_TRAPS >       trap;  // trap list++    FixedVector< monster_type, 20 >          mons_alloc;+    map_markers                              markers;++    // Place to associate arbitrary data with a particular level.+    // Sort of like player::attribute+    CrawlHashTable properties;++    // Rate at which random monsters spawn, with lower numbers making+    // them spawn more often (5 or less causes one to spawn about every+    // 5 turns).  Set to 0 to stop random generation.+    int spawn_random_rate;++    double elapsed_time; // used during level load++    // Number of turns the player has spent on this level.+    int turns_on_level;++    // Flags for things like preventing teleport control; see+    // level_flag_type in enum.h+    unsigned long level_flags;++    coord_def sanctuary_pos;+    int sanctuary_time;+};++extern struct crawl_environment env;++#endifdiff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.hindex e040da7..b335ef2 100644--- a/crawl-ref/source/externs.h+++ b/crawl-ref/source/externs.h@@ -225,213 +225,6 @@ struct coord_def     } }; -class actor-{-public:-    virtual ~actor();--    virtual int       id() const = 0;-    virtual int       mindex() const = 0;-    virtual actor_type atype() const = 0;--    virtual kill_category kill_alignment() const = 0;-    virtual god_type  deity() const = 0;--    virtual bool      alive() const = 0;--    virtual bool is_summoned(int* duration = NULL,-                             int* summon_type = NULL) const = 0;--    virtual void moveto(const coord_def &c) = 0;-    virtual const coord_def& pos() const { return position; }-    virtual coord_def& pos() { return position; }--    virtual bool      swimming() const = 0;-    virtual bool      submerged() const = 0;-    virtual bool      floundering() const = 0;--    // Returns true if the actor is exceptionally well balanced.-    virtual bool      extra_balanced() const = 0;--    virtual int       get_experience_level() const = 0;--    virtual bool can_pass_through_feat(dungeon_feature_type grid) const = 0;-    virtual bool can_pass_through(int x, int y) const;-    virtual bool can_pass_through(const coord_def &c) const;--    virtual bool is_habitable_feat(dungeon_feature_type actual_grid) const = 0;-            bool is_habitable(const coord_def &pos) const;--    virtual size_type body_size(int psize = PSIZE_TORSO,-                                bool base = false) const = 0;-    virtual int       body_weight() const = 0;-    virtual int       total_weight() const = 0;--    virtual int       damage_brand(int which_attack = -1) = 0;-    virtual int       damage_type(int which_attack = -1) = 0;-    virtual item_def *weapon(int which_attack = -1) = 0;-    virtual item_def *shield() = 0;-    virtual item_def *slot_item(equipment_type eq) = 0;-    // Just a wrapper; not to be overridden-    const item_def *slot_item(equipment_type eq) const-    {-        return const_cast<actor*>(this)->slot_item(eq);-    }-    virtual bool has_equipped(equipment_type eq, int sub_type) const;--            bool can_wield(const item_def* item,-                           bool ignore_curse = false,-                           bool ignore_brand = false,-                           bool ignore_shield = false,-                           bool ignore_transform = false) const;-    virtual bool can_wield(const item_def &item,-                           bool ignore_curse = false,-                           bool ignore_brand = false,-                           bool ignore_shield = false,-                           bool ignore_transform = false) const = 0;-    virtual bool could_wield(const item_def &item,-                             bool ignore_brand = false,-                             bool ignore_transform = false) const = 0;--    virtual int hunger_level() const { return HS_ENGORGED; }-    virtual void make_hungry(int nutrition, bool silent = true)-    {-    }--    // Need not be implemented for the player - player action costs-    // are explicitly calculated.-    virtual void lose_energy(energy_use_type, int div = 1, int mult = 1)-    {-    }--    virtual std::string name(description_level_type type,-                             bool force_visible = false) const = 0;-    virtual std::string pronoun(pronoun_type which_pronoun,-                                bool force_visible = false) const = 0;-    virtual std::string conj_verb(const std::string &verb) const = 0;-    virtual std::string hand_name(bool plural,-                                  bool *can_plural = NULL) const = 0;-    virtual std::string foot_name(bool plural,-                                  bool *can_plural = NULL) const = 0;-    virtual std::string arm_name(bool plural,-                                 bool *can_plural = NULL) const = 0;--    virtual bool fumbles_attack(bool verbose = true) = 0;--    // Returns true if the actor has no way to attack (plants, statues).-    // (statues have only indirect attacks).-    virtual bool cannot_fight() const = 0;-    virtual void attacking(actor *other) = 0;-    virtual bool can_go_berserk() const = 0;-    virtual bool can_see_invisible() const = 0;-    virtual bool invisible() const = 0;-    virtual bool visible_to(const actor *looker) const = 0;-    virtual bool can_see(const actor *target) const = 0;-    virtual bool is_icy() const = 0;-    virtual bool is_fiery() const = 0;-    virtual void go_berserk(bool intentional) = 0;-    virtual bool can_mutate() const = 0;-    virtual bool can_safely_mutate() const = 0;-    virtual bool can_bleed() const = 0;-    virtual bool mutate() = 0;-    virtual bool drain_exp(actor *agent, bool quiet = false, int pow = 3) = 0;-    virtual bool rot(actor *agent, int amount, int immediate = 0,-                     bool quiet = false) = 0;-    virtual int  hurt(const actor *attacker, int amount,-                      beam_type flavour = BEAM_MISSILE,-                      bool cleanup_dead = true) = 0;-    virtual void heal(int amount, bool max_too = false) = 0;-    virtual void banish(const std::string &who = "") = 0;-    virtual void blink(bool allow_partial_control = true) = 0;-    virtual void teleport(bool right_now = false, bool abyss_shift = false) = 0;-    virtual void poison(actor *attacker, int amount = 1) = 0;-    virtual bool sicken(int amount) = 0;-    virtual void paralyse(actor *attacker, int strength) = 0;-    virtual void petrify(actor *attacker, int strength) = 0;-    virtual void slow_down(actor *attacker, int strength) = 0;-    virtual void confuse(actor *attacker, int strength) = 0;-    virtual void expose_to_element(beam_type element, int strength = 0) = 0;-    virtual void drain_stat(int stat, int amount, actor* attacker) { }-    virtual void put_to_sleep(int power = 0) { };-    virtual void check_awaken(int disturbance) = 0;--    virtual bool wearing_light_armour(bool = false) const { return (true); }-    virtual int  skill(skill_type sk, bool skill_bump = false) const-    {-        return (0);-    }--    virtual void exercise(skill_type sk, int qty) { }--    virtual int stat_hp() const = 0;-    virtual int stat_maxhp() const = 0;--    virtual bool can_throw_large_rocks() const = 0;--    virtual int armour_class() const = 0;-    virtual int melee_evasion(const actor *attacker) const = 0;-    virtual int shield_bonus() const = 0;-    virtual int shield_block_penalty() const = 0;-    virtual int shield_bypass_ability(int tohit) const = 0;--    virtual void shield_block_succeeded() { }--    virtual int mons_species() const = 0;--    virtual mon_holy_type holiness() const = 0;-    virtual int res_fire() const = 0;-    virtual int res_steam() const = 0;-    virtual int res_cold() const = 0;-    virtual int res_elec() const = 0;-    virtual int res_poison() const = 0;-    virtual int res_rotting() const = 0;-    virtual int res_asphyx() const = 0;-    virtual int res_sticky_flame() const = 0;-    virtual int res_holy_energy(const actor *attacker) const = 0;-    virtual int res_negative_energy() const = 0;-    virtual int res_torment() const = 0;--    virtual flight_type flight_mode() const = 0;-    virtual bool is_levitating() const = 0;-    virtual bool airborne() const;--    virtual bool paralysed() const = 0;-    virtual bool cannot_move() const = 0;-    virtual bool cannot_act() const = 0;-    virtual bool confused() const = 0;-    virtual bool caught() const = 0;-    virtual bool asleep() const { return (false); }-    virtual bool backlit(bool check_haloed = true) const = 0;-    virtual bool haloed() const = 0;--    virtual bool handle_trap();--    virtual void god_conduct(conduct_type thing_done, int level) { }--    virtual bool incapacitated() const-    {-        return cannot_move() || asleep() || confused() || caught();-    }--    virtual int warding() const-    {-        return (0);-    }--    virtual bool visible() const-    {-        return (true);-    }--    virtual bool has_spell(spell_type spell) const = 0;--    virtual bool     will_trigger_shaft() const;-    virtual level_id shaft_dest() const;-    virtual bool     do_shaft() = 0;--    coord_def position;-};- typedef bool (*coord_predicate)(const coord_def &c);  struct dice_def@@ -449,6 +242,38 @@ struct run_check_dir     coord_def delta; }; +struct cloud_struct+{+    coord_def     pos;+    cloud_type    type;+    int           decay;+    unsigned char spread_rate;+    kill_category whose;+    killer_type   killer;++    cloud_struct() : pos(), type(CLOUD_NONE), decay(0), spread_rate(0),+                     whose(KC_OTHER), killer(KILL_NONE)+    {+    }++    void set_whose(kill_category _whose);+    void set_killer(killer_type _killer);++    static kill_category killer_to_whose(killer_type killer);+    static killer_type   whose_to_killer(kill_category whose);++};++struct shop_struct+{+    coord_def           pos;+    unsigned char       greed;+    shop_type           type;+    unsigned char       level;++    FixedVector<unsigned char, 3> keeper_name;+};+  struct delay_queue_item {@@ -571,6 +396,7 @@ public:     void load(reader&); }; + struct item_def {     object_class_type  base_type;  // basic class (ie OBJ_WEAPON)@@ -732,451 +558,6 @@ class KillMaster;   -class player : public actor-{-public:-  bool turn_is_over; // flag signaling that player has performed a timed action--  // If true, player is headed to the Abyss.-  bool banished;-  std::string banished_by;--  std::vector<int> mesmerised_by; // monsters mesmerising player--  int  friendly_pickup;       // pickup setting for allies--  unsigned short prev_targ;-  coord_def      prev_grd_targ;-  char your_name[kNameLen];--  species_type species;-  job_type char_class;--  // 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;--  runrest running;            // Nonzero if running/traveling.--  unsigned short unrand_reacts;--  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;--  coord_def youpos;--  coord_def prev_move;--  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;-  stat_type last_chosen;--  char hunger_state;--  bool wield_change;          // redraw weapon-  bool redraw_quiver;         // redraw quiver-  bool received_weapon_warning;--  unsigned long redraw_status_flags;--  // PC's symbol (usually @) and colour.-  int symbol;-  int colour;--  bool redraw_hit_points;-  bool redraw_magic_points;-  bool redraw_strength;-  bool redraw_intelligence;-  bool redraw_dexterity;-  bool redraw_experience;-  bool redraw_armour_class;-  bool redraw_evasion;--  unsigned char flash_colour;--  unsigned char hit_points_regeneration;-  unsigned char magic_points_regeneration;--  unsigned long experience;-  int experience_level;-  int gold;-  char class_name[30];-  int time_taken;--  int shield_blocks;         // number of shield blocks since last action--  FixedVector< item_def, ENDOFPACK > inv;--  int burden;-  burden_state_type burden_state;-  FixedVector<spell_type, 25> spells;-  char spell_no;-  game_direction_type char_direction;-  bool opened_zot;-  bool royal_jelly_dead;-  bool transform_cancellable;--  unsigned short pet_target;--  int your_level; // offset by one (-1 == 0, 0 == 1, etc.) for display--  // durational things-  FixedVector<int, NUM_DURATIONS> duration;--  int rotting;--  int berserk_penalty;                // penalty for moving while berserk--  FixedVector<unsigned long, NUM_ATTRIBUTES> attribute;-  FixedVector<unsigned char, NUM_QUIVER> quiver; // default items for quiver-  FixedVector<long, NUM_OBJECT_CLASSES> sacrifice_value;--  undead_state_type is_undead;--  delay_queue_type delay_queue;       // pending actions--  FixedVector<unsigned char, 50>  skills;-  FixedVector<bool, 50>  practise_skill;-  FixedVector<unsigned int, 50>   skill_points;-  FixedVector<unsigned char, 50>  skill_order;--  skill_type sage_bonus_skill;  // If Sage is in effect, which skill it affects.-  int sage_bonus_degree;        // How much bonus XP to give in that skill.--  int  skill_cost_level;-  int  total_skill_points;-  int  exp_available;--  FixedArray<unsigned char, 6, 50> item_description;-  FixedVector<unique_item_status_type, MAX_UNRANDARTS> unique_items;-  FixedVector<bool, NUM_MONSTERS> unique_creatures;--  // NOTE: The kills member is a pointer to a KillMaster object,-  // rather than the object itself, so that we can get away with-  // just a foward declare of the KillMaster class, rather than-  // having to #include kills.h and thus make every single .cc file-  // dependant on kills.h.  Having a pointer means that we have-  // to do our own implementations of copying the player object,-  // since the default implementations will lead to the kills member-  // pointing to freed memory, or worse yet lead to the same piece of-  // memory being freed twice.-  KillMaster* kills;--  level_area_type level_type;--  // Human-readable name for portal vault. Will be set to level_type_tag-  // if not explicitly set by the entry portal.-  std::string level_type_name;--  // Three-letter extension for portal vault bones files. Will be set-  // to first three letters of level_type_tag if not explicitly set by-  // the entry portal.-  std::string level_type_ext;--  // Abbreviation of portal vault name, for use in notes.  If not-  // explicitly set by the portal vault, will be set from level_type_name-  // or level_type_tag if either is short enough, or the shorter of the-  // two will be truncated if neither is short enough.-  std::string level_type_name_abbrev;--  // Item origin string for items from portal vaults, so that dumps-  // can have origins like "You found it in on level 2 of a ziggurat".-  // Will be set relative to level_type_name if not explicitly set.-  std::string level_type_origin;--  // .des file tag for portal vault-  std::string level_type_tag;--  entry_cause_type entry_cause;-  god_type         entry_cause_god;--  branch_type where_are_you;--  FixedVector<unsigned char, 30> branch_stairs;--  god_type religion;-  std::string second_god_name; // Random second name of Jiyva-  unsigned char piety;-  unsigned char piety_hysteresis;       // amount of stored-up docking-  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, NUM_MUTATIONS> mutation;-  FixedVector<unsigned char, NUM_MUTATIONS> demon_pow;-  unsigned char magic_contamination;--  FixedVector<bool, NUM_FIXED_BOOKS> had_book;-  FixedVector<bool, NUM_SPELLS>      seen_spell;--  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--  long          last_view_update;     // what turn was the view last updated?--  int           old_hunger;  // used for hunger delta-meter (see output.cc)--  // Set when the character is going to a new level, to guard against levgen-  // failures-  dungeon_feature_type transit_stair;-  bool entering_level;-  int lava_in_sight;       // Is there lava in LoS?-  int water_in_sight;      // Is there deep water in LoS?-#ifdef USE_TILE-  coord_def last_clicked_grid; // The map position the player last clicked on.-  int last_clicked_item; // The inventory cell the player last clicked on.-#endif--  // 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<ability_type, 52>  ability_letter_table; // ref to abil by enum--  std::set<std::string> uniq_map_tags;-  std::set<std::string> uniq_map_names;--  PlaceInfo global_info;-  player_quiver* m_quiver;--  int         escaped_death_cause;-  std::string escaped_death_aux;--protected:-  FixedVector<PlaceInfo, NUM_BRANCHES>             branch_info;-  FixedVector<PlaceInfo, NUM_LEVEL_AREA_TYPES - 1> non_branch_info;--public:-    player();-    player(const player &other);-    ~player();--    void copy_from(const player &other);--    void init();--    // Low-level move the player. Use this instead of changing pos directly.-    void moveto(const coord_def &c);-    // Move the player during an abyss shift.-    void shiftto(const coord_def &c);--    void reset_prev_move();--    bool in_water() const;-    bool can_swim() const;-    bool is_levitating() const;-    bool cannot_speak() const;-    bool invisible() const;-    bool can_see_invisible() const;-    bool visible_to(const actor *looker) const;-    bool can_see(const actor *target) const;-    bool is_icy() const;-    bool is_fiery() const;--    bool light_flight() const;-    bool travelling_light() const;--    kill_category kill_alignment() const;--    bool has_spell(spell_type spell) const;--    size_type transform_size(int psize = PSIZE_TORSO) const;-    std::string shout_verb() const;--    item_def *slot_item(equipment_type eq);--    // actor-    int id() const;-    int mindex() const;-    int       get_experience_level() const;-    actor_type atype() const { return ACT_PLAYER; }--    god_type  deity() const;-    bool      alive() const;-    bool      is_summoned(int* duration = NULL, int* summon_type = NULL) const;--    bool      swimming() const;-    bool      submerged() const;-    bool      floundering() const;-    bool      extra_balanced() const;-    bool      can_pass_through_feat(dungeon_feature_type grid) const;-    bool      is_habitable_feat(dungeon_feature_type actual_grid) const;-    size_type body_size(int psize = PSIZE_TORSO, bool base = false) const;-    int       body_weight() const;-    int       total_weight() const;-    int       damage_brand(int which_attack = -1);-    int       damage_type(int which_attack = -1);-    int       has_claws(bool allow_tran = true) const;-    bool      has_usable_claws(bool allow_tran = true) const;-    item_def *weapon(int which_attack = -1);-    item_def *shield();--    bool      can_wield(const item_def &item,-                        bool ignore_curse = false,-                        bool ignore_brand = false,-                        bool ignore_shield = false,-                        bool ignore_transform = false) const;-    bool      could_wield(const item_def &item,-                          bool ignore_brand = false,-                          bool ignore_transform = false) const;--    std::string name(description_level_type type,-                     bool force_visible = false) const;-    std::string pronoun(pronoun_type pro, bool force_visible = false) const;-    std::string conj_verb(const std::string &verb) const;-    std::string hand_name(bool plural, bool *can_plural = NULL) const;-    std::string foot_name(bool plural, bool *can_plural = NULL) const;-    std::string arm_name(bool plural, bool *can_plural = NULL) const;--    bool fumbles_attack(bool verbose = true);-    bool cannot_fight() const;--    void attacking(actor *other);-    bool can_go_berserk() const;-    bool can_go_berserk(bool verbose) const;-    void go_berserk(bool intentional);-    bool can_mutate() const;-    bool can_safely_mutate() const;-    bool can_bleed() const;-    bool mutate();-    void backlight();-    void banish(const std::string &who = "");-    void blink(bool allow_partial_control = true);-    void teleport(bool right_now = false, bool abyss_shift = false);-    void drain_stat(int stat, int amount, actor* attacker);--    void expose_to_element(beam_type element, int strength = 0);-    void god_conduct(conduct_type thing_done, int level);--    int hunger_level() const { return hunger_state; }-    void make_hungry(int nutrition, bool silent = true);-    void poison(actor *agent, int amount = 1);-    bool sicken(int amount);-    void paralyse(actor *, int str);-    void petrify(actor *, int str);-    void slow_down(actor *, int str);-    void confuse(actor *, int strength);-    void heal(int amount, bool max_too = false);-    bool drain_exp(actor *, bool quiet = false, int pow = 3);-    bool rot(actor *, int amount, int immediate = 0, bool quiet = false);-    int hurt(const actor *attacker, int amount,-             beam_type flavour = BEAM_MISSILE,-             bool cleanup_dead = true);--    int warding() const;--    int mons_species() const;--    mon_holy_type holiness() const;-    int res_fire() const;-    int res_steam() const;-    int res_cold() const;-    int res_elec() const;-    int res_poison() const;-    int res_rotting() const;-    int res_asphyx() const;-    int res_sticky_flame() const;-    int res_holy_energy(const actor *) const;-    int res_negative_energy() const;-    int res_torment() const;-    bool confusable() const;-    bool slowable() const;--    flight_type flight_mode() const;-    bool permanent_levitation() const;-    bool permanent_flight() const;--    bool paralysed() const;-    bool cannot_move() const;-    bool cannot_act() const;-    bool confused() const;-    bool caught() const;-    bool backlit(bool check_haloed = true) const;-    bool haloed() const;--    bool asleep() const;-    void put_to_sleep(int power = 0);-    void awake();-    void check_awaken(int disturbance);--    bool can_throw_large_rocks() const;--    int armour_class() const;-    int melee_evasion(const actor *attacker) const;--    int stat_hp() const     { return hp; }-    int stat_maxhp() const  { return hp_max; }--    int shield_bonus() const;-    int shield_block_penalty() const;-    int shield_bypass_ability(int tohit) const;--    void shield_block_succeeded();--    bool wearing_light_armour(bool with_skill = false) const;-    void exercise(skill_type skill, int qty);-    int  skill(skill_type skill, bool skill_bump = false) const;--    PlaceInfo& get_place_info() const ; // Current place info-    PlaceInfo& get_place_info(branch_type branch,-                              level_area_type level_type2) const;-    PlaceInfo& get_place_info(branch_type branch) const;-    PlaceInfo& get_place_info(level_area_type level_type2) const;--    void set_place_info(PlaceInfo info);-    // Returns copies of the PlaceInfo; modifying the vector won't-    // modify the player object.-    std::vector<PlaceInfo> get_all_place_info(bool visited_only = false,-                                              bool dungeon_only = false) const;--    bool do_shaft();--    bool did_escape_death() const;-    void reset_escaped_death();-protected:-    void base_moveto(const coord_def &c);-};--extern player you;  class monster_spells : public FixedVector<spell_type, NUM_MONSTER_SPELL_SLOTS> {@@ -1188,422 +569,8 @@ public: };  class ghost_demon;--class mon_enchant-{-public:-    enchant_type  ench;-    int           degree;-    int           duration, maxduration;-    kill_category who;      // Who set this enchantment?--public:-    mon_enchant(enchant_type e = ENCH_NONE, int deg = 0,-                kill_category whose = KC_OTHER,-                int dur = 0);--    killer_type killer() const;-    int kill_agent() const;--    operator std::string () const;-    const char *kill_category_desc(kill_category) const;-    void merge_killer(kill_category who);-    void cap_degree();--    void set_duration(const monsters *mons, const mon_enchant *exist);--    bool operator < (const mon_enchant &other) const-    {-        return (ench < other.ench);-    }--    bool operator == (const mon_enchant &other) const-    {-        // NOTE: This does *not* check who/degree.-        return (ench == other.ench);-    }--    mon_enchant &operator += (const mon_enchant &other);-    mon_enchant operator + (const mon_enchant &other) const;--private:-    int modded_speed(const monsters *mons, int hdplus) const;-    int calc_duration(const monsters *mons, const mon_enchant *added) const;-};--typedef std::map<enchant_type, mon_enchant> mon_enchant_list;--struct monsterentry;--class monsters : public actor-{-public:-    monsters();-    monsters(const monsters &other);-    ~monsters();--    monsters &operator = (const monsters &other);-    void reset();--public:-    std::string mname;--    int type;-    int hit_points;-    int max_hit_points;-    int hit_dice;-    int ac;-    int ev;-    int speed;-    int speed_increment;--    coord_def target;-    coord_def patrol_point;-    mutable montravel_target_type travel_target;-    std::vector<coord_def> travel_path;-    FixedVector<short, NUM_MONSTER_SLOTS> inv;-    monster_spells spells;-    mon_attitude_type attitude;-    beh_type behaviour;-    unsigned short foe;-    char ench_countdown;-    mon_enchant_list enchantments;-    unsigned long flags;               // bitfield of boolean flags--    unsigned long experience;-    monster_type  base_monster;        // zombie base monster, draconian colour-    unsigned int  number;              // #heads (hydra), etc.-    int           colour;--    int foe_memory;                    // how long to 'remember' foe x,y-                                       // once they go out of sight.--    int shield_blocks;                 // Count of shield blocks this round.--    god_type god;                      // What god the monster worships, if-                                       // any.--    std::auto_ptr<ghost_demon> ghost;  // Ghost information.--    std::string seen_context;          // Non-standard context for-                                       // AI_SEE_MONSTER--public:-    mon_attitude_type temp_attitude() const;--    // Returns true if the monster is named with a proper name, or is-    // a player ghost.-    bool is_named() const;--    // Does this monster have a base name, i.e. is base_name() != name().-    // See base_name() for details.-    bool has_base_name() const;--    const monsterentry *find_monsterentry() const;--    void init_experience();--    void mark_summoned(int longevity, bool mark_items_summoned,-                       int summon_type = 0);-    bool is_summoned(int* duration = NULL, int* summon_type = NULL) const;-    bool has_action_energy() const;-    void check_redraw(const coord_def &oldpos) const;-    void apply_location_effects(const coord_def &oldpos);--    void moveto(const coord_def& c);-    bool move_to_pos(const coord_def &newpos);--    kill_category kill_alignment() const;--    int  foe_distance() const;-    bool needs_berserk(bool check_spells = true) const;--    // Has a hydra-like variable number of attacks based on mons->number.-    bool has_hydra_multi_attack() const;-    bool has_multitargeting() const;--    bool has_ench(enchant_type ench) const;-    bool has_ench(enchant_type ench, enchant_type ench2) const;-    mon_enchant get_ench(enchant_type ench,-                         enchant_type ench2 = ENCH_NONE) const;-    bool add_ench(const mon_enchant &);-    void update_ench(const mon_enchant &);-    bool del_ench(enchant_type ench, bool quiet = false, bool effect = true);-    bool lose_ench_duration(const mon_enchant &e, int levels);-    bool lose_ench_levels(const mon_enchant &e, int lev);-    void lose_energy(energy_use_type et, int div = 1, int mult = 1);--    void scale_hp(int num, int den);-    bool gain_exp(int exp);--    void react_to_damage(int damage, beam_type flavour, kill_category whose);--    void forget_random_spell();--    void add_enchantment_effect(const mon_enchant &me, bool quiet = false);-    void remove_enchantment_effect(const mon_enchant &me, bool quiet = false);-    void apply_enchantments();-    void apply_enchantment(const mon_enchant &me);--    bool can_drink_potion(potion_type ptype) const;-    bool should_drink_potion(potion_type ptype) const;-    item_type_id_state_type drink_potion_effect(potion_type ptype);--    void timeout_enchantments(int levels);--    bool is_travelling() const;-    bool is_patrolling() const;-    bool needs_transit() const;-    void set_transit(const level_id &destination);-    bool find_place_to_live(bool near_player = false);-    bool find_home_near_place(const coord_def &c);-    bool find_home_near_player();-    bool find_home_around(const coord_def &c, int radius);-    bool find_home_anywhere();--    void set_ghost(const ghost_demon &ghost, bool has_name = true);-    void ghost_init();-    void pandemon_init();-    void uglything_init(bool only_mutate = false);-    void uglything_mutate();-    void uglything_upgrade();-    void destroy_inventory();-    void load_spells(mon_spellbook_type spellbook);--    actor *get_foe() const;--    // actor interface-    int id() const;-    int mindex() const;-    int       get_experience_level() const;-    god_type  deity() const;-    bool      alive() const;-    bool      swimming() const;-    bool      wants_submerge() const;--    bool      submerged() const;-    bool      can_drown() const;-    bool      floundering() const;-    bool      extra_balanced() const;-    bool      can_pass_through_feat(dungeon_feature_type grid) const;-    bool      is_habitable_feat(dungeon_feature_type actual_grid) const;-    size_type body_size(int psize = PSIZE_TORSO, bool base = false) const;-    int       body_weight() const;-    int       total_weight() const;-    int       damage_brand(int which_attack = -1);-    int       damage_type(int which_attack = -1);--    item_def *slot_item(equipment_type eq);-    item_def *mslot_item(mon_inv_type sl) const;-    item_def *weapon(int which_attack = -1);-    item_def *launcher();-    item_def *missiles();-    item_def *shield();--    bool      can_wield(const item_def &item,-                        bool ignore_curse = false,-                        bool ignore_brand = false,-                        bool ignore_shield = false,-                        bool ignore_transform = false) const;-    bool      could_wield(const item_def &item,-                          bool ignore_brand = false,-                          bool ignore_transform = false) const;--    int       missile_count();-    void      wield_melee_weapon(int near = -1);-    void      swap_weapons(int near = -1);--    bool      pickup_item(item_def &item, int near = -1, bool force = false);-    void      pickup_message(const item_def &item, int near);-    bool      pickup_wand(item_def &item, int near);-    bool      pickup_scroll(item_def &item, int near);-    bool      pickup_potion(item_def &item, int near);-    bool      pickup_gold(item_def &item, int near);-    bool      pickup_launcher(item_def &launcher, int near);-    bool      pickup_melee_weapon(item_def &item, int near);-    bool      pickup_throwable_weapon(item_def &item, int near);-    bool      pickup_weapon(item_def &item, int near, bool force);-    bool      pickup_armour(item_def &item, int near, bool force);-    bool      pickup_misc(item_def &item, int near);-    bool      pickup_missile(item_def &item, int near, bool force);-    void      equip(item_def &item, int slot, int near = -1);-    bool      unequip(item_def &item, int slot, int near = -1,-                      bool force = false);--    bool      can_use_missile(const item_def &item) const;--    std::string name(description_level_type type,-                     bool force_visible = false) const;--    // Base name of the monster, bypassing any mname setting. For an orc priest-    // named Arbolt, name() will return "Arbolt", but base_name() will return-    // "orc priest".-    std::string base_name(description_level_type type,-                          bool force_visible = false) const;-    // Full name of the monster.  For an orc priest named Arbolt, full_name()-    // will return "Arbolt the orc priest".-    std::string full_name(description_level_type type,-                          bool use_comma = false) const;-    std::string pronoun(pronoun_type pro, bool force_visible = false) const;-    std::string conj_verb(const std::string &verb) const;-    std::string hand_name(bool plural, bool *can_plural = NULL) const;-    std::string foot_name(bool plural, bool *can_plural = NULL) const;-    std::string arm_name(bool plural, bool *can_plural = NULL) const;--    bool fumbles_attack(bool verbose = true);-    bool cannot_fight() const;--    int  skill(skill_type skill, bool skill_bump = false) const;--    void attacking(actor *other);-    bool can_go_berserk() const;-    void go_berserk(bool intentional);-    bool can_mutate() const;-    bool can_safely_mutate() const;-    bool can_bleed() const;-    bool mutate();-    void banish(const std::string &who = "");-    void expose_to_element(beam_type element, int strength = 0);-    bool visible() const;--    int mons_species() const;--    mon_holy_type holiness() const;-    int res_fire() const;-    int res_steam() const;-    int res_cold() const;-    int res_elec() const;-    int res_poison() const;-    int res_rotting() const;-    int res_asphyx() const;-    int res_sticky_flame() const;-    int res_holy_energy(const actor *) const;-    int res_negative_energy() const;-    int res_torment() const;--    flight_type flight_mode() const;-    bool is_levitating() const;-    bool invisible() const;-    bool can_see_invisible() const;-    bool visible_to(const actor *looker) const;-    bool mon_see_cell(const coord_def& pos, bool reach = false) const;-    bool can_see(const actor *target) const;-    bool is_icy() const;-    bool is_fiery() const;-    bool paralysed() const;-    bool cannot_move() const;-    bool cannot_act() const;-    bool confused() const;-    bool confused_by_you() const;-    bool caught() const;-    bool asleep() const;-    bool backlit(bool check_haloed = true) const;-    bool haloed() const;--    bool has_spell(spell_type spell) const;--    bool has_attack_flavour(int flavour) const;-    bool has_damage_type(int dam_type);--    bool can_throw_large_rocks() const;--    int armour_class() const;-    int melee_evasion(const actor *attacker) const;--    void poison(actor *agent, int amount = 1);-    bool sicken(int strength);-    void paralyse(actor *, int str);-    void petrify(actor *, int str);-    void slow_down(actor *, int str);-    void confuse(actor *, int strength);-    bool drain_exp(actor *, bool quiet = false, int pow = 3);-    bool rot(actor *, int amount, int immediate = 0, bool quiet = false);-    int hurt(const actor *attacker, int amount,-             beam_type flavour = BEAM_MISSILE,-             bool cleanup_dead = true);-    void heal(int amount, bool max_too = false);-    void blink(bool allow_partial_control = true);-    void teleport(bool right_now = false, bool abyss_shift = false);--    void put_to_sleep(int power = 0);-    void check_awaken(int disturbance);--    int stat_hp() const    { return hit_points; }-    int stat_maxhp() const { return max_hit_points; }--    int shield_bonus() const;-    int shield_block_penalty() const;-    void shield_block_succeeded();-    int shield_bypass_ability(int tohit) const;--    actor_type atype() const { return ACT_MONSTER; }--    // Hacks, with a capital H.-    void fix_speed();-    void check_speed();-    void upgrade_type(monster_type after, bool adjust_hd, bool adjust_hp);--    std::string describe_enchantments() const;--    int action_energy(energy_use_type et) const;--    bool do_shaft();-    bool has_spell_of_type(unsigned) const;--private:-    void init_with(const monsters &mons);-    void swap_slots(mon_inv_type a, mon_inv_type b);-    bool need_message(int &near) const;-    bool level_up();-    bool level_up_change();-    bool pickup(item_def &item, int slot, int near, bool force_merge = false);-    void equip_weapon(item_def &item, int near, bool msg = true);-    void equip_armour(item_def &item, int near);-    void unequip_weapon(item_def &item, int near, bool msg = true);-    void unequip_armour(item_def &item, int near);--    bool decay_enchantment(const mon_enchant &me, bool decay_degree = true);--    bool drop_item(int eslot, int near);-    bool wants_weapon(const item_def &item) const;-    bool wants_armour(const item_def &item) const;-    void lose_pickup_energy();-    bool check_set_valid_home(const coord_def &place,-                              coord_def &chosen,-                              int &nvalid) const;-};--struct cloud_struct-{-    coord_def     pos;-    cloud_type    type;-    int           decay;-    unsigned char spread_rate;-    kill_category whose;-    killer_type   killer;--    cloud_struct() : pos(), type(CLOUD_NONE), decay(0), spread_rate(0),-                     whose(KC_OTHER), killer(KILL_NONE)-    {-    }--    void set_whose(kill_category _whose);-    void set_killer(killer_type _killer);--    static kill_category killer_to_whose(killer_type killer);-    static killer_type   whose_to_killer(kill_category whose);--};--struct shop_struct-{-    coord_def           pos;-    unsigned char       greed;-    shop_type           type;-    unsigned char       level;--    FixedVector<unsigned char, 3> keeper_name;-};+class actor;+class monsters;  struct trap_def {@@ -1686,82 +653,6 @@ private:     dgn_marker_map markers; }; -typedef FixedArray<dungeon_feature_type, GXM, GYM> feature_grid;-typedef FixedArray<unsigned, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER>-    env_show_grid;-class crawl_exit_hook;--struct crawl_environment-{-public:-    unsigned char rock_colour;-    unsigned char floor_colour;--    FixedVector< item_def, MAX_ITEMS >       item;  // item list-    FixedVector< monsters, MAX_MONSTERS >    mons;  // monster list--    feature_grid                             grid;  // terrain grid-    FixedArray< unsigned short, GXM, GYM >   mgrid; // monster grid-    FixedArray< int, GXM, GYM >              igrid; // item grid-    FixedArray< unsigned short, GXM, GYM >   cgrid; // cloud grid-    FixedArray< unsigned short, GXM, GYM >   grid_colours; // colour overrides--    FixedArray< map_cell, GXM, GYM >         map;    // discovered terrain--    // Glyphs of squares that are in LOS.-    env_show_grid show;--    // What would be visible, if all of the translucent wall were-    // made opaque.-    env_show_grid no_trans_show;--    FixedArray<unsigned short, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER>-                                             show_col;  // view window colour--#ifdef USE_TILE-    // indexed by grid coords-    FixedArray<tile_fg_store, GXM, GYM> tile_bk_fg;-    FixedArray<unsigned int, GXM, GYM> tile_bk_bg;-    FixedArray<tile_flavour, GXM, GYM> tile_flv;-    // indexed by (show-1) coords-    FixedArray<unsigned int, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER> tile_fg;-    FixedArray<unsigned int, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER> tile_bg;-    tile_flavour tile_default;-#endif--    FixedVector< cloud_struct, MAX_CLOUDS >  cloud; // cloud list-    unsigned char cloud_no;--    FixedVector< shop_struct, MAX_SHOPS >    shop;  // shop list-    FixedVector< trap_def, MAX_TRAPS >       trap;  // trap list--    FixedVector< monster_type, 20 >          mons_alloc;-    map_markers                              markers;--    // Place to associate arbitrary data with a particular level.-    // Sort of like player::attribute-    CrawlHashTable properties;--    // Rate at which random monsters spawn, with lower numbers making-    // them spawn more often (5 or less causes one to spawn about every-    // 5 turns).  Set to 0 to stop random generation.-    int spawn_random_rate;--    double elapsed_time; // used during level load--    // Number of turns the player has spent on this level.-    int turns_on_level;--    // Flags for things like preventing teleport control; see-    // level_flag_type in enum.h-    unsigned long level_flags;--    coord_def sanctuary_pos;-    int sanctuary_time;-};--extern struct crawl_environment env;- struct message_filter {     int             channel;        // Use -1 to match any channel.diff --git a/crawl-ref/source/los.cc b/crawl-ref/source/los.ccindex 235eed5..8213e82 100644--- a/crawl-ref/source/los.cc+++ b/crawl-ref/source/los.cc@@ -52,6 +52,7 @@ #include "directn.h" #include "externs.h" #include "losparam.h"+#include "player.h" #include "ray.h" #include "state.h" #include "stuff.h"diff --git a/crawl-ref/source/los.h b/crawl-ref/source/los.hindex a9e74a2..f7750e9 100644--- a/crawl-ref/source/los.h+++ b/crawl-ref/source/los.h@@ -6,7 +6,7 @@ #ifndef LOS_H #define LOS_H -#include "externs.h"+#include "env.h" #include "losparam.h"  #define EPSILON_VALUE 0.00001diff --git a/crawl-ref/source/mon-util.h b/crawl-ref/source/mon-util.hindex b10f483..afc4aac 100644--- a/crawl-ref/source/mon-util.h+++ b/crawl-ref/source/mon-util.h@@ -10,6 +10,8 @@  #include "externs.h" #include "enum.h"+#include "player.h"+#include "monster.h"  enum corpse_effect_type {diff --git a/crawl-ref/source/monster.h b/crawl-ref/source/monster.hnew file mode 100644index 0000000..b942b2d--- /dev/null+++ b/crawl-ref/source/monster.h@@ -0,0 +1,390 @@+#ifndef MONSTER_H+#define MONSTER_H++#include "actor.h"++class mon_enchant+{+public:+    enchant_type  ench;+    int           degree;+    int           duration, maxduration;+    kill_category who;      // Who set this enchantment?++public:+    mon_enchant(enchant_type e = ENCH_NONE, int deg = 0,+                kill_category whose = KC_OTHER,+                int dur = 0);++    killer_type killer() const;+    int kill_agent() const;++    operator std::string () const;+    const char *kill_category_desc(kill_category) const;+    void merge_killer(kill_category who);+    void cap_degree();++    void set_duration(const monsters *mons, const mon_enchant *exist);++    bool operator < (const mon_enchant &other) const+    {+        return (ench < other.ench);+    }++    bool operator == (const mon_enchant &other) const+    {+        // NOTE: This does *not* check who/degree.+        return (ench == other.ench);+    }++    mon_enchant &operator += (const mon_enchant &other);+    mon_enchant operator + (const mon_enchant &other) const;++private:+    int modded_speed(const monsters *mons, int hdplus) const;+    int calc_duration(const monsters *mons, const mon_enchant *added) const;+};++typedef std::map<enchant_type, mon_enchant> mon_enchant_list;++struct monsterentry;++class monsters : public actor+{+public:+    monsters();+    monsters(const monsters &other);+    ~monsters();++    monsters &operator = (const monsters &other);+    void reset();++public:+    std::string mname;++    int type;+    int hit_points;+    int max_hit_points;+    int hit_dice;+    int ac;+    int ev;+    int speed;+    int speed_increment;++    coord_def target;+    coord_def patrol_point;+    mutable montravel_target_type travel_target;+    std::vector<coord_def> travel_path;+    FixedVector<short, NUM_MONSTER_SLOTS> inv;+    monster_spells spells;+    mon_attitude_type attitude;+    beh_type behaviour;+    unsigned short foe;+    char ench_countdown;+    mon_enchant_list enchantments;+    unsigned long flags;               // bitfield of boolean flags++    unsigned long experience;+    monster_type  base_monster;        // zombie base monster, draconian colour+    unsigned int  number;              // #heads (hydra), etc.+    int           colour;++    int foe_memory;                    // how long to 'remember' foe x,y+                                       // once they go out of sight.++    int shield_blocks;                 // Count of shield blocks this round.++    god_type god;                      // What god the monster worships, if+                                       // any.++    std::auto_ptr<ghost_demon> ghost;  // Ghost information.++    std::string seen_context;          // Non-standard context for+                                       // AI_SEE_MONSTER++public:+    mon_attitude_type temp_attitude() const;++    // Returns true if the monster is named with a proper name, or is+    // a player ghost.+    bool is_named() const;++    // Does this monster have a base name, i.e. is base_name() != name().+    // See base_name() for details.+    bool has_base_name() const;++    const monsterentry *find_monsterentry() const;++    void init_experience();++    void mark_summoned(int longevity, bool mark_items_summoned,+                       int summon_type = 0);+    bool is_summoned(int* duration = NULL, int* summon_type = NULL) const;+    bool has_action_energy() const;+    void check_redraw(const coord_def &oldpos) const;+    void apply_location_effects(const coord_def &oldpos);++    void moveto(const coord_def& c);+    bool move_to_pos(const coord_def &newpos);++    kill_category kill_alignment() const;++    int  foe_distance() const;+    bool needs_berserk(bool check_spells = true) const;++    // Has a hydra-like variable number of attacks based on mons->number.+    bool has_hydra_multi_attack() const;+    bool has_multitargeting() const;++    bool has_ench(enchant_type ench) const;+    bool has_ench(enchant_type ench, enchant_type ench2) const;+    mon_enchant get_ench(enchant_type ench,+                         enchant_type ench2 = ENCH_NONE) const;+    bool add_ench(const mon_enchant &);+    void update_ench(const mon_enchant &);+    bool del_ench(enchant_type ench, bool quiet = false, bool effect = true);+    bool lose_ench_duration(const mon_enchant &e, int levels);+    bool lose_ench_levels(const mon_enchant &e, int lev);+    void lose_energy(energy_use_type et, int div = 1, int mult = 1);++    void scale_hp(int num, int den);+    bool gain_exp(int exp);++    void react_to_damage(int damage, beam_type flavour, kill_category whose);++    void forget_random_spell();++    void add_enchantment_effect(const mon_enchant &me, bool quiet = false);+    void remove_enchantment_effect(const mon_enchant &me, bool quiet = false);+    void apply_enchantments();+    void apply_enchantment(const mon_enchant &me);++    bool can_drink_potion(potion_type ptype) const;+    bool should_drink_potion(potion_type ptype) const;+    item_type_id_state_type drink_potion_effect(potion_type ptype);++    void timeout_enchantments(int levels);++    bool is_travelling() const;+    bool is_patrolling() const;+    bool needs_transit() const;+    void set_transit(const level_id &destination);+    bool find_place_to_live(bool near_player = false);+    bool find_home_near_place(const coord_def &c);+    bool find_home_near_player();+    bool find_home_around(const coord_def &c, int radius);+    bool find_home_anywhere();++    void set_ghost(const ghost_demon &ghost, bool has_name = true);+    void ghost_init();+    void pandemon_init();+    void uglything_init(bool only_mutate = false);+    void uglything_mutate();+    void uglything_upgrade();+    void destroy_inventory();+    void load_spells(mon_spellbook_type spellbook);++    actor *get_foe() const;++    // actor interface+    int id() const;+    int mindex() const;+    int       get_experience_level() const;+    god_type  deity() const;+    bool      alive() const;+    bool      swimming() const;+    bool      wants_submerge() const;++    bool      submerged() const;+    bool      can_drown() const;+    bool      floundering() const;+    bool      extra_balanced() const;+    bool      can_pass_through_feat(dungeon_feature_type grid) const;+    bool      is_habitable_feat(dungeon_feature_type actual_grid) const;+    size_type body_size(int psize = PSIZE_TORSO, bool base = false) const;+    int       body_weight() const;+    int       total_weight() const;+    int       damage_brand(int which_attack = -1);+    int       damage_type(int which_attack = -1);++    item_def *slot_item(equipment_type eq);+    item_def *mslot_item(mon_inv_type sl) const;+    item_def *weapon(int which_attack = -1);+    item_def *launcher();+    item_def *missiles();+    item_def *shield();++    bool      can_wield(const item_def &item,+                        bool ignore_curse = false,+                        bool ignore_brand = false,+                        bool ignore_shield = false,+                        bool ignore_transform = false) const;+    bool      could_wield(const item_def &item,+                          bool ignore_brand = false,+                          bool ignore_transform = false) const;++    int       missile_count();+    void      wield_melee_weapon(int near = -1);+    void      swap_weapons(int near = -1);++    bool      pickup_item(item_def &item, int near = -1, bool force = false);+    void      pickup_message(const item_def &item, int near);+    bool      pickup_wand(item_def &item, int near);+    bool      pickup_scroll(item_def &item, int near);+    bool      pickup_potion(item_def &item, int near);+    bool      pickup_gold(item_def &item, int near);+    bool      pickup_launcher(item_def &launcher, int near);+    bool      pickup_melee_weapon(item_def &item, int near);+    bool      pickup_throwable_weapon(item_def &item, int near);+    bool      pickup_weapon(item_def &item, int near, bool force);+    bool      pickup_armour(item_def &item, int near, bool force);+    bool      pickup_misc(item_def &item, int near);+    bool      pickup_missile(item_def &item, int near, bool force);+    void      equip(item_def &item, int slot, int near = -1);+    bool      unequip(item_def &item, int slot, int near = -1,+                      bool force = false);++    bool      can_use_missile(const item_def &item) const;++    std::string name(description_level_type type,+                     bool force_visible = false) const;++    // Base name of the monster, bypassing any mname setting. For an orc priest+    // named Arbolt, name() will return "Arbolt", but base_name() will return+    // "orc priest".+    std::string base_name(description_level_type type,+                          bool force_visible = false) const;+    // Full name of the monster.  For an orc priest named Arbolt, full_name()+    // will return "Arbolt the orc priest".+    std::string full_name(description_level_type type,+                          bool use_comma = false) const;+    std::string pronoun(pronoun_type pro, bool force_visible = false) const;+    std::string conj_verb(const std::string &verb) const;+    std::string hand_name(bool plural, bool *can_plural = NULL) const;+    std::string foot_name(bool plural, bool *can_plural = NULL) const;+    std::string arm_name(bool plural, bool *can_plural = NULL) const;++    bool fumbles_attack(bool verbose = true);+    bool cannot_fight() const;++    int  skill(skill_type skill, bool skill_bump = false) const;++    void attacking(actor *other);+    bool can_go_berserk() const;+    void go_berserk(bool intentional);+    bool can_mutate() const;+    bool can_safely_mutate() const;+    bool can_bleed() const;+    bool mutate();+    void banish(const std::string &who = "");+    void expose_to_element(beam_type element, int strength = 0);+    bool visible() const;++    int mons_species() const;++    mon_holy_type holiness() const;+    int res_fire() const;+    int res_steam() const;+    int res_cold() const;+    int res_elec() const;+    int res_poison() const;+    int res_rotting() const;+    int res_asphyx() const;+    int res_sticky_flame() const;+    int res_holy_energy(const actor *) const;+    int res_negative_energy() const;+    int res_torment() const;++    flight_type flight_mode() const;+    bool is_levitating() const;+    bool invisible() const;+    bool can_see_invisible() const;+    bool visible_to(const actor *looker) const;+    bool mon_see_cell(const coord_def& pos, bool reach = false) const;+    bool can_see(const actor *target) const;+    bool is_icy() const;+    bool is_fiery() const;+    bool paralysed() const;+    bool cannot_move() const;+    bool cannot_act() const;+    bool confused() const;+    bool confused_by_you() const;+    bool caught() const;+    bool asleep() const;+    bool backlit(bool check_haloed = true) const;+    bool haloed() const;++    bool has_spell(spell_type spell) const;++    bool has_attack_flavour(int flavour) const;+    bool has_damage_type(int dam_type);++    bool can_throw_large_rocks() const;++    int armour_class() const;+    int melee_evasion(const actor *attacker) const;++    void poison(actor *agent, int amount = 1);+    bool sicken(int strength);+    void paralyse(actor *, int str);+    void petrify(actor *, int str);+    void slow_down(actor *, int str);+    void confuse(actor *, int strength);+    bool drain_exp(actor *, bool quiet = false, int pow = 3);+    bool rot(actor *, int amount, int immediate = 0, bool quiet = false);+    int hurt(const actor *attacker, int amount,+             beam_type flavour = BEAM_MISSILE,+             bool cleanup_dead = true);+    void heal(int amount, bool max_too = false);+    void blink(bool allow_partial_control = true);+    void teleport(bool right_now = false, bool abyss_shift = false);++    void put_to_sleep(int power = 0);+    void check_awaken(int disturbance);++    int stat_hp() const    { return hit_points; }+    int stat_maxhp() const { return max_hit_points; }++    int shield_bonus() const;+    int shield_block_penalty() const;+    void shield_block_succeeded();+    int shield_bypass_ability(int tohit) const;++    actor_type atype() const { return ACT_MONSTER; }++    // Hacks, with a capital H.+    void fix_speed();+    void check_speed();+    void upgrade_type(monster_type after, bool adjust_hd, bool adjust_hp);++    std::string describe_enchantments() const;++    int action_energy(energy_use_type et) const;++    bool do_shaft();+    bool has_spell_of_type(unsigned) const;++private:+    void init_with(const monsters &mons);+    void swap_slots(mon_inv_type a, mon_inv_type b);+    bool need_message(int &near) const;+    bool level_up();+    bool level_up_change();+    bool pickup(item_def &item, int slot, int near, bool force_merge = false);+    void equip_weapon(item_def &item, int near, bool msg = true);+    void equip_armour(item_def &item, int near);+    void unequip_weapon(item_def &item, int near, bool msg = true);+    void unequip_armour(item_def &item, int near);++    bool decay_enchantment(const mon_enchant &me, bool decay_degree = true);++    bool drop_item(int eslot, int near);+    bool wants_weapon(const item_def &item) const;+    bool wants_armour(const item_def &item) const;+    void lose_pickup_energy();+    bool check_set_valid_home(const coord_def &place,+                              coord_def &chosen,+                              int &nvalid) const;+};++#endifdiff --git a/crawl-ref/source/place.cc b/crawl-ref/source/place.ccindex 0e64253..9322716 100644--- a/crawl-ref/source/place.cc+++ b/crawl-ref/source/place.cc@@ -7,9 +7,10 @@ #include "AppHdr.h"  #include "externs.h"-#include "place.h"  #include "branch.h"+#include "place.h"+#include "player.h" #include "travel.h"  // Do not attempt to use level_id if level_type != LEVEL_DUNGEONdiff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.ccindex fdd0887..0db294e 100644--- a/crawl-ref/source/player.cc+++ b/crawl-ref/source/player.cc@@ -20,8 +20,6 @@ #include <sstream> #include <algorithm> -#include "externs.h"- #include "artefact.h" #include "branch.h" #include "cloud.h"diff --git a/crawl-ref/source/player.h b/crawl-ref/source/player.hindex ae164cb..6aefbcb 100644--- a/crawl-ref/source/player.h+++ b/crawl-ref/source/player.h@@ -8,7 +8,7 @@ #ifndef PLAYER_H #define PLAYER_H -#include "externs.h"+#include "actor.h" #include "itemprop.h"  #ifdef USE_TILE@@ -25,6 +25,452 @@ struct dolls_data }; #endif +class player : public actor+{+public:+  bool turn_is_over; // flag signaling that player has performed a timed action++  // If true, player is headed to the Abyss.+  bool banished;+  std::string banished_by;++  std::vector<int> mesmerised_by; // monsters mesmerising player++  int  friendly_pickup;       // pickup setting for allies++  unsigned short prev_targ;+  coord_def      prev_grd_targ;+  char your_name[kNameLen];++  species_type species;+  job_type char_class;++  // 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;++  runrest running;            // Nonzero if running/traveling.++  unsigned short unrand_reacts;++  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;++  coord_def youpos;++  coord_def prev_move;++  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;+  stat_type last_chosen;++  char hunger_state;++  bool wield_change;          // redraw weapon+  bool redraw_quiver;         // redraw quiver+  bool received_weapon_warning;++  unsigned long redraw_status_flags;++  // PC's symbol (usually @) and colour.+  int symbol;+  int colour;++  bool redraw_hit_points;+  bool redraw_magic_points;+  bool redraw_strength;+  bool redraw_intelligence;+  bool redraw_dexterity;+  bool redraw_experience;+  bool redraw_armour_class;+  bool redraw_evasion;++  unsigned char flash_colour;++  unsigned char hit_points_regeneration;+  unsigned char magic_points_regeneration;++  unsigned long experience;+  int experience_level;+  int gold;+  char class_name[30];+  int time_taken;++  int shield_blocks;         // number of shield blocks since last action++  FixedVector< item_def, ENDOFPACK > inv;++  int burden;+  burden_state_type burden_state;+  FixedVector<spell_type, 25> spells;+  char spell_no;+  game_direction_type char_direction;+  bool opened_zot;+  bool royal_jelly_dead;+  bool transform_cancellable;++  unsigned short pet_target;++  int your_level; // offset by one (-1 == 0, 0 == 1, etc.) for display++  // durational things+  FixedVector<int, NUM_DURATIONS> duration;++  int rotting;++  int berserk_penalty;                // penalty for moving while berserk++  FixedVector<unsigned long, NUM_ATTRIBUTES> attribute;+  FixedVector<unsigned char, NUM_QUIVER> quiver; // default items for quiver+  FixedVector<long, NUM_OBJECT_CLASSES> sacrifice_value;++  undead_state_type is_undead;++  delay_queue_type delay_queue;       // pending actions++  FixedVector<unsigned char, 50>  skills;+  FixedVector<bool, 50>  practise_skill;+  FixedVector<unsigned int, 50>   skill_points;+  FixedVector<unsigned char, 50>  skill_order;++  skill_type sage_bonus_skill;  // If Sage is in effect, which skill it affects.+  int sage_bonus_degree;        // How much bonus XP to give in that skill.++  int  skill_cost_level;+  int  total_skill_points;+  int  exp_available;++  FixedArray<unsigned char, 6, 50> item_description;+  FixedVector<unique_item_status_type, MAX_UNRANDARTS> unique_items;+  FixedVector<bool, NUM_MONSTERS> unique_creatures;++  // NOTE: The kills member is a pointer to a KillMaster object,+  // rather than the object itself, so that we can get away with+  // just a foward declare of the KillMaster class, rather than+  // having to #include kills.h and thus make every single .cc file+  // dependant on kills.h.  Having a pointer means that we have+  // to do our own implementations of copying the player object,+  // since the default implementations will lead to the kills member+  // pointing to freed memory, or worse yet lead to the same piece of+  // memory being freed twice.+  KillMaster* kills;++  level_area_type level_type;++  // Human-readable name for portal vault. Will be set to level_type_tag+  // if not explicitly set by the entry portal.+  std::string level_type_name;++  // Three-letter extension for portal vault bones files. Will be set+  // to first three letters of level_type_tag if not explicitly set by+  // the entry portal.+  std::string level_type_ext;++  // Abbreviation of portal vault name, for use in notes.  If not+  // explicitly set by the portal vault, will be set from level_type_name+  // or level_type_tag if either is short enough, or the shorter of the+  // two will be truncated if neither is short enough.+  std::string level_type_name_abbrev;++  // Item origin string for items from portal vaults, so that dumps+  // can have origins like "You found it in on level 2 of a ziggurat".+  // Will be set relative to level_type_name if not explicitly set.+  std::string level_type_origin;++  // .des file tag for portal vault+  std::string level_type_tag;++  entry_cause_type entry_cause;+  god_type         entry_cause_god;++  branch_type where_are_you;++  FixedVector<unsigned char, 30> branch_stairs;++  god_type religion;+  std::string second_god_name; // Random second name of Jiyva+  unsigned char piety;+  unsigned char piety_hysteresis;       // amount of stored-up docking+  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, NUM_MUTATIONS> mutation;+  FixedVector<unsigned char, NUM_MUTATIONS> demon_pow;+  unsigned char magic_contamination;++  FixedVector<bool, NUM_FIXED_BOOKS> had_book;+  FixedVector<bool, NUM_SPELLS>      seen_spell;++  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++  long          last_view_update;     // what turn was the view last updated?++  int           old_hunger;  // used for hunger delta-meter (see output.cc)++  // Set when the character is going to a new level, to guard against levgen+  // failures+  dungeon_feature_type transit_stair;+  bool entering_level;+  int lava_in_sight;       // Is there lava in LoS?+  int water_in_sight;      // Is there deep water in LoS?+#ifdef USE_TILE+  coord_def last_clicked_grid; // The map position the player last clicked on.+  int last_clicked_item; // The inventory cell the player last clicked on.+#endif++  // 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<ability_type, 52>  ability_letter_table; // ref to abil by enum++  std::set<std::string> uniq_map_tags;+  std::set<std::string> uniq_map_names;++  PlaceInfo global_info;+  player_quiver* m_quiver;++  int         escaped_death_cause;+  std::string escaped_death_aux;++protected:+  FixedVector<PlaceInfo, NUM_BRANCHES>             branch_info;+  FixedVector<PlaceInfo, NUM_LEVEL_AREA_TYPES - 1> non_branch_info;++public:+    player();+    player(const player &other);+    ~player();++    void copy_from(const player &other);++    void init();++    // Low-level move the player. Use this instead of changing pos directly.+    void moveto(const coord_def &c);+    // Move the player during an abyss shift.+    void shiftto(const coord_def &c);++    void reset_prev_move();++    bool in_water() const;+    bool can_swim() const;+    bool is_levitating() const;+    bool cannot_speak() const;+    bool invisible() const;+    bool can_see_invisible() const;+    bool visible_to(const actor *looker) const;+    bool can_see(const actor *target) const;+    bool is_icy() const;+    bool is_fiery() const;++    bool light_flight() const;+    bool travelling_light() const;++    kill_category kill_alignment() const;++    bool has_spell(spell_type spell) const;++    size_type transform_size(int psize = PSIZE_TORSO) const;+    std::string shout_verb() const;++    item_def *slot_item(equipment_type eq);++    // actor+    int id() const;+    int mindex() const;+    int       get_experience_level() const;+    actor_type atype() const { return ACT_PLAYER; }++    god_type  deity() const;+    bool      alive() const;+    bool      is_summoned(int* duration = NULL, int* summon_type = NULL) const;++    bool      swimming() const;+    bool      submerged() const;+    bool      floundering() const;+    bool      extra_balanced() const;+    bool      can_pass_through_feat(dungeon_feature_type grid) const;+    bool      is_habitable_feat(dungeon_feature_type actual_grid) const;+    size_type body_size(int psize = PSIZE_TORSO, bool base = false) const;+    int       body_weight() const;+    int       total_weight() const;+    int       damage_brand(int which_attack = -1);+    int       damage_type(int which_attack = -1);+    int       has_claws(bool allow_tran = true) const;+    bool      has_usable_claws(bool allow_tran = true) const;+    item_def *weapon(int which_attack = -1);+    item_def *shield();++    bool      can_wield(const item_def &item,+                        bool ignore_curse = false,+                        bool ignore_brand = false,+                        bool ignore_shield = false,+                        bool ignore_transform = false) const;+    bool      could_wield(const item_def &item,+                          bool ignore_brand = false,+                          bool ignore_transform = false) const;++    std::string name(description_level_type type,+                     bool force_visible = false) const;+    std::string pronoun(pronoun_type pro, bool force_visible = false) const;+    std::string conj_verb(const std::string &verb) const;+    std::string hand_name(bool plural, bool *can_plural = NULL) const;+    std::string foot_name(bool plural, bool *can_plural = NULL) const;+    std::string arm_name(bool plural, bool *can_plural = NULL) const;++    bool fumbles_attack(bool verbose = true);+    bool cannot_fight() const;++    void attacking(actor *other);+    bool can_go_berserk() const;+    bool can_go_berserk(bool verbose) const;+    void go_berserk(bool intentional);+    bool can_mutate() const;+    bool can_safely_mutate() const;+    bool can_bleed() const;+    bool mutate();+    void backlight();+    void banish(const std::string &who = "");+    void blink(bool allow_partial_control = true);+    void teleport(bool right_now = false, bool abyss_shift = false);+    void drain_stat(int stat, int amount, actor* attacker);++    void expose_to_element(beam_type element, int strength = 0);+    void god_conduct(conduct_type thing_done, int level);++    int hunger_level() const { return hunger_state; }+    void make_hungry(int nutrition, bool silent = true);+    void poison(actor *agent, int amount = 1);+    bool sicken(int amount);+    void paralyse(actor *, int str);+    void petrify(actor *, int str);+    void slow_down(actor *, int str);+    void confuse(actor *, int strength);+    void heal(int amount, bool max_too = false);+    bool drain_exp(actor *, bool quiet = false, int pow = 3);+    bool rot(actor *, int amount, int immediate = 0, bool quiet = false);+    int hurt(const actor *attacker, int amount,+             beam_type flavour = BEAM_MISSILE,+             bool cleanup_dead = true);++    int warding() const;++    int mons_species() const;++    mon_holy_type holiness() const;+    int res_fire() const;+    int res_steam() const;+    int res_cold() const;+    int res_elec() const;+    int res_poison() const;+    int res_rotting() const;+    int res_asphyx() const;+    int res_sticky_flame() const;+    int res_holy_energy(const actor *) const;+    int res_negative_energy() const;+    int res_torment() const;+    bool confusable() const;+    bool slowable() const;++    flight_type flight_mode() const;+    bool permanent_levitation() const;+    bool permanent_flight() const;++    bool paralysed() const;+    bool cannot_move() const;+    bool cannot_act() const;+    bool confused() const;+    bool caught() const;+    bool backlit(bool check_haloed = true) const;+    bool haloed() const;++    bool asleep() const;+    void put_to_sleep(int power = 0);+    void awake();+    void check_awaken(int disturbance);++    bool can_throw_large_rocks() const;++    int armour_class() const;+    int melee_evasion(const actor *attacker) const;++    int stat_hp() const     { return hp; }+    int stat_maxhp() const  { return hp_max; }++    int shield_bonus() const;+    int shield_block_penalty() const;+    int shield_bypass_ability(int tohit) const;++    void shield_block_succeeded();++    bool wearing_light_armour(bool with_skill = false) const;+    void exercise(skill_type skill, int qty);+    int  skill(skill_type skill, bool skill_bump = false) const;++    PlaceInfo& get_place_info() const ; // Current place info+    PlaceInfo& get_place_info(branch_type branch,+                              level_area_type level_type2) const;+    PlaceInfo& get_place_info(branch_type branch) const;+    PlaceInfo& get_place_info(level_area_type level_type2) const;++    void set_place_info(PlaceInfo info);+    // Returns copies of the PlaceInfo; modifying the vector won't+    // modify the player object.+    std::vector<PlaceInfo> get_all_place_info(bool visited_only = false,+                                              bool dungeon_only = false) const;++    bool do_shaft();++    bool did_escape_death() const;+    void reset_escaped_death();+protected:+    void base_moveto(const coord_def &c);+};++extern player you;+ struct player_save_info {     std::string name;diff --git a/crawl-ref/source/religion.h b/crawl-ref/source/religion.hindex 971be5d..9445a4f 100644--- a/crawl-ref/source/religion.h+++ b/crawl-ref/source/religion.h@@ -9,8 +9,9 @@ #define RELIGION_H  #include "enum.h"-#include "ouch.h" #include "externs.h"+#include "ouch.h"+#include "player.h"  #define MAX_PIETY      200 #define HALF_MAX_PIETY (MAX_PIETY / 2)diff --git a/crawl-ref/source/shopping.h b/crawl-ref/source/shopping.hindex d577f67..0bbaae8 100644--- a/crawl-ref/source/shopping.h+++ b/crawl-ref/source/shopping.h@@ -11,11 +11,11 @@ #include "externs.h" #include "itemname.h" -int artefact_value( const item_def &item );+int artefact_value(const item_def &item);  // ident == true overrides the item ident level and gives the price // as if the item was fully id'd-unsigned int item_value( item_def item, bool ident = false );+unsigned int item_value(item_def item, bool ident = false); void shop();  shop_struct *get_shop(const coord_def& where);diff --git a/crawl-ref/source/spl-mis.h b/crawl-ref/source/spl-mis.hindex 43867f2..d322db7 100644--- a/crawl-ref/source/spl-mis.h+++ b/crawl-ref/source/spl-mis.h@@ -17,6 +17,7 @@ #include "enum.h"  #include "beam.h"+#include "monster.h" #include "mpr.h" #include "spl-util.h" diff --git a/crawl-ref/source/stash.h b/crawl-ref/source/stash.hindex 8a50b0d..e35ce2b 100644--- a/crawl-ref/source/stash.h+++ b/crawl-ref/source/stash.h@@ -16,6 +16,7 @@  #include "externs.h" #include "travel.h"+#include "player.h"  class input_history; class reader;diff --git a/crawl-ref/source/state.h b/crawl-ref/source/state.hindex e1d887f..74376b3 100644--- a/crawl-ref/source/state.h+++ b/crawl-ref/source/state.h@@ -8,6 +8,7 @@ #define STATE_H  #include "enum.h"+#include "player.h" #include <vector>  class monsters;diff --git a/crawl-ref/source/stuff.h b/crawl-ref/source/stuff.hindex 0591c07..67b9e11 100644--- a/crawl-ref/source/stuff.h+++ b/crawl-ref/source/stuff.h@@ -8,7 +8,8 @@ #ifndef STUFF_H #define STUFF_H -#include "externs.h"+#include "env.h"+#include "player.h" #include <map>  std::string make_time_string(time_t abs_time, bool terse = false);-- 1.6.1.2