diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-01-10 14:20:47 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-01-10 14:20:47 +0000 |
commit | 5bea4d013197ca276fbeb267ac9fc3fd2f37450c (patch) | |
tree | 6ed6964b76143cadafe5f8d5003fc9ed587d1ba3 /crawl-ref/source/ouch.cc | |
parent | 56367110a570d3cd9e50e5dbcd55c936c9208080 (diff) | |
download | crawl-ref-5bea4d013197ca276fbeb267ac9fc3fd2f37450c.tar.gz crawl-ref-5bea4d013197ca276fbeb267ac9fc3fd2f37450c.zip |
More resist fixes.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3242 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/ouch.cc')
-rw-r--r-- | crawl-ref/source/ouch.cc | 105 |
1 files changed, 42 insertions, 63 deletions
diff --git a/crawl-ref/source/ouch.cc b/crawl-ref/source/ouch.cc index 9f46a60812..43b605bebc 100644 --- a/crawl-ref/source/ouch.cc +++ b/crawl-ref/source/ouch.cc @@ -56,6 +56,7 @@ #include "chardump.h" #include "delay.h" #include "files.h" +#include "fight.h" #include "hiscores.h" #include "invent.h" #include "itemname.h" @@ -85,9 +86,10 @@ static void item_corrode( int itco ); /* NOTE: DOES NOT check for hellfire!!! */ -int check_your_resists(int hurted, int flavour) +int check_your_resists(int hurted, beam_type flavour) { int resist; + int original = hurted; #if DEBUG_DIAGNOSTICS mprf(MSGCH_DIAGNOSTICS, "checking resistance: flavour=%d", flavour ); @@ -107,44 +109,36 @@ int check_your_resists(int hurted, int flavour) switch (flavour) { case BEAM_STEAM: - resist = player_res_steam(); - if (resist > 0) - { + hurted = resist_adjust_damage(&you, flavour, + player_res_steam(), hurted, true); + if (hurted < original) canned_msg(MSG_YOU_RESIST); - hurted /= (1 + (resist * resist)); - } - else if (resist < 0) - { - // We could use a superior message. + else if (hurted > original) mpr("It scalds you terribly!"); - hurted = hurted * 15 / 10; - } break; case BEAM_FIRE: - resist = player_res_fire(); - if (resist > 0) - { + hurted = resist_adjust_damage(&you, flavour, + player_res_fire(), hurted, true); + if (hurted < original) canned_msg(MSG_YOU_RESIST); - hurted /= (1 + (resist * resist)); - } - else if (resist < 0) + else if (hurted > original) { mpr("It burns terribly!"); xom_is_stimulated(200); - hurted *= 15; - hurted /= 10; } break; case BEAM_COLD: + hurted = resist_adjust_damage(&you, flavour, + player_res_fire(), hurted, true); resist = player_res_cold(); - if (resist > 0) + if (hurted < original) { canned_msg(MSG_YOU_RESIST); hurted /= (1 + (resist * resist)); } - else if (resist < 0) + else if (hurted > original) { mpr("You feel a terrible chill!"); xom_is_stimulated(200); @@ -154,30 +148,24 @@ int check_your_resists(int hurted, int flavour) break; case BEAM_ELECTRICITY: - resist = player_res_electricity(); - if (resist >= 3) - { - canned_msg(MSG_YOU_RESIST); - hurted = 0; - } - else if (resist > 0) - { + hurted = resist_adjust_damage(&you, flavour, + player_res_electricity(), + hurted, true); + + if (hurted < original) canned_msg(MSG_YOU_RESIST); - hurted /= 3; - } break; - case BEAM_POISON: resist = player_res_poison(); - if (!resist) + if (resist <= 0) poison_player( coinflip() ? 2 : 1 ); - else - { + + hurted = resist_adjust_damage(&you, flavour, resist, + hurted, true); + if (resist > 0) canned_msg(MSG_YOU_RESIST); - hurted /= 3; - } break; case BEAM_POISON_ARROW: @@ -187,59 +175,47 @@ int check_your_resists(int hurted, int flavour) resist = player_res_poison(); if (!resist) - poison_player( 6 + random2(3), true ); - else - { - mpr("You partially resist."); - hurted /= 2; + poison_player( 4 + random2(3), true ); + else if (!you.is_undead) + poison_player( 2 + random2(3), true ); - if (!you.is_undead) - poison_player( 2 + random2(3), true ); - } + hurted = resist_adjust_damage(&you, flavour, resist, hurted); + if (hurted < original) + mpr("You partially resist."); break; case BEAM_NEG: resist = player_prot_life(); if (resist > 0) - { hurted -= (resist * hurted) / 3; - } drain_exp(); break; case BEAM_ICE: - resist = player_res_cold(); + hurted = resist_adjust_damage(&you, flavour, player_res_cold(), + hurted, true); - if (resist > 0) - { + if (hurted < original) mpr("You partially resist."); - hurted /= 2; - } - else if (resist < 0) + else if (hurted > original) { mpr("You feel a painful chill!"); xom_is_stimulated(200); - hurted *= 13; - hurted /= 10; } break; case BEAM_LAVA: - resist = player_res_fire(); + hurted = resist_adjust_damage(&you, flavour, player_res_fire(), + hurted, true); - if (resist > 1) - { + if (hurted < original) mpr("You partially resist."); - hurted /= (1 + resist); - } - else if (resist < 0) + else if (hurted > original) { mpr("It burns terribly!"); xom_is_stimulated(200); - hurted *= 15; - hurted /= 10; } break; @@ -266,6 +242,9 @@ int check_your_resists(int hurted, int flavour) hurted = 0; } break; + + default: + break; } /* end switch */ return (hurted); |