summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/externs.h
diff options
context:
space:
mode:
authorRobert Vollmert <rvollmert@gmx.net>2009-10-19 16:12:04 +0200
committerRobert Vollmert <rvollmert@gmx.net>2009-10-21 14:42:01 +0200
commit36ac6df41458d10cf40fb837738b2f752bd05557 (patch)
treeab64c9b2f954ea3426aeafc6dff5068999ca9cab /crawl-ref/source/externs.h
parent83d597313c41858a8f7e65bb32534a785cf7ed55 (diff)
downloadcrawl-ref-36ac6df41458d10cf40fb837738b2f752bd05557.tar.gz
crawl-ref-36ac6df41458d10cf40fb837738b2f752bd05557.zip
Split actors and env from externs.h.
Diffstat (limited to 'crawl-ref/source/externs.h')
-rw-r--r--crawl-ref/source/externs.h1183
1 files changed, 39 insertions, 1144 deletions
diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h
index e040da7450..3b9ae64d08 100644
--- a/crawl-ref/source/externs.h
+++ b/crawl-ref/source/externs.h
@@ -75,6 +75,10 @@ const int kPathLen = 256;
// penalty (Xom's granted or from a deck of cards).
#define NO_BERSERK_PENALTY -1
+typedef FixedArray<dungeon_feature_type, GXM, GYM> feature_grid;
+typedef FixedArray<unsigned, ENV_SHOW_DIAMETER, ENV_SHOW_DIAMETER>
+ env_show_grid;
+
struct item_def;
class melee_attack;
struct coord_def;
@@ -225,213 +229,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 +246,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 +400,7 @@ public:
void load(reader&);
};
+
struct item_def
{
object_class_type base_type; // basic class (ie OBJ_WEAPON)
@@ -732,451 +562,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 +573,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 +657,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.