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/source/mon-util.cc | |
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/source/mon-util.cc')
-rw-r--r-- | crawl-ref/source/mon-util.cc | 53 |
1 files changed, 35 insertions, 18 deletions
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; |