summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-26 04:42:02 +0000
committerdolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2008-09-26 04:42:02 +0000
commit6a4ba1f08f5c5e0c33cf3b62b28028f94f49a73f (patch)
tree68df8d5b8b01afa28dc00708d032a78250f6a4e4
parent420aea8e0053218db36ff76f030e85fbe3841029 (diff)
downloadcrawl-ref-6a4ba1f08f5c5e0c33cf3b62b28028f94f49a73f.tar.gz
crawl-ref-6a4ba1f08f5c5e0c33cf3b62b28028f94f49a73f.zip
Simplify checking for monsters that are actually shapeshifters, and
don't allow those in orc form to become Beoghites' followers. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7006 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/Kills.cc3
-rw-r--r--crawl-ref/source/mon-util.cc7
-rw-r--r--crawl-ref/source/mon-util.h1
-rw-r--r--crawl-ref/source/monstuff.cc13
-rw-r--r--crawl-ref/source/view.cc1
-rw-r--r--crawl-ref/source/xom.cc8
6 files changed, 17 insertions, 16 deletions
diff --git a/crawl-ref/source/Kills.cc b/crawl-ref/source/Kills.cc
index 64b175fb4a..27d26c867d 100644
--- a/crawl-ref/source/Kills.cc
+++ b/crawl-ref/source/Kills.cc
@@ -613,8 +613,7 @@ kill_monster_desc::kill_monster_desc(const monsters *mon)
if (modifier != M_NORMAL)
monnum = mon->base_monster;
- if (mon->has_ench(ENCH_SHAPESHIFTER) ||
- mon->has_ench(ENCH_GLOWING_SHAPESHIFTER))
+ if (mons_is_shapeshifter(mon))
modifier = M_SHAPESHIFTER;
// XXX: Ugly hack - merge all mimics into one mimic record.
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 9d746d852d..b4dea05b05 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -479,7 +479,7 @@ bool mons_is_native_in_branch(const monsters *monster,
bool mons_is_chaotic(const monsters *mon)
{
- if (mon->has_ench(ENCH_GLOWING_SHAPESHIFTER, ENCH_SHAPESHIFTER))
+ if (mons_is_shapeshifter(mon))
return (true);
if (mon->has_spell(SPELL_POLYMORPH_OTHER))
@@ -2093,6 +2093,11 @@ bool mons_is_summoned(const monsters *m)
return (m->has_ench(ENCH_ABJ));
}
+bool mons_is_shapeshifter(const monsters *m)
+{
+ return (m->has_ench(ENCH_GLOWING_SHAPESHIFTER, ENCH_SHAPESHIFTER));
+}
+
// Does not check whether the monster can dual-wield - that is the
// caller's responsibility.
int mons_offhand_weapon_index(const monsters *m)
diff --git a/crawl-ref/source/mon-util.h b/crawl-ref/source/mon-util.h
index 1d3e7e6118..f0ccd48226 100644
--- a/crawl-ref/source/mon-util.h
+++ b/crawl-ref/source/mon-util.h
@@ -534,6 +534,7 @@ bool mons_wields_two_weapons(const monsters *m);
bool mons_wields_two_weapons(monster_type m);
bool mons_self_destructs(const monsters *m);
bool mons_is_summoned(const monsters *m);
+bool mons_is_shapeshifter(const monsters *m);
// last updated 12may2000 {dlb}
/* ***********************************************************************
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 84e1c9f75a..a91c82bb20 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -1602,7 +1602,7 @@ bool monster_polymorph(monsters *monster, monster_type targetc,
// Messaging.
bool can_see = you.can_see(monster);
- if (monster->has_ench(ENCH_GLOWING_SHAPESHIFTER, ENCH_SHAPESHIFTER))
+ if (mons_is_shapeshifter(monster))
str_polymon = " changes into ";
else if (targetc == MONS_PULSATING_LUMP)
str_polymon = " degenerates into ";
@@ -4907,12 +4907,12 @@ static bool _handle_spell(monsters *monster, bolt &beem)
return (false);
}
+ // Shapeshifters don't get spells.
if ((mons_class_flag(monster->type, M_ACTUAL_SPELLS)
|| mons_class_flag(monster->type, M_PRIEST))
- && monster->has_ench(ENCH_GLOWING_SHAPESHIFTER, ENCH_SHAPESHIFTER))
+ && mons_is_shapeshifter(monster))
{
- return (false); //jmf: shapeshifters don't get spells, just
- // physical powers.
+ return (false);
}
else if (monster->has_ench(ENCH_CONFUSION)
&& !mons_class_flag(monster->type, M_CONFUSED))
@@ -5381,9 +5381,8 @@ static bool _handle_throw(monsters *monster, bolt & beem)
static bool _handle_monster_spell(monsters *monster, bolt &beem)
{
// Shapeshifters don't get spells.
- if (!monster->has_ench( ENCH_GLOWING_SHAPESHIFTER,
- ENCH_SHAPESHIFTER )
- || !mons_class_flag( monster->type, M_ACTUAL_SPELLS ))
+ if (!mons_is_shapeshifter(monster)
+ || !mons_class_flag(monster->type, M_ACTUAL_SPELLS))
{
if (_handle_spell(monster, beem))
return (true);
diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc
index ba78faa667..97d6bc500d 100644
--- a/crawl-ref/source/view.cc
+++ b/crawl-ref/source/view.cc
@@ -826,6 +826,7 @@ void beogh_follower_convert(monsters *monster, bool orc_hit)
&& monster->foe == MHITYOU
&& mons_species(monster->type) == MONS_ORC
&& !mons_is_summoned(monster)
+ && !mons_is_shapeshifter(monster)
&& !testbits(monster->flags, MF_ATT_CHANGE_ATTEMPT)
&& !mons_friendly(monster)
&& mons_player_visible(monster) && !mons_is_sleeping(monster)
diff --git a/crawl-ref/source/xom.cc b/crawl-ref/source/xom.cc
index c91c8f9554..052b7d2f20 100644
--- a/crawl-ref/source/xom.cc
+++ b/crawl-ref/source/xom.cc
@@ -602,9 +602,7 @@ static bool _xom_is_good(int sever)
monster_polymorph(mon, RANDOM_MONSTER,
mons_wont_attack(mon) ? PPT_MORE : PPT_LESS, true);
- if (one_chance_in(8)
- && !mon->has_ench(
- ENCH_GLOWING_SHAPESHIFTER, ENCH_SHAPESHIFTER))
+ if (one_chance_in(8) && !mons_is_shapeshifter(mon))
{
mon->add_ench(one_chance_in(3) ?
ENCH_GLOWING_SHAPESHIFTER : ENCH_SHAPESHIFTER);
@@ -809,9 +807,7 @@ static bool _xom_is_bad(int sever)
monster_polymorph(mon, RANDOM_MONSTER,
mons_wont_attack(mon) ? PPT_LESS : PPT_MORE, true);
- if (one_chance_in(8)
- && !mon->has_ench(
- ENCH_GLOWING_SHAPESHIFTER, ENCH_SHAPESHIFTER))
+ if (one_chance_in(8) && !mons_is_shapeshifter(mon))
{
mon->add_ench(one_chance_in(3) ?
ENCH_GLOWING_SHAPESHIFTER : ENCH_SHAPESHIFTER);