summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-04-03 16:33:59 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-04-03 16:33:59 +0000
commit7a807a464f67fd236f610b04ae7468554229e967 (patch)
tree162738e925bae98bb5aaf12eab832ebfcdd2cedf
parent6b15ccc669c1e4625d6964026c4ee2f923f454de (diff)
downloadcrawl-ref-7a807a464f67fd236f610b04ae7468554229e967.tar.gz
crawl-ref-7a807a464f67fd236f610b04ae7468554229e967.zip
Fire resistant monsters drown in lava instead of being incinerated.
Used correct check to see if monsters can drown. Monsters quaffing healing are also cured of confusion and rotting now (Erik). git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1201 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/externs.h1
-rw-r--r--crawl-ref/source/fight.cc5
-rw-r--r--crawl-ref/source/mon-util.cc5
-rw-r--r--crawl-ref/source/monstuff.cc9
4 files changed, 16 insertions, 4 deletions
diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h
index 108a168057..e5ab195f50 100644
--- a/crawl-ref/source/externs.h
+++ b/crawl-ref/source/externs.h
@@ -943,6 +943,7 @@ public:
bool alive() const;
coord_def pos() const;
bool swimming() const;
+ bool can_drown() const;
bool floundering() const;
size_type body_size(int psize = PSIZE_TORSO, bool base = false) const;
int damage_type(int attk = -1);
diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc
index 1e99499072..dc5c27120a 100644
--- a/crawl-ref/source/fight.cc
+++ b/crawl-ref/source/fight.cc
@@ -2767,10 +2767,11 @@ void melee_attack::mons_apply_attack_flavour(const mon_attack_def &attk)
special_damage = special_damage * 2 / 3;
if (needs_message && special_damage)
- mprf("%s %s %s!",
+ mprf("%s %s %s%s",
attacker->name(DESC_CAP_THE).c_str(),
attacker->conj_verb("shock").c_str(),
- defender->name(DESC_NOCAP_THE).c_str());
+ defender->name(DESC_NOCAP_THE).c_str(),
+ special_attack_punctuation().c_str());
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS, "Shock damage: %d", special_damage);
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index 95248327be..11db414ebf 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -2477,6 +2477,11 @@ bool monsters::floundering() const
&& !mons_flies(this));
}
+bool monsters::can_drown() const
+{
+ return (!mons_res_asphyx(this));
+}
+
size_type monsters::body_size(int /* psize */, bool /* base */) const
{
const monsterentry *e = seekmonster(type);
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 5d4e560337..34d0b9914e 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -2433,6 +2433,8 @@ static bool handle_potion(struct monsters *monster, bolt & beem)
{
monster->del_ench(ENCH_POISON);
monster->del_ench(ENCH_SICK);
+ monster->del_ench(ENCH_CONFUSION);
+ monster->del_ench(ENCH_ROT);
}
imbibed = true;
@@ -4239,7 +4241,7 @@ void mons_check_pool(monsters *mons, int killer)
if (lev == 2 || (lev && !mons->paralysed()))
return;
- const int grid = grd(mons->pos());
+ int grid = grd(mons->pos());
if ((grid == DNGN_LAVA || grid == DNGN_DEEP_WATER)
&& !monster_habitable_grid(mons, grid))
{
@@ -4252,9 +4254,12 @@ void mons_check_pool(monsters *mons, int killer)
ptr_monam(mons, DESC_CAP_THE),
(grid == DNGN_LAVA ? "lava" : "water"));
+ if (grid == DNGN_LAVA && mons_res_fire(mons) > 0)
+ grid = DNGN_DEEP_WATER;
+
// Even fire resistant monsters perish in lava, but undead can survive
// deep water.
- if (grid == DNGN_LAVA || mons->holiness() != MH_UNDEAD)
+ if (grid == DNGN_LAVA || mons->can_drown())
{
if (message)
{