summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/art-func.h
diff options
context:
space:
mode:
authorreaverb <reaverb.Crawl@gmail.com>2014-06-21 01:42:51 -0400
committerreaverb <reaverb.Crawl@gmail.com>2014-06-21 02:06:33 -0400
commited8ba04e1629190c6c5c0db8fdf8240b4a20bb24 (patch)
tree666288d82583b53695c50e3e18e3bd45ce33950a /crawl-ref/source/art-func.h
parentbca73d33b73c9b59c5b138b2a49a3346f1711e01 (diff)
downloadcrawl-ref-ed8ba04e1629190c6c5c0db8fdf8240b4a20bb24.tar.gz
crawl-ref-ed8ba04e1629190c6c5c0db8fdf8240b4a20bb24.zip
Fix Wyrmbane not being enchanted on kills
The old code didn't work for several reasons (such as not reseting mondied despite possibly changing it). The new code awkwardly saves information before possibly killing the defender, so a better solution would be nice. Also contains some miscellaneous refactoring of the _WYRMBANE_melee_effects() function.
Diffstat (limited to 'crawl-ref/source/art-func.h')
-rw-r--r--crawl-ref/source/art-func.h37
1 files changed, 19 insertions, 18 deletions
diff --git a/crawl-ref/source/art-func.h b/crawl-ref/source/art-func.h
index a58c4e0bb7..f21d6ea3d3 100644
--- a/crawl-ref/source/art-func.h
+++ b/crawl-ref/source/art-func.h
@@ -683,46 +683,47 @@ static void _WYRMBANE_equip(item_def *item, bool *show_msgs, bool unmeld)
static void _WYRMBANE_melee_effects(item_def* weapon, actor* attacker,
actor* defender, bool mondied, int dam)
{
- if (is_dragonkind(defender) && !mondied)
+ if (!is_dragonkind(defender))
+ return;
+
+ // Since the target will become a DEAD MONSTER if it dies due to the extra
+ // damage to dragons, we need to grab this information now.
+ int hd = min(defender->as_monster()->hit_dice, 18);
+ string name = defender->name(DESC_THE);
+
+ if (!mondied)
{
mprf("<grey>%s %s!</grey>",
defender->name(DESC_THE).c_str(),
defender->conj_verb("convulse").c_str());
defender->hurt(attacker, 1 + random2(3*dam/2));
- }
- if (!mondied || !defender || !is_dragonkind(defender)
- || defender->is_summoned()
- || defender->is_monster()
- && testbits(defender->as_monster()->flags, MF_NO_REWARD))
- {
- return;
+ mondied = !defender->alive();
}
- if (defender->is_player())
+
+ if (!mondied || !defender || defender->is_summoned()
+ || (defender->is_monster()
+ && testbits(defender->as_monster()->flags, MF_NO_REWARD)))
{
- // can't currently happen even on a death blow
- mpr("<green>You see the lance glow as it kills you.</green>");
return;
}
+
// The cap can be reached by:
// * iron dragon, golden dragon, pearl dragon (18)
// * Xtahua (19)
// * bone dragon, Serpent of Hell (20)
// * Tiamat (22)
// * pghosts (up to 27)
- int hd = min(defender->as_monster()->hit_dice, 18);
dprf("Killed a drac with hd %d.", hd);
- bool boosted = false;
+
if (weapon->plus < hd)
{
weapon->plus++;
- boosted = true;
- }
- if (boosted)
- {
+
mprf("<green>The lance glows as it skewers %s.</green>",
- defender->name(DESC_THE).c_str());
+ name.c_str());
+
you.wield_change = true;
}
}