summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorproller <proller@github.com>2013-04-06 19:32:59 +0400
committerkwolekr <kwolekr@minetest.net>2013-04-06 12:09:59 -0400
commit120f02e20b941969be241363b93e2d918bb9e7a6 (patch)
tree96185074de6af33b3cea49e0876239f5c01825ab
parentbecd8c03fd4c79422f2f829c6ec844888c80356c (diff)
downloadminetest-120f02e20b941969be241363b93e2d918bb9e7a6.tar.gz
minetest-120f02e20b941969be241363b93e2d918bb9e7a6.tar.bz2
minetest-120f02e20b941969be241363b93e2d918bb9e7a6.zip
Don't flow finite liquid into an unloaded chunk
-rw-r--r--src/map.cpp12
-rw-r--r--src/mapgen_indev.cpp4
2 files changed, 10 insertions, 6 deletions
diff --git a/src/map.cpp b/src/map.cpp
index 5d6b79fb0..39f5e30fb 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -1763,6 +1763,11 @@ void Map::transformLiquidsFinite(std::map<v3s16, MapBlock*> & modified_blocks)
total_level = LIQUID_LEVEL_SOURCE * can_liquid_same_level;
}
+ // prevent lakes in air under unloaded blocks
+ if (p0.Y > water_level && neighbors[D_BOTTOM].n.getContent() == CONTENT_IGNORE) {
+ total_level = 0;
+ }
+
// calculate self level 5 blocks
u8 want_level =
total_level >= LIQUID_LEVEL_SOURCE * can_liquid_same_level
@@ -1807,8 +1812,8 @@ void Map::transformLiquidsFinite(std::map<v3s16, MapBlock*> & modified_blocks)
}
for (u16 ii = 0; ii < 7; ii++) // infinity and cave flood optimization
- if (liquid_levels_want[ii] >= 0 &&
- (neighbors[ii].i ||
+ if ( neighbors[ii].i ||
+ (liquid_levels_want[ii] >= 0 &&
(fast_flood && p0.Y < water_level &&
(initial_size >= 1000
&& ii != D_TOP
@@ -1916,8 +1921,7 @@ void Map::transformLiquidsFinite(std::map<v3s16, MapBlock*> & modified_blocks)
if(!suspect.empty()){
// Blame suspect
- RollbackScopeActor rollback_scope(m_gamedef->rollback(),
- suspect, true);
+ RollbackScopeActor rollback_scope(m_gamedef->rollback(), suspect, true);
// Get old node for rollback
RollbackNode rollback_oldnode(this, p0, m_gamedef);
// Set node
diff --git a/src/mapgen_indev.cpp b/src/mapgen_indev.cpp
index 5d455827a..5c842b6a5 100644
--- a/src/mapgen_indev.cpp
+++ b/src/mapgen_indev.cpp
@@ -265,9 +265,9 @@ void MapgenIndev::defineCave(Cave & cave, PseudoRandom ps, v3s16 node_min, bool
cave.part_max_length_rs = ps.range(2,4);
if (node_min.Y < -100 && !ps.range(0, farscale(0.2, node_min.X,node_min.Y,node_min.Z)*30)) { //huge
cave.flooded = !ps.range(0, 3);
- cave.tunnel_routepoints = ps.range(5, 20);
+ cave.tunnel_routepoints = ps.range(5, 30);
cave.min_tunnel_diameter = 30;
- cave.max_tunnel_diameter = ps.range(40, ps.range(80,120));
+ cave.max_tunnel_diameter = ps.range(40, ps.range(80,200));
} else {
cave.tunnel_routepoints = ps.range(5, ps.range(15,30));
cave.min_tunnel_diameter = 5;