summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/mon-project.cc
diff options
context:
space:
mode:
authorNeil Moore <neil@s-z.org>2014-06-06 14:07:38 -0400
committerNeil Moore <neil@s-z.org>2014-06-06 14:07:38 -0400
commit530a46748e678357472234b27b346ec6585d48bb (patch)
treefcdd400362a161799cf22b92684cd36f6e1b7aea /crawl-ref/source/mon-project.cc
parent3b131ac1f04d4c04adf57e7db06b08c3af4da817 (diff)
downloadcrawl-ref-530a46748e678357472234b27b346ec6585d48bb.tar.gz
crawl-ref-530a46748e678357472234b27b346ec6585d48bb.zip
Properly credit kills from reflected IOOD (#3941)
Diffstat (limited to 'crawl-ref/source/mon-project.cc')
-rw-r--r--crawl-ref/source/mon-project.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/crawl-ref/source/mon-project.cc b/crawl-ref/source/mon-project.cc
index 4bc102353c..c06f3bd98e 100644
--- a/crawl-ref/source/mon-project.cc
+++ b/crawl-ref/source/mon-project.cc
@@ -244,6 +244,21 @@ static bool _iood_hit(monster& mon, const coord_def &pos, bool big_boom = false)
if (!caster) // caster is dead/gone, blame the orb itself (as its
caster = &mon; // friendliness is correct)
beam.set_agent(caster);
+ if (mon.props.exists("iood_reflector"))
+ {
+ beam.reflections = 1;
+
+ const mid_t refl_mid = mon.props["iood_reflector"].get_int64();
+
+ if (refl_mid == MID_PLAYER)
+ beam.reflector = NON_MONSTER;
+ else
+ {
+ // If the reflecting monster has died, credit the original caster.
+ const monster * const rmon = monster_by_mid(refl_mid);
+ beam.reflector = rmon ? rmon->mindex() : caster->mindex();
+ }
+ }
beam.colour = WHITE;
beam.glyph = dchar_glyph(DCHAR_FIRED_BURST);
beam.range = 1;
@@ -533,6 +548,8 @@ move_again:
}
victim->shield_block_succeeded(&mon);
+ // mid_t is unsigned so won't fit in a plain int
+ mon.props["iood_reflector"] = (int64_t) victim->mid;
mon.props["iood_vx"] = vx = -vx;
mon.props["iood_vy"] = vy = -vy;