Don't flow finite liquid into an unloaded chunk
authorproller <proller@github.com>
Sat, 6 Apr 2013 15:32:59 +0000 (19:32 +0400)
committerkwolekr <kwolekr@minetest.net>
Sat, 6 Apr 2013 16:09:59 +0000 (12:09 -0400)
src/map.cpp
src/mapgen_indev.cpp

index 5d6b79fb098dd1fb78dafc69a8a97fe95ec1daf9..39f5e30fbef8e32de3b3cc5076e9b3dc162c29bd 100644 (file)
@@ -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
index 5d455827ae4db28fe314731c096f935f6181589f..5c842b6a503fb39f32663704bc07fad279206052 100644 (file)
@@ -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;