diff options
author | Ed Gonzalez <ed.gonzalez3@gmail.com> | 2013-06-29 04:25:38 -0700 |
---|---|---|
committer | Pete Hurst <pete@streamuniverse.tv> | 2013-06-29 13:06:30 +0100 |
commit | 0bb85b4f141f76f5ac675fb26968252bf504d8b3 (patch) | |
tree | 0fb7b65d0b9aafef6d74d92461e00c40b1e79e00 /crawl-ref/source/fineff.cc | |
parent | 6382b9ac15e1efb947f2d8b4960795e0de283172 (diff) | |
download | crawl-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.cc | 15 |
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() |