diff options
Diffstat (limited to 'crawl-ref/source/fight.cc')
-rw-r--r-- | crawl-ref/source/fight.cc | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc index 29176020ae..e9dc16ee95 100644 --- a/crawl-ref/source/fight.cc +++ b/crawl-ref/source/fight.cc @@ -320,6 +320,7 @@ melee_attack::melee_attack(actor *attk, actor *defn, did_hit(false), perceived_attack(false), obvious_effect(false), needs_message(false), attacker_visible(false), defender_visible(false), attacker_invisible(false), defender_invisible(false), + defender_starting_attitude(ATT_HOSTILE), unarmed_ok(allow_unarmed), attack_number(which_attack), to_hit(0), base_damage(0), potential_damage(0), damage_done(0), @@ -378,6 +379,17 @@ void melee_attack::init_attack() && see_grid(defender->pos())); needs_message = (attacker_visible || defender_visible); + if (defender && defender->atype() == ACT_MONSTER) + { + defender_starting_attitude = defender_as_monster()->temp_attitude(); + } + else + { + // Not really, but this is used for god conducts, + // so hostile is fine. + defender_starting_attitude = ATT_HOSTILE; + } + if (defender && defender->submerged()) unarmed_ok = false; @@ -1949,6 +1961,14 @@ void melee_attack::_monster_die(monsters* monster, killer_type killer, if (chaos) def_copy = new monsters(*monster); + // The monster is about to die, so restore its original attitude + // for the cleanup effects (god reactions.) This could be a + // problem if the "killing" is actually an Abyss banishment - we + // don't want to create permafriendlies this way - so don't do it + // then. + if (monster == defender && killer != KILL_RESET) + monster->attitude = defender_starting_attitude; + monster_die(monster, killer, killer_index); if (chaos) |