diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-01-09 15:45:46 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-01-09 15:45:46 +0000 |
commit | 1fee14c432c2c4398e04b486c6169dde728c94ab (patch) | |
tree | 27f40bd7fbb320f621165b125e973860df45cbd5 /crawl-ref | |
parent | f2a95ba0d453ba6685ed29201beda8a2f703ab79 (diff) | |
download | crawl-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.cc | 21 | ||||
-rw-r--r-- | crawl-ref/source/mon-data.h | 114 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.cc | 53 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.h | 10 | ||||
-rw-r--r-- | crawl-ref/source/monstuff.cc | 4 | ||||
-rw-r--r-- | crawl-ref/source/ouch.cc | 2 |
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; |