summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/spl-mis.cc
diff options
context:
space:
mode:
authorzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2009-07-20 02:35:00 +0000
committerzelgadis <zelgadis@c06c8d41-db1a-0410-9941-cceddc491573>2009-07-20 02:35:00 +0000
commitc52e267a7c4023d9ec765ebbf6ce0a44f811a636 (patch)
tree972ccc97ec8d85c858501cbc471f505cbd9190c6 /crawl-ref/source/spl-mis.cc
parentbbccc4cd6aa38a5c8fd62129ceb1de24b9709149 (diff)
downloadcrawl-ref-c52e267a7c4023d9ec765ebbf6ce0a44f811a636.tar.gz
crawl-ref-c52e267a7c4023d9ec765ebbf6ce0a44f811a636.zip
Bug 2820876: don't do a big cloud miscast in non-lethal mode if two player
turns in the cloud could kill the player. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@10344 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/spl-mis.cc')
-rw-r--r--crawl-ref/source/spl-mis.cc36
1 files changed, 19 insertions, 17 deletions
diff --git a/crawl-ref/source/spl-mis.cc b/crawl-ref/source/spl-mis.cc
index 643cebdfe0..ddbdde0782 100644
--- a/crawl-ref/source/spl-mis.cc
+++ b/crawl-ref/source/spl-mis.cc
@@ -541,6 +541,18 @@ bool MiscastEffect::_explosion()
return (true);
}
+bool MiscastEffect::_big_cloud(cloud_type cl_type, int power, int size,
+ int spread_rate)
+{
+ if (avoid_lethal( 2 * max_cloud_damage(cl_type, power) ))
+ return (false);
+
+ do_msg(true);
+ big_cloud(cl_type, kc, kt, target->pos(), power, size, spread_rate);
+
+ return (true);
+}
+
bool MiscastEffect::_lose_stat(unsigned char which_stat,
unsigned char stat_loss)
{
@@ -829,9 +841,7 @@ void MiscastEffect::_conjuration(int severity)
mon_msg_seen = "Smoke pours from @the_monster@'s @hands@!";
mon_msg_unseen = "Smoke appears from out of nowhere!";
- do_msg();
- big_cloud(CLOUD_GREY_SMOKE, kc, kt, target->pos(), 20,
- 7 + random2(7));
+ _big_cloud(CLOUD_GREY_SMOKE, 20, 7 + random2(7));
break;
case 1:
you_msg = "A wave of violent energy washes through your body!";
@@ -1999,9 +2009,7 @@ void MiscastEffect::_fire(int severity)
mon_msg_seen = "Smoke pours from @the_monster@'s @hands@!";
mon_msg_unseen = "Smoke appears out of nowhere!";
- do_msg();
- big_cloud(random_smoke_type(), kc, kt, target->pos(), 20,
- 7 + random2(7));
+ _big_cloud(random_smoke_type(), 20, 7 + random2(7));
break;
case 1:
@@ -2231,8 +2239,7 @@ void MiscastEffect::_ice(int severity)
mon_msg_seen = "Freezing gasses pour from @the_monster@'s "
"@hands@!";
- do_msg();
- big_cloud(CLOUD_COLD, kc, kt, target->pos(), 20, 8 + random2(4));
+ _big_cloud(CLOUD_COLD, 20, 8 + random2(4));
break;
}
break;
@@ -2526,8 +2533,7 @@ void MiscastEffect::_air(int severity)
"@hands@!";
mon_msg_unseen = "Noxious gasses appear from out of thin air!";
- do_msg();
- big_cloud(CLOUD_STINK, kc, kt, target->pos(), 20, 9 + random2(4));
+ _big_cloud(CLOUD_STINK, 20, 9 + random2(4));
break;
}
break;
@@ -2558,14 +2564,12 @@ void MiscastEffect::_air(int severity)
"@hands@!";
mon_msg_unseen = "Venomous gasses pour forth from the thin air!";
- do_msg();
- big_cloud(CLOUD_POISON, kc, kt, target->pos(), 20, 8 + random2(5));
+ _big_cloud(CLOUD_POISON, 20, 8 + random2(5));
break;
}
}
}
-// XXX MATT
void MiscastEffect::_poison(int severity)
{
switch (severity)
@@ -2666,8 +2670,7 @@ void MiscastEffect::_poison(int severity)
"@hands@!";
mon_msg_unseen = "Noxious gasses pour forth from the thin air!";
- do_msg();
- big_cloud(CLOUD_STINK, kc, kt, target->pos(), 20, 8 + random2(5));
+ _big_cloud(CLOUD_STINK, 20, 8 + random2(5));
break;
case 2:
@@ -2698,8 +2701,7 @@ void MiscastEffect::_poison(int severity)
"@hands@!";
mon_msg_unseen = "Venomous gasses pour forth from the thin air!";
- do_msg();
- big_cloud(CLOUD_POISON, kc, kt, target->pos(), 20, 7 + random2(7));
+ _big_cloud(CLOUD_POISON, 20, 7 + random2(7));
break;
case 2:
if (player_res_poison())