diff options
Diffstat (limited to 'crawl-ref/source/beam.cc')
-rw-r--r-- | crawl-ref/source/beam.cc | 19 |
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) |