From 182b3fd2831a7deb22d709e7c285eca3a57a5678 Mon Sep 17 00:00:00 2001
From: paramat <mat.gregory@virginmedia.com>
Date: Wed, 28 Oct 2015 22:58:39 +0000
Subject: Mgfractal: Add filler depth noise

---
 src/mapgen_fractal.cpp | 18 ++++++++++++------
 src/mapgen_fractal.h   |  3 ++-
 2 files changed, 14 insertions(+), 7 deletions(-)

(limited to 'src')

diff --git a/src/mapgen_fractal.cpp b/src/mapgen_fractal.cpp
index c359dc4c6..a33e19840 100644
--- a/src/mapgen_fractal.cpp
+++ b/src/mapgen_fractal.cpp
@@ -82,7 +82,8 @@ MapgenFractal::MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager *
 	this->julia_w = sp->julia_w;
 
 	//// 2D terrain noise
-	noise_seabed = new Noise(&sp->np_seabed, seed, csize.X, csize.Z);
+	noise_seabed       = new Noise(&sp->np_seabed, seed, csize.X, csize.Z);
+	noise_filler_depth = new Noise(&sp->np_filler_depth, seed, csize.X, csize.Z);
 
 	//// 3D terrain noise
 	noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z);
@@ -126,7 +127,7 @@ MapgenFractal::MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager *
 MapgenFractal::~MapgenFractal()
 {
 	delete noise_seabed;
-
+	delete noise_filler_depth;
 	delete noise_cave1;
 	delete noise_cave2;
 
@@ -158,9 +159,10 @@ MapgenFractalParams::MapgenFractalParams()
 	julia_z = 0.33;
 	julia_w = 0.33;
 
-	np_seabed = NoiseParams(-14, 9,  v3f(600, 600, 600), 41900, 5, 0.6, 2.0);
-	np_cave1  = NoiseParams(0,   12, v3f(128, 128, 128), 52534, 4, 0.5, 2.0);
-	np_cave2  = NoiseParams(0,   12, v3f(128, 128, 128), 10325, 4, 0.5, 2.0);
+	np_seabed       = NoiseParams(-14, 9,   v3f(600, 600, 600), 41900, 5, 0.6, 2.0);
+	np_filler_depth = NoiseParams(0,   1.2, v3f(150, 150, 150), 261,   3, 0.7, 2.0);
+	np_cave1        = NoiseParams(0,   12,  v3f(128, 128, 128), 52534, 4, 0.5, 2.0);
+	np_cave2        = NoiseParams(0,   12,  v3f(128, 128, 128), 10325, 4, 0.5, 2.0);
 }
 
 
@@ -183,6 +185,7 @@ void MapgenFractalParams::readParams(const Settings *settings)
 	settings->getFloatNoEx("mgfractal_julia_w", julia_w);
 
 	settings->getNoiseParams("mgfractal_np_seabed", np_seabed);
+	settings->getNoiseParams("mgfractal_np_filler_depth", np_filler_depth);
 	settings->getNoiseParams("mgfractal_np_cave1", np_cave1);
 	settings->getNoiseParams("mgfractal_np_cave2", np_cave2);
 }
@@ -207,6 +210,7 @@ void MapgenFractalParams::writeParams(Settings *settings) const
 	settings->setFloat("mgfractal_julia_w", julia_w);
 
 	settings->setNoiseParams("mgfractal_np_seabed", np_seabed);
+	settings->setNoiseParams("mgfractal_np_filler_depth", np_filler_depth);
 	settings->setNoiseParams("mgfractal_np_cave1", np_cave1);
 	settings->setNoiseParams("mgfractal_np_cave2", np_cave2);
 }
@@ -349,6 +353,7 @@ void MapgenFractal::calculateNoise()
 	int z = node_min.Z;
 
 	noise_seabed->perlinMap2D(x, z);
+	noise_filler_depth->perlinMap2D(x, z);
 
 	if (flags & MG_CAVES) {
 		noise_cave1->perlinMap3D(x, y, z);
@@ -492,7 +497,8 @@ MgStoneType MapgenFractal::generateBiomes(float *heat_map, float *humidity_map)
 					(c == c_water_source && (air_above || !biome))) {
 				biome = bmgr->getBiome(heat_map[index], humidity_map[index], y);
 				depth_top = biome->depth_top;
-				base_filler = depth_top + biome->depth_filler;
+				base_filler = MYMAX(depth_top + biome->depth_filler
+					+ noise_filler_depth->result[index], 0);
 				depth_water_top = biome->depth_water_top;
 
 				// Detect stone type for dungeons during every biome calculation.
diff --git a/src/mapgen_fractal.h b/src/mapgen_fractal.h
index 8e52dafec..ee947dba2 100644
--- a/src/mapgen_fractal.h
+++ b/src/mapgen_fractal.h
@@ -51,6 +51,7 @@ struct MapgenFractalParams : public MapgenSpecificParams {
 	float julia_w;
 
 	NoiseParams np_seabed;
+	NoiseParams np_filler_depth;
 	NoiseParams np_cave1;
 	NoiseParams np_cave2;
 
@@ -90,7 +91,7 @@ public:
 	float julia_w;
 
 	Noise *noise_seabed;
-
+	Noise *noise_filler_depth;
 	Noise *noise_cave1;
 	Noise *noise_cave2;
 
-- 
cgit v1.2.3