summaryrefslogtreecommitdiffstats
path: root/crawl-ref
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-09 15:45:46 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2008-01-09 15:45:46 +0000
commit1fee14c432c2c4398e04b486c6169dde728c94ab (patch)
tree27f40bd7fbb320f621165b125e973860df45cbd5 /crawl-ref
parentf2a95ba0d453ba6685ed29201beda8a2f703ab79 (diff)
downloadcrawl-ref-1fee14c432c2c4398e04b486c6169dde728c94ab.tar.gz
crawl-ref-1fee14c432c2c4398e04b486c6169dde728c94ab.zip
First cut at new multilevel resists for monsters, needs a lot of work - suggestions welcome.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@3232 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref')
-rw-r--r--crawl-ref/source/beam.cc21
-rw-r--r--crawl-ref/source/mon-data.h114
-rw-r--r--crawl-ref/source/mon-util.cc53
-rw-r--r--crawl-ref/source/mon-util.h10
-rw-r--r--crawl-ref/source/monstuff.cc4
-rw-r--r--crawl-ref/source/ouch.cc2
6 files changed, 118 insertions, 86 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc
index 29719a3886..55461d0bcd 100644
--- a/crawl-ref/source/beam.cc
+++ b/crawl-ref/source/beam.cc
@@ -1599,10 +1599,14 @@ int mons_adjust_flavoured( monsters *monster, bolt &pbolt,
{
case BEAM_FIRE:
case BEAM_STEAM:
- hurted = resist_adjust_damage(monster,
- monster->res_fire(),
- hurted,
- true);
+ hurted =
+ resist_adjust_damage(
+ monster,
+ pbolt.flavour == BEAM_FIRE
+ ? monster->res_fire()
+ : monster->res_steam(),
+ hurted,
+ true);
if (!hurted)
{
if (doFlavouredEffects)
@@ -1623,7 +1627,14 @@ int mons_adjust_flavoured( monsters *monster, bolt &pbolt,
else
{
if (doFlavouredEffects)
- simple_monster_message(monster, " is burned terribly!");
+ {
+ if (pbolt.flavour == BEAM_FIRE)
+ simple_monster_message(monster,
+ " is burned terribly!");
+ else
+ simple_monster_message(monster,
+ " is scalded terribly!");
+ }
}
}
break;
diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h
index 5a094e8c72..08f6e8eeec 100644
--- a/crawl-ref/source/mon-data.h
+++ b/crawl-ref/source/mon-data.h
@@ -319,7 +319,7 @@
{
MONS_PHANTOM, 'p', BLUE, "phantom",
M_EVIL | M_SPECIAL_ABILITY,
- MR_RES_POISON | MR_RES_COLD,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2),
0, 5, MONS_PHANTOM, MONS_PHANTOM, MH_UNDEAD, -4,
{ {AT_HIT, AF_BLINK, 10}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 7, 3, 5, 0 },
@@ -390,7 +390,7 @@
{
MONS_FIRE_VORTEX, 'v', RED, "fire vortex",
M_LEVITATE | M_CONFUSED | M_INSUBSTANTIAL,
- MR_RES_POISON | MR_RES_FIRE | MR_VUL_COLD | MR_RES_ELEC,
+ MR_RES_POISON | mrd(MR_RES_FIRE, 3) | MR_VUL_COLD | MR_RES_ELEC,
0, 5, MONS_FIRE_VORTEX, MONS_FIRE_VORTEX, MH_NONLIVING, MAG_IMMUNE,
{ {AT_HIT, AF_FIRE, 30}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 3, 3, 5, 0 },
@@ -436,7 +436,7 @@
{
MONS_ZOMBIE_SMALL, 'z', BROWN, "small zombie",
M_EVIL,
- MR_RES_POISON | MR_RES_COLD,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2),
0, 6, MONS_ZOMBIE_SMALL, MONS_ZOMBIE_SMALL, MH_UNDEAD, -1,
{ {AT_HIT, AF_PLAIN, 10}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 1, 5, 5, 0 },
@@ -480,7 +480,7 @@
{
MONS_DRAGON, 'D', GREEN, "dragon",
M_FLIES | M_SPECIAL_ABILITY | M_WARM_BLOOD,
- MR_RES_POISON | MR_RES_FIRE | MR_VUL_COLD,
+ MR_RES_POISON | mrd(MR_RES_FIRE, 2) | MR_VUL_COLD,
2200, 12, MONS_DRAGON, MONS_DRAGON, MH_NATURAL, -4,
{ {AT_BITE, AF_PLAIN, 20}, {AT_CLAW, AF_PLAIN, 13}, {AT_CLAW, AF_PLAIN, 13}, AT_NO_ATK },
{ 12, 5, 5, 0 },
@@ -537,7 +537,7 @@
{
MONS_ICE_BEAST, 'I', WHITE, "ice beast",
M_NO_FLAGS,
- MR_RES_POISON | MR_RES_ASPHYX | MR_VUL_FIRE | MR_RES_COLD,
+ MR_RES_POISON | MR_RES_ASPHYX | MR_VUL_FIRE | mrd(MR_RES_COLD, 3),
0, 12, MONS_ICE_BEAST, MONS_ICE_BEAST, MH_NATURAL, -3,
{ {AT_HIT, AF_COLD, 5}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 5, 3, 5, 0 },
@@ -548,7 +548,7 @@
{
MONS_JELLY, 'J', LIGHTRED, "jelly",
M_SEE_INVIS | M_SPLITS | M_AMPHIBIOUS | M_ACID_SPLASH,
- MR_RES_POISON | MR_RES_ASPHYX | MR_RES_ACID,
+ MR_RES_POISON | MR_RES_ASPHYX | mrd(MR_RES_ACID, 3),
0, 13, MONS_JELLY, MONS_JELLY, MH_NATURAL, -3,
{ {AT_HIT, AF_ACID, 8}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 3, 5, 5, 0 },
@@ -570,7 +570,7 @@
{
MONS_LICH, 'L', WHITE, "lich",
M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_EVIL,
- MR_RES_POISON | MR_RES_COLD | MR_RES_ELEC,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2) | MR_RES_ELEC,
0, 16, MONS_LICH, MONS_LICH, MH_UNDEAD, -11,
{ {AT_TOUCH, AF_DRAIN_XP, 15}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 20, 2, 4, 0 },
@@ -726,7 +726,7 @@
{
MONS_ZOMBIE_LARGE, 'Z', BROWN, "large zombie",
M_EVIL,
- MR_RES_POISON | MR_RES_COLD,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2),
0, 6, MONS_ZOMBIE_SMALL, MONS_ZOMBIE_LARGE, MH_UNDEAD, -1,
{ {AT_HIT, AF_PLAIN, 23}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 6, 3, 5, 0 },
@@ -830,7 +830,7 @@
{
MONS_WIGHT, 'W', LIGHTGREY, "wight",
M_EVIL,
- MR_RES_POISON | MR_RES_COLD,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2),
0, 10, MONS_WRAITH, MONS_WIGHT, MH_UNDEAD, -4,
{ {AT_HIT, AF_DRAIN_XP, 8}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 3, 3, 5, 0 },
@@ -863,7 +863,7 @@
{
MONS_SHADOW, ' ', BLACK, "shadow",
M_SEE_INVIS | M_EVIL | M_INSUBSTANTIAL,
- MR_RES_POISON | MR_RES_COLD,
+ MR_RES_POISON | mrd(MR_RES_COLD, 3),
0, 10, MONS_WRAITH, MONS_SHADOW, MH_UNDEAD, -5,
{ {AT_HIT, AF_DRAIN_STR, 5}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 3, 3, 5, 0 },
@@ -874,7 +874,7 @@
{
MONS_HUNGRY_GHOST, 'p', GREEN, "hungry ghost",
M_SENSE_INVIS | M_FLIES | M_EVIL | M_INSUBSTANTIAL,
- MR_RES_POISON | MR_RES_COLD,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2),
0, 10, MONS_PHANTOM, MONS_HUNGRY_GHOST, MH_UNDEAD, -4,
{ {AT_HIT, AF_HUNGER, 5}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 7, 3, 5, 0 },
@@ -918,7 +918,7 @@
{
MONS_EFREET, 'E', RED, "efreet",
M_SPELLCASTER | M_LEVITATE | M_EVIL,
- MR_RES_POISON | MR_RES_FIRE | MR_VUL_COLD,
+ MR_RES_POISON | mrd(MR_RES_FIRE, 3) | MR_VUL_COLD,
0, 12, MONS_EFREET, MONS_EFREET, MH_DEMONIC, -3,
{ {AT_HIT, AF_PLAIN, 12}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 7, 3, 5, 0 },
@@ -995,7 +995,7 @@
{
MONS_ICE_DRAGON, 'D', WHITE, "ice dragon",
M_FLIES | M_SPECIAL_ABILITY,
- MR_RES_POISON | MR_VUL_FIRE | MR_RES_COLD,
+ MR_RES_POISON | MR_VUL_FIRE | mrd(MR_RES_COLD, 2),
2200, 10, MONS_DRAGON, MONS_ICE_DRAGON, MH_NATURAL, -3,
{ {AT_BITE, AF_PLAIN, 17}, {AT_CLAW, AF_PLAIN, 17}, {AT_CLAW, AF_PLAIN, 17}, AT_NO_ATK },
{ 12, 5, 5, 0 },
@@ -1017,7 +1017,7 @@
{
MONS_FREEZING_WRAITH, 'W', LIGHTBLUE, "freezing wraith",
M_LEVITATE | M_SEE_INVIS | M_EVIL,
- MR_RES_POISON | MR_VUL_FIRE | MR_RES_COLD,
+ MR_RES_POISON | MR_VUL_FIRE | mrd(MR_RES_COLD, 3),
0, 10, MONS_WRAITH, MONS_FREEZING_WRAITH, MH_UNDEAD, -4,
{ {AT_HIT, AF_COLD, 19}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 8, 3, 5, 0 },
@@ -1117,7 +1117,7 @@
{
MONS_ICE_DEVIL, '2', WHITE, "ice devil",
M_EVIL,
- MR_RES_POISON | MR_VUL_FIRE | MR_RES_COLD,
+ MR_RES_POISON | MR_VUL_FIRE | mrd(MR_RES_COLD, 3),
0, 11, MONS_ICE_DEVIL, MONS_ICE_DEVIL, MH_DEMONIC, -6,
{ {AT_HIT, AF_COLD, 16}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 11, 3, 5, 0 },
@@ -1128,7 +1128,7 @@
{
MONS_BLUE_DEVIL, '3', BLUE, "blue devil",
M_FLIES | M_EVIL,
- MR_RES_POISON | MR_VUL_FIRE | MR_RES_COLD,
+ MR_RES_POISON | MR_VUL_FIRE | mrd(MR_RES_COLD, 3),
0, 10, MONS_BLUE_DEVIL, MONS_BLUE_DEVIL, MH_DEMONIC, -5,
{ {AT_HIT, AF_PLAIN, 21}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 7, 3, 5, 0 },
@@ -1195,7 +1195,7 @@
{
MONS_STEAM_DRAGON, 'D', LIGHTGREY, "steam dragon",
M_SPELLCASTER | M_FLIES,
- MR_NO_FLAGS,
+ MR_RES_STEAM,
1000, 10, MONS_DRAGON, MONS_STEAM_DRAGON, MH_NATURAL, -3,
{ {AT_BITE, AF_PLAIN, 12}, {AT_CLAW, AF_PLAIN, 6}, AT_NO_ATK, AT_NO_ATK },
{ 4, 5, 5, 0 },
@@ -1262,7 +1262,7 @@
{
MONS_SKELETON_SMALL, 'z', LIGHTGREY, "small skeleton",
M_EVIL,
- MR_RES_POISON | MR_RES_COLD,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2),
0, 10, MONS_SKELETON_SMALL, MONS_SKELETON_SMALL, MH_UNDEAD, -1,
{ AT_NO_ATK, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 0, 0, 0, 0 },
@@ -1274,7 +1274,7 @@
{
MONS_SKELETON_LARGE, 'Z', LIGHTGREY, "large skeleton",
M_EVIL,
- MR_RES_POISON | MR_RES_COLD,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2),
0, 10, MONS_SKELETON_SMALL, MONS_SKELETON_LARGE, MH_UNDEAD, -1,
{ AT_NO_ATK, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 0, 0, 0, 0 },
@@ -1285,7 +1285,7 @@
{
MONS_HELL_KNIGHT, '@', RED, "hell knight",
M_FIGHTER | M_SPELLCASTER | M_ACTUAL_SPELLS | M_WARM_BLOOD | M_EVIL,
- MR_RES_FIRE,
+ mrd(MR_RES_FIRE, 2),
550, 10, MONS_HUMAN, MONS_HUMAN, MH_NATURAL, -3,
{ {AT_HIT, AF_PLAIN, 13}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 10, 3, 6, 0 },
@@ -1367,7 +1367,7 @@
{
MONS_CLAY_GOLEM, '8', BROWN, "clay golem",
M_SEE_INVIS,
- MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC,
+ mrd(MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC, 3),
0, 10, MONS_CLAY_GOLEM, MONS_CLAY_GOLEM, MH_NONLIVING, MAG_IMMUNE,
{ {AT_HIT, AF_PLAIN, 11}, {AT_HIT, AF_PLAIN, 11}, AT_NO_ATK, AT_NO_ATK },
{ 8, 7, 3, 0 },
@@ -1389,7 +1389,7 @@
{
MONS_STONE_GOLEM, '8', LIGHTGREY, "stone golem",
M_NO_FLAGS,
- MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC,
+ mrd(MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC, 3),
0, 10, MONS_CLAY_GOLEM, MONS_STONE_GOLEM, MH_NONLIVING, MAG_IMMUNE,
{ {AT_HIT, AF_PLAIN, 28}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 12, 7, 4, 0 },
@@ -1400,7 +1400,7 @@
{
MONS_IRON_GOLEM, '8', CYAN, "iron golem",
M_SEE_INVIS,
- MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC,
+ mrd(MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC, 3),
0, 10, MONS_CLAY_GOLEM, MONS_IRON_GOLEM, MH_NONLIVING, MAG_IMMUNE,
{ {AT_HIT, AF_PLAIN, 35}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 15, 7, 4, 0 },
@@ -1411,7 +1411,7 @@
{
MONS_CRYSTAL_GOLEM, '8', WHITE, "crystal golem",
M_SEE_INVIS | M_SPEAKS,
- MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC,
+ mrd(MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC, 3),
0, 10, MONS_CLAY_GOLEM, MONS_CRYSTAL_GOLEM, MH_NONLIVING, MAG_IMMUNE,
{ {AT_HIT, AF_PLAIN, 40}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 13, 7, 4, 0 },
@@ -1444,7 +1444,7 @@
{
MONS_EARTH_ELEMENTAL, '#', BROWN, "earth elemental",
M_NO_FLAGS,
- MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC,
+ mrd(MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC, 3),
0, 10, MONS_EARTH_ELEMENTAL, MONS_EARTH_ELEMENTAL, MH_NONLIVING, MAG_IMMUNE,
{ {AT_HIT, AF_PLAIN, 40}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 6, 5, 5, 0 },
@@ -1454,8 +1454,8 @@
{
MONS_FIRE_ELEMENTAL, '#', YELLOW, "fire elemental",
- M_FLIES,
- MR_RES_POISON | MR_RES_HELLFIRE | MR_VUL_COLD | MR_RES_ELEC | M_INSUBSTANTIAL,
+ M_FLIES | M_INSUBSTANTIAL,
+ MR_RES_POISON | MR_RES_HELLFIRE | MR_VUL_COLD | MR_RES_ELEC,
0, 10, MONS_EARTH_ELEMENTAL, MONS_FIRE_ELEMENTAL, MH_NONLIVING, MAG_IMMUNE,
{ {AT_HIT, AF_FIRE, 5}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 6, 3, 5, 0 },
@@ -1466,7 +1466,7 @@
{
MONS_AIR_ELEMENTAL, 'v', LIGHTGREY, "air elemental",
M_LEVITATE | M_SEE_INVIS | M_FLIES | M_INSUBSTANTIAL,
- MR_RES_ELEC | MR_RES_POISON,
+ mrd(MR_RES_ELEC, 3) | MR_RES_POISON,
0, 5, MONS_EARTH_ELEMENTAL, MONS_AIR_ELEMENTAL, MH_NONLIVING, MAG_IMMUNE,
{ {AT_HIT, AF_PLAIN, 15}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 6, 3, 5, 0 },
@@ -1479,7 +1479,7 @@
{
MONS_ICE_FIEND, '1', WHITE, "Ice Fiend",
M_SPELLCASTER | M_FLIES | M_SEE_INVIS | M_EVIL,
- MR_RES_POISON | MR_VUL_FIRE | MR_RES_COLD,
+ MR_RES_POISON | MR_VUL_FIRE | mrd(MR_RES_COLD, 3),
0, 10, MONS_FIEND, MONS_ICE_FIEND, MH_DEMONIC, -12,
{ {AT_CLAW, AF_COLD, 25}, {AT_CLAW, AF_COLD, 25}, AT_NO_ATK, AT_NO_ATK },
{ 18, 3, 5, 0 },
@@ -1490,7 +1490,7 @@
{
MONS_SHADOW_FIEND, '1', DARKGREY, "Shadow Fiend",
M_SPELLCASTER | M_LEVITATE | M_SEE_INVIS | M_EVIL,
- MR_RES_POISON | MR_RES_COLD | MR_RES_ELEC,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2) | MR_RES_ELEC,
0, 10, MONS_FIEND, MONS_SHADOW_FIEND, MH_DEMONIC, -13,
{ {AT_HIT, AF_DRAIN_XP, 25}, {AT_HIT, AF_DRAIN_XP, 15}, {AT_HIT, AF_DRAIN_XP, 15}, AT_NO_ATK },
{ 18, 3, 5, 0 },
@@ -1545,7 +1545,7 @@
{
MONS_STORM_DRAGON, 'D', LIGHTBLUE, "storm dragon",
M_SPELLCASTER | M_FLIES | M_WARM_BLOOD,
- MR_RES_ELEC | MR_RES_COLD,
+ mrd(MR_RES_ELEC, 3) | MR_RES_COLD,
2800, 12, MONS_DRAGON, MONS_STORM_DRAGON, MH_NATURAL, -5,
{ {AT_BITE, AF_PLAIN, 25}, {AT_CLAW, AF_PLAIN, 15}, {AT_CLAW, AF_PLAIN, 15}, AT_NO_ATK },
{ 14, 5, 5, 0 },
@@ -1633,7 +1633,7 @@
{
MONS_INSUBSTANTIAL_WISP, 'p', LIGHTGREY, "insubstantial wisp",
M_LEVITATE | M_SPECIAL_ABILITY | M_INSUBSTANTIAL,
- MR_RES_ELEC | MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD,
+ mrd(MR_RES_ELEC | MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD, 2),
0, 17, MONS_INSUBSTANTIAL_WISP, MONS_INSUBSTANTIAL_WISP, MH_NONLIVING, MAG_IMMUNE,
{ {AT_HIT, AF_BLINK, 12}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 6, 1, 2, 0 },
@@ -1644,7 +1644,7 @@
{
MONS_VAPOUR, '#', LIGHTGREY, "vapour",
M_SPELLCASTER | M_LEVITATE | M_SEE_INVIS | M_INVIS | M_CONFUSED | M_INSUBSTANTIAL,
- MR_RES_ELEC | MR_RES_POISON,
+ mrd(MR_RES_ELEC, 3) | MR_RES_POISON,
0, 21, MONS_VAPOUR, MONS_VAPOUR, MH_NONLIVING, MAG_IMMUNE,
{ AT_NO_ATK, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 12, 2, 3, 0 },
@@ -1679,7 +1679,7 @@
{
MONS_DANCING_WEAPON, '(', BLACK, "dancing weapon",
M_FIGHTER | M_LEVITATE,
- MR_RES_POISON | MR_RES_HELLFIRE | MR_RES_COLD | MR_RES_ELEC,
+ mrd(MR_RES_POISON | MR_RES_HELLFIRE | MR_RES_COLD, 3) | MR_RES_ELEC,
0, 10, MONS_DANCING_WEAPON, MONS_DANCING_WEAPON, MH_NONLIVING, MAG_IMMUNE,
{ {AT_HIT, AF_PLAIN, 30}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 15, 0, 0, 15 },
@@ -1690,7 +1690,7 @@
{
MONS_TITAN, 'C', MAGENTA, "titan",
M_FIGHTER | M_SPELLCASTER | M_WARM_BLOOD | M_SENSE_INVIS | M_EVIL,
- MR_RES_ELEC,
+ mrd(MR_RES_ELEC, 2),
3500, 12, MONS_HILL_GIANT, MONS_TITAN, MH_NATURAL, -7,
{ {AT_HIT, AF_PLAIN, 55}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 20, 3, 5, 0 },
@@ -1882,7 +1882,7 @@
{
MONS_FIRE_GIANT, 'C', RED, "fire giant",
M_FIGHTER | M_SPELLCASTER | M_WARM_BLOOD | M_SENSE_INVIS | M_EVIL,
- MR_RES_FIRE,
+ mrd(MR_RES_FIRE, 2),
2400, 11, MONS_HILL_GIANT, MONS_FIRE_GIANT, MH_NATURAL, -4,
{ {AT_HIT, AF_PLAIN, 30}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 16, 3, 6, 0 },
@@ -1893,7 +1893,7 @@
{
MONS_FROST_GIANT, 'C', LIGHTBLUE, "frost giant",
M_FIGHTER | M_SPELLCASTER | M_WARM_BLOOD | M_SENSE_INVIS | M_EVIL,
- MR_RES_COLD,
+ mrd(MR_RES_COLD, 2),
2600, 11, MONS_HILL_GIANT, MONS_FROST_GIANT, MH_NATURAL, -4,
{ {AT_HIT, AF_PLAIN, 35}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 16, 4, 5, 0 },
@@ -1915,7 +1915,7 @@
{
MONS_SHADOW_DRAGON, 'D', DARKGREY, "shadow dragon",
M_SPELLCASTER | M_FLIES | M_SEE_INVIS | M_EVIL,
- MR_RES_POISON | MR_RES_COLD,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2),
2000, 12, MONS_DRAGON, MONS_SHADOW_DRAGON, MH_NATURAL, -5,
{ {AT_BITE, AF_DRAIN_XP, 20}, {AT_CLAW, AF_PLAIN, 15}, {AT_CLAW, AF_PLAIN, 15}, AT_NO_ATK },
{ 17, 5, 5, 0 },
@@ -2124,7 +2124,7 @@
{
MONS_WHITE_IMP, '5', WHITE, "white imp",
M_SPELLCASTER | M_FLIES | M_SPEAKS | M_EVIL,
- MR_RES_COLD,
+ mrd(MR_RES_COLD, 2),
0, 10, MONS_IMP, MONS_WHITE_IMP, MH_DEMONIC, -3,
{ {AT_HIT, AF_COLD, 4}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 2, 3, 5, 0 },
@@ -2212,7 +2212,7 @@
{
MONS_SMOKE_DEMON, '4', LIGHTGREY, "smoke demon",
M_SPELLCASTER | M_FLIES | M_EVIL | M_INSUBSTANTIAL,
- MR_RES_POISON | MR_RES_FIRE,
+ MR_RES_POISON | mrd(MR_RES_FIRE, 2),
0, 12, MONS_SMOKE_DEMON, MONS_SMOKE_DEMON, MH_DEMONIC, -6,
{ {AT_HIT, AF_PLAIN, 8}, {AT_HIT, AF_PLAIN, 5}, {AT_HIT, AF_PLAIN, 5}, AT_NO_ATK },
{ 7, 3, 5, 0 },
@@ -2256,7 +2256,7 @@
{
MONS_BLUE_DEATH, '1', BLUE, "Blue Death",
M_SPELLCASTER | M_FLIES | M_SEE_INVIS | M_EVIL,
- MR_RES_POISON | MR_VUL_FIRE | MR_RES_COLD | MR_RES_ELEC,
+ MR_RES_POISON | MR_VUL_FIRE | mrd(MR_RES_COLD, 2) | MR_RES_ELEC,
0, 14, MONS_BLUE_DEATH, MONS_BLUE_DEATH, MH_DEMONIC, -9,
{ {AT_HIT, AF_PLAIN, 20}, {AT_HIT, AF_PLAIN, 20}, AT_NO_ATK, AT_NO_ATK },
{ 12, 3, 5, 0 },
@@ -2311,7 +2311,7 @@
{
MONS_SHADOW_IMP, '5', DARKGREY, "shadow imp",
M_SPELLCASTER | M_FLIES | M_SPEAKS | M_EVIL,
- MR_RES_COLD | MR_RES_POISON,
+ mrd(MR_RES_COLD, 2) | MR_RES_POISON,
0, 11, MONS_IMP, MONS_SHADOW_IMP, MH_DEMONIC, -3,
{ {AT_HIT, AF_PLAIN, 6}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 2, 3, 5, 0 },
@@ -2322,7 +2322,7 @@
{
MONS_SHADOW_DEMON, '3', DARKGREY, "shadow demon",
M_SEE_INVIS | M_INVIS | M_EVIL,
- MR_RES_POISON | MR_RES_COLD,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2),
0, 12, MONS_SHADOW_DEMON, MONS_SHADOW_DEMON, MH_DEMONIC, -7,
{ {AT_HIT, AF_PLAIN, 21}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 6, 3, 5, 0 },
@@ -2445,7 +2445,7 @@
{
MONS_MOLTEN_GARGOYLE, 'g', RED, "molten gargoyle",
M_FLIES,
- MR_RES_POISON | MR_RES_ELEC | MR_RES_FIRE,
+ MR_RES_POISON | MR_RES_ELEC | mrd(MR_RES_FIRE, 3),
0, 12, MONS_GARGOYLE, MONS_MOLTEN_GARGOYLE, MH_NONLIVING, -6,
{ {AT_BITE, AF_FIRE, 12}, {AT_CLAW, AF_PLAIN, 8}, {AT_CLAW, AF_PLAIN, 8}, AT_NO_ATK },
{ 5, 3, 5, 0 },
@@ -3049,7 +3049,7 @@
{
MONS_XTAHUA, 'D', RED, "Xtahua",
M_SEE_INVIS | M_FLIES | M_SPECIAL_ABILITY | M_UNIQUE,
- MR_RES_POISON | MR_RES_FIRE | MR_VUL_COLD,
+ MR_RES_POISON | mrd(MR_RES_FIRE, 2) | MR_VUL_COLD,
0, 18, MONS_DRAGON, MONS_DRAGON, MH_NATURAL, -7,
{ {AT_BITE, AF_PLAIN, 35}, {AT_CLAW, AF_PLAIN, 20}, {AT_CLAW, AF_PLAIN, 17}, AT_NO_ATK },
{ 19, 0, 0, 133 },
@@ -3165,7 +3165,7 @@
{
MONS_ANCIENT_LICH, 'L', DARKGREY, "ancient lich",
M_SPELLCASTER | M_ACTUAL_SPELLS | M_SEE_INVIS | M_EVIL,
- MR_RES_POISON | MR_RES_COLD | MR_RES_FIRE | MR_RES_ELEC,
+ MR_RES_POISON | mrd(MR_RES_COLD, 2) | MR_RES_FIRE | MR_RES_ELEC,
0, 20, MONS_LICH, MONS_LICH, MH_UNDEAD, -14,
{ {AT_TOUCH, AF_DRAIN_XP, 20}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 27, 2, 4, 0 },
@@ -3202,7 +3202,7 @@
{
MONS_CURSE_SKULL, 'z', DARKGREY, "curse skull",
M_LEVITATE | M_SPELLCASTER | M_SEE_INVIS | M_EVIL,
- MR_RES_ELEC | MR_RES_POISON | MR_RES_HELLFIRE | MR_RES_COLD,
+ MR_RES_ELEC | MR_RES_POISON | MR_RES_HELLFIRE | mrd(MR_RES_COLD, 2),
0, 50, MONS_LICH, MONS_CURSE_SKULL, MH_UNDEAD, MAG_IMMUNE,
{ AT_NO_ATK, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 13, 0, 0, 66 },
@@ -3425,7 +3425,7 @@
{
MONS_PALE_DRACONIAN, 'd', LIGHTGREY, "pale draconian",
M_HUMANOID | M_COLD_BLOOD,
- MR_RES_FIRE,
+ MR_RES_STEAM,
900, 10, MONS_DRACONIAN, MONS_PALE_DRACONIAN, MH_NATURAL, -2,
{ {AT_HIT, AF_PLAIN, 20}, {AT_HIT, AF_PLAIN, 0}, {AT_HIT, AF_PLAIN, 0} },
{ 14, 5, 4, 0 },
@@ -3580,7 +3580,7 @@
{
MONS_ELECTRIC_GOLEM, '8', LIGHTCYAN, "electric golem",
M_SPELLCASTER | M_SEE_INVIS | M_SPEAKS,
- MR_RES_ELEC | MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD,
+ mrd(MR_RES_ELEC, 3) | MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD,
0, 10, MONS_CLAY_GOLEM, MONS_ELECTRIC_GOLEM, MH_NONLIVING, -8,
{ {AT_HIT, AF_ELEC, 15}, {AT_HIT, AF_ELEC, 15}, {AT_HIT, AF_PLAIN, 15}, {AT_HIT, AF_PLAIN, 15} },
{ 15, 7, 4, 0 },
@@ -3838,7 +3838,7 @@
{
MONS_LAVA_SNAKE, 'S', RED, "lava snake",
M_SPECIAL_ABILITY,
- MR_RES_FIRE | MR_VUL_COLD,
+ mrd(MR_RES_FIRE, 3) | MR_VUL_COLD,
0, 10, MONS_SNAKE, MONS_LAVA_SNAKE, MH_NATURAL, -3,
{ {AT_BITE, AF_FIRE, 7}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 3, 3, 5, 0 },
@@ -3849,7 +3849,7 @@
{ // mv: was another lava thing
MONS_SALAMANDER, 'S', LIGHTRED, "salamander",
M_FIGHTER | M_WARM_BLOOD,
- MR_RES_FIRE | MR_VUL_COLD,
+ mrd(MR_RES_FIRE, 3) | MR_VUL_COLD,
0, 10, MONS_SALAMANDER, MONS_SALAMANDER, MH_NATURAL, -3,
{ {AT_HIT, AF_FIRE, 23}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 14, 3, 5, 0 },
@@ -4011,7 +4011,7 @@
{
MONS_SIMULACRUM_SMALL, 'z', WHITE, "small simulacrum",
M_EVIL,
- MR_RES_POISON | MR_VUL_FIRE | MR_RES_COLD,
+ MR_RES_POISON | MR_VUL_FIRE | mrd(MR_RES_COLD, 3),
0, 6, MONS_SIMULACRUM_SMALL, MONS_SIMULACRUM_SMALL, MH_UNDEAD, -1,
{ {AT_HIT, AF_PLAIN, 6}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 2, 3, 5, 0 },
@@ -4023,7 +4023,7 @@
{
MONS_SIMULACRUM_LARGE, 'Z', WHITE, "large simulacrum",
M_EVIL,
- MR_RES_POISON | MR_VUL_FIRE | MR_RES_COLD,
+ MR_RES_POISON | MR_VUL_FIRE | mrd(MR_RES_COLD, 3),
0, 6, MONS_SIMULACRUM_SMALL, MONS_SIMULACRUM_LARGE, MH_UNDEAD, -1,
{ {AT_HIT, AF_PLAIN, 14}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 5, 3, 5, 0 },
@@ -4114,7 +4114,7 @@
{
MONS_ORANGE_STATUE, '8', LIGHTRED, "orange crystal statue",
M_SPECIAL_ABILITY | M_SPEAKS,
- MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC,
+ mrd(MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC, 2),
0, 10, MONS_CLAY_GOLEM, MONS_ORANGE_STATUE, MH_NONLIVING, MAG_IMMUNE,
{ AT_NO_ATK, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 10, 0, 0, 160 },
@@ -4125,7 +4125,7 @@
{
MONS_SILVER_STATUE, '8', WHITE, "silver statue",
M_SPECIAL_ABILITY | M_SPEAKS,
- MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC,
+ mrd(MR_RES_POISON | MR_RES_FIRE | MR_RES_COLD | MR_RES_ELEC, 2),
0, 10, MONS_CLAY_GOLEM, MONS_SILVER_STATUE, MH_NONLIVING, MAG_IMMUNE,
{ AT_NO_ATK, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 6, 0, 0, 150 },
@@ -4136,7 +4136,7 @@
{
MONS_ICE_STATUE, '8', LIGHTBLUE, "ice statue",
M_SPELLCASTER | M_SPEAKS,
- MR_RES_POISON | MR_VUL_FIRE | MR_RES_COLD | MR_RES_ELEC,
+ MR_RES_POISON | MR_VUL_FIRE | mrd(MR_RES_COLD, 3) | MR_RES_ELEC,
0, 10, MONS_CLAY_GOLEM, MONS_ICE_STATUE, MH_NONLIVING, MAG_IMMUNE,
{ AT_NO_ATK, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK },
{ 8, 0, 0, 70 },
@@ -4147,7 +4147,7 @@
{
MONS_MURRAY, 'z', LIGHTRED, "Murray",
M_SPELLCASTER | M_SEE_INVIS | M_EVIL | M_SPEAKS | M_UNIQUE,
- MR_RES_ELEC | MR_RES_POISON | MR_RES_HELLFIRE | MR_RES_COLD,
+ MR_RES_ELEC | MR_RES_POISON | MR_RES_HELLFIRE | mrd(MR_RES_COLD, 2),
0, 10, MONS_LICH, MONS_CURSE_SKULL, MH_UNDEAD, MAG_IMMUNE,
{ {AT_BITE, AF_PLAIN, 20}, {AT_BITE, AF_PLAIN, 20}, AT_NO_ATK, AT_NO_ATK },
{ 14, 0, 0, 180 },
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 8a9eef2355..ad2a983b57 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -931,7 +931,7 @@ int mons_res_steam( const monsters *mon )
int res = get_mons_resists(mon).steam;
if (mon->has_equipped(EQ_BODY_ARMOUR, ARM_STEAM_DRAGON_ARMOUR))
res += 3;
- return (res + mons_res_fire(mon) / 2);
+ return (res + mons_res_fire(mon) / 2);
}
int mons_res_fire( const monsters *mon )
@@ -5727,6 +5727,22 @@ mon_resist_def::mon_resist_def()
{
}
+short mon_resist_def::get_default_res_level(int resist, short level) const
+{
+ if (level != -100)
+ return level;
+ switch (resist)
+ {
+ case MR_RES_STEAM:
+ case MR_RES_ACID:
+ return 3;
+ case MR_RES_ELEC:
+ return 2;
+ default:
+ return 1;
+ }
+}
+
mon_resist_def::mon_resist_def(int flags, short level)
: elec(0), poison(0), fire(0), steam(0), cold(0), hellfire(0),
asphyx(0), acid(0), sticky_flame(false), pierce(0),
@@ -5734,27 +5750,28 @@ mon_resist_def::mon_resist_def(int flags, short level)
{
for (int i = 0; i < 32; ++i)
{
+ const short nl = get_default_res_level(1 << i, level);
switch (flags & (1 << i))
{
case MR_RES_STEAM: steam = 3; break;
- case MR_RES_ELEC: elec = level; break;
- case MR_RES_POISON: poison = level; break;
- case MR_RES_FIRE: fire = level; break;
- case MR_RES_HELLFIRE: hellfire = level; break;
- case MR_RES_COLD: cold = level; break;
- case MR_RES_ASPHYX: asphyx = level; break;
- case MR_RES_ACID: acid = level; break;
- case MR_VUL_ELEC: elec = -level; break;
- case MR_VUL_POISON: poison = -level; break;
- case MR_VUL_FIRE: fire = -level; break;
- case MR_VUL_COLD: cold = -level; break;
+ case MR_RES_ELEC: elec = nl; break;
+ case MR_RES_POISON: poison = nl; break;
+ case MR_RES_FIRE: fire = nl; break;
+ case MR_RES_HELLFIRE: hellfire = nl; break;
+ case MR_RES_COLD: cold = nl; break;
+ case MR_RES_ASPHYX: asphyx = nl; break;
+ case MR_RES_ACID: acid = nl; break;
+ case MR_VUL_ELEC: elec = -nl; break;
+ case MR_VUL_POISON: poison = -nl; break;
+ case MR_VUL_FIRE: fire = -nl; break;
+ case MR_VUL_COLD: cold = -nl; break;
- case MR_RES_PIERCE: pierce = level; break;
- case MR_RES_SLICE: slice = level; break;
- case MR_RES_BLUDGEON: bludgeon = level; break;
- case MR_VUL_PIERCE: pierce = -level; break;
- case MR_VUL_SLICE: slice = -level; break;
- case MR_VUL_BLUDGEON: bludgeon = -level; break;
+ case MR_RES_PIERCE: pierce = nl; break;
+ case MR_RES_SLICE: slice = nl; break;
+ case MR_RES_BLUDGEON: bludgeon = nl; break;
+ case MR_VUL_PIERCE: pierce = -nl; break;
+ case MR_VUL_SLICE: slice = -nl; break;
+ case MR_VUL_BLUDGEON: bludgeon = -nl; break;
case MR_RES_STICKY_FLAME: sticky_flame = true; break;
diff --git a/crawl-ref/source/mon-util.h b/crawl-ref/source/mon-util.h
index 9aaccb551e..d1fb88cf00 100644
--- a/crawl-ref/source/mon-util.h
+++ b/crawl-ref/source/mon-util.h
@@ -302,12 +302,20 @@ struct mon_resist_def
short bludgeon;
mon_resist_def();
- mon_resist_def(int flags, short level = 1);
+ mon_resist_def(int flags, short level = -100);
mon_resist_def operator | (const mon_resist_def &other) const;
const mon_resist_def &operator |= (const mon_resist_def &other);
+
+private:
+ short get_default_res_level(int resist, short level) const;
};
+inline mon_resist_def operator | (int a, const mon_resist_def &b)
+{
+ return (mon_resist_def(a) | b);
+}
+
typedef mon_resist_def mrd;
struct monsterentry
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 7dce081e7a..2373db61d8 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -5951,10 +5951,6 @@ static void mons_in_cloud(monsters *monster)
{
// couldn't be bothered coding for armour of res fire
- // what of whether it is wearing steam dragon armour? {dlb}
- if (monster->type == MONS_STEAM_DRAGON)
- return;
-
simple_monster_message(monster, " is engulfed in steam!");
const int steam_base_damage = steam_cloud_damage(cloud);
diff --git a/crawl-ref/source/ouch.cc b/crawl-ref/source/ouch.cc
index 2740c81c40..9f46a60812 100644
--- a/crawl-ref/source/ouch.cc
+++ b/crawl-ref/source/ouch.cc
@@ -116,7 +116,7 @@ int check_your_resists(int hurted, int flavour)
else if (resist < 0)
{
// We could use a superior message.
- mpr("It burns terribly!");
+ mpr("It scalds you terribly!");
hurted = hurted * 15 / 10;
}
break;