summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/fight.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/fight.cc')
-rw-r--r--crawl-ref/source/fight.cc20
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)