diff options
author | Neil Moore <neil@s-z.org> | 2014-06-06 14:07:38 -0400 |
---|---|---|
committer | Neil Moore <neil@s-z.org> | 2014-06-06 14:07:38 -0400 |
commit | 530a46748e678357472234b27b346ec6585d48bb (patch) | |
tree | fcdd400362a161799cf22b92684cd36f6e1b7aea /crawl-ref/source/mon-project.cc | |
parent | 3b131ac1f04d4c04adf57e7db06b08c3af4da817 (diff) | |
download | crawl-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.cc | 17 |
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; |