summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/mon-stuff.h
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/mon-stuff.h')
-rw-r--r--crawl-ref/source/mon-stuff.h179
1 files changed, 179 insertions, 0 deletions
diff --git a/crawl-ref/source/mon-stuff.h b/crawl-ref/source/mon-stuff.h
new file mode 100644
index 0000000000..fe82988618
--- /dev/null
+++ b/crawl-ref/source/mon-stuff.h
@@ -0,0 +1,179 @@
+/*
+ * File: mon-stuff.h
+ * Summary: Misc monster related functions.
+ * Written by: Linley Henzell
+ */
+
+
+#ifndef MONSTUFF_H
+#define MONSTUFF_H
+
+#include "mon-util.h"
+
+enum mon_dam_level_type
+{
+ MDAM_OKAY,
+ MDAM_LIGHTLY_DAMAGED,
+ MDAM_MODERATELY_DAMAGED,
+ MDAM_HEAVILY_DAMAGED,
+ MDAM_SEVERELY_DAMAGED,
+ MDAM_ALMOST_DEAD,
+ MDAM_DEAD
+};
+
+enum mon_desc_type // things that cross categorical lines {dlb}
+{
+ MDSC_LEAVES_HIDE, // 0
+ MDSC_REGENERATES,
+ MDSC_NOMSG_WOUNDS
+};
+
+struct level_exit
+{
+ coord_def target;
+ bool unreachable;
+
+public:
+ level_exit(coord_def t = coord_def(-1, -1),
+ bool u = true)
+
+ : target(t), unreachable(u)
+ {
+ }
+};
+
+#define FRESHEST_CORPSE 210
+
+#define YOU_KILL(x) ((x) == KILL_YOU || (x) == KILL_YOU_MISSILE \
+ || (x) == KILL_YOU_CONF)
+#define MON_KILL(x) ((x) == KILL_MON || (x) == KILL_MON_MISSILE)
+
+#define SAME_ATTITUDE(x) (x->friendly() ? BEH_FRIENDLY : \
+ x->good_neutral() ? BEH_GOOD_NEUTRAL : \
+ x->strict_neutral() ? BEH_STRICT_NEUTRAL : \
+ x->neutral() ? BEH_NEUTRAL \
+ : BEH_HOSTILE)
+
+#define MONST_INTERESTING(x) (x->flags & MF_INTERESTING)
+
+// for definition of type monsters {dlb}
+#include "externs.h"
+
+void get_mimic_item( const monsters *mimic, item_def & item );
+int get_mimic_colour( const monsters *mimic );
+
+void alert_nearby_monsters(void);
+
+enum poly_power_type {
+ PPT_LESS,
+ PPT_MORE,
+ PPT_SAME
+};
+
+bool monster_polymorph(monsters *monster, monster_type targetc,
+ poly_power_type power = PPT_SAME,
+ bool force_beh = false);
+
+int monster_die(monsters *monster, killer_type killer,
+ int killer_index, bool silent = false, bool wizard = false);
+
+monster_type fill_out_corpse(const monsters* monster, item_def& corpse,
+ bool allow_weightless = false);
+
+bool explode_corpse(item_def& corpse, const coord_def& where);
+
+int place_monster_corpse(const monsters *monster, bool silent,
+ bool force = false);
+
+void slime_vault_change(bool glass);
+
+void slimify_monster(monsters *monster, bool hostile = false);
+
+bool mon_can_be_slimified(monsters *monster);
+
+void mons_check_pool(monsters *monster, const coord_def &oldpos,
+ killer_type killer = KILL_NONE, int killnum = -1);
+
+void monster_cleanup(monsters *monster);
+
+int dismiss_monsters(std::string pattern);
+
+bool curse_an_item(bool decay_potions, bool quiet = false);
+
+
+void monster_drop_ething(monsters *monster, bool mark_item_origins = false,
+ int owner_id = NON_ITEM);
+
+bool monster_blink(monsters *monster, bool quiet = false);
+
+bool simple_monster_message(const monsters *monster, const char *event,
+ msg_channel_type channel = MSGCH_PLAIN,
+ int param = 0,
+ description_level_type descrip = DESC_CAP_THE);
+
+bool choose_any_monster(const monsters* mon);
+monsters *choose_random_nearby_monster(
+ int weight,
+ bool (*suitable)(const monsters* mon) =
+ choose_any_monster,
+ bool in_sight = true,
+ bool prefer_named = false, bool prefer_priest = false);
+
+monsters *choose_random_monster_on_level(
+ int weight,
+ bool (*suitable)(const monsters* mon) =
+ choose_any_monster,
+ bool in_sight = true, bool near_by = false,
+ bool prefer_named = false, bool prefer_priest = false);
+
+bool swap_places(monsters *monster);
+bool swap_places(monsters *monster, const coord_def &loc);
+bool swap_check(monsters *monster, coord_def &loc, bool quiet = false);
+
+
+std::string get_wounds_description(const monsters *monster);
+void print_wounds(const monsters *monster);
+bool monster_descriptor(int which_class, mon_desc_type which_descriptor);
+
+unsigned int monster_index(const monsters *monster);
+
+void mons_get_damage_level(const monsters*, std::string& desc,
+ mon_dam_level_type&);
+
+void seen_monster(monsters *monster);
+
+bool shift_monster(monsters *mon, coord_def p = coord_def(0, 0));
+
+int mons_weapon_damage_rating(const item_def &launcher);
+int mons_missile_damage(monsters *mons, const item_def *launch,
+ const item_def *missile);
+int mons_pick_best_missile(monsters *mons, item_def **launcher,
+ bool ignore_melee = false);
+int mons_thrown_weapon_damage(const item_def *weap);
+
+int mons_natural_regen_rate(monsters *monster);
+
+void mons_relocated(monsters *mons);
+
+bool can_go_straight(const coord_def& p1, const coord_def& p2,
+ dungeon_feature_type allowed);
+
+bool is_item_jelly_edible(const item_def &item);
+
+bool monster_random_space(const monsters *monster, coord_def& target,
+ bool forbid_sanctuary = false);
+bool monster_random_space(monster_type mon, coord_def& target,
+ bool forbid_sanctuary = false);
+void monster_teleport(monsters *monster, bool instan, bool silent = false);
+void mons_clear_trapping_net(monsters *mon);
+
+bool mons_clonable(const monsters* orig, bool needs_adjacent = true);
+int clone_mons(const monsters* orig, bool quiet = false,
+ bool* obvious = NULL, coord_def pos = coord_def(0, 0) );
+
+std::string summoned_poof_msg(const monsters* monster, bool plural = false);
+std::string summoned_poof_msg(const int midx, const item_def &item);
+std::string summoned_poof_msg(const monsters* monster, const item_def &item);
+
+void pikel_band_neutralise();
+#endif