diff options
author | Steve Melenchuk <smelenchuk@gmail.com> | 2014-03-05 13:50:02 -0700 |
---|---|---|
committer | Steve Melenchuk <smelenchuk@gmail.com> | 2014-03-05 13:50:02 -0700 |
commit | b6a43b45fbb775cf8ed0747e278c2a472a064ed3 (patch) | |
tree | a9dd9bd6867f80091e17c70bc5e1a28fa5a38f8f /crawl-ref/source/spl-damage.cc | |
parent | c1536bb781205169abacca5d6a9e04eaa76eac4e (diff) | |
download | crawl-ref-b6a43b45fbb775cf8ed0747e278c2a472a064ed3.tar.gz crawl-ref-b6a43b45fbb775cf8ed0747e278c2a472a064ed3.zip |
A couple of Static Discharge fixes related to monster casting.
The power was a lot lower than intended, and the player always benefited
from reduced damage no matter who was casting it - now the caster gets
the benefit of the reduced damage.
Diffstat (limited to 'crawl-ref/source/spl-damage.cc')
-rw-r--r-- | crawl-ref/source/spl-damage.cc | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/crawl-ref/source/spl-damage.cc b/crawl-ref/source/spl-damage.cc index f572e85bec..02109a04a0 100644 --- a/crawl-ref/source/spl-damage.cc +++ b/crawl-ref/source/spl-damage.cc @@ -1829,14 +1829,20 @@ void local_ignite_poison(coord_def pos, int pow, actor* agent) int discharge_monsters(coord_def where, int pow, int, actor *agent) { - monster* mons = monster_at(where); - int damage = 0; + actor* victim = actor_at(where); + + if (!victim) + return 0; + + int damage = (agent == victim) ? 1 + random2(3 + pow / 15) + : 3 + random2(5 + pow / 10 + + (random2(pow) / 10)); bolt beam; beam.flavour = BEAM_ELECTRICITY; // used for mons_adjust_flavoured dprf("Static discharge on (%d,%d) pow: %d", where.x, where.y, pow); - if (where == you.pos()) + if (victim->is_player()) { mpr("You are struck by lightning."); damage = 1 + random2(3 + pow / 15); @@ -1847,17 +1853,17 @@ int discharge_monsters(coord_def where, int pow, int, actor *agent) true, agent->is_player() ? "you" : agent->name(DESC_A).c_str()); } - else if (mons == NULL) - return 0; - else if (mons->res_elec() > 0) + else if (victim->res_elec() > 0) { // Shock serpents conduct electricity just fine. - if (mons->type != MONS_SHOCK_SERPENT) + if (victim->type != MONS_SHOCK_SERPENT) return 0; } else { - damage = 3 + random2(5 + pow / 10 + (random2(pow) / 10)); + monster* mons = victim->as_monster(); + ASSERT(mons); + dprf("%s: static discharge damage: %d", mons->name(DESC_PLAIN, true).c_str(), damage); damage = mons_adjust_flavoured(mons, beam, damage); |