/* * File: mon-stuff.h * Summary: Misc monster related functions. * Written by: Linley Henzell */ #ifndef MONSTUFF_H #define MONSTUFF_H #include "mon-util.h" #define ORIG_MONSTER_KEY "orig_monster_key" 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" const item_def *give_mimic_item(monsters *mimic); const item_def &get_mimic_item(const monsters *mimic); 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 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); // Return your target, if it still exists and is visible to you. monsters *get_current_target(); 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, bool only_returning_weapons = false); 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(); bool mons_reaped(actor *killer, monsters *victim); #endif