diff options
-rw-r--r-- | crawl-ref/source/externs.h | 1 | ||||
-rw-r--r-- | crawl-ref/source/fight.cc | 5 | ||||
-rw-r--r-- | crawl-ref/source/mon-util.cc | 5 | ||||
-rw-r--r-- | 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) { |