1 /**
2  * @file
3  * @brief Monster polymorph and mimic functions.
4 **/
5 
6 #pragma once
7 
8 #include "item-def.h"
9 #include "libutil.h" // always_true
10 
11 class monster;
12 
13 bool feature_mimic_at(const coord_def &c);
14 item_def* item_mimic_at(const coord_def &c);
15 bool mimic_at(const coord_def &c);
16 
17 #define ORIGINAL_TYPE_KEY "original_type"
18 const string POLY_SET_KEY = "poly_set";
19 
20 enum poly_power_type
21 {
22     PPT_LESS,
23     PPT_MORE,
24     PPT_SAME,
25     PPT_SLIME,
26 };
27 
28 void monster_drop_things(
29     monster* mons,
30     bool mark_item_origins = false,
31     bool (*suitable)(const item_def& item) = always_true<const item_def &>);
32 
33 void change_monster_type(monster* mons, monster_type targetc);
34 void init_poly_set(monster *mons);
35 bool monster_polymorph(monster* mons, monster_type targetc,
36                        poly_power_type power = PPT_SAME);
37 
38 void slimify_monster(monster* mons);
39 bool mon_can_be_slimified(const monster* mons);
40 
41 void seen_monster(monster* mons);
42