summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/misc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/misc.cc')
-rw-r--r--crawl-ref/source/misc.cc27
1 files changed, 25 insertions, 2 deletions
diff --git a/crawl-ref/source/misc.cc b/crawl-ref/source/misc.cc
index d024069bb8..40ffda768f 100644
--- a/crawl-ref/source/misc.cc
+++ b/crawl-ref/source/misc.cc
@@ -1203,12 +1203,35 @@ void generate_random_blood_spatter_on_level()
{
int cx, cy;
int startprob;
- int max_cluster = 7 + random2(9);
+
+ // startprob is used to initialize the chance for neighbours being
+ // spattered, which will be decreased by 1 per recursion round.
+ // We then use one_chance_in(chance) to determine whether to spatter a
+ // given grid or not. Thus, startprob = 1 means that initially all
+ // surrounding grids will be spattered (3x3), and the _higher_ startprob
+ // the _lower_ the overall chance for spattering and the _smaller_ the
+ // bloodshed area.
+
+ const int max_cluster = 7 + random2(9);
+
+ // Lower chances for large bloodshed areas if we have many clusters,
+ // but increase chances if we have few.
+ // Chances for startprob are [1..3] for 7-9 clusters,
+ // ... [1..4] for 10-12 clusters, and
+ // ... [2..5] for 13-15 clusters.
+
+ int min_prob = 1;
+ int max_prob = 4;
+ if (max_cluster < 10)
+ max_prob--;
+ else if (max_cluster > 12)
+ min_prob++;
+
for (int i = 0; i < max_cluster; i++)
{
cx = 10 + random2(GXM - 10);
cy = 10 + random2(GYM - 10);
- startprob = 1 + random2(4);
+ startprob = min_prob + random2(max_prob);
if (allow_bleeding_on_square(cx, cy))
env.map[cx][cy].property = FPROP_BLOODY;