summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCharles Otto <ottochar@gmail.com>2009-11-06 20:13:02 -0500
committerCharles Otto <ottochar@gmail.com>2009-11-06 21:32:08 -0500
commit5ba6135921dfa9b9359466e40a2caec431d2cc58 (patch)
tree222ea579983ffe6c956c499e666a99c26defba09
parent3a5f25a4a71abdf5d2ca747252fe926de65fa1f4 (diff)
downloadcrawl-ref-5ba6135921dfa9b9359466e40a2caec431d2cc58.tar.gz
crawl-ref-5ba6135921dfa9b9359466e40a2caec431d2cc58.zip
Generalize monster targeting of beneficial spells slightly.
-rw-r--r--crawl-ref/source/mon-cast.cc20
1 files changed, 19 insertions, 1 deletions
diff --git a/crawl-ref/source/mon-cast.cc b/crawl-ref/source/mon-cast.cc
index 0532925ca3..9742cb7aa5 100644
--- a/crawl-ref/source/mon-cast.cc
+++ b/crawl-ref/source/mon-cast.cc
@@ -119,6 +119,24 @@ static spell_type _draco_type_to_breath(int drac_type)
return (SPELL_DRACONIAN_BREATH);
}
+static bool _flavour_benefits_monster(beam_type flavour, monsters & monster)
+{
+ switch(flavour)
+ {
+ case BEAM_HASTE:
+ return (!monster.has_ench(ENCH_HASTE));
+
+ case BEAM_INVISIBILITY:
+ return (!monster.has_ench(ENCH_INVIS));
+
+ case BEAM_HEALING:
+ return (monster.hit_points != monster.max_hit_points);
+
+ default:
+ return false;
+ }
+}
+
// Find an allied monster to cast a beneficial beam spell at.
// Only used for haste other at the moment.
static bool _set_allied_target(monsters * caster, bolt & pbolt)
@@ -137,7 +155,7 @@ static bool _set_allied_target(monsters * caster, bolt & pbolt)
&& mons_genus(targ->type) == caster_genus
&& mons_atts_aligned(targ->attitude, caster->attitude)
&& !targ->has_ench(ENCH_CHARM)
- && !targ->has_ench(ENCH_HASTE))
+ && _flavour_benefits_monster(pbolt.flavour, *targ))
{
int targ_distance = grid_distance(targ->pos(), caster->pos());
if (targ_distance < min_distance && targ_distance < pbolt.range)