Make poison and miasma clouds affect unbreathing creatures again
authorKate <601195+semitonal@users.noreply.github.com>
Sun, 4 Apr 2021 19:08:13 +0000 (20:08 +0100)
committerKate <601195+semitonal@users.noreply.github.com>
Mon, 3 May 2021 14:52:38 +0000 (15:52 +0100)
This was considered a bug when it was changed previously, however it was
actually intended behaviour (and only mephitic clouds explicitly mention in
their description that unbreathing creatures are immune). Unbreathing is a
fairly complicated mechanic so reducing the number of things it effects is
probably better, and the change also had some strange knock-on effects like
making grey draconians immune to sickness, which doesn't fit flavour-wise.

Revert to the original behaviour, and update some descriptions to hopefully
make it clearer.

This reverts commits e1f20c3b445d4e6f4d869a2e080ec252b498914c and
368d90fffdfadd77c1e5298e59cdf97a51697a67.

crawl-ref/source/cloud.cc
crawl-ref/source/dat/descript/ability.txt
crawl-ref/source/dat/descript/clouds.txt
crawl-ref/source/dat/species/djinni.yaml
crawl-ref/source/dat/species/gargoyle.yaml
crawl-ref/source/mon-act.cc
crawl-ref/source/monster.cc
crawl-ref/source/player.cc

index c419532..3daa808 100644 (file)
@@ -958,7 +958,7 @@ bool actor_cloud_immune(const actor &act, cloud_type type)
         case CLOUD_MEPHITIC:
             return act.res_poison() > 0 || act.is_unbreathing();
         case CLOUD_POISON:
-            return act.res_poison() > 0 || act.is_unbreathing();
+            return act.res_poison() > 0;
         case CLOUD_STEAM:
             return act.res_steam() > 0;
         case CLOUD_MIASMA:
index 25d3367..48ba388 100644 (file)
@@ -151,8 +151,9 @@ is increased by Invocations skill and piety.
 Vitalisation ability
 
 Temporarily provides protection from poison, confusion, petrification, and
-sickness, and increases and sustains your strength, intelligence and dexterity.
-The increases to your attributes are determined by Invocations skill.
+sickness, as well as the effects of clouds of foul pestilence. Your strength,
+intelligence and dexterity are also temporarily increased by a degree dependent
+on Invocations skill, and cannot be drained while the effect is active.
 %%%%
 Imprison ability
 
index c0b2f97..e54b3b9 100644 (file)
@@ -92,8 +92,8 @@ with undead and demonic creatures being greatly harmed.
 foul pestilence cloud
 
 # XXX: clarify gargoyles
-A cloud of dark miasma. Any living being not subject to Zin's divine protection
-will find themselves poisoned, and may also find their movements slowed.
+A cloud of foul pestilence. Any living being caught within it will find
+themselves poisoned, and may also find their movements slowed.
 %%%%
 thin mist cloud
 
index 3cbafa7..acc7aa5 100644 (file)
@@ -48,6 +48,9 @@ mutations:
     MUT_INNATE_CASTER: 1
     MUT_HP_CASTING: 1
     MUT_FLAT_HP: 1
+fake_mutations:
+  - long: You are immune to sickness and miasma.
+  - short: sickness immunity
 recommended_jobs:
   - JOB_GLADIATOR
   - JOB_TRANSMUTER
index 98cd49e..d2f76e0 100644 (file)
@@ -49,6 +49,9 @@ mutations:
     MUT_TORMENT_RESISTANCE: 1
   14:
     MUT_BIG_WINGS: 1
+fake_mutations:
+  - long: You are immune to sickness and miasma.
+  - short: sickness immunity
 recommended_jobs:
   - JOB_FIGHTER
   - JOB_GLADIATOR
index 0a8f817..4b85094 100644 (file)
@@ -2103,7 +2103,7 @@ static void _ancient_zyme_sicken(monster* mons)
 
     if (!is_sanctuary(you.pos())
         && !mons->wont_attack()
-        && you.undead_state() == US_ALIVE
+        && !you.res_miasma()
         && !you.duration[DUR_DIVINE_STAMINA]
         && cell_see_cell(you.pos(), mons->pos(), LOS_SOLID_SEE))
     {
index 77b7d4f..fd3b53c 100644 (file)
@@ -3867,8 +3867,7 @@ bool monster::res_sticky_flame() const
 bool monster::res_miasma(bool /*temp*/) const
 {
     if ((holiness() & (MH_HOLY | MH_DEMONIC | MH_UNDEAD | MH_NONLIVING))
-        || get_mons_resist(*this, MR_RES_MIASMA)
-        || is_unbreathing())
+        || get_mons_resist(*this, MR_RES_MIASMA))
     {
         return true;
     }
index 48cb6a3..b6747f1 100644 (file)
@@ -6133,7 +6133,6 @@ int player::res_poison(bool temp) const
 bool player::res_miasma(bool temp) const
 {
     if (has_mutation(MUT_FOUL_STENCH)
-        || has_mutation(MUT_UNBREATHING)
         || is_nonliving(temp)
         || temp && get_form()->res_miasma())
     {