summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/beam.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/beam.cc')
-rw-r--r--crawl-ref/source/beam.cc19
1 files changed, 17 insertions, 2 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index bc76bf2e5d..a9d8abf02c 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -2347,10 +2347,25 @@ bool check_line_of_sight( int sx, int sy, int tx, int ty )
*/
void mimic_alert(monsters *mimic)
{
+ bool should_id = !testbits(mimic->flags, MF_KNOWN_MIMIC)
+ && player_monster_visible(mimic) && mons_near(mimic);
+
+ // If we got here, we at least got a resists message, if not
+ // a full wounds printing. Thus, might as well id the mimic.
if (mimic->has_ench(ENCH_TP))
+ {
+ if (should_id)
+ mimic->flags |= MF_KNOWN_MIMIC;
+
return;
-
- monster_teleport( mimic, !one_chance_in(3) );
+ }
+
+ const bool instant_tele = !one_chance_in(3);
+ monster_teleport( mimic, instant_tele );
+
+ // at least for this short while, we know it's a mimic
+ if (!instant_tele && should_id)
+ mimic->flags |= MF_KNOWN_MIMIC;
} // end mimic_alert()
static bool _isBouncy(bolt &beam, unsigned char gridtype)