diff options
author | DracoOmega <draco_omega@live.com> | 2013-07-29 16:32:30 -0230 |
---|---|---|
committer | DracoOmega <draco_omega@live.com> | 2013-07-30 15:08:16 -0230 |
commit | 20a8841cf3646f604d16340aa879a271bd81c914 (patch) | |
tree | 383cc202346b95620ce797b771d53106c6ea571b /crawl-ref/source/dactions.cc | |
parent | fd23a319141c1d6c4da4375ef1ad913ab0119c79 (diff) | |
download | crawl-ref-20a8841cf3646f604d16340aa879a271bd81c914.tar.gz crawl-ref-20a8841cf3646f604d16340aa879a271bd81c914.zip |
Change how Spirit Wolves work somewhat
While the very low per-turn chance of the wolves using their spirit howl
was intended to mean that a majority of packs would not use it at all
before being killed, in practice the randomness involved meant that
sometimes a player could be afflicted by the status several encounters in
a row. Worse, for a player with good defenses, the wolf attacks presented
little danger, but still took a very long time to stop. In general, this
could lead to them being an irritating encounter that nonetheless presented
little danger. This commit is aimed at trying to address this.
Spirit howl now lasts less time, but the spawning of packs within it happens
somewhat more rapidly. Spirit wolves themselves hit noticably harder and are
a little more accurate.
The wolves attracted by spirit howl no longer count as summons, but are
finite in number across all uses of spirit howl (ie: they represent the
rest of the spirit pack, attracted from outside the waking world). This has
a couple ramifications: there is now some reward for actually fighting them
instead of running away until they time out (yet one that cannot be farmed)
and (significantly) there is an upper limit on how many times the player has
to deal with this effect, instead of potentially having to deal with it over
and over and over again as one clears Forest.
Wolves within sight of the player no longer disappear when the howl ends,
though those out of view do (and are thus eligable to be called again by a
subsequent spirit howl), providing another tangible strategic advantage to
killing them instead of running away until they stop showing up.
Finally, there is also a lengthly cooldown after the effect ends before any
wolf can use it again (so there is no longer any chance for one to howl the
moment the first one expires)
Overall, the aim is that spirit howl occur less times in total, take up less
of the player's overall time, be a little less annoying in some ways, and also
provide more actual threat when it occurs.
This commit also fixes multiple bugs with the original implementation:
non-hostile wolves will no longer howl, placement will more properly respect
LoS instead of sometimes spawning them immediately in view, and some
pathfinding bugs that could cause wolves to not properly pursue the player
have been fixed.
Diffstat (limited to 'crawl-ref/source/dactions.cc')
-rw-r--r-- | crawl-ref/source/dactions.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/crawl-ref/source/dactions.cc b/crawl-ref/source/dactions.cc index a4359a826d..eb6428b161 100644 --- a/crawl-ref/source/dactions.cc +++ b/crawl-ref/source/dactions.cc @@ -119,6 +119,10 @@ bool mons_matches_daction(const monster* mon, daction_type act) && (mon->props.exists("kirke_band") || mon->props.exists(ORIG_MONSTER_KEY))); + case DACT_END_SPIRIT_HOWL: + return (mon->type == MONS_SPIRIT_WOLF + && mon->props.exists("howl_called")); + default: return false; } @@ -220,6 +224,15 @@ void apply_daction_to_mons(monster* mon, daction_type act, bool local) _daction_hog_to_human(mon); break; + case DACT_END_SPIRIT_HOWL: + if (!you.can_see(mon)) + { + // This wolf is available to be called again later + you.props["spirit_wolf_total"].get_int()++; + monster_die(mon, KILL_RESET, NON_MONSTER); + } + break; + // The other dactions do not affect monsters directly. default: break; @@ -248,6 +261,7 @@ static void _apply_daction(daction_type act) case DACT_HOLY_PETS_GO_NEUTRAL: case DACT_PIKEL_SLAVES: case DACT_KIRKE_HOGS: + case DACT_END_SPIRIT_HOWL: for (monster_iterator mi; mi; ++mi) { if (mons_matches_daction(*mi, act)) |