summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/monstuff.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/monstuff.cc')
-rw-r--r--crawl-ref/source/monstuff.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 314782f8cc..7ba9fe67a0 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -2317,6 +2317,7 @@ bool monster_polymorph(monsters *monster, monster_type targetc,
mon_enchant neutral = monster->get_ench(ENCH_NEUTRAL);
mon_enchant shifter = monster->get_ench(ENCH_GLOWING_SHAPESHIFTER,
ENCH_SHAPESHIFTER);
+ mon_enchant sub = monster->get_ench(ENCH_SUBMERGED);
mon_enchant summon = monster->get_ench(ENCH_SUMMON);
mon_enchant tp = monster->get_ench(ENCH_TP);
@@ -2354,9 +2355,18 @@ bool monster_polymorph(monsters *monster, monster_type targetc,
monster->add_ench(charm);
monster->add_ench(neutral);
monster->add_ench(shifter);
+ monster->add_ench(sub);
monster->add_ench(summon);
monster->add_ench(tp);
+ // Allows for handling of submerged monsters which polymorph into
+ // monsters that can't submerge on this square.
+ if (sub.ench != ENCH_NONE
+ && !monster_can_submerge(monster, grd(monster->pos())))
+ {
+ monster->del_ench(sub);
+ }
+
monster->ench_countdown = old_ench_countdown;
if (mons_class_flag(monster->type, M_INVIS))