diff options
author | haranp <haranp@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-02-11 21:58:55 +0000 |
---|---|---|
committer | haranp <haranp@c06c8d41-db1a-0410-9941-cceddc491573> | 2009-02-11 21:58:55 +0000 |
commit | 66a5899fafcf34e1e473b4cbac42938ce90300bb (patch) | |
tree | ae6ef8639672874f08bba1fb2edd7760c5f09cec /crawl-ref/source/beam.cc | |
parent | f5ce15870a0d4ae042a704065df4d0cdbbda0506 (diff) | |
download | crawl-ref-66a5899fafcf34e1e473b4cbac42938ce90300bb.tar.gz crawl-ref-66a5899fafcf34e1e473b4cbac42938ce90300bb.zip |
Fix [2035741]: give different messages when an attack is completely
stopped by AC and when at least some of it bypasses AC but it is
completely stopped by resistance.
Fix bug where determine_damage() was ignoring AC.
Fix negative energy always being known even if it hits something
you can't see.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9027 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/beam.cc')
-rw-r--r-- | crawl-ref/source/beam.cc | 52 |
1 files changed, 39 insertions, 13 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc index 34b544aa24..adc278cc61 100644 --- a/crawl-ref/source/beam.cc +++ b/crawl-ref/source/beam.cc @@ -2099,7 +2099,11 @@ int mons_adjust_flavoured(monsters *monster, bolt &pbolt, int hurted, if (!hurted) { if (doFlavouredEffects) - simple_monster_message(monster, " appears unharmed."); + { + simple_monster_message(monster, + (original > 0) ? " completely resists." + : " appears unharmed."); + } } else if (original > hurted) { @@ -2135,7 +2139,11 @@ int mons_adjust_flavoured(monsters *monster, bolt &pbolt, int hurted, if (!hurted) { if (doFlavouredEffects) - simple_monster_message(monster, " appears unharmed."); + { + simple_monster_message(monster, + (original > 0) ? " completely resists." + : " appears unharmed."); + } } else if (original > hurted) { @@ -2156,7 +2164,11 @@ int mons_adjust_flavoured(monsters *monster, bolt &pbolt, int hurted, if (!hurted) { if (doFlavouredEffects) - simple_monster_message(monster, " appears unharmed."); + { + simple_monster_message(monster, + (original > 0) ? " completely resists." + : " appears unharmed."); + } } break; @@ -2167,7 +2179,11 @@ int mons_adjust_flavoured(monsters *monster, bolt &pbolt, int hurted, if (!hurted) { if (doFlavouredEffects) - simple_monster_message(monster, " appears unharmed."); + { + simple_monster_message(monster, + (original > 0) ? " completely resists." + : " appears unharmed."); + } } break; @@ -2179,7 +2195,11 @@ int mons_adjust_flavoured(monsters *monster, bolt &pbolt, int hurted, if (!hurted && res > 0) { if (doFlavouredEffects) - simple_monster_message(monster, " appears unharmed."); + { + simple_monster_message(monster, + (original > 0) ? " completely resists." + : " appears unharmed."); + } } else if (res <= 0 && doFlavouredEffects && !one_chance_in(3)) poison_monster(monster, pbolt.whose_kill()); @@ -2212,29 +2232,31 @@ int mons_adjust_flavoured(monsters *monster, bolt &pbolt, int hurted, if (mons_res_negative_energy(monster) == 3) { if (doFlavouredEffects) - simple_monster_message(monster, " appears unharmed."); + simple_monster_message(monster, " completely resists."); hurted = 0; } else { - // Early out for tracer/no side effects. + // Early out if no side effects. if (!doFlavouredEffects) return (hurted); + if (you.can_see(monster)) + pbolt.obvious_effect = true; + monster->drain_exp(pbolt.agent()); - pbolt.obvious_effect = true; if (YOU_KILL(pbolt.thrower)) did_god_conduct(DID_NECROMANCY, 2, pbolt.effect_known); - } // end else + } break; case BEAM_MIASMA: if (mons_res_negative_energy(monster) == 3) { if (doFlavouredEffects) - simple_monster_message(monster, " appears unharmed."); + simple_monster_message(monster, " completely resists."); hurted = 0; } @@ -2323,7 +2345,11 @@ int mons_adjust_flavoured(monsters *monster, bolt &pbolt, int hurted, if (resist > 2) { if (doFlavouredEffects) - simple_monster_message(monster, " appears unharmed."); + { + simple_monster_message(monster, + (original > 0) ? " completely resists." + : " appears unharmed."); + } hurted = 0; } @@ -4034,7 +4060,7 @@ bool bolt::determine_damage(monsters* mon, int& preac, int& postac, int& final, postac = std::max(postac, 0); // Don't do side effects (beam might miss or be a tracer). - final = mons_adjust_flavoured(mon, *this, preac, false); + final = mons_adjust_flavoured(mon, *this, postac, false); return (true); } @@ -4455,7 +4481,7 @@ void bolt::affect_monster(monsters* mon) if (!engulfs && !test_beam_hit(beam_hit, random2(mon->ev))) { // If the PLAYER cannot see the monster, don't tell them anything! - if (player_monster_visible(mon) && mons_near(mon)) + if (you.can_see(mon)) { msg::stream << "The " << name << " misses " << mon->name(DESC_NOCAP_THE) << '.' << std::endl; |