diff options
author | Charles Otto <ottochar@gmail.com> | 2009-11-06 20:13:02 -0500 |
---|---|---|
committer | Charles Otto <ottochar@gmail.com> | 2009-11-06 21:32:08 -0500 |
commit | 5ba6135921dfa9b9359466e40a2caec431d2cc58 (patch) | |
tree | 222ea579983ffe6c956c499e666a99c26defba09 | |
parent | 3a5f25a4a71abdf5d2ca747252fe926de65fa1f4 (diff) | |
download | crawl-ref-5ba6135921dfa9b9359466e40a2caec431d2cc58.tar.gz crawl-ref-5ba6135921dfa9b9359466e40a2caec431d2cc58.zip |
Generalize monster targeting of beneficial spells slightly.
-rw-r--r-- | crawl-ref/source/mon-cast.cc | 20 |
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) |