summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/fineff.cc
diff options
context:
space:
mode:
authorEd Gonzalez <ed.gonzalez3@gmail.com>2013-06-29 04:25:38 -0700
committerPete Hurst <pete@streamuniverse.tv>2013-06-29 13:06:30 +0100
commit0bb85b4f141f76f5ac675fb26968252bf504d8b3 (patch)
tree0fb7b65d0b9aafef6d74d92461e00c40b1e79e00 /crawl-ref/source/fineff.cc
parent6382b9ac15e1efb947f2d8b4960795e0de283172 (diff)
downloadcrawl-ref-0bb85b4f141f76f5ac675fb26968252bf504d8b3.tar.gz
crawl-ref-0bb85b4f141f76f5ac675fb26968252bf504d8b3.zip
Make Spectral Weapon damage sharing use a fineff.
This way the order of targets in an AoE shouldn't matter for the damage sharing leaving you with at least 1hp.
Diffstat (limited to 'crawl-ref/source/fineff.cc')
-rw-r--r--crawl-ref/source/fineff.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/crawl-ref/source/fineff.cc b/crawl-ref/source/fineff.cc
index 957ef47a46..f49b78e8cd 100644
--- a/crawl-ref/source/fineff.cc
+++ b/crawl-ref/source/fineff.cc
@@ -85,7 +85,7 @@ bool deferred_damage_fineff::mergeable(const final_effect &fe) const
{
const deferred_damage_fineff *o = dynamic_cast<const deferred_damage_fineff *>(&fe);
return o && att == o->att && def == o->def
- && attacker_effects == o->attacker_effects;
+ && attacker_effects == o->attacker_effects && fatal == o->fatal;
}
bool starcursed_merge_fineff::mergeable(const final_effect &fe) const
@@ -283,7 +283,20 @@ void blood_fineff::fire()
void deferred_damage_fineff::fire()
{
if (actor *df = defender())
+ {
+ if (!fatal)
+ {
+ // Cap non-fatal damage by the defender's hit points
+ // FIXME: Consider adding a 'fatal' parameter to ::hurt
+ // to better interact with damage reduction/boosts
+ // which may be applied later.
+ int df_hp = df->is_player() ? you.hp
+ : df->as_monster()->hit_points;
+ damage = min(damage, df_hp - 1);
+ }
+
df->hurt(attacker(), damage, BEAM_MISSILE, true, attacker_effects);
+ }
}
void starcursed_merge_fineff::fire()