From 99c905c5633ebb5aef0ed8af13553c38b892c5e2 Mon Sep 17 00:00:00 2001
From: Duane Robertson <duane@duanerobertson.com>
Date: Mon, 1 Feb 2016 02:09:43 -0600
Subject: [PATCH] Mgvalleys: fix riverbeds below sea level

Stop riverbeds from forming plateaus under sea. Minor corrections to
random lava/water placement.
---
 src/mapgen_valleys.cpp | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/mapgen_valleys.cpp b/src/mapgen_valleys.cpp
index f003ae63c..ceb2c774d 100644
--- a/src/mapgen_valleys.cpp
+++ b/src/mapgen_valleys.cpp
@@ -99,8 +99,8 @@ MapgenValleys::MapgenValleys(int mapgenid, MapgenParams *params, EmergeManager *
 	this->water_features_lim = rangelim(sp->water_features, 0, 10);
 
 	// a small chance of overflows if the settings are very high
-	this->cave_water_max_height = water_level + MYMAX(0, water_features_lim - 6) * 50;
-	this->lava_max_height       = water_level + MYMAX(0, lava_features_lim - 6) * 50;
+	this->cave_water_max_height = water_level + MYMAX(0, water_features_lim - 4) * 50;
+	this->lava_max_height       = water_level + MYMAX(0, lava_features_lim - 4) * 50;
 
 	tcave_cache = new float[csize.Y + 2];
 
@@ -482,7 +482,8 @@ float MapgenValleys::terrainLevelFromNoise(TerrainNoise *tn)
 
 		// base - depth : height of the bottom of the river
 		// water_level - 6 : don't make rivers below 6 nodes under the surface
-		mount = rangelim(base - depth, (float) (water_level - 6), mount);
+		// There is no logical equivalent to this using rangelim.
+		mount = MYMIN(MYMAX(base - depth, (float) (water_level - 6)), mount);
 
 		// Slope has no influence on rivers.
 		*tn->slope = 0.f;
@@ -846,8 +847,8 @@ void MapgenValleys::generateCaves(s16 max_stone_y)
 
 	// Reduce the odds of overflows even further.
 	if (node_max.Y > water_level) {
-		lava_chance /= 5;
-		water_chance /= 5;
+		lava_chance /= 3;
+		water_chance /= 3;
 	}
 
 	u32 index_2d = 0;
-- 
GitLab