diff options
author | dolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-05-17 18:39:21 +0000 |
---|---|---|
committer | dolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-05-17 18:39:21 +0000 |
commit | ca99f58040d1fa4cc059913b000f2f0be4b27217 (patch) | |
tree | c86b0b07d2537119ffb0e7af31baf265fee4f389 /crawl-ref/source/fight.cc | |
parent | 8af40b84cbc2dec50a2a2244aca9d01344614b6a (diff) | |
download | crawl-ref-ca99f58040d1fa4cc059913b000f2f0be4b27217.tar.gz crawl-ref-ca99f58040d1fa4cc059913b000f2f0be4b27217.zip |
Fix crash when attacking a friendly monster in melee if it's abjured
(again).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5103 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/fight.cc')
-rw-r--r-- | crawl-ref/source/fight.cc | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc index 3db36c9e9a..d479f9316d 100644 --- a/crawl-ref/source/fight.cc +++ b/crawl-ref/source/fight.cc @@ -763,32 +763,35 @@ bool melee_attack::player_attack() hit_woke_orc = true; } - // always upset monster regardless of damage - behaviour_event(def, ME_WHACK, MHITYOU); - - if (damage_done > 0) + if (def->alive()) { - int blood - = _modify_blood_amount(damage_done, attacker->damage_type()); - if (blood > defender->stat_hp()) - blood = defender->stat_hp(); + // always upset monster regardless of damage + behaviour_event(def, ME_WHACK, MHITYOU); - bleed_onto_floor(where.x, where.y, defender->id(), blood, true); - } + if (damage_done > 0) + { + int blood = + _modify_blood_amount(damage_done, attacker->damage_type()); + if (blood > defender->stat_hp()) + blood = defender->stat_hp(); - if (damage_done > 0 || !defender_visible) - player_announce_hit(); - else if (!shield_blocked && damage_done <= 0) - { - no_damage_message = - make_stringf("You %s %s.", attack_verb.c_str(), - defender->name(DESC_NOCAP_THE).c_str()); - } + bleed_onto_floor(where.x, where.y, defender->id(), blood, true); + } - player_hurt_monster(); + if (damage_done > 0 || !defender_visible) + player_announce_hit(); + else if (!shield_blocked && damage_done <= 0) + { + no_damage_message = + make_stringf("You %s %s.", attack_verb.c_str(), + defender->name(DESC_NOCAP_THE).c_str()); + } + + player_hurt_monster(); - if (damage_done) - player_exercise_combat_skills(); + if (damage_done) + player_exercise_combat_skills(); + } if (player_check_monster_died()) return (true); @@ -2626,7 +2629,7 @@ void melee_attack::player_calc_hit_damage() // are stupidly powerful) -- GDL potential_damage += slaying_bonus(PWPN_DAMAGE); damage_done = - potential_damage > 0? one_chance_in(3) + random2(potential_damage) : 0; + potential_damage > 0 ? one_chance_in(3) + random2(potential_damage) : 0; damage_done = player_apply_weapon_skill(damage_done); damage_done = player_apply_fighting_skill(damage_done, false); damage_done = player_apply_misc_modifiers(damage_done); |