summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dgn-proclayouts.cc
diff options
context:
space:
mode:
authorBrendan Hickey <brendan@bhickey.net>2013-01-19 22:45:29 -0800
committerBrendan Hickey <brendan@bhickey.net>2013-01-19 22:47:19 -0800
commitfb643e29a818395adcb1d1ea940de67a5e5be81d (patch)
treee344a66fb5323110f0a0c276f3d15f1be7d88774 /crawl-ref/source/dgn-proclayouts.cc
parent868325f05bb1c21463f441010e1633279be5b3d5 (diff)
downloadcrawl-ref-fb643e29a818395adcb1d1ea940de67a5e5be81d.tar.gz
crawl-ref-fb643e29a818395adcb1d1ea940de67a5e5be81d.zip
Abyss: The Wastes
A very rare (0.0004% by area) layout that's very sparse and rapidly changing.
Diffstat (limited to 'crawl-ref/source/dgn-proclayouts.cc')
-rw-r--r--crawl-ref/source/dgn-proclayouts.cc27
1 files changed, 16 insertions, 11 deletions
diff --git a/crawl-ref/source/dgn-proclayouts.cc b/crawl-ref/source/dgn-proclayouts.cc
index 46434a4ee4..893a3b21eb 100644
--- a/crawl-ref/source/dgn-proclayouts.cc
+++ b/crawl-ref/source/dgn-proclayouts.cc
@@ -13,17 +13,6 @@
#include "mpr.h"
-bool less_dense_than(const dungeon_feature_type &a, const dungeon_feature_type &b)
-{
- return true;
- // Is only one feature solid?
- if (feat_is_solid(a) ^ feat_is_solid(b))
- return feat_is_solid(b);
- if (feat_is_water(a) || feat_is_lava(a) || feat_is_statue_or_idol(a) && b == DNGN_FLOOR)
- return true;
- return false;
-}
-
dungeon_feature_type _pick_pseudorandom_wall(uint64_t val)
{
static dungeon_feature_type features[] = {
@@ -145,6 +134,22 @@ RoilingChaosLayout::operator()(const coord_def &p, const uint32_t offset) const
}
ProceduralSample
+WastesLayout::operator()(const coord_def &p, const uint32_t offset) const
+{
+ double x = p.x;
+ double y = p.y;
+ double z = offset / 3;
+ worley::noise_datum n = worley::noise(x, y, z);
+ const uint32_t changepoint = offset + _get_changepoint(n, 3);
+ ProceduralSample sample = ChaosLayout(n.id[0], 10)(p, offset);
+ dungeon_feature_type feat = feat_is_solid(sample.feat())
+ ? DNGN_ROCK_WALL : DNGN_FLOOR;
+ return ProceduralSample(p, feat, min(sample.changepoint(), changepoint));
+}
+
+
+
+ProceduralSample
RiverLayout::operator()(const coord_def &p, const uint32_t offset) const
{
const double scale = 10000;