summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/spl-damage.cc
diff options
context:
space:
mode:
authorSteve Melenchuk <smelenchuk@gmail.com>2014-03-05 13:50:02 -0700
committerSteve Melenchuk <smelenchuk@gmail.com>2014-03-05 13:50:02 -0700
commitb6a43b45fbb775cf8ed0747e278c2a472a064ed3 (patch)
treea9dd9bd6867f80091e17c70bc5e1a28fa5a38f8f /crawl-ref/source/spl-damage.cc
parentc1536bb781205169abacca5d6a9e04eaa76eac4e (diff)
downloadcrawl-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.cc22
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);