rendered paste bodyFrom 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