From 7a807a464f67fd236f610b04ae7468554229e967 Mon Sep 17 00:00:00 2001 From: dshaligram Date: Tue, 3 Apr 2007 16:33:59 +0000 Subject: 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 --- crawl-ref/source/externs.h | 1 + crawl-ref/source/fight.cc | 5 +++-- crawl-ref/source/mon-util.cc | 5 +++++ crawl-ref/source/monstuff.cc | 9 +++++++-- 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) { -- cgit v1.2.3-54-g00ecf