summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-10 14:20:47 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-10 14:20:47 +0000
commit5bea4d013197ca276fbeb267ac9fc3fd2f37450c (patch)
tree6ed6964b76143cadafe5f8d5003fc9ed587d1ba3 /crawl-ref
parent56367110a570d3cd9e50e5dbcd55c936c9208080 (diff)
downloadcrawl-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')
-rw-r--r--crawl-ref/source/beam.cc69
-rw-r--r--crawl-ref/source/beam.h2
-rw-r--r--crawl-ref/source/enum.h22
-rw-r--r--crawl-ref/source/fight.cc85
-rw-r--r--crawl-ref/source/fight.h8
-rw-r--r--crawl-ref/source/item_use.cc2
-rw-r--r--crawl-ref/source/mon-util.cc3
-rw-r--r--crawl-ref/source/monstuff.cc3
-rw-r--r--crawl-ref/source/mstuff2.cc2
-rw-r--r--crawl-ref/source/ouch.cc105
-rw-r--r--crawl-ref/source/ouch.h2
-rw-r--r--crawl-ref/source/spells2.cc2
-rw-r--r--crawl-ref/source/spells2.h2
-rw-r--r--crawl-ref/source/spl-cast.cc10
14 files changed, 185 insertions, 132 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index dadbb50e87..fcf1ebe415 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -1465,7 +1465,9 @@ void fire_beam( bolt &pbolt, item_def *item )
if (pbolt.flavour == BEAM_RANDOM)
{
random_beam = true;
- pbolt.flavour = BEAM_FIRE + random2(7);
+ pbolt.flavour =
+ static_cast<beam_type>(
+ random_range(BEAM_FIRE, BEAM_ACID) );
}
if (!pbolt.affects_nothing)
@@ -1602,6 +1604,7 @@ int mons_adjust_flavoured( monsters *monster, bolt &pbolt,
hurted =
resist_adjust_damage(
monster,
+ pbolt.flavour,
pbolt.flavour == BEAM_FIRE
? monster->res_fire()
: monster->res_steam(),
@@ -1640,7 +1643,8 @@ int mons_adjust_flavoured( monsters *monster, bolt &pbolt,
break;
case BEAM_COLD:
- hurted = resist_adjust_damage(monster, monster->res_cold(),
+ hurted = resist_adjust_damage(monster, pbolt.flavour,
+ monster->res_cold(),
hurted, true);
if (!hurted)
{
@@ -1660,7 +1664,8 @@ int mons_adjust_flavoured( monsters *monster, bolt &pbolt,
break;
case BEAM_ELECTRICITY:
- hurted = resist_adjust_damage(monster, monster->res_elec(),
+ hurted = resist_adjust_damage(monster, pbolt.flavour,
+ monster->res_elec(),
hurted, true);
if (!hurted)
{
@@ -1670,7 +1675,8 @@ int mons_adjust_flavoured( monsters *monster, bolt &pbolt,
break;
case BEAM_ACID:
- hurted = resist_adjust_damage(monster, mons_res_acid(monster),
+ hurted = resist_adjust_damage(monster, pbolt.flavour,
+ mons_res_acid(monster),
hurted, true);
if (!hurted)
{
@@ -1682,7 +1688,8 @@ int mons_adjust_flavoured( monsters *monster, bolt &pbolt,
case BEAM_POISON:
{
int res = mons_res_poison(monster);
- hurted = resist_adjust_damage(monster, res, hurted, true);
+ hurted = resist_adjust_damage(monster, pbolt.flavour, res,
+ hurted, true);
if (!hurted)
{
if (doFlavouredEffects)
@@ -1696,8 +1703,8 @@ int mons_adjust_flavoured( monsters *monster, bolt &pbolt,
}
case BEAM_POISON_ARROW:
- hurted = resist_adjust_damage(monster,
- std::min(mons_res_poison(monster), 1),
+ hurted = resist_adjust_damage(monster, pbolt.flavour,
+ mons_res_poison(monster),
hurted);
if (hurted < original)
{
@@ -1801,36 +1808,31 @@ int mons_adjust_flavoured( monsters *monster, bolt &pbolt,
case BEAM_ICE:
/* ice - about 50% of damage is cold, other 50% is impact and
can't be resisted (except by AC, of course) */
- resist = mons_res_cold(monster);
- if (resist > 0)
+ hurted = resist_adjust_damage(monster, pbolt.flavour,
+ monster->res_cold(), hurted,
+ true);
+ if (hurted < original)
{
if (doFlavouredEffects)
simple_monster_message(monster, " partially resists.");
-
- hurted /= 2;
}
- else if (resist < 0)
+ else if (hurted > original)
{
if (doFlavouredEffects)
simple_monster_message(monster, " is frozen!");
-
- hurted *= 13;
- hurted /= 10;
}
break;
- } /* end of switch */
- if (pbolt.flavour == BEAM_LAVA) //jmf: lava != hellfire
- {
- resist = mons_res_fire(monster);
- if (resist > 0)
+ case BEAM_LAVA:
+ hurted = resist_adjust_damage(monster, pbolt.flavour,
+ monster->res_fire(), hurted, true);
+
+ if (hurted < original)
{
if (doFlavouredEffects)
simple_monster_message(monster, " partially resists.");
-
- hurted /= 2;
}
- else if (resist < 0)
+ else if (hurted > original)
{
if (mons_is_icy(monster))
{
@@ -1842,12 +1844,13 @@ int mons_adjust_flavoured( monsters *monster, bolt &pbolt,
if (doFlavouredEffects)
simple_monster_message(monster, " is burned terribly!");
}
-
- hurted *= 12;
- hurted /= 10;
}
- }
- else if (pbolt.name == "hellfire")
+ break;
+ default:
+ break;
+ } /* end of switch */
+
+ if (pbolt.name == "hellfire")
{
resist = mons_res_fire(monster);
if (resist > 2)
@@ -2971,7 +2974,7 @@ static void affect_place_explosion_clouds(bolt &beam, int x, int y)
static void affect_items(bolt &beam, int x, int y)
{
- char objs_vulnerable = -1;
+ object_class_type objs_vulnerable = OBJ_UNASSIGNED;
switch (beam.flavour)
{
@@ -2985,6 +2988,8 @@ static void affect_items(bolt &beam, int x, int y)
case BEAM_SPORE:
objs_vulnerable = OBJ_FOOD;
break;
+ default:
+ break;
}
if (beam.name == "hellfire")
@@ -2992,7 +2997,7 @@ static void affect_items(bolt &beam, int x, int y)
if (igrd[x][y] != NON_ITEM)
{
- if (objs_vulnerable != -1 &&
+ if (objs_vulnerable != OBJ_UNASSIGNED &&
mitm[igrd[x][y]].base_type == objs_vulnerable)
{
item_was_destroyed(mitm[igrd[x][y]], beam.beam_source);
@@ -4762,7 +4767,9 @@ static void explosion_cell(bolt &beam, int x, int y, bool drawOnly)
if (beam.flavour == BEAM_RANDOM)
{
random_beam = true;
- beam.flavour = BEAM_FIRE + random2(7);
+ beam.flavour =
+ static_cast<beam_type>(
+ random_range(BEAM_FIRE, BEAM_ACID) );
}
affect(beam, realx, realy);
diff --git a/crawl-ref/source/beam.h b/crawl-ref/source/beam.h
index ca54558727..1b90c3e3cd 100644
--- a/crawl-ref/source/beam.h
+++ b/crawl-ref/source/beam.h
@@ -105,7 +105,7 @@ struct bolt
int rangeMax; // maximum range
unsigned type; // missile gfx
int colour;
- int flavour;
+ beam_type flavour;
int source_x, source_y; // beam origin
dice_def damage;
int ench_power, hit;
diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h
index 2d571f028b..a0a33036a3 100644
--- a/crawl-ref/source/enum.h
+++ b/crawl-ref/source/enum.h
@@ -184,31 +184,33 @@ enum attribute_type
enum beam_type // beam[].flavour
{
- BEAM_MISSILE, // 0
- BEAM_MMISSILE, // 1 - and similarly unresistable things
+ BEAM_NONE, // 0
+
+ BEAM_MISSILE,
+ BEAM_MMISSILE, // and similarly irresistible things
BEAM_FIRE,
BEAM_COLD,
BEAM_MAGIC,
- BEAM_ELECTRICITY, // 5
+ BEAM_ELECTRICITY,
BEAM_POISON,
BEAM_NEG,
BEAM_ACID,
BEAM_MIASMA,
- // BEAM_EXPLOSION, // 10 - use is_explosion, and BEAM of flavour
- BEAM_SPORE = 11,
+
+ BEAM_SPORE,
BEAM_POISON_ARROW,
BEAM_HELLFIRE,
BEAM_NAPALM,
- BEAM_STEAM, // 15
+ BEAM_STEAM,
BEAM_HELLFROST,
BEAM_ENERGY,
- BEAM_HOLY, // 18 - aka beam of cleansing, golden flame
+ BEAM_HOLY, // aka beam of cleansing, golden flame
BEAM_FRAG,
- BEAM_LAVA, // 20
+ BEAM_LAVA,
BEAM_BACKLIGHT,
BEAM_SLEEP,
- BEAM_ICE, // 23
- BEAM_NUKE = 27, // 27
+ BEAM_ICE,
+ BEAM_NUKE,
BEAM_RANDOM, // currently translates into FIRE..ACID
// These used to be handled in the colour field:
diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc
index ebec677f8f..4128279a4d 100644
--- a/crawl-ref/source/fight.cc
+++ b/crawl-ref/source/fight.cc
@@ -1654,29 +1654,81 @@ bool melee_attack::player_monattk_hit_effects(bool mondied)
return (false);
}
-int resist_adjust_damage(actor *defender, int res, int rawdamage,
- bool ranged)
+static bool is_boolean_resist(beam_type flavour)
{
- if (defender->atype() == ACT_MONSTER && res >= 3)
- return (0);
+ switch (flavour)
+ {
+ case BEAM_ELECTRICITY:
+ return (true);
+ default:
+ return (false);
+ }
+}
+
+// Gets the percentage of the total damage of this damage flavour that can
+// be resisted.
+static inline int get_resistible_fraction(beam_type flavour)
+{
+ switch (flavour)
+ {
+ case BEAM_LAVA:
+ case BEAM_ICE:
+ return (50);
+
+ case BEAM_POISON_ARROW:
+ return (40);
+
+ default:
+ return (100);
+ }
+}
+
+// Adjusts damage for elemntal resists, electricity and poison.
+//
+// FIXME: Does not (yet) handle life draining, player acid damage
+// (does handle monster acid damage), miasma, and other exotic
+// attacks.
+//
+// beam_type is just use to determine the damage flavour, it does not
+// necessarily imply that the attack is a beam attack.
+int resist_adjust_damage(actor *defender, beam_type flavour,
+ int res, int rawdamage, bool ranged)
+{
+ if (!res)
+ return (rawdamage);
+
+ const bool monster = defender->atype() == ACT_MONSTER;
+
+ // Check if this is a resist that pretends to be boolean for
+ // damage purposes - only electricity at the moment, raw poison
+ // damage uses the normal formula.
+ int res_base = is_boolean_resist(flavour)? 2 : 1;
+ const int resistible_fraction = get_resistible_fraction(flavour);
+
+ int resistible = rawdamage * resistible_fraction / 100;
+ const int irresistible = rawdamage - resistible;
if (res > 0)
- rawdamage /= 1 + res * res;
+ {
+ if (monster && res >= 3)
+ resistible = 0;
+ else
+ resistible /= res_base + res * res;
+ }
else if (res < 0)
- rawdamage = rawdamage * (ranged? 15 : 20) / 10;
-
- if (rawdamage < 0)
- rawdamage = 0;
+ resistible = resistible * (ranged? 15 : 20) / 10;
- return (rawdamage);
+ return std::max(resistible + irresistible, 0);
}
void melee_attack::calc_elemental_brand_damage(
+ beam_type flavour,
int res,
const char *verb)
{
special_damage =
- resist_adjust_damage(defender, res, random2(damage_done) / 2 + 1);
+ resist_adjust_damage(defender, flavour, res,
+ random2(damage_done) / 2 + 1);
if (special_damage > 0 && verb && needs_message)
{
@@ -1854,12 +1906,13 @@ bool melee_attack::apply_damage_brand()
{
case SPWPN_FLAMING:
res = fire_res_apply_cerebov_downgrade( defender->res_fire() );
- calc_elemental_brand_damage(res, defender->is_icy()? "melt" : "burn");
+ calc_elemental_brand_damage(
+ BEAM_FIRE, res, defender->is_icy()? "melt" : "burn");
defender->expose_to_element(BEAM_FIRE);
break;
case SPWPN_FREEZING:
- calc_elemental_brand_damage(defender->res_cold(), "freeze");
+ calc_elemental_brand_damage(BEAM_COLD, defender->res_cold(), "freeze");
defender->expose_to_element(BEAM_COLD);
break;
@@ -2246,6 +2299,7 @@ void melee_attack::player_apply_staff_damage()
special_damage =
resist_adjust_damage(defender,
+ BEAM_ELECTRICITY,
defender->res_elec(),
player_staff_damage(SK_AIR_MAGIC));
@@ -2259,6 +2313,7 @@ void melee_attack::player_apply_staff_damage()
case STAFF_COLD:
special_damage =
resist_adjust_damage(defender,
+ BEAM_COLD,
defender->res_cold(),
player_staff_damage(SK_ICE_MAGIC));
@@ -2286,6 +2341,7 @@ void melee_attack::player_apply_staff_damage()
case STAFF_FIRE:
special_damage =
resist_adjust_damage(defender,
+ BEAM_FIRE,
defender->res_fire(),
player_staff_damage(SK_FIRE_MAGIC));
@@ -3272,6 +3328,7 @@ void melee_attack::mons_apply_attack_flavour(const mon_attack_def &attk)
special_damage =
resist_adjust_damage(defender,
+ BEAM_FIRE,
defender->res_fire(),
atk->hit_dice + random2(atk->hit_dice));
if (needs_message && special_damage)
@@ -3286,6 +3343,7 @@ void melee_attack::mons_apply_attack_flavour(const mon_attack_def &attk)
case AF_COLD:
special_damage =
resist_adjust_damage(defender,
+ BEAM_COLD,
defender->res_cold(),
atk->hit_dice + random2( 2 * atk->hit_dice ));
if (needs_message && special_damage)
@@ -3299,6 +3357,7 @@ void melee_attack::mons_apply_attack_flavour(const mon_attack_def &attk)
special_damage =
resist_adjust_damage(
defender,
+ BEAM_ELECTRICITY,
defender->res_elec(),
atk->hit_dice + random2( atk->hit_dice / 2 ));
diff --git a/crawl-ref/source/fight.h b/crawl-ref/source/fight.h
index 1a62c70b41..b61478a058 100644
--- a/crawl-ref/source/fight.h
+++ b/crawl-ref/source/fight.h
@@ -36,8 +36,8 @@ struct mon_attack_def;
* *********************************************************************** */
int effective_stat_bonus( int wepType = -1 );
-int resist_adjust_damage(actor *defender, int res, int rawdamage,
- bool ranged = false);
+int resist_adjust_damage(actor *defender, beam_type flavour,
+ int res, int rawdamage, bool ranged = false);
// added Sept 18, 2000 -- bwr
/* ***********************************************************************
@@ -166,7 +166,9 @@ private:
bool attack_shield_blocked(bool verbose);
bool apply_damage_brand();
- void calc_elemental_brand_damage(int res, const char *verb);
+ void calc_elemental_brand_damage(beam_type flavour,
+ int res,
+ const char *verb);
int fire_res_apply_cerebov_downgrade(int res);
void drain_defender();
void drain_player();
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index 84009cc8d5..7a7fc98d8e 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -3545,7 +3545,7 @@ static bool affix_weapon_enchantment()
beam.type = dchar_glyph(DCHAR_FIRED_BURST);
beam.damage = dice_def( 3, 10 );
- beam.flavour = 2;
+ beam.flavour = BEAM_FIRE;
beam.target_x = you.x_pos;
beam.target_y = you.y_pos;
beam.name = "fiery explosion";
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 8858ebcf29..96eb671584 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -4671,7 +4671,8 @@ void monsters::apply_enchantment(const mon_enchant &me)
case ENCH_STICKY_FLAME:
{
int dam =
- resist_adjust_damage(this, res_fire(), roll_dice( 2, 4 ) - 1);
+ resist_adjust_damage(this, BEAM_FIRE, res_fire(),
+ roll_dice( 2, 4 ) - 1);
if (dam > 0)
{
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 2373db61d8..4e50e232fa 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -5897,6 +5897,7 @@ static void mons_in_cloud(monsters *monster)
hurted +=
resist_adjust_damage( monster,
+ BEAM_FIRE,
monster->res_fire(),
((random2avg(16, 3) + 6) * 10) / speed );
@@ -5925,6 +5926,7 @@ static void mons_in_cloud(monsters *monster)
hurted +=
resist_adjust_damage( monster,
+ BEAM_COLD,
monster->res_cold(),
((6 + random2avg(16, 3)) * 10) / speed );
@@ -5957,6 +5959,7 @@ static void mons_in_cloud(monsters *monster)
hurted +=
resist_adjust_damage(
monster,
+ BEAM_STEAM,
monster->res_steam(),
(random2avg(steam_base_damage, 2) * 10) / speed);
diff --git a/crawl-ref/source/mstuff2.cc b/crawl-ref/source/mstuff2.cc
index b1ff4b3e38..4e59545ab5 100644
--- a/crawl-ref/source/mstuff2.cc
+++ b/crawl-ref/source/mstuff2.cc
@@ -1557,7 +1557,7 @@ bolt mons_spells( int spell_cast, int power )
beam.damage = dice_def( 1, 0 );
beam.ench_power = -1;
beam.type = 0;
- beam.flavour = -1;
+ beam.flavour = BEAM_NONE;
beam.thrower = KILL_MISC;
beam.is_beam = false;
beam.is_explosion = false;
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);
diff --git a/crawl-ref/source/ouch.h b/crawl-ref/source/ouch.h
index 6036f3f584..ddaf2e9cc1 100644
--- a/crawl-ref/source/ouch.h
+++ b/crawl-ref/source/ouch.h
@@ -65,7 +65,7 @@ enum kill_method_type
/* ***********************************************************************
* called from: bang - beam - effects - spells
* *********************************************************************** */
-int check_your_resists(int hurted, int flavour);
+int check_your_resists(int hurted, beam_type flavour);
// last updated 12may2000 {dlb}
diff --git a/crawl-ref/source/spells2.cc b/crawl-ref/source/spells2.cc
index ac94743fda..d01dd30478 100644
--- a/crawl-ref/source/spells2.cc
+++ b/crawl-ref/source/spells2.cc
@@ -1155,7 +1155,7 @@ int vampiric_drain(int pow, const dist &vmove)
} // end vampiric_drain()
// Note: this function is currently only used for Freeze. -- bwr
-char burn_freeze(int pow, char flavour)
+char burn_freeze(int pow, beam_type flavour)
{
int mgr = NON_MONSTER;
struct monsters *monster = 0; // NULL {dlb}
diff --git a/crawl-ref/source/spells2.h b/crawl-ref/source/spells2.h
index 213c542d0c..1578ac622f 100644
--- a/crawl-ref/source/spells2.h
+++ b/crawl-ref/source/spells2.h
@@ -45,7 +45,7 @@ int animate_dead(actor *caster, int power, beh_type corps_beh,
/* ***********************************************************************
* called from: spell
* *********************************************************************** */
-char burn_freeze(int pow, char b_f);
+char burn_freeze(int pow, beam_type b_f);
// last updated 24may2000 {dlb}
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc
index 0eb652ab90..05f2e17054 100644
--- a/crawl-ref/source/spl-cast.cc
+++ b/crawl-ref/source/spl-cast.cc
@@ -2983,7 +2983,7 @@ static void miscast_fire(int severity, const char* cause)
case 0:
mpr("You are blasted with fire.");
- ouch( check_your_resists( 5 + random2avg(29, 2), 2 ), 0,
+ ouch( check_your_resists( 5 + random2avg(29, 2), BEAM_FIRE ), 0,
KILLED_BY_WILD_MAGIC, cause );
expose_player_to_element(BEAM_FIRE, 5);
@@ -3016,7 +3016,7 @@ static void miscast_fire(int severity, const char* cause)
case 0:
mpr("You are blasted with searing flames!");
- ouch( check_your_resists( 9 + random2avg(33, 2), 2 ), 0,
+ ouch( check_your_resists( 9 + random2avg(33, 2), BEAM_FIRE ), 0,
KILLED_BY_WILD_MAGIC, cause );
expose_player_to_element(BEAM_FIRE, 10);
@@ -3117,7 +3117,7 @@ static void miscast_ice(int severity, const char* cause)
case 0:
mpr("Heat is drained from your body.");
- ouch(check_your_resists(5 + random2(6) + random2(7), 3), 0,
+ ouch(check_your_resists(5 + random2(6) + random2(7), BEAM_COLD), 0,
KILLED_BY_WILD_MAGIC, cause);
expose_player_to_element(BEAM_COLD, 4);
@@ -3151,7 +3151,7 @@ static void miscast_ice(int severity, const char* cause)
case 0:
mpr("You are blasted with ice!");
- ouch(check_your_resists(9 + random2avg(23, 2), 3), 0,
+ ouch(check_your_resists(9 + random2avg(23, 2), BEAM_ICE), 0,
KILLED_BY_WILD_MAGIC, cause);
expose_player_to_element(BEAM_COLD, 9);
@@ -3338,7 +3338,7 @@ static void miscast_air(int severity, const char* cause)
{
case 0:
mpr("Electricity courses through your body.");
- ouch(check_your_resists(4 + random2avg(9, 2), 5), 0,
+ ouch(check_your_resists(4 + random2avg(9, 2), BEAM_ELECTRICITY), 0,
KILLED_BY_WILD_MAGIC, cause);
break;
case 1: