summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/beam.cc6
-rw-r--r--crawl-ref/source/dat/descript/items.txt3
-rw-r--r--crawl-ref/source/mon-util.cc14
-rw-r--r--crawl-ref/source/monstuff.cc2
4 files changed, 19 insertions, 6 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index 91a9c88d47..744a90480f 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -4734,8 +4734,10 @@ mon_resist_type bolt::try_enchant_monster(monsters *mon)
{
if (mons_immune_magic(mon))
return (MON_UNAFFECTED);
- if (check_mons_resist_magic(mon, ench_power))
- return (MON_RESIST);
+
+ if (flavour != BEAM_POLYMORPH || !mons_is_shapeshifter(mon))
+ if (check_mons_resist_magic(mon, ench_power))
+ return (MON_RESIST);
}
return (apply_enchantment_to_monster(mon));
diff --git a/crawl-ref/source/dat/descript/items.txt b/crawl-ref/source/dat/descript/items.txt
index 7bab35c043..7801d6ca10 100644
--- a/crawl-ref/source/dat/descript/items.txt
+++ b/crawl-ref/source/dat/descript/items.txt
@@ -1577,7 +1577,8 @@ A magical device which can render a creature immobile.
wand of polymorph other
A magical device which causes a creature to be transmogrified into
-another form. It doesn't work on you, so don't even try.
+another form. It is especially effective against shape-changing
+creatures. It doesn't work on you, so don't even try.
%%%%
wand of random effects
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index ed227e404c..14b9ddf7cc 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -2185,7 +2185,13 @@ static std::string _str_monam(const monsters& mon, description_level_type desc,
}
if ((mon.flags & MF_KNOWN_MIMIC) && mons_is_shapeshifter(&mon))
- result += " shaped shifter";
+ {
+ // If momentarily in original form, don't display "shaped shifter".
+ if (mons_genus(mon.type) != MONS_SHAPESHIFTER)
+ {
+ result += " shaped shifter";
+ }
+ }
// All done.
return result;
@@ -7810,6 +7816,12 @@ bool monsters::mutate()
if (!can_mutate())
return (false);
+ 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));
+
return (monster_polymorph(this, RANDOM_MONSTER));
}
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 3fda434b49..48145777e5 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -1926,8 +1926,6 @@ static bool _valid_morph( monsters *monster, int new_mclass )
|| mons_class_flag( new_mclass, M_NO_EXP_GAIN ) // not helpless
|| new_mclass == mons_species( monster->type ) // must be different
|| new_mclass == MONS_PROGRAM_BUG
- || new_mclass == MONS_SHAPESHIFTER
- || new_mclass == MONS_GLOWING_SHAPESHIFTER
// These require manual setting of mons.base_monster to indicate
// what they are a skeleton/zombie/simulacrum/spectral thing of,