summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authorevktalo <evktalo@c06c8d41-db1a-0410-9941-cceddc491573>2009-07-11 09:36:21 +0000
committerevktalo <evktalo@c06c8d41-db1a-0410-9941-cceddc491573>2009-07-11 09:36:21 +0000
commitfc0a7cb32ce86ecc0b19da03bd9c0254db003b8a (patch)
tree147f7a952eb67d5ae896e16dbf908cdcd13b9047 /crawl-ref
parent145a784f92e2ae637f097b04723d1b792c60bedb (diff)
downloadcrawl-ref-fc0a7cb32ce86ecc0b19da03bd9c0254db003b8a.tar.gz
crawl-ref-fc0a7cb32ce86ecc0b19da03bd9c0254db003b8a.zip
Implement FR#1756327: Polymorph other always works on shapeshifters, reverting them to their original form (they immediately polymorph again on their turn). Wand of polymorph other description mentions it being effective against shapechangers.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10143 c06c8d41-db1a-0410-9941-cceddc491573
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,