summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/source/beam.cc13
-rw-r--r--crawl-ref/source/mon-util.cc7
2 files changed, 16 insertions, 4 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index 57af9eb18f..fc042aa19f 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -4885,9 +4885,20 @@ mon_resist_type bolt::try_enchant_monster(monsters *mon)
if (mons_immune_magic(mon))
return (MON_UNAFFECTED);
- if (flavour != BEAM_POLYMORPH || !mons_is_shapeshifter(mon))
+ // (Very) ugly things and shapeshifters will never resist
+ // polymorph beams.
+ if (flavour == BEAM_POLYMORPH
+ && (mon->type == MONS_UGLY_THING
+ || mon->type == MONS_VERY_UGLY_THING
+ || mons_is_shapeshifter(mon)))
+ {
+ ;
+ }
+ else
+ {
if (check_mons_resist_magic(mon, ench_power))
return (MON_RESIST);
+ }
}
return (apply_enchantment_to_monster(mon));
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 7b6f6eb296..0ae62e5f7f 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -585,10 +585,10 @@ bool mons_is_native_in_branch(const monsters *monster,
bool mons_is_chaotic(const monsters *mon)
{
- if (mons_is_shapeshifter(mon))
+ if (mon->type == MONS_UGLY_THING || mon->type == MONS_VERY_UGLY_THING)
return (true);
- if (mon->type == MONS_UGLY_THING || mon->type == MONS_VERY_UGLY_THING)
+ if (mons_is_shapeshifter(mon))
return (true);
if (mon->has_spell(SPELL_POLYMORPH_OTHER))
@@ -7959,9 +7959,10 @@ bool monsters::mutate()
return (true);
}
+ // Polymorphing a shapeshifter will make it revert to its original
+ // form.
if (this->has_ench(ENCH_GLOWING_SHAPESHIFTER))
return (monster_polymorph(this, MONS_GLOWING_SHAPESHIFTER));
-
if (this->has_ench(ENCH_SHAPESHIFTER))
return (monster_polymorph(this, MONS_SHAPESHIFTER));